我尝试将y创建为一个数组,以创建一个迭代通过zeta的函数,该函数依赖于E,使用for循环。但是,不会将这些值添加到列表中。
我还尝试将变量和数学函数定义为两个不同的编码函数
import cmath
import matplotlib.pyplot as plt
a = 2*10**-15
Vo = 83*10**6
m = 1.6726*10**(-27)
pi = cmath.pi
E = []
E.append(-83*10**6)
hbar = 6.62607015*10**(-34)/ pi
K = 16.032280*10**6
y = []
y.append(51311.18131)
def variables(y, E):
for i in range(1, 83, 1):
alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
zeta = alpha*a
eta = cmath.sqrt(k - zeta**2)
y[i] = zeta*cmath.tan(zeta) - eta
E[i] = E[i-1] + 1
return y, E
print('E = ', E, 'Y = ', y)
plt.plot(E, y)到目前为止,程序应该将y值绘制为Zeta的函数,Zeta随能量而变化。
发布于 2019-10-10 06:56:30
您不需要将循环放在函数中,只需将其放在脚本的顶级即可。并使用y.append()和E.append()添加到这些列表中。
for i in range(1, 83):
alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
zeta = alpha*a
eta = cmath.sqrt(k - zeta**2)
y.append(zeta*cmath.tan(zeta) - eta)
E.append(E[i-1] + 1)发布于 2019-10-10 07:05:04
除了@Barmar的答案之外,您的k变量还需要为K (大写)。
import cmath
import matplotlib.pyplot as plt
a = 2*10**-15
Vo = 83*10**6
m = 1.6726*10**(-27)
pi = cmath.pi
E = [0] * 83
E.append(-83*10**6)
hbar = 6.62607015*10**(-34)/ pi
K = 16.032280*10**6
y = [0] * 83
y.append(51311.18131)
for i in range(1, 83, 1):
alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
zeta = alpha*a
eta = cmath.sqrt(K - zeta**2)
y[i] = zeta*cmath.tan(zeta) - eta
E[i] = E[i-1] + 1
print('E = ', E, 'Y = ', y)
plt.plot(E, y)此外,也不需要使用append,因为有时append并不能很好地处理计算索引查找。首先将y和E列表初始化为循环的长度可能会更好。
https://stackoverflow.com/questions/58313260
复制相似问题