复数及其共轭的轮廓绘制

0 投票
1 回答
1788 浏览
提问于 2025-04-21 05:28

我正在尝试在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设置为单一颜色会让区分这两条图线变得简单很多

实部和虚部的轮廓图

撰写回答