并行算法3-4阶龙格库塔法
function x=x0; y=y0; n=fix((b-x0)/h); i=1;X=zeros(n,1);Y=zeros(n,1); X(i)=x0;Y(i)=y0; for i=2:n k1=feval(funfcn,x,y); k2=feval(funfcn,x+h/2,y+h*k1/2); k3=feval(funfcn,x+h,y-h*k1+2*h*k2); y=y+h/6*(k1+4*k2+k3); Y(i)=y; x=x+h; X(i)=x; end X, Y1=sqrt(1+2.*X) grid legend('?????¡Á?¨²?????????¡§????????????','??????y(x)');%???????¡Â wcha=abs(Y-Y1), plot(X,wcha,'mh') %»æÍ¼ grid %?????? %¡ã????¨²??-???????¡§?????¨®?? %?????? %?¨®???? [X,Y]=Rungek(funfcn,x0,b,y0,h)
6、教师评语及评分
%Çú¸ñ-¿âËþ·½·¨½øÐÐÇó½â
legend('ÓÃËĽ×Áú¸ç¿âËþ·½·¨¼ÆËãµÄÊýÖµ½â','¾«È·½ây(x)');%ͼÐÎ˵Ã÷ plot(X,Y,'*',X,Y1,'o') ; wcha=abs(Y-Y1), plot(X,wcha,'mh') %»æÍ¼ grid %»æÍ¼
表 1. R-K 格式的数值结果
xn
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 3、详细设计
三阶 R-K 格式 1.0954 1.1832 1.2649 1.3416 1.4142 1.4833 1.5492 1.6125 1.6734 1.7321
四阶 R-K 格式 1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.5492 1.6125 1.6733 1.7321
将其命名为:t3_Rungek.m
在编辑窗口输入下列程序段,然后执行该程序 x0=0,b=1.1;y0=1;h=0.1;[X,Y]=t3_Rungek(@funfcn,x0,b,y0,h) 四阶龙格—库塔公式的Matlab程序代码:
function x=x0; y=y0;
[X,Y]=Rungek(funfcn,x0,b,y0,h)
K1 f ( xn , yn ) K 2 f ( xn h , yn h K1 ) 2 2 h h K 3 f ( xn , yn K 2 ) 2 2 K 4 f ( xn h, yn hK 3 ) yn 1 yn h ( K1 2 K 2 2 K 3 K 4 ) 6
K1 f ( xn , yn ) K 2 f ( xn h , yn h K1 ) 2 2 K 3 f ( xn h, yn hK1 2hK 2 ) h yn 1 yn ( K1 4 K 2 K 3 ) 6
和四阶 Rugge-Kutta 格式
程序代码,取步长 h 0.1 ,分别计算下列常微分方程从 x 0 到 x 1 的数值解,将计算结 果列于表 1,并绘制误差对比图,给出相应的结论。
y ' y 2x / y y (0) 1
(0 x 1)
准确解 y 1 2 x ,步长取 h 0.1 。
微分方程数值解实验报告
实验序号:2 班级 实验名称 实验所用软件及版本 xxxxx 姓名 Maltab2008 xxxxxx Rugge-Kutta 格式 日期:xxx 年 xx 月 xxx 日 学号 xxxxxxxx
1、实验目的 进一步理解 Rugge-Kutta 格式的设计思路和算法流程,培养动手实践能力和分析能力。 2、实验内容 编写三阶 Rugge-Kutta 格式
准确解 y ( xn ) 1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.5492 1.6125 1.6733 1.7321
函数运行时需要调用下列函数:
建立 M 文件 funfcn.m function z=fun(x,y) z=y-2*x/y;
三阶龙格—库塔公式的Matlab程序代码:
在编辑窗口输入下列程序段,然后执行该程序
x0=0,b=1.1;y0=1;h=0.1;[X,Y]=Rungek(@funfcn,x0,b,y0,h)
4、实验结果与分析
三阶龙哥库塔法和精确解对比
四阶龙哥库塔法和精确解对比
三阶龙哥库塔法和精确解对比
wcha =1.0e-004 * wcha X wc ha
n=fix((b-x0)/h); i=1;X=zeros(n,1);Y=zeros(n,1); X(i)=x0;Y(i)=y0; for i=2:n k1=feval(funfcn,x,y); k2=feval(funfcn,x+h/2,y+h*k1/2); k3=feval(funfcn,x+h/2,y+h*k2/2); k4=feval(funfcn,x+h,y+h*k3); y=y+h/6*(k1+2*k2+2*k3+k4); Y(i)=y; x=x+h; X(i)=x; end X, Y1=sqrt(1+2.*X) grid %¾«È·½â
0.1 0.0055 0.2 0.0105 0.3 0.0373 0.4 0.0712 0.5 0.1111 0.6 0.1573 0.7 0.2105 0.8 0.2721 0.9 0.3439 1 0.4279
四阶龙哥库塔法和精确解对比
wcha =1.0e-005 * wcha X wcha
0.0417 0.0789 0.1164 0.1567 0.2016 0.2525 0.3114 0.3800 0.4606 0.5558 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
5、实验总结 1、本次实验实现了常微分方程初值问题数值解法中的三阶、四阶龙哥库塔法 2、 通过实验发现龙哥库塔法比欧拉方法、 后退的欧拉方法及其改进的算法精确度更高。 3、比较了其数值解与精确解之间的误差。可以发现无论是三阶还是四阶龙哥库塔法 都非常接近精确解,但四阶龙哥库塔法比三阶龙哥库塔法更精确。