You are on page 1of 16

ECUACIONES POLINOMIALES - 1

- 81 -

5. ECUACIONES POLINOMIALES - 2
En este tema se continúa con el estudio de los métodos que permiten encontrar las soluciones reales e imaginarias de ecuaciones polinomiales de la forma:

P n ( x)=a1 x +a 2 x
5.1. MÉTODO DE NEWTON-RAPHSON

n

n−1

+a 3 x

(n−2)

+⋯+an x+a n+1=0

(5.1)

El método de Newton – Raphson (al igual que los otros métodos estudiados en los temas 2 y 3) permite encontrar una de las soluciones reales de una ecuación polinomial. Si bien es posible emplear directamente los programas elaborados en dichos temas, en el caso específico de las ecuaciones polinomiales resulta más eficiente calcular el valor del polinomio y el de su derivada mediante el proceso de división sintética. Algo que resulta particularmente útil en para el método de Newton – Raphson (que como se sabe requiere el valor de la función y el de la derivada). 5.1.1. División sintética La división sintética es el modo más eficiente de calcular el valor de un polinomio y el de su derivada. Así por ejemplo, si se quiere calcular el valor del siguiente polinomio y el de su derivada para “x=2” (x1=2):

P 3 ( x )=x 3+x 2 −3x−3=0
Se divide el polinomio entre “x-2” y el cociente resultante se vuelve a dividir entre “x-2”:
x1 = 2 1 1 -3 -3 2 1 3 1 5 6 3 6 3 ¬ valor de la función: f(2)

2 10 13 ¬ derivada de la función: f'(2)

Como se puede deducir fácilmente, si “a” son los coeficientes del polinomio original, los coeficientes resultantes de la división sintética: “b” se calculan con:

