Matlab exponent bug?

조회 수: 8 (최근 30일)
Jonas Reber
Jonas Reber 2011년 11월 24일
편집: Bruno Luong 2021년 3월 7일
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
Jonas Reber
Jonas Reber 2011년 11월 24일
see also:
http://www.mathworks.com/support/solutions/en/data/1-15M1N/index.html

댓글을 달려면 로그인하십시오.

채택된 답변

Daniel Shub
Daniel Shub 2011년 11월 24일
  댓글 수: 3
Daniel Shub
Daniel Shub 2011년 11월 24일
and I got the documentation link ...
Jan
Jan 2011년 11월 24일
then you get the credits. +1

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Jan
Jan 2011년 11월 24일
The POWER operation has a higher precedence than the unary minus. Try this:
-3 .^ (1.3)
(-3) .^ (1.3)
  댓글 수: 1
Jonas Reber
Jonas Reber 2011년 11월 24일
Jan&Daniel - thanks for the fast replies
>> (-3).^(1.3)
didn't realize that.

댓글을 달려면 로그인하십시오.


Edgar An
Edgar An 2021년 3월 7일
편집: Edgar An 2021년 3월 7일
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
Walter Roberson
Walter Roberson 2021년 3월 7일
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
Bruno Luong 2021년 3월 7일
편집: Bruno Luong 2021년 3월 7일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by