Races de polinomios Programacin Numrica Definicin Un polinomio





![Método de Horner en C double horner(double p[], int n, double x){ double y Método de Horner en C double horner(double p[], int n, double x){ double y](https://slidetodoc.com/presentation_image_h/dac30316c694b662c7666d63d36ca5d8/image-6.jpg)

![Evaluación de la derivada en C void horner. Der(double p[], int n, double x, Evaluación de la derivada en C void horner. Der(double p[], int n, double x,](https://slidetodoc.com/presentation_image_h/dac30316c694b662c7666d63d36ca5d8/image-8.jpg)

![Método de Horner en Matlab function [y, z]=Horner(x, x 0) %x es un vector Método de Horner en Matlab function [y, z]=Horner(x, x 0) %x es un vector](https://slidetodoc.com/presentation_image_h/dac30316c694b662c7666d63d36ca5d8/image-10.jpg)

![Newton para polinomios en C double Newton. Pol(double p[], int n, double x 0, Newton para polinomios en C double Newton. Pol(double p[], int n, double x 0,](https://slidetodoc.com/presentation_image_h/dac30316c694b662c7666d63d36ca5d8/image-12.jpg)


















- Slides: 30
Raíces de polinomios Programación Numérica
Definición Un polinomio de grado n es una expresión de la forma: P(x) = anxn + an-1 xn-1 +. . . +a 1 x + a 0 Donde an <> 0 Teorema (teorema fundamental del álgebra): Si P(x) es un polinomio de grado n >= 1, entonces P(x) = 0 tiene al menos una raíz (posiblemente compleja).
Corolario Si P(x) es un polinomio de grado n >= 1, entonces existen constantes únicas x 1, x 2, . . . xk, posiblemente complejas, y enteros positivos m 1, m 2, . . . , mk, tales que: y
Método de Horner Sea P(x) = anxn + an-1 xn-1 +. . . +a 1 x + a 0 Si bn = an y bk = ak + bk+1 x 0 para k = n – 1, n – 2, . . . , 1, 0 Por tanto b 0 = P(x 0). Más aún, si Q(x) = bnxn– 1 + bn-1 xn-2 +. . . +b 2 x + b 1 Entonces P(x) = (x – x 0) Q(x) + b 0
Ejercicios Evaluar: P(x) = 2 x 4 – 3 x 2 + 3 x – 4 en x 0 = – 2 P(x) = 7 x 5 + 6 x 4 – 6 x 3 + 3 x – 4 en x 0 = 3 P(x) = – 5 x 6 + 3 x 4 + 2 x 2 – 4 x en x 0 = – 1
Método de Horner en C double horner(double p[], int n, double x){ double y = p[0]; int i; for(i = 1; i<n; i++){ y = x*y + p[i]; } return y; } double eval(double p[], int n, double x){ double s = 0; int i; for(i = 0; i<n; i++){ s = s + p[i]*pow(x, n-i-1); } return s; }
Evaluación de la derivada Dado que: P(x) = (x – x 0) Q(x) + b 0 donde Q(x) = bnxn– 1 + bn-1 xn-2 +. . . +b 2 x + b 1 Derivando P’(x) = Q(x)+(x – x 0)Q’(x) En x = x 0, P’(x 0) = Q(x 0)
Evaluación de la derivada en C void horner. Der(double p[], int n, double x, double &y, double &z){ y = p[0]; z = p[0]; int i; for(i = 1; i<n-1; i++){ y = x*y + p[i]; z = x*z + y; } y = x*y + p[n-1]; }
Método horner Entrada: grado n, a 0, a 1, . . . , an, x 0 Salida: y =P(x 0), z = P’(x 0) 1. 2. 3. 4. 5. 6. 7. y = an //calcule bn para P z = an //calcule bn-1 para Q Para j = n – 1, n – 2, . . , 1 y = x 0*y + aj z = x 0*z + y y = x 0*y + a 0 regresar y, z
Método de Horner en Matlab function [y, z]=Horner(x, x 0) %x es un vector con los coeficientes %de P(x) %regresa en y el polinomio y en z %la derivada evaluados en x 0 [muda n] = size(x); y = x(1); %calcule bn para P. z = x(1); %calcule bn-1 para Q for j = 2: n-1, y = x 0*y + x(j); z = x 0*z + y; end y = x 0*y + x(n);
Método de Newton para polinomios Se puede aplicar el método de Newton para polinomios evaluando el polinomio y su derivada mediante el método de Horner. El esquema sería
Newton para polinomios en C double Newton. Pol(double p[], int n, double x 0, double ee, int ni){ int i=0; double f, df, x = x 0, error; while(i<ni){ horner. Der(p, n, x, f, df); x = x 0 - f/df; error = fabs((x-x 0)/x); if(error<=ee) return x; i++; x 0 = x; } std: : cout << "No solución en " << i << " pasosn"; return x; }
Método de Müller Se aproxima el siguiente valor utilizando una parábola en lugar de una recta como en el método de la secante. f(x) parábola Línea recta Raíz estimada x 1 raíz x 0 x x 2 x 1 x 0 x
Método de Müller Utiliza tres aproximaciones: x 0, x 1, x 2. Determina la siguiente aproximación x 3 encontrando la intersección con el eje x de la parábola definida por los puntos (x 0, f(x 0)), (x 1, f(x 1)), (x 2, f(x 2)). f x 0 x 1 x 2 x 3
Método de Müller Se considera el polinomio P(x) = a(x – x 2)2 + b(x – x 2) + c Se puede encontrar a, b y c resolviendo f(x 0) = a(x 0 – x 2)2 + b(x 0 – x 2) + c f(x 1) = a(x 1 – x 2)2 + b(x 1 – x 2) + c f(x 2) = a(x 2 – x 2)2 + b(x 2 – x 2) + c
Método de Müller Se llega a
Método de Müller Los cálculos pueden simplificarse usando
Método de Müller Para minimizar el error al resolver la cuadrática P(x) = 0, se calcula x 3 con El proceso se reinicia tomando ahora x 1, x 2, y x 3.
Müller en Mat. Lab function y = muller(p, x 0, x 1, x 2, ee, ni) i = 3; while i<=ni h 1 = x 1 -x 0; h 2 = x 2 -x 1; [fx 0 muda] = horner(p, x 0); [fx 1 muda] = horner(p, x 1); [fx 2 muda] = horner(p, x 2); d 1 = (fx 1 -fx 0)/h 1; d 2 = (fx 2 -fx 1)/h 2; a = (d 2 -d 1)/(h 2+h 1); b = d 2+h 2*d 1; c = fx 2; D = sqrt(b*b-4. 0*a*c); if(abs(b-D)<abs(b+D)) E = b+D; else E = b-D; end h = -2. 0*c/E; x 3 = x 2+h; if(abs(h)<ee) break; end x 0 = x 1; x 1 = x 2; x 2 = x 3; i=i+1; end y = x 3;
Ejemplo P(x) = 16 x 4 – 40 x 3 + 5 x 2 + 20 x + 6 x 0 = 0. 5 x 1 = -0. 5 x 2 = 0. 0 i xi P(xi) 3 -0. 555556 + ( -0. 598352)i -29. 400701 + ( 3. 898725)i 4 -0. 435450 + ( -0. 102101)i 1. 332225 + ( 1. 193097)i 5 -0. 390631 + ( -0. 141852)i 0. 375058 + ( 0. 670168)i 6 -0. 357698 + ( -0. 169926)i -0. 146750 + ( 0. 007446)i 7 -0. 356051 + ( -0. 162856)i -0. 001840 + ( -0. 000538)i 8 -0. 356062 + ( -0. 162758)i 0. 000002 + ( -0. 000001)i
Ejemplo x 0 = 2. 5 x 1 = 2. 0 x 2 = 2. 3 i xi 3 1. 960592 + ( 0. 000000)i -0. 611310 + ( 0. 000000)i 4 1. 970564 + ( 0. 000000)i 0. 007455 + ( 0. 000000)i 5 1. 970447 + ( 0. 000000)i 0. 000029 + ( 0. 000000)i x 0 = 0. 5 x 1 = 1. 0 P(xi) x 2 = 1. 5 i xi P(xi) 3 1. 287855 + ( 0. 000000)i -1. 376275 + ( 0. 000000)i 4 1. 237459 + ( 0. 000000)i 0. 126945 + ( 0. 000000)i 5 1. 241605 + ( 0. 000000)i 0. 002193 + ( 0. 000000)i 6 1. 241677 + ( 0. 000000)i -0. 000001 + ( 0. 000000)i
Actividad Encontrar las raíces reales y complejas del siguiente polinomio por el método de Müller en Mat. Lab. P(x) = x 4 – 2 x 3 + 6 x 2 – 8 x + 8
Raíces de no lineales en Matlab fzero(FUN, x 0) – encuentra la raíz de FUN cerca al punto x 0. Ejemplos: FUN puede especificarse usando @: X = fzero(@sin, 3) regresa pi. X = fzero(@sin, 3, optimset('disp', 'iter')) regresa pi, usa la tolerancia por omisión y despliega información de las iteraciones. FUN puede ser una función en línea: X = fzero(inline('sin(3*x)'), 2);
Polinomios con Matlab polyval(P, x) – evalua el polinomio P en el punto x. El polinomio se especifica como un vector donde P(1) es el coeficiente de la potencia más alta y P(length(P)) es el término independiente. polyder(P) – obtiene la derivada delpolinomio P. con(A, B) – multiplica el polinomio A por el polinomio B. [Q R] = deconv(A, B) – divide los dos polinomios A y B y almacena el cociente en Q y el residuo en R. roots(P) – encuentra todas las raices reales y complejas del polinomio P.
Método de Bairstow El enfoque de Bairstow es el de utilizar el Método de Newton para ajustar los coeficientes r y s en la cuadrática x 2 – rx + s hasta que sus raíces sean también raíces del polinomio que se quiere resolver. Con estos coeficientes se determina la cuadrática correspondiente que se utiliza para simplificar la expresión, eliminando estas raíces del conjunto buscado. El proceso se repite hasta que el polinomio se convierta en uno cuadrático o lineal, momento en que todas las raíces quedan determinadas.
La División Larga de un polinomio por x 2 – rx – s resulta en un cociente de la forma y un residuo b 1(x – r) + b 0 tal que
Se utiliza la división sintética para obtener la división entre el factor cuadrático: bn = an bn– 1 = an– 1 + rbn bi = ai + rbi+1 + sbi+2 (i = n – 2, …, 0) El método se reduce a determinar los valores de r y s que hacen que el factor cuadrático sea un divisor exacto. Se utiliza el método de Newton-Raphson. Se calculan incrementos Dr y Ds para acercarse a la solución. Las derivadas parciales se calculan por un proceso de división sintética similar al utilizado para calcular las b’s.
cn = bn cn– 1 = bn– 1 + rcn ci = bi + rci+1 + sci+2 (i = n – 2, …, 1) Donde: Se resuelven las ecuaciones para Dr y Ds y se emplean para mejorar r y s.
Ejemplo Encontrar las raíces del siguiente polinomio en Excel P( x) = x 5 – 3. 5 x 4 + 2. 75 x 3 + 2. 125 x 2 – 3. 88 x +1. 25 Comience en r = -1 y s = -1
Hoja de Excel de Bairstow Haga doble clic sobre la hoja para ver las fórmulas. Los valores en amarillo son los valores que se obtuvieron paso a paso. Los valores en naranja son los coeficientes del polinomio de grado n – 2 que hay que resolver aplicando el mismo método. Note que los coeficientes b 0 y b 1 son casi cero.