Search code examples
functionmatlabexponential

How to get (-8)^0.333333 = -2 in MATLAB?


Using MATLAB exponential function:

(-8)^0.333333
ans = 1.0000 + 1.7320i

How to get (-8)^0.333333 = -2 instead?

x=-10:-1;
x.^0.333333

How to get real value?

How to redefine ^:

x.^y

to

sign(x).*abs(x.^y))

Solution

  • MATLAB 7.0 provides the NTHROOT function, which returns the real roots of a number. So your formula becomes NTHROOT(-8, 3) = -2

    If you are using a version prior to MATLAB 7.0 (R14), please read the following:

    To obtain the real cube root of a negative real number "x", rather than executing:

    x.^(1/3)
    

    use the command:

    sign(x).*abs(x.^(1/3))
    

    This will find the absolute value of the root and modify it by the sign of the argument.

    See this