text(0,2,'蓝鲸x1'); text(0,1,'磷虾x2'); 第二问的三种方法求解文件: euler方法:
function deuler(n,h) x1=2:h:n;m=max(size(x1)); x2(1)=1; for i=2:m
x2(i)=x2(i-1)+h*fun(x1(i-1),x2(i-1)); end
plot(x1,x2,'-r');
title('蓝鲸和磷虾的数量关系'); xlabel('蓝鲸的数量'); ylabel('磷虾的数量'); 改进的euler方法: function dimpeuler(n,h) x1=2:h:n;m=max(size(x1)); x2(1)=1; for i=2:m
k1=fun(x1(i-1),x2(i-1)); k2=fun(x1(i),x2(i-1)+h*k1); x2(i)=x2(i-1)+h*(k1+k2)/2;
16
end
plot(x1,x2,'-r');
title('蓝鲸和磷虾的数量关系'); xlabel('蓝鲸的数量'); ylabel('磷虾的数量');
经典的4级4阶Runge-Kutta法: function drk4(n,h) x1=2:h:n;m=max(size(x1)); x2(1)=1; for i=2:m
k1=fun(x1(i-1),x2(i-1));
k2=fun(x1(i-1)+h/2,x2(i-1)+h*k1/2); k3=fun(x1(i-1)+h/2,x2(i-1)+h*k2/2); k4=fun(x1(i-1)+h,x2(i-1)+h*k3); x2(i)=x2(i-1)+h*(k1+2*k2+2*k3+k4)/6; end
plot(x1,x2,'-r');
title('蓝鲸和磷虾的数量关系'); xlabel('蓝鲸的数量'); ylabel('磷虾的数量'); 命令窗口输入:
第一问的三个M文件要分别在命令窗口输入:
17
一:euler(200,0.1) 二:impeuler(200,0.1) 三:rk4(200,0.1)
第二问的三个M文件要分别在命令窗口输入: 一:deuler(20,0.1) 二:dimpeuler(200,0.1) 三:drk4(20,0.1) (3) 运行结果: 第一问中的euler方法:
第一问中的改进的euler方法:
18
第一问中的经典的4级4阶Runge-Kutta法:
第二问中的euler方法:
19
第二问中的改进的euler方法:
20