> On 12/15/2012 12:19 PM, sergio_r@mail.com wrote:
> > Hello all,
> >
> > Is there a way of telling matlab to return first a real root
> > instead of a complex one?
> >
> > For some strange reason matlab seems not to handle cubic roots
> > properly. Apparently the default behaviour is to first
> > report a complex root. Let's see two examples:
> >
> >>> (1/2)^(1/3)
> >
> > ans =
> >
> > 0.3969 + 0.6874i
> >
> >>> (1/2)^(2/3)
> >
> > ans =
> >
> > 0.3150 + 0.5456i
> >
> > Thanks in advance.
         
Matlab's answer to cube roots is consistent with its handling of the nth roots of complex numbers. If you have a complex number in polar form
z = r*exp(theta*i), r >=0, pi < theta <= pi,
the principal nth root returned is this
z^(1/n) = r^(1/n)*exp(theta/n*i)
just as you would expect. If you follow this rule where z is real but negative as with your z = 1/2, you get
1/2 = 1/2*exp(pi*i) < This is the standard polar form
(1/2)^(1/3) = (1/2)^(1/3)*exp(pi/3*i) = 0.396850263 + 0.687364819*i
It does make sense.
If you want the real cube root of any real number x, positive or negative, you can do it with
sign(x)*abs(x)^(1/3)
which is admittedly awkward but it works.
Roger Stafford
