Академический Документы
Профессиональный Документы
Культура Документы
POLINOMIO
RESUMEN
Se describe en detalle el algoritmo de Muller para obtener una raz de una
funcin f (x) . Se discute la forma clsica (ms eficiente) de evaluar polinomios
y de realizar la divisin sinttica, procedimientos necesarios para hallar todas
las races de un polinomio de coeficientes reales y grado arbitrario. Los
resultados obtenidos mediante un programa desarrollado por los autores en
la Facultad de Ingeniera Elctrica de la Universidad Tecnolgica de Pereira
se comparan, en trminos de precisin y tiempo de ejecucin, , con los
encontrados con el MATLAB 5.3.
ABSTRACT
The Mullers Method to obtain a single root of a function f(x) is described in
detail. The most efficient (classical) approach to evaluate a polynomial and
to make synthetic division are discussed, which are necesary functions to get
all the roots of a polynomial of real coefficients and arbitrary degree. The results
obtained by a program developed by the authors in the Electrical Engineering
Department at Universidad Tecnolgica de Pereira, are compared to those
obtained by using MATLAB 5.3
<
<
<
<
<
(1)
2
A x1
2
A x2
(2a)
% B x1 % C
(2b)
% B x2 % C
(2c)
ABRIL /2000 80
(3)
( x2 & x1 ) ( x2 & x1 ) A
2
2
( x1 & x0 ) ( x1 & x0 ) B
'
( x & x2 )( x & x1 )
(f2 & f1 )
(f1 & f0 )
(4a)
(4)
(4b)
g (x1, x0 ) '
f2 & f1
x2 & x1
f1 & f0
c ' f (x0)
(5)
x1 & x0
a '
(9)
donde
g (x2, x1 ) '
(10)
(6)
donde
g ( x1 , x0 ) '
g ( x2 , x0 ) '
2C
x3 '
B
B 2 & 4AC
(7)
x1 & x0
f2 & f0
(11)
x2 & x0
f1 & f0
(12)
ALGORITMO DE MULLER
(8)
3.
a ' 0
b ' A[0]
c ' A[1]
x3 ' & c
b
4.
b ' A[1]
c ' A[2]
5.
6.
A = a, B = b y C = c
para obtener
(13)
Si el grado es igual a 2
a ' A[0]
ASPECTOS COMPUTACIONALES
x0 ' INI
2.
ABRIL /2000 81
x3 - x0 , verificar si f (x3 ) # . Si no se
&1
xn
&2
% anx n
&1
&1
xn
&3
% anx n
&2
))
7.
(14)
ABRIL /2000 82
% z b 2)
% z (a2 % zb 3))
! ! ! !
% z (a 1 % z (a2 % %
z (an & 1 % z (an )) ))
(15)
(16)
ak '
k ' n
bk
bk & bk
% 1z
k < n
k ' 0, , n
q(x) ' b 1 % b 2 x % % b n x n
&1
entonces
b 0 % q(x)(x & z) ' b 0 % (b 1 % b 2 x %
& (b 1 % b 2 x %
Apndice A
Codificacin de Evaluacin de polinomios
&1
& b n z)x n
' a0 % a1 x % % an
&1
&1
% b0x n
xn
&1
(17)
' p (x)
Es decir, b 1 , , b n & 1 , b n son los coeficientes del
polinomio resultante de dividir p (x) entre el polinomio de
primer orden x & z y b 0 es el residuo. Haciendo x ' z en
(16) se obtiene nuevamente b 0 ' p (z) [ver ecuacin (15)].
Sip (z) # x ' z esunarazylasecuenciadecoeficientesb 1 , , b n & 1 , b n
son los del polinomio base para continuar hallando todas
las dems races.
CONCLUSIONES
Se ha descrito en detalle el algoritmo de Muller para obtener
todas las races de un polinomio de coeficientes reales. Esta
resulta ser una herramienta til en el anlisis de sistemas
lineales. Tambin sirve de base para realizar expansin en
fracciones parciales.
Apndice B
Codificacin de la Divisin Sinttica
Roots roots(FPoly A)
{
Roots raices(A.grado);
const int MAX=1000;
const float TOL=1E-6,REAL=1E-5;
//Contador de las raices encontradas
unsigned char N;
const unsigned char NRAICES=char(A.grado-1);
complex a,b,c,x0,x1,x2,h1,h12,h2,D,f10,f20;
float INI;
float var;
bool FINDROOT;
N=0;
INI=0.5;
do
{
FINDROOT=false;
x0=-INI;
x1=0;
x2=INI;
for(short i=0;i<=MAX;i++)
{
if(A.grado==2)
{
bool r1;
r1=false;
D=A[1]*A[1]-4*A[0]*A[2];
D=sqrt(D);
ABRIL /2000 83
if(abs(A[1]+D)<abs(A[1]-D))
{
raices[N]=-2*A[2]/(A[1]-D);
r1=true;
}
else raices[N]=-2*A[2]/(A[1]+D);
if(fabs(imag(raices[N]))<=REAL)
{
if(r1) raices[char(N+1)]=-2*A[2]/(A[1]+D);
else raices[char(N+1)]=-2*A[2]/(A[1]-D);
raices[N]=real(raices[N]);
raices[char(N+1)]=real(raices[char(N+1)]);
}
else raices[char(N+1)]=conj(raices[N]);
N=char(N+2);
FINDROOT=true;
break;
}
else if(A.grado==1)
{
raices[N]=-A[1]/A[0];
N++;
FINDROOT=true;
break;
}
c=eval(A,x0);
h1=x1-x0;
h2=x2-x0;
h12=x1-x2;
f10=(eval(A,x1)-eval(A,x0))/h1;
f20=(eval(A,x2)-eval(A,x0))/h2;
a=(f10-f20)/h12;
b=f10-a*h1;
D=b*b-4*a*c;
D=sqrt(D);
if(abs(b+D)<abs(b-D))
{
D*=-1;
D+=b;
}
else D+=b;
raices[N]=x0-2*c/D;
if(abs(eval(A,raices[N]))<TOL)
ABRIL /2000 84
}
while(N<=NRAICES);
return raices;
}
Ntese que un objeto de la clase Fpoly no sirve para
almacenar las races del polinomio, ya que algunas de
estas podran ser complejos. De ah surge la necesidad
de crear la clase Roots que representa un polinomio de
coeficientes complejos.