You are on page 1of 8

Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB Mínimos cuadrados, polinomiales, exponenciales y cúbicas en MATLAB

Problemas de Cuadrados Mínimos Polinomiales Consideramos ahora el problema de aproximar o "ajustar" una función en un número 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 función que en cierto sentido suavice las fluctuaciones en los datos y a la vez resalte las características esenciales de estos. En el método de cuadrados mínimos, se trata de minimizar la suma de los cuadrados de las diferencias entre los datos y la función que se usa para aproximar estos. Suponga que los datos están dados por donde k=1,2,…m. La función que usamos para aproximar estos datos tiene la forma general:

donde las funciones

son funciones dadas y los

son

desconocidas. Un caso común es tomar y en este caso decimos que buscamos aproximar los datos con un polinomio de grado a lo más n-1. Las diferencias entre los datos y la función g(x) están 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 solución del sistema lineal (ecuaciones normales):

donde

considere el caso de aproximar 17 datos tomados de la función y=ex en el intervalo [0. Ver hornerV en http://www.com/presentations/542827/Division-de-polinomios %3A-M%C3%A9todo-de-Horner Ejemplo: Para ilustrar las ideas presentadas hasta ahora. En el caso el problema de minimizar "S" se conoce como el problema de cuadrados mínimos polinomiales y la matriz A toma la forma: . El vector "a" que devuelve esta función representa los coeficientes del polinomio de grado a lo más n-1 que mejor aproxima a los datos en el sentido de los cuadrados mínimos. a=B\(A'*y).j)=x.x). m=length(x). for j=2:n a(:. Siguiendo nuestra discusión anterior de la matriz de Vandermonde. a=ones(m.n).slideboom. end El siguiente programa en MATLAB llama la función de arriba para luego ensamblar las ecuaciones normales y resuelve estas para obtener así la solución de cuadrados mínimos: function a=MinimoCuad(n.*a(:.Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB La solución "a" de las ecuaciones normales se conoce como la solución de cuadrados mínimos para los datos usando las funciones base . (Compare esta matriz con la matriz de Vandermonde que vimos en la interpolación de polinomios).4] utilizando un polinomio cuadrático y otro cúbico: % % Genera los datos . B=A'*A.x).x. podemos escribir el siguiente código en MATLAB que calcula la matriz A: function a=vandg(n. A=vandg(n.y).j-1). Podemos ahora utilizar la función hornerV para evaluar dicho polinomio.

x. yy=exp(xx).25:4]'. % % Calcula los coeficientes de los polinomios cuadrático y cúbico % que mejor aproximan en el sentido de los cuadrados mínimos % a2=MinimoCuad(3.xx). % % Traza las gráficas % plot(xx. title('Cuadrática en violeta.yy. % % Evalúa los polinomios y la función original % pval2=hornerV(a2.02:4]'. pval3=hornerV(a3.x.xx.y).pval3.Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB % x=[0:.pval2.xx). exp(x) en amarillo') .'o') xlabel('X').ylabel('Y'). Cubica en azul. y=exp(x).xx.y.y).x. % este programa llama a la función a3=MinimoCuad(4. % % Genera puntos adicionales para evaluar los polinomios y % la función original % xx=[0:.

los números de condición de son . De hecho en el ejemplo anterior. es fácil ver que la entrada (k. Así que es (aproximadamente) proporcional a la matriz de Hilbert de orden nxn para "m" grande la cual es mal acondicionada. Pero de modo que para "m" grande. De hecho en el caso del problema de cuadrados mínimos polinomiales.l) de es de la forma: donde la N=k+l-2 .Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB La matriz de coeficientes de las ecuaciones normales es en general una matriz mal acondicionada según la "m" aumenta. El número de datos no tiene que ser muy grande.

3714 para n=3. Como R es no singular Rt también lo es y es equivalente al sistema . podemos calcular la solución de cuadrados mínimos en forma eficiente y sin problemas de mal acondicionamiento.3586 y 239. Entonces la solución "a" de las ecuaciones normales puede obtener resolviendo el sistema triangular Demostración: Dado que A=QR tenemos que: .Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB 983. A=R\(Q’*y). y una matriz R de tamaño nxn triangular superior y La demostración de este teorema utiliza el proceso de Gram-Schmidt y se encuentra por ejemplo en el libro Linear Algebra with Applications de S. La función qr de MATLAB se utiliza para calcular las factorizaciones QR. Entonces existe una matriz Q de tamaño mxn con no singular tal que A=QR.x. El mismo ejemplo anterior pero usando esta subrutina en lugar de MinimoCuad (mínimo cuadrado) produce resultados similares (al número de cifras mostradas) pero ahora los números de condición de R son 31. [Q.4 lo cual indica que se pierden en el orden de 4 cifras significativas en el cálculo.x). Teorema: (Factorización QR) Sea A una matriz mxn de rango n. Tampoco discutiremos los aspectos computacionales de como calcular la factorización QR de una matriz pues utilizaremos las funciones de MATLAB para esto.R]=qr(A). Para poder resolver las ecuaciones normales en forma eficiente y estable. <> Vale la pena recalcar que los sistemas triangulares se resuelven eficientemente mediante sustitución para atrás y son por lo general bien acondicionados. .y). se De igual forma: tenemos pues que . Lo que si nos interesa en este punto es que utilizando la factorización QR de la matriz A que aparece en las ecuaciones normales. Modificamos la función MinimoCuad de arriba como sigue: function a=MinimoCuad(n.4 respectivamente los cuales son mucho mejor que antes.J. Teorema: Sea A una matriz mxn de rango n y A=QR la factorización QR de A dada por el teorema anterior. se utiliza la llamada factorización QR de la matriz A.7299e+004 respectivamente para los casos n=3.3594 y 5. A=vandg(n. Leon. .

1:1.5545 15.00. while ((aux2)!=0){ product *= x0. Usando los programas desarrollados en esta lección.5550 446.0696 47.9895 278. } return product. aux2--.int aux2){ float product. Use la función gamma de MATLAB para generar valores de para x=0:0.25:3].7371 32. 3.aux. y=[6.a.1338 9. Trace los datos. Grafique las tres funciones "g(x)" y los datos originales en un mismo sistema de coordenadas. Aproxime estos datos con funciones de la forma: 1.1662 11. ¿Qué tan bien aproximan estas funciones a los datos? 2. 2. int i. Considere los datos dados por los vectores x=[0:0. la función y el polinomio calculado en el mismo sistema de coordenadas.4441]. Modifique los programas dados anteriormente según sea necesario. product = 1. /*de aqui sale el cuadrada de cada*/ } float Horner (float x0. HornerV en lenguaje C #include #include #include int Exponencial(float x0.Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB Ejercicios: 1.product.1596 111. .4684 175. La función forma se puede aproximar con un polinomio de grado cinco de la . construya el polinomio de grado cinco que mejor aproxima estos datos en el sentido de los cuadrados mínimos.j.6414 22.3806 7.0756 73.float *P. int N){ float *Q.

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

z) % Algoritmo de Horner a es un vector coeficiente del polinomio y z es el % mayor exponente a ser evaluado % Y=HORNER(A. % grado del polinomio b=zeros(n+1.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 división sintética n=length(a)-1.1).Ejercicios de creación de funciones de Cuadrados Mínimos Polinomiales en MATLAB function [y. %se genera un vector columna de n+1 elementos b(1) = a(1).b] =hornerV(a. b= b(n:end -1). return . % 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).