cyfile / Matlab-base-toolbox

本人使用Matlab基础工具箱所编写的各种代码
1 stars 0 forks source link

复数指数 #17

Open 213cy opened 7 years ago

213cy commented 7 years ago
%%复数指数
%%=========================================
%% 当k为整数时 exp(Z*k)=exp(Z)^k
Z=rand+10i*rand
log(exp(Z))
ki=randi(10);
%
exp(Z*ki),
exp(real(Z*ki))*(cos(imag(Z*ki))+i*sin(imag(Z*ki)))
%
exp(Z)^ki,% 当k为非整数时,计算这个要先算log(exp(Z))
exp(real(log(exp(Z))*ki))*(cos(imag(log(exp(Z))*ki))+i*sin(imag(log(exp(Z))*ki)))
exp(log(exp(Z))*ki),exp(log(exp(Z)))^ki
%%=========================================
%% 当k不整数,且imag(Z)不在区间[-pi pi]时 exp(Z*k)!=exp(Z)^k
Zb=rand+i*(10*rand+pi),
Zc=log(exp(Zb))%!=Zb
Zb-Zc,2*pi 
k=rand;
exp(Zb*k),exp(Zb)^k,%exp(Z*k)!=exp(Z)^k
%% ====================================
%% 复数取对数的算法
%%
exp(Zb),exp(real(Zb))*(cos(imag(Zb))+i*sin(imag(Zb)))
re=real(exp(Zb));
im=imag(exp(Zb));
M=hypot(re,im);
log(exp(Zb)),log(M) + 1i*atan2(im,re)
Zb
% For complex inputs z = x + 1i*y, exp calculates the complex exponential
% exp(x).*(cos(y) + 1i*sin(y)).
% For complex or negative inputs, log computes the complex logarithm
% log(abs(z)) + 1i*atan2(y,x).
% 因为atan2(y,x)的值域总在[-pi pi]之间
% 所以Zb的幅角不在这个区域时,log(exp(Zb))算出的幅角将和Zb相差2*n*pi
% 这个角度差,在k是整数时对于exp(Z)^k,exp(Z*k)的值并没有影响
% 但是在k为小数时,由于exp(Zb)取log算出的Zb2和Zb不同,
% Zb2,Zb它们都乘k后幅角并不一致(并不也相差2*n*pi)
% 进而exp(Z*k),exp(Z)^k不同
exp(Zb*k),exp(Zb)^k