四阶龙格库塔法解微分方程.docx

上传人:b****5 文档编号:5940253 上传时间:2023-01-02 格式:DOCX 页数:8 大小:93.14KB
下载 相关 举报
四阶龙格库塔法解微分方程.docx_第1页
第1页 / 共8页
四阶龙格库塔法解微分方程.docx_第2页
第2页 / 共8页
四阶龙格库塔法解微分方程.docx_第3页
第3页 / 共8页
四阶龙格库塔法解微分方程.docx_第4页
第4页 / 共8页
四阶龙格库塔法解微分方程.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

四阶龙格库塔法解微分方程.docx

《四阶龙格库塔法解微分方程.docx》由会员分享,可在线阅读,更多相关《四阶龙格库塔法解微分方程.docx(8页珍藏版)》请在冰豆网上搜索。

四阶龙格库塔法解微分方程.docx

四阶龙格库塔法解微分方程

四阶龙格库塔法解微分方程

一、四阶龙格库塔法解一阶微分方程

①一阶微分方程:

,初始值y(0)=0,求解区间[010]。

MATLAB程序:

%%%%%%%%%%%四阶龙哥库塔法解一阶微分方程

%%%%%%%%%%%y'=cost

%%%%%%%%%%%y(0)=0,0≤t≤10,h=0.01

%%%%%%%%%%%y=sint

h=0.01;

hf=10;

t=0:

h:

hf;

y=zeros(1,length(t));

y

(1)=0;

F=@(t,y)(cos(t));

fori=1:

(length(t)-1)

k1=F(t(i),y(i));

k2=F(t(i)+h/2,y(i)+k1*h/2);

k3=F(t(i)+h/2,y(i)+k2*h/2);

k4=F(t(i)+h,y(i)+k3*h);

y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4)*h;

end

subplot(211)

plot(t,y,'-')

xlabel('t');

ylabel('y');

title('Approximation');

span=[0,10];

p=y

(1);

[t1,y1]=ode45(F,span,p);

subplot(212)

plot(t1,y1)

xlabel('t');

ylabel('y');

title('Exact');

 

图1

②一阶微分方程:

,初始值x

(1)=2,求解区间[13]。

MATLAB程序:

%%%%%%%%%%%四阶龙哥库塔法解微分方程

%%%%%%%%%%%x'(t)=(t*x-x^2)/t^2

%%%%%%%%%%%x

(1)=2,1≤t≤3,h=1/128

%%%%%%%%%%%精确解:

x(t)=t/(0.5+lnt)

h=1/128;%%%%%步长

tf=3;

t=1:

h:

tf;

x=zeros(1,length(t));

x

(1)=2;%%%%%初始值

F_tx=@(t,x)(t.*x-x.^2)./t.^2;

fori=1:

(length(t)-1)

k_1=F_tx(t(i),x(i));

k_2=F_tx(t(i)+0.5*h,x(i)+0.5*h*k_1);

k_3=F_tx((t(i)+0.5*h),(x(i)+0.5*h*k_2));

k_4=F_tx((t(i)+h),(x(i)+k_3*h));

x(i+1)=x(i)+(1/6)*(k_1+2*k_2+2*k_3+k_4)*h;

end

subplot(211)

plot(t,x,'-');

xlabel('t');

ylabel('x');

legend('Approximation');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%ode45求精确解

t0=t

(1);x0=x

(1);

xspan=[t0tf];

[x_ode45,y_ode45]=ode45(F_tx,xspan,x0);

subplot(212)

plot(x_ode45,y_ode45,'--');

xlabel('t');

ylabel('x');

legend('Exact');

图2

二、四阶龙格库塔法解二阶微分方程

①二阶微分方程:

,初始值y(0)=0,y'(0)=-1,求解区间[010]。

MATLAB程序:

%%%%%%%%%龙格库塔欧拉方法解二阶微分方程

%%%%%%%%%y''=cost

%%%%%%%%%y'(0)=-1,y(0)=0

%%%%%%%%%转换为一阶微分方程

h=0.01;

ht=10;

t=0:

h:

ht;

%%%%%%%%%y'=z1,z1'=y''=cost

y=zeros(1,length(t));

z=zeros(1,length(t));

y

(1)=0;

z

(1)=-1;

f=@(t,y,z)(z);

g=@(t,y,z)(sin(t));

fori=1:

(length(t)-1)

K1=f(t(i),y(i),z(i));

L1=g(t(i),y(i),z(i));

K2=f(t(i)+h/2,y(i)+h/2*K1,z(i)+h/2*L1);

L2=g(t(i)+h/2,y(i)+h/2*K1,z(i)+h/2*L1);

K3=f(t(i)+h/2,y(i)+h/2*K2,z(i)+h/2*L2);

L3=g(t(i)+h/2,y(i)+h/2*K2,z(i)+h/2*L2);

K4=f(t(i)+h,y(i)+h*K3,z(i)+h*L3);

L4=g(t(i)+h,y(i)+h*K3,z(i)+h*L3);

y(i+1)=y(i)+h/6*(K1+2*K2+2*K3+K4);

z(i+1)=z(i)+h/6*(L1+2*L2+2*L3+L4);

end

plot(t,y)

xlabel('t');

ylabel('y');

title('y''=sin(t)');

legend('y''=sint');

 

图3

②二阶微分方程:

,初始值y

(1)=0,y'

(1)=0,求解区间[025]。

MATLAB程序:

%%%%%%%%%龙格库塔欧拉方法解二阶微分方程

%%%%%%%%%y''=7.35499*cosx

%set(0,'RecursionLimit',500)

h=0.01;

a=0;

b=25;

x=a:

h:

b;

RK_y

(1)=0;%初值

RK_z

(1)=0;

fori=1:

length(x)-1

K1=RK_z(i);

L1=rightf_sys1(x(i),RK_y(i),RK_z(i));%K1andL1

K2=RK_z(i)+0.5*h*L1;

L2=rightf_sys1(x(i)+0.5*h,RK_y(i)+0.5*h*K1,RK_z(i)+0.5*h*L1);

K3=RK_z(i)+0.5*h*L2;

L3=rightf_sys1(x(i)+0.5*h,RK_y(i)+0.5*h*K2,RK_z(i)+0.5*h*L2);

K4=RK_z(i)+h*L3;

L4=rightf_sys1(x(i)+h,RK_y(i)+h*K3,RK_z(i)+h*L3);%K4andL4

RK_y(i+1)=RK_y(i)+1/6*h*(K1+2*K2+2*K3+K4);

RK_z(i+1)=RK_z(i)+1/6*h*(L1+2*L2+2*L3+L4);

end

plot(x,RK_y,'b-');

xlabel('Variablex');

ylabel('Variabley');

A=[x,RK_y];

[y,T]=max(RK_y);

legend('RK4方法');

fprintf('角度峰值等于%d',y)%角度的峰值也就是π

fprintf('\n')

fprintf('周期等于%d',T*h)%周期

 

functionw=rightf_sys1(x,y,z)

w=7.35499*cos(y);

end

 

图4

注:

四阶龙格库塔法求解二阶微分方程时,只需把二阶微分方程转化为一阶微分方程,再进行相关求解即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1