如何在 MATLAB 中求解边界值 ODE?

计算科学 matlab
2021-12-05 15:03:06

具体来说,ode15i。我有 ode15i 求解具有初始条件的 5 个变量中的 5 个一阶隐式 ode 的系统(由 decic 保持一致)。它非常适合我的需要,除了我还需要添加最终条件。这可能吗?我认为(但不确定)ode15s 也可以。

编辑: -

编辑2:我想我想通了。我将为所有导数创建虚拟变量,添加一堆额外的方程,这应该使方程“显式”,这样我就可以使用 bvp4c。

2个回答

我假设你想解决

f(t,y,y)=0 on (0,T)
具有两点边界值
y(0)=α and y(T)=β.

您不能简单地将 ODE 求解器应用于此问题,除非您采用向前向后迭代的启发式方法(请参见下面的列表)。

这些边值问题没有通用的方法。而且我知道 Matlab 中有任何内置函数可以解决这些边界值问题,即使是y=f~(t,y).

[编辑:有用于解决这些半显式两点边界值问题的 matlab 函数,请参阅 David Ketcheson 的回答,它使用有限差分和搭配。]

所以,我的回答是,您的特定问题没有答案,如何让 Matlab 的 ODE 求解器处理您的问题。

要解决此问题,您有以下选择:

  • 有限差分:离散区间[0,T], 如有必要,进行搭配,并求解得到的代数系统
  • (Multiple) Shooting : 参数化边界条件并求解参数
  • 解耦:拆分变量,使得存在一个初值问题和一个终值问题,即在时间上向后的初值问题。在线性情况下,这通常称为 Riccati 解耦
  • 定点迭代:这是最具启发性的方法。例如,您可以尝试猜测缺失的初始值、时间向前积分、将终值的部分设置为给定值、时间向后积分等等……

这些问题的标准参考书是 Ascher、Mattheij 和 Russell 合着的书:常微分方程边值问题的数值解。但是,那里没有考虑隐含的问题。

以“ode”开头的 MATLAB 例程,如 ode15i,用于解决初始值问题。如果要解决边界值问题,请使用 bvp4c 或 bvp5c。