我有下一个一阶微分方程(示例):
dn/dt=A*n; n(0)=28
当A为常数时,可以使用python odeint完美解决。但是我有一个.txt文件中A的不同值数组[不是函数,只是一个值数组]
A = [0.1,0.2,0.3,-0.4,0.7,...,0.0028]
[我希望在每次迭代(或每时每刻t
)中求解ode A是数组中的新值。我的意思是:第一次迭代(或t = 0)-A = 0.1第二次迭代(或t = 1)-A = 0.2,依此类推。
如何使用python odeint做到这一点?
是的,您可以做到这一点,但不能直接在odeint
中使用,因为它没有事件机制,并且您提出的内容需要事件-动作机制。
但是您可以将问题分成多个步骤,在每个步骤odeint
中使用现在带有常量A
的参数,然后最后加入这些步骤。
T = [[0]]
N = [[n0]]
for k in range(len(A)):
t = np.linspan(k,k+1,11);
n = odeint(lambda u,t: A[k]*u, [n0],t)
n0 = n[-1]
T.append(t[1:])
N.append(n[1:])
T = np.concatenate(T)
N = np.concatenate(N)