Basic power rule ((a^b)^c = a^(b*c)) does not work
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Greg Dionne
il 1 Feb 2019
Modificato: Greg Dionne
il 1 Feb 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
Risposta accettata
Luna
il 1 Feb 2019
Modificato: Luna
il 1 Feb 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 Commenti
Walter Roberson
il 1 Feb 2019
(I notice the latex is cut off at the top of each section. I have reported this to Mathworks a second ago.)
Più risposte (1)
James Tursa
il 1 Feb 2019
Modificato: James Tursa
il 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 Commenti
Stephen23
il 2 Feb 2019
"18pi seems a bit arbitrary"
It is entirely arbitrary. That is exactly the point.
Vedere anche
Categorie
Scopri di più su Fourier Analysis and Filtering in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!