草庐IT

慢跑者与狗 & 地中海鲨鱼问题的matlab解法

脱脱克克 2025-06-14 原文

慢跑者与狗

问题描述

一个慢跑者在平面上沿椭圆以恒定的速率𝒗 = 𝟏跑步,设椭圆方程为:𝒙 = 𝟏𝟎 +
𝟐𝟎𝒄𝒐𝒔(𝒕) , 𝒚 = 𝟐𝟎 + 𝟓𝒔𝒊𝒏(𝒕)。突然有一只狗攻击他,这只狗从原点出发,以恒定速率𝒘跑向慢跑 者,狗的运动方向始终指向慢跑者。分别求出𝒘 = 𝟐𝟎, 𝒘 = 𝟓时狗的运动轨迹。

模型建立

设时刻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

输出结果:

终!

有关慢跑者与狗 & 地中海鲨鱼问题的matlab解法的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  8. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