种群相互竞争的Matlab程序

合集下载

遗传算法的原理及MATLAB程序实现.

遗传算法的原理及MATLAB程序实现.

1 遗传算法的原理1.1 遗传算法的基本思想遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。

遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。

染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。

因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。

初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。

在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。

这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。

计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。

这一过程循环执行,直到满足优化准则,最终产生问题的最优解。

图1-1给出了遗传算法的基本过程。

1.2 遗传算法的特点1.2.1 遗传算法的优点遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点:1. 遗传算法以控制变量的编码作为运算对象。

传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。

这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。

2. 遗传算法具有内在的本质并行性。

实例 动物种群的相互竞争与相互依存的模型

实例 动物种群的相互竞争与相互依存的模型

实例2动物种群的相互竞争与相互依存的模型在生物的种群关系中,一种生物以另一种生物为食的现象,称为捕食.一般说来,由于捕食关系,当捕食动物数量增长时,被捕食动物数量就逐渐下降,捕食动物由于食物来源短缺,数量也随之下降,而被捕食动物数量却随之上升.这样周而复始,捕食动物与被捕食动物的数量随时间变化形成周期性的震荡.田鼠及其天敌的田间种群消长动态规律也是如此.实验调查数据表明:无论是田鼠还是其天敌的数量都呈周期性的变化,天鼠与天敌的作用系统随时间序列推移,田鼠密度逐渐增加,其天敌随之增加,但时间上落后一步.由于天敌密度增加,则田鼠密度降低,而田鼠密度的降低,则其天敌密度亦减少,如此往复循环,从而形成一定的周期.试用数学模型来概括这一现象,并总结出其数量变化的近似公式.一问题分析及模型的建立设)(t x 和)(t y 分别表示t 时刻田鼠与其天敌的数量,如果单独生活,田鼠的增长速度正比于当时的数量,即x dtdx λ=而田鼠的天敌由于没有被捕食对象,其数量减少的速率正比于当时的数量,即y dtdy μ-=现在田鼠与其天敌生活一起,田鼠一部分遭到其天敌的消灭,于是以一定的速率α减少,减少的数量正比于天敌的数量,因此有x y dtdx )(αλ-=类似地,田鼠的天敌有了食物,数量减少的速率μ减少β,减少的量正比于田鼠的数量,因此有y x dtdy )(βμ--=上述公式,最后两个方程联合起来称为Volterra-Lot 方程,这里μλβα,,,均为正数,初始条件为0)0(,)0(y y x x ==现在通过实验调查所得到的数据如表,此数据为每隔两个月田间调查一次,得到的田鼠及其天敌种群数量的记录,数量的单位经过处理.试建立合理的数学模型.表田鼠种群数量记录29.733.132.569.1134.2236.0269.6162.269.639.834.020.722.037.657.6124.6225.0272.7195.794.541.925.710.922.533.548.292.5183.3268.5230.6115.5表田鼠天敌种群数量记录1.6 1.3 1.1 1.2 1.1 1.3 1.8 2.2 2.4 2.2 1.9 1.5 1.5 1.20.91.1 1.3 1.62.3 2.4 2.2 1.7 1.8 1.5 1.2 1.00.9 1.1 1.3 1.9 2.3二模型的求解Volterra-Lotok 方程的解析解即y x ,的显示解难求出,因此公式的参数方程不宜直接用Matlab 函数来拟合解,可用如下的方法来求其近似解.Volterra-Lotok 可转化为⎩⎨⎧+-=-=dtx y d dt y x d )(ln )(ln βμαλ在区间],[1i i t t -上积分,得ii i i i S t t x x 111)(ln ln αλ--=---ii i i i S t t y y 211)(ln ln βμ+--=---这里,⎰-=ii t t i ydt S 11,⎰-=ii t t i xdt S 22,m i ,,1 =于是得到方程组⎩⎨⎧==222111B P A B P A 这里⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------=-im m m S t t S t t S t t A 1121211011 ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------=-m m mS t t S t t S t t A 212212012 ⎪⎪⎭⎫ ⎝⎛=αλ1P ⎪⎪⎭⎫ ⎝⎛-=βμ2P Tm m x x x x B ln ,,(ln 1011-= T m m y y y y B )ln ,,(ln 101-= 因此方程组参数的最小二乘解为111111)(B A A A P T T -=22122)(B A A A P T T -=由于)(t x 和)(t y 均为未知,因此21,S S i 用数值积分方法的梯形公式解)(21111--+-≈=⎰-i i i i t t i y y t t ydt S i i )(1121--+-==⎰-i i i i t t x x t t xdt S i i这样就可求得参数的近似值.模型参数求解的程序为clear all,clcX=[29.733.132.569.1134.2236.0269.6162.269.639.8...34.020.722.037.657.6124.6225.0272.7195.794.541.925.7...10.922.533.548.292.5183.3268.5230.6115.5];Y=[1.6 1.3 1.1 1.2 1.11.3 1.8 2.2 2.4 2.2 1.9 1.5 1.5 1.20.9...1.1 1.3 1.62.3 2.4 2.2 1.7 1.8 1.5 1.2 1.00.9 1.1 1.3 1.9 2.3];N=[X;Y];T=[0:2:60];for i=1:30A(i,1)=T(i+1)-T(i);A(i,[23])=((T(i+1)-T(i))/2)*[-(N(1,i+1)+N(1,i)),-(N(2,i+1)+N(2,i))];B(i,[12])=[log(N(1,i+1)/N(1,i)),log(N(2,i+1)/N(2,i))];end;A1=A(:,[13]);P1=inv((A1'*A1))*A1'*B(:,1)A2=A(:,[12]);P2=inv((A2'*A2))*A2'*B(:,2)上述结果代入Volterra-Lotok方程,用MATLAB函数ode45求方程在时间[0,60]的数值解.作图可看到田鼠及其天敌数量的周期震荡.求方程Volterra-Lotok的数值解的程序为定义函数vlok为[vlok.m]function dydt=vlok(T,Y)dydt=[(0.8765-0.5468*Y(2))*Y(1);(-0.1037+0.0010*Y(1))*Y(2)];clear all,clcX=[29.733.132.569.1134.2236.0269.6162.269.639.8...34.020.722.037.657.6124.6225.0272.7195.794.541.925.7...10.922.533.548.292.5183.3268.5230.6115.5];Y=[1.6 1.3 1.1 1.2 1.11.3 1.8 2.2 2.4 2.2 1.9 1.5 1.5 1.20.9...1.1 1.3 1.62.3 2.4 2.2 1.7 1.8 1.5 1.2 1.00.9 1.1 1.3 1.9 2.3];N=[X,Y];T=[0:2:60];[t,Y]=ode45(@vlok,[0:0.5:60],[29.71.6]);plot(t,Y(:,1)/100,'k');hold on;plot(t,Y(:,2),'-.k');title('田鼠及其天敌的Volterra-Lotok模型拟合曲线');xlabel('时间');ylabel('数量(只/每百)');gtext('田鼠');gtext('天敌');legend('田鼠','天敌');legend('田鼠','天敌');图田鼠及其天敌的模拟曲线实线和虚线分别为田鼠和天敌的实际值,田鼠的数量为y坐标乘以100.。

三方演化博弈模型matlab代码

三方演化博弈模型matlab代码

三方演化博弈模型matlab代码1. 简介在现实生活和学术研究中,博弈论是一种重要的分析工具,用于研究各种决策者之间的交互行为和策略选择。

而三方演化博弈模型是博弈论中的一种重要研究对象,它涉及到三个决策者之间的博弈过程,通常是在一个动态的演化过程中进行模拟和分析。

2. 模型构建对于三方演化博弈模型的构建,可以使用matlab来编写相关的代码。

在该模型中,可以考虑三个决策者分别选择不同的策略,并根据策略的效果来更新自身的策略,从而形成一个动态的博弈过程。

在matlab 中,可以利用矩阵运算和迭代算法来模拟这一过程,并通过可视化的方式展现不同策略的演化趋势。

3. 模型代码以下是一个简单的三方演化博弈模型的matlab代码示例:```matlab设置初始策略strategy_A = rand(1, 100);strategy_B = rand(1, 100);strategy_C = rand(1, 100);设置参数iterations = 1000;payoff_matrix = [1 -1 -1; -1 1 -1; -1 -1 1];演化过程for i = 1:iterations计算每个决策者的收益payoff_A = strategy_B * payoff_matrix(1, 2) + strategy_C * payoff_matrix(1, 3);payoff_B = strategy_A * payoff_matrix(2, 1) + strategy_C * payoff_matrix(2, 3);payoff_C = strategy_A * payoff_matrix(3, 1) + strategy_B * payoff_matrix(3, 2);更新策略new_strategy_A = strategy_A + 0.1 * (payoff_A -mean(payoff_A));new_strategy_B = strategy_B + 0.1 * (payoff_B -mean(payoff_B));new_strategy_C = strategy_C + 0.1 * (payoff_C -mean(payoff_C));归一化strategy_A = new_strategy_A / sum(new_strategy_A);strategy_B = new_strategy_B / sum(new_strategy_B);strategy_C = new_strategy_C / sum(new_strategy_C);end结果展示plot(strategy_A, 'r');hold on;plot(strategy_B, 'g');hold on;plot(strategy_C, 'b');legend('策略A', '策略B', '策略C');xlabel('迭代次数');ylabel('策略选择概率');```4. 模型分析通过以上的matlab代码,我们可以模拟三方演化博弈模型的演化过程,并观察不同策略在演化过程中的变化。

两种群间的相互竞争

两种群间的相互竞争

两种群间的相互竞争摘要本文针对两种群间的竞争问题作了详细的论述,主体分为两部分,第一部分主要通过理论分析的方法来阐述模型,第二部分主要利用MATLAB通过数值分析的方法从另一个角度来阐述模型,两个部分相辅相成,从不同的角度对同一个模型进行分析,并在最后得到一致的结果。

另外本文在第一部分主要以理论的方式对模型进行数学上的描述,在第二部分主要以生物间的角度对模型进行描述,与此同时对第一部分作一个总结。

关键词:稳定性平面动力系统增广相空间轨线一、问题提出两种群竞争模型很好的描述了种群间的各种关系,而如果从发展的眼光来看待问题,我们不禁对两种群在未来很长一段时间内的状态产生兴趣,换句话说,我们要研究的是在无穷远的将来,两个种群的数量变化关系,这对我们进一步研究生物学的各种问题是有意义的。

二、基本假设假设1: 有甲乙两个种群,它们独自生存时的数量变化服从Logistic 规律。

假设2: 两种群一起生存时,乙种群对甲种群增长的阻滞作用与乙种群的数量成正比,甲种群对乙种群增长的阻滞作用与甲种群的数量也成正比。

三、问题分析根据“假设1”,我们容易得到方程组如下1122()(1)()(1)dx t x r x dt n dy t y r y dtn ⎧=-⎪⎪⎨⎪=-⎪⎩ (1) 其中()x t ,()y t 分别为甲乙两种群随时间变化的数量;1r ,2r 为它们的固有增长率;1n 和2n 为环境允许条件下,甲乙两种群的最大数量。

再由“假设2”,对方程组(1)变形,我们得到方程组如下11122212()(1)()(1)dx t x y r x s dt n n dy t x y r y s dt n n ⎧=--⎪⎪⎨⎪=--⎪⎩(2) 其中1s 的含义是,对于供养甲种群的资源而言,单位数量乙(相对于2n )的消耗为单位数量甲(相对于1n )消耗的1s 倍;2s 的含义是,对于供养乙种群的资源而言,单位数量甲(相对于1n )的消耗为单位数量乙(相对于2n )消耗的2s 倍。

博弈仿真matlab

博弈仿真matlab

博弈仿真matlab引言博弈仿真是一种有助于理解和探索博弈理论的工具。

在博弈理论中,我们通过模拟不同策略下的决策和结果来分析博弈的结果。

Matlab是一款功能强大的数值计算软件,它提供了一些有助于进行博弈仿真的工具和函数。

本文将介绍如何使用Matlab进行博弈仿真,并给出一个实例来说明。

博弈理论简介博弈理论是研究决策制定者之间相互影响的一种数学分析方法。

博弈的参与者被称为玩家,他们根据自己的利益和目标来做出决策。

博弈理论主要研究玩家的策略选择和决策结果之间的关系。

常见的博弈模型包括零和博弈、非零和博弈、合作博弈等。

在零和博弈中,玩家之间的利益是互相对立的。

一方的收益就是另一方的损失。

在非零和博弈中,玩家之间的利益可以是互相独立的,也可以是互相关联的。

合作博弈则是指玩家之间通过合作互利来达到最优决策的一种博弈形式。

Matlab中的博弈仿真工具Matlab中有几个有助于进行博弈仿真的函数和工具包。

其中最常用的是Game Theory Toolbox。

该工具包提供了一些常见的博弈模型和算法,可以帮助我们进行博弈仿真和分析。

Game Theory Toolbox的安装要使用Game Theory Toolbox,首先需要将其安装到Matlab中。

安装过程如下:1.打开Matlab软件。

$ matlab2.在命令窗口中输入以下命令,下载Game TheoryToolbox。

>> addpath('path_to_toolbox')其中,path_to_toolbox是Game Theory Toolbox 的安装路径。

3.安装完成后,可以通过以下命令检查是否安装成功。

>> ver('games')Game Theory Toolbox的功能Game Theory Toolbox提供了许多有用的函数和工具,以进行博弈模型的建立、计算博弈结果和分析策略等。

leslie模型matlab程序

leslie模型matlab程序

leslie模型matlab程序Leslie 模型是一种用于描述种群动态变化的数学模型,特别被广泛应用于生态学和人口学领域。

本文将介绍如何使用 MATLAB 编程实现 Leslie 模型,并提供一个完整的 MATLAB 程序。

Leslie 模型是由生物学家 Patrick Leslie 在 1945 年提出的,它利用年龄结构矩阵来描述一个种群中不同年龄段的个体数量。

该模型假设种群的年龄结构在各个时间段内保持不变,并且个体之间的交互仅通过生育和死亡来实现。

在 Leslie 模型中,种群的每个年龄段都有一个特定的存活率和生育率。

假设一个种群的年龄段从 0 到 k,种群的存活率可以用一个长度为 k+1 的向量 s 表示,其中 s(i) 表示年龄段 i 的存活率。

种群的生育率可以用一个长度为 k 的向量 b 表示,其中 b(i) 表示年龄段 i 的生育率。

为了计算种群在下一个时间段的年龄结构,我们需要将当前时间段的年龄结构向量乘以一个称为 Leslie 矩阵的矩阵 A。

Leslie 矩阵的第一行是生育率向量 b,其余行是存活率向量 s,只是向上移动了一格。

因此,Leslie 矩阵的维度为(k+1)×k。

现在我们将以 MATLAB 编程实现 Leslie 模型。

首先,我们需要确定种群的年龄段数目和初始年龄结构向量。

这里假设种群的年龄段从 0 到 9,初始年龄结构向量为一个10×1 的列向量,每个元素都为 100。

```matlabk = 9; % 年龄段数目x0 = zeros(k+1, 1); % 初始年龄结构向量x0(1) = 100; % 年龄 0 的个体数量为 100```接下来,我们需要定义存活率向量和生育率向量。

对于这里的示例,我们假设存活率向量是一个长度为 10 的向量,并且每个年龄段的存活率都为 0.8。

生育率向量是一个长度为 9 的向量,并且每个年龄段的生育率都为 2。

多目标灰狼优化算法matlab代码详解

多目标灰狼优化算法matlab代码详解

多目标灰狼优化算法matlab代码详解引言:多目标优化问题是在实际应用中常遇到的一类问题,它们具有多个冲突的目标函数。

为了解决这类问题,许多多目标优化算法被提出,其中一种较为常见且有效的算法是多目标灰狼优化算法(Multi-Objective Grey Wolf Optimizer,MOGWO)。

本文将从原理、步骤以及MATLAB代码实现等方面对多目标灰狼优化算法进行详细介绍。

一、多目标灰狼优化算法(MOGWO)原理多目标灰狼优化算法是一种模拟自然界中灰狼觅食行为的优化算法。

它的灵感来源于灰狼社会中灰狼的角色分配和协作行为。

算法的基本原理如下:1. 初始化种群:随机生成一群灰狼个体,并将它们作为初始种群,每个个体代表一个可能的解。

2. 灰狼适应度计算:根据每个个体所对应的目标函数值来评估其适应度值。

3. 搜索行为模拟:根据已有的种群信息,通过灰狼个体在解空间中的搜索行为来更新种群,以寻找更好的解。

4. 灰狼聚群行为模拟:根据已有的种群信息,通过灰狼个体在解空间中的聚群行为来更新种群,以进一步优化解。

5. 达到停止条件:当满足停止条件时,算法终止。

二、多目标灰狼优化算法(MOGWO)步骤1. 参数设置:根据具体问题设置算法参数,如种群大小、迭代次数等。

2. 种群初始化:随机生成一组解作为初始种群。

3. 计算适应度:根据目标函数值计算每个个体的适应度值。

4. 灰狼行为模拟:根据已有的种群信息,通过灰狼个体在解空间中的搜索行为和聚群行为来更新种群。

5. 更新种群:根据灰狼的行为模拟结果更新种群。

6. 判断停止条件:根据设定的停止条件判断是否终止算法。

7. 输出结果:输出最终得到的近似最优解。

三、多目标灰狼优化算法(MOGWO)MATLAB代码实现下面是多目标灰狼优化算法的MATLAB代码实现,以便更好地理解算法的具体过程。

```matlabfunction [best_sol, best_fitness] = MOGWO(fitness_function, lb, ub, dimension, max_iter, population_size)% 初始化种群wolf_position = lb + (ub - lb) * rand(population_size, dimension);% 初始化适应度wolf_fitness = feval(fitness_function, wolf_position);% 迭代优化for iter = 1:max_iter% 计算灰狼适应度,用于带拥挤度计算normalized_fitness = normalize_fitness(wolf_fitness);% 通过拥挤度计算计算排名ranking = crowding_distance(normalized_fitness);% 排名排序[~, rank_index] = sort(ranking, 'descend');% 更新alpha、beta和deltaalpha_wolf = wolf_position(rank_index(1), :);beta_wolf = wolf_position(rank_index(2), :);delta_wolf = wolf_position(rank_index(3), :);% 更新种群for i = 1:population_sizea = 2 * (1 - iter / max_iter); % 更新参数c1 = 2 * rand(1); % 更新参数c2 = 2 * rand(1); % 更新参数% 更新个体位置D_alpha = abs(c1 * alpha_wolf - wolf_position(i, :)); X1 = alpha_wolf - a * D_alpha;% 更新个体位置D_beta = abs(c2 * beta_wolf - wolf_position(i, :)); X2 = beta_wolf - a * D_beta;% 更新个体位置D_delta = abs(c2 * delta_wolf - wolf_position(i, :));X3 = delta_wolf - a * D_delta;% 更新个体位置wolf_position(i, :) = (X1 + X2 + X3) / 3;end% 更新适应度wolf_fitness = feval(fitness_function, wolf_position);end% 获取最优解和最优适应度[best_fitness, best_index] = min(wolf_fitness);best_sol = wolf_position(best_index, :);end```以上是多目标灰狼优化算法的MATLAB代码实现。

实验5常微分方程的数值解

实验5常微分方程的数值解

实验5 常微分方程的数值解概要:将装满放射性废物的圆桶扔到水深300ft 的海底,圆桶体积55gal ,装满废料的桶重为527.436lbf ,在海中浮力为470.327lbf 。

此外,下沉时受到的阻力与速度成正比,比例系数为0.08lbf/s 。

实验发现当圆桶速度超过40ft/s 时,就会因与海底冲撞而破裂。

要求:(1)建立解决上述问题的微分方程模型(2)用数值和解析两种方法求解微分方程,并回答谁赢得了官司。

模型建立由牛顿第二定律可列出圆桶下沉速度的微分方程:dv G F f G F bv dt m m ----==其中G 为圆桶重量,F 为浮力,b 为下沉阻力与速度关系的比例系数。

换算到国际单位制,dept=300*0.3048=91.4400 海深(m )ve=40*0.3048=12.1920 速度极限(超过就会使圆筒碰撞破裂)(m/s) G=527.436*0.4536*9.8=2344.6 圆筒重量(N ) F=470.327*0.4536*9.8=2090.7 浮力(N)m=527.436*0.4536=239.24 圆筒质量(kg ) b=0.08*0.4536*9.8/0.3048=1.1667 比例系数(Ns/m) 模型求解 一.求数值解Matlab 程序如下: sd.m:function dx=sd(t,x,G,F,m,b) dx=[(G-F-b*x)/m];%微分方程sddraw.m: clear;G=527.436*0.4536*9.8;%圆筒重量(N ) F=470.327*0.4536*9.8;%浮力(N)m=527.436*0.4536;%圆筒质量(kg )b=0.08*0.4536*9.8/0.3048%比例系数(Ns/m) h=0.1;%所取时间点间隔ts=[0:h:2000];%粗略估计到时间2000 x0=0;%初始条件opt=odeset('reltol',1e-3,'abstol',1e-6);%相对误差1e-6,绝对误差1e-9 [t,x]=ode45(@sd,ts,x0,opt,G ,F,m,b);%使用5级4阶龙格—库塔公式计算 %[t,x]%输出t,x(t),y(t)plot(t,x,'-'),grid%输出v(t)的图形 xlabel('t'); ylabel('v(t)');%用辛普森公式对速度积分求出下沉深度 T=20;%估计20s 以内降到海底for i=0:2:10*T%作图时间间隔为0.2 y=x(1:(i+1)); k=length(y);a1=[y(2:2:k-1)];s1=sum(a1); a2=[y(3:2:k-1)];s2=sum(a2);z4((i+2)/2)=(y(1)+y(k)+4*s1+2*s2)*h/3;%辛普森公式求深度 endi=[0:2:10*T]; figure;de=300.*0.3048.*ones(5*T+1,1);%海深ve=40.*0.3048*[1 1];%速度极限值(超过就会使圆筒碰撞破裂)plot(x(i+1),z4',x(i+1),de,ve,[0 z4(5*T+1)]);%作出速度-深度图线,同时画出海深和速度要求grid;gtext('dept'),gtext('Vmax');xlabel('v');ylabel('dept(v)');figure;plot(i/10,z4');%作出时间-下降深度曲线grid;xlabel('t');ylabel('dept(t)');求解结果如下图:速度—时间曲线:可以看到经过足够长的时间后,如若桶没有落到海底,它的速度会趋于常值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

两种群相互竞争模型如下:
1112
2221(1)(1)dx x y r x s dt n n dy y x r y s dt n n =--=-- 其中x(t),y(t)分别为甲乙两种群的数量,1r ,2r 为它们的固有增长率,1n ,2
n 为它们的最大容量。

1s 的含义是,对于供养甲的资源来说,单位数量的乙(相对2n )的消耗为单位数量甲(相对1n )消耗的1s 倍,对2s 可以作相应解释。

经过计算,该模型无解析解,故用数值方法研究,为此提出以下问题:
(1) 设r1=r2=1,n1=n2=100,s1=0.5,s2=2,初值x0=y0=10,计算x(t),y(t),画出
它们的图形及图(x,y ),说明时间t 充分大了以后x(t),y(t)的变化趋
势。

(2) 改变r1,r2,n1,n2,x0,y0,但s1,s2不变(或保持s1<1,s2>1),计算并分
析所得结果,若s1=1.5(>1),s2=0.7(<1),再分析结果。

由此可以得到
什么结论,请作出解释。

(3) 试验当s1=0.8,s2=0.7时会有什么结果,当s1=1.5,s2=1.7时,又会有
什么结果。

模型求解:
程序如下:
fun.m:
function dx=fun(t,x,r1,r2,n1,n2,s1,s2)
dx=[r1*x(1)*(1-x(1)/n1-s1*x(2)/n2);r2*x(2)*(1-s2*x(1)/n1-x(2)/n2)];
p3.m:
h=0.1;%所取时间点间隔
ts=[0:h:30];%时间区间
x0=[10,10];%初始条件
opt=odeset('reltol',1e-6,'abstol',1e-9);%相对误差1e-6,绝对误差1e-9
[t,x]=ode45(@fun,ts,x0,opt,1,1,100,100,0.5,2);%使用5级4阶龙格—库塔公式计算%后面的参数传给fun,分别是r1,r2,n1,n2,s1,s2
[t,x]%输出t,x(t),y(t)
plot(t,x,'.-'),grid%输出x1(t), x2(t)的图形
gtext('x1(t)'),gtext(' x2(t)'),pause
plot(x(:,1),x(:,2),'.-'),grid,%作相轨线
gtext('x1'),gtext('x2');
运行结果[t,x]为:
ans =
0 10.0000 10.0000
0.1000 10.8805 10.7120
0.2000 11.8235 11.4454
0.3000 12.8309 12.1962
0.4000 13.9044 12.9595
0.5000 15.0453 13.7295
……
29.4000 100.0000 0.0000
29.5000 100.0000 0.0000
29.6000 100.0000 0.0000
29.7000 100.0000 0.0000
29.8000 100.0000 0.0000
29.9000 100.0000 0.0000
30.0000 100.0000 0.0000
最后数值稳定在x=100,y=0上,即物种甲达到最大值,物种乙灭绝。

改变参数进一步讨论:
下面在保持s1,s2不变的基础上,分别改变r1,r2;n1,n2;x0,y0观察变化趋
势:
(1)改变r1,r2:
先不同的是变化速度减缓了,这是由于自然增长率r1,r2变小的缘故(相当于变化率减小)。

(2)改变n1,n2:
一度达到90以上,但最终仍然灭绝。

物种容量的改变并不能影响最终谁会灭绝。

下面的情况证明了这一点:
(3)改变x0,y0:
x0=10,y0=100:
量最大且乙物种灭绝的结果。

下面再改变s1,s2观察变化趋势:
(1)s1>1,s2<1
限。

如果这时改变r1,r2,n1,n2,x0,y0这些参数,变化趋势和上面列举的相同(甲乙相反),这从方程的对称性上可以求证。

现在得出结论,由s1,s2的物理意义,当某个s1或者s2大于1时(另一个小于1),它将严重消耗其作用的物种的生存资源,最终的结果是致使此物种灭绝。

(2)s1<1,s2<1
s1=0.8,s2=0.7
综上所述,s1,s2小于1时消耗生存资源的严重程度较轻,所以甲乙物种可以共存,但两者都达不到最大值;当其中之一大于1时,对应作用的物种就会由于生存资源的过度消耗而灭绝;当s1,s2都大于1时,两物种竞争激烈,最后s1,s2中更大者对应作用的物种灭绝。

所谓物尽天择,自然资源是有限的,需要更少资源就能生存的物种在竞争中将占有优势。

还有一种情况,当s1,s2都大于1但相等时,由于方程的对称性,甲乙两物种都能生存下来,但都不能达到最大值。

相关文档
最新文档