You are on page 1of 8

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB Mnimos cuadrados, polinomiales, exponenciales y cbicas en MATLAB

Problemas de Cuadrados Mnimos Polinomiales Consideramos ahora el problema de aproximar o "ajustar" una funcin en un nmero grande de datos que contienen posiblemente un cierto grado de error. En lugar de tratar de ajustar un polinomio de alto grado o insistir en interpolar datos que sabemos tienen un cierto grado de error, lo que hacemos es que buscamos una funcin que en cierto sentido suavice las fluctuaciones en los datos y a la vez resalte las caractersticas esenciales de estos. En el mtodo de cuadrados mnimos, se trata de minimizar la suma de los cuadrados de las diferencias entre los datos y la funcin que se usa para aproximar estos. Suponga que los datos estn dados por donde k=1,2,m. La funcin que usamos para aproximar estos datos tiene la forma general:

donde las funciones

son funciones dadas y los

son

desconocidas. Un caso comn es tomar y en este caso decimos que buscamos aproximar los datos con un polinomio de grado a lo ms n-1. Las diferencias entre los datos y la funcin g(x) estn dados por: . Buscamos pues minimizar la suma de los cuadrados de estas diferencias dada por:

Bajo ciertas condiciones en los datos , los valores de que minimizan a "S" son solucin del sistema lineal (ecuaciones normales):

donde

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB

La solucin "a" de las ecuaciones normales se conoce como la solucin de cuadrados mnimos para los datos usando las funciones base . En el caso el problema de minimizar "S" se conoce como el problema de cuadrados mnimos polinomiales y la matriz A toma la forma:

. (Compare esta matriz con la matriz de Vandermonde que vimos en la interpolacin de polinomios). Siguiendo nuestra discusin anterior de la matriz de Vandermonde, podemos escribir el siguiente cdigo en MATLAB que calcula la matriz A: function a=vandg(n,x); m=length(x); a=ones(m,n); for j=2:n a(:,j)=x.*a(:,j-1); end El siguiente programa en MATLAB llama la funcin de arriba para luego ensamblar las ecuaciones normales y resuelve estas para obtener as la solucin de cuadrados mnimos: function a=MinimoCuad(n,x,y); A=vandg(n,x); B=A'*A; a=B\(A'*y); El vector "a" que devuelve esta funcin representa los coeficientes del polinomio de grado a lo ms n-1 que mejor aproxima a los datos en el sentido de los cuadrados mnimos. Podemos ahora utilizar la funcin hornerV para evaluar dicho polinomio. Ver hornerV en http://www.slideboom.com/presentations/542827/Division-de-polinomios %3A-M%C3%A9todo-de-Horner Ejemplo: Para ilustrar las ideas presentadas hasta ahora, considere el caso de aproximar 17 datos tomados de la funcin y=ex en el intervalo [0,4] utilizando un polinomio cuadrtico y otro cbico: % % Genera los datos

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB

% x=[0:.25:4]'; y=exp(x); % % Calcula los coeficientes de los polinomios cuadrtico y cbico % que mejor aproximan en el sentido de los cuadrados mnimos % a2=MinimoCuad(3,x,y); % este programa llama a la funcin a3=MinimoCuad(4,x,y); % % Genera puntos adicionales para evaluar los polinomios y % la funcin original % xx=[0:.02:4]'; % % Evala los polinomios y la funcin original % pval2=hornerV(a2,xx); pval3=hornerV(a3,xx); yy=exp(xx); % % Traza las grficas % plot(xx,yy,xx,pval2,xx,pval3,x,y,'o') xlabel('X');ylabel('Y'); title('Cuadrtica en violeta; Cubica en azul; exp(x) en amarillo')

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB

La matriz de coeficientes de las ecuaciones normales es en general una matriz mal acondicionada segn la "m" aumenta. De hecho en el caso del problema de cuadrados mnimos polinomiales, es fcil ver que la entrada (k,l) de es de la forma:

donde la N=k+l-2 . Pero

de modo que

para "m" grande. As que es (aproximadamente) proporcional a la matriz de Hilbert de orden nxn para "m" grande la cual es mal acondicionada. El nmero de datos no tiene que ser muy grande. De hecho en el ejemplo anterior, los nmeros de condicin de son

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB

983.3594 y 5.7299e+004 respectivamente para los casos n=3,4 lo cual indica que se pierden en el orden de 4 cifras significativas en el clculo. Para poder resolver las ecuaciones normales en forma eficiente y estable, se utiliza la llamada factorizacin QR de la matriz A. Teorema: (Factorizacin QR) Sea A una matriz mxn de rango n. Entonces existe una matriz Q de tamao mxn con no singular tal que A=QR. , y una matriz R de tamao nxn triangular superior y

