python/Matplotlib绘制复变函数图像教程
今天发现sympy依赖的库mpmath里也有很多数学函数,其中也有在复平面绘制二维图的函数cplot,具体例子如下
frommpmathimport* deff1(z): returnz deff2(z): returnz**3 deff3(z): return(z**4-1)**(1/4) deff4(z): return1/z deff5(z): returnatan(z) deff6(z): returnsqrt(z) cplot(f1) cplot(f2) cplot(f3) cplot(f4) cplot(f5) cplot(f6)
参照matlab绘制复变函数的例子,使用python实现绘制复变函数图像,网上还没搜到相关的文章,在这里分享出来供大家学习。
'''
参照matlab绘制复变函数的例子,创建函数cplxgrid,cplxmap,cplxroot
'''
#1.导入相关库
importnumpyasnp
importmatplotlib.pyplotasplt
frommpl_toolkits.mplot3dimport*
#2.创建函数
defcplxgrid(m):
'''Returnpolarcoordinatecomplexgrid.
Parameters
----------
m:int
Returns
----------
z:ndarray,withshape(m+1)-by-(2*(m+1))
'''
m=m
r=np.arange(0,m).reshape(m,1)/m
theta=np.pi*np.arange(-m,m)/m
z=r*np.exp(1j*theta)
returnz
defcplxroot(n=3,m=20):
'''
cplxroot(n):renderstheRiemannsurfaceforthen-throot
cplxroot():renderstheRiemannsurfaceforthecuberoot.
cplxroot(n,m):usesanm-by-mgrid.Defaultm=20.
Usepolarcoordinates,(r,theta).
Usepolarcoordinates,(r,theta).
Parameters
----------
n:n-throot
m:int
Returns
----------
None:PlottheRiemannsurface
'''
m=m+1
r=np.arange(0,m).reshape(m,1)/m
theta=np.pi*np.arange(-n*m,n*m)/m
z=r*np.exp(1j*theta)
s=r*(1/n)*np.exp(1j*theta/n)
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
#ax.plot_surface(np.real(z),np.imag(z),np.real(s),color=np.imag(s))
ax.plot_surface(np.real(z),np.imag(z),np.real(s),cmap=plt.cm.hsv)
ax.set_xlim((-1,1))
ax.set_ylim((-1,1))
ax.set_xlabel('Real')
ax.set_ylabel('Imag')
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
ax.set_autoscalez_on(True)#z轴自动缩放
ax.grid('on')
plt.show()
defcplxmap(z,cfun):
'''
Plotafunctionofacomplexvariable.
Parameters
----------
z:complexplane
cfun:complexfunctiontoplot
Returns
----------
None:Plotthesurfaceofcomplexfunction
'''
blue=0.2
x=np.real(z)
y=np.imag(z)
u=np.real(cfun)
v=np.imag(cfun)
M=np.max(np.max(u))#复变函数实部最大值
m=np.min(np.min(u))#复变函数实部最大值
s=np.ones(z.shape)
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
#投影部分用线框图
surf1=ax.plot_wireframe(x,y,m*s,cmap=plt.cm.hsv)
surf2=ax.plot_surface(x,y,u,cmap=plt.cm.hsv)
#绘制复变函数1/z时会出错,ValueError:AxislimitscannotbeNaNorInf
#ax.set_zlim(m,M)
ax.set_xlim((-1,1))
ax.set_ylim((-1,1))
ax.set_xlabel('Real')
ax.set_ylabel('Imag')
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
ax.set_autoscalez_on(True)#z轴自动缩放
ax.grid('on')
plt.show()
def_test_cplxmap():
'''测试cplxmap函数'''
z=cplxgrid(30)
w1=z
w2=z**3
w3=(z**4-1)**(1/4)
w4=1/z
w5=np.arctan(2*z)
w6=np.sqrt(z)
w=[w1,w2,w3,w4,w5,w6]
foriinw:
cplxmap(z,i)
def_test_cplxroot():
'''测试cplxroot函数'''
cplxroot(n=2)
cplxroot(n=3)
cplxroot(n=4)
cplxroot(n=5)
if__name__=='__main__':
_test_cplxmap()
_test_cplxroot()
以上这篇python/Matplotlib绘制复变函数图像教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。