fractional powers

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

fractional powers

Heber Farnsworth

I'm somewhat disturbed by the following behaviour on octave.  Perhaps it
is standard and I shouldn't be worried but it surprised me.  Consider the
following question: what is the cube root of -1?  Clearly the answer
should be -1.  Now ask octave

octave:1> x = (-1)^(1/3)
x = 0.50000 + 0.86603i

it gets wierder if you now cube that number

octave:2> x^3
ans = -1.0000e+00 + 1.2246e-16i
 
This is pretty close to the truth but still strange to my way of thinking.
Similar wierdness shows up with other fractional powers: 1/5, 1/7, etc.

Any thoughts?

  Heber Farnsworth                               | Department of Finance
  Univerity of Washington                        | Box 353200
  tele:  (206) 528-0793 home                     | Seattle, WA 98195-3200
  tele:  (206) 543-4773 finance     web: http://weber.u.washington.edu/~heberf
  fax:   (206) 685-9392             email: [hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: fractional powers

Marvin Vis
> I'm somewhat disturbed by the following behaviour on octave.  Perhaps it
> is standard and I shouldn't be worried but it surprised me.  Consider the
> following question: what is the cube root of -1?  Clearly the answer
> should be -1.  Now ask octave
>
> octave:1> x = (-1)^(1/3)
> x = 0.50000 + 0.86603i
>
> it gets wierder if you now cube that number
>
> octave:2> x^3
> ans = -1.0000e+00 + 1.2246e-16i
>  
> This is pretty close to the truth but still strange to my way of thinking.
> Similar wierdness shows up with other fractional powers: 1/5, 1/7, etc.
>
> Any thoughts?

There are actually 3 cube roots of -1 (here, j = sqrt(-1)):

        (-1)^(1/3) = {exp(j*pi/3), exp(-j*pi/3), -1}

Most rooting algo's will find the n^th root of a number as follows:

        Starting with a number z = |z|*exp(j*theta),

                z^(1/n) = |z|^(1/n) * exp(j*theta/n)

I'd call this the primary root.  If you want to have a special case for
negative (real) z and odd n, you could use a routine that does:

        z^(1/n) = - |z|^(1/n)

This would give you -1 as the cube root of -1.

M.

Reply | Threaded
Open this post in threaded view
|

Re: fractional powers

Mario Storti-3
In reply to this post by Heber Farnsworth

> I'm somewhat disturbed by the following behaviour on octave.  Perhaps it
> is standard and I shouldn't be worried but it surprised me.  Consider the
> following question: what is the cube root of -1?  Clearly the answer
> should be -1.  Now ask octave
>
> octave:1> x = (-1)^(1/3)
> x = 0.50000 + 0.86603i
>
> it gets wierder if you now cube that number
>
> octave:2> x^3
> ans = -1.0000e+00 + 1.2246e-16i
>
> This is pretty close to the truth but still strange to my way of thinking.
> Similar wierdness shows up with other fractional powers: 1/5, 1/7, etc.
>
> Any thoughts?
>
>   Heber Farnsworth                               | Department of Finance
>   Univerity of Washington                        | Box 353200
>   tele:  (206) 528-0793 home                     | Seattle, WA 98195-3200
>   tele:  (206) 543-4773 finance     web: http://weber.u.washington.edu/~heberf
>   fax:   (206) 685-9392             email: [hidden email]
>

I think that Octave, Matlab and all  the others (even Fortran! I tried
it right now!!.) performs z^(1/3) as:

                z^(1/3)=exp(1/3*log(z))

log(z) is multi-valued and the standard definition is log(z) real over
the positive real axis  and  with a branch-cut   in the negative  real
axis. For z strictly on the negative real axis it gives:

               log(z)=log(|z|) + i*pi

and then z^(1/3) is computed as:

                 z^(1/3)=exp(1/3*(log(|z|) + i*pi))
                        =|z|^(1/3)* exp(i*pi/3)

which is the solution given by Octave. If you add a small negative
imaginary part, then you cross the branch-cut and then:

               log(z)=log(|z|) - i*pi

and the result will be:

                 z^(1/3)=exp(1/3*(log(|z|) - i*pi))
                        =|z|^(1/3)* exp(-i*pi/3)

>    octave:9> (-1-i*1e-15)^(1/3)
>    ans = 0.50000 - 0.86603i

Mario

%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%
Mario Alberto Storti               | Fax: (54)(42) 55.09.44               |
Grupo de Tecnologia Mecanica       | Tel: (54)(42) 55.91.75               |
INTEC, Guemes 3450 - 3000 Santa Fe | http://venus.unl.edu.ar/gtm-eng.html |
Argentina                          | Home: Gob. Vera 3161                 |
Reply: [hidden email]  |       (54)(42) 55.00.23              |