在 Python 中循环以使用给定的初始条件查找其他向量

计算科学 Python
2021-12-15 07:08:15

我的问题与 Python 中的循环有关。

我有原版6大小的向量,F(n,t=0)=[1,0,0,0,0,0]

因此,n-值范围从05.

原始向量的这个输出只是一系列值,例如F(0,0)=1,F(1,0)=0,F(2,0)=0等等...

这涉及到一个公式:

F(n,t+1)=(l+(kn)1)F(n,t)+k(n+1)F(n+1,t)+lF(n1,t)

我会设置n=[0,1,2,3,4,5]t=[0,1,2,3,4,5]

我需要创建一个循环来使用上面的原始条件生成额外的向量。

k=0.05l=0.01是常数

我可以很容易地手动计算,但为了将来扩展到更大的范围nt我需要一个计算机程序。

以下是我对所需内容的想法的开始。对于有 python 编码经验的人来说,这个循环可能是微不足道的。任何帮助表示赞赏。

import numpy as np
import matplotlib.pyplot as plt

#Setting constants
k = 0.05
l = 0.01

t = np.arange(0,5,1)
n = np.arange(0,5,1)

#initial conditions:
F = np.zeros(n)
F0 = (1,0,0,0,0,0)
F[0] = F0

for i in range(t):
    F[i+1] = -(k+(l*n)-1)*F[i]+l*(n+1)*F[i]+k*F[i]
1个回答
import numpy as np

def vectors(max_n,max_t,k=0.05,l=0.01):
    times = np.arange(1,max_t,1) ##exclude t=0, set in initial condition
    indicies = np.arange(0,max_n,1)

    #initial conditions:
    F = np.zeros((max_n,max_t))
    F[0,0] = 1 

    for t in times:
        for n in indicies:
            F[n,t] = -(l+(k*n)-1)*F[n,t-1]
            if n!=max_n-1:
                F[n,t]+=k*(n+1)*F[n+1,t-1]
            if n!=0:
                F[n,t]+=l*F[n-1,t-1]
    return F

print(vectors(6,6).T)

这将使所有长度max_n为 time的向量max_t代码中的最后两个 if 语句是为了避免超出数组的范围。可能有更聪明的方法可以做到这一点,但这种方法在概念上很简单。将它们全部包装在一个函数中将使您能够更快地更改各种参数。