在Python中合并两个势能

1 投票
2 回答
766 浏览
提问于 2025-04-16 12:20

我需要在Python中定义一个势能。这个势能是一个无限方井势能,中间有一个势能障碍。

对于这个障碍,我有以下代码:

    V_x = zeros([Npts],float)
for i in range(0,Npts,1):
    if x[i] > 0 and x[i]<width:
        V_x[i]=v0

Npts是x的长度,而x被定义为从xmin到xmax的一个递增值数组(x=arange(Xmin,Xmax+0.001,dx))。

我该如何把这个无限势能包含进去呢?

它有一定的长度(比如从-100到100),并且必须像一堵不可穿透的墙一样(在-100和100的函数值必须为零)。

我可以把这个障碍和无限势能分开组合(例如,V_b代表障碍的势能,V_p代表无限势能,然后V_x可以表示为V_x=V_b+V_p)。

你觉得这样可行吗?我在定义这个无限势能时遇到了问题……

2 个回答

0

Numpy有一个叫做Inf的浮点变量,这意味着在你使用这个变量的时候,可以明确地定义它。

import numpy as np
Npts = 100
v0 = 10.0
V_x = v0*np.ones((Npts,),dtype=float)
x = np.linspace(-20,20,Npts)
width = 15.0
# now replace those values for the potential in the impenetrable
# region with np.Inf 
ii = ((x>width) | (x<0)).nonzero()
V_x[ii] = np.Inf

这样你就可以得到一个系统,其中x的范围在-20到20之间。当x在0到15之间时,V_x的值是v0;而当x大于15或者小于0时,V_x的值就是Inf。

注意:一般来说,还有一些更高效的方法来设置numpy数组,而不是像上面代码那样使用for循环。

1

我建议你给无限势能设置一个比有限势能大几个数量级的数字,差不多3到4倍就可以了。其实把这个数字再调大也没什么太大意义,因为这不会对你计算的状态能量产生太大影响。实际上,当你在解决哈密顿方程时,浮点数的精度会更快地限制你的结果。你只需要把两端设置为“无限”,像这样就可以了:V_x[0] = V_x[-1] = abs(v0)*10**4。当然,如果你想设置得更大也可以,但我觉得这不会有太大区别。如果你不把两端设置为无限,那你为什么还要在你知道波函数为零的区域里计算波函数的值呢?

另外,要注意你的无限势能不要和h-bar^2/2/m/delta_x^2在你使用的单位下差不多大。总之,确保你的“无限”势能比有限势能和哈密顿方程中的动能项大几个数量级。

撰写回答