Exemplo n.º 1
0
void Polynom::roots(dcmplx *roots)
{
    Polynom *temporal = new Polynom(grado, max);
    temporal->copyFrom(this);
    for(int i = 0; i < grado; i++)
    {
        dcmplx *xk = new dcmplx(0, 0);
        temporal->laGuerre(xk, 50);
        if(xk->imag() >= 1e-6)
        {
            Polynom *divisible = new Polynom(2, 3);
            
            divisible->coef[0] = xk->real() * xk->real()
            + xk->imag() * xk->imag();
            
            divisible->coef[1] = -2 * xk->real();
            divisible->coef[2] = 1;
            *temporal /= divisible;
            roots[i] = *xk;
            dcmplx *xk1 = new dcmplx(xk->real(), xk->imag());
            delete divisible;
            roots[++i] = *xk1;
        }
        else
        {
            Polynom *divisible = new Polynom(1, 2);
            divisible->coef[0] = -(xk->real());
            divisible->coef[1] = 1;
            *temporal /= divisible;
            delete divisible;
            dcmplx *xk1 = new dcmplx(xk->real(), 0);
            delete xk;
            roots[i] = *xk1;
        }
    }
}