raíces de polinomios programación numérica. definición un polinomio de grado n es una expresión...

30
Raíces de polinomios Programación Numérica

Upload: chico-galano

Post on 02-Feb-2016

256 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Raíces de polinomios

Programación Numérica

Page 2: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Definición

Un polinomio de grado n es una expresión 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 raíz (posiblemente compleja).

Page 3: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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

ii nm

1

kmk

mmn xxxxxxaxP ...)( 21

21

y

Page 4: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de HornerSea

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). Más aún, si

Q(x) = bnxn–1 + bn-1xn-2 + ... +b2x + b1

Entonces

P(x) = (x – x0) Q(x) + b0

Page 5: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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

Page 6: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Horner en Cdouble 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; }

Page 7: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Evaluación de la derivada

Dado que:

P(x) = (x – x0) Q(x) + b0

donde

Q(x) = bnxn–1 + bn-1xn-2 + ... +b2x + b1

Derivando

P’(x) = Q(x)+(x – x0)Q’(x)

En x = x0,

P’(x0) = Q(x0)

Page 8: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Evaluación 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];}

Page 9: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método horner

Entrada: grado n, a0, a1, ..., an, x0

Salida: y =P(x0), z = P’(x0)

1. y = an //calcule bn para P2. z = an //calcule bn-1 para Q3. Para j = n –1, n – 2, .... , 14. y = x0*y + aj 5. z = x0*z + y6. y = x0*y + a07. regresar y, z

Page 10: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Horner en Matlabfunction [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 Qfor j = 2:n-1, y = x0*y + x(j); z = x0*z + y;endy = x0*y + x(n);

Page 11: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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

n

nn

n

nnn xQ

xPx

xPxP

xx '1

Page 12: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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 solución en " << i << " pasos\n"; return x;}

Page 13: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 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.

x1

raíz

Línea recta

Raíz estimada

x0

f(x)f(x)

xx

x0x1x2

parábola

Raíz estimada

Page 14: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Müller

Utiliza tres aproximaciones: x0, x1, x2.

Determina la siguiente aproximación x3 encontrando la intersección con el eje x de la parábola definida por los puntos (x0,f(x0)), (x1,f(x1)), (x2,f(x2)).

x0 x1 x2 x3

f

Page 15: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Müller

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

Page 16: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Müller

Se llega a

)( 2xfc

102120

202

21212

20 )()()()(xxxxxx

xfxfxxxfxfxxb

102120

21202021 )()()()(xxxxxx

xfxfxxxfxfxxa

Page 17: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de MüllerLos cálculos pueden simplificarse usando

2

11

01

01

1

121

0

010

121

010

xfc

dahb

hh

dda

hxfxf

d

h

xfxfd

xxh

xxh

Page 18: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de Müller

Para minimizar el error al resolver la cuadrática P(x) = 0, se calcula x3 con

acbbsignob

cxx

4)(

2223

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

Page 19: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Müller en MatLabfunction 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;

Page 20: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

EjemploP(x) = 16x4 – 40x3 + 5x2 + 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

Page 21: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Ejemplox0 = 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

Page 22: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

ActividadEncontrar las raíces reales y complejas del siguiente polinomio por el método de Müller en MatLab.

P(x) = x4 – 2x3 + 6x2 – 8x + 8

Page 23: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Raíces de no lineales en Matlabfzero(FUN, x0) – encuentra la raíz 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 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);

Page 24: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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.

Page 25: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Método de BairstowEl enfoque de Bairstow es el de utilizar el Método de Newton para ajustar los coeficientes r y s en la cuadrática x2 – 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.

Page 26: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

La División Larga de un polinomio

n

i

ii xaxP

0

por x2 – rx – s resulta en un cociente de la forma

2

0

n

i

ii xbxQ

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

01

2

2

2 brxbxbsrxxxPn

i

ii

Page 27: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

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 r y s para acercarse a la solución.

000

111

bssb

rrb

bssb

rrb

Las derivadas parciales se calculan por un proceso de división sintética similar al utilizado para calcular las b’s.

Page 28: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

cn = bn

cn–1 = bn–1 + rcn

ci = bi + rci+1 + sci+2 (i = n – 2,…, 1)

Donde:

sb

crb

c

sb

crb

c

02

00

13

12

,

,

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

Page 29: Raíces de polinomios Programación Numérica. Definición Un polinomio de grado n es una expresión de la forma: P(x) = a n x n + a n-1 x n-1 +... +a 1 x

Ejemplo

Encontrar las raíces 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

Page 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) = a n x n + a n-1 x n-1 +... +a 1 x

Hoja de Excel de Bairstow

Método de Bairstown-> 5 4 3 2 1 0 r s valores calculados x1 x2a-> 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.8139b-> 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.9999c-> 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.5c2,c3 -8.75 8 -4.9E-07 7E-08c1,c2 8.38 -8.75 4.56E-07 1E-08

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