Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2013 09 21 Muller
2013 09 21 Muller
Método de Müller
Raíces de Ecuaciones
Tabla de contenido
Introducción ................................................................................................................................... 3
Antecedentes ............................................................................................................................. 3
Desarrollo .................................................................................................................................... 4
Cancelación por resta – Fórmula alternativa: ...................................................................... 7
Ejercicio de aplicación: ............................................................................................................ 8
Otra forma de obtener la Fórmula de del método de Muller .......................................... 10
Ejemplo: y = sin (x) − 12x ..................................................................................................... 10
Ejemplo: Calcular la raíz de la ecuación: y = (1 + x) ∗ sinx − 1 = 0 ............................. 12
Algoritmo para MatLab ........................................................................................................... 13
Código en MatLab .................................................................................................................... 13
Otro algoritmo en MatLAb para la función de muller ....................................................... 16
Código en DEV C ...................................................................................................................... 17
Recursos Bibliográficos ........................................................................................................... 19
Bibliografia OnLine: ................................................................................................................ 20
Introducción
Este es un método para encontrar las raíces de ecuaciones polinomiales de la forma
general:
f n ( x ) = a 0 + a1 x + a 2 x 2 + ....... + a n x n
• Para la ecuación de orden n, hay n raíces reales o complejas. Se debe notar que
esas raíces no son necesariamente distintas.
• Si n es impar, hay al menos una raíz real.
• Si las raíces complejas existen, existe un par conjugado.
Antecedentes
Los polinomios tienen muchas aplicaciones en ciencia e ingeniería, como es el caso de
su utilización en ajuste de curvas. Sin embargo, se considera que una de las
aplicaciones más interesantes y potentes es en los sistemas dinámicos,
particularmente en los lineales.
a 2 x 2 + a1 x + a 0 = 0
− a1 ± a12 − 4 a 2 a 0
x1 , 2 =
2a0
Recuerde que el método de la secante obtiene la raíz dirigiendo una recta hasta el eje
x con dos valores de la función. El método de Müller es similar; pero construye una
parábola con tres puntos.
Desarrollo
Un predecesor del método de Muller, es el método de la secante, el cual obtiene
raíces, estimando una proyección de una línea recta en el eje x, a través de dos
valores de la función (Figura 1). El método de Muller toma un punto de vista similar,
pero proyecta una parábola a través de tres puntos (Figura 2).
Así, se busca esta parábola para intersectar los tres puntos [x0, f(x0)], [x1, f(x1)] y [x2,
f(x2)]. Los coeficientes de la ecuación anterior se evalúan al sustituir uno de esos tres
puntos para dar:
Ecuación 1
f ( x0 ) = a( x0 − x 2 ) + b( x0 − x 2 ) + c
2
Este método utilizado para encontrar raíces de ecuaciones con raíces múltiples, y
consiste en obtener los coeficientes de la parábola que pasa por tres puntos elegidos.
Dichos coeficientes son sustituidos en la fórmula cuadrática para obtener el valor
donde la parábola intersecta al eje X; es decir, la raíz estimada. La aproximación se
puede facilitar, si se escribe la ecuación de la parábola en una forma conveniente.
Una de las mayores ventajas de este método, es que al trabajar con la fórmula
cuadrática es posible localizar tanto raíces reales, como raíces complejas.
Ecuación 2
f 2 ( xi ) = a ( x i − x 2 ) + b( xi − x 2 ) + c 2
Si se quiere que esta parábola pase por los tres puntos [x0 , f ( x0 )] , [x1 , f ( x1 )] ,
[x2 , f ( x2 )] , Los coeficientes de la Ecuación 2 se evalúan sustituyendo cada uno de esos
tres puntos para dar:
Ecuación 3
f ( x 0 ) = a ( x 0 − x 2 ) 2 + b( x 0 − x 2 ) + c
Ecuación 4
f ( x1 ) = a ( x1 − x 2 ) + b( x1 − x 2 ) + c 2
Ecuación 5
f ( x 2 ) = a ( x 2 − x 2 ) + b( x 2 − x 2 ) + c 2
Ecuación 3
f ( x 0 ) = a ( x 0 − x 2 ) 2
+ b ( x 0 − x 2 ) + c
Ecuación 4
= − + − +
2
f ( x 1 ) a ( x 1 x 2 ) b ( x 1 x 2 ) c
Ecuación 6
f ( x0 ) − f ( x2 ) = a( x0 − x 2 ) + b( x0 − x 2 ) ≡ −a ( x0 − x 2 ) − b( x0 − x 2 ) = f ( x 2 ) − f ( x0 )
2 2
Ecuación 7
f ( x1 ) − f ( x 2 ) = a( x1 − x 2 ) + b( x1 − x 2 ) ≡ − a( x1 − x2 ) − b( x1 − x 2 ) = f ( x 2 ) − f ( x1 )
2 2
( h0 + h1 )b − ( h0 + h1 ) 2 a = h0δ 0 + h1δ 1
− a( x1 − x 2 ) 2 − b( x1 − x 2 ) = f ( x2 ) − f ( x1 ) , si f ( x 2 ) − f ( x) = δ 1 ( x 2 − x1 )
(h1 ) ( )*
* b − h12 a = h1δ 1
( h0 + h1 )b − ( h0 + h1 ) 2 a = h0δ 0 + h1δ 1
(h1 ) * b − h12( )* a= h1δ 1
δ1 − δ 0
a=
h1 − h0
b = ah1 + δ 1
c = f ( x2 )
Para encontrar la raíz se aplica la fórmula cuadrática de la Ecuación 2, sin embargo
debido al error de redondeo potencial, en lugar de usar la fórmula convencional, se
usará la fórmula alternativa1, es decir:
La utilizar la formula cuadrática, es posible localizar tanto las raíces reales como las
complejas. Esta es la mayor ventaja del método.
Se refiere al redondeo incluido cuando se restan dos números de punto flotante casi
iguales.
x1 − b ± b 2 − 4ac
= , En los casos donde b 2 >>> 4ac , la diferencia en el numerador
x2 2a
puede ser muy pequeña. En tales casos, la precisión doble llega a reducir el problema.
Además una formulación alternativa puede usarse para minimizar la cancelación por
resta.
x1 − 2c
=
x2 − b ± b 2 − 4ac
Una ilustración del problema y del uso de esta fórmula alternativa se ofrece en el
siguiente ejemplo.
Calcule el valor de las raíces de una ecuación cuadrática con a=1, b=3000.001 y c=3.
Compare el valor calculado con las raíces verdaderas x1 = −0.001 y x 2 = −3000
» a=1;
1
Métodos para ingenieros, 5 edición Steven Chapra – Raymond Canale, Mc Graw Hill. Pag. 73),
b=3000.001;
c=3;
x1=(-b+sqrt(b*b-4*a*c))/(2*a)
x2=(-b-sqrt(b*b-4*a*c))/(2*a)
x1 = -1.000007614493370e-003
x 2 = -3.000000999999000e+003
Ejercicio de aplicación:
Utilice el método de Müller para encontrar las raíces de la ecuación
f ( x) = x 3 − 13 x − 12 , con valores iniciales x0 = 4,5, x1 = 5.5, x 2 = 5 .
Solución: si
h0 = x1 − x0 = 5.5 − 4.5 = 1
h1 = x2 − x1 = 5 − 5.5 = −0.5
f ( x1 ) − f ( x0 ) 82.875 − 20.625
δ0 = = = 62.25
x1 − x0 5.5 − 4.5
f ( x 2 ) − f ( x1 ) 48 − 82.875
δ1 = = = 69.75
x 2 − x1 5 − 5.5
δ1 − δ 0 69.75 − 62.25
a= = = −5
h1 − h0 − 0.5 + 1
b = ah1 + δ 1 = −5(−0.5) + 69.75 = 72.25
c = f ( x 2 ) = 48
− 2 * ( 48)
x3 = 5 + = 3.976487
62.25 + 31.54451
− 1.023513
er = * 100% = 25.74%
3.976487
Debido a que el error es demasiado grande todavía, se asignan nuevos valores así: x0
se remplaza por x1 , x1 se remplaza por x 2 y x 2 se remplaza por x3 , por lo tanto la
nueva iteración se realiza con:
i xr er
0 5.000000
1 3.976487 25.740000
2 4.001050 0.6139000
3 4.000000 0.0262000
4 4.000000 0.0000119
Otra forma de obtener la Fórmula de del método de Muller
Los tres valores iniciales necesitados son denotados como x k , x k −1 , y x k − 2 . La parábola
pasa a través de los puntos: [x k , f ( x k )] , [xk −1 , f ( xk −1 )] y [x k − 2 , f ( xk −2 )], si se escribe en
la forma de Newton, entonces:
y = f ( xk ) + ( x − xk ) f [xk , xk −1 ] + ( x − xk )( x − xk −1 ) f [xk , xk −1 , xk −2 ]
y = f ( xk ) + w( x − xk ) + f [xk , xk −1 , xk − 2 ]( x − xk ) 2
Donde
w = f [x k , x k −1 ] + f [x k , xk − 2 ] − f [x k −1 , x k − 2 ]
Figura 3
La raíz está entre x2 =1.8 y x1 = 2.2. Tomando x0 =2.0 entre x2 y x1
x0 = 2.0
x1 = 2.2
x2 = 1.8
y0 = -0.0907025732
y1 = -0.2915035962
y2 = 0.0738476309
h1 = 0.2
h2 = 0.2
d = 1.000000000
a = -0.4531352362
b = -0.9133780680
c = -0.0907025732
Por ser b < 0 se considera el signo (-) en el denominador de la expresión para r, raíz
del polinomio ( r es una primera aproximación a la raíz de f(x) )
r= 1.895252107
La raíz r del polinomio se encuentra a la izquierda de x0. Los nuevos valores son
x00 = 1.895252107
x11 = 2.0
x22 = 1.8
h11 = 0.104747893
h22 = 0.095252107
d1 = 0.9093462816
y00 = 0.0001983067
y11 = -0.0907025732
y22 = 0.0738476309
a1 = -0.4730106876
b1 = -0.8182594122
c1 = 0.0001983067
Con dichos valores se obtiene una nueva aproximación a la raíz resolviendo el
polinomio cuadrático:
r1 = 1.895494425
y3 = -0.1294e-6
rexac = 1.895494267
er = 0.158e-6
Figura 4
x2 = 2.8
x0 = 2.9
x1 = 3.0
h1 = 0.1
h2 = 0.1
d = 1.000000000
y2 = 1.726773367
y0 = -0.0669276161
y1 = -0.4355199676
a = 71.25543160
b = -10.81146668
c = -0.0669276161
r= 2.894043416
y3 = -0.0458478202
x22 = 2.894043416
x00 = 2.9
x11 = 3.0
h11 = 0.1
h22 = 0.005956584
d1 = .05956584000
y22 = -0.0458478202
y00 = -0.0669276161
y11 = -0.4355199676
a1 = -1.387518017
b1 = -3.547171713
c1 = -0.0669276161
r1 = 2.880990772
rexac = 2.880986321
y33 = -0.0000155441
Código en MatLab
syms('P', 'OK', 'TOL', 'M', 'X', 'FLAG', 'NAME', 'OUP', 'F', 'H');
syms('r','DEL1', 'DEL', 'I', 'B', 'D', 'E', 'J','x','s','N');
TRUE = 1;
FALSE = 0;
F = zeros(1,4);
X = zeros(1,4);
H = zeros(1,3);
DEL1 = zeros(1,2);
fprintf(1,'Este es el método de Mullers.\n');
fprintf(1,'Ingrese el polinomio P(x)\n');
fprintf(1,'Por ejemplo: para entrar x^3-2*x+4 ingrese \n');
fprintf(1,' [ 1 0 -2 4 ] \n');
P = input(' ');
OK = TRUE;
N = length(P);
if N == 2
r = -P(N)/P(N-1);
fprintf(1,'El Polinomio es lineal: La raíz es %11.8f\n', r);
OK = FALSE;
end
if OK == TRUE
OK = FALSE;
while OK == FALSE
fprintf(1,'Ingrese tolerancia\n');
TOL = input(' ');
if TOL <= 0
fprintf(1,'La Tolerancia debe ser positiva \n');
else
OK = TRUE;
end
end
OK = FALSE;
while OK == FALSE
fprintf(1,'Ingrese el máximo numero de iteraciones – sin punto decimal \n');
M = input(' ');
if M <= 0
fprintf(1,'Debe ser un entero positivo \n');
else
OK = TRUE;
end
end
fprintf(1,'Ingrese el primer de 3 valores de entrada \n'); X(1) = input(' ');
fprintf(1,'Ingrese el segundo de 3 valores de entrada \n'); X(2) = input(' ');
fprintf(1,'Ingrese el tercer de 3 valores de entrada \n'); X(3) = input(' ');
end
if OK == TRUE
fprintf(1,'Seleccione output destination\n');
fprintf(1,'1. Screen\n');
fprintf(1,'2. Text file\n');
fprintf(1,'Enter 1 or 2\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input el file name in el form - drive:\\name.ext\n');
fprintf(1,'For example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end
fprintf(OUP, 'MULLERS METHOD\n');
fprintf(OUP, 'El output is i, approximation x(i), f(x(i))\n\n');
fprintf(OUP,'El real and imaginary parts of x(i) are\n');
fprintf(OUP,'followed by real and imaginary parts of f(x(i)).\n\n');
F(1) = polyval(P,X(1));
F(2) = polyval(P,X(2));
F(3) = polyval(P,X(3));
% PASO 1
H(1) = X(2)-X(1);
H(2) = X(3)-X(2);
DEL1(1) = (F(2)-F(1))/H(1);
DEL1(2) = (F(3)-F(2))/H(2);
DEL = (DEL1(2)-DEL1(1))/(H(2)+H(1));
I = 3;
% PASO 2
while I <= M & OK == TRUE
% PASO 3
B = DEL1(2)+H(2)*DEL;
D = B*B-4*F(3)*DEL;
if abs(DEL) <= 1.0e-20 % test to see if straight line
if abs(DEL1(2)) <= 1.0e-20 % straight line - test if horizontal line
fprintf(1,'Horizontal Line\n');
OK = FALSE;
else
% straight line but not horizontal
X(4) = (F(3)-DEL1(2)*X(3))/DEL1(2);
H(3) = X(4)-X(3);
end
else
% not a straight line
D = sqrt(D);
% PASO 4
E = B+D;
if abs(B-D) > abs(E)
E = B-D;
end
% PASO 5
H(3) = -2*F(3)/E;
X(4) = X(3)+H(3);
end
if OK == TRUE
F(4) = polyval(P,X(4));
fprintf(OUP, '%d %f %f %f %f\n',I,X(4),imag(X(4)),F(4),imag(F(4)));
end
% PASO 6
if abs(H(3)) < TOL
% Procedure completed successfully.
fprintf(OUP, '\nMethod Succeeds\n');
fprintf(OUP, 'Approximation is within %.10e\n', TOL);
fprintf(OUP, 'in %d iterations\n', I);
OK = FALSE;
else
% PASO 7
for J = 1:2
H(J) = H(J+1);
X(J) = X(J+1);
F(J) = F(J+1);
end
X(3) = X(4);
F(3) = F(4);
DEL1(1) = DEL1(2);
DEL1(2) = (F(3)-F(2))/H(2);
DEL = (DEL1(2)-DEL1(1))/(H(2)+H(1));
end
I = I+1;
end
% PASO 8
if I > M & OK == TRUE
% Procedimiento completado.
fprintf (OUP, 'Method Failed\n');
end
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created sucessfully\n',NAME);
end
end
Código en DEV C
#include <iostream.h>
#include <conio.h>
#include <math.h>
main ()
{ int I, MAXIT;
double x0, x1, x2, x3, A, B, C, D, E;
double Fx0, Fx1, Fx2, Fx3, F10, F21, F210;
double A0, A1, A2, D1, D2;
double EA, EA1;
cout << " \n\t\t METODO DE MULLER " ;
cout << " \n\n FUNCION f(x)= x3+x2-5x+20 " ;
cout << " \n\n Ingrese el valor inicial =" ;
cin >> x0;
cout << " \n\n Ingrese el valor para x1 " ;
cin >> x1;
cout << " \n\n Ingrese el valor para x2 " ;
cin >> x2;
cout << " \n\n Ingrese el criterio de exactitud " ;
cin >> EA1;
cout << " \n\n Ingrese numero de iteraciones " ;
cin >> MAXIT;
I=1;
While (I<=MAXIT)
{ Fx0= pow(x0,3)-13*x0-12;
Fx1= pow(x1,3)-13*x1-12;
Fx2= pow(x2,3)-13*x2-12;
F10 = (Fx1-Fx0)/(x1-x0);
F21 = (Fx2-Fx1)/(x2-x1);
F210= (F21-F10)/(x2-x0);
A2= F210;
A1= F21-(x2+x1)*A2;
A0= Fx2-(x2*(F21-(x1*A2)));
A=pow((pow(A1,2)-4*A0*A2),0.5);
D1= -A1+A;
D2= -A1-A;
B=abs(D1);
C=abs(D2);
if(B>C)
{ x3=(2*A0)/D1;
}
else
{ x3=(2*A0)/D2;
}
Fx3= pow(x3,3)+ pow(x3,2)-5*x3 + 20;
D = abs(x3-x0);
E = abs(Fx3);
if ((D<EA1)||E<EA1))
{ cout << " \n\n valor de x: " << x3 << endl<< endl;
cout << " \n\n El numero de iteracion encontrado: " << I<< endl;
system("PAUSE");
return 0;
}
x0=x1;
x1=x2;
x2=x3;
I=I+1;
}
cout << " El sistema no converge " << MAXIT << " Iteraciones " ;
cout << " El ultimo valor encontrado para x: " << x3<< endl<< endl;
system ("PAUSE");
return 0;
}
Recursos Bibliográficos
MATHEUS. John H. Fink Kurtis D. Métodos Numéricos con MATLAB. Editorial
Prentice Hall
ALTZ, Franz L. Electronic. Digital. computers: Their use in science and
Engineering. 1958 Academic Press inc. New York.
BURDEN Richard L., J. Douglas Faires; Análisis numérico. tr. Efrén Alatorre
Miguel; Revisión Técnica. Ildefonso. 1998 (Biblioteca USCO. Nro Topográfico:
515 / B949a.)
CHAPRA Steven C., CANALE Raymond P, Numerical Methods for engineers.
McGraw Hill, Inc. 1988. 839p. ISBN 0-07-909944-0.
CHAPRA Steven C., CANALE Raymond P. Métodos numéricos para ingenieros: con
aplicaciones en computadoras personales. 1988 (Biblioteca USCO Nro
Topográfico: 519.5 / C467m)
CONDE S. D, Carl de Boor. Análisis numérico elemental: Un enfoque
algorítmico. Mc. Graw-Hill 1972, (Biblioteca USCO Nro Topográfico: 511.8 /
C761 Biblioteca).
CORMICK MC., John M. and SALVADOR M.C. Numerical Methods in FORTRAN.
1964. Prentice-Hall Inc Englewood Cliffs N:J.
CURTIS, F. Gerald, WHEATLEY, O. Patrick. Análisis numérico con aplicaciones.
Tr. Hugo Villagomez Vasquez. 6 Ed. Pearson Educación. 2000, 698p. ISBN 968-
444-393-5
FADDEEVA, V.N. Computacional methods of linear algebra, Dover Publications.
1969, New York.
GASTINEL Noél; Análisis numérico lineal. tr. Javier Ruiz Fernández de Pinedo.
1975. (Biblioteca USCO Nro Topográfico: 511.7 / G255).
GREENSPAN, D. Theory and solutions of Ordinary Differencial Equations. 1960
The. Mc Millan Co. New York.
KINCAID David y Ward Cheney; Análisis numérico: Las matemáticas del cálculo
científico. tr. Rafael. 1994 (Biblioteca USCO Nro Topográfico: 515 / K51a).
LUTHE. Rodolfo, OLIVERA Antonio, SCHUTZ Fernando, Métodos numéricos. 1986
(Biblioteca USCO Nro Topográfico: 511.7 / L973m).
McCRACKEN, Daniel D., Métodos numéricos y programación fortran: con
aplicaciones en ingeniería y ciencias. 1986. Editorial Limusa. México.
(Biblioteca USCO Nro. Topográfico: 001.6424 / M117).
NAKAMURA Shoichiro; Análisis numérico y visualización gráfica con MATLAB. tr.
Roberto Escalona García. 1998 (Biblioteca USCO N ro Topográfico: 515.1 /
N163a).
NAKAMURA Shoichiro; Métodos numéricos aplicados con software. tr. Oscar
Alfredo Palmas Velasco. Prentice Hall Hispanoamericana S.A. 1995. 570p.
(Biblioteca USCO. Nro. Topográfico: 511.8 / N163m) ISBN 968-880-263-8
NIETO RAMIREZ José A., Métodos numéricos en computadoras digitales. Editorial
Limusa 1980. (Biblioteca USCO Nro Topográfico: 001.64042 / N677).
RALSTON Anthony; Introducción al análisis numérico. tr. Carlos E. Cervantes de
Gortari. Editorial Limusa. Mexico. 1978. 629p. (Biblioteca USCO Nro
Topográfico: 511.7 / R164.)
SCARBOROUGH, J.B Numerical mathematics analysis
SIERRA ROMERO, Alberto. Manual de Métodos Numéricos. Universidad
Tecnológica de Pereira.
SMITH, W. Allen; Análisis numérico. tr. Francisco Javier Sánchez Bernabe; Rev.
Téc. José Luis Turriza Pinto. Prentice Hall Hispanoamericana S.A. 1988. 608p.
(Biblioteca USCO Nro Topográfico: 515 / S664a) ISBN 968-880-119-4.
STANTON, Ralp G. Numerical Methods for Science and Engineering. 1967.
Prentice-Hall Inc. Englewood Cliffs N.J
Bibliografia OnLine:
http://sai.uam.mx/apoyodidactico/mn/
http://www.unalmed.edu.co/~ifasmar/libro.shtml
http://www.iesrodeira.com/metodos_numericos/index-2.htm
http://uprhmate01.upr.clu.edu/~pnm/notas4061/index.htm
http://mailweb.udlap.mx/~ccastane/Analisis_Numerico_html/Lindley.html#RegresaGral1
http://www.ii.uam.es/~pedro/ccii/teoria/
http://webdiee.cem.itesm.mx/web/servicios/archivo/tutoriales/metodos/algoritmos/index.html
http://www.ucsc.cl/~kdt/numerico/index.htm
http://luda.azc.uam.mx/curso2/cp2indic.html
http://www.geocities.com/SiliconValley/Pines/7894/metodos/
http://www.uv.es/~diaz/mn/fmn.html
http://proton.ucting.udg.mx/posgrado/cursos/metodos/temario.html
http://webdiee.cem.itesm.mx/web/servicios/archivo/tutoriales/metodos/algoritmos/index.html
http://www.damtp.cam.ac.uk/user/fdl/people/sd/lectures/nummeth98/contents.htm
http://anamat1.csi.ull.es/anamat_p/Titulaciones/matematicas.htm
http://www.cnice.mecd.es/Descartes/
http://mathworld.wolfram.com/
http://www.elprisma.com/
http://www-gap.dcs.st-and.ac.uk/~history/index.html
http://www.ciencia-hoy.retina.ar/indice.htm
http://omega.ilce.edu.mx:3000/sites/ciencia/html/fisica.htm
http://books.pdox.net/
http://arxiv.org/
http://pessoal.sercomtel.com.br/matematica/resumos.htm
http://www.itlp.edu.mx/publica/tutors.htm
http://www.rinconmatematico.com/libros.htm