1 / 12
文档名称:

三种方法解决voterra方程.doc

格式:doc   大小:159KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

三种方法解决voterra方程.doc

上传人:511709291 2020/8/19 文件大小:159 KB

下载得到文件列表

三种方法解决voterra方程.doc

相关文档

文档介绍

文档介绍:东南大学电气工程学院MATLAB数学建模实验报告三种方法解析Volterra方程刘海东(16006213)2008/12/13实验目的:通过MATLAB实现书上含初值一阶Volterra方程组的解析,在解析过程之中注意加深对三种方法:向前欧拉公式、改进的欧拉公式和四阶龙格-库塔公式的理解,注意各个方法的细节和精度比较。进一步熟悉MATLAB编程。实验原理:在数学建模理论课上,,并用相平面分析法对问题作了简要分析。,学习了欧拉方法和龙格-库塔方法,:为了跟书上的解析图相对应,我选取区间;步长=。向前欧拉公式(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:functionVolterra1 %定义函数;display('步长为:'); %显示步长;h=,k=1;t=0;xx1(1)=25;x1(1)=25;xx2(1)=2;x2(1)=2; %赋予初值;fort=:h:15; %进入150次循环;x1(k+1)=x1(k)+h*x1(k)*(1-*x2(k));x2(k+1)=x2(k)+h*x2(k)*(*x1(k)-); %代入向前欧拉公式;k=k+1;ift<=2xx1(k)=x1(k);xx2(k)=x2(k);end %方便前21对数值的输出endt=0::15;xx1xx2 %显示t在[0,2]上的x值;plot(t,x1,'x',t,x2,'x'); %描出全部的点值;holdonp=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:functionVolterra2 %定义函数;display('步长为:'); %显示步长;h=,k=1;t=0;xx1(1)=25;x1(1)=25;xx2(1)=2;x2(1)=2; %赋予初值;fort=:h:15; %进入150次循环;x11=x1(k)+h*x1(k)*(1-*x2(k));x21=x2(k)+h*x2(k)*(*x1(k)-);x1(k+1)=x1(k)+h*(x1(k)*(1-*x2(k))+x11*(1-*x21))/2;x2(k+1)=x2(k)+h*(x2(k)*(*x1(k)-)+x21*(*x11-))/2; %代入改进欧拉公式;k=k+1;ift<=2xx1(k)=x1(k);xx2(k)=x2(k);end %方便21对数值的输出;endt=0::15;xx1xx2 %显示t在[0,