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; } }