P.S. Add "0 to mexp for correct array handling:

   mexp =:  3 : 0"0
'u v' =. +. y
(^u)*(cos v)+0j1*sin v
)


Kip Murray wrote:
   NB. Here is a model for ^ that has 0 = 1 + ^ 0j1*1p1

   load 'numeric'

   cos =: clean@(2&o.)

   sin =: clean@(1&o.)

   mexp =:  3 : 0
'u v' =. +. y
(^u)*(cos v)+0j1*sin v
)

   exp =: 3 : 0
mexp y
:
mexp y * ^. x
)

   i =: 0j1

   pi =: 1p1

   2 exp 3
8
   i exp 2
_1
   0 = 1 + exp i*pi
1
   exp _24
3.77513e_11

   NB. That is, exp x remains positive for real x

Kip Murray


Kip Murray wrote:
This is great!  /Kip


Roger Hui wrote:
In J6.03:

   0j1 ^ i.5 4
1 0j1 _1 0j_1
1 0j1 _1 0j_1
1 0j1 _1 0j_1
1 0j1 _1 0j_1
1 0j1 _1 0j_1



----- Original Message -----
From: Roger Hui <[email protected]>
Date: Thursday, May 21, 2009 17:46
Subject: Re: [Jchat] Clean elementary functions?
To: Chat forum <[email protected]>

I am in sympathy with your concern.
A solution in the particular case of z^n is to do
repeated squaring instead of ^n*^.z .
The interpreter already does that for real z .



----- Original Message -----
From: Kip Murray <[email protected]>
Date: Thursday, May 21, 2009 15:48
Subject: [Jchat] Clean elementary functions?
To: Chat forum <[email protected]>

Caution, rant follows.  /Kip Murray


    NB. It is too bad that whereas

    0j1*0j1
_1

    NB. and

    *:0j1
_1

    NB. we get

    0j1^2
_1j1.22465e_16


    NB. The culprit appears to be

    1 o. o. 1
1.22465e_16


    NB. because 0j1^2 is calculated as

    ^ 2 * ^. 0j1
_1j1.22465e_16

    NB. which has real part

    2 o. o. 1
_1

    NB. and imaginary part

    1 o. o. 1
1.22465e_16

NB. Sometimes I think verb "clean" should be incorporated NB. in the elementary functions! Maybe just in 1&o. and 2&o. NB. The TI-83 calculator gives "clean" results for i^2 and e^(i pi).

    load 'numeric'

    clean 0j1^2
_1

    clean ^ 0j1 * 1p1
_1

    0j1^2
_1j1.22465e_16

    ^ 0j1 * 1p1
_1j1.22465e_16

    clean
1e_10&$: :(4 : 0)
if. L. y do.
   x clean each y
else.
   if. (3!:0 y) e. 16 16384 do.
     j./"1 y * x <: | y=. +.y
   else.
     y * x <: |y
   end.
end.
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

------------------------------------------------------------------------

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

------------------------------------------------------------------------

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to