Exemplo n.º 1
0
void Polynom::laGuerre(dcmplx *xk, int iteraciones) {
    dcmplx n = grado;
    Polynom *pp = new Polynom(max, max);
    pp->copyFrom(this);
    pp->derivate();
    Polynom *p2 = new Polynom(max, max);
    p2->copyFrom(pp);
    p2->derivate();
    for (int i = 0; i < iteraciones; i++) {
        dcmplx G = pp->evaluate(*xk) / evaluate(*xk);
        dcmplx H = G * G - 
        p2->evaluate(*xk) / evaluate(*xk);
        
        dcmplx a1 = G + 
        sqrt((n - (dcmplx) 1) * (n * H - G * G));
        
        dcmplx a2 = G - 
        sqrt((n - (dcmplx) 1) * (n * H - G * G));
        
        dcmplx a;
        if(abs(a1) > abs(a2))
            a = n / a1;
        else
            a = n / a2;
        *xk = *xk - a;
        if(evaluate(*xk) == dcmplx(0))
            break;
    }
}