python abs函数能否求复数模_python画图遇到复数值数据时应该用numpy.abs()函数还是numpy.real()函数...

在Python中,当使用matplotlib画图遇到复数值数据时,直接使用复数会导致警告。文章通过示例解释了在画图时,应使用numpy.abs()函数获取复数的模长来保持原函数特性,而np.real()则会丢弃虚部,仅显示实部。通过举例np.exp(1j * x),展示了如何正确绘制e^{ix}的图像,强调了np.abs(f)用于得到单位圆的正确性。
摘要由CSDN通过智能技术生成

总是感觉搞懂了画图,然而每次遇到复数值的时候都感觉思路不是很清晰,比如,我们想要做函数numpy.exp(1j * x)的图像,我们可以看到此时当我们带入x值进入后会得到复数值。如果我们直接用该复数值作图就会遇到警告信息提示,代码如下:

import numpy as np

import matplotlib.pyplot as plt

vertex = np.pi

x = np.linspace(-vertex, vertex, 100)

f = np.exp(1j * x)

plt.figure()

plt.plot(x, f)

plt.show()

"""

ComplexWarning: Casting complex values to real discards the imaginary part

return array(a, dtype, copy=False, order=order)

"""

我们可以看到提示信息说我们因为使用的是复数,所以自动丢弃了虚数部分,仅仅保留了实数部分,上述代码我们此时可以通过添加np.real()函数来消除这个警告信息。从这里我们也可以得出,matplotlib模块的画图命令要求输入参数应该为实数。

import numpy as np

import matplotlib.pyplot as plt

vertex = np.pi

x = np.linspace(-vertex, vertex, 100)

f = np.exp(1j * x)

plt.figure()

plt.plot(x, np.real(f))

plt.show()

此时我们消除了警告提示信息,并且成功输出了如下图像。  不难看出这实际上是一个余弦函数,因为我们知道欧拉公式:

e

i

x

=

c

o

s

(

x

)

+

i

s

i

n

(

x

)

e^{ix}=cos(x) + isin(x)

eix=cos(x)+isin(x) 这里cos(x)是实部,sin(x)是虚部,因此当我们使用np.real(f)时,实际上我们去掉了sin(x)的部分,此时的e^{ix}函数实际变为了cos(x) 。最终不难看出,我们实际得到的图像也是cos(x) 的图像。 那么怎样才能得到e^{ix}函数的图像呢,答案是使用np.abs(f).代码如下:

import numpy as np

import matplotlib.pyplot as plt

vertex = np.pi

x = np.linspace(-vertex, vertex, 100)

f = np.exp(1j * x)

plt.figure()

plt.plot(x, np.abs(f))

plt.show()

可以看到我们最后获得的结果为一条恒为1的直线,这很好理解,e^{ix}图像实际上为一个单位圆,所以它本身的长度,即值恒等于1。由此我们可以得到结论,画图时,如果图像输入参数值为复数,我们想要得到原本函数图像,应该使用np.abs()函数对图像输入参数值进行处理而不是使用np.real()函数。

如果对复数还存在问题,可以继续查看这篇python复数基础(超链接,点击跳转)。

码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值