[Scilab-users] display of complex/not real numbers, again

Stéphane Mottelet stephane.mottelet at utc.fr
Wed Sep 18 13:50:14 CEST 2019


Hello,

Le 13/09/2019 à 12:51, Stéphane Mottelet a écrit :
>
>
> Le 13/09/2019 à 12:45, Samuel Gougeon a écrit :
>> Hello,
>>
>> To me, as already claimed there 
>> <https://antispam.utc.fr/proxy/2/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/bugzilla.scilab.org/show_bug.cgi?id=15781#c2>, 
>> it's clear that, for a complex-encoded number, not displaying its 
>> null imaginary part is a bug, and the proposed patch is clearly 
>> welcome as well.
>>
>> Another regression very close to this one, but with real numbers 
>> display, would deserve the same care :
>> Scilab 5:
>> -->[1e30 1e-30]
>>  ans  =
>>     1.000D+30    1.000D-30
>>
>> Scilab 6:
>> --> [1e30 1e-30]
>>  ans  =
>>    1.000D+30   0.
> The patch also fixes this.
>>
>> So, very small numbers are reduced to strict 0...


Samuel,  do you know if a bug was reported for this particular point ?

Thanks,

S.


>> This is a bad implementation of the variable format mode. The Scilab 
>> 5 one was correct, at least on this point.
>>
>> Best regards
>> Samuel
>>
>>
>> Le 12/09/2019 à 10:26, Stéphane Mottelet a écrit :
>>> Hello all,
>>>
>>> The subject has been already discussed a lot but I would like it to 
>>> be discussed again because I now have a real rationale to promote a 
>>> change in the way complex numbers with small imaginary part are 
>>> displayed.
>>>
>>> I don't know if some of you were aware of the clever technique of 
>>> complex-step derivative approximation, but until yesterday I was not 
>>> (see e.g. 
>>> http://mdolab.engin.umich.edu/sites/default/files/Martins2003CSD.pdf). 
>>> Roughly speaking, using the extension of a real function x->f(x) to 
>>> the complex plane allows to compute an approximation of the 
>>> derivative f'(x0) at a real x0 without using a substraction, like in 
>>> the central difference formula (f(x0+h)-f(x0-h))/2/h which is 
>>> subject to substractive cancelation when h is small. In Scilab most 
>>> operators and elementary functions are already complex-aware so this 
>>> is easy to illustrate the technique. For example let us approximate 
>>> the derivative of x->cos(x) at x=%pi/4, first with the central 
>>> difference formula, then with the complex step technique:
>>>
>>> --> format("e",24)
>>>
>>> --> h=%eps/128, x0=%pi/4
>>>  h  =
>>>
>>>    1.73472347597680709D-18
>>>
>>>  x0  =
>>>
>>>    7.85398163397448279D-01
>>>
>>>
>>> --> (cos(x0+h)-cos(x0-h))/2/h
>>>  ans  =
>>>
>>>    0.00000000000000000D+00
>>>
>>>
>>> --> imag(cos(x0+%i*h))/h
>>>  ans  =
>>>
>>>   -7.07106781186547462D-01
>>>
>>>
>>> --> -sin(x0)
>>>  ans  =
>>>
>>>   -7.07106781186547462D-01
>>>
>>> You can see the pathological approximation with central difference 
>>> formula and the perfect (up to relative machine precision) 
>>> approximation of complex-step formula.
>>>
>>> However, the following is a pity:
>>>
>>>
>>> --> cos(x0+%i*h)
>>>  ans  =
>>>
>>>    7.07106781186547573D-01
>>>
>>> We cannot see the imaginary part although seeing the latter is 
>>> fundamental in the complex-step technique. We have to force the 
>>> display like this, and frankly I don't like having to do that with 
>>> my students:
>>>
>>> --> imag(cos(x0+%i*h))
>>>  ans  =
>>>
>>>   -1.22663473334669916D-18
>>>
>>> I hope that you will find that this example is a good rationale to 
>>> change the default display of Scilab. To feed the discussion, here 
>>> is how Matlab displays things, without having to change the default 
>>> settings:
>>>
>>>
>>> >> h=eps/128, x0=pi/4
>>> h =
>>>    1.7347e-18
>>> x0 =
>>>     0.7854
>>>
>>> >> (cos(x0+h)-cos(x0-h))/2/h
>>> ans =
>>>      0
>>>
>>> >> cos(x0+i*h)
>>> ans =
>>>    0.7071 - 0.0000i
>>>
>>> >> imag(cos(x0+i*h))/h
>>> ans =
>>>    -0.7071
>>>
>>> >> -sin(x0)
>>> ans =
>>>    -0.7071
>>>
>>>
>>
>>
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users
> -- 
> Stéphane Mottelet
> Ingénieur de recherche
> EA 4297 Transformations Intégrées de la Matière Renouvelable
> Département Génie des Procédés Industriels
> Sorbonne Universités - Université de Technologie de Compiègne
> CS 60319, 60203 Compiègne cedex
> Tel : +33(0)344234688
> http://www.utc.fr/~mottelet

-- 
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet

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


More information about the users mailing list