Está en la página 1de 30

Races de polinomios

Programacin Numrica
Definicin
Un polinomio de grado n es una expresin de la forma:
P(x) = a
n
x
n
+ a
n-1
x
n-1
+ ... +a
1
x + a
0
Donde a
n
<> 0
Teorema (teorema fundamental del lgebra): Si P(x) es un
polinomio de grado n >= 1, entonces P(x) = 0 tiene al menos
una raz (posiblemente compleja).
Corolario
Si P(x) es un polinomio de grado n >= 1, entonces existen
constantes nicas x
1
, x
2
, ... x
k
, posiblemente complejas, y
enteros positivos m
1
, m
2
, ..., m
k
, tales que:

=
=
k
i
i
n m
1
( ) ( ) ( )
k
m
k
m m
n
x x x x x x a x P = ... ) (
2 1
2 1
y
Mtodo de Horner
Sea
P(x) = a
n
x
n
+ a
n-1
x
n-1
+ ... +a
1
x + a
0
Si b
n
= a
n
y
b
k
= a
k
+ b
k+1
x
0
para k = n 1, n 2, ..., 1, 0
Por tanto b
0
= P(x
0
). Ms an, si
Q(x) = b
n
x
n1
+ b
n-1
x
n-2
+ ... +b
2
x + b
1
Entonces
P(x) = (x x
0
) Q(x) + b
0
Ejercicios
Evaluar:
P(x) = 2x
4
3x
2
+ 3x 4 en x
0
= 2
P(x) = 7x
5
+ 6x
4
6x
3
+ 3x 4 en x
0
= 3
P(x) = 5x
6
+ 3x
4
+ 2x
2
4x en x
0
= 1
Mtodo 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;
}
Evaluacin de la derivada
Dado que:
P(x) = (x x
0
) Q(x) + b
0
donde
Q(x) = b
n
x
n1
+ b
n-1
x
n-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
)
Evaluacin de la derivada en C
void hornerDer(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];
}
Mtodo horner
Entrada: grado n, a0, a1, ..., an, x0
Salida: y =P(x0), z = P(x0)
1. y = an //calcule bn para P
2. z = an //calcule bn-1 para Q
3. Para j = n 1, n 2, .... , 1
4. y = x0*y + aj
5. z = x0*z + y
6. y = x0*y + a0
7. regresar y, z
Mtodo de Horner en Matlab
function [y,z]=Horner(x,x0)
%x es un vector con los coeficientes
%de P(x)
%regresa en y el polinomio y en z
%la derivada evaluados en x0
[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 = x0*y + x(j);
z = x0*z + y;
end
y = x0*y + x(n);
Mtodo de Newton para polinomios
Se puede aplicar el mtodo de Newton para polinomios
evaluando el polinomio y su derivada mediante el mtodo de
Horner.
El esquema sera
( )
( )
( )
( )
n
n
n
n
n
n n
x Q
x P
x
x P
x P
x x = =
+
'
1
Newton para polinomios en C
double NewtonPol(double p[],int n,double x0,double ee,
int ni){
int i=0;
double f,df,x = x0,error;
while(i<ni){
hornerDer(p,n,x,f,df);
x = x0 - f/df;
error = fabs((x-x0)/x);
if(error<=ee)
return x;
i++;
x0 = x;
}
std::cout << "No solucin en " << i << " pasos\n";
return x;
}
Mtodo de Mller
Se aproxima el siguiente valor utilizando una parbola en lugar
de una recta como en el mtodo de la secante.
x
1
raz
Lnea
recta
Raz
estimada
x
0
f(x)
f(x)
x
x
x
0
x
1
x
2
parbola
Raz
estimada
Mtodo de Mller
Utiliza tres aproximaciones: x
0
, x
1
, x
2
.
Determina la siguiente aproximacin x
3
encontrando la
interseccin con el eje x de la parbola definida por los
puntos (x
0
,f(x
0
)), (x
1
,f(x
1
)), (x
2
,f(x
2
)).
x
0
x
1
x
2
x
3
f
Mtodo de Mller
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
Mtodo de Mller
Se llega a
) (
2
x f c =
( ) | | ( ) | |
( )( )( )
1 0 2 1 2 0
2 0
2
2 1 2 1
2
2 0
) ( ) ( ) ( ) (
x x x x x x
x f x f x x x f x f x x
b


=
( )| | ( )| |
( )( )( )
1 0 2 1 2 0
2 1 2 0 2 0 2 1
) ( ) ( ) ( ) (
x x x x x x
x f x f x x x f x f x x
a


=
Mtodo de Mller
Los clculos pueden simplificarse usando
( ) ( )
( ) ( )
( )
2
1 1
0 1
0 1
1
1 2
1
0
0 1
0
1 2 1
0 1 0
x f c
d ah b
h h
d d
a
h
x f x f
d
h
x f x f
d
x x h
x x h
=
+ =
+

=
=
=
Mtodo de Mller
Para minimizar el error al resolver la cuadrtica P(x) = 0, se
calcula x
3
con
ac b b signo b
c
x x
4 ) (
2
2
2 3
+
=
El proceso se reinicia tomando ahora x
1
, x
2
, y x
3
.
Mller en MatLab
function y = muller(p,x0,x1,x2,ee,ni)
i = 3;
while i<=ni
h1 = x1-x0;
h2 = x2-x1;
[fx0 muda] = horner(p,x0);
[fx1 muda] = horner(p,x1);
[fx2 muda] = horner(p,x2);
d1 = (fx1-fx0)/h1;
d2 = (fx2-fx1)/h2;
a = (d2-d1)/(h2+h1);
b = d2+h2*d1;
c = fx2;
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;
x3 = x2+h;
if(abs(h)<ee)
break;
end
x0 = x1;
x1 = x2;
x2 = x3;
i=i+1;
end
y = x3;
Ejemplo
P(x) = 16x
4
40x
3
+ 5x
2
+ 20x + 6
x0 = 0.5 x1 = -0.5 x2 = 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
x0 = 2.5 x1 = 2.0 x2 = 2.3
i xi P(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
x0 = 0.5 x1 = 1.0 x2 = 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 races reales y complejas del
siguiente polinomio por el mtodo de Mller en
MatLab.
P(x) = x
4
2x
3
+ 6x
2
8x + 8
Races de no lineales en Matlab
fzero(FUN, x0) encuentra la raz de FUN cerca al punto
x0.
Ejemplos:
FUN puede especificarse usando @:
X = fzero(@sin,3)
regresa pi.
X = fzero(@sin,3,optimset('disp','iter'))
regresa pi, usa la tolerancia por omisin y despliega
informacin de las iteraciones.
FUN puede ser una funcin en lnea:
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 ms alta y P(length(P)) es el
trmino 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.
Mtodo de Bairstow
El enfoque de Bairstow es el de utilizar el Mtodo de Newton
para ajustar los coeficientes r y s en la cuadrtica x
2
rx + s
hasta que sus races sean tambin races del polinomio que se
quiere resolver.
Con estos coeficientes se determina la cuadrtica
correspondiente que se utiliza para simplificar la expresin,
eliminando estas races del conjunto buscado.
El proceso se repite hasta que el polinomio se convierta en uno
cuadrtico o lineal, momento en que todas las races quedan
determinadas.
La Divisin Larga de un polinomio
( )

=
=
n
i
i
i
x a x P
0
por x
2
rx s resulta en un cociente de la forma
( )

=
=
2
0
n
i
i
i
x b x Q
y un residuo b
1
(x r) + b
0
tal que
( ) ( ) ( )
0 1
2
2
2
b r x b x b s rx x x P
n
i
i
i
+ + |
.
|

\
|
=

=
Se utiliza la divisin sinttica para obtener la divisin entre el factor
cuadrtico:
b
n
= a
n
b
n1
= a
n1
+ rb
n
b
i
= a
i
+ rb
i+1
+ sb
i+2
(i = n 2,, 0)
El mtodo se reduce a determinar los valores de r y s que hacen que el factor
cuadrtico sea un divisor exacto.
Se utiliza el mtodo de Newton-Raphson. Se calculan incrementos Ar y As
para acercarse a la solucin.
0
0 0
1
1 1
b s
s
b
r
r
b
b s
s
b
r
r
b
= A
c
c
+ A
c
c
= A
c
c
+ A
c
c
Las derivadas parciales se calculan por un proceso de divisin sinttica
similar al utilizado para calcular las bs.
c
n
= b
n
c
n1
= b
n1
+ rc
n
c
i
= b
i
+ rc
i+1
+ sc
i+2
(i = n 2,, 1)
Donde:
s
b
c
r
b
c
s
b
c
r
b
c
c
c
=
c
c
=
c
c
=
c
c
=
0
2
0
0
1
3
1
2
,
,
Se resuelven las ecuaciones para Ar y As y se emplean para mejorar r y s.
Ejemplo
Encontrar las races del siguiente polinomio en Excel
P( x) = x
5
3.5x
4
+ 2.75x
3
+ 2.125x
2
3.88x +1.25
Comience en r = -1 y s = -1
Hoja de Excel de Bairstow
Mtodo de Bairstow
n-> 5 4 3 2 1 0 r s valores calculados x1 x2
a-> 1 -3.5 2.75 2.125 -3.875 1.25 -0.5 0.5 -1 -1 #NUM! #NUM!
-0.5 2.5 -4.625 3.875 -1.250000456 Dr Ds -0.6442 0.1381 0.1697 -0.8139
b-> 1 -4 5.25 -2.5 5E-07 -4.55699E-07 7E-08 1E-08 -0.5111 0.4697 0.4759 -0.9870
-0.5 2.75 -6.25 8.375 Error r Error s -0.4997 0.5002 0.5002 -0.9999
c-> 1 -4.5 8.000001 -8.75 8.375 1E-05 2E-06 -0.5000 0.5000 0.5000 -1.0000
sistema b -0.5 0.5
c2,c3 -8.75 8 -4.9E-07 7E-08
c1,c2 8.38 -8.75 4.56E-07 1E-08
Haga doble clic sobre la hoja para ver las frmulas. Los valores
en amarillo son los valores que se obtuvieron paso a paso. Los
valores en naranja son los coeficientes del polinomio de grado
n2 que hay que resolver aplicando el mismo mtodo. Note
que los coeficientes b
0
y b
1
son casi cero.