Sunteți pe pagina 1din 26

Instituto Politécnico Nacional

Escuela Superior de Ingeniería Mecánica y Eléctrica


Unidad Zacatenco

Ingeniería en Comunicaciones y Electrónica

Academia de Computación

Análisis Numérico

Trabajo de investigación documental:


Raíces

Profesor:
José Antonio Bernal Mendoza

Grupo: 4CV7

Equipo: 5

Integrantes:
Hernández Bautista Ricardo Josué
Nolasco Carbajal Alan Jordy
Ortega Aguilar Juan Marco
Osornio González Eduardo Alejandro
Otero Gómez David

Fecha de entrega: marzo 2018


Índice Página

 Índice de figuras………………………………………………………………………….... (3)


 Índice de tabla……………………………………………………………………………… (3)
 Resumen………………………………………………………………………………….... (4)
 Objetivo general y particular……………………………………………………………… (4)
 Justificación………………………………………………………………………………… (4)
 Introducción………………………………………………………………………………… (4)
 Marco teórico………………………………………………………………………………. (5)
 Desarrollo de los métodos………………………………………………………………… (5)
1. Método de Horner…………………………………………………………………….. (5)
a) Problema resuelto………………………………………………………………… (6)
b) Algoritmo…………………………………………………………………............... (6)
2. Método de Lyn Bairstow……………………………………………………………… (9)
a) Problema resuelto………………………………………………………………… (11)
b) Algoritmo…………………………………………………………………............... (12)
3. Newton para raíces múltiples………………………………………………………… (15)
a) Problema resuelto………………………………………………………………… (17)
b) Algoritmo…………………………………………………………………............... (19)
4. Método para raíces complejas……………………………………………………...... (20)
a) Problema resuelto………………………………………………………………… (23)
 Conclusión…………………………………………………………………………………. (27)
 Bibliografía…………………………………………………………………………………. (27)

2
Índice de Figuras Página

 Figura 1……………………………………………………………………………….. (15)


 Figura 2……………………………………………………………………………….. (17)
 Figura 3……………………………………………………………………………….. (21)
 Figura 4……………………………………………………………………………….. (25)
 Figura 5……………………………………………………………………………….. (25)
 Figura 6……………………………………………………………………………….. (26)

Índice de tablas

 TABLA 1………………………………………………………………………………. (22)


 TABLA 2………………………………………………………………………………. (22)
 TABLA 3………………………………………………………………………………. (22)
 TABLA 4………………………………………………………………………………. (23)
 TABLA 5………………………………………………………………………………. (23)
 TABLA 6………………………………………………………………………………. (23)
 TABLA 7………………………………………………………………………………. (24)
 TABLA 8………………………………………………………………………………. (24)
 TABLA 9………………………………………………………………………………. (24)

3
Resumen
En el trabajo matemático diario de la ingeniería se resuelven múltiples ecuaciones para hallar variables
desconocidas; por lo que es importante estudiar las distintas técnicas de resolución y análisis de estas.
Este trabajo de investigación abordara distintas técnicas de resolución, las cuales podrán ser más o
menos optimas dependiendo del problema a resolver. Los métodos por analizar serán los siguientes:
Horner, Lyn, Bairstow, “Newton para raíces múltiples” y “métodos para raíces complejas”.
Existen muchos métodos para poder determinar las raíces, pero este trabajo solo está enfocado en
los ya antes mencionados. Trabajamos para brindarle una explicación breve pero útil que ayude al
lector a entender rápidamente los métodos correctamente y que pueda darles el uso adecuado en su
futuro académico o laboral.
Objetivo general y particulares
 General
Conocer un mayor número de métodos numéricos para la resolución de problemáticas matemáticas
que se presenten. De esta manera, contar con más recursos para poder competir de mejor manera en
el ámbito laboral ingenieril.
 Particular
Conocer cada uno de los diferentes métodos a fondo para tener un panorama más amplio de las
resoluciones que podremos brindar a distintas problemáticas. Identificando cual es el método más
idóneo para la problemática en cuestión. Creando un pensamiento analítico en el ingeniero que le
ayude a procesar mayor número de información en un menor tiempo.
Justificación
El conocimiento de métodos numéricos para cálculos aproximados, así como su aplicación a
problemas específicos, y la estimación del error inherente cometido al aplicarlos es de interés
primordial para el futuro ingeniero. Ya que representan una herramienta de apoyo en áreas de
conocimiento tales como: la Simulación el Análisis Estructural, Procesos Químicos, etc. Sobre la base
de este razonamiento, se justifica la necesidad de contar con un curso de Análisis Numérico, que
introduzca a los estudiantes de la carrera de Ingeniería de Comunicaciones y Electrónica a dichos
métodos.
Introducción
Al momento de aplicar las Matemáticas a situaciones del mundo real nos encontramos a menudo con
problemas que no pueden ser resueltos analíticamente o de manera exacta y cuya solución debe ser
abordada con ayuda de procedimientos numéricos. Los métodos o procedimientos numéricos
son técnicas mediante las cuales es posible formular problemas matemáticos de tal forma que puedan
resolverse usando operaciones aritméticas.

4
En esta investigación encontraremos teoría de distintos métodos numéricos, los cuales se
desarrollarán de manera concreta, brindando al lector en la parte final de cada método un ejemplo, y
un programa a ejecutar en lenguaje C.

