# Matlab exponent bug?

12 views (last 30 days)
Jonas Reber on 24 Nov 2011
Edited: Bruno Luong on 7 Mar 2021
Hello MatLabers
I have encountered a problem when calculating a non integer exponent/power of a variable.
example:
>> -3.^(1.3)
>> ans = -4.1712
thats exactly what I aim to calculate. However, if I do the exact same thing with a variable - the result gets complex:
>> a = -3
>> a.^(1.3)
>> ans = -2.4518 - 3.3745i
is this an known issue or am I doing somehting wrong? (tested on R2010a, R2011b)
##### 1 CommentShow -1 older commentsHide -1 older comments
Jonas Reber on 24 Nov 2011
see also:
http://www.mathworks.com/support/solutions/en/data/1-15M1N/index.html

Sign in to comment.

### Accepted Answer

Daniel Shub on 24 Nov 2011
##### 3 CommentsShow 1 older commentHide 1 older comment
Daniel Shub on 24 Nov 2011
and I got the documentation link ...
Jan on 24 Nov 2011
then you get the credits. +1

Sign in to comment.

### More Answers (2)

Jan on 24 Nov 2011
The POWER operation has a higher precedence than the unary minus. Try this:
-3 .^ (1.3)
(-3) .^ (1.3)
##### 1 CommentShow -1 older commentsHide -1 older comments
Jonas Reber on 24 Nov 2011
Jan&Daniel - thanks for the fast replies
>> (-3).^(1.3)
didn't realize that.

Sign in to comment.

Edgar An on 7 Mar 2021
Edited: Edgar An on 7 Mar 2021
The problem is not about precedence. The problem occurs when we use variables instead of numbers. Just like the person who posted.
-0.685^1.5 gives a correct answer
but a = -0.685, b = 1.5, and then a^b gives wrong answer
i am using R2020b version
##### 3 CommentsShow 1 older commentHide 1 older comment
Walter Roberson on 7 Mar 2021
In MATLAB, a^b is defined to be equivalent to exp(log(a)*b). When a is negative the log is complex with a πι component and if b is not an integer then the exp() of the πι*b is going to be complex.
In practice you can tell from timings that for at least some integer values a^b is not implemented through logs: for example a^2 has timing the same as a*a, but the principle is the same.
Bruno Luong on 7 Mar 2021
Edited: Bruno Luong on 7 Mar 2021
To be precise for z complex (including negarive real)
log(z)
is defined in term of real-argument function log and atan2
log(abs(z)) + 1i*angle(z)
where abs(z) is
sqrt(imag(z)^2+real(z)^2) % the square "x^2" here is interpreted as (x*x)
angle(z) is
atan2(imag(z),real(z))
with all the rule we discuss recently, notably discontinuity when real(z) is negative and numeriral sign of imag(z).
The definition of
exp(z)
has no ambiguity.

Sign in to comment.

### Categories

Find more on Logical in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!