资源描述:
《常微分方程数值解法课程设计报告1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数值分析课程设计题目:常微分方程的数值解法组员:邓全飞201120320105许曦201120320108熊鲁平201120320203余佳明201120320206专业:信息与计算科学指导老师:刘唐伟一、摘要3二、设计目的3三、理论基础31.欧拉公式【3】32.改进Euler方法【3】33.三阶龙格-库塔方法【3】34.四阶龙格-库塔方法【3】4四、程序代码及运算结果41、用欧拉法求解52、用改进欧拉法求解:63、用3阶龙格—库塔求解74、用4阶龙格—库塔求解96、欧拉方法与改进欧拉方法、3阶龙格-库塔法以
2、及4阶龙格-库塔法得出的解得比较。10五、数值分析设计的GUI界面13六、结果分析14七、设计心得14八、参考文献14一、摘要在matlab环境下熟悉的运用计算机编程语言并结合龙格-库塔法的理论基础对常微分方程初值问题进行求解,在运行完程序后以及对运行结果做出各方面的分析和比较。二、设计目的用熟悉的计算机语言编程上机完成用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题。三、理论基础1.欧拉公式【3】在点将作Taylor展开,得,那么当h充分小时,略去误差项,用近似替代、近似
3、替代,并注意到,便得上述方法称为Euler方法。2.改进Euler方法【3】在应用梯形方法的迭代公式进行运算时,每迭代一次都要重新计算函数的值,且还要判断何时可以终止或转下一步计算。为了控制计算量和简化算法,通常只迭代一次就转入下一步计算。具体说,我们先用Euler公式求得一个初步的近似值,称之为预测值,然后用梯形方法的迭代公式作一次迭代得,即将校正一次,这样建立的预测-校正方法称之为改进的Euler方法:预测:,校正:.3.三阶龙格-库塔方法【3】类似前面改进的Euler方法公式的推导方法,将在处作Tayl
4、or展开,然后再将在处作Taylor展开,只要将两个展开式前四项相同便有。于是得到三阶龙格-库塔公式为:4.四阶龙格-库塔方法【3】类似前面三阶龙格-库塔的推导方法,如果每步计算四次函数f(x,y)的值,完全类似的,可以导出局部截断误差为的四阶龙格-库塔公式,其公式为:四、程序代码及运算结果用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题:精确解为:y0=[-2.0000-1.9802-1.9231-1.8349-1.7241-1.6000-1.4706-1.3423-1.
5、2195-1.1050-1.0000]精确解图形1、用欧拉法求解程序如下:建立函数文件cwfa1.mfunction[x,y]=cwfa1(fun,x_span,y0,h)x=x_span(1):h:x_span(2);y(1)=y0;forn=1:length(x)-1y(n+1)=y(n)+h*feval(fun,x(n),y(n));endx=x';y=y';在MATLAB输入以下程序:>>clearall>>fun=inline('y^2*x');>>[x,y]=cwfa1(fun,[0,1],-2,
6、0.1);>>[x,y]>>plot(x,y,'r+-')ans=0-2.00000.1000-2.00000.2000-1.96000.3000-1.88320.4000-1.77680.5000-1.65050.6000-1.51430.7000-1.37670.8000-1.24400.9000-1.12021.0000-1.0073结果及其图象:图1欧拉法解2、用改进欧拉法求解:程序如下:建立函数文件cwfa2.mfunction[x,y]=cwfa2(fun,x_span,y0,h)x=x_span
7、(1):h:x_span(2);y(1)=y0;forn=1:length(x)-1k1=feval(fun,x(n),y(n));y(n+1)=y(n)+h*k1;k2=feval(fun,x(n+1),y(n+1));y(n+1)=y(n)+h*(k1+k2)/2;endx=x';y=y';在MATLAB输入以下程序:>>clearall>>fun=inline('y^2*x');>>[x,y]=cwfa2(fun,[0,1],-2,0.1);>>[x,y]>>plot(x,y,'r+-')ans=0-2
8、.00000.1000-1.98000.2000-1.92270.3000-1.83450.4000-1.72390.5000-1.60010.6000-1.47110.7000-1.34320.8000-1.22080.9000-1.10661.0000-1.0018结果及其图像:图3改进欧拉解3、用3阶龙格—库塔求解程序如下:建立函数文件cwfa4.mfunction[x,y]=cwfa4(fu