Está en la página 1de 6

Laboratorio. METODOS NUMERICOS (método de MULLER).

Docente: Héctor Mora

Cesar Fernando Restrepo


Edgar Mauricio Rincón

Este método sirve para hallar raíces reales o complejas de polinomios reales p(x)
=a0+a1x+a2x2+...+anxn.
El polinomio p se puede expresar en función de sus raíces:

Las raíces complejas, no reales, siempre vienen por parejas, es decir si r = a+ib, b 6= 0,
es una raíces, entonces r = a−ib, el conjugado de r, también es raíces. Para las raíces
complejas:
q(x) = (xr)(x− ¯r) divide a p(x).

Si se halla una ra´ız real r entonces q(x) = (x − r) divide a p(x).


En general, si q(x) divide a p(x), entonces existe un polinomio s(x) tal que:

Entonces para seguir obteniendo las raíces de p(x) basta con obtener las raíces de s(x),
polinomio más sencillo.
En el método de la secante, dados dos valores x0 y x1 se busca la recta que pasa por los
puntos (x0, f(x0)), (x1, f(x1)); el siguiente valor, x2, está dado por el punto donde la recta
corta el eje x. En el método de Muller, en lugar de una recta, se utiliza una parábola.
Dados tres valores x0, x1 y x2, se construye la parábola P(x) que pasa por los puntos (x0,
f(x0)), (x1, f(x1)) y (x2, f(x2)); el siguiente valor, x3, est´a dado por el (un) punto tal que
P(x3) = 0.
La parábola se puede escribir de la forma P(x) = a(x − x2)2 + b(x − x2) + c. Las fórmulas
que permiten calcular a, b y c son:
Entonces:

Para reducir los errores de redondeo se “racionaliza” el numerador y buscando que el


denominador resultante sea grande (en valor absoluto).

Si en una iteración D = b2 − 4ac < 0 es necesario utilizar, a partir de ahí, aritmética


compleja (Scilab lo hace automáticamente). Eso hace que los siguientes valores a, b y c
no sean necesariamente reales. Muy posiblemente b2 − 4ac tampoco es real.

METODO DE MULLER PARA UNA MATRIZ:

1. Averigüe como efectuar división de polinomios en Scilab.

// SEGÚN LAS RAICES CARACTERIZAMOS EL POLINOMIO


p = poly([0 1 1 2], 's')

pause

// DESPEJAMOS LAS RAICES DEL POLINOMIO

roots(p)

pause

// COEFICIENTES

q = poly([1 0 1 2], 's','coeff')

pause

// OPERADORES

p * q // Multiplicacion

pause

p/ q // Division

[r, c] = pdiv(p,q) // Efectuando la division: c=cociente, r=resto

pause

horner(p,1) // Polinomio para x = 1

pause

horner(p, 2) // Polinomio para x = 2

pause

horner(p, -1) // Polinomio para x = -1

pause

// SACAMOS LAS MATRICES DE CADA POLINOMIO

x = poly(0,'x')

A = [ 1/x (x +1)/(x + 2);


x{(x+3), x^2}
2. Escriba una función [r, info] = Muller1 (coef, x0, x1, x2, epsf, eps0, maxit) que obtiene
(si al final info vale 1) una raíz de un polinomio cuyos coeficientes reales están, en orden
creciente de la potencia, en el vector coef.

function Muller1(coef, x0, x1, x2, epsf, eps0, maxit)


p = poly(coef,'x','c')
f0 = horner(p, x0)
f1 = horner(p, x1)
f2 = horner(p, x2)
info = 0
for k = 1:maxit
printf('k = %d\n',k)
if abs (f2) <= epsf
r = x2
info = 1
return
end
d = (x0-x1)*(x0-x2)*(x1-x2)
disp(d, 'd')
if abs (d) <= eps0
x = []
info = 0
return
end
a = ( -(x0-x2)*(f1-f2)+(x1-x2)*(f0-f2) )/d
b = ( (x0-x2)^2*(f1-f2)-(x1-x2)^2*(f0-f2) )/d
c = f2
D = b^2- 4*a*c
R = sqrt(D)
disp([D R], 'D R')
delta1 = b+R
delta2 = b-R
disp([delta1 delta2])
ifabs (delta1) >= abs (delta2)
delta = delta1
else
delta = delta2
end
disp(delta, 'delat')
ifabs(delta)<= eps0

return
end
x3 = x2-2*c/delta
x0 = x1
x1 = x2
x2 = x3
f0 = f1
f1 = f2
f2 = horner(p, x2)
disp([x2 f2])
end
endfunction

3. Escriba una función [rr, info] = Müller (coef, x0, epsf, eps0, maxit) que obtiene (si al final
info vale 1) todas las raíces de un polinomio cuyos coeficientes reales están, en orden
creciente de la potencia, en el vector coef. Las raícesquedaran en el vector rr. Esta
función utiliza varias veces Muller1.

functionmuller(coef,x0,epsf,eps0,maxit)
r=0
h = 0.5
whilegrado(coef)>=3
x0 = r
x1 = x0+h
x2 = x1+h
(r,info)= muller1(coef,x0,x1,x2,epsf,eps0,maxit)
if info = 0
return
end
if abs(imag(r))<=eps0
q(x) = (x-r)
else
q(x) =(x-r)*(x-r)
p(x)= p(x)/q(x)
end
end
endfunction

4. Sean k1, k2,..., k7 los primeros siete dígitos del número de su documento de identidad.
Halle las seis raíces del polinomio cuyos coeficientes, en orden creciente de la potencia,
son k7 + 1, k6,..., k1. Muestre los resultados intermedios para la primera utilización de
Muller1.
-->coef= [9 0 0 5 2 4 9]
coef =

9. 0. 8. 3. 0. 6. 4.

-->x0 = 0
x0 =

0.

-->x1 = 0.5
x1 =

0.5

-->x2 = 1
x2 =

1.

Muller (coef, x0, x1, x2, 10**-8, 10**-12, 10)


k=1

0.16666 + 0.50787i 7.07787 + 1.17261i


k=2

0.23537 + 0.76065i 5.77046 + 3.06718i


k=3

0.15993 + 1.27424i - 7.02323 + 26.5377i


k=4

0.01578 + 0.82072i 2.52076 + 0.90589i


k=5

- 0.02726 + 0.87823i 0.72765 + 0.3399i


k=6

- 0.04467 + 0.89548i 0.08678 + 0.01772i


k=7

- 0.04402 + 0.89644i - 0.00083 - 0.00047i


k=8

- 0.04465 + 0.89827i - 3.521D-08 + 6.707D-08i


k=9

- 0.04455 + 0.89827i - 5.330D-15 - 4.335D-15i

También podría gustarte