谁说Python只能处理冷冰冰的数字?用它来“画”复数,简直就是艺术!别怕,没有你想象的那么难,只需要一点点想象力,和Matplotlib这个强大的绘图工具。今天就来聊聊,怎么用Python把那些神秘的复数,变成一张张鲜活的图画。
首先,咱们得知道复数是什么玩意儿。简单说,它就是由实部和虚部组成的,就像 3 + 4j
这样的东西。其中,3
是实部,4
是虚部,而 j
代表虚数单位,也就是根号-1。 画复数,其实就是把它们在复平面上表示出来。复平面?听起来很高大上,实际上就是横轴代表实部,纵轴代表虚部的坐标系。所以,3 + 4j
就可以看作是复平面上的一个点,坐标是 (3, 4)。
好了,理论知识铺垫完毕,接下来就是激动人心的代码环节了!
“`python
import matplotlib.pyplot as plt
import numpy as np
一些要绘制的复数
complex_numbers = [3 + 4j, 1 – 2j, -2 + 3j, -1 – 1j, 2 + 0j, 0 + 2j]
提取实部和虚部
real_parts = [z.real for z in complex_numbers]
imag_parts = [z.imag for z in complex_numbers]
创建一个图形和坐标轴
fig, ax = plt.subplots()
绘制复数点
ax.scatter(real_parts, imag_parts)
添加标签和标题
ax.set_xlabel(‘Real Part’)
ax.set_ylabel(‘Imaginary Part’)
ax.set_title(‘Complex Numbers in the Complex Plane’)
添加网格线,让图更清晰
ax.grid(True)
为了更好看,调整坐标轴范围
max_val = max(max(abs(r), abs(i)) for r, i in zip(real_parts, imag_parts))
ax.set_xlim([-max_val – 1, max_val + 1])
ax.set_ylim([-max_val – 1, max_val + 1])
添加坐标轴箭头,更专业
ax.annotate(”, xy=(1, 0), xycoords=’axes fraction’, xytext=(0, 0), arrowprops=dict(arrowstyle=’->’))
ax.annotate(”, xy=(0, 1), xycoords=’axes fraction’, xytext=(0, 0), arrowprops=dict(arrowstyle=’->’))
添加每个点的标签,方便识别
for i, z in enumerate(complex_numbers):
ax.annotate(f'{z.real:.1f}+{z.imag:.1f}j’, (real_parts[i], imag_parts[i]), textcoords=”offset points”, xytext=(5,5), ha=’center’)
显示图形
plt.show()
“`
这段代码,我可是花了心思的!首先,它定义了一组复数,然后提取它们的实部和虚部。接着,用 Matplotlib 的 scatter
函数,把这些点画在复平面上。最后,还加了一些修饰,比如标签、标题、网格线和坐标轴箭头,让图形看起来更清晰、更专业。哦,对了,我还添加了每个点的标签,这样就能清楚地知道每个点代表哪个复数了。
运行这段代码,你就能看到一张漂亮的复平面图,上面标着几个复数点。是不是感觉复数一下子变得生动起来了?
但这还只是开始!复数能玩的花样多着呢。比如说,你可以用颜色或者大小来表示复数的模长(也就是到原点的距离)或者辐角(也就是与实轴的夹角)。
“`python
import matplotlib.pyplot as plt
import numpy as np
一些要绘制的复数
complex_numbers = [3 + 4j, 1 – 2j, -2 + 3j, -1 – 1j, 2 + 0j, 0 + 2j]
提取实部和虚部
real_parts = [z.real for z in complex_numbers]
imag_parts = [z.imag for z in complex_numbers]
计算模长和辐角
magnitudes = [abs(z) for z in complex_numbers]
angles = [np.arctan2(z.imag, z.real) for z in complex_numbers]
创建一个图形和坐标轴
fig, ax = plt.subplots()
绘制复数点,用颜色表示辐角,用大小表示模长
scatter = ax.scatter(real_parts, imag_parts, c=angles, s=[m * 50 for m in magnitudes], cmap=’hsv’)
添加标签和标题
ax.set_xlabel(‘Real Part’)
ax.set_ylabel(‘Imaginary Part’)
ax.set_title(‘Complex Numbers in the Complex Plane (Color=Angle, Size=Magnitude)’)
添加网格线
ax.grid(True)
调整坐标轴范围
max_val = max(max(abs(r), abs(i)) for r, i in zip(real_parts, imag_parts))
ax.set_xlim([-max_val – 1, max_val + 1])
ax.set_ylim([-max_val – 1, max_val + 1])
添加坐标轴箭头
ax.annotate(”, xy=(1, 0), xycoords=’axes fraction’, xytext=(0, 0), arrowprops=dict(arrowstyle=’->’))
ax.annotate(”, xy=(0, 1), xycoords=’axes fraction’, xytext=(0, 0), arrowprops=dict(arrowstyle=’->’))
添加颜色条,解释颜色和辐角的关系
cbar = fig.colorbar(scatter)
cbar.set_label(‘Angle (radians)’)
显示图形
plt.show()
“`
这段代码,我在之前的基础上做了改进。我计算了每个复数的模长和辐角,然后用 scatter
函数的 c
参数来控制颜色,用 s
参数来控制大小。我还选择了一个名为 hsv
的颜色映射,让辐角和颜色之间有一个比较直观的对应关系。运行这段代码,你会看到一张五彩斑斓的复平面图,每个点的大小和颜色都代表着不同的信息。是不是更酷了?
更有意思的是,你可以用Python来可视化复变函数!复变函数是什么?你可以简单地理解为输入是复数,输出也是复数的函数。比如,f(z) = z^2
就是一个复变函数。要可视化它,你可以先把复平面划分成很多个小格子,然后对每个格子里的点,计算它的函数值,再把函数值用颜色或者其他方式表示出来。
“`python
import matplotlib.pyplot as plt
import numpy as np
定义复变函数
def f(z):
return z**2
创建一个网格
x, y = np.meshgrid(np.linspace(-2, 2, 200), np.linspace(-2, 2, 200))
z = x + y * 1j # 创建复数网格
计算函数值
w = f(z)
绘制函数值的模长
plt.imshow(np.abs(w), extent=[-2, 2, -2, 2], origin=’lower’, cmap=’viridis’)
plt.colorbar(label=’Magnitude’)
plt.xlabel(‘Real’)
plt.ylabel(‘Imaginary’)
plt.title(‘Magnitude of f(z) = z^2’)
plt.show()
绘制函数值的辐角
plt.imshow(np.angle(w), extent=[-2, 2, -2, 2], origin=’lower’, cmap=’hsv’)
plt.colorbar(label=’Angle (radians)’)
plt.xlabel(‘Real’)
plt.ylabel(‘Imaginary’)
plt.title(‘Angle of f(z) = z^2’)
plt.show()
“`
这段代码,首先定义了一个复变函数 f(z) = z^2
。然后,它创建了一个复数网格,计算了每个格点的函数值。最后,用 imshow
函数把函数值的模长和辐角分别用颜色表示出来。运行这段代码,你会看到两张非常漂亮的图,一张表示模长的分布,另一张表示辐角的分布。通过这些图,你可以直观地了解复变函数的性质。
当然,这只是Python画复数的冰山一角。你可以用Python来画更复杂的复变函数,可以研究复数的变换,甚至可以用复数来生成各种各样的艺术图案。只要你有想象力,Python就能帮你实现。
所以,下次再看到复数,别再觉得它枯燥乏味了。用Python把它画出来,你会发现,它其实是一个充满魅力和创造力的数学对象!
评论(0)