Matlab - Comparar SPLINE Matlab y Codigo SPLIN de Burden- Ayuda

   
Vista:

Comparar SPLINE Matlab y Codigo SPLIN de Burden- Ayuda

Publicado por Emmanuel (6 intervenciones) el 05/11/2013 08:44:28
Hola a todos, espero me puedan ayudar. Ando probando y no logro los resultados que deseo.
Explico lo siguiente:

***Primer Programa (usando el comando propio de matlab):
x=1:10;
y=[8 2.5 -2 0 5 2 4 7 4.5 2];
hold on
x2=1:0.05:10;
y2=interp1(x,y,x2,'spline')
plot(x,y,'o',x2,y2);

Consulta 1: Al imprimir Y2, se obtiene 181 valores que son el resultado de evaluar "x2", en el polinomio interpolador, y es más se ploteando los puntos x2 (consta de 181 puntos) con sus respectivas imágenes. Pregunta: ¿Los 181 valores obtenidos, que son las imágenes de x2, en qué polinomio fueron evaluados?Pregunto esto, pues el método "spline" genera 10 polinomios, y no sé cual de ellos considera el matlab

***Segundo Programa (Implemento algoritmo del burden)
=====================================================
function [a,b,c,d]=Spline3(X)
%Pasos básicos del algoritmo obtenidos del libro Análisis Numérico de
%Richard Burden, 2a. Edición, Grupo Editorial Iberoamérica.

n=length(X(1,:));

for i=1:n;
a(i)=X(2,i);
end

for i=1:n-1;
h(i)=X(1,i+1)-X(1,i);
end

for i=2:n-1;
alfa(i)=3/h(i)*(a(i+1)-a(i))-3/h(i-1)*(a(i)-a(i-1));
end

l(1)=1;
mu(1)=0;
z(1)=0;

for i=2:n-1;
l(i)=2*(X(1,i+1)-X(1,i-1))-h(i-1)*mu(i-1);
mu(i)=h(i)/l(i);
z(i)=(alfa(i)-h(i-1)*z(i-1))/l(i);
end

l(n)=1;
z(n)=0;
c(n)=0;

for i=n-1:-1:1;
c(i)=z(i)-mu(i)*c(i+1);
b(i)=(a(i+1)-a(i))/h(i)-h(i)*(c(i+1)+2*c(i))/3;
d(i)=(c(i+1)-c(i))/(3*h(i));
end

for i=1:n-1;
x=X(1,i):0.1:X(1,i+1);
y=a(i)+b(i)*(x-X(1,i))+c(i)*(x-X(1,i)).^2+d(i)*(x-X(1,i)).^3;
hold on;
plot(x,y,'b');
end

for i=1:n;
hold on;
plot (X(1,i),X(2,i),'*','MarkerEdgeColor','r','LineWidth',1);
title('Interpolación por "splines" de orden 3.');
end

=====================================================
Consulta 2:
Ahora para poder comparar resultados, considero x e y del programa 1, es decir: X=[x;y]. Ahora ejecuto [a,b,c,d]=Spline3(X), se aprecia que la gráfica es la misma con la del ejemplo anterior. Pregunta, ¿Por qué sucede esto, sólo he ploteado los datos, los puntos conocidos con sus imágenes correspondiente, en ningún momento he ploteado x2 ? Dicho de otra forma Pregunta ¿Por qué justo este ploteo, coincide con el ploteo del programa anterior, recordar que en el programa anterior yo he ploteado x2, y aquí sólo estoy ploteando los puntos conocidos.?.
Consulta 3 Ahora, siguiendo la idea de comparar con el programa 1, con el polinomio encontrado (gracias a la interpolación generada por el script) quiero encontrar la imagen de x2. Pregunta Es decir, quiero evaluar x2(que consta de 181 puntos, ver el programa 1) y obtener los 181 resultados que se obtuvo en el programa anterior ejecutando la interpolación propia del matlab. Sucede que el script origina 10 polinomios y no sé cual debo considerar para tener los mismos 181 resultados que obtengo ejecutando la sentencia propia del matlab.
Espero me puedan ayudar, de hecho he estado viendo este asunto y no logro resolverlo.
Estaré muy agradecido.
Gracias por su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder