复数及其共轭的轮廓绘制
我正在尝试在Python中使用复数绘制等高线图(我使用的是matplotlib和pylab)。
我正在处理关于调和多项式的严格边界,但现在我特别想绘制:
Re(z(bar) - e^(z))= 0
Im(z(bar) - e^z) = 0
我想把它们叠加在一起,绘制成等高线,以便找到它们的零点,从而确定方程z(bar) = e^(z)有多少个解。
有没有人有关于复数等高线绘制的经验?
import numpy as np
from matplotlib import pyplot as plt
x = np.r_[0:10:30j]
y = np.r_[0:10:20j]
X, Y = np.meshgrid(x, y)
Z = X*np.exp(1j*Y) # some arbitrary complex data
def plotit(z, title):
plt.figure()
cs = plt.contour(X,Y,z) # contour() accepts complex values
plt.clabel(cs, inline=1, fontsize=10) # add labels to contours
plt.title(title)
plt.savefig(title+'.png')
plotit(Z, 'real')
plotit(Z.real, 'explicit real')
plotit(Z.imag, 'imaginary')
plt.show()
编辑:上面是我的代码,请注意,对于Z,我需要绘制(x - iy) - e^(x + iy) = 0的实部和虚部。目前的Z只是随便写的。当我尝试插入我的数据时,系统提示我没有二维数组,这让我遇到了错误。
1 个回答
2
我不知道你是怎么绘图的,因为你没有提供任何代码。不过一般来说,我建议你不要使用pylab或者pyplot这类接口来使用matplotlib,直接使用对象的方法会更稳定,而且同样简单。下面是一个在同一张图上绘制两组数据轮廓的例子。
import numpy as np
import matplotlib.pyplot as plt
# making fake data
x = np.linspace(0, 2)
y = np.linspace(0, 2)
c = x[:,np.newaxis] * y
c2 = np.flipud(c)
# plot
fig, ax = plt.subplots(1, 1)
cont1 = ax.contour(x, y, c, colors='b')
cont2 = ax.contour(x, y, c2, colors='r')
cont1.clabel()
cont2.clabel()
plt.show()
对于tom10,这段代码生成的图就是这个样子。注意,把colors
设置为单一颜色会让区分这两条图线变得简单很多。
