Subido por Gab Bel

Método bairstow

Anuncio
Método de Bairstow
Gabriela Bello Cruz
Octubrer 04, 2019
Contents
1 Introducción
1
2 Marco Teórico
3
3 Metodologı́a
7
4 Conclusion
10
i
Chapter 1
Introducción
El método de Bairstow es un algoritmo eficiente de búsqueda de las raı́ces de un polinomio
real de grado arbitrario, de alguna manera se relaciona con los métodos de Müller y de
Newton-Raphson. Este algoritmo se diferencia de otros métodos porque encuentra tanto las
raı́ces reales como las imaginarias (en parejas complejas conjugadas), utilizando únicamente
aritmética real. Ha sido declarado como uno de los métodos de obtención de raı́ces más
eficientes, pues converge de manera rápida. Los problemas surgen al momento de introducir
polinomios de grado alto, funciones trascendentales o con coeficientes complejos. También,
si se le da una precisión pequeña, puede tener divergencia. Además este método sólo
funciona para resolver polinomios, por lo que funciones trigonométricas o exponenciales no
son candidatas para resolverse con este método. (Figure 1.1)
1
Figure 1.1: Diagrama de flujo del Método Bairstow
2
Chapter 2
Marco Teórico
Para poder encontrar raı́ces con este método necesitamos conocer el grado del polinomio
a resolver, cuáles son sus coeficientes y dos factores, r y s, los cuales son necesarios para
efectuar la división sintética. Es un método abierto, pues necesita dos estimaciones iniciales
pero no necesariamente estas encierran alguna raı́z. Este método se basa en la deflación, es
decir, la reducción del grado del polinomio. Con bairstow, se va reduciendo el polinomio
dos grados mediante divisiones sintéticas dobles. Por ejemplo el polinomio general [2.1].
fn (x) = a0 + a1 x + a2 x2 + ... + an xn
(2.1)
Se divide entre el factor x − t para dar un segundo polinomio que es de un grado menor:
fn–1 (x) = b1 + b2 x + b3 x2 + ... + bn xn−1
(2.2)
Con un residuo R = b0 , donde los coeficientes se calculan por la relación de recurrencia.
bn = an
(2.3)
bi = ai + bi+1 t
(2.4)
para i = n − 1 a 0
(2.5)
Observe que si t es una raı́z del polinomio original, el residuo b0 serı́a igual a cero. Para
permitir la evaluación de raı́ces complejas, el método de Bairstow divide el polinomio entre
un factor cuadrático x2 –rx–s. Si esto se hace con la ecuación [2.1], el resultado es un nuevo
polinomio.
fn–2 (x) = b2 + b3 x + ... + bn–1 xn−3 + bn xn−2
3
(2.6)
con un residuo:
R = b1 (x–r) + b0
(2.7)
Como con la división sintética normal, se utiliza una relación de recurrencia simple para
realizar la división entre el factor cuadrático:
bn = an
(2.8)
bn−1 = an−1 + rbn
(2.9)
El factor cuadrático se introduce para permitir la determinación de las raı́ces complejas.
Esto se relaciona con el hecho de que, si los coeficientes del polinomio original son reales,
las raı́ces complejas se presentan en pares conjugados. Si x2 –rx–s es un divisor exacto
del polinomio, las raı́ces complejas pueden determinarse con la fórmula cuadrática. Ası́, el
método se reduce a determinar los valores de r y s que hacen que el factor cuadrático sea
un divisor exacto. En otras palabras, se buscan los valores que hacen que el residuo sea
igual a cero.
La inspección de la ecuación [2.7] nos lleva a concluir que para que el residuo sea cero,
b0 y b1 deben ser cero. Como es improbable que los valores iniciales para evaluar r y s
conduzcan a este resultado, debemos determinar una forma sistemática para modificar los
valores iniciales, de tal forma que b0 y b1 tiendan a cero. Para lograrlo, el método de
Bairstow usa una estrategia similar a la del método de Newton-Raphson. Como tanto b0
como b1 son funciones de r y s, se pueden expandir usando una serie de Taylor, ası́:
b1 (r + ∆r, s + ∆s) = b1 +
δb1
δb1
∆r +
∆s
δr
δs
(2.10)
b0 (r + ∆r, s + ∆s) = b0 +
δb0
δb0
∆r +
∆s
δr
δs
(2.11)
Donde los valores del lado derecho se evalúan en r y s. Observe que se han despreciado los
términos de segundo orden y de orden superior. Esto representa una suposición implı́cita
de que –r y –s son suficientemente pequeños para que los términos de orden superior
puedan despreciarse. Otra manera de expresar esta suposición es que los valores iniciales
son adecuadamente cercanos a los valores de r y s en las raı́ces. Los incrementos, ∆r y ∆s,
necesarios para mejorar nuestros valores iniciales, se estiman igualando a cero las ecuaciones
[2.10][2.11] para dar:
δb1
δb1
∆r +
∆s = −b1
δr
δs
(2.12)
δb0
δb0
∆r +
∆s = −b0
δr
δs
(2.13)
4
Si las derivadas parciales de las b, pueden determinarse, hay un sistema de dos ecuaciones
que se resuelve simultáneamente para las dos incógnitas, ∆r y ∆s. Bairstow demostró que
las derivadas parciales se obtienen por división sintética de las b en forma similar a como
las b mismas fueron obtenidas:
cn = bn
(2.14)
cn−1 = bn–1 + rcn
(2.15)
ci = bi + rci+1 + sci+2 para i = n–2 a 1
(2.16)
δb0
δb1
δb1
0
donde δb
δr = c1 , δs = δr = c2 y δs = c3 . Ası́, las derivadas parciales se obtienen por la
división sintética de las b. Entonces, las derivadas parciales se sustituyen en las ecuaciones
[2.12] y [2.13] junto con las b para dar
c2 ∆r + c3 ∆s = −b1
(2.17)
c1 ∆r + c2 ∆s = −b0
(2.18)
Estas ecuaciones se resuelven para ∆r y ∆s, las cuales, a su vez, se emplean para mejorar
los valores iniciales de r y s. En cada paso, se estima un error aproximado en r y s:
|a,r | = |
∆r
|100%
r
(2.19)
|a,s | = |
∆s
|100%
s
(2.20)
y
Cuando ambos errores estimados caen por debajo de un criterio especificado de terminación
s , los valores de las raı́ces se determinan mediante
x=
r±
√
En este punto, existen tres posibilidades:
5
r2 + 4s
2
(2.21)
1. El cociente es un polinomio de tercer grado o mayor. En tal caso, el método de
Bairstow se aplica al cociente para evaluar un nuevo valor de r y s. Los valores anteriores
de r y s pueden servir como valores iniciales en esta aplicación.
2. El cociente es cuadrático. Aquı́ es posible evaluar directamente las dos raı́ces
restantes con la ecuación [2.21].
3. El cociente es un polinomio de primer grado.
evalúa simplemente como
x=−
6
s
r
En este caso, la raı́z restante se
(2.22)
Chapter 3
Metodologı́a
Emplee el método de Bairstow para determinar las raı́ces del polinomio:
f (x) = x5 − 3.5x4 + 2.75x3 + 2.125x2 3.85x + 1.25
(3.1)
Utilice como valores iniciales r = s = 1 e itere hasta un nivel de s = 1%
A continuación está el código en Python donde r y s son estimaciones iniciales, roots=
matrı́z vacı́a, a= vector de coeficiente creciente y g= grado del poliomio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import cmath
import matplotlib . pyplot as plt
import numpy as np
def bairstow (a ,r ,s ,g , roots ) :
if (g <1) :
return None
if ( g ==1) :
roots . append ( float ( - a [0]) / float ( a [1]) )
return None
if ( g ==2) :
D = ( a [1]**2.0) -(4.0) *( a [2]) *( a [0])
X1 = ( - a [1] - cmath . sqrt ( D ) ) /(2.0* a [2])
X2 = ( - a [1] + cmath . sqrt ( D ) ) /(2.0* a [2])
roots . append ( X1 )
roots . append ( X2 )
return None
n = len ( a )
b = [0]* len ( a )
c = [0]* len ( a )
b [n -1] = a [n -1]
b [n -2] = a [n -2] + r * b [n -1]
i = n - 3
while (i >=0) :
b [ i ] = a [ i ] + r * b [ i +1] + s * b [ i +2]
i = i - 1
c [n -1] = b [n -1]
c [n -2] = b [n -2] + r * c [n -1]
i = n - 3
while (i >=0) :
7
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
c [ i ] = b [ i ] + r * c [ i +1] + s * c [ i +2]
i = i - 1
Din = (( c [2]* c [2]) -( c [3]* c [1]) ) **( -1.0)
r = r + ( Din ) *(( c [2]) *( - b [1]) +( - c [3]) *( - b [0]) )
s = s + ( Din ) *(( - c [1]) *( - b [1]) +( c [2]) *( - b [0]) )
if ( abs ( b [0]) >1E -8 or abs ( b [1]) >1E -8) :
return bairstow (a ,r ,s ,g , roots )
if (g >=3) :
Dis = (( - r ) **(2.0) ) -((4.0) *(1.0) *( - s ) )
X1 = ( r - ( cmath . sqrt ( Dis ) ) ) /(2.0)
X2 = ( r + ( cmath . sqrt ( Dis ) ) ) /(2.0)
roots . append ( X1 )
roots . append ( X2 )
return bairstow ( b [2:] , r ,s ,g -2 , roots )
k = 0
g = 5
roots = []
a = [1 , -3.5 ,2.75 ,2.125 , -3.85 ,1.25]
r = -1
s = r
bairstow (a ,r ,s ,g , roots )
print ( " \ nFound Roots = > \ n " )
for r in roots :
print ( " R " + str ( k ) + " = " + str ( r ) )
k += 1
plt . figure ()
plt . plot ( roots )
plt . show ()
Al correr el programa se muestran los siguientes resultados
1
2
3
4
5
6
7
Found Roots = >
R0
R1
R2
R3
R4
=
=
=
=
=
( -1.0013105159178937+0 j )
(0.5022753327571223+0 j)
( 0 . 81 2 2 6 4 4 5 29 8 1 9 8 4 1 - 0 . 3 9 2 5 2 07 8 2 8 5 2 3 25 5 6 j )
(0.8122644529819841+0.39252078285232556 j)
1 .9 54 50 62 77 19 74 74 8
8
Figure 3.1: Gráfica
9
Chapter 4
Conclusion
El método de Bairstow tiene ventajas como el que nos permite encontrar raı́ces reales e
imaginarias, más de una y que no necesita más que nuestros dos valores iniciales s y r, a
diferencia del de Newton-Raphson, por ejemplo, que necesita la derivada de la función a
evaluar.
Ha sido declarado como uno de los métodos de obtención de raı́ces más eficientes, pues
converge de manera rápida. Los problemas surgen al momento de introducir polinomios
de grado alto, funciones trascendentales o con coeficientes complejos. También, si se le da
una precisión pequeña, puede tener divergencia. Además este método sólo funciona para
resolver polinomios, por lo que funciones trigonométricas o exponenciales no son candidatas
para resolverse con este método.
10
Descargar