Resumen Ajuste de Curva
-
Upload
rodolfo-leonardo-villablanca-acuna -
Category
Documents
-
view
16 -
download
0
Transcript of Resumen Ajuste de Curva
-
UNIVERSIDAD DE SANTIAGO DE CHILE FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA MECNICA METODOS NUMERICOS PARA LA INGENIERA
Resumen Metodos
Numericos
Ayudante: Rodolfo Leonardo Villablanca Acua
Fecha: 12/5/2014
Ajuste de curvas: Regresion por minimos
cuadrados.
-
Contenido Marco terico: ..................................................................................................................................... 3
Ajuste lineal: ........................................................................................................................................ 5
Ajuste Lineal MATLAB: .................................................................................................................... 6
Linealizacion: ............................................................................................................................... 8
Ajuste polinomial: ............................................................................................................................. 12
Ajuste polinomial MATLAB: ........................................................................................................... 13
Ajuste lineal multiple ........................................................................................................................ 15
Ajuste lineal mltiple MATLAB ...................................................................................................... 17
Eliminacin gaussiana: ...................................................................................................................... 18
Eliminacin gaussiana MATLAB ..................................................................................................... 18
Ajuste No-Lineal ................................................................................................................................ 19
Ajuste no lineal MATLAB ............................................................................................................... 21
-
Marco terico:
La linealizacin de una ecuacin es un paso previo a la optimizacin de los parmetros
que mejor ajustan un conjunto de datos experimentales.
Dado un conjunto de variables independientes x1, x2, x3 y una funcin y, es posible
calcular los valores a0, a1, a2 que mejor se ajustan a los datos experimentales segn la
ecuacin:
y = a0 + a1 x1 + a2 x22 +
Para ello se debe minimizar el error de la aproximacin respecto a cada uno de los
valores a0, a1, a2. Este error se define como el cuadrado de las diferencias entre los
valores predichos y los reales.
=( + )
2 =(0
=1
=1
+ 1 )2; y
= valor predicho
Lo que nosotros tratamos de buscar ac van a ser los valores de los coeficientes en
donde S va a ser mnimo, por lo tanto usamos la derivada para poder as encontrar el
mnimo valor donde la funcin:
(0=1 + 1 )
2
Vaya a ser mnima.
Entonces se aplica
(
0) = 2 (0 + 1 + 2
2 + )2
=0
= 0
(
1) = 2 (0 + 1 + 2
2 + )2
=0
= 0
(
) = 2
(0 + 1 + 2 2 + )
2
=0
= 0
-
Lo cual si lo vemos bien nos entrega n nmeros de ecuaciones con las cuales podemos
determinar el valor de los n coeficientes al resolver este sistema. Si las ordenamos de
manera matricial quedara de la siguiente forma:
(
=0
=0
2
=0
2
=0
=0
3
=0
+1
=0
2
=0
3
=0
=0
+1
=0
4
=0
+2
=0
+2
=0
()2
=0 )
[ 012]
=
(
=0
=0
2
=0
=0
)
Entonces lo nico que se tendra que hacer seria resolver esta matriz con
cualquier mtodo que sepamos y obtendramos los valores de los coeficientes. Ya
teniendo los valores es cosa de remplazar en la ecuacin inicial el valor de cada
uno de los coeficientes y tendramos como resultado el ajuste de nuestra nube de
puntos.
-
Ajuste lineal:
Como ya sabemos de que se trata el mtodo de mnimos cuadrados utilizaremos su definicin
para representar la forma que debera tener el polinomio para el ajuste de una nube de puntos
que simulan una lnea recta:
X= [1 2 3 4 5 6 7]; Y= [0.5 2.5 2.0 4.0 3.5 6.0 5.5];
Lo que podemos observar a simple vista es que a pesar de la corta extensin de los datos, esta
nube de puntos representa una lnea recta, para este tipo de casos podemos utilizar el ajuste lineal
y lo nico que necesitamos saber es la expresin matemtica para la lnea recta.
= 0 + 1 +
Como vimos en la teora de los mnimos cuadrados se generara de la siguiente forma la funcin S
= 0 1 + y
=0
= (0 1 + y)
=0
-
=2
=0
= (0 1 + )
=0
Entonces al saber la forma de la funcin S aplicando derivada a la funcin encontraramos los
valores de los coeficientes para los que S es mnimo, exactamente igual a lo que se vio en el marco
terico, no es necesario seguir con el procedimiento porque son solo derivadas y resolver el
sistema de dos incgnitas que es bastante simple.
Ajuste Lineal MATLAB:
clc clear all close all
syms x
%"nube de puntos" es para %un ejemplo bsico de cmo funciona el mtodo
de ajuste lineal, "Datos con el modelo de la ecuacin de potencias
y=a*x^b" son datos que al graficarlos quedan de una forma exponencial y
la parte de "Linealizacion en base logartmica es simplemente los datos
de la ecuacin de potencias aplicndoles x1=log(X)/log(10) %y1=log(Y)/log(10)
% $Nube de puntos X=[1 2 3 4 5 6 7]; Y=[0.5 2.5 2.0 4.0 3.5 6.0 5.5];
plot(X,Y)
ylim([0 max(Y)+1]) xlim([0 max(X)+1])
Pause(5)
% Datos con el modelo de la ecuacin de potencias y=a*x^b % X=[1 2 3 4 5] % Y=[0.5 1.7 3.4 5.7 8.4]
% Linealizacion en base logartmica % X=[0 0.301029995663981 0.477121254719662 0.602059991327962
0.698970004336019] % Y=[-0.301029995663981 0.230448921378274 0.531478917042255
0.755874855672491 0.924279286061882]
l=length(X); n=[1 : l]; XY=zeros(1,l);
% SUMX % SUMY
-
for z=1:l clc XY(1,z)= X(1,z)*Y(1,z);
end %calculo de medias Xm=(sum(X)/l); Ym=(sum(Y)/l);
a1=(l*sum(XY)-sum(X)*sum(Y))/(l*sum(X.^2)-(sum(X))^2); a0= Ym-a1*Xm;
P=a0+a1*X; plot(X,Y,X,P) ylim([-max(Y) max(Y)]) xlim([-max(X) max(X)]) grid on %definiciones parametros para la mejora St=sum((Y-Ym).^2); Sr=sum((Y-a0-a1*X).^2); Sy=sqrt((St)/(l-1)); %Desviacin estndar
Syx=sqrt((Sr)/(l-2)); %error del error (Error estndar del estimado)
r=(l*(sum(XY))-sum(X)*sum(Y))/(sqrt(l*sum(X.^2)-
(sum(X)).^2)*sqrt(l*sum(Y.^2)-(sum(Y)).^2));
r^2 % porcentaje de exactitud que tiene la curva generada con la nube de
puntos
-
Linealizacion:
Hace posible el ajuste lineal para algunos casos en que los datos que nos entregan no son una
lnea recta de buenas a primera es por eso que se le deben aplicar modificaciones a la escala para
poder trabajar con ellas.
Entonces para algunos casos en los cuales nos entregan datos que parezcan una curva, se puede
utilizar la linealizacion, que como el nombre bien nos dice, transforma la nube de puntos en una
recta, esto se puede aplicar para las ecuaciones de tipo, logartmica, exponencial y incluso algunas
de tipo no lineal y transformarlas en lineal.
Vamos a ver el caso de la linealizacion para la ecuacin de potencias
= 1 1 [. . 1]
Para trasformar esta ecuacin en una forma lineal solamente tenemos que intervenirla para que
adopte esa forma, por eso le vamos a aplicar log en base 10 y veremos lo que pasa.
log10 = 1 log10 x + log10(1) [. . 2]
La cual queda en forma lineal, podemos recatar a simple vista que log10 1 es donde la recta cruza
el eje Y y 1es la pendiente, entonces, si tenemos una nube de puntos regida por un orden
exponencial debemos proceder de la siguiente manera.
X= [1 2 3 4 5] Y= [0.5 1.7 3.4 5.7 8.4]
Grafico:
l.1
-
Y si le aplicamos el ajuste lineal directamente a estos datos
veramos esto:
l.2
Claramente podemos ver que la lnea recta que se gener, no
representa ni en lo ms mnimo a la realidad de los datos, es
por esto que se le debe hacer un ajuste a los datos, en la
tabla de los valores le aplicaremos logaritmo para poder asi,
dejarlo de la forma lineal
Log (X)= [0 0.301029995663981 0.477121254719662 0.602059991327962
0.698970004336019]
Log (Y)= [-0.301029995663981 0.230448921378274 0.531478917042255
0.755874855672491 0.924279286061882]
Grafica:
l.3
-
Esto s que nos da una recta y es por eso que se le aplica logaritmo
Ahora, haciendo el ajuste lineal nos da como resultado el siguiente grfico y los siguientes
coeficientes:
Grafico:
l.4
b1=1.7517
a1=-0.3002
Entonces ordenando la ecuacin con los coeficientes que ya obtuvimos queda de la siguiente
manera
log10 = 1.7517 log10 x +(0.3002) [. . 3]
Esto es la ecuacin que representa el ajuste del grafico l.4 pero que no es ni parecido al grafico l.1
que es a lo que queremos llegar, por lo tanto tenemos que aplicarle el antilogaritmo a la funcin
[f.l.3] para llevarlo a su forma original con el ajuste ya incorporado.
El anti-log ser:
log10(1) = 0.3002 [. . 4]
10log10(1) = 100.3002 [. . 5]
1 = 0.500956 [. . 6]
Como la pendiente esta fuera de donde hay que aplicar anti log
b1=1.7517
Entonces remplazando los coef en [f.l.1] queda
= 0.500950 1.7517 [. . 7]
-
Entonces ya tenemos el ajuste lineal de una ecuacin de potencias a travs de una liniealizacion.
La grafica correspondiente a esa ecuacin vendra siendo la siguiente.
l.5
Que se parece demasiado al grafico l.1.
-
Ajuste polinomial: (Exactamente la representacin matemtica que est en el marco teorico pero un poco mas
completo)
La representacin matemtica de un polinomio de grado m es la siguiente
y = a0 + a1 x1 + a2 x22 + + a 1
Para ello se debe minimizar el error de la aproximacin respecto a cada uno de los
valores a0, a1, a2. Este error se define como el cuadrado de las diferencias entre los
valores predichos y los reales.
=( + )
2 =(a0 + a1 x1 + a2 x22 ++ a 1
=1
=1
)2
Lo que nosotros tratamos de buscar ac van a ser los valores de los coeficientes en
donde S va a ser mnimo, por lo tanto usamos la derivada para poder as encontrar el
mnimo valor donde la funcin:
(=1 0 + 1 + 2 2 + + a 1
+ )2
Vaya a ser mnima.
Entonces se aplica
(
0) = 2 (0 + 1 + 2
2 + )2
=0
= 0
(
1) = 2 (0 + 1 + 2
2 + )2
=0
= 0
(
) = 2
(0 + 1 + 2 2 + )
2
=0
= 0
-
Lo cual si lo vemos bien nos entrega n nmeros de ecuaciones con las cuales podemos
determinar el valor de los n coeficientes al resolver este sistema. Si las ordenamos de
manera matricial quedara de la siguiente forma:
(
=0
=0
2
=0
2
=0
=0
3
=0
+1
=0
2
=0
3
=0
=0
+1
=0
4
=0
+2
=0
+2
=0
()2
=0 )
[ 012]
=
(
=0
=0
2
=0
=0
)
Lo que nosotros deseamos saber son los valores de a0, a1,a2,,an, al tenerlo es simple cosa de
remplazar en la ecuacin del polinomio y listo.
Ajuste polinomial MATLAB:
clc clear all close all syms t
% Ajustar un polinomio de segundo grado(y=a0+a1*x+a2*x^2+e) para los
siguientes datos X= [0 1 2 3 4 5]; Y= [2.1 7.7 13.6 27.2 40.9 61.1];
plot(X,Y) ylim([-10 65]) xlim([-5.5 5.5]) grid on
pause (5)
m1=2 %el exponente n1=6 %nro de datos
-
%Numero de ecuaciones p1=m1+1
if p1==3 M=zeros(p1) N=zeros(1,p1) n1; X_=sum(X)/n1; %media de X Y_=sum(Y)/n1; %Media de Y X1=sum(X) ; %sumatoria de los datos de X Y1=sum(Y); %sumatoria de los datos de Y X2=sum(X.^2); %Sumatoria de los X^2 X3=sum(X.^3); %Sumatoria de los X^3 X4=sum(X.^4); %Sumatoria de los X^4 XY=sum(X.*Y); %sumatoria de los X*Y XY2=sum(X.^2.*Y); %Sumatoria de los X^2*y
A=[n1,X1,X2;X1,X2,X3;X2,X3,X4] %esto almacena los datos al igual que la
% %matiz indicada en al teoria b=[Y1;XY;XY2]
% % % % % % % % % % % % % % % % % % % % % % % % % % Eliminacion_Gaussiana (A,b) % % % % % % % % % % % % % % % % % % % % % % % % % % %
x=ans
ezplot(x(1,1)+x(2,1)*t+x(3,1)*t^2) % Recordar que uno siempre tiene que
% %trabajar esta.
ylim([-10 65])% %nueva funcin dentro del rango de los
% %datos iniciales xlim([-5.5 5.5]) %dados, cualquier valor que queramos
% %fuera de nuestra nube %de puntos generara una incertidumbre %de resultado
end
Entonces si nosotros queremos obtener un polinomio de grado 3 solo tendramos que calcular los
X5 y X6 y los XY3 y resolver la matriz
-
Ajuste lineal multiple
El mtodo de ajuste es exactamente igual que el polinomial, pero su trasfondo es muy diferentes,
este tipo de ajuste se ocupa cuando la variable Y depende de mltiples X, l arepresentacion
matemtica de esto sera la siguiente:
y = a0 + a1 x1 + a2 x2 + + a 1
Un ejemplo bsico del alcance que puede tener la funcin de mltiples variable puede ser
una funcion que relacione el peso de una persona, con mltiples variables de su cuerpo,
como serian el largo del brazo, el largo de la pierna, ancho de la cabeza, sexo , etc y
gracias a esto los coeficientes determinaran que tan influyentes son las variables del
cuerpo sobre el peso de la persona, se podra representar de la siguiente manera:
Peso = a0 + a1 Lb + a2 Lp + a3 Sexo + a4 edad
Lb: Largo del brazo.
Lp: Largo de la pierna.
Esta es la representacin ms bsica para poder explicar este tipo de funciones,
claramente el graficar esto resulta bastante complicado xD.
Entonces
y = 0 + 1 + 2 1 + + a 1
Para ello se debe minimizar el error de la aproximacin respecto a cada uno de los
valores a0, a1, a2. Este error se define como el cuadrado de las diferencias entre los
valores predichos y los reales.
=( + )
2 =(0 +1 1 + 2 2 ++ a 1
=1
=1
)2
Lo que nosotros tratamos de buscar ac van a ser los valores de los coeficientes en
donde S va a ser mnimo, por lo tanto usamos la derivada para poder as encontrar el
mnimo valor donde la funcin:
(=1 0 + 1 + 2 + + a 1 + )2
Vaya a ser mnima.
-
Entonces se aplica
(
0) = 2 (0 + 1 1 + 2 2 + )
2
=0
= 0
(
1) = 2 1 (0 + 1 1 + 2 2 + )
2
=0
= 0
(
2) = 2 2 (0 + 1 1 + 2 2 + )
2
=0
= 0
(
) = 2 (0 + 1 + 2
2 + )2
=0
= 0
Lo cual si lo vemos bien nos entrega n nmeros de ecuaciones con las cuales podemos
determinar el valor de los n coeficientes al resolver este sistema. Si las ordenamos de
manera matricial quedara de la siguiente forma:
(
1
=0
1
=0
12
=0
2
=0
=0
1 2
=0
1
=0
2
=0
2 1
=0
=0
1
=0
2 2
=0
2
=0
2
=0
(2)
=0 )
[ 012]
=
(
=0
1
=0
2
=0
=0
)
Al igual que en el polinomio se resuelve de la misma manera
-
Ajuste lineal mltiple MATLAB
clc clear all close all syms t syms t2 y=[5 10 9 0 3 ] x1=[0 2 2.5 1 4 ] x2=[0 1 2 3 6 ]
plot3(x2,x1,y) xlabel('x2') ylabel('x1') zlabel('y') grid on axis square
m1=2 n1=6 %nro de datos
%Numero de ecuaciones p1=m1+1
Y=[5 10 9 0 3 27 ] X1i=[0 2 2.5 1 4 7] X2i=[0 1 2 3 6 2]
M=zeros(p1) N=zeros(1,p1) n1;
X1=sum(X1i) ; %sumatoria de los datos de X X2=sum(X2i) ; %sumatoria de los datos de X Y1=sum(Y); %sumatoria de los datos de Y
X12=sum(X1i.^2); %Sumatoria de los X1^2 X1X2=sum(X1i.*X2i); %Sumatoria de los X1 por X2
X22=sum(X2i.^2); %sumatoria de los X2 al cuadrado g=X1i.*Y X1Y= sum(g);
X2Y= sum(X2i.*Y);
A=[n1,X1,X2;X1,X12,X1X2;X2,X1X2,X22] b=[Y1;X1Y;X2Y]
-
% % % % % % % % % % % % % % % % % % % % % % % % % % Eliminacion_Gaussiana (A,b) % % % % % % % % % % % % % % % % % % % % % % % % % % %
x=ans
ezplot(y,x(1,1)+x(2,1)*t2+x(3,1)*t)
Eliminacin gaussiana:
Bueno, como en los mtodos de ajuste necesitamos ocupar algo que nos pueda resolver el n
nmero de incgnitas con un n nmero de ecuacin, como son un sistema de ecuaciones
lineales vamos y utilizamos un mtodo para resolverlas, ese mtodo es el de eliminacin gaussiana
(Si el profe les paso otro, ocupen ese, si saben otro mtodo ocupen el suyo, esto es por si no
tienen nada)
Yo creo que todos saben cmo funciona el mtodo de eliminacin gaussiana no voy a explicar
cmo es ni nada xD pero dejare el script ac, esta seccin era para que se dieran cuenta que se
necesita eso para resolver por completo los ajustes
Eliminacin gaussiana MATLAB
function [x] = Eliminacion_Gaussiana (A,b) [n,q]=size(A)
for i=1:n-1 for k=i+1:n m=A(k,i)/A(i,i); for j= i+1:n A(k,j)=A(k,j)-m*A(i,j); end A(k,i)=0 b(k)=b(k)-m*b(i) end end x=zeros(n,1); disp(A); disp(b); for i=n:-1:1 aux=0; for j=i+1:n aux=aux+A(i,j)*x(j) end x(i)=(b(i)-aux)/A(i,i); end disp (x)
-
Ajuste No-Lineal (Ac hay que iterar)
Bueno, el ajuste no lineal es un poco ms enredado pero sigue la misma forma que los otros
ajustes, pero es un poco ms difcil debido a las derivadas, no son fciles de reconocer y adems se
utiliza otra forma para ordenar las matrices y realizar el clculo de los a0, a1, a2 etc para volver
a iterar (Uno tiene que partir con unos valores para los coeficientes y lo que hace el ajuste no
lineal es encontrar unos mejores coeficientes para ir iterando hasta que no haya variacin en los
)
A esto tenemos que llegar nosotros
[[() ]] {} = {[()
] {}}
=
(
10200
11
1
21
2
1
)
() =
(
10
20
0
111
212
1)
= (
01
)
=
{
1 (1)2 (2)3 (3)
()}
-
Entonces lo que tenemos que encontrar es y as poder tener un nuevo coeficiente, para volver
a iterar con l, los pasos a seguir son los siguientes
1.-Sacar las derivadas parciales (Al igual que en los otros mtodos)
2.- Evaluar las derivadas parciales y definir el vector Z (Evaluando cada una de las cosas que
tengamos, recordar que los X y los Y siempre o casi siempre son datos y adems nos tienen que
dar un valor inicial para los coeficientes a0,a1,a2,,an)
3.- Aplicar la transpuesta al vector Z
4.- Multiplicar la traspuesta con el vector Z ( Z*Z)
5.- Sacar la inversa del punto 4
6.- Crear el vector D haciendo la resta de los valores de Y con los valores de los X evaluados en la
funcion ( Y-f(X))
7.-Multiplicar Z transpuesta por D (Z*D)
Entonces hasta el momento llevamos
[[() ]] {} = {[()
] {}}
Necesitamos entonces Multiplicamos lo que sacamos en el punto 5 por lo que sacamos en el
punto 7 y nos queda
{} = [() ]
1 {[()
] {}}
Entonces
(
01111
) (
00100
) = {}
Hacemos todo este leseo para obtener 0111
cuando ya los tenemos lo nico que hay que
hacer es volver a hacer todos los pasos desde el 1 hasta el 8 para volver a tener nuevos
valores de los coeficientes.
-
Ajuste no lineal MATLAB
clc clear all close all syms a0
syms a1 syms t syms x %Valor de euler. e=2.71828182846
% Funcion. fx=a0*(1-e^(-a1*t))
% Derivada. dfx0=diff(fx,a0) dfx1=diff(fx,a1)
% entonces ahora tenemos los datos. p= [0.25 0.75 1.25 1.75 2.25]; y= [0.28 0.57 0.68 0.74 0.79];
%los valores iniciales de mis coeficientes. i= 1 o= 1
%Evaluo Las derivadas de la funcion. DFX3=subs(dfx1, t, p) DFX2=subs(DFX3,a1,o) DFX1=subs(DFX2,a0,i)
DFX7=subs(dfx0,a1,o) DFX0=subs(DFX7,t,p) FX3=subs(fx,a0,i) FX2=subs(FX3,a1,o) FX=subs(FX2,t,p)
%genero el vector Z Z(:,1)=DFX0 Z(:,2)=DFX1
%Le aplico transpuesta ZT=Z'
%Multiplico MTM=ZT*Z
%Le saco la inversa Inversa=inv(MTM)
-
%Genero el vector D D(:,1)=y'-FX'
%Multiplico el vector D por la transpuesta de Z u=ZT*D
% entonces Inversa * u da la veriacion de los a E=Inversa*u
%Los nuevos coeficientes seran a0=i+E(1,1) a1=o+E(2,1)