三种方法解决voterra方程.docVIP

  • 1
  • 0
  • 约4.97千字
  • 约 11页
  • 2021-08-05 发布于广东
  • 举报
The Standardization Office was revised on the afternoon of December 13, 2020 The Standardization Office was revised on the afternoon of December 13, 2020 三种方法解决voterra方程 QITI MATLAB数学建模 实验报告 QITI QITI 2008/12/13 实验目的: 通过MATLAB实现书上含初值一阶Volterra方程组的解析,在解析过程之中注意加深对三种方法:向前欧拉公式、改进的欧拉公式和四阶龙格-库塔公式的理解,注意各个方法的细节和精度比较。 进一步熟悉MATLAB编程。 实验原理: 在数学建模理论课上,我们在书上节中介绍了Volterra模型,并用相平面分析法对问题作了简要分析。随后我们又在节中学习到了常微分方程数值解,学习了欧拉方法和龙格-库塔方法,所以我们尝试借助节中的数值方法来考虑如下Volterra方程: 为了跟书上的解析图相对应,我选取区间;步长=。 向前欧拉公式(1阶精度): 我们先根据步长将区间分为150等分,在其中任一区间[]上()取对应左端点的和作为递推和的初值,将其带入到向前欧拉公式组得到如下方程组: 这样,我们就可以根据初值层层递推出对应后面150个t值的x值。 具体在MATLAB中的实现过程:首先将各自初值赋予初始变量,并将步长输入。根据步长,在取定循环值t=::15形成一个150次的循环,循环过程为:根据上面方程组的前两行带入初值求解下一次数值,然后将下次数值作为初值不停迭代下去,即得到150个要求的值。因为总数据太过庞大,我数据输出只输出了t在[0,2]上的数据,为使结果更为形象直观,我在把全部结果其标注在图形上,并随后进行30阶拟合成Volterra解析曲线。 改进欧拉公式(2阶精度): 为在提高精度的同时不使计算复杂,改进的欧拉公式将向前欧拉公式的简单与梯形公式的高精度结合在一起。它把迭代过程简化成两步:先由向前欧拉公式算出x(k)的预测值,再把预测值代入梯形公式的右端进行校正,得到如下方程组: 分组递推迭代过程跟向前欧拉公式一样。 具体在MATLAB中实现过程也跟向前欧拉公式类似,只不过随着方程的改变而每个循环中间多做了计算而已。 4阶龙格-库塔公式(4阶精度): 由上面两个公式得到启发,取四个点的斜率值作加权平均来作为斜率的近似值,这样我们就提高了精度。所以我们在每一小区间上取四个点构造得到下面4阶龙格-库塔公式: 分组递推迭代过程同上。 而在MATLAB中实现过程依然和上面类似,只不过相比改进欧拉公式每次循环中计算过程更为复杂而已。 实验源代码: 1)向前欧拉公式函数文件Volterra1: function Volterra1 %定义函数; display(步长为:); %显示步长; h=,k=1;t=0; xx1(1)=25;x1(1)=25; xx2(1)=2;x2(1)=2; %赋予初值; for t=:h:15; %进入150次循环; x1(k+1)=x1(k)+h*x1(k)**x2(k)); x2(k+1)=x2(k)+h*x2(k)**x1(k); %代入向前欧拉公式; k=k+1; if t=2 xx1(k)=x1(k); xx2(k)=x2(k); end %方便前21对数值的输出 end t=0::15; xx1 xx2 %显示t在[0,2]上的x值; plot(t,x1,x,t,x2,x); %描出全部的点值; hold on p=polyfit(t,x1,30); tt=0::15; xx1=polyval(p,tt); p1=polyfit(t,x2,30); xx2=polyval(p1,tt); plot(tt,xx1,-r,tt,xx2,-r); %30阶拟合曲线 xlabel(t);ylabel(x1,x2);title(向前欧拉公式拟合Volterra曲线(30阶)); clear %绘图,清理变量; 2)改进欧拉公式函数文件Volterra2: function Volterra2 %定义函数; display(步长为:); %显示步长; h=,k=1;t=0; xx1(1)=25;x1(1)=25; xx2(1)=2;x2(1)=

文档评论(0)

1亿VIP精品文档

相关文档