Marco Teórico
El método de Horner también es denominado método en nido, consiste en tomar el coeficiente del
término de mayor grado y multiplicarlo por el valor 𝑋0. ; añadir luego el coeficiente del termino siguiente
y multiplicar la suma por 𝑋0 y así sucesivamente.
En este caso, como puede verse fácilmente, el número total de multiplicaciones es (n) y el de sumas
también es (n). En resumen, esta regla o método es más sencillo que el anterior, en el sentido que
requiere menos operaciones
Es muy importante tener en cuenta las raíces nulas
𝑓(𝑥) ≠ 0
Que puede haber en un polinomio 𝑃(𝑥) cualquiera. Para esto se tiene el siguiente corolario: “Todo
polinomio 𝑃(𝑥) tendrá tantas raíces nulas como el grado de su termino de menor grado” .Esto significa
que todo polinomio que contenga termino independiente, no tendrá raíces nulas.
También es importante saber cuántas raíces reales positivas y negativas puede tener un polinomio
𝑃(𝑥) cualquiera. Para esto es muy útil la regla de los signos de Descartes, la cual dice lo siguiente:
“Todo polinomio 𝑃(𝑥) tendrá tantas raíces positivas como cambios de signos haya en los términos del
polinomio, revisando éstos desde el de mayor hasta el de menor grado”. Asimismo “El número de
raíces reales negativas será igual al de cambios de signos entre los términos del polinomio, habiendo
sustituido previamente en él, la (x) por (-x).
Una explicación muy breve de lo que es el método de Newton, ya que es probablemente el mejor para
la solución de ecuaciones algebraicas no lineales, es ampliamente conocido muy fácil de implementar
en computadora y rápido para llegar a las raíces de la ecuación. El método se basa en expandir en
serie de Taylor la función 𝑓(𝑥) en las cercanías de una de las raíces de la ecuación la cual se
denominara 𝑋𝑁.
Desarrollo de los métodos

Método de horner
Métodos para encontrar las raíces de ecuaciones polinomiales de la forma general
f n (x) = a 0 + a 1 x + a 2 x 2 +... + a n x n
Donde n es el grado del polinomio y las a son los coeficientes del polinomio. Aunque los coeficientes
pueden ser números reales o complejos, se limitaran los casos en que son reales. Entonces las raíces
del polinomio pueden ser reales y/o complejas.
Las raíces de los polinomios cumplen estas reglas:
1.En una ecuación de grado n, hay n raíces reales o complejas. Se debe notar que esas
5
raíces no necesariamente son distintas.
2.Si n es impar, hay al menos una raíz real.
3.Si existen raíces complejas, éstas se encuentran por pares conjugados (es decir, λ + μi y λ – μi),
donde i = √−1
Problema resuelto dentro de un contexto real
Sea
P(x)=anxn+an−1xn−1+......+a0,
si definimos bk como
bn =an
bk=ak+bk+1x0
entonces se verifica que
P(x0)= b0
P’(x0)= bnx0n−1+bn−1x0n−2+........+b1

Demostración Sea el polinomio Q(x) = bn xn−1+ bn−1 xn−2 + ..... + b1 . Veamos que se verifica que
P (x) = (x − x 0 )Q(x) + b0
Efectivamente, dado que ak = bk − bk+1 x0 y an = bn, obtenemos la igualdad anterior teniendo en cuenta
que
(x − x0 )Q(x) + b0 = bnxn + (bn−1 − bnx0 )xn + ..... + (b0 − b1x0 )
Por último, obtenemos
P’(x) = (x − x0 )Q’ (x) + Q(x)
de donde sale obviamente que P’(x0) = Q(x0).

Algoritmo del programa


Programa 1.
Author: john bakolas
Date: 07/03/10
#include<iostream>
#include<iomanip>
using namespace std;
float horner(float A[],int d ,float x)
{
double r;
int i;
r=A[d];
6
i=d-1;
while (i>=0)
r = A[i--] + r * x;
return r;
}
int main()
{
float *coefficients,*A0,*A1,A0X,A1X, f_xo1,f_xo2;; //Pointer to anarray of real numbers
int degree, i,k, n,x0,z; // degree of polynomial
cout << "Degree of polynomial: ";
cin >> degree;
//Dynamically allocate memory large enough to hold array of coefficients of polynomial
coefficients = new float[degree+1];
cout << "Enter coefficients : \n";//entering the coefficients of polynomial
for(i = degree; i > -1; i--)
{
cin >> coefficients[i];
}
//prints the polynomial
cout<<"f(x)= ";
for(i=degree;i>=0;i--)
{
if(i==0)
cout<<coefficients[i]<<"x^"<<i;
else
cout<<coefficients[i]<<"x^"<<i<<" + ";
}
cout<<endl<<endl;
if((degree+1) % 2)
A0 = new float[ (degree+1) / 2 + 1];
else
A0 = new float[(degree+1) / 2];
A1 = new float[(degree+1) / 2];
for(i=0 ; i<=degree ; i += 2 )
{
A0[i]=coefficients[i];
A1[i + 1]=coefficients[i + 1];
}
if((degree+1) % 2 != 0)
A0[(degree+1) / 2 + 1] = coefficients[degree];
cout << "Evaluate polynomial at x0 = ";
cin >> x0;
cout<<endl;
A0X = horner(A0,degree ,x0);
A1X = horner(A1,degree, x0);
f_xo1 = A0X + x0 * A1X;
cout<<" - (x0,f(x0) : ("<<x0<<" , "<<f_xo1<<" )"<<endl<<endl;
f_xo2 = A0X - x0 * A1X;
cout<<" - (-x0,f(-x0) : ( -"<<x0<<" , "<<f_xo2<<" )"<<endl<<endl;
//system("pause");
7
return 0;
}
Programa 2.
Autor: shirlearagon
#include <iostream>
//#include <conio.h>
#include <math.h>
using namespace std;
int main ( )
{
int n, i, m, t, k;
cout << "\n\n\t\t METODO DE HORNER PARA EVALUAR POLINOMIOS ";
cout << "\n\n\t Ingrese el grado del polinomio ";
cin >> n;
int a[n], b[n];
cout << "\n\n Ingrese los coeficientes con su signo correspondiente \n";
for(i=0; i<=n; i++)
{
m = n-i;
cout << "\n a("<< m <<") : > ";
cin >> a[n-i];
}
cout << "\n\n ingrese el polinomio: \n\n P(x) = ";
for(i=0; i<=n; i++)
{
m=n-i;
if(i!=n)
{
cout << " " << a[m] << " x' " << m << " + ";
}
else
{
cout << " " << a[m] << " ";
}
}
cout << "\n\n\n Coloque el valor para evaluar el P(x): ";
cin >> t;
b[n] = a[n];
for(k=(n-1); k>=0; k--)
{
b[k] = t*b[k+1]+a[k];
}
cout << "\n\n\t La raiz es: " << b[0];
cout << endl << endl;
//system("PAUSE");
return 0;

8
}

Ejemplo:
Sea P (x) = 3x 4 + 10x 3 − 10x − 3, los signos de los coeficientes son: + + −−. Por tanto, hay unúnico
cambio de signo y hay una raíz positiva. Si cambiamos x por −x, los signos de los coeficientes son +
− +−. Por tanto, hay 3 cambios de signo y hay una o tres raíces negativas. En este caso, las raíces
son x = 1, −1, −3, − 13 .
Metodo de Lyn
En 1941, S.N. Lin publico un procedimiento que se fundamenta en el resultado

R = ft = b0 = b1t + a0

Y en que si t es una raíz de pnx=0, entonces:

R = 0 = b1t + a0
O

t = −a0/b1(t)

Se ha escrito b1(t) en lugar de b1 para hacer énfasis en que el valor de b1 (y de las demás b ) depende
del valor t donde se evalúa f(x) y así ver el lado derecho de la ecuación 2.38 como una función de t .
Lo que puede escribirse como:

t = −a0/b1t = g(t)
Y se le puede aplicar el método de punto fijo, empezando con un valor inicial t0 cercano a la raíz t, de
modo que:

t = −a0/b1(t0) = g(t0)

Restando en ambos lados t0:

t1 − t0 = a0 + t0b1(t0)b1(t0)

t1 = t0 − R(t0)b1(t0)

Y se obtiene el algoritmo de Lin. Este método no requiere el cálculo de las c como el de Birge-Vieta,
por lo que el trabajo por iteración se reduce a la mitad. Esta reducción contrasta con un orden bajo de
convergencia y la inestabilidad propia del método de punto fijo.

La estabilidad del método puede mejorarse en una raíz xk, si se conoce una buena aproximación a xk.
Para esto se incorpora el parámetro λ a la ecuación anterior de Lin y queda

t1 = t0 − λRb1

9
Donde :

λ = −f(0)t0f(t0)

con t0 = 2.88, λ = 0.018555 y la formula modificada de Lin, en general es:


t = t − λRb1

Método de Lin Bairstow


Esta ocasión empezaremos por hacer una pequeña definición del método a desarrollar.
El método de Lin Bairstow es un método iterativo, basado en el método de Müller y de Newton
Raphson. Dado un polinomio fx (x) se encuentran dos factores, un polinomio cuadrático fn (x) = x 2 −
rx − syfn−2 (x).El procedimiento general para el método de Lin Bairstow es:

1. Dado fx (x)y ro y so
2.
3. Utilizando el método de NR calculamos fn (x) = x 2 − rx − syfn−2 (x), tal que, el residuo
f (x)
de fn(x)sea igual a cero.
2
4. Se determinan la raíces f2 (x), utilizando la formula general.
f (x)
5. Se calcula fn−2 (x)= fn(x)
2
6. Hacemos fn (x) = fn−2 (x)

Si el grado del polinomio es mayor que tres regresamos al paso 2


Si no terminamos. La principal diferencia de este método, respecto a otros, es que permite calcular
todas las raíces de un polinomio (reales e imaginarias).
Para calcular la división de polinomios, hacemos uso de la división sintética. Así dado
𝑓𝑛 (𝑥) = 𝑎𝑛 𝑥 𝑛 + 𝑎𝑛−1 𝑥 𝑛−1 + ⋯ + 𝑎2 𝑥 2 + 𝑎1 𝑥 + 𝑎0

Al dividir entre 𝑓2 (𝑥) = 𝑥 2 − 𝑟𝑥 − 𝑠, tenemos como resultado el siguiente polinomio

𝑓𝑛−2 (𝑥) = 𝑏𝑛 𝑥 𝑛−2 + 𝑏𝑛−1 𝑥 𝑛−3 + ⋯ + 𝑏3 𝑥 + 𝑏2

Con un residuo R = b1(x-r) + b0, el residuo será cero solo si b1 y b0 lo son.

Los términos b, los calculamos utilizamos división sintética, la cual puede resolverse utilizando la
siguiente relación de recurrencia

bn = a n
bn-1 = an-1 + rbn
bi = ai + rbi+1 + sbi+2

10
Una manera de determinar los valores de r y s que hacen cero el residuo es utilizar el Método de
Newton-Raphson. Para ello necesitamos una aproximación lineal de b1 y b0 respecto a r y s la cual
calculamos utilizando la serie de Taylor.
Donde los valores de r y s están dados y calculamos los incrementos dr y ds que hacen a
𝑏1 = 𝑟 + ∆𝑟, 𝑠 + ∆𝑠 y 𝑏0 = 𝑟 + ∆𝑟, 𝑠 + ∆𝑠 igual a cero. El sistema de ecuaciones que tenemos que
resolver es:

𝜕𝑏1 𝜕𝑏1
𝑏1 (𝑟 + ∆𝑟, 𝑠 + ∆𝑠) = 𝑏1 ∆𝑟 + ∆𝑠
𝜕𝑟 𝜕𝑠
𝜕𝑏0 𝜕𝑏0
𝑏0 (𝑟 + ∆𝑟, 𝑠 + ∆𝑠) = 𝑏0 ∆𝑟 + ∆𝑠-----1
𝜕𝑟 𝜕𝑠

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 la ecuación (1)

𝜕𝑏1 𝜕𝑏1
∆𝑟 + ∆𝑠 = −𝑏1
𝜕𝑟 𝜕𝑠
𝜕𝑏0 𝜕𝑏0
∆𝑟 + ∆𝑠 = −𝑏0
𝜕𝑟 𝜕𝑠

Bairtow muestra que las derivadas parciales se pueden obtener haciendo un procedimiento similar a
la división sintética, así

cn = bn
cn-1 = bn-1 + rcn
ci = bi + rci+1 + sci+2

Esto para 𝑖 = 𝑛 − 2 𝑎 1
Donde 𝜕𝑏0/ 𝜕𝑟 = 𝑐1 , 𝜕𝑏0 / 𝜕𝑠 = 𝜕𝑏1/ 𝜕𝑟 y 𝜕𝑏0 / 𝜕𝑟 = 𝑐2 . Así, las derivadas parciales se obtienen por la
división sintética de las b.

𝑐2 ∆𝑟 + 𝑐3 ∆𝑠 = −𝑏1
𝑐1 ∆𝑟 + 𝑐2 ∆𝑠 = −𝑏0

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:
∆𝑟 ∆𝑠
|𝜀𝑎,𝑟 | = | 𝑟 | ∗ 100% y |𝜀𝑎,𝑠 | = | 𝑠 | ∗ 100%

11
Cuando ambos errores estimados caen por debajo de un criterio especificado de terminación es, los
valores de las raíces se determinan mediante:
𝑟±√𝑟 2 +4𝑠
𝑥= ---- ec.Z
2

En este punto, existen tres posibilidades:


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 (z).
3. El cociente es un polinomio de primer grado. En este caso, la raíz restante se evalúa simplemente
𝑠
como 𝑥 = − 𝑟

Problema resuelto dentro de un contexto real


Emplee el método de Bairstow para determinar las raíces del polinomio

𝑓5 = 𝑥 5 − 3.5𝑥 4 + 2.75𝑥 2 − 3.875𝑥 + 1.25

Utilice como valores iniciales 𝑟 = 𝑠 = −1 e itere hasta un nivel de 𝜀𝑠 = 1%.

Solución. Se aplican las ecuaciones anteriores para calcular:

𝑏5 = 1 𝑐5 = 1
𝑏4 = −4.5 𝑐4 = −5.5
𝑏3 = 6.25 𝑐3 = 10.75
𝑏2 = 0.375 𝑐2 = −4.875
𝑏1 = −10.75 𝑐1 = −16.375
𝑏0 = 11.375

Así, las ecuaciones simultáneas para encontrar ∆𝑟 𝑦 ∆𝑠 son:

−4.875∆𝑟 + 10.75∆𝑠 = 10.5


−16.375∆𝑟 − 4.875∆𝑠 = −11.375

Al ser resueltas se encuentra que ∆𝑟 = 0.3558 𝑦 ∆𝑠 = 1.1381. Por lo tanto, los valores iniciales se
corrigen a

𝑟 = −1 + 0.3558 = −0.6442
𝑠 = −1 + 1.1381 = 0.1381

Y se evalúa el error aproximado

12
0.3558
|𝜀𝑎,𝑟 | = | | 100% = 55.23%
−0.6442

1.1381
|𝜀𝑎,𝑠 | = | | 100% = 824.1%
0.1381

A continuación, se repiten los cálculos usando los valores revisados para r y s.

𝑏5 = 1 𝑐5 = 1
𝑏4 = −4.1442 𝑐4 = −4.7884
𝑏3 = 5.5578 𝑐3 = 8.7806
𝑏2 = −2.0276 𝑐2 = −8.3454
𝑏1 = −1.8013 𝑐1 = 4.7874
𝑏0 = 2.1304

Por lo tanto, se debe resolver el sistema de ecuación

– 8.3454∆𝑟 + 8.7806∆𝑠 = 1.8013


4.7874∆𝑟 – 8.3454∆𝑠 = – 2.1304

Al tener la solución ∆𝑟 = 0.1331 y ∆𝑠 = 0.3316, ésta se utiliza para corregir la raíz estimada:

𝑟 = – 0.6442 + 0.1331 = – 0.5111 |𝜀𝑎,𝑟 | = 26.0%


𝑠 = 0.1381 + 0.3316 = 0.4697 |𝜀𝑎,𝑠 | = 70.6%

El cálculo continúa, resultando que después de cuatro iteraciones el método converge a los valores
𝑟 = −0.5 (|𝜀𝑎,𝑟 | = 0.063%) y
𝑠 = 0.5 (|𝜀𝑎,𝑠 | = 0.040%).

−0.5 ± √(−0.5)2 + 4(0.5)


𝑥= = 0.5, −1.0
2

Entonces, se tiene que, el cociente es la ecuación cúbica

𝑓(𝑥) = 𝑥 3 − 4𝑥 2 + 5.25𝑥 − 2.5

El método de Bairstow puede aplicarse a este polinomio usando los resultados del paso anterior, 𝑟 =
– 0.5 𝑦 𝑠 = 0.5 , como valores iniciales. Cinco iteraciones dan las 𝑎𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑟 = 2 𝑦 𝑠 =
– 1.249, las cuales se usan para calcular

2 ± √(2)2 + 4(−1.249)
𝑥= = 1 ± 0.499𝑖
2

Ahora, el cociente es un polinomio de primer grado que puede ser directamente evaluado mediante la
𝑠
ecuación 𝑥 = − 𝑟 para determinar la quinta raíz: 2.

