从系列中:用MATLAB求解ode
ODE23比较2阶和3阶方法来自动选择步长并保持指定的精度。它是最简单的MATLAB求解器,具有自动误差估计和连续插值等现代功能。ODE23适用于精度要求较粗的计算机图形。
实现现代数值方法的软件有两个在ODE4和经典龙格-库塔等代码中不存在的特征。软件中的方法可以估计误差并提供自动步长控制。你不需要指定步长h,你需要指定你想要的精度。这些方法估计了它们前进时的误差,并相应地调整步长。它们提供了一个完全精确的连续插值。它们不只是提供离散点集合的解。它们提供了一个函数,定义了区间内的所有解。所以你可以绘制它,找到函数的零点,提供一个叫做事件处理的工具,等等。
拉里·夏皮恩是常微分方程数值解法方面的权威。他是这本用MATLAB求解ode的教科书的主要作者。他现在是达拉斯南卫理公会大学的名誉教授。他长期担任MathWorks的顾问负责ODE套件的开发。夏皮恩和他的学生Przemyslaw Bogacki在1989年发表了这个方法。它是ODE23的基础,这是我们在MATLAB ODE套件中用到的第一个方法。
基本的方法是三阶。误差估计是基于三阶方法和基础的二阶方法之间的差异。这涉及到四个斜坡。
第一个是函数在区间开始时的值。但这是基于FSAL的,第一步和最后一步一样,斜率很可能是上一步留下的。如果前一步成功,则此函数值与前一步的最后一个函数值相同。
这个斜率被用来进入区间的中间,函数在那里被求值。该斜率用于跨越间隔的3/4步,并在那里获得第三个斜率。然后使用这三个值来执行该步骤。Yn + 1是这三个函数值的线性组合。然后对函数求值以得到在区间结束处的第四个斜率。然后,用这四个斜率来估计误差。
这里的误差估计是yn + 1和另一个从二阶方法得到的解的估计值之间的差值我们实际上没有计算。我们只需要这个方法和yn + 1之间的差值来估计误差。
此估计误差与用户提供的公差进行比较。如果估计的误差小于容差,则该步骤成功。第四个斜率,s4,变成了下一步的s1。
如果答案大于公差,则误差可以作为调整步长的基础。无论哪种情况,误差估计都是为下一步调整步长的基础。这是Bogacki-Shampine Order 3(2)方法,它是ODE 23的基础。
让我们先来看看ODE23的一些非常简单的用法。我要用微分方程y ' = y,所以我要计算e ^ t,在区间0到1上调用ODE23,初始值为1。没有输出参数。如果我叫它ODE23,它只是画出解。在这儿。它只生成一个图。它选择一个步长,从0到1,这里它得到最终值e- 2.7。
如果我提供输出参数。我说t, y = ODE23,它返回的值是t和y, ODE23选择它想要的t的值。这是一个微不足道的问题。它最终选择的步长为0.1。在它启动后,它选择初始步长为.08作为任何容错。y的最终值是2。718,也就是e的值。
这就是ODE23的两个简单用法。如果您不提供任何输出参数,它将绘制一个图形。如果你提供输出参数t和y,它会返回t和y的值,选择t的值来满足误差。默认的容错是10的负3次方。所以这个值精确到3位。这就是我们得到的结果。
现在让我们尝试一些更具挑战性的东西,看看自动错误控制步长选择的实际情况。设a等于1 / 4。然后令y0 = 15.9。如果我把它设为16,也就是1 / a²,我就会遇到一个奇点。微分方程是y ' = 2 (a - t) * y²。我要把它和ODE23在区间0到1上积分,从y0开始,把结果保存在t和y中,然后画出来。这是我的绘图指令,这就是解。
所以在a点有一个近奇点,它几乎爆炸了。然后又稳定下来。所以当你到达奇点时,这些点聚集在一起,然后又回到奇点,但当解稳定下来时,它们之间的距离就会越来越远。ODE求解器可以进行更大的步骤。
为了看看实际采取了什么步骤,让我们计算t的差值,然后画出来。这里是步长。我们可以看到,在奇点0.25附近有一个很小的步长。然后当我们接近区间的末尾时,步长变大了。最后,到达区间尽头的步长作为最后一步。这就是ODE23的自动步长选择。
BS23有一个很好的自然插值,它实际上已经存在了100多年。它叫做埃尔米特立方插值。我们知道两点决定一条直线。两个点和两个斜率决定了一个立方。
在每个区间上都有y和yn + 1。我们还有两个斜率,也就是这个。我们在端点处求导,yn '和yn + 1 '这是微分方程在这两点处的值。这四个值决定了一个经过这两点并有两个斜率的立方。
这个三次函数允许软件计算区间内任意点的解,而不需要函数f的附加计算所定义的额外代价。这可以用来绘制解的图形,平滑的解的图形,找到解的零点,进行事件处理等等。ODE23提供的另一个特性。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。