Euler法,梯形法,RK2,RK4对ODE应用的matlab代码和误差分析及图像输出 |
您所在的位置:网站首页 › matlab定步长ode › Euler法,梯形法,RK2,RK4对ODE应用的matlab代码和误差分析及图像输出 |
一次挺满意的小组合作,记录一下使用的代码和过程。事先声明代码来自chatGPT,由于CSDN上没有找到类似的代码,这也是为以后或许要用到的同学留个资源吧。虽然说代码不是亲自写的,理解还是很容易,顺便注明一些我们走的弯路。 数值方法: 欧拉法: 很容易理解,顺带提一句chatGPT的代码注释真的很强大。 欧拉法调用方法: (我们作业内的ODE是,所以下面的都以这个ODE为例,再顺带提一句,使用matlab解ODE用dsolve就好。) 本来想解释一下,但真没啥解释的...定义函数,初值,区间,步长,调用函数,画图,坐标轴和图名,就这些。 欧拉法输出图像: 欧拉法图像梯形法: 英文是Trapezoidal method,tra pe zo i dal,梯形。 这次tspan是区间,不懂就看下面输入案例。 梯形法调用方法: 梯形法输出图像: 梯形法图像RK2: RK2调用方法: 图不放了,同上(虽然说调用方法也类似,我还是把饼递到嘴边吧)。 RK4: RK4调用方法: 误差分析: 我们做的误差分析是得出原函数在t=1时的值和数值方法逼近的值差的绝对值再取对数,听着有点麻烦啊,写成式子应该是这样:。这里我们将步长设为自变量,从10的-1到-6次方,误差为因变量,这样取对数后,正常的误差分析结果应该是几条斜率不同的直线。 代码: 误差分析图像: 误差分析图像小问答:这里直线的斜率分别为1,2,4,原因是什么? 另外,效果最好的是RK4,我一开始疑惑为什么RK4方法会触底反弹,chatGPT的解释是: 使用RK4方法拟合函数时,有时在步长减小到一个值时,随着步长继续减小,误差反而增大的原因:在RK4方法中,步长的大小会影响拟合精度,通常情况下,减小步长可以提升拟合的精度。然而,当步长继续减小时,误差反而增大的原因在于舍入误差的影响。由于计算机存储浮点数是有限精度的,当步长较小时,函数的微小变化可能会因为精度不足而被忽略,从而导致误差逐渐累积,最终使得计算结果和真实结果之间的差距增大。 我也询问了为什么欧拉法和RK2为什么不会如此,chatGPT解释是: 欧拉法和RK2方法在同样的函数上进行数值积分时,没有出现这种问题的原因是因为它们的计算精度相对较低,误差随着步长的减小而不是增大。欧拉法和RK2方法都是数值积分常用的一阶显式方法,与RK4方法相比,它们的计算复杂度较低,每次迭代只需要使用一次函数导数计算即可。这种简单的计算方式使得它们在处理简单的函数时更加高效。然而,这种高效性也带来了精度的牺牲。相较于RK4方法的四阶精度,欧拉法只有一阶,而RK2方法只有二阶。因此,在进行数值积分时,它们的误差通常较大。 一些踩坑: 之后,我们换了一个新的函数,区间设为0到60。我们一开始想用函数中间的值来对比误差,即y(30),结果搞出一个四不像图像,具体的就不放了。后来在做报告前,我们才发现在误差分析的代码中,我们用了例如y_exact(t_euler(end))的函数。我们将步长,初值,区间和取值全都换为了新的函数,但就是没发现这个...最后作差是将函数中间数值方法的值和原函数末端值比较,当然完全不对了。还是没有完全理解如此简单的代码啊。顺带一提这些迭代的方法,比较函数末端(end)值其实应该是最能显示误差的。 最后看看我们对另一个函数做的误差分析图吧: f = @(t, y) -0.051*(y-24);注意两个误差分析图的斜率哦! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |