Matlab - Ayuda Interpolacion Spline Cubico

 
Vista:
sin imagen de perfil

Ayuda Interpolacion Spline Cubico

Publicado por Emmanuel (6 intervenciones) el 13/12/2013 06:37:32
Espero que me pueda ayudar con lo siguiente, ya llevo días con esto y no logro resolver el problema. Presentaré 2 programas y al final pondré mi consulta.
Programa 1
1
2
3
4
5
6
x=1:10;
y=[8 2.5 -2 0 5 2 4 7 4.5 2];
hold on
x2=1:0.5:10
y2=interp1(x,y,x2,'spline')
plot(x,y,'o',x2,y2);

Programa 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function [a,b,c,d]=spline3Original_Consultar(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.5:X(1,i+1);
    m=length(x);
    fprintf('Siguientes %1.0f nodos de x \n',m);
    disp(x)
        y=a(i)+b(i)*(x-X(1,i))+c(i)*(x-X(1,i)).^2+d(i)*(x-X(1,i)).^3;
    fprintf('Imagenes de los  %1.0f nodos de x \n',m);
    disp(y)
 
    hold on;
    grid on;
    plot(x,y,'b'); %Plotea todos los segmentos
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
El progama 1 y 2, ambos son para hacer la interpolación por SPLINE CUBICOS. El programa 1, hace la interpolación usando la sentencia propia del matlab y al ejecutarlo me genera un total de 19 resultados. Por otro lado, al ejecutar el programa 2, me genera 27 resultados, pero 8 son repetidos (en los extremos, esto es por el método), así que en total también tengo 19 resultados. Sin embargo, estos 19 resultados no coinciden con los 19 resultados del programa 1. Los puntos en el lugar par, tienen imágenes diferentes, en los demás puntos si coinciden. ¿Cómo puedo hacer para que los valores de las imágenes coincidan?
Espero me puedan ayudar, ya llevo varios días con este problema y no logro resolverlo.
Saludos
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
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda Interpolacion Spline Cubico

Publicado por Dave (1094 intervenciones) el 13/12/2013 11:27:51
Hola Emmanuel;

Trate de revisar tu algoritmo, parte por parte, empieza por hacer pruebas con los ejemplos del libro, hasta donde recuerdo en ese libro hay algunos ejemplos de interpolación, verifica que coinciden tus resultados con los del libro.

Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda Interpolacion Spline Cubico

Publicado por Emmanuel (6 intervenciones) el 14/12/2013 18:31:06
Resulta que en el burden, no hay ejemplo con splin cubico sujeto. Hay con spline cubico natural, mas con sujeto (el que estoy usando) no hay. Otro dato que en el libro sólo hay ejemplos pero como resultado te arroja los coeficientes del polinomio, pero las imágenes sobre los que puntos que voy a interpolar no hay. El código lo he revisado y la verdad que no veo donde hay error :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda Interpolacion Spline Cubico

Publicado por Emmanuel (6 intervenciones) el 14/12/2013 18:34:29
El programa 2 lo ejecuto con los datos del programa 1. Es decir el vector X=[1:10;8 2.5 -2 0 5 2 4 7 4.5 2].
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar