python/matplotlib 是否只是在没有我提示的情况下在这里绘制复杂方程的实部?

问题描述

我正在分析一些代码,有一个包含虚部和实部的方程,并且在绘制时没有任何关于虚部或实部的提示

import numpy as np
from matplotlib import pyplot as plt
pi = np.pi

k = 2*pi*1e6
k_e = 2*pi*400e3

w_0 = 10.607e9
w_s = np.linspace(8e9,12e9)

S11_Ideal = 1 - (2*k_e)/(k + 2j*(w_s - w_0))
plt.plot(w_s,S11_Ideal)
plt.show()
plt.close()

enter image description here

输出看来,真正的部分正在被绘制。这就是正在发生的事情吗?我只是想确认一下,它只是直接忽略了此处数字的虚部,还是发生了其他事情?

解决方法

我认为当你运行你的代码时它会抛出以下错误:

/usr/local/lib/python3.9/site-packages/numpy/core/_asarray.py:83: ComplexWarning: Casting complex values to real discards the imaginary part
  return array(a,dtype,copy=False,order=order)

此警告来自 plot 命令。 “plot”是指将一个 1d 实数数组放在屏幕上。当它看到一组复数时,它会尽其所能,即丢弃虚部并绘制实部。

您可以分别绘制两个 components。如果您想绘制两个部分,请参阅下面的代码以获取更多详细信息。

import numpy as np
from matplotlib import pyplot as plt
pi = np.pi

k = 2*pi*1e6
k_e = 2*pi*400e3

w_0 = 10.607e9
w_s = np.linspace(8e9,12e9)

S11_Ideal = 1 - (2*k_e)/(k + 2j*(w_s - w_0))
plt.plot(w_s,S11_Ideal.real,'b',label="real")
plt.plot(w_s,S11_Ideal.imag,'r',label="imag")
plt.grid()
plt.legend()
plt.show()

输出图像:

enter image description here

我建议你看看this tutorial