13
Algoritmo del programa
SUB Bairstow (a,nn,es,rr,ss,maxit,re,im,ier)
DIMENSION b(nn), c(nn)
r = rr; s = ss; n = nn
ier = 0; ea1 = 1; ea2 = 1
DO
IF n < 3 OR iter ≥ maxit EXIT
iter = 0
DO
iter = iter + 1
b(n) = a(n)
b(n – 1) = a(n – 1) + r * b(n)
c(n) = b(n)
c(n – 1) = b(n – 1) + r * c(n)
DO i = n – 2, 0, –1
b(i) = a(i) + r * b(i + 1) + s * b(i + 2)
c(i) = b(i) + r * c(i + 1) + s * c(i + 2)
END DO
det = c(2) * c(2) – c(3) *c(1)
IF det ≠ 0 THEN
dr = (–b(1) * c(2) + b(0) * c(3))/det
ds = (–b(0) * c(2) + b(1) * c(1))/det
r = r + dr
s = s + ds
IF r ≠ 0 THEN ea1 = ABS(dr/r) * 100
IF s ≠ O THEN ea2 = ABS(ds/s) * 100
ELSE
r=r+1
s=s+1
iter = 0
END IF
IF ea1 ≤ es AND ea2 ≤ es OR iter ≥ maxit EXIT
END DO
CALL Quadroot(r,s,r1,i1,r2,i2)
re(n) = r1
im(n) = i1
re(n – 1) = r2
im(n – 1) = i2
n=n–2
DO i = 0, n
a(i) = b(i + 2)
END DO
END DO

IF iter < maxit THEN


IF n = 2 THEN
r = –a(1)/a(2)
s = –a(0)/a(2)
CALL Quadroot(r,s,r1,i1,r2,i2)
14
re(n) = r1
im(n) = i1
re(n – 1) = r2
im(n – 1) = i2
ELSE
re(n) = –a(0)/a(1)
im(n) = 0
END IF
ELSE
ier = 1
END IF
END Bairstow

Metodo de Newton para raices multiples


El método numérico de Newton es una aplicación del cálculo diferencial que se utiliza para hallar los
ceros de una función derivable de enésimo grado con la precisión deseada. Los procedimientos para
hallar las raíces o ceros de funciones lineales o cuadráticas a partir de los coeficientes de la ecuación
son sencillos y exactos. Aunque existen fórmulas para hallar las raíces de ecuaciones de tercer y
cuarto grado, dichas formulas son muy complicadas y nada prácticas. Un teorema, atribuido a Abel,
establece que no es posible encontrar una fórmula general, en términos de los coeficientes de la
ecuación, que permita hallar los ceros exactos de una función polinomial de grado cinco o mayor. Esto
significa que, en general, sólo se pueden hallar aproximaciones para los ceros de funciones de grado
mayor que cuatro aplicando métodos numéricos, este método ante la presencia de raíces múltiples,
convergen linealmente y pueden fallar.
Descripción del método:
Lo que proponemos es hallar un 𝑟 ∈ ℝ tal que 𝑓(𝑟) = 0 en la figura 1.1 se muestra la gráfica de 𝑓. El
punto res donde la gráfica corta al eje x. para obtener una aproximación de 𝑟, primero tomamos el
punto 𝑥1 cercano a 𝑟 (el punto se elige observando la gráfica de 𝑓 ). Ahora consideramos la recta
tangente 𝑇1 de 𝑓 en (𝑥1 , 𝑓(𝑥1 )): la abscisa en el origen de 𝑇1 es 𝑥2 . Se toma a 𝑥2 como una segunda
aproximación de 𝑟. Repetimos el proceso con la tangente a 𝑓, 𝑇2 en el punto(𝑥2 , 𝑓(𝑥2 )): la abscisa en
el origen de 𝑇2 es 𝑥3 . Este proceso se continúa hasta que se
obtenga el grado preciso requerido
En la obtención de las aproximaciones sucesivas 𝑥2, 𝑥3 … a
partir de la primera aproximación 𝑥1 , se utilizan las ecuaciones
de las rectas tangentes. Veamos la recta tangente 𝑇1 , que pasa
por (𝑥1 , 𝑓(𝑥1 )), tiene una pendiente de 𝑓′(𝑥1 ), la ecuación de
esta recta está dada por:
𝑦 − 𝑓(𝑥1 ) = 𝑓′(𝑥1 )(𝑥 − 𝑥1 ) …… (1) Forma punto pendiente.
La abscisa en el origen de 𝑇1 es 𝑥2 , y se halla haciendo 𝑥 = 𝑥2
e 𝑦 = 0 en (1) es decir:
Figura 1 0 − 𝑓(𝑥1 ) = 𝑓′(𝑥1 )(𝑥2 − 𝑥1 )
⟹ −𝑓(𝑥1 ) = 𝑓 ′ (𝑥1 )(𝑥2 ) − 𝑓 ′ (𝑥1 )(𝑥1 ) ⇔ 𝑓 ′ (𝑥1 )(𝑥2 ) = 𝑓 ′ (𝑥1 )(𝑥1 ) − 𝑓(𝑥1 )
15
𝑓(𝑥1 )
⟹ 𝑥2 = 𝑥1 − , 𝑓 ′ (𝑥1 ) ≠ 0
𝑓 ′ (𝑥1 )
La ecuación de 𝑇2 , que pasa por el punto (𝑥2 , 𝑓(𝑥2 )) es:
𝑦 − 𝑓(𝑥2 ) = 𝑓′(𝑥2 )(𝑥 − 𝑥2 )…. (2)
Haciendo 𝑥 = 𝑥3 e 𝑦 = 0 en (2), se obtiene:
0 − 𝑓(𝑥2 ) = 𝑓′(𝑥2 )(𝑥 − 𝑥2 )

