慢跑者与狗
问题描述
一个慢跑者在平面上沿椭圆以恒定的速率𝒗 = 𝟏跑步,设椭圆方程为:𝒙 = 𝟏𝟎 +
𝟐𝟎𝒄𝒐𝒔(𝒕) , 𝒚 = 𝟐𝟎 + 𝟓𝒔𝒊𝒏(𝒕)。突然有一只狗攻击他,这只狗从原点出发,以恒定速率𝒘跑向慢跑 者,狗的运动方向始终指向慢跑者。分别求出𝒘 = 𝟐𝟎, 𝒘 = 𝟓时狗的运动轨迹。
模型建立
设时刻t慢跑者的坐标为(𝑿(𝒕),𝒀(𝒕)),狗的坐标为(𝒙(𝒕),𝒚(𝒕))。则𝑿 = 𝟏𝟎 + 𝟐𝟎𝒄𝒐𝒔(𝒕), 𝒀 = 𝟐𝟎 + 𝟏𝟓𝒔𝒊𝒏(𝒕),狗从(0,0)出发,建立狗的运动轨迹的参数方程:
由于狗始终对准人,因而狗的速度方向平行于狗与人位置的差向量:
消去𝝀,得
由题意𝑿 = 𝟏𝟎 + 𝟐𝟎𝒄𝒐𝒔 𝒕 , 𝒀 = 𝟐𝟎 + 1𝟓𝒔𝒊𝒏(𝒕) ,狗从(0,0)出发,建立狗的运动轨迹的参数方程:
matlab的解决算法如下:
clc,clear;
% w = 20 时候,狗追赶过程模型图
i = 1;
for tf = 1:3:10
t0=0; options = odeset('reltol', 0.001 ,'abstol', 10^(-6));
[~,y] = ode45(@function1,[t0 tf],[0 0],options);
T = 0:0.05:2*pi; X = 10+20*cos(T); Y = 20+15*sin(T);
subplot(2,2,i);
plot(X,Y,'bo','LineWidth',1.5); hold on;
plot(y(:,1),y(:,2),'r.','Markersize',8)
xlabel('X 坐标'); % 添加x轴信息
ylabel('Y 坐标') % 添加y轴信息
title('狗的速度为20时,人与狗的运动轨迹'); % 添加标题
legend('Human Trace','Dog Trace','Location','best'); % 添加线段标签
i = i+1;
end
其中的函数文件如下:(求解w=5时,只需要将下式对应w=20改为5即可)
function dy = function1(t,y) % 根据模型写微分方程组的函数,w=20
dy=zeros(2,1);
dy(1)= 20 *(10+20*cos(t)-y(1))/sqrt((10+20*cos(t)-y(1))^2 + (20+15*sin(t)-y(2))^2);
dy(2)= 20 *(20+15*sin(t)-y(2))/sqrt((10+20*cos(t)-y(1))^2 + (20+15*sin(t)-y(2))^2);
end
输出结果:
地中海鲨鱼
问题描述
意大利生物学家Ancona曾致力于鱼类种群相互制约关系的研究,他从第一次世界大 战期间,地中海各港口捕获的几种鱼类捕获量百分比的资料中,发现鲨鱼等的比例有明 显增加(见下表),而供其捕食的食用鱼的百分比却明显下降。显然战争使捕鱼量下降, 食用鱼增加,鲨鱼等也随之增加,但为何鲨鱼的比例大幅增加呢?
他无法解释这个现象,于是求助于著名的意大利数学家V.Volterra,希望建立一个 食饵—捕食 系统的数学模型,定量地回答这个问题。
1、符号说明
𝒙𝟏(𝒕)—食饵在𝒕时刻的数量; 𝒙𝟐(𝒕)—捕食者在𝒕时刻的数量;
𝒓𝟏—食饵独立生存时的增长率; 𝒓𝟐—捕食者独自存在时的死亡率;
𝝀𝟏—捕食者掠取食饵的能力; 𝝀𝟐—食饵对捕食者的供养能力;
𝒆—捕获能力系数
2、基本假设
1 食饵由于捕食者的存在使增长率降低,假设降低的程度与捕食者数量成正比;
2 捕食者由于食饵为它提供食物的作用使其死亡率降低或使之增长,假定增长的程度与食饵数量成正比。
3、建立模型
该模型反映了在没有人工捕获的自然环境中食饵与捕食者之间的制约关系,没有考虑食饵和捕食者自身的阻滞作用,是Volterra提出的最简单的模型。
设食饵和捕食者的初始数量分别为x1 (0) = x10 , x2 (0) = x20 ,对于数据𝒓𝟏 = 𝟏, 𝝀𝟏 = 𝟎.𝟏, 𝒓𝟐 = 𝟎.𝟓, 𝝀𝟐 = 𝟎. 𝟎𝟐, 𝒙𝟏𝟎 = 𝟐𝟓, 𝒙𝟐𝟎 = 𝟐,𝒕的终值经试验后确定为15,即模型为:
考虑人工捕获:设表示捕获能力的系数为𝒆,相当于食饵的自然增长率由𝒓𝟏降为𝒓𝟏 − 𝒆,捕食者的死亡率由𝒓𝟐增为𝒓𝟐 + 𝒆
设战前捕获能力系数𝒆 = 𝟎. 𝟑,战争中降为𝒆 = 𝟎. 𝟏,则战前与战争中的模型分别为:
matlab的解决算法如下:
clc,clear
% 无捕捞情况下的自然生长模型
[t,x]=ode45(@function5,[0 15],[25 2]);
% ode45:运用组合的4/5阶龙格-库塔-芬尔格算法求解微分方程,并设置函数初值和自变量范围
subplot(3,2,1)
plot(t,x(:,1),'-',t,x(:,2),'*','LineWidth',1.5); hold on; % 绘图
xlabel('时间相位'); % 添加x轴信息
ylabel('种群的数量') % 添加y轴信息
title('自然生长模型'); % 添加标题
legend('食饵种群数量 ','捕食者种群数量','Location','best'); % 添加线段标签
subplot(3,2,2); plot(x(:,1),x(:,2),'LineWidth',1.5); hold on;
xlabel('食饵种群数量'); % 添加x轴信息
ylabel('捕食者种群数量') % 添加y轴信息
title('自然生长模型'); % 添加标题
% 战争前捕鱼模型
[t,x]=ode45(@function3,[0 15],[25 2]);
subplot(3,2,3)
plot(t,x(:,1),'-',t,x(:,2),'*','LineWidth',1.5); hold on;
xlabel('时间相位'); % 添加x轴信息
ylabel('种群的数量') % 添加y轴信息
title('战争前捕鱼模型'); % 添加标题
legend('食饵种群数量 ','捕食者种群数量','Location','best'); % 添加线段标签
subplot(3,2,4); plot(x(:,1),x(:,2),'LineWidth',1.5); hold on;
xlabel('食饵种群数量'); % 添加x轴信息
ylabel('捕食者种群数量') % 添加y轴信息
title('战争前捕鱼模型'); % 添加标题
% 战争后捕鱼模型
[t,x]=ode45(@function4,[0 15],[25 2]);
subplot(3,2,5)
plot(t,x(:,1),'-',t,x(:,2),'*','LineWidth',1.5); hold on;
xlabel('时间相位'); % 添加x轴信息
ylabel('种群的数量') % 添加y轴信息
title('战争后捕鱼模型'); % 添加标题
legend('食饵种群数量 ','捕食者种群数量','Location','best'); % 添加线段标签
subplot(3,2,6); plot(x(:,1),x(:,2),'LineWidth',1.5); hold on;
xlabel('食饵种群数量'); % 添加x轴信息
ylabel('捕食者种群数量') % 添加y轴信息
title('战争后捕鱼模型'); % 添加标题
其中的函数文件如下:
function dx = function3(t,x) % 考虑捕捞和没有战争
dx = zeros(2,1); % 根据模型写微分方程组的函数
dx(1) = x(1)*(0.7-0.1*x(2));
dx(2) = x(2)*(-0.8+0.02*x(1));
end
function dx = function4(t,x) % 考虑捕捞和正在战争
dx = zeros(2,1); % 根据模型写微分方程组的函数
dx(1) = x(1)*(0.9-0.1*x(2));
dx(2) = x(2)*(-0.6+0.02*x(1));
end
function dx = function5(t,x) % 不考虑捕捞
dx=zeros(2,1); % 根据模型写微分方程组的函数
dx(1)=x(1)*(1-0.1*x(2));
dx(2)=x(2)*(-0.5+0.02*x(1));
end