La demostracin de este teorema utiliza el proceso de Gram-Schmidt y se encuentra por ejemplo en el libro Linear Algebra with Applications de S.J. Leon. Tampoco discutiremos los aspectos computacionales de como calcular la factorizacin QR de una matriz pues utilizaremos las funciones de MATLAB para esto. Lo que si nos interesa en este punto es que utilizando la factorizacin QR de la matriz A que aparece en las ecuaciones normales, podemos calcular la solucin de cuadrados mnimos en forma eficiente y sin problemas de mal acondicionamiento. Teorema: Sea A una matriz mxn de rango n y A=QR la factorizacin QR de A dada por el teorema anterior. Entonces la solucin "a" de las ecuaciones normales puede obtener resolviendo el sistema triangular Demostracin: Dado que A=QR tenemos que: . se

De igual forma: tenemos pues que

. Como R es no singular Rt tambin lo es y es equivalente al sistema . <>

Vale la pena recalcar que los sistemas triangulares se resuelven eficientemente mediante sustitucin para atrs y son por lo general bien acondicionados. La funcin qr de MATLAB se utiliza para calcular las factorizaciones QR. Modificamos la funcin MinimoCuad de arriba como sigue: function a=MinimoCuad(n,x,y); A=vandg(n,x); [Q,R]=qr(A); A=R\(Q*y); El mismo ejemplo anterior pero usando esta subrutina en lugar de MinimoCuad (mnimo cuadrado) produce resultados similares (al nmero de cifras mostradas) pero ahora los nmeros de condicin de R son 31.3586 y 239.3714 para n=3,4 respectivamente los cuales son mucho mejor que antes.

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB

Ejercicios: 1. Considere los datos dados por los vectores x=[0:0.25:3], y=[6.3806 7.1338 9.1662 11.5545 15.6414 22.7371 32.0696 47.0756 73.1596 111.4684 175.9895 278.5550 446.4441]. Aproxime estos datos con funciones de la forma: 1. 2. 3. Modifique los programas dados anteriormente segn sea necesario. Grafique las tres funciones "g(x)" y los datos originales en un mismo sistema de coordenadas. Qu tan bien aproximan estas funciones a los datos? 2. La funcin forma se puede aproximar con un polinomio de grado cinco de la . Use la funcin gamma de MATLAB

para generar valores de para x=0:0.1:1. Usando los programas desarrollados en esta leccin, construya el polinomio de grado cinco que mejor aproxima estos datos en el sentido de los cuadrados mnimos. Trace los datos, la funcin y el polinomio calculado en el mismo sistema de coordenadas.

HornerV en lenguaje C #include #include #include int Exponencial(float x0,int aux2){ float product; product = 1.00; while ((aux2)!=0){ product *= x0; aux2--; } return product; /*de aqui sale el cuadrada de cada*/ } float Horner (float x0,float *P, int N){ float *Q,aux,a; int i,j,product;

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB aux = 0.00; Q= (double*)malloc(N*sizeof(double)); /*reservamos la memoria para el vector*/ for (i=N-1;i>=0;i--){ if (i==N-1) Q[i] = P[i]; /*bn=an*/ else Q[i] = P[i] + (Q[i+1]*x0); /*bk=ak+ bk+1*x */ } printf("{ "); for ( i=0;i<n;i++) printf("-%f",Q[i]); printf("} "); j = 0; for (i=N-1;i>=0;i--){ if (i!=0) aux += Q[i]*Exponencial(x0,N-1-j-1);/*te calcula las b para poder multiplicarlo*/ /* a=Exponencial(x0,N-1-j-1);*/ printf("da:%f\n",aux); j++; } printf ("E valor numerico del polinomio es:%f\n", aux); return 0.00; } int main(){ float P[5]={-61.0,50.00,-48.00,16.00,3.00}; Horner (3,P, 5); return 0; } </n;i++)

Ejercicios de creacin de funciones de Cuadrados Mnimos Polinomiales en MATLAB


function [y,b] =hornerV(a,z) % Algoritmo de Horner a es un vector coeficiente del polinomio y z es el % mayor exponente a ser evaluado % Y=HORNER(A,Z) calcula % Y=A(1)*Z^N +A(2)*Z^(N-1) + +A(N)*Z +A(N+1) % usando el algoritmo de Horner de la divisin sinttica n=length(a)-1; % grado del polinomio b=zeros(n+1,1); %se genera un vector columna de n+1 elementos b(1) = a(1); % el primer elemento del vector b es elcoeficiente de X^n for j=2:n+1 b(j)=a(j)+b(j-1)*z; disp(b) end y=b(n+1); b= b(n:end -1); return

You might also like