𝑓(𝑥2 )
⟹ 𝑥3 = 𝑥2 − , 𝑓 ′ (𝑥1 ) ≠ 0
𝑓 ′ (𝑥2 )
Continuando de esta forma, se deduce la fórmula general para la aproximación de 𝑥𝑛+1 en términos
de la aproximación anterior 𝑥𝑛 :
Sea 𝑓 una función derivable y sea 𝑟 un cero real de 𝑓. Si 𝒙𝒏 es una aproximación a 𝑟, entonces la
siguiente aproximación xn+1 está dada por:

𝒇(𝒙 )
𝒙𝒏+𝟏 = 𝒙𝒏 − 𝒇′ (𝒙𝒏 ) , 𝒇′ (𝒙𝒏 ) ≠ 𝟎 … (∎)
𝒏

Procedimiento

1. Observando la gráfica de la función se estima un valor adecuado para la


primera aproximación 𝒙𝟏 .
2. Sustituyendo la primera aproximación en (∎), se obtiene una segunda
aproximación 𝒙𝟐 . Luego se calcula la 𝒙𝟑 sustituyendo en (∎), la segunda
aproximación 𝒙𝟐 ; y así sucesivamente hasta que se llegue a la igualdad
𝐱 𝐧+𝟏 = 𝐱 𝐧 .
3. Para obtener una aproximación de k cifras decimales, se calculan cada uno
de los números 𝒙𝟐, 𝒙𝟑 ,… con una precisión de k cifras decimales.

Problema resuelto dentro de un contexto real

16
Ejemplo:
Utilice el método de newton en la siguiente ecuación 𝑥 3 − 4𝑥 2 − 2 = 0 para calcular su raíz real (con
cuatro cifras decimales).
𝑓(𝑥𝑛 )
𝑥𝑛+1 = 𝑥𝑛 − , 𝑓 ′ (𝑥𝑛 ) ≠ 0 … (∎)
𝑓 ′ (𝑥𝑛 )
Sea
𝑓(𝑥) = 𝑥 3 − 4𝑥 2 − 2 … (1)
⟹ 𝑓 ′ (𝑥) = 3𝑥 2 − 8𝑥 ... (2)
De (∎), (1) y (2) se deduce que la segunda aproximación está dada por:
𝑥 3 −4𝑥 2 −2
𝑥2 = 𝑥1 − … (3)
3𝑥 2 −8𝑥

Ahora observamos la gráfica de 𝑓 y escogemos a 𝑥1 = 4.0000 (4)

Gráfica de la función 𝑓(𝑥) = 𝑥 3 − 4𝑥 2 − 2

Ahora 𝑓(4.0000) = −2.0000 (5)


𝑓′(4.0000) = 16.0000 (6)
Sustituyendo (4), (5) y (6) en (3) se obtiene:
−2.0000
𝑥2 = 4.0000 − 16.0000 ⟹ 𝑥2 = 4.1250

Para este nuevo valor de x, calculamos


Ahora 𝑓(4.1250) = 0.1270
𝑓′(4.1250) = 18.0469
Figura 2
De tal manera que:
0.1270
𝑥3 = 4.1250 − 18.0469 ⟹ 𝑥3 = 4.1180

Para este nuevo valor de x, calculamos


Ahora 𝑓(4.1180) = 0.0010
𝑓′(4.1180) = 17.9298
De tal manera que:
0.0010
𝑥4 = 4.1180 − 17.9298 ⟹ 𝑥4 = 4.1179 (7)

Para este nuevo valor de x, calculamos


Ahora 𝑓(4.1179) = 0.0008
17
𝑓′(4.1179) = 17.9281
De tal manera que:
0.0008
𝑥5 = 4.1179 − 17.9281 ⟹ 𝑥5 = 4.1179 (8)

Comparando (7) y (8), se tiene que:


𝑥4 = 𝑥5 = 4.1179
∴ 𝐿𝑎 𝑟𝑎í𝑧 𝑟𝑒𝑎𝑙 𝑑𝑒𝑥 3 − 4𝑥 2 − 2 = 0, 𝑑𝑎𝑑𝑎 𝑐𝑜𝑛 𝑢𝑛𝑎 𝑎𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑐𝑖ó𝑛 𝑑𝑒 𝑐𝑢𝑎𝑡𝑟𝑜 𝑐𝑖𝑓𝑟𝑎𝑠 𝑒𝑠 𝟒. 𝟏𝟏𝟕𝟗

Desventajas del Método de Newton:


- Lenta convergencia debida a la naturaleza de una función en particular.
- Cuando un punto de inflexión, 𝑓′(𝑥) = 0 , ocurre en la vecindad de una raíz.
- No existe un criterio general de convergencia.
Tener un valor suficientemente cercano a la raíz.
Apoyarse de herramientas gráficas.
Conocimiento del problema físico.
- Evaluación de la derivada.

Algoritmo del programa


#include"stdafx.h"
#include<Windows.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<iomanip>
#include<iostream>
using namespace std;
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x; coord.Y = y;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hStdOut, coord);
}

