Numpy:如何在循环数组上循环计算?

时间:2017-07-13 16:58:00

标签: python numpy physics

我是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

0 个答案:

没有答案