Tuesday, September 26, 2017

12va Clase Métodos Numéricos

Ejercicio:
Dados los datos,
  1. Graficar
>> X=(-2:0.5:7)';
>> Y=[86.6;80.9;78;75.9;76.3;77.1;78.2;78.1;78.3;76.8;73.1;68.2;62;52.9;43;32.1;21;11.4;4.8];
>> plot(X,Y,'*');
>>
fig 1.png

  1. Decidir si vale la pena intentar un ajuste linear, cuadrático o cúbico y ajustar los parámetros, graficar la fucnión hallada junto con los datos, hallar el error relativo

>> A=[X X.^0];
>> B=[X.^2 X X.^0];
>> C=[X.^3 X.^2 X X.^0];
>> a=pinv(A)*Y;
>> b=pinv(B)*Y;
>> c=pinv(C)*Y;
>> Fa=@(x) a(1)*X+a(2);
>> Fa=@(X) a(1)*X+a(2);
>> Fb=@(X) b(1)*X.^2+b(2)*X +b(3);
>> Fc=@(X) c(1)*X.^3+c(2)*X.^2+c(3)*X+c(4);
>> norm(Y-Fa(X))/norm(Y)

ans =

    0.1790

>> norm(Y-Fb(X))/norm(Y)

ans =

    0.0674

>> norm(Y-Fc(X))/norm(Y)

ans =

    0.0498

>>plot(X,Y,'*',X,Fa(X),X,Fb(X),X,Fc(X))


fig 2.png
  1. En caso de que parezca necesario probar con un polinomio de grado mayor.

>> D=[X.^4 X.^3 X.^2 X X.^0];
>> d=pinv(D)*Y;
>> Fd=@(X) d(1)*X.^4 + d(2)*X.^3+d(3)*X.^2 +d(4)*X + d(5);
>> norm(Y-Fd(X))/norm(Y)

ans =

    0.0107

>> plot(X,Y,'*',X,Fd(X))
>>
 fig 3.png




Funciones especiales de Matlab para ajustes polinómicos (solamente)

En vez de:
>> D=[X.^4 X.^3 X.^2 X X.^0];
>> d=pinv(D)*Y;

Puedo escribir:
>> d=polyfit(X,Y,4);

En vez de:
>> Fd=@(X) d(1)*X.^4 + d(2)*X.^3+d(3)*X.^2 +d(4)*X + d(5);

Puedo escribir:
>> Fd=@(X) polyval(d, X);

Ejercicio:
  1. Graficar
>> X=(0:0.01:8.99)';
>> Y=dato';
>> plot(X,Y,'*')
fig 4.png
b) Con el basic fitting probar polinomios y comparar.
Prueba con grado 10.
fig 5.png
c) Con polyfit y polyval hallar el ajuste polinomico de grado 10 y el error relativo.
>> e=polyfit(X,Y,10);
Warning: Polynomial is badly conditioned. Add points with distinct X
        values, reduce the degree of the polynomial, or try centering
        and scaling as described in HELP POLYFIT.
> In polyfit at 80
>> Fe=@(X)polyval(e,X);
>> plot(X,Y,'*',X,Fe(X))
>> norm(Y-Fe(X))/norm(Y)

ans =

    0.1695

>>


d) Probar ajuste con:
F1(X)= sin(X*pi)
F2(X)=cos(X*pi)
F3(X)=X^2
F4(X)=X
F5(X)=1

>> F=[sin(X.*pi) cos(X.*pi) X.^2 X X.^0];
>> f=pinv(F)*Y;
>> Ff=@(X) f(1)*sin(X.*pi)+f(2)*cos(X.*pi)+f(3)*X.^2+f(4)*X+f(5);
>> norm(Y-Ff(X))/norm(Y)

ans =

    0.0915

>> plot(X,Y,'*',X,Ff(X))
fig 6.png
EXPONENCIAL:

Si los puntos sugieren por ejemplo un comportamiento exponencial, debería aproximar con una ecuacion del tipo
Y=ka^X= e^pX+q
Donde p=lna y q=lnk

Puedo aplicar logaritmo a ambos lados:
ln(Y)=ln(ka^X)
ln(k)+ln(a^X)=ln(Y)
ln(a)*x + ln(k)*1=ln(Y)

Digamos b(1)=ln(a) b(2)=ln(k)

Hagamos un ejemplo:

  1. Graficar y observar que un ajuste exponencial parece adecuado (y=ka^x)
  2. Hallar k y a declarar F=@(X)k*a.^X;
  3. Graficar plot(X,Y,’*’,X,F(X)) hallar error relativo de ajuste.

>> X=(-2:0.5:5)’;
>> Y=[0.6;0.7;1;1.2;1.5;1.9;2.4;3;3.9;4.9;6.2;7.8;9.8;12.4;15.7];
>> plot(X,Y,'*')
fig 7.png
>> b=polyfit(X,log(Y),1)

b =

    0.4688    0.4114

>> k=exp(b(2));
>> a=exp(b(1));
>> F=@(X) k*a.^X;
>> plot(X,Y,'*',X,F(X))
>> norm(Y-F(X))/norm(Y)

ans =

    0.0051

>>
fig 8.png

No comments:

Post a Comment