[Scilab-users] improve accuracy of roots

Federico Miyara fmiyara at fceia.unr.edu.ar
Sat Jan 12 04:01:36 CET 2019


Denis,

Thank you.

If this were really a general solution it would be great, since it 
improves the root accuracy by several orders, but I don't fully get the 
rationale behind this method.

It seems you are trying to apply a variant of the Raphson-Newton method, 
aren't you?

However, in cases like this, in which there are repeated roots, the 
derivative approaches zero as you get closer to the root, but the 
polynomial goes to zero faster.

In that case the factor 4 may imlpy that the next approximation gets 
closer to the actual root. But this is speculation. It could also overshoot.

Regards,

Federico Miyara



On 10/01/2019 10:32, CRETE Denis wrote:
> Hello,
> I tried this correction to the initial roots z:
>
> z-4*(1+z).^4 ./([ones(z),z,z.^2,z.^3]*(C(2:5).*(1:4))')
>   ans  =
>
>    -1. - 1.923D-13i
>    -1. + 1.189D-12i
>    -1. - 1.189D-12i
>    -1. - 1.919D-13i
>
> // Evaluation of new error, (and defining Z as the intended root, i.e. here Z=-1):
> z2=z-4*(z-Z).^4 ./([ones(z),z,z.^2,z.^3]*(C(2:5).*(1:4))')
> z2 - Z
>   ans  =
>
>     2.233D-08 - 1.923D-13i
>    -2.968D-08 + 1.189D-12i
>    -2.968D-08 - 1.189D-12i
>     2.131D-08 - 1.919D-13i
>
> The factor 4 in the correction is a bit obscure to me, but it seems to work also for R=(3+p)^4, again with an accuracy on the roots of a ~2E-8.
>
> HTH
> Denis
>
> -----Message d'origine-----
> De : users [mailto:users-bounces at lists.scilab.org] De la part de Federico Miyara
> Envoyé : jeudi 10 janvier 2019 00:32
> À :users at lists.scilab.org
> Objet : [Scilab-users] improve accuracy of roots
>
>
> Dear all,
>
> Consider this code:
>
> // Define polynomial variable
> p = poly(0, 'p', 'roots');
>
> // Define fourth degree polynomial
> R = (1 + p)^4;
>
> // Find its roots
> z = roots(R)
>
> The result (Scilab 6.0.1) is
>
>    z  =
>
>     -1.0001886
>     -1. + 0.0001886i
>     -1. - 0.0001886i
>     -0.9998114
>
> It should be something closer to
>
>     -1.
>     -1.
>     -1.
>     -1.
>
> Using these roots
>
> C = coeff((p-z(1))*(p-z(2))*(p-z(3))*(p-z(4)))
>
> yield seemingly accurate coefficients
>    C  =
>
>      1.   4.   6.   4.   1.
>
>
> but
>
> C - [1  4  6 4 1]
>
> shows the actual error:
>
> ans  =
>
>      3.775D-15   1.243D-14   1.155D-14   4.441D-15   0.
>
> This is acceptable for the coefficients, but the error in the roots is
> too large. Somehow the errors cancel out when  assembling back the
> polynomial but each individual zero should be closer to the theoretical
> value
>
> Is there some way to improve the accuracy?
>
> Regards,
>
> Federico Miyara
>
>
>
>
> ---
> El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
> https://www.avast.com/antivirus
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20190112/52726966/attachment.htm>


More information about the users mailing list