Ejercicio:
Dados los datos,
- 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,'*');
>>
- 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))
- 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))
>>
Si los puntos sugieren por ejemplo un comportamiento exponencial, debería aproximar con una ecuacion del tipo
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:
- Graficar
>> X=(0:0.01:8.99)';
>> Y=dato';
>> plot(X,Y,'*')
b) Con el basic fitting probar polinomios y comparar.
Prueba con grado 10.
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)
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))
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:
- Graficar y observar que un ajuste exponencial parece adecuado (y=ka^x)
- Hallar k y a declarar F=@(X)k*a.^X;
- 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,'*')
>> 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
>>