Resumen Ajuste de Curva

download Resumen Ajuste de Curva

of 22

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)