第四篇计算机仿真第二十一章计算机仿真在复变函数中的应用基于MATLAB语言的广泛应用,我们介绍的计算机仿真方法主要立足于对MATLAB语言的仿真介绍,而其它的数学工具软件(MATHEMATIC,MATHCAD,MAPLE)的仿真方法是类似的.本章将重点介绍使用MATLAB进行复数、复变函数的各类基本运算以及定理的验证;并介绍仿真计算留数、积分的方法;以及复变函数中Taylor级数展开,Laplace变换和Fourier变换.21.1复数运算和复变函数的图形21.1.1复数的基本运算1复数的生成复数可由语句z=a+b*i生成,也可简写成z=a+bi;另一种生成复数的语句是z=r*exp(i*theta),其中theta是复数辐角的弧度值,r是复数的模.2复矩阵的生成创建复矩阵有两种方法.(1)一般方法例21.1.1创建复矩阵的一般方法.【解】仿真程序为A=[3+5*I-2+3ii5-i9*exp(i*6)23*exp(33i)]%运行后答案为A=3.0000+5.0000i-2.0000+3.0000i0+1.0000i5.0000-1.0000i8.6415-2.5147i-0.3054+22.9980i(说明:%后为注释语句,不需输入)(2)可将实、虚矩阵分开创建,再写成和的形式例21.1.2将实、虚部合并构成复矩阵【解】仿真程序为re=rand(3,2);im=rand(3,2);com=re+i*im%运行后答案为com=0.9501+0.4565i0.4860+0.4447i0.2311+0.0185i0.8913+0.6154i0.6068+0.8214i0.7621+0.7919i21.1.2复数的运算1复数的实部和虚部复数的实部和虚部的提取可由函数real和imag实现.调用形式如下:real(z)返回复数z的实部;imag(z)返回复数z的虚部.2共轭复数复数的共轭可由函数conj实现.调用形式为:conj(z)返回复数z的共轭复数.3复数的模与辐角复数的模与辐角的求取由函数abs和angle实现.调用形式为:abs(z)返回复数z的模;angle(z)返回复数z的辐角.例21.1.1求下列复数的实部与虚部、共轭复数、模与辐角.(1)132i;(2)13ii1i;(3)(34i)(25i)2i;(4)821i4ii.【解】a=[1/(3+2i)1/i-3i/(1-i)(3+4i)*(2-5i)/2ii^8-4*i^21+i]%a=0.2308-0.1538i1.5000-2.5000i-3.5000-13.0000i1.0000-3.0000ireal(a)%ans=0.23081.5000-3.50001.0000(注明:凡ans及其后面的内容均不需输入,它是前面语句的答案.本句ans是real(a)的答案)imag(a)%ans=-0.1538-2.5000-13.0000-3.0000conj(a)%ans=0.2308+0.1538i1.5000+2.5000i-3.5000+13.0000i1.0000+3.0000iabs(a)%ans=0.27742.915513.46293.1623angle(a)%ans=-0.5880-1.0304-1.8338-1.24904复数的乘除法复数的乘除法运算由“*”和“/”实现.5复数的平方根复数的平方根运算由函数sqrt实现.调用形式如下:sqrt(z)返回复数z的平方根值6复数的幂运算复数的幂运算的形式是z^n,结果返回复数z的n次幂.7复数的指数和对数运算复数的指数和对数运算分别由函数exp和log实现.调用形式如下:exp(z)返回复数z的以e为底的指数值;log(z)返回复数z的以e为底的对数值.例21.1.2求下列式的值.(1))10ln(;(2)πi2e.【解】log(-10)%ans=2.3026+3.1416iexp(pi/2*i)%ans=0.0000+1.0000i21.1.3复变函数的图形1.整幂函数的图形例21.1.6绘出幂函数2z的图形.【解】z=cplxgrid(30);cplxmap(z,z.^2);colorbar('vert');title('z^2')%(如图21.1所示)2.根式函数的图形例21.1.7绘出幂函数12z的图形【解】z=cplxgrid(30);cplxroot(2);colorbar('vert');title('z^{1/2}')%(如图21.2).3.复变函数中对数函数的图形例21.1.3绘出对数函数Lnz的图形.【解】z=cplxgrid(20);w=log(z);fork=0:3w=w+i*2*pi;surf(real(z),imag(z),imag(w),real(w));holdontitle('Lnz')endview(-75,30)%(如图21.3)例21.1.4计算机仿真编程实践:若(1,2,,)kzkn对应为10nz的根,其中2n且取整数.试用计算机仿真编程验证下列数学恒等式11()10,()nnkkmmmkzz成立.【解】仿真程序n=round(1000*random('beta',1,1))+1%n=input('pleaseentern=')su=1;sum=0;fors=1:nN(s)=exp(i*2*s*pi/n);end图21.3对数函数Lnz图21.2复变函数12z的图形图21.1复变函数2z的图形fork=1:nfors=1:nifs~=ksu=1/(N(k)-N(s))*su;endendsum=sum+su;su=1;endsum%仿真验证结果为:n=735sum=2.2335e-016-5.1707e-016i其中n的值为随机产生的整数,可见其和的实部和虚部均接近于零。另一篇:matlab表现复变函数(四维)的方法是用三维空间坐标再加上颜色,类似于地球仪用颜色表示海洋与高山。单值函数:单叶多值函数:多叶matlab使用下列函数进行复变函数的做图:cplxgrid:构建一个极坐标的复数数据网格z=cplxgrid(m);%产生(m+1)*(2*m+1)的极坐标下的复数数据网格。最大半径为1的圆面cplxmap:对复变函数做图cplxmap(z,f(z),[optionalbound])%画复变函数的图形,可选项用以选择函数的做图范围cplxmap做图时,以xy平面表示自变量所在的复平面,以z轴表示复变函数的实部,颜色表示复变函数的虚部cplxroot:画复数的n次函数曲面cplxroot(n)%画复数n次根的函数曲面,复数为最大半径为1的圆面cplxroot(n,m)%画复数n次根的函数曲面,复数为最大半径为1的圆面,为(m+1)*(2m+1)的方阵例1:画复数z^3的图形z=3*cplxgrid(30);cplxmap(z,z.^3);colorbar其结果如图可见,自变量z的取值在水平面的半径小于3的园内。cplxmap做图时,以xy平面表示自变量所在的复平面,以z轴表示复变函数的实部,颜色表示复变函数的虚部由于函数为单页的,所以函数是单值的例2:画复数(z-0.5)^0.5的图形仿照cplxroot函数的程序,编程如下m=20;n=2;r=(0:m)'/m;theta=pi*(-m:m)/m;z=r*exp(i*theta)-0.5;w1=z.^(1/n);subplot(2,2,1),surf(real(z),imag(z),real(w1),imag(w1));colorbarw2=w1.*exp(i*2*pi/n);subplot(2,2,2),surf(real(z),imag(z),real(w2),imag(w2));colorbarsubplot(2,1,2)surf(real(z),imag(z),real(w1),imag(w1));holdonsurf(real(z),imag(z),real(w2),imag(w2));colorbar如果仅使用w1=z.^(1/n);,则所得结果为图(2,2,1)可见,对于多值函数,MATLAB仅仅是对其主值进行计算。例3:复变函数1/(1-z)的级数展开复变函数1/(1-z)是级数展开中常用的一个函数。当abs(z)1时,它的泰勒展开式为1/(1-z)=求和(k=0,+无穷)z^k当abs(z)1时,它的罗朗展开式为1/(1-z)=求和(k=-无穷,-1)z^k泰勒展开与罗朗展开的区别在复变函数里面,一些函数无法被展开为泰勒级数,因为那里存在一些奇点。但是如果变量x是负指数幂的话,我们仍然可以将其展开为一个级数,这就是洛朗级数.从形式上看,泰勒级数是只含正幂项和常数项.洛朗级数不仅包含了正数次数的项,也包含了负数次数的项。有时无法把函数表示为泰勒级数,但可以表示为洛朗级数。可以认为泰勒级数是洛朗级数的一种特殊形式m=30;r=2*(0:m)'/m;theta=pi*(-m:m)/m;z=r*exp(i*theta)-0.5;z(find(z==1))=nan;z1=z;z1(abs(z1)=1)=nan;w1=1;u1=1;fork=1:100u1=u1.*z1;w1=u1+w1;endsubplot(2,2,1)cplxmap(z1,w1)colorbarz2=z;z2(abs(z2)=1)=nan;w2=1./z2;u2=1./z2;fork=1:100u2=u2./z2;w2=u2+w2;endsubplot(2,2,2)cplxmap(z2,-w2)colorbarsubplot(2,2,3)cplxmap(z,1./(1-z))colorbartemp1=caxis;subplot(2,2,4)cplxmap(z1,w1)holdoncplxmap(z2,-w2)caxis(temp1)axis([min(min(real(z))),max(max(real(z))),min(min(imag(z))),max(max(imag(z))),min(min(real(1./(1-z)))),max(max(real(1./(1-z))))])colorbar图(2,2,1)为泰勒展开,图(2,2,2)为罗朗展开图(2,2,3)为matlab计算结果,图(2,2,4)为泰勒展开和罗朗展开的综合结果