Matlab exponent bug?
이전 댓글 표시
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)
채택된 답변
추가 답변 (2개)
Jan
2011년 11월 24일
The POWER operation has a higher precedence than the unary minus. Try this:
-3 .^ (1.3)
(-3) .^ (1.3)
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
Bruno Luong
2021년 3월 7일
"wrong" answer? Rather not what YOU expect.
>> a = -0.685; b = 1.5;
>> a^b
ans =
0.000000000000000 - 0.566938378485705i
>> exp(log(a)*b)
ans =
-0.000000000000000 - 0.566938378485705i
>> -(abs(a)^b) % You expect this but you miss how power function is defined
ans =
-0.566938378485705
>> -0.685^1.5
ans =
-0.566938378485705
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
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.
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!