Basic power rule ((a^b)^c = a^(b*c)) does not work
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Greg Dionne
le 1 Fév 2019
Modifié(e) : Greg Dionne
le 1 Fév 2019
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
Réponse acceptée
Luna
le 1 Fév 2019
Modifié(e) : Luna
le 1 Fév 2019
By the definition Euler's equation: z = x + iy means
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202375/image.png)
So the two things might be different:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202376/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202377/image.png)
x2 = exp(b*c) is equal to exp(c)^b actually.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202378/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202376/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202385/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202377/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202382/image.png)
But those two above are not equal.
2 commentaires
Walter Roberson
le 1 Fév 2019
(I notice the latex is cut off at the top of each section. I have reported this to Mathworks a second ago.)
Plus de réponses (1)
James Tursa
le 1 Fév 2019
Modifié(e) : James Tursa
le 1 Fév 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 commentaires
Stephen23
le 2 Fév 2019
"18pi seems a bit arbitrary"
It is entirely arbitrary. That is exactly the point.
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!