viernes, 11 de noviembre de 2011

Spline Snoopy en Mat Lab ( por Raul Martinez)

Mediante los trazadores cubicos sujetos vamos a aproximar la parte
superior del perro que se muestra en la siguiente figura . En ella tambien aparece la curva a aproximar en una cuadricula a partir de la cual se construyeron los datos del listado que sigue a la citada figura

Ejecución de un Snoopy en MATLAB.
x1=[1 2 5 6 7 8 10 13 17 ];
y1=[3 3.7 3.9 4.2 5.7 6.6 7.1 6.7 4.5];        %(x1,y1) puntos de la Curva 1
rr1=length(x1);
[CoefP1,P1]=g_sujeto(x1,y1,1,-(2/3));      %P1 polinomio fragmentario de C.1

x2=[17 20.5 22 23 24 25 27 27.7];
y2=[4.5 7.45 6.9 6.1 5.6 5.8 5.4 4.1];         %(x2,y2) puntos de C.2
rr2=length(x2);
[CoefP2,P2]=g_sujeto(x2,y2,2,-4);             %P2 polinomio fragmentario de C.2

x3=[27.7 28 29 30];
y3=[4.1 4.3 4.1 3];                                       %(x3,y3) puntos de C.3
[CoefP3,P3]=g_sujeto(x3,y3,(1/3),-(3/2)); %P3 polinomio fragmentario de C.3

x=[x1(1:(rr1-1)), x2(1:(rr2-1)), x3];         %nodos
y=[y1(1:(rr1-1)), y2(1:(rr2-1)), y3];
Coef=[CoefP1; CoefP2; CoefP3];
P=mkpp(x,Coef);                                          %Polinomio fragmentario total
xp=1:(1/20):30;                                           %discretizacion de [1,30]
yp=ppval(P,xp);                                           %(xp,yp) puntos del trazador
clf
plot(xp,yp)
axis equal
observese como en la de¯nicion del polinomio fragmentario de la segunda curva ponemos el mandato

[CoefP2,P2]=g_sujeto(x2,y2,2,-4)

en lugar de [CoefP2,P2]=g_sujeto(x2,y2,3,-4) y es que creemos que se ajusta mejor al
dibujo una pendiente inicial de magnitud 2 que no de 3.

Ejecutamos ahora las ordenes

Q=polyfit(x,y,length(x)-1);
yp_lag=polyval(Q,xp);
figure(2),
plot(xp,yp_lag)

con el fin de observar las diferencias de realizar una interpolacion fragmentaria y una interpolacion total.

No hay comentarios:

Publicar un comentario