从系列:用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值作为列向量,我们画一下。在情节上做些注解。这是我们的阴谋。这是sint的图像,由ode2生成的点。
现在我不得不去看看这些答案。这应该是sint的值,在/ 2处应该是1。我们有0.997。这让你大致了解了我们从这个粗糙的数值方法得到的精度。
让我们看一下中点方法的动画。微分方程是y ' = 2y,从t0 = 0开始步长为1,到3,从y0 = 10开始,使用ode2。这是动画。这是t0和y0。求函数在y0处的值。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国家网站没有针对您所在位置的访问进行优化。
本网站使用cookie来改善您的用户体验,个性化内容和广告,并分析网站流量。通过继续使用本网站,您同意我们使用cookie。请看我们隐私政策要了解有关cookie的更多信息以及如何更改设置。