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) = anxn + an-1xn-1 + ... +a1x + a0
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 raz (posiblemente compleja).

Corolario
Si P(x) es un polinomio de grado n >= 1, entonces existen
constantes nicas x1, x2, ... xk, posiblemente complejas, y
enteros positivos m1, m2, ..., mk, tales que:
k

m
i 1

P( x) an x x1

m1

x x2 m ... x xk m
2

Mtodo de Horner
Sea
P(x) = anxn + an-1xn-1 + ... +a1x + a0
Si bn = an y

bk = ak + bk+1x0 para k = n 1, n 2, ..., 1, 0

Por tanto b0 = P(x0). Ms an, si


Q(x) = bnxn1 + bn-1xn-2 + ... +b2x + b1
Entonces
P(x) = (x x0) Q(x) + b0

Ejercicios
Evaluar:

P(x) = 2x4 3x2 + 3x 4

en x0 = 2

P(x) = 7x5 + 6x4 6x3 + 3x 4

en x0 = 3

P(x) = 5x6 + 3x4 + 2x2 4x

en x0 = 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 x0) Q(x) + b0
donde
Q(x) = bnxn1 + bn-1xn-2 + ... +b2x + b1
Derivando
P(x) = Q(x)+(x x0)Q(x)
En x = x0,
P(x0) = Q(x0)

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.
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 = x0*y + aj
z = x0*z + y
y = x0*y + a0
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
P xn
P xn
xn 1 xn
xn
P ' xn
Q xn

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.
f(x)

f(x)

parbola

Lnea
recta
Raz
estimada

Raz
estimada

x1
raz

x0

x
x2 x1 x0

Mtodo de Mller
Utiliza tres aproximaciones: x0, x1, x2.
Determina la siguiente aproximacin x3 encontrando la
interseccin con el eje x de la parbola definida por los
puntos (x0,f(x0)), (x1,f(x1)), (x2,f(x2)).

x0 x1

x2 x3

Mtodo de Mller
Se considera el polinomio
P(x) = a(x x2)2 + b(x x2) + c
Se puede encontrar a, b y c resolviendo
f(x0) = a(x0 x2)2 + b(x0 x2) + c
f(x1) = a(x1 x2)2 + b(x1 x2) + c
f(x2) = a(x2 x2)2 + b(x2 x2) + c

Mtodo de Mller
Se llega a
c f ( x2 )
2
2

x0 x2 f ( x1 ) f ( x2 ) x1 x2 f ( x0 ) f ( x2 )
b
x0 x2 x1 x2 x0 x1

x1 x2 f ( x0 ) f ( x2 ) x0 x2 f ( x1 ) f ( x2 )
a
x0 x2 x1 x2 x0 x1

Mtodo de Mller
Los clculos pueden simplificarse usando
h0 x1 x0
h1 x2 x1

f x1 f x0
d0
h0
f x2 f x1
d1
h1
a

d1 d 0
h1 h0

b ah1 d1
c f x2

Mtodo de Mller
Para minimizar el error al resolver la cuadrtica P(x) = 0, se
calcula x3 con
x3 x2

2c
b signo(b) b 2 4ac

El proceso se reinicia tomando ahora x1, x2, y x3.

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) = 16x4 40x3 + 5x2 + 20x + 6

x0 =

0.5

x1 = -0.5

x2 =

0.0

xi

P(xi)

-0.555556 + ( -0.598352)i

-29.400701 + (

3.898725)i

-0.435450 + ( -0.102101)i

1.332225 + (

1.193097)i

-0.390631 + ( -0.141852)i

0.375058 + (

0.670168)i

-0.357698 + ( -0.169926)i

-0.146750 + (

0.007446)i

-0.356051 + ( -0.162856)i

-0.001840 + ( -0.000538)i

-0.356062 + ( -0.162758)i

0.000002 + ( -0.000001)i

Ejemplo
x0 =

2.5

x1 =

2.0

x2 =

2.3

xi

1.960592 + (

0.000000)i

-0.611310 + (

0.000000)i

1.970564 + (

0.000000)i

0.007455 + (

0.000000)i

1.970447 + (

0.000000)i

0.000029 + (

0.000000)i

x0 =

0.5

x1 =

1.0

P(xi)

x2 =

1.5

xi

P(xi)

1.287855 + (

0.000000)i

-1.376275 + (

0.000000)i

1.237459 + (

0.000000)i

0.126945 + (

0.000000)i

1.241605 + (

0.000000)i

0.002193 + (

0.000000)i

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) = x4 2x3 + 6x2 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 x2 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

P x ai x i
i 0

por x2 rx s resulta en un cociente de la forma


n2

Q x bi x i
i 0

y un residuo b1(x r) + b0 tal que

b x

P x x rx s
2

n2
i 2

b1 x r b0

Se utiliza la divisin sinttica para obtener la divisin entre el factor


cuadrtico:
bn = an
bn1 = an1 + rbn
bi = ai + rbi+1 + sbi+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 r y s
para acercarse a la solucin.
b1
b
r 1 s b1
r
s
b0
b
r 0 s b0
r
s
Las derivadas parciales se calculan por un proceso de divisin sinttica
similar al utilizado para calcular las bs.

cn = b n
cn1 = bn1 + rcn
ci = bi + rci+1 + sci+2 (i = n 2,, 1)
Donde:

b1
b
, c3 1
r
s
b
b
c0 0 , c2 0
r
s
c2

Se resuelven las ecuaciones para r y s y se emplean para mejorar r y s.

Ejemplo
Encontrar las races del siguiente polinomio en Excel
P( x) = x5 3.5x4 + 2.75x3 + 2.125x2 3.88x +1.25
Comience en r = -1 y s = -1

Hoja de Excel de Bairstow


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 b0 y b1 son casi cero.

También podría gustarte