Raíces de una ecuación (I)

La ecuación de segundo grado

Las raíces de la ecuación de segundo grado ax2+bx+c=0, son

x 1 = b+ b 2 4ac 2a x 2 = b b 2 4ac 2a

Creamos una función denominada raices_2 que se le pasan el vector p de los coeficientes [a, b, c] y devuelve las raíces x1 y x2.

function [x1,x2] = raices_2(p)
    dis= sqrt(p(2)*p(2)-4*p(1)*p(3));
    x1=(-p(2)+dis)/(2*p(1));
    x2=(-p(2)-dis)/(2*p(1));
end

Para calcular las raíces de la ecuación de segundo grado x2+x-6 en la la ventana de comandos llamamos a la función raices_2 y le pasamos los coeficientes del polinomio

>> [r1,r2]=raices_2([1 1 -6])
r1= 2
r2= -3

Para calcular las raíces de la ecuación de segundo grado x2+x+1 escribimos

>> [r1,r2]=raices_2([1 1 1])
r1=-0.5000+0.8660i
r2=-0.5000-0.8660i

La ecuación de tercer grado

Sea la ecuación de tercer grado

z3+az2+bz+c=0

Hacemos la sustitución, z=x-a/3, obteniendo una ecuación reducida, sin el término x2

( x a 3 ) 3 +a ( x a 3 ) 2 +b( x a 3 )+c=0 x 3 +Px=Q{ P=b a 2 3 Q= ab 3 c 2 a 3 27

Nos fijamos en la siguiente identidad e identificamos

( uv ) 3 +3uv( uv )= u 3 v 3 { uv=x uv= P 3 u 3 v 3 =Q

De las dos últimas, deducimos una ecuación de segundo grado en v3

( P 3v ) 3 v 3 =Q ( v 3 ) 2 +Q v 3 ( P 3 ) 3 =0

Las soluciones de esta ecuación son conocidas

v 3 = Q 2 ± ( Q 2 ) 2 + ( P 3 ) 3 u= P 3v

Conocidos u y v. La solución de la ecuación reducida es x=u-v y de la original z=x-a/3

Ejemplo 1

Sea la ecuación de tercer grado, x3-6x=4. Con P=-6 y Q=4

Las dos soluciones de la ecuación de segundo grado en v3 son

{ v 3 =2+2i v 3 =22i

cos15° y sin15° se calculan mediante las fórmulas del ángulo doble

cos(2θ)= cos 2 θ sin 2 θ=2 cos 2 θ1 cos(2θ)= cos 2 θ sin 2 θ=12 sin 2 θ cos15º= 1 2 2+ 3 sin15º= 1 2 2 3

Finalmente, las raíces de la ecuación de tercer grado, x3-6x=4, son

{ x 1 = 42 3 = ( 3 1 ) 2 =1 3 x 2 = 4+2 3 =1+ 3 x 3 =2

Comprobación

>> syms x;
>> solve(x^3-6*x-4,x)
ans =
          -2
 1 - 3^(1/2)
 3^(1/2) + 1

Ejemplo 2

Sea la ecuación de tercer grado, x3-6x=9. Con P=-6 y Q=9

Las dos soluciones de la ecuación de segundo grado en v3 son

{ v 3 =1 v 3 = 2 3

Comprobación

>> syms x;
>> solve(x^3-6*x-9,x)
ans =
                      3
 - (3^(1/2)*1i)/2 - 3/2
   (3^(1/2)*1i)/2 - 3/2

Ejemplo 3

Este ejemplo, muestra que una ecuación de tercer grado con raíces tan sencillas como 1,-2 y 3, requiere de un cálculo intensivo, que realizaremos con Math Symbolic de MATLAB, para obtenerlas

Sea la ecuación de tercer grado, z3-2z2-5z+6=0. Comprobamos que sus raíces son, 1,-2 y 3

>> syms z;
>> solve(z^3-2*z^2-5*z+6,z)
ans =
 -2
  1
  3

Hacemos la sustitución, z=x-a/3, obteniendo una ecuación reducida

x 3 +Px=Q{ P=b a 2 3 Q= ab 3 c 2 a 3 27

Con P=-19/3 y Q=-56/27

Calculamos una de las raíces de la ecuación de segundo grado en v3

v 3 = Q 2 + ( Q 2 ) 2 + ( P 3 ) 3

Obtenemos las tres raíces v de v3

v= r 3 exp( i θ+2πk 3 )k=0,1,2

r es el módulo del número complejo y θ es el argumento

Para cada raíz v, calculamos u=P/(3v) y la diferencia x=u-v, las raíces de la ecuación reducida x3+Px=Q

Finalmente, las raíces de la ecuación de tercer grado son, z=x-a/3

Creamos un script para realizar todos estos cálculos con Math Symbolic

a=sym(-2);
b=sym(-5);
c=sym(6);
P=b-a^2/3;
Q=a*b/3-c-2*a^3/27;
v3=-Q/2+sqrt((Q/2)^2+(P/3)^3); %una de las raíces, la otra con (-)
v=zeros(0,3);
k=sym(0:2);
v=abs(v3)^(1/3)*exp(1i*(angle(v3)+k*2*pi)/3);
u=P./(3*v);
x=u-v; %raíces de la ecuación reducida
z=x-a/3 %raíces de la ecuación de tercer grado
z =
[ 2/3 - exp((atan((45*3^(1/2))/28)*1i)/3)*((19*19^(1/2))/27)^(1/3) - 
(19*exp(-(atan((45*3^(1/2))/28)*1i)/3))/(9*((19*19^(1/2))/27)^(1/3)), 

2/3 - exp((pi*2i)/3 + (atan((45*3^(1/2))/28)*1i)/3)*((19*19^(1/2))/27)^(1/3) - 
(19*exp(- (pi*2i)/3 - (atan((45*3^(1/2))/28)*1i)/3))/(9*((19*19^(1/2))/27)^(1/3)), 

2/3 - exp((pi*4i)/3 + (atan((45*3^(1/2))/28)*1i)/3)*((19*19^(1/2))/27)^(1/3) - 
(19*exp(- (pi*4i)/3 - (atan((45*3^(1/2))/28)*1i)/3))/(9*((19*19^(1/2))/27)^(1/3))]

La expresión de las raíces z es muy larga y no ha sido posible simplificarla

Convertimos la variable simbólica z en un número

>> double(z)
ans =
    -2     3     1

Fórmulas para calcular las raíces

Expresamos una ecuación de tercer grado en la forma equivalente

x3+ax2+bx+c=0

dividiendo todos los coeficientes por el primero, de modo que el coeficiente del término x3 es la unidad.

Las fórmulas que permiten calcular las raíces de esta ecuación son las siguientes (véase la primera referencia):

Q= a 2 3b 9 R= 2 a 3 9ab+27c 54

Si R2<Q3 entonces la ecuación tiene tres raíces reales

θ=arccos( R Q 3 ){ x 1 =2 Q cos( θ 3 ) a 3 x 2 =2 Q cos( θ+2π 3 ) a 3 x 3 =2 Q cos( θ2π 3 ) a 3

En caso contrario, R2≥Q3 tenemos una raíz real y dos complejas.

A=sgn(R) ( | R |+ R 2 Q 3 ) 1 3 B={ Q/AA0 0A=0

La raíz real y las dos complejas conjugadas son:

{ x 1 =(A+B) a 3 x 2 = 1 2 (A+B) a 3 +i 3 2 (AB) x 3 = 1 2 (A+B) a 3 i 3 2 (AB)

Creamos una función denominada raices_3 a la que se le pasa el vector p de los coeficientes [1, a, b, c] y devuelve las valores de raíces x1, x2 y x3.

function [x1,x2,x3] = raices_3(p)
   %código
end

Ahora bien, para hacerla similar a la función roots de MATLAB, vamos a definirla para que devuelva un vector x

function x = raices_3(p)
    Q=(p(2)*p(2)-3*p(3))/9;
    R=(2*p(2)^3-9*p(2)*p(3)+27*p(4))/54;
    x=zeros(3,1); %reserva memoria para un vector de tres elementos
    if (R*R)<(Q^3)
        tetha=acos(R/sqrt(Q^3));
        x(1)=-2*sqrt(Q)*cos(tetha/3)-p(2)/3;
        x(2)=-2*sqrt(Q)*cos((tetha+2*pi)/3)-p(2)/3;
        x(3)=-2*sqrt(Q)*cos((tetha-2*pi)/3)-p(2)/3;
    else
        A=-sign(R)*nthroot(abs(R)+sqrt(R*R-Q^3),3);
        if A==0
            B=0;
        else
            B=Q/A;
        end
        x(1)=(A+B)-p(2)/3;
        x(2)=-(A+B)/2-p(2)/3+(sqrt(3)*(A-B)/2)*sqrt(-1); %mejor que i
        x(3)=-(A+B)/2-p(2)/3-(sqrt(3)*(A-B)/2)*sqrt(-1);
    end
end

En la ventana de comandos llamamos a la función raices_3 para calcular las raíces de la ecuación, x3-7x-6=0 o bien, x3+0x2-7x-6=0

>> r=raices_3([1 0 -7 -6])
r =
   -2.0000
    3.0000
   -1.0000

Para calcular las raíces de la ecuación x3+3x2+3x+2=0 escribimos en la ventana de comandos

>> r=raices_3([1 3 3 2])
r =
  -2.0000
  -0.5000-0.8660i
  -0.5000+0.8660i

Ecuación de cuarto grado

Utilizamos el procedimiento de Ferrari para resolver la ecuación de cuarto grado, x4+2ax3+bx2+2cx+d=0

Vamos a calcular tres números A, B y C para expresar el polinomio como diferencia de dos cuadrados

x 4 +2a x 3 +b x 2 +2cx+d= ( x 2 +ax+A ) 2 ( Bx+C ) 2

y luego, expresar la diferencia de cuadrados como producto de dos factores, M2-N2=(M+N)(M-N)

x 4 +2a x 3 +b x 2 +2cx+d=( x 2 +ax+A+(Bx+C) )( x 2 +ax+A(Bx+C) ) x 4 +2a x 3 +b x 2 +2cx+d=( x 2 +(a+B)x+A+C )( x 2 +(aB)x+AC )

Se reduce la ecuación de cuarto grado a la resolución de dos ecuaciones de segundo grado

{ x 2 +(a+B)x+A+C=0 x 2 +(aB)x+AC=0

Primero, calculamos los tres números A, B y C

x 4 +2a x 3 +b x 2 +2cx+d= x 4 +2a x 3 +( a 2 +2A B 2 ) x 2 +2( aABC )x+ A 2 C 2 { b= a 2 +2A B 2 c=aABC d= A 2 C 2 { B 2 = a 2 +2Ab BC=aAc C 2 = A 2 d

Eliminando el producto BC, obtenemos una ecuación de tercer grado en A

( aAc ) 2 =( a 2 +2Ab )( A 2 d ) A 3 b 2 A 2 +( cad )A+ bd a 2 d c 2 2 =0

De las tres soluciones se elige una para A, a continuación se calcula B y C. Finalmente, se resuelve las dos ecuaciones de segundo grado

Ejemplo

Resolver la ecuación de cuarto grado, x4-3x2+6x-2=0

Los coeficientes de x4+2ax3+bx2+2cx+d=0, son a=0, b=-3, c=3, d=-2

Ecuación de tercer grado

Resolvemos la ecuación de tercer grado en A

A 3 b 2 A 2 +( cad )A+ bd a 2 d c 2 2 =0 A 3 + 3 2 A 2 +2A 3 2 =0

Se trata de una ecuación de tercer grado con a=3/2, b=2, y c=-3/2. Reducimos la ecuación a la forma

x 3 +Px=Q{ P=b a 2 3 Q= ab 3 c 2 a 3 27

Por lo que P=5/4, Q=9/4. La solución de la ecuación reducida más sencilla es

x=uv{ v 3 = Q 2 + ( Q 2 ) 2 + ( P 3 ) 3 u= P 3v

Como las operaciones son muy largas nos ayudamos de Math Symbolic de MATLAB

a=sym(3/2);
b=sym(2);
c=sym(-3/2);
P=b-a^2/3;
Q=a*b/3-c-2*a^3/27;
v=(-Q/2+sqrt((Q/2)^2+(P/3)^3))^(1/3);
u=P/(3*v);
A=u-v;
>> simplify(A)
ans =1

v= 6 3 1 2 u= 6 3 + 1 2 }x=1 A=x a 3 = 1 2

Comprobación

>> syms A;
>> solve(A^3+3*A^2/2+2*A-3/2,A)
ans =
1/2
 - 2^(1/2)*1i - 1
 - 1 + 2^(1/2)*1i
Raíces de la ecuación de cuarto grado

Retornamos a la ecuación de cuarto grado con a=0, b=-3, c=3, d=-2. Conocido A, calculamos B y C

{ B 2 = a 2 +2Ab=4 C 2 = A 2 d= 9 4

Por lo que B=±2 y C=±3/2. Decidimos los signos, comprobando que obtenemos la ecuación original, x4-3x2+6x-2 a partir de su expresión como diferencia de dos cuadrados

x 4 +2a x 3 +b x 2 +2cx+d= ( x 2 +ax+A ) 2 ( Bx+C ) 2

La coincidencia se produce para, B=2 y C=-3/2,

Finalmente, calculamos las raíces de las dos ecuaciones de segundo grado

{ x 2 +(a+B)x+A+C=0 x 2 +(aB)x+AC=0 { x 2 +2x1=0{ x 1 =1+ 2 x 2 =1 2 x 2 2x+2=0{ x 3 =1+i x 4 =1i

Comprobación

>> syms x;
>> solve(x^4-3*x^2+6*x-2,x)
 ans =
         1 - 1i
        1 + 1i
 - 2^(1/2) - 1
   2^(1/2) - 1

Referencias

William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery Numerical Recipes in C. The Art of Scientific Computing. Second Edition. Cambridge University Press (1992), pp. 184-185

Solving Cubic Polynomials

Ferrari's Solution of a Quartic Equation