[Scilab-users] The 1st order Struve function

Dang, Christophe Christophe.Dang at sidel.com
Mon Jan 26 11:21:42 CET 2015


Hello,

> De : Claus Futtrup
> Envoyé : samedi 24 janvier 2015 19:31
>
>    z = 2/%pi - besselj(0,x) + (16/%pi - 5) .* (sin(x)./x) ..
>              + (12 - 36/%pi) * ( (1-cos(x))./(x.^2) );

A division cost much more than several multiplications (I think something like a 7 factor).

If you have a big amount of data (and thus a long calculation time),
you can reduce this calculation time,
but maybe at the expense of the precision if x take very high or very low absolute values
(overflow or underflow of x^-2),
with the following trick (not tested):

denominator = x.^(-2);
pi_inv = 1/%pi;

    z = 2*pi_inv - besselj(0,x) + ((16*pi_inv - 5) .* sin(x).*x ..
              + (12 - 36*pi_inv) *  (1-cos(x))).*denominator;

It replaces 2*size(x) divisions by 1*size(x) division and 2*size(x) multiplications,
which is usually less time consuming.

Forget it if size(x) is small or x reach very high or very low absolute values.

HTH

--
Christophe Dang Ngoc Chan
Mechanical calculation engineer
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error), please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.


More information about the users mailing list