我是python和numpy的新手,因为它是我使用的第一个真正的编程语言。 在我开始使用它之前,我只使用Mathematica来完成我的任务,但由于我们现在必须进行数值计算,所以Mathematica不再是正确的使用方法。到目前为止,我真的很喜欢numpy,因为它感觉比Mathematica更轻,更本能。 但现在我已经到了一个地步,我真的无法继续尝试从互联网上获取信息。
所以,我的问题是关于应用于薛定谔方程的Crank-Nicolson方法。抛弃我对常量和矩阵的所有定义,我从一个初始函数开始:
u = np.asarray([
(0 if xx==-L or xx==L else (1/(np.sqrt(np.sqrt(np.pi)*l))))*(np.e**
(1j*k*(xx-y)-(((xx+y)**2)/(2*l**2)))) for xx in x])
在网格x内离散化。 此外:
q = np.zeros((N-1),dtype=complex)
for i in range(N-1):
if i==0:
q[i] = M[i,i+1]/M[i,i]
elif i==N-2:
q[i] = 0
else:
q[i] = M[i,i+1]/(M[i,i]-M[i,i-1]*q[i-1])
还有:
def dot(x):
dot = Mkj.dot(x)
return dot
qq = np.zeros((N-1),dtype=complex)
for i in range(N-1):
if i==0:
qq[i] = dot(u)[i]
else:
qq[i] = ((dot(u)[i]-M[i,i-1]*qq[i-1])/(M[i,i]-M[i,i-1]*q[i-1]))
最后:
v = np.zeros((N-1),dtype=complex)
for i in range(N-1):
if i==N-2:
v[i] = qq[i]
else:
v[i] = qq[i]-q[i]*v[i+1]
这是我一次扩展后的初始功能。
我的问题是我不知道如何在循环输出函数的各个步骤中重复此计算,因为我不知道如何在循环数组上定义函数。
提前致谢, 亲爱的问候,
Streichholzritter