从系列:在MATLAB中求解ode
Moller,Mathworks
ODE2实现了一个中点方法,每个步骤有两个函数计算。这种方法的精确度是欧拉法的两倍。一个定义正弦函数的非线性方程提供了一个例子。练习包括实现相关的梯形方法。
通过每步评估函数F的次数来测量求解常微分方程的数值方法的成本。Euler的方法每步评估F一次性。这是一种新方法,每步评估两次。如果在步骤开始时评估了F的一次,则给出斜率S1,然后S1用于在间隔中间中途采用Euler的步骤,在间隔的中间评估该功能以给出斜率S2。然后S2用于采取步骤。出于显而易见的原因,这被称为中点方法。
这是ode2。它实现了中点方法,每步评估两次函数。该结构与ODE1相同。相同的参数,对于循环相同,但现在我们在步骤开始时有S1,S2在步骤的中间,然后实际上采用S2。
这是一个涉及Trig函数的示例。Dy DT是1,减去y平方的平方根。从0到0到pi的时间间隔到2.现在,因为我打电话给它一个三角形的例子,你可能只是一个可分离的方程式 - 做到积分,或者你可以猜测 -- 猜测答案是正弦的。因为正弦T的衍生物是T的余弦,这是一个y平方的平方根。
我们来设置一下。F是匿名函数√(1 - y²)T0是0。让h = / 32。tfinal是/ 2。y0 = 0。这是我对ode2的调用,有这五个参数,它产生这个输出。
现在我要把它画出来。让我们一起去吧。这是作为列向量的t值,我们画出来。并在情节上做一些注释。这是我们的阴谋。这是sin t的图像,由ode2生成的点。
现在我忍不住要去看看这些答案。这个应该是sint的值,这个应该在/ 2处达到1。我们有0.997。这给了你们一个粗略的概念,我们从这个粗略的数值方法中得到了什么样的精度。
让我们看一下中点方法的动画。微分方程是y ' = 2y,从t0 = 0开始,步长为1,一直到3,从y0 = 10开始,使用ode2。这是动画。这是t0和y0。求函数在y处的值。2乘以y0等于20,经过这个斜率的一半,得到20。求这个函数的值,斜率是40,所以我们以斜率为40的级数穿过这个区间一直到50。
这是第一步。现在我们将重新缩放绘图窗口。这里是50。对函数求值。斜率是100,走到一半,到区间的中间,在这里求函数值。斜率是200,所以斜率为200的步数是250。这是第二步。重新缩放绘图窗口。对函数求值。斜率是500。 Take that step halfway across the interval, evaluate the slope there. The slope is 1,000, so we take a step with slope of 1,000 to get up to 1,250 as our final value.
因为这是一个y的快速增长函数,我们用中点法得到的值远远大于我们用ode1得到的欧拉法得到的值。
这是一项运动。修改ODE2,创建ode2t,它实现了伴随方法,梯形方法。评估间隔开头以获得S1的函数。使用S1横跨间隔。评估间隔右侧端点的功能以获得S2。然后,使用S1和S2的平均值来实现步骤。这是梯形方法。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。