使用 fdm 的隐式 odes 解决方案

计算科学 非线性方程 时间积分
2021-12-17 17:16:13

我正在使用有限差分法解决非线性二阶隐式初始值问题,但我的结果不收敛。请用一个例子指导我,我们如何才能高精度地应用有限差分法。问题是使用 fdm,时间可以从 0 到 2 分钟。A、B 和 C 是常数。

(A+By(t)C(y(t))1/3)y(t)=(By(t)2+C),y(t=0)=0,

2个回答

由于您有二阶 ODE,您必须提供 2 个初始条件,例如:

(1)y(0)=y0y(0)=y0

您可以做的一件事是转换原始二阶方程: 到一阶 ODE 系统 初始条件:

(2)(A+ByCy1/3)y=(By2+C)
(3){v=Bv2+CA+ByCv1/3y=v
v(0)=y0y(0)=y0

系统可以放入一个通用向量方程: 是 for and and因此: (2)x=[x1,x2]Tx1=vx2=yf=[Bv2+CA+ByCv1/3,v]T

dxdt=f(x)

Yu 可以使用任何支持刚性方程的 ODE 求解器(隐式数值方法)通过 matlab 轻松求解。

您还必须指定要使用的方案。

假设您要使用简单的 Backward-Euler (BE) 方案。对于 BE 方案,您的控制方程变为

(1)(A+Byn+1C(yn+1)1/3)yn+1=(B(yn+1)2+C) with (2)yn+1=yn+1ynΔt

(3)yn+1=yn+1ynΔt

使用 (3) 中的 (2), (4)yn+1=1Δt2[yn+1yn]ynΔt

现在,使用 (1) 中的 (2) 和 (4),您将得到如下形式的非线性方程

(5)f(yn,yn,yn+1)=0 可以使用迭代方案求解,例如 Newton-Raphson 方案。得到后,您可以分别从 (2) 和 (4) 计算速度和加速度。yn+1yn+1

您可以对其他方案遵循相同的过程。对于不同的方案,等式 (1)、(2)、(3) 和 (4) 将有所不同。