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 cúbica

Expresamos una ecuación cúbica 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 una ecuación cúbica son las siguientes:

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 cúbica x3+0x2-7x-6

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

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

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