Interpolación a Partir de Placa Delgada: Códigos en Matlab Programa Principal y Rutinas Auxiliares (comprimido) Programa Principal %Programa ejemplo del método de interpolación multivariada con funciones base radiales %usando el kernel r^4*log(r) y la s(u,v) = 5/4 + cos(5.4y)/6+6(3x-1)^2. % %Parámetros: %Entrada : Entero N - Número de nodos aleatorios para hacer la interpolación. % por ejemplo mirbf_thinplate(100) %Salida : Vector de aproximación de la función s(u,v) en los N puntos aleatorios. % %Autor : Daniel A. Cervantes Cabrera, danielcc@rv.unam.mx. %Supervisión : Pedro González Casanova, pedrogc@dgsca2.unam.mx. function z_aprox = mirbf_thinplate(N) %kernel r^4*log(r) func = 'phitps4'; %Generación de números aleatorios en el intervalo [x y] = gna(0,1,0,1,N); myc = []; %Vector solucion. sol = solucion(x,y); sol(N+1:N+6) = 0; %Creo la matriz for i=1:N for j=1:N r= sqrt((x(i)-x(j))*(x(i)-x(j))+(y(i)-y(j))*(y(i)-y(j))); A(i,j) = feval(func,r,myc,0); end end for i=1:N for j=1:6 switch j case 1, aij = x(i)^2; case 2, aij = y(i)^2; case 3, aij = x(i)*y(i); case 4, aij = x(i); case 5, aij = y(i); case 6, aij = 1; end P(i,j) = aij; end end O = zeros(6,6); M =[A P; P' O]; %Resuelvo el sistema algebráico lambda = M\(sol'); %Gr'afica del interpolante xm = linspace(0,1,101); ym = linspace(0,1,101); [t,nxym] = size(xm); for i=1:nxym for j=1:nxym zm(i,j) = interp(xm(j),ym(i),x,y,lambda,func); end end hold on [xm2d,ym2d] = meshgrid(0:.01:1); mesh(xm2d,ym2d,zm); led = sprintf('Interpolacion.'); title(led,'fontsize',18); xlabel(sprintf('Condicion %f',cond(M))); %Grafica de los puntos aleatorios for i=1:N za(i) = solucion(x(i),y(i)); plot3(x(i),y(i),za(i),'ro'); hold on plot(x(i),y(i),'r.'); end %Gr'afica de la soluci'on. figure [xsol,ysol] = meshgrid(0:.01:1); zsol = solucion(xsol,ysol); mesh(xsol,ysol,zsol); led = sprintf('Solucion.'); title(led,'fontsize',18);