dy1/dt=-y1 ,dy2/dt=-y3 ,dy3/dt=y2 , 0 ≥ t ≤ 0.2
y1(0)=1 y2(0)=-1 y3(0)=0
步长h=0.01
MATLAB编写程序用四阶龙格库塔法求解常微分方程组,自己写了算的出错,求帮助啊
答案:2 悬赏:30
解决时间 2021-11-11 09:11
- 提问者网友:猖狂醉薇
- 2021-11-10 18:33
最佳答案
- 二级知识专家网友:颜值超标
- 2021-11-10 19:06
[t,x]=rk4(@(t,x)[-x(1),-x(3),x(2)],0,2,[1,-1 0], 0.01)
%函数文件
function [t,x]=rk4(funname,t0,t1,x0,dt)
t=[];
x=[];
while t0
t=[t;t0];
x=[x;x0];
k1=funname(t0,x0);
t0=t0+dt/2;
k2=funname(t0,x0+dt*k1/2);
k3=funname(t0,x0+dt*k2/2);
t0=t0+dt/2;
k4=funname(t0,x0+dt*k3);
x0=x0+dt/6*(k1+2*k2+2*k3+k4);
t=[t;t0];
x=[x;x0];
end
%函数文件
function [t,x]=rk4(funname,t0,t1,x0,dt)
t=[];
x=[];
while t0
x=[x;x0];
k1=funname(t0,x0);
t0=t0+dt/2;
k2=funname(t0,x0+dt*k1/2);
k3=funname(t0,x0+dt*k2/2);
t0=t0+dt/2;
k4=funname(t0,x0+dt*k3);
x0=x0+dt/6*(k1+2*k2+2*k3+k4);
t=[t;t0];
x=[x;x0];
end
全部回答
- 1楼网友:蜜罐小熊
- 2021-11-10 20:40
function [y] = rk45(t,x,f,h)
k1=f(t,x);
k2=f(t+h/2,x+h/2*k1);
k3=f(t+h/2,x+h/2*k2);
k4=f(t+h,x+h*k3);
y=x+h/6*(k1+2*k2+2*k3+k4);
end
以上是4阶龙格库塔法的代码:
自己写函数,存为f.m
function dxdt = f (t,x)
dxdt(1)=exp(x(1)*sin(t))+x(2);
dxdt(2)=exp(x(2)*cos(t))+x(1); % x(1)是你的f,x(2)是你的g
dxdt=dxdt(:);
end
自己给出t0,x0,h的值(初始时间,初值,步长)
如果求t0到t1的轨迹的话:给个例子如下
t0=0;t1=5;h=0.02;x0=[-1;-1];
t=t0:h:t1;x=zeros(length(x0),length(t));x(:,1)=x0;
for j=1:length(t)-1
x(:,j+1)=rk45(t(j),x(:,j),@(t,x) f(t,x),h);
end
plot(t,x(1,:));
hold on;
plot(t,x(2,:),'r');
具体参数自己设置
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