tobymessi10

10 Reputation

One Badge

5 years, 88 days

MaplePrimes Activity


These are questions asked by tobymessi10

I'm trying show the all roots of equations using Bairstow's methodt, but only shows the roots of Quadratic Factor and don't show the others roots of the other equation. Thanks

This the code:


 

restart; Bairstow := proc (n, a, u0, v0, itmax, TOL) local u, v, b, c, j, k, DetJ, du, dv, s1, s2; u := u0; v := v0; b := Array(0 .. n); c := Array(0 .. n); b[n] := a[n]; c[n] := 0; c[n-1] := a[n]; for j to itmax do b[n-1] := a[n-1]+u*b[n]; for k from n-2 by -1 to 0 do b[k] := a[k]+u*b[k+1]+v*b[k+2]; c[k] := b[k+1]+u*c[k+1]+v*c[k+2] end do; DetJ := c[0]*c[2]+(-1)*c[1]*c[1]; du := (-b[0]*c[2]+b[1]*c[1])/DetJ; dv := (b[0]*c[1]-b[1]*c[0])/DetJ; u := u+du; v := v+dv; printf("%3d %12.7f %12.7f %12.4g %12.4g\n", j, u, v, du, dv); if max(abs(du), abs(dv)) < TOL then break end if end do; printf("\nQ(x)=(%g)x^%d", b[n], n-2); for k from n-3 by -1 to 1 do printf(" + (%g)x^%d", b[k+2], k) end do; printf(" + (%g)\n", b[2]); printf("Remainder: %g(x-(%g))+(%g)\n", b[1], u, b[0]); printf("Quadratic Factor: x^2-(%g)x-(%g)\n", u, v); s1 := evalf((1/2)*u+(1/2)*sqrt(u*u+4*v)); if u^2+4*v < 0 then printf("Zeros: %.13g +-(%.13g)i\n", Re(s1), abs(Im(s1))) else s2 := evalf((1/2)*u-(1/2)*sqrt(u*u+4*v)); printf("Zeros: %.13g, %.13g\n", s1, s2) end if end proc; P := proc (x) options operator, arrow; x^5+(-1)*3.5*x^4+2.75*x^3+2.125*x^2+(-1)*3.875*x+1.25 end proc; n := degree(P(x)); a := Array(0 .. n); a[0] := P(0); for i to n do a[i] := coeff(P(x), x^i) end do; itmax := 10; TOL := 10^(-10); r := -1; s := -1; Bairstow(n, a, r, s, itmax, TOL)

  1   -0.6441699    0.1381090       0.3558        1.138
  2   -0.5111131    0.4697336       0.1331       0.3316
  3   -0.4996865    0.5002023      0.01143      0.03047
  4   -0.5000001    0.5000000   -0.0003136   -0.0002023
  5   -0.5000000    0.5000000    6.413e-08    9.268e-09
  6   -0.5000000    0.5000000            0            0

Q(x)=(1)x^3 + (-4)x^2 + (5.25)x^1 + (-2.5)
Remainder: 0(x-(-0.5))+(0)
Quadratic Factor: x^2-(-0.5)x-(0.5)
Zeros: 0.4999999993, -0.9999999997

 

 

Only show two roots: 0.4999999993, -0.9999999997, but the other roots are missing: 2, -1, 1+0.5i, 1-0.5i approximately, any solution?

I think it's in this part, but I can't think of how to implement it to get the missing roots.

 

Download Bairstow.mw

 

Page 1 of 1