[Date Index] [Thread Index] [Author Index]
Re: How to eliminate noises? A better way perhaps.
On 8 Nov 2011, at 13:15, Noqsi wrote: > Now, note the the documentation for Root makes the following promise: > "The ordering used by Root[f,k] takes real roots to come before > complex ones, and takes complex conjugate pairs of roots to be > adjacent. " One difficulty with this promise is that it doesn't tell > you how to find the break between the real part of the vector and the > complex part. The following code assumes that N[Root[f,n]] will > reliably have head Real for real roots. If f is a polynomial, as it is in your case, than this will be true. The reason is that the roots of a polynomial can always be completely isolated and Mathematica does so the first time a numerical value of a root is used. Although Root isolation uses extended precision arithmetic (it can also be done exactly, if you use the options ExactRootIsolation but that will make the computation slower and should not affect the result), applying N with MachinePrecision to a real Root object should always produce a number with head Real (as long as the coefficients of f are exact; note that Root has the Attribute NHoldAll) By the way, this is not going to be necessarily true when f is a transcendental function. In this case a Root object may represent a cluster of roots, some of which could be real and some not, and it may require high precision arithmetic to decide. In this situation Mathematica will not perform root isolation until sufficient precision is specified. But when f is a polynomial this is not an issue. Andrzej Kozlowski