[R] Solving 100th order equation
Rolf Turner
r.turner at auckland.ac.nz
Sun May 25 23:24:43 CEST 2008
On 25/05/2008, at 1:10 PM, <Bill.Venables at csiro.au>
<Bill.Venables at csiro.au> wrote:
> Oops! Actually spectacularly bad. I didn't see the positive
> exponent!
>
> Curiously, there appears to be just one bad apple:
>
>> sort(Mod(p(z)))
> [1] 1.062855e-10 1.062855e-10 1.328999e-10 1.328999e-10 2.579625e-10
> [6] 2.579625e-10 3.834721e-10 3.834721e-10 3.875288e-10 3.875288e-10
> [11] 5.287459e-10 5.287459e-10 5.306241e-10 5.306241e-10 6.678424e-10
> [16] 6.678424e-10 6.876300e-10 6.876300e-10 8.519089e-10 8.519089e-10
> [21] 9.345531e-10 9.345531e-10 9.369015e-10 9.369015e-10 9.789510e-10
> [26] 9.789510e-10 1.041601e-09 1.041601e-09 1.046996e-09 1.046996e-09
> [31] 1.149073e-09 1.149073e-09 1.209875e-09 1.209875e-09 1.232793e-09
> [36] 1.232793e-09 1.244167e-09 1.244167e-09 1.388979e-09 1.388979e-09
> [41] 1.556354e-09 1.556354e-09 1.596424e-09 1.596424e-09 1.610661e-09
> [46] 1.610661e-09 1.722577e-09 1.722577e-09 1.727842e-09 1.727842e-09
> [51] 1.728728e-09 1.728728e-09 1.769644e-09 1.769644e-09 1.863983e-09
> [56] 1.863983e-09 1.895296e-09 1.895296e-09 1.907509e-09 1.907509e-09
> [61] 1.948662e-09 1.948662e-09 2.027021e-09 2.027021e-09 2.061063e-09
> [66] 2.061063e-09 2.116735e-09 2.116735e-09 2.185764e-09 2.185764e-09
> [71] 2.209158e-09 2.209158e-09 2.398479e-09 2.398479e-09 2.404217e-09
> [76] 2.404217e-09 2.503279e-09 2.503279e-09 2.643436e-09 2.643436e-09
> [81] 2.654788e-09 2.654788e-09 2.695735e-09 2.695735e-09 2.921933e-09
> [86] 2.921933e-09 2.948185e-09 2.948185e-09 2.953596e-09 2.953596e-09
> [91] 3.097433e-09 3.097433e-09 3.420593e-09 3.420593e-09 3.735880e-09
> [96] 3.735880e-09 4.190042e-09 4.554964e-09 4.554964e-09 1.548112e+15
<snip>
>> library(PolynomF)
>> x <- polynom()
>> p <- x^100 - 2*x^99 + 10*x^50 + 6*x - 4000
>> z <- solve(p)
>> z
> [1] -1.0741267+0.0000000i -1.0739999-0.0680356i -1.0739999
> +0.0680356i -1.0655699-0.1354644i
> [5] -1.0655699+0.1354644i -1.0568677-0.2030274i -1.0568677
> +0.2030274i -1.0400346-0.2687815i
> ...
> [93] 1.0595174+0.2439885i 1.0746575-0.1721335i 1.0746575
> +0.1721335i 1.0828132-0.1065591i
> [97] 1.0828132+0.1065591i 1.0879363-0.0330308i 1.0879363
> +0.0330308i 2.0000000+0.0000000i
>>
>
> Now to check how good they are:
>
>>
>> range(Mod(p(z)))
> [1] 1.062855e-10 1.548112e+15
It is fascinating to muck about with curve(p,from=a,t=b) for various
values
of a and b.
One eventually discerns that there is a real root just a tad less
than 2.
Doing uniroot(p,c(1.5,2.5)) gives a root of just *over* 2 with a
function
value of about 1.9e25.
However uniroot(p,c(1.995,2.005)) gives
$root
[1] 1.999993
$f.root
[1] -4.570875e+24
$iter
[1] 4
$estim.prec
[1] 6.103516e-05
What a difference 7.214144e-06 makes! When you're dealing with
polynomials of degree 100.
Bozhemoi!
cheers,
Rolf Turner
P.S. I suspect that this was a numerical analysis homework question
designed to teach
a salutary lesson to the nonchalant neophytes.
R. T.
######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}
More information about the R-help
mailing list