如何避免在函数的绘图中出现此错误?RuntimeWarning:在true\u divide中遇到无效值

2024-05-14 11:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试绘制此函数,但出现以下错误:

python3 Bound_state_energy

绑定状态能量:43:运行时警告:在真除法中遇到无效值 E=-(2hbar**2/meR2)*(Gamma1/Gamma2)(1/abs(m+phi))-hbarOmega(m+phi+s/2)

我知道这个错误已经在其他问题中得到了解决,但我找不到任何类似的情况,所以我仍然没有找到一个对男性有帮助的答案。下面是完整的代码:`

`import numpy as np
from scipy.special import gamma
#np.seterr(divide='ignore', invalid='ignore')
import matplotlib.pyplot as plt
from scipy.constants import pi

#constantes
hbar = 4.135667696e-15/2*pi
m_e =  0.51099895e6
s = -1
R = 5e-9
m = 0
g = 2.0012
phi = np.linspace(0, 1.0, 1000)

# Função que define a energia em função de phi
def energy_bound_state(phi,Omega):
    Gamma1 = gamma(1+abs(m+phi))*(1/2*g*s*phi + abs(m+phi))
    Gamma2 = gamma(1-abs(m+phi))*(1/2*g*s*phi - abs(m+phi))
    E = -(2*hbar**2/m_e*R**2)*(Gamma1/Gamma2)**(1/abs(m+phi)) - hbar*Omega*(m+phi+s/2)
    return E

for Omega in (0.85e9, 0.9e9, 0.95e9, 1.0e9):
    plt.plot(phi, energy_bound_state(phi,Omega))
plt.show()

Tags: importas错误nppltabsenergystate
1条回答
网友
1楼 · 发布于 2024-05-14 11:25:17

在一个数组中有一个零,它被用作除数

np.array([1,2]) / np.array([2,0])

RuntimeWarning: divide by zero encountered in true_divide
>>> array([0.5, inf])

当您试图除以零时,此警告将在numpy中显示

在你的Gamma2中,数组开始

[-0.00000000e+00 -2.00376168e-03 -4.00984947e-03 -6.01827536e-03
 -8.02905135e-03 -1.00421895e-02 -1.20577019e-02 -1.40756008e-02
 -1.60958983e-02 -1.81186067e-02 -2.01437382e-02 -2.21713052e-02
 -2.42013201e-02 -2.62337952e-02 -2.82687432e-02 -3.03061764e-02
 -3.23461076e-02 -3.43885491e-02 -3.64335139e-02 -3.84810145e-02
 -4.05310636e-02 -4.25836743e-02 -4.46388591e-02 -4.66966312e-02

当除以-0时

np.array([2,0]) / np.array([3,-0])
RuntimeWarning: invalid value encountered in true_divide
>>> array([0.66666667, nan])

编辑:

您可以忽略警告

np.seterr(divide='ignore', invalid='ignore')

或者,您可以决定零除发生时输出必须是什么,因此这取决于您希望如何处理此计算。可以在除以零的位置插入一个值,也可以从数组中删除这些值

np.divide(Gamma1, Gamma2, where=Gamma2!=0, out=np.zeros_like(Gamma2)) # Outputs a 0 on zero divide

正如您目前所拥有的,它只是在零除后将空值插入到结果数组中。这些只是警告,因此您的绘图应该仍然有效

查看数据和绘制图表的替代方法:

df = pd.DataFrame()
df.index = phi

for Omega in (0.85e9, 0.9e9, 0.95e9, 1.0e9):
    df[Omega] = energy_bound_state(phi,Omega)

df.plot()

相关问题 更多 >

    热门问题