龙格库塔法RKF45Matlab实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

龙格库塔法RKF45的Matlab实现??

2007-08-1614:03:32|??分类:?\oMatLab/Maple/MathematicaMatLab/Maple/Mat|字号?订阅

4阶5级龙格库塔法用于解一阶微分方程(组),对于高阶微分方程,可以将其转换为一阶微分方程组求解。原程序由John.H.Mathews编写(数值方法matlab版),但只能解微分方程,不能解微分方程组。由LiuLiu@uestc修改,使之能够解微分方程组。该程序精度比matlab自带的ode45更高。

rkf45.m:

function[RtRx]=rkf45(f,tspan,ya,m,tol)

%Input:

%?????????-f??functioncolumnvector

%?????????-tspan[a,b]leftrightpointof[a,b]

%?????????-ya?initialvaluecolumnvector

%?????????-m???initialguessfornumberofsteps

%?????????-tol?tolerance

%Output:

%?????????-Rt?solution:vectorofabscissas

%?????????-Rx?solution:vectorofordinates

%ProgrambyJohn.Mathews,improvedbyliuliu@uestc

iflength(tspan)~=2

???error(lengthofvectortspanmustbe2.);

end

if~isnumeric(tspan)

???error(TSPANshouldbeavectorofintegrationsteps.);

end

if~isnumeric(ya)

???error(Yashouldbeavectorofinitialconditions.);

end

h=diff(tspan);

ifany(sign(h(1))*h=0)

???error(EntriesofTSPANarenotinorder.);

end?

a=tspan(1);

b=tspan(2);

ya=ya(:);

a2=1/4;b2=1/4;a3=3/8;b3=3/32;c3=9/32;a4=12/13;

b4=1932/2197;c4=-7200/2197;d4=7296/2197;a5=1;

b5=439/216;c5=-8;d5=3680/513;e5=-845/4104;a6=1/2;

b6=-8/27;c6=2;d6=-3544/2565;e6=1859/4104;f6=-11/40;

r1=1/360;r3=-128/4275;r4=-2197/75240;r5=1/50;

r6=2/55;n1=25/216;n3=1408/2565;n4=2197/4104;n5=-1/5;

big=1e15;

h=(b-a)/m;

hmin=h/64;%步长自适应范围下限

hmax=64*h;%步长自适应范围上限

max1=200;%迭代次数上限

Y(1,:)=ya;

T(1)=a;

j=1;

%tj=T(1);

br=b-0.00001*abs(b);

while(T(j)b),

?if((T(j)+h)br),h=b-T(j);end

??

?%caculatevaluesofk1...k6,y1...y6

?tj=T(j);

?yj=Y(j,:);

?y1=yj;

?k1=h*feval(f,tj,y1);

?y2=yj+b2*k1;????????????????????????????

?ifbigabs(max(y2))return,end

?k2=h*feval(f,tj+a2*h,y2);

?y3=yj+b3*k1+c3*k2;?????????????????????ifbigabs(max(y3))return,end

?k3=h*feval(f,tj+a3*h,y3);

?y4=yj+b4*k1+c4*k2+d4*k3;??????????????ifbi

文档评论(0)

A~下一站守候 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档