b1=a 1 bi =a i+b i−1⋅x 1 {i=2 → n+1
Donde “n” es el grado del polinomio.

(5.2)

Puesto que en ocasiones puede ser de utilidad los resultados de la división sintética se elaborará una función para este fin y dado que la fórmula es muy simple puede ser programada directamente: function b=divsin1(a,x1) n=length(a); b=0; b(1)=a(1); for i=2:n b(i)=a(i)+b(i-1)*x1; end end

1. se calculará el valor del siguiente polinomio y el de su derivada para “x=3.1”: P 7 (x )=7⋅x7 +3⋅x 4 – 8⋅x 4+3⋅x−9=0 >> a=[7.-8. >> divsin1(a.x-2) ans = [ x^2+3*x+3 3 ] En este caso el comando “divide” trabaja con expresiones simbólicas.649869.1876077 ] >> divsin1(ans(1:7).x.4947 2016.4 204.2) b = [ 1 5 13 ] Que también concuerda con los resultados del ejemplo manual. Tomando en cuenta la anterior consideración se ha elaborado el algoritmo se presenta en la siguiente página.0.09542 43922. Para ello es necesario declarar la o las variables simbólicas con “syms” (como se ha hecho).1.27 209.-3.1)= 19379.1) b = [ 7.7 70. Una vez repasado el proceso de división sintética se pasa a modificar el método de Newton Raphson para el caso específico de las ecuaciones polinomiales.0.3. Dado que en el método de Newton Raphson sólo son de interés el residuo de la primera y segunda división (el valor de la función y su derivada). cuy+os coeficientes son los obtenidos con la división sintética: >> coeff(ans(1).649869 ] Entonces el valor del polinomio es P7(3.254067000001 19379. 5. Llamando al módulo con los datos del ejemplo manual se obtiene: >> divsin1([1. .837 650.1)= 43922. Llamando nuevamente a “divsin1” con los primeros tres elementos del vector resultante se obtiene: >> divsin1(ans(1:3).-3].0.3.2) b = [ 1 3 3 3 ] Que son los mismos resultados obtenidos en el ejemplo manual.2:-1:0) ans = [ 1 3 3 ] Como otro ejemplo. El residuo (el valor de la función) es 3 y el cociente (la ecuación polinomial resultante) es “x3+3x+3=0”.1..2.0 21.-3. sólo cambia la forma en la que se calcula el valor de la función (del polinomio) y el de su derivada. El valor del polinomio puede ser calculado también con “polyval”: >> polyval([1.-9]. no es necesario almacenar los coeficientes de los polinomios residuales.82 - Hernán Peñaranda V. Algoritmo y código El método de Newton – Raphson en si no cambia.3.2) y = 3 Es posible también calcular el cociente y el residuo con “divide”: >> syms x >> divide(x^3+x^2-3*x-3.748 3269.0 43.1) b = [ 7.1876077 y el de su derivada P'7(3.81 844.-3].53357 6254.3.2135 12151.

1.83 - El códigio respectivo en Jasymca es: function x2=newtonp(a. df=0. n=length(a).1. end end Llamando a la función con los coeficientes de la ecuación polinomial: P 3 ( x )=x 3+2⋅x 2+3⋅x+4=0 Se obtiene: >> newtonp([1.50) .1e-16.x2). if abs(x1/x2-1)<err return end if c++==li error("error-newtonp: %f\n". f=a(i)+f*x1.err. for i=2:n df=f+df*x1.4]. end if abs(f)<err x2=x1.x2). printf("%f: %f\n".1 . while 1 f=a(1).x1.ECUACIONES POLINOMIALES . return end x2=x1-f/df.c.li) c=1.3.2. end x1=x2.

con el método de Newton Raphson. Otra alternativa consiste en encontrar una solución (o dos si son complejas) y trabajar luego con el polinomio residual para encontrar otra (u otras dos soluciones). por lo que al encontrar una en realidad se han encontrado dos (la otra solución en este caso es: -0.17468540428030602-1.1+1i.0: -1.5529064167209425i) 4.5468688872313963i).-12. Dichos valores pueden ser encontrados con el método QD.6506291914393907 8. Ejemplos 1. para ello simplemente se da un valor inicial adecuado: >> newtonp([1.0: 0.325]..765893511959711i 2.105697632552533+2.1e-2.0: (-0. es posible encontrar también soluciones complejas.3101857771760668i 3.17468540428030588+1.0: (-0.70.6506291914393882 x2 = -1.4].4653953736822276i) 3.650629251212898 7. x 4 −12x3+70x2 −204x+325=0 Los valores iniciales (error=1e-2) estimados con QD son: >> a=[1.1e-16.1746854039107681+1.0: (-0.0: -1.0: -1.84 - Hernán Peñaranda V.17468540428030602+1.17170224585665017+1. Como de costumbre.16298515499483 3. una vez probada la función se puede suprimir la impresión de resultados intermedios (anteponiendo un % a “printf”).6509334625984056 6.894302367447466-3.5468688872313963i Como se sabe.0: (-0.1.5468688872313963i) 7. por esta razón en este tema se empleará la primera alternativa.0: (-0.0: (-0.100) x = [ 3.50) 1.0: -1. continuando así hasta que el polinomio residual es de segundo o primer grado.546898529064582i) 5.3.6724823714029426 5.3101857771760668i 2.8460135373217041 4. 1.2.0: -1.5099351110123196+1.3. Por lo tanto.0: (-0. se obtiene: .638434115021929i) 2. x=qd(a.21498165769334393+1.105697632552533-2.17468540428030602+1. si se tienen valores iniciales adecuados es posible encontrar todas las soluciones con el método de Newton Raphson.5468688872313963i) x2 = -0. las soluciones complejas siempre vienen en pares conjugados.0: -1. Encuentre las soluciones (error=15 dígitos) de la siguiente ecuación. No obstante este procedimiento con frecuencia lleva a soluciones erróneas debido a que el error cometido al encontrar la primera solución se propaga a la segunda y de este a la tercera y así sucesivamente.17467056310830922+1.6506291914393882 Como Jasymca puede trabajar con números complejos.5468688879510515i) 6. sólo es necesario llamar dos veces al método de Newton.09809610154125115 2. Llamando la primera vez con x1.894302367447466+3. 5. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”.765893511959711i ] Como se sabe que los resultados complejos vienen en pares conjugados.-0.0: -1.-204.

li) r=0.ECUACIONES POLINOMIALES . if imagpart(r(i))~=0 r(i+1)=conj(r(i)).000000000000001+3.1e-15.0i Para la tercera solución se emplea como valor inicial x3: >> newtonp(a.1e-15. while ++i<=n r(i)=newtonp(a.9999999999999996i Siendo la cuarta solución el para conjugado de la tercera: >> conj(ans) ans = 1.err.x(i). i++.1 .x(1).x.100) x2 = 1.100) x2 = 4. i=0.9999999999999996-2.x.0i La segunda solución es el par conjugado de la primera: >> conj(ans) ans = 4.x(3). end end end Llamando a esta función se obtiene: >> newtonr(a.1e-15.41421356 Es posible calcular las cuatro soluciones con una sola instrucción si se emplea un ciclo “while” y una condición “if” para determinar si el resultado es o no complejo (si tiene o no parte imaginaria).000000000000001-3.li).9999999999999996+2.err. . tal como se ha hecho en la siguiente función: function r=newtonr(a. para ver los resultados en el sistema decimal (10) con 9 dígitos de precisión se escribe: >> format 10 9 A partir de esta orden todos los resultados se muestran con 9 dígitos.9999999999999996i En consecuencia las soluciones (redondeadas a los 15 dígitos considerados en el error) son: x1= x2= x3= x4= 4+3i 4-3i 2+3i 2-3i En Jasymca para ver los resultados con un determinado número de dígitos se emplea la instrucción: format base número_de_dígitos Por ejemplo.85 - >> newtonp(a. n=length(a)-1. por ejemplo al calcular la raíz cuadrada de 2 se obtiene: >> sqrt(2) ans = 1.100) r = [ 4+3i 4-3i 2+3i 2-3i ] Con “roots” se obtiene: >> roots(a) ans = [ 4-3i 4+3i 2-3i 2+3i ] Que son las mismas soluciones calculadas con “newton”.

35328093133i 1.-48].-265.-183.38877500559-0.64903423i -3.-6.-150].1e-12. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”.11.52287435+0.54309263636 -1.19912197-1.64903423i 2.38877500559+0.54726798 1.90623436+1.41.100) r = [ 5.100) r = [ 3.02901594494-3.66032132377-1. 2.17788017541i 1.40865702723i -1.35328093133i ] Y las soluciones calculadas con “newtonr” son: >> newtonr(a.500) x = [ 5.-265.52287435-0. Encuentre las soluciones (error=12 dígitos) de la siguiente ecuación.64471068+1.200) x = [ 3.63926123i 1.38877500559-0.38235398 2.86 - Hernán Peñaranda V.1e-3.63926123i -0.-21.401122418117i ] Con “root” se obtienen las mismas soluciones: >> roots(a) ans = [ 5. con el método de Newton Raphson.66032132377+1.02427058 1.-150].304236547i ] Y las soluciones calculadas con “newtonr” son: >> newtonr([1.-21.41.17788017541i -1.35541404i 2.63926123i 1.38877500559+0.-5.66032132377-1.304236547i -0.-7. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”.52287435-0.12.1e-6.35541404i -3. con el método de Newton Raphson.19912197+1. Encuentre las soluciones (error=9 dígitos) de la siguiente ecuación.38230401 2.64471068-1.19912197+1.-7.304236547i .54285033103 -1.401122418117i ] 3.90623436-1.401122418117i 1.x.34.40865702723i 1.02901594494+3. x=qd(a.11.x..30044111045+1.231.54309263636 -1.401122418117i 1. x – 5x – 6x +12x +34x−48=0 Los valores iniciales estimados con QD (error 1e-3) son: >> format 10 12 >> a=[1.17788017541i -1.63926123i -0.66032132377+1.19912197-1. 5 4 3 2 x 8−7x 7+11x 6+41x5−183x 4+231x3 −21x 2−265x – 150=0 Los valores iniciales con QD (error 1e-6: generalmente mientras mayor es el grado mayor debe ser la precisión) son: >> format 10 9 >> x=qd([1.1e-9.17788017541i 1.231.-183.30044111045-1.

¿Con qué instrucción se obtiene el cociente y el residuo de un polinomio en Jasymca? 5.-183.304236547i -0.64903423i -3. ¿Para qué sirve el comando “syms”? 2.231.2.-21.41.64471068-1.52287435-0.3) Entonces la ecuación de segundo grado puede ser resuelta obteniéndose así dos de las raíces del polinomio.63926123i 1.02427058 3. este procedimiento puede dar lugar a resultados erróneos (debido a la propagación del error).52287435+0. es decir hasta que se cumple que: P n ( x) x −r⋅x−s 2 =Qn−2 ( x)⋅( x −r⋅x – s )=0 2 (5.304236547i ] Que son las mismas soluciones sólo que no en el mismo orden. Preguntas 1. ¿Con qué instrucción se obtiene el valor de un polinomio.38235398 1. Para obtener el valor de un polinomio para un valor de “x” igual a -7.-265. si los errores son: ejemplo 1: 1e-7. ¿Entre qué expresión se tiene que dividir el polinomio? 3. ¿Cuál es el menor error que se puede emplear en el método QD para obtener valores iniciales adecuados en el último ejemplo? 10. ¿Cuáles son los valores del polinomio y de sus derivada para los polinomios de los ejemplos? 9.19912197+1.304236547i ] Las soluciones calculadas con “roots” son: >> roots([1.¿Cuáles son las soluciones que se obtienen.52287435+0.-150]) ans = [ 2. Para ello se divide el polinomio entre una ecuación de segundo grado (x2-rx-s) y el método va cambiando los coeficientes del divisor (“r” y “s”) hasta que el residuo se hace cero.ECUACIONES POLINOMIALES . MÉTODO DE BAIRSTOW El método de Bairstow permite calcular 2 de las raíces de una ecuación polinomial. sin embargo y al igual que en el método de Newton Raphson.11. en Jasymca? 4.64903423i 2.1 . por lo que en general .-7.87 - -0. para los polinomios de los ejemplos. para un valor dado de la variable independiente. Luego se puede repetir el proceso con el polinomio residual (Qn-2) y continuar así hasta encontrar todas las soluciones. ¿Qué instrucción se debe escribir en Jasymca para ver los resultados en notación binaria y con 14 dígitos? 7.19912197-1. ejemplo 2: 1e-10 y ejemplo 3: 1e-15? 5.63926123i -0. ¿Qué instrucción se debe escribir en Jasymca para ver los resultados en notación hexadecimal con 10 dígitos? 8.64471068+1. ¿Por qué no es confiable encontrar otras soluciones con el polinomio residual? 6.

División sintética de segundo grado En la división sintética de segundo grado se divide el polinomio entre la ecuación cuadrática: x2-rx-s=0. Con los resultados del ejemplo el residuo es: -0.88 - Hernán Peñaranda V. se puede deducir fácilmente de la igualdad: ( x−x 1 )⋅( x – x 2 )= x 2−r⋅x−s x 2−( x 1+ x 2)⋅x+x 1⋅x 2= x 2−r⋅x−s En consecuencia se cumple que: r =x 1+x 2 s=−x 1⋅x 2 (5.8*x-0. La relación entre los valores iniciales asumidos (x 1 y x2) y la ecuación cuadrática x2-rx-s. ∂4/∂r= 5. se prefiere encontrar las soluciones con el polinomio original. 5. s=-1): P 4 ( x)=x 4 – 1.5⋅x+3. se puede deducir fácilmente las ecuaciones generales para el cálculo de los coeficientes “b” resultantes: . ∂b4/∂s = c2. el método más eficiente es.5) Analizando las operaciones realizadas. donde “n” es el grado del polinomio. Para recordar el procedimiento que se sigue en la división sintética se dividirá el siguiente polinomio entre x2+x+1 (r=-1.1. y en general se cumple que: ∂b =c i−1 ∂r ∂b =c ∂ s i −2 (5.5.4) Para llevar a cabo la división señalada en la ecuación (5.2.1⋅x 3+2. una vez más.3⋅x 2+0..3). el de la división sintética. por lo que primero se repasará dicho procedimiento.8*(x-1)+0. entonces el residuo es: bn(x-r)+bn+1.1.3=0 Si se denomina “b” a los coeficientes resultantes de la primera división. Una segunda división sintética permite calcular las derivadas parciales de la función con relación a los coeficientes “r” y “s” de la ecuación cuadrática (estos valores son de utilidad en el método de Bairstow): Así.7 = -0. empleando valores iniciales adecuados para converger hacia cada para de soluciones.

2.2.7 ] Y para la segunda: >> divsin2(ans(1:4).-1) b = [ 1 -2. s )) Δ s+⋯+∞=0 ∂r ∂s Donde Δr y Δs son los valores que deben sumarse a “r” y “s” para que tanto “bn” como “bn+1” sean cero.89 - b1=a 1 b 2=a 2+b1⋅r bi =a i+b i−1⋅r +bi −2⋅x {i=2 → n residuo=bn⋅( x −r )+b n+1=b n⋅x+( b n+1−b n⋅r ) (5.s) b=0.-1.6) Donde “n” es el grado del polinomio. s+Δ S )=bn +1 (r . se obtiene: . siendo el residuo de la división: (5.8). se ha elaborado una función para este fin: function b=divsin2(a. s) ) Δ s+⋯+∞=0 ∂r ∂s ∂ b n+1 ( r +Δ r .2 ] Que concuerdan con los resultados calculados manualmente.3) se cumpla.2.3]. se obtiene para la primera división: >> divsin2([1.7)) debe ser cero. 5. Para que la ecuación (5.-1.1 5. en ((5.3.1 3. s+Δ S )=bn (r .-1. se prosigue con el desarrollo del método de Bairstow. end end Llamando a esta función con los datos del ejemplo manual. for i=3:length(a) b(i)=a(i)+b(i-1)*r+b(i-2)*s. s) ) Δ r+ ( b n (r .r.7) Dado que en ocasiones puede resultar útil el calcular la derivada sintética de segundo grado de forma independiente. en series de Taylor. b(1)=a(1). s) ) Δ r+ ( b n+1( r . s)+ ∂ ( bn ( r .5). no es posible en la práctica resolver este sistema (que es más complicado aún que el problema original).b). Por supuesto. Ello se puede lograr expandiendo los coeficientes “b n” y “bn+1”. Procedimiento Habiendo repasado el procedimiento para realizar la división sintética de segundo grado. por eso sólo se toman los términos de primer orden con lo que el sistema queda en la forma: ∂b n ∂b Δ r + n Δ s=0 ∂r ∂s ∂b n+1 ∂b b n+1+ Δ r+ n+1 Δ s=0 ∂r ∂s b n+ (5.5 -3.5. b(2)=a(2)+b(1)*r.8 0.0. printf("b= %f\n".1.4 -0. el residuo de la división (ecuación (5. s)+ ∂ ( bn+1 (r .1 .-1) b = [ 1 -3.ECUACIONES POLINOMIALES . como funciones de los coeficientes “r” y “s”: ∂ bn ( r+Δ r .8) Las derivadas parciales de este sistema son los coeficientes resultantes de la segunda división sintética del polinomio. reemplazando las igualdades de la ecuación (5.3.

es decir se deben ir calculando nuevos valores de “r” y “s” (r=r+Δr y s=s+“Δs”) hasta que los valores de “Δr” y “Δs” son cercanos a cero (exactitud) o hasta que los valores de dos iteraciones consecutivas de “r” y “s” sean casi iguales (precisión). c=divsin2(b.9) Que es un sistema lineal de dos ecuaciones con dos incógnitas (Δr y Δs).1 0.5⋅x+3.3857 0.8 2.4456 ] c = [ 1 -0.1+0.8068 -4. Por eso el cálculo los valores de “r” y “s” que hacen “b n” y “bn+1” cero.1⋅x 3+2.3.2 s = -2.1-0.90004 ds=(-b(n)-c(n-1)*dr)/c(n-2) = -1.r. Se inicializan variables y se calculan los valores de “r” y “s” (ecuación (5.r.1.9615 1. se repite el proceso: >> b=divsin2(a.16254 ] c = [ 1 -2.1i.17979 .s).3]. Ahora se calculan los valores de “b” y “c” (por división sintética.s) b = [ 1 -0.s).6748 ] Como ni bn (b4) ni bn+1 (b5) son cero se calcula Δr y Δs (ecuación (5.9054 ] >> dr=(b(n+1)*c(n-2)-b(n)*c(n-1))/(c(n-1)^2-c(n)*c(n-2)) dr = -0.7 1..3⋅x 2+0.9 2.3.1744 Como estos valores son muy diferentes a los iniciales.90 - Hernán Peñaranda V. cuya solución es: Δ r= b n+1⋅c n−2 – b n⋅c n−1 2 cn −1 – c n⋅c n−2 −b n – c n−1⋅Δ r Δ s= c n−2 (5. ecuación ((5. s+=ds r = -0.94388 -0.1544 Entonces se calculan los nuevos valores de “r” y “s”: >> r+=dr.6))): >> b=divsin2(a. x2=0.r.94 1.0E-2 n=length(a)-1.1i.s) b = [ 1 -1. x1=0.r. >> r=x1+x2.5.4)): >> a=[1. Para comprender mejor el método.0. s=-x1*x2 r = 0.2.-1.938 3.34 3. c n−1 Δ r+c n −2 Δ s=−b n c n Δ r+c n−1 Δ s=−b n+1 (5.1+0.5001 2. los valores de “Δr” y “Δs” son solo aproximados. pues al haber truncado la serie de Taylor en los términos de primer orden.10)): >> dr >> ds dr=(b(n+1)*c(n-2)-b(n)*c(n-1))/(c(n-1)^2-c(n)*c(n-2)) = -0.10) Al sumar estos valores a “r” y “s” no se consigue que “b n” y “bn+1” sean cero.1i.3=0 Asumiendo como valores iniciales: x1=0. x2=conj(x1). se convierte en un proceso iterativo. se aplicará manualmente el mismo a la siguiente ecuación polinomial: P 4 ( x)=x 4−1. c=divsin2(b.70004 s = -1.

039E-7 >> r+=dr.16457 >> r+=dr.9999 2. de dos iteraciones sucesivas.s) b = [ 1 -1.9 s = -1.9 4.9798 3.7133E-3 ] c = [ 1 -2.3.4887E-7 8.s) b = [ 1 -1.s) b = [ 1 -2 3 -1. s+=ds r = -0.2736 -3. c=divsin2(b.94736i ] Una vez comprendido el procedimiento de cálculo se puede elaborar el algoritmo y el programa para el método.1 Ahora los valores de bn y bn+1 son cercanos a cero y los valores de “r” y “s”.8999 s = -1.51 -0. s+=ds r = -0.0761 ] >> dr=(b(n+1)*c(n-2)-b(n)*c(n-1))/(c(n-1)^2-c(n)*c(n-2)) dr = -2.ECUACIONES POLINOMIALES .94736i -0.1286E-3 -2.8597 4.r.1 >> b=divsin2(a.-r.s).3863 ] c = [ 1 -2.0098 Una vez más bn y bn+1 no son cercanos a cero y los nuevos valores de “r” y “s” no son iguales a los anteriores. s+=ds r = -0.r.9991 2. 5.1789 ] >> dr=(b(n+1)*c(n-2)-b(n)*c(n-1))/(c(n-1)^2-c(n)*c(n-2)) dr = -9.45-0.0754E-2 >> r+=dr.91 - >> ds=(-b(n)-c(n-1)*dr)/c(n-2) ds = 0.0074E-2 >> ds=(-b(n)-c(n-1)*dr)/c(n-2) ds = -9.45+0. Algoritmo y código Puesto que en el método de Bairstow sólo son de interés los dos últimos elementos de la primera división sintética (el residuo) y los tres últimos .s).1006 Como aún no se cumplen las condiciones el proceso se repite dos veces más: >> b=divsin2(a. c=divsin2(b. por lo que el proceso concluye y se pueden calcular dos de las soluciones del polinomio: >> cuad([1.1 . por lo que el proceso se repite: >> b=divsin2(a.81E-8 >> ds=(-b(n)-c(n-1)*dr)/c(n-2) ds = -2.5081 -0.r.869 -4. c=divsin2(b.s).r.1874 ] >> dr=(b(n+1)*c(n-2)-b(n)*c(n-1))/(c(n-1)^2-c(n)*c(n-2)) dr = -9.3432E-7 ] c = [ 1 -2.r.0321 -0.8329E-4 >> r+=dr. son iguales (en los 5 dígitos de precisión con los que se muestran los resultados).16843 0.5383 -1.86324 -4.9 s = -1.-s]) r = [ -0.6976E-5 >> ds=(-b(n)-c(n-1)*dr)/c(n-2) ds = 5.87983 s = -1.r.2.8998 4. s+=ds r = -0.

El algoritmo del método.1i. end if abs(b1)+abs(b)<err break.87983. end if k++==li error("err-bairs: %f\n". se presenta en la siguiente página y el código respectivo en Jasymca es: function res=bairs(a. sc=s+ds.1e-12. 4: r=-0. c=b1. b1=b.94736i -0. c=b+c1*r+c0*s.1.3]. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”. Encuentre las soluciones (error=1e-14) de la siguiente ecuación. ds=(-b1-c1*dr)/c0. end r=rc. for i=3:n c0=c1. end res = cuad([1. s=-1.-rc. una vez probado el correcto funcionamiento del programa.err. que toma en cuenta la anterior consideración.. s=-1.1006. x 4 −3x 2+x−5=0 Los valores iniciales estimados con QD (error 1e-3) son: .1i. k=1. r=x1+x2. c1=0.0.x2. while 1 b1=a(1).9.2. printf("%f: r=%f.-1. if abs(r/rc-1)+abs(s/sc-1)<err break.45+0.92 - Hernán Peñaranda V. se puede suprimir la impresión de resultados intermedios. c1=c.5. rc=r+dr.1-0.45-0.sc). s=-1.94736i ] Que son los mismos valores obtenidos en el ejemplo manual. con el método de Bairstow.1744. res = [ -0.0.3.1. Como de costumbre. s=-1.3. 5.9.li) n=length(a). no es necesario almacenar los otros elementos resultantes.rc.x1.8999.k.1+0.-rc.4.100) 1: r=-0. 2: r=-0.1.\n".2.cuad([1. Ejemplos 4.70004. s=sc. b=a(i)+b1*r+b0*s. 3: r=-0. s=-1. s=%f.0.-sc]). 5: r=-0. s=-x1*x2.0098. b=a(2)+b1*r.-sc])). b0=b1. end Llamando a esta función con la ecuación del ejemplo manual se obtiene: >> bairs([1. end dr=(-b1*c1+b*c0)/(c1*c1-c*c0). elementos de la segunda (las derivadas parciales).

ECUACIONES POLINOMIALES .93 - .1 .

x(4).100) res = [ 9.94 - Hernán Peñaranda V. end while k<=cr r([i. >> format 10 14 >> a=[1. while k<ci r([i. con x2 y x3 (revisar la corrección hecha a las 2 primeras líneas del método “qd”): >> bairs(a.0916179909226i 9.err.3181113524451E-2+1.err.0916179909226i ] Que como se puede observar.100) r = [ -2.li).0515713160421i 0. ++i.xi(k+1). i+=2..li) n=length(a)-1.100) res = [ -2.1e-14.9499205477422 9.1362827747911 1.100) x = [ -2.x(1).0515713160421i 1. calculando luego las soluciones reales por un lado y las imaginarias por otro. con x1 y x4. xr=0. qd(a.0916179909226i 9.0916179909226i ] Que son las soluciones encontradas previamente. ci=0.0916179909226i 9.x(3).-5].3181113524451E-2-1.3181113524451E-2-1. else xr(++cr)=x(i).1e-14. i=0. end end Empleando esta función se obtiene: >> bairsr(a.li).7907021350564 ] Como Bairstow encuentra las soluciones de 2 en 2.x(2).3181113524451E-2-1.err.1362827747911 1. son las mismas soluciones calculadas con Bairstow. cr=0. k+=2.1362827747911 1.0916179909226i ] Con “roots” se obtiene: >> roots(a) ans = [ -2. k+=2.1e-14.x.xi(k).17304474764181-1.3181113524451E-2+1.9499205477422 ] >> bairs(a. end end k=1.xr(k+1). while ++i<=n if imagpart(x(i))~=0 xi(++ci)=x(i). if divide(cr. xi=0. .li). Cuando el grado del polinomio es impar. y las complejas por otro. ++k.xr(k). xi(++ci)=x(++i). i+=2. se deben encontrar las soluciones reales por un lado.9499205477422 9.1. end k=1. cuando el grado del polinomio es impar: function r=bairsr(a.3181113524451E-2+1. teniendo el cuidado de calcular una de las soluciones reales por el método de Newton.err.i+1])= bairs(a. una de las soluciones reales debe ser calculada por el método de Newton.-3. i=1.0. El proceso puede ser automatizado separando los valores iniciales reales de los complejos.2)(2)~=0 r(i)=newtonp(a.17304474764181+1.i+1])=bairs(a.xr(k).x.1e-3.13679163034 0.

44 x +373.17x +5589.-22680.600009938 -1.1e-3.29999248 -5.44.-4822. 8 7 6 5 4 3 2 x −60x +1554x −22680x +203889x −1155420x +4028156x −7893840x+6652800=0 Los valores iniciales estimados con QD (error: 1e-3) son: >> format 10 7 >> a=[1.600012358 -1.500367486 3.474x +115.1 .6652800].ECUACIONES POLINOMIALES . >> x=qd(a.30050426 -5.499988872 5. Encuentre las soluciones (error=1e-7) de la siguiente ecuación.15x +6985.17.399993894 2.100014573 -4.908x −4822.5=0 Los valores iniciales estimados con QD (error = 1e-3) son: >> format 10 10 >> a=[1.115.3. con el método de Bairstow.099989819 3. x −7. >> x=qd(a.-41.399993894 -4. 6.399995441 2.1e-10.4028156.200003577 ] Las soluciones calculadas con “bairsr” son: >> bairsr(a.500000029 5.600009938 ] Que son los mismos resultados calculados con Bairstow solo que en diferente orden.474.100014573 -5.-7.499999617 6.998061 8 7 6 5 4 3 2 .5]. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”.-7893840.200001057 ] Y las soluciones calculadas con “roots” son: >> roots(a) ans = [ 2.099857958 -4.x.-10901.995975 7.100) x = [ 11.95 - 5.908.200001057 1.01079 9.99954 8.-1155420. con el método de Bairstow.099989819 1.203889.100) r = [ 6.500000029 3.5589.-60.100) x = [ 6.1554.15.3x −41.66. estimando los valores iniciales con el método QD y verificando las soluciones con “roots”.6985.66x−10901.996411 6.099989918 1. Encuentre las soluciones (error=1e-10) de la siguiente ecuación.499999617 5.373.1e-3.29999248 -1.

999993 ] Las soluciones calculadas con “bairsr” son: >> bairsr(a.898949E-18i 9+2.721713E-15i 5+5. En los ejemplos. pues sus valores son cercanos a cero. En la función “bairsr” ¿Cuando es cierta la expresión “divide(cr.2) (2)~=0”? 5.96 - Hernán Peñaranda V.. las soluciones calculadas con “roots” no son correctas pues no debería existir la parte imaginaria (si se desprecia la parte imaginaria. que aparece en las ecuaciones? 2. ¿Se obtienen soluciones en todos los casos si en el método de Bairstow se emplea un error igual a 1e-15? .1e-7.482199E-15i 7-1. entonces se tienen las mismas soluciones obtenidas con “bairstow”) Preguntas 1.759684E-18i ] En este caso. 5.585034E-9i 8-2. En la función “bairs” ¿”n” es el grado del polinomio? 4. ¿En el diagrama (y la función) “bairs” cuál es la variable empleada como contador de los ciclos? 3.999345 4. ¿Por qué en las funciones “divsin1” y “divsin2” no existe la variable “n” (grado del polinomio).963785E-12i 6+7. ¿Por qué se deben calcular por separado las soluciones reales y complejas en el método de Bairstow? 6.086635E-13i 11-5.516598E-17i 10+1. ¿Cuáles son las soluciones que se obtienen si los valores iniciales se estiman con un error igual a 1e-9? 7.100) r = [ 11 10 9 8 7 6 5 4 ] Y las calculadas con “roots”: >> roots(a) ans = [ 4-3.x.999884 3. En los ejemplos.