MATLAB Answers

2

Basic power rule ((a^b)^c = a^(b*c)) does not work

Asked by Andreas Dorner on 1 Feb 2019
Latest activity Commented on by Luna
on 4 Feb 2019
Just cracked down a large problem in my code to a strange phenomenon. A very simple power rule doesn't seem to work here.
b = 5i; %complex, this should have something to do with it
c = 0.1; %for intergers it seems to work
x1 = exp(b)^c;
x2 = exp(b*c);
x1 =
0.9918 - 0.1280i
x2 =
0.8776 + 0.4794i
Shouldn't they be equal?
I just do not unterstand..

  2 Comments

I can't tell if this is homework or not, so here's a thought experiment:
At what value of x does the following print different values for your two expressions?
for x=0.01:.01:5;
y = 0.5/x; % make sure x*y = 0.5
expression1 = exp(1i*x)^y;
expression2 = exp(1i*x*y);
fprintf('%f: %f + %fi ?= %f + %fi\n',x, ...
real(expression1), imag(expression1), ...
real(expression2), imag(expression2));
end
No, it's not homework, this is was a problem i encountered in academic research. I wanted to get rid of one power to speed up my code running on gpu.
I see where you're going with this, thank you! exp(1i*2pi) is starting over again at the unit circle. I didn't see that coming, i feel kinda stupid now. But I wonder if a can use that knowledge somehow.
Thank you very much for your insight. Have a nice day!

Sign in to comment.

2 Answers

Answer by Luna
on 1 Feb 2019
Edited by Luna
on 1 Feb 2019
 Accepted Answer

By the definition Euler's equation: z = x + iy means
So the two things might be different:
and
x2 = exp(b*c) is equal to exp(c)^b actually.
equals
equals also equals
But those two above are not equal.

  2 Comments

(I notice the latex is cut off at the top of each section. I have reported this to Mathworks a second ago.)
Yes, it seems an issue :) Thanks!

Sign in to comment.


Answer by James Tursa
on 1 Feb 2019
Edited by James Tursa
on 1 Feb 2019

This has been discussed in this forum before. Raising complex numbers to a power is a multi-valued operation. MATLAB picks one of those results, which may or may not agree with the result you get by rearranging the operations. E.g.,
>> b = 5i;
>> c = 0.1;
>> exp(b)
ans =
0.283662185463226 - 0.958924274663138i
>> exp(b+2*pi*i) % You can add 2*pi to get same result
ans =
0.283662185463226 - 0.958924274663139i
>> exp(b+4*pi*i) % You can add 4*pi to get same result
ans =
0.283662185463226 - 0.958924274663139i
>> exp(b+18*pi*i) % In general, you can add k*2*pi
ans =
0.283662185463224 - 0.958924274663139i
>>
>> exp(b)^c
ans =
0.991778467700342 - 0.127966679280045i % The MATLAB answer for this expression
>> exp(b*c)
ans =
0.877582561890373 + 0.479425538604203i % This particular rearrangement doesn't match
>> exp((b+18*pi*i)*c)
ans =
0.991778467700342 - 0.127966679280045i % But this one does
You can probably look at the doc to see the rules for how MATLAB picks the result for these mutli-valued issues. But the bottom line is if you have code that depends on multi-valued calculations like this, you need to account for it in your code logic. MATLAB isn't going to know which one you want picked, and you shouldn't expect it to.

  2 Comments

Thank you first of all. I see the problem.
But why does exp((b+18*pi*i)*c) work? 18pi seems a bit arbitrary
"18pi seems a bit arbitrary"
It is entirely arbitrary. That is exactly the point.

Sign in to comment.