"extended sin and cos" meant "complex sin and cos"

Kip Murray wrote:
And

   0j1 exp i. 4
1 0j1 _1 0j_1

but you still can't duplicate with exp your J 6.03 feat with 0j1 ^ i. 5 4 .

Thank you for working on this.

I am uneasy about replacing zero crossings \ and / with - in the graphs of real cos and sin, but I want to have apparent periodicities 0 = (exp z) - exp z + 0j2p1 and 0 = (cos z) - cos z + 2p1 and 0 = (sin z) - sin z + 2p1 as in (now using my sin and exp)

   sin 0j1 + 2p1 * i. 4 1
0j1.1752
0j1.1752
0j1.1752
0j1.1752

   exp 1 + 0j2p1 * i. 4 1
2.71828
2.71828
2.71828
2.71828

   NB. compare

   1 o. 0j1 + 2p1 * i. 4 1
           0j1.1752
_3.77946e_16j1.1752
_7.55892e_16j1.1752
_1.13384e_15j1.1752

   ^ 1 + 0j2p1 * i. 4 1
             2.71828
2.71828j_6.65787e_16
2.71828j_1.33157e_15
2.71828j_1.99736e_15

Below if you replace 0.5p1 1.5p1 by (0.5p1 + 2p1 * i.10) and do something similar for sin, that might do for practical purposes. Later an extended sin and cos could
be defined in terms of exp.


Roger Hui wrote:
cos should check for 1.5p1 as well as 0.5p1 :

   cos=: 2&o. * 0.5p1 1.5p1 -.@(e.!.0)~ |

With this change, we get:

   mexp (i.4) * ^.0j1
1 0j1 _1 0j_1



----- Original Message -----
From: Roger Hui <[email protected]>
Date: Monday, May 25, 2009 10:10
Subject: Re: [Jchat] Clean elementary functions?
To: Chat forum <[email protected]>

I believe that if you want a "clean" result at all,
it's better to give it for sin and cos only if the argument is the best possible 64-bit representation for pi (or pi%2). Thus:

sin =: 1&o. *   1p1 ~:!.0 |
cos =: 2&o. * 0.5p1 ~:!.0 |
re  =: 9&o.
im  =: 11&o.
mexp=: ^...@re * (cos j. sin)@im

exp =: mexp : (mexp@(^...@[ * ]))

   2 exp 3
8
     1j1 exp 2
0j2
   0j1 exp 2
_1
   0 = 1 + exp 0j1 * 1p1
1
   exp _24
3.77513e_11

hex  =: {:@(2&(3!:3))"0
unhex=: 3!:2@((}:2(3!:3) 1p1)&,)"1

   sin 1p1 _1p1
0 0
   hex 1p1
400921fb54442d18
   sin unhex (}:hex 1p1),"1 0 '79'
5.6655e_16 _3.21629e_16

   cos 0.5p1 _0.5p1
0 0
   hex 0.5p1
3ff921fb54442d18
   cos unhex (}:hex 0.5p1),"1 0 '79'
2.83275e_16 _1.60814e_16



----- Original Message -----
From: Kip Murray <[email protected]>
Date: Friday, May 22, 2009 18:54
Subject: Re: [Jchat] Clean elementary functions?
To: Chat forum <[email protected]>

    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

Reply via email to