18
double f(double Xi)
{ double z = pow(Xi, 3) - 5 * pow(Xi, 2) + 7 * (Xi)-3;
return z;
}
double f1(double Xi)
{ double n = 3 * pow(Xi, 2) - 10 * (Xi)+7;
return n;
}
double f2(double Xi)
{ double l = 6 * (Xi)-10;
return l;
}
void main()
{
int SI = 1;
do{
system("cls");
double Xi = 0, Ea = 0, Xz = 0;
int cont = 0;
cout << " METODO DE NEWTON-RAPSON MODIFICADOn" << endl << endl;
cout << "introduce Xi: "; cin >> Xi;
cout << endl;
if (Xi >= 1)
{ // entra condición si valor es igual a 0
cout << "NO ES FACTIBLE REALIZAR LA PRUEBA CON NUMEROS MAYORES A CERO:" << endl

}
else{
gotoxy(1, 10); cout << "i";
gotoxy(11, 10); cout << "Xi";
gotoxy(21, 10); cout << " f(Xi)";
gotoxy(31, 10); cout << " f'(Xi)";
gotoxy(41, 10); cout << " f''(Xi)";
gotoxy(51, 10); cout << " Ea";
do{
Xz = Xi - ((f(Xi)*f1(Xi)) / ((pow(f1(Xi), 2)) - (f(Xi)*f2(Xi))));
Ea = fabs((Xz - Xi) / Xz) * 100;
gotoxy(1, 12 + cont); cout <<fixed<<setprecision(6)<< cont;
gotoxy(11, 12 + cont); cout << Xi;
gotoxy(21, 12 + cont); cout << f(Xi);
gotoxy(31, 12 + cont); cout << f1(Xi);
gotoxy(41, 12 + cont); cout << f2(Xi);
gotoxy(51, 12 + cont); cout << Ea << endl << endl;
Xi = Xz; cont++;
} while (Ea >= 0.005);
} cout<<"DESEAS REALIZAR LA OPERACION OTRA VEZ? SI[1] NO[2]"; cin>>SI;
19
} while (SI <= 1);
_getch();

Métodos para raíces complejas

En los cursos de análisis numérico o de métodos numéricos que se imparten en los programas de
ingeniería, el método de Newton-Raphson nos auxilia, mediante un algoritmo iterativo, a aproximar al
valor, o valores de la variable que resulta en los ceros de la función real (también conocidos como las
raíces reales de la función).
El método utiliza la derivada de la función evaluada en un punto relativamente cercano a la raíz que
se pretende “cercar”. Con el valor de la derivada se encuentra la ecuación de la recta tangente a la
función en el punto dado. Si la pendiente de la recta es diferente a cero, se calcula el punto de
intersección de la recta tangente con el eje de las abscisas (eje x). Con este nuevo valor de la variable
se encuentra el siguiente punto de la función y se repite el proceso.
𝑓(𝑥𝑘 )
𝑥𝑘+1 = 𝑥𝑘 −
𝑓′(𝑥𝑘 )
Nos da el siguiente valor de x hasta que 𝑓 ′ (𝑥𝑛 ) ≈ 0. Donde f’(x) es la derivada de la función

Este método no garantiza que el valor converja después de algunas iteraciones, depende de varios
factores como la cercanía del valor inicial o semilla con la raíz y la propia naturaleza de la función.

Para calcular la derivada de la función en un punto determinado utilizamos la definición de la derivada


como el límite de los coeficientes de diferencias
𝑓(𝑥 − ∆𝑥 )−𝑓(𝑥 )
0 0
𝑙𝑖𝑚∆𝑥→0 Solo que, llevándola un poco más allá, básicamente viendo cómo cambia la
∆𝑥
función al hacer desplazamientos hacia la derecha, luego a la izquierda y usando la media como
estimación de la derivada
𝑓(𝑥0 − ∆𝑥 ) − 𝑓(𝑥0 )
𝑓 ′ (𝑥0 ) = 𝑙𝑖𝑚∆𝑥→0
2∆𝑥

Tomemos un valor inicial para x, digamos que 𝑥 = 𝑥0 ya con el valor de la derivada en el punto de la
función (𝑥0 , 𝑓(𝑥0 )) como pendiente de la recta tangente (𝑥1 , 0) :

0 − 𝑓(𝑥0 )
𝑚 = 𝑓 ′ (𝑥0 ) =
𝑥1 − 𝑥0

𝑓(𝑥0 )
Despejando tenemos que: 𝑥1 = 𝑥0 − 𝑓′(𝑥0 )

Repitamos el proceso para que 𝑥1, 𝑥2, … , 𝑥𝑛 hasta que 𝑓(𝑥𝑛 ) este suficientemente cerca de 0 (si es
que el método converge).

20
Figura 3

Aproximación de raíces complejas por el método de Newton

Como seguramente ya sabes, el método de Newton es una técnica frecuentemente usada para
calcular soluciones de una ecuación 𝑓(𝑧) = 0. Para ello, se elige un valor inicial y, a partir de él, se
𝑓(𝑧𝑛 )
forma la sucesión definida por 𝑧𝑛 + 1 = 𝑧𝑛 − 𝑓′(𝑧 ) . Si dicha sucesión converge, su límite es una
𝑛
solución de la ecuación 𝑓(𝑧) = 0. Naturalmente, cuando hay más de una solución, la elección del valor
inicial determina a cuál de ellas converge el proceso.
Mathematica tiene un comando "𝐹𝑖𝑛𝑑𝑅𝑜𝑜𝑡[𝑓(𝑧) = 0, {𝑧, 𝑎}]" que utiliza precisamente el método de
Newton para calcular soluciones de la ecuación 𝑓(𝑧) = 0 a partir del valor inicial 𝑧 = 𝑎. Evalúa la
siguiente celda.

¿Sabes por qué ha fallado el método en este caso particular? Fíjate en cómo se van obteniendo las
𝑓(𝑧 )
aproximaciones sucesivas. Es evidente que 𝑧𝑛 + 1 = 𝑧𝑛 − 𝑓′(𝑧𝑛 ), para 𝑓(𝑧) = 𝑧 2 + 1 partiendo de un
𝑛
valor real obtenemos siempre valores reales por lo que el método no puede proporcionarnos las raíces
de 𝑧 2 + 1 = 0 que son complejas.

21
Repite con una ligera variante

Tabla 1

Ahora Mathematica ha calculado la solución 𝑧 = 𝒾 con gran precisión. Observa ahora el efecto de
cambiar un poco el valor inicial.

Tabla 2

Si quieres, puedes ver las sucesivas aproximaciones y los correspondientes valores de la función.

Tabla 3

𝑘 𝑧[𝑘] 𝑧[𝑘]2 + 1
0
1
2
3
4
5
6
7

Como puedes ver Mathematica aplica el método de Newton para calcular raíces tanto reales como
complejas. Ahora bien, la interpretación del método en el caso del cálculo de raíces reales no tiene
sentido en el caso complejo. En el caso real, el punto se obtiene como el punto de corte de la recta
tangente a la curva en el punto con el eje de las abscisas y se conocen condiciones precisas que
garantizan la convergencia del método. Lo que ocurre en el caso complejo puede ser mucho más
complicado como vamos a ver.

Problema resuelto dentro de un contexto real

22
A continuación vamos a aplicar el método de Newton para calcular aproximaciones de las raíces del
polinomio 𝑧 3 + 1. Pidámosle a Mathematica que calcule dichas raíces.

Tabla 4

Sus aproximaciones numéricas son

Tabla 5

𝑓(𝑧) −1+2𝑧 3
Observa que si 𝒇(𝒛) = 𝒛𝟑 + 𝟏 entonces 𝑧 − 𝑓′ (𝑧) = . La siguiente función "NewtonAprox" le
3𝑧 2
dice a Mathematica que, partiendo de un valor inicial 𝑧 = 𝑥 + 𝒾𝑦, calcule las sucesivas iteraciones del
método de Newton para aproximar una solución de 𝑧 3 + 1 = 0 y que se pare si en algún paso el valor
obtenido de 𝑧 verifica que |𝑧 3 + 1|<
− 0.001 o si ha llegado a la iteración número cincuenta. También le
pedimos que imprima el último valor obtenido de z . La función está escrita haciendo uso de la opción
"Compile" para que se ejecute más rápidamente.

Tabla 6

Comprueba lo rápido que trabaja esta función evaluando la siguiente celda.

Tabla 7

Observa cómo se obtiene una u otra raíz dependiendo del punto de partida. Lo que vamos a hacer
ahora es asignarle a cada punto un valor distinto según cuál sea la raíz a la que converja el
algoritmo anterior cuando se toma como valor inicial dicho punto. Concretamente, si la raíz a la que
converge el método es -1 le damos a z el valor 0.15, si es 0.5 + 0.866 i le damos el valor 0.5 y si es 0.5
- 0.866 i le damos el valor 0.9. La razón de estos valores es que vamos a usarlos después para
23
aplicarles la función de color "Hue". El color Hue[0.15] es amarillo, el Hue[0.5] es azul y el Hue[0.9] es
rojo. Necesitamos redefinir la función "NewtonAprox". Procura entender lo que sigue.

Tabla 8

Ahora la función "NewtonColorAprox" ya no proporciona el útlimo valor de z calculado sino el valor


asignado a z según el criterio anterior. Como "NewtonColorAprox" da siempre como resultado un
número complejo , e incluso si escribe , nos quedamos con la parte real.

Tabla 9

Lo que vamos a hacer ahora puede describirse más o menos como sigue. Dividiremos cada lado del
cuadrado [-2,2]×[-2,2] en 500 partes, obtendremos así 500×500=250.000 cuadraditos. En cada uno de
ellos tomamos un punto (x,y) y evaluamos en dicho punto nuestra función "NewtonColorAprox".
Obtenemos así una matriz de 500 filas y 500 columnas a la que aplicamos la función de color "Hue".
De esta forma, los puntos que convergen a la raíz -1 se colorean de amarillo, los que convergen a la
1 𝒾√3 1 𝒾√3
raíz 2 + 2 se colorean de azul y los que convergen a la raíz 2 − 2 se colorean de rojo. Ten paciencia
porque todo el proceso tarda unos 4 minutos pero merece la pena esperar.

24
Figura 4

Veamos ampliada la hoja superior del trébol central.

Figura 5

Hagamos ahora una ampliación de la hoja superior del trébol que hay a la derecha.

25
Así podríamos seguir indefinidamente. Observa que, aunque
estos puntos están muy próximos convergen a distintas
raíces. No parece cosa fácil entender este comportamiento.
La frontera del conjunto que estamos representando tiene
una estructura fractal. También es una buena imagen de lo
que se llama caos matemático porque muestra que
pequeñísimos cambios en los valores iniciales conducen a
soluciones completamente diferentes.

Figura 6

Conclusiones
Mediante el desarrollo de este trabajo que tiene como finalidad obtener las raíces de un polinomio,
recaudamos mucha información y conocimos los métodos más a fondo, así como el saber resolverlos.
Cada uno de los métodos que se mencionan puede ser programado y ejecutado para facilitar los
procesos (cálculos) y obtener los resultados que se requieren.
Algunos de los métodos son más efectivos que otros, algunos funcionan mejor en casos específicos
es indispensable conocerlos para poder emplearlos y saber con detalle cuál ocupar para cada caso
por ejemplo newton con él se encuentran las raíces más rápido pero nos puede fallar si la derivada no
está bien realizada al igual si en la evaluación de esta nos da un cero, si no se conoce el valor
verdadero puede que nos falle al encontrar la raíz.

Bibliografia
Chapra, Steven. Métodos Numéricos para Ingenieros. 5° Edición. Mac Graw Hill, 2006.

Steven C. Chapra y Raymond Canale, Métodos Numéricos para Ingenieros, 2006, Editorial Mac Graw
Hill
Referencias Electrónicas
http://ed21.webcindario.com/CalculoDiferencial/metodo_de%20Newton.htm#descripcion
https://sites.google.com/site/numerico2012/Practica1/raices-multuplies
http://aprendeenlinea.udea.edu.co/lms/moodle/mod/page/view.php?id=24504

26

S-ar putea să vă placă și