如何为要使用 python 求解的 ODE 设置时间相关矩阵?

计算科学 Python scipy 数值建模
2021-11-28 02:45:52

我想像这样在python中以数字方式解决问题:

y(t)=M(t)y,y(0)=(1,0,0,0...)

其中是一个维向量,是一个时间相关的矩阵。ynM(t)n×n

矩阵的形状为M(t)

M(t)=[0T1(t)0000T1(t)0T2(t)0000T2(t)0T1(t)0000T1(t)0T2(t)0000T2(t)0T1(t)0000T1(t)0]

或以 numpy/scipy 表示法:

[[0. T1 0. 0. 0. 0.]
 [T1 0. T2 0. 0. 0.]
 [0. T2 0. T1 0. 0.]
 [0. 0. T1 0. T2 0.]
 [0. 0. 0. T2 0. T1]
 [0. 0. 0. 0. T1 0.]]

其中可以是任意时间相关的。T1T2

我的问题是,对于solve_ivppython 中的例程,我需要将的函数放入例程中。我不知道如何在上面创建这个矩阵以便可以使用它。ysolve_ivpM(t)solve_ivp

有人有一些提示或建议吗?

1个回答

避免使用它的结构来构造矩阵呢?

def odefunc(t,u):
    dotu = zeros_like(u)
    T1 = T1func(t)
    T2 = T2func(t)
    dotu[0::2] += T1*u[1::2]
    dotu[1::2] += T1*u[0::2]
    dotu[1:-1:2] += T2*u[2::2]
    dotu[2::2] += T2*u[1:-1:2]
    return dotu

这仅适用于矩阵大小是偶数且不能被 4 整除的情况,例如当前大小为 6。