求解大型耦合 ode 系统。(Python)

计算科学 Python
2021-12-22 04:53:40

我这里真的有问题。我还没有找到解决方案。我需要解决的系统类似于这个:(基本思想)

c1=dxdr+y

c2=dydr+x

两个都c1/c2等于0意味着所需的系统是:

dydr=x
dxdr=y

我想解决的 ODE 系统是上面给出的初始值(x0,y0,r0)并且需要为空间解决(r0,rf)

一般来说,c表达式是数量:x,y,dx,dy,r并且更具体

重要我无法解决关于 dx,dy 的问题。虽然这个例子很简单,(2 个变量),但我得到了 12 个变量,而且Expr非常大。

一般来说,我想解决这个系统:

AdXdr+BX=0

其中X是一组变量,A,B是 X 长度的方阵。

有什么例程我可以以这种形式解决它吗?

1个回答

您正在尝试将此矩阵 ODE 系统求解为:

Ax(r)=Bx(r)

在哪里:x(r)=dxdr. 如果A是可逆的:

x(r)=A1Bx(r)

一般的解决方案是:

x(r)=i=1nciexp(λir)ui

在哪里λiui是特征值和特征向量A1B矩阵。这些特征值和特征向量可以通过 SVD 之类的方法轻松提取。ci是取决于您的初始条件的常数x(0). 我不确定你为什么会被卡住,因为正如沃尔夫冈所说,这只是解决 ODE 系统的非常常规的方法。

更新:避免倒置的更便宜的方法A直接地,可能是使用反向欧拉方法来数值求解这个 ODE 系统:

Ax(r+Δr)x(r)Δr=Bx(r+Δr)

要么:

(A+ΔrB)x(r+Δr)=Ax(r)

请注意,要使用所有这些方法,包括直接反转方法A这个数字方案,你必须AB可用的。当你知道时,上面的方程只是一个线性方程x(r)从上一步,你可以解决x(r+Δr)通过使用Python、C、C++ 等中可用的任何线性方程求解器。