博客地址:Matlab微分方程01-模型

马尔萨斯模型

马尔萨斯模型是人口增长模型中最简单的模型,它由英国牧师家马尔萨斯在1798年提出。
他利用在教堂工作的机会,收集英国100多年的人口数据,发现人口的相对增长率是常数。
在这个基础上,建立了一个描述人口增长的模型,也就是著名的“马尔萨斯人口模型”。

在这个模型中,最重要的额概念是相对增长率

u˙u=r\frac{\dot{u}}{u} = r uu˙=r

这里就涉及到微分的概念,变量uuu对时间ttt的导数,也就是变化率(这里可以称之为增长率),记作u˙\dot{u}u˙

u˙=dudt\dot{u} = \frac{du}{dt} u˙=dtdu

那么“马尔萨斯人口模型”表达为微分方程是这样的形式。

dudtu=α→dudt=αu\frac{\frac{du}{dt}}{u} = \alpha \rightarrow \frac{du}{dt} = \alpha u udtdu=αdtdu=αu

其中,时间为ttt,人口uuu为依赖于时间的函数,相对增长率是α\alphaαα>0\alpha >0α>0)。

这个方程的解很容易通过不定积分求解。

∫duu=∫αdt→ln⁡u=αt+C→u(t)=eαt+C=neαt\int \frac{du}{u} = \int \alpha dt \rightarrow \ln u = \alpha t + C \rightarrow u(t) = e^{\alpha t + C} = n e^{\alpha t} udu=αdtlnu=αt+Cu(t)=eαt+C=neαt

这个解是一个指数函数!众所周知,指数函数的增长是非常快的。这在一定的程度上导致了社会主义国家考虑对人口增长进行控制。

n = 81;
t = linspace(0, 100, 100);
alpha = 0.02; % 人口增长率
% 马尔萨斯人口模型
u = n * exp(alpha * t);
figure;
plot(t, u , 'b-', 'LineWidth', 2);
xlabel('时间(年)');
ylabel('人口(亿)');
title('马尔萨斯人口模型')
grid on;
% 保存图像  
exportgraphics(gcf, 'chp01/malthus_population_model.png', 'Resolution', 300);

在这里插入图片描述

UN预测数据

我们可以从UN官网下载人口预测数据。
数据的格式是csv,第二表格包含了世界各国从2025年到2100年的人口预测数据。

我们通过websave命令下载数据, 并用readtable命令读取数据。注意实际的数据位置、文件名可能会发生改变,需要根据实际情况修改。

UN_Projection_File = 'https://population.un.org/wpp/assets/Excel%20Files/1_Indicator%20(Standard)/EXCEL_FILES/1_General/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx';
% 下载UN人口预测数据
if ~exist('chp01/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx', 'file')websave('chp01/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx', UN_Projection_File);
end% 读取UN人口预测数据, sheet 'Medium variant', range 'L18:94': total population, K18:94: Years
if ~exist('chp01/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx', 'file')error('UN人口预测数据文件未找到,请检查下载路径。');
end
data = readtable('chp01/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx', ...'Sheet', 'Medium variant', 'Range', 'K18:L94');

然后我们来看看,马尔萨斯模型数据与UN预测数据的差异。

% 提取年份和人口数据
years = data{:, 1};
population = data{:, 2} * 1e3 * 1e-8; % 单位为千人-->亿% 绘制UN人口预测数据
figure; 
plot(years, population, 'k-', 'LineWidth', 2);
xlabel('年份');
ylabel('人口(亿)');
title('联合国人口预测');
grid on;
legends = {'UN Population Projection'};hold on;
% 绘制拟合的线性模型alphas = linspace(0.001, 0.01, 5); % 人口增长率范围for idx = 1:length(alphas)alphai = alphas(idx);% 使用马尔萨斯模型拟合UN人口预测数据iyears = years - years(1); % 将年份归一化u = population(1) * exp(alphai * iyears); % 初始人口为第一个年份的人口    % 绘制拟合曲线plot(years, u, 'DisplayName', ['alpha = ', num2str(alphai)], 'LineWidth', 1.0);legends{end + 1} = ['alpha = ', num2str(alphai)]; %#ok<*SAGROW>
endlegend(legends, 'Location', 'best');% 保存图像
exportgraphics(gcf, 'chp01/un_population_projection.png', 'Resolution', 300);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增长率从0.001到0.01的马尔萨斯模型预测数据跟UN的预测有很大的区别,从图上看趋势都是不正确的。
联合国的预测中,人口会达到一个饱和值(峰值),并在其后缓慢下降。

本质上来讲,马尔萨斯模型仅仅考虑人口相对增长率的线性特征,没有考虑非线性的饱和特征。也就是,在人口较少时,人口的增长所受的限制很少,能够出现指数增长;而当人口达到一定的数量是,生存环境、生态资源、社会因素等都会对人口增长产生限制,导致人口增长率逐渐减小,最终趋近于0。

但是,我们并不能说马尔萨斯模型是错误的,因为马尔萨斯模型是线性的,它实际上能够很好的预测早期人口增长(例如英国工业革命带来的人口增长),实际上,从前面的UN数据和马尔萨斯模型拟合曲线中,我们也可以看到,马尔萨斯模型能够很好的预测早期人口增长。

这反映了微分方程模型的适用范围问题。在其适用条件和假设成立的范围内,模型能够准确描述系统的动态行为;但当系统偏离这些基本假设时,模型的预测能力将显著降低。这是数学建模中普遍存在的局限性。

基于以上分析,我们需要构建一个能够刻画人口增长非线性特征的数学模型,以更准确地描述人口动态变化规律。这就引出了下面将要介绍的Logistic模型。

Logistic模型

Logistic模型为什么叫做Logistic模型呢?因为它的解是一个Logistic函数。什么叫Logistic函数呢?它的形式是这样的:

f(x)=L1+e−k(x−x0)f(x) = \frac{L}{1 + e^{-k(x - x_0)}} f(x)=1+ek(xx0)L

这里LLL是函数的最大值,kkk是增长率,x0x_0x0是函数的中点。

figure;
% Plot Logistic function
t = linspace(0, 100, 100);
L = 10; % 最大人口
K = 0.1; % 资源限制plot(t, L ./ (1 + exp(-K * (t - 50))), 'r-', 'LineWidth', 2);
xlabel('时间(年)');
ylabel('人口(亿)');
title('Logistic Population Model');
grid on;% 保存图像
exportgraphics(gcf, 'chp01/logistic_population_model.png', 'Resolution', 300);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

至于这个函数为什么叫做Logistic函数呢?

因为法国数学家 Pierre François Verhulst就是这么命名的,他在1845年的论文(居然还有电子版可以看……)提出了这个函数来描述人口增长。这个论文现在还可以看到电子版,是法语的。在这论文电子版的地54也,作者比较了他的模型和马尔萨斯模型,并在图上给出了Logarithmique vs. Logistique的曲线命名。

在这里插入图片描述

Verhulst在论文里面写到:Nous donnerons le nom de logistique à la courbe (voyez la figure) caractérisée par l’équation précédente. 就是什么我们给前述方程给出的曲线(如图)命名为Logistic曲线之类……

说到底就是他给这个函数起了个名字……

我看了好多地方,都没有找到为什么叫logistique……

反正这个跟后勤(logistics)没有关系。国外网友猜测这个跟logistique的词源有关,logistique是法语,源自拉丁语logisticus,意思是“计算的”,而这个函数的计算……我编不出来了……

Verhulst的原始推导

现在我们来看看Verhulst是如何推导出Logistic模型的,这里我们遵循他在1845年论文中的原始推导。

Verhulst首先称,马尔萨斯的Mdppdt=l\frac{Mdp}{pdt}=lpdtMdp=l并不正确,他给出一个修正的增长方程。

Mdppdt=l−n(p−b)(2)\frac{M dp}{p dt} = l - n(p - b) \tag{2} pdtMdp=ln(pb)(2)

这里MMM, lll, nnn, bbb都是常数,ppp是人口,ttt是时间。

他接着写道:d’où, en posant, pour abréger, m=l+nbm = l + nbm=l+nb(为了简化,设m=l+nbm = l + nbm=l+nb),

Mdppdt=m−np\frac{M dp}{p dt} = m - np pdtMdp=mnp

然后得到:

dt=Mdpmp−np2(3)dt = \frac{M dp}{mp - np^2} \tag{3} dt=mpnp2Mdp(3)

这个方程经过积分后(Cette équation étant intégrée donne),在观察到当t=0t = 0t=0时对应p=bp = bp=b的条件下,得到:

t=1mlog⁡e[p(m−nb)b(m−np)](4)t = \frac{1}{m} \log_e \left[ \frac{p(m - nb)}{b(m - np)} \right] \tag{4} t=m1loge[b(mnp)p(mnb)](4)

这就是Verhulst在他的原始论文中推导出的积分形式的解。

从这个积分方程可以反解得到人口ppp关于时间ttt的显式表达式,这就是我们今天所知的Logistic函数。

传染病问题

% 编制一个在二维网格中的小老鼠染病模拟
% M只老鼠,N只有传染病,可以通过接触传染给健康的老鼠,
% 老鼠在[0,1]x[0,1]的二维网格中随机分布,并且随机运动
% 当二者距离小于0.01时,健康的老鼠有0.1的概率被感染
M = 500; % 老鼠数量
N = 1; % 传染病数量
% 初始化老鼠位置和状态
positions = rand(M, 2); % 老鼠位置
states = zeros(M, 1); % 0: 健康, 1: 感染
infected_indices = randperm(M, N); % 随机选择N只老鼠
states(infected_indices) = 1; % 设置感染状态% 模拟老鼠运动和传染
num_steps = 140; % 模拟步数history_infected = zeros(num_steps, M); % 记录每一步的感染状态
history_infected(1, :) = states; % 初始状态
position_history = zeros(num_steps, M, 2); % 记录每一步的位置
position_history(1, :, :) = positions; % 初始位置for step = 2:num_steps% 更新老鼠位置positions = positions + randn(M, 2) * 0.04; % 随机运动positions = mod(positions, 1); % 保持在[0,1]范围内% 检查感染传播for i = 1:Mif states(i) == 0 % 如果是健康的老鼠% 找到所有感染的老鼠infected_positions = positions(states == 1, :);distances = sqrt(sum((infected_positions - positions(i, :)).^2, 2));% 如果距离小于0.01且有感染概率,则感染if any(distances < 0.01) && rand < 0.8states(i) = 1; % 感染endendendhistory_infected(step, :) = states; % 记录当前状态position_history(step, :, :) = positions; % 记录当前位置信息
endfigure;
plot(1:num_steps, sum(history_infected, 2), 'b-', 'LineWidth', 2);
xlabel('时间步');
ylabel('感染老鼠数量');
title('老鼠传染病传播模拟');
grid on;exportgraphics(gcf, 'chp01/mouse_infection_simulation.png', 'Resolution', 300);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际上,无聊的话,还可以整一个老鼠传染病传播模拟,代码如下:

% 绘制初始状态
states = history_infected(1, :); % 获取初始状态
positions = squeeze(position_history(1, :, :)); % 获取初始位置
% 创建图形窗口
figure("Visible", 'off'); % 显示图形窗口
scatter(positions(:, 1), positions(:, 2), 50, states, 'filled');
title(['老鼠感染试验 - 时间 ', num2str(1), ' 感染老鼠数量: ', num2str(sum(states)), '/', num2str(M)]);
grid off;
box on; % 关闭网格线
axis off; % 关闭坐标轴显示
xlim([0 1]);
ylim([0 1]);
% 保存初始状态图像
fn = 'chp01/mouse_initial_distribution.gif';
if exist(fn, 'file')delete(fn); % 删除旧的文件
end
resolution = 100;
exportgraphics(gcf, fn , 'Resolution', resolution, 'Append', false);for step = 2:num_stepsstates = history_infected(step, :); % 获取当前步的状态positions = squeeze(position_history(step, :, :)); % 获取当前步的位置% 绘制当前状态scatter(positions(:, 1), positions(:, 2), 50, states, 'filled');title(['老鼠感染试验 - 时间 ', num2str(step), ' 感染老鼠数量: ', num2str(sum(states)), '/', num2str(M)]);grid on;box on; % 关闭网格线axis off; % 关闭坐标轴显示xlim([0 1]);ylim([0 1]);% 保存每一步的图像exportgraphics(gcf, fn, 'Resolution', resolution, 'Append', true);
end

这个感染的过程还是挺好玩的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其实这个老鼠传染病传播模拟,完全是毫无意义又偏离主题的。可是既然不负责任也挺好玩,就还是留着吧。说起来,这个帖子的主题是什么来着?忘记了,好吧……

Logistic模型的另外一种推导

老鼠传染病的过程,同样可以用类似的微分方程来描述。

假设任意时刻,病鼠和健康鼠分别为uuuvvv,则有:

u+v=Mu + v = M u+v=M

病鼠的变化率正比于乘积uvuvuv,即:

dudt=βuv\frac{du}{dt} = \beta uv dtdu=βuv

这里,β\betaβ是病鼠和好鼠的接触概率×\times×感染概率, β>0\beta > 0β>0。可以得到方程:

dudt=αu−βuv\frac{du}{dt} = \alpha u - \beta uv dtdu=αuβuv

同样做不定积分可以得到:

u=M1+(NM−1)exp⁡(−αt)u = \frac{M}{1 +(\frac{N}{M}-1) \exp (- \alpha t)} u=1+(MN1)exp(αt)M

常微分方程

从马尔萨斯模型到Logistic模型,可以看到利用微分的概念求解实际问题的一般过程:

  1. 确定考察变量(人口、染病老鼠);
  2. 考察变量的变化规律(变化率);
  3. 列写微分方程
  4. 分析初始条件、边界条件和求解条件
  5. 讨论方程的解
  6. 刻画解的变化规律和特征
  7. 讨论解的适用条件

对于上面的微分方程,可以通过不定长积分的方式,得到包含积分常量的解,并根据初始条件确定积分常量,对于更加复杂的微分、代数方程,则需要使用数值方法求解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93106.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93106.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93106.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生环境 Prometheus 企业级监控实战

目录 一&#xff1a;基于 kubernetes 的 Prometheus 介绍 1&#xff1a;环境简介 2&#xff1a;监控流程 3&#xff1a;Kubernetes 监控指标 二&#xff1a;Prometheus 的安装 1&#xff1a;从 Github 克隆项目分支 2&#xff1a;安装 Prometheus Operator --server-si…

Python爬虫实战:研究django-dynamic-scraper 框架,构建电商动态数据采集系统

1. 引言 1.1 研究背景 据 Statista 数据,2025 年全球互联网数据总量将突破 175ZB,其中 80% 为非结构化数据(网页、文本、图像等)。高效提取这些数据对企业竞争情报、学术研究至关重要。网络爬虫作为数据获取的核心工具,经历了从静态页面抓取到动态内容解析的演进,但传统…

掌握MATLAB三维可视化:从基础到实战技巧

目录 1. 引言&#xff1a;三维可视化的重要性 2. 基础三维图形绘制 2.1 三维曲线图&#xff08;plot3&#xff09; 2.2 三维散点图&#xff08;scatter3&#xff09; 2.3 三维网格图&#xff08;mesh&#xff09; 2.4 三维曲面图&#xff08;surf&#xff09; 3. 参数曲面…

Linux 服务部署:自签 CA 证书构建 HTTPS 及动态 Web 集成

Linux 服务部署&#xff1a;自签 CA 证书构建 HTTPS 及动态 Web 集成 一、HTTPS基础原理 HTTPS是HTTP协议基于SSL/TLS协议的加密版本&#xff0c;核心差异及握手过程如下&#xff1a;HTTP与HTTPS对比协议传输方式端口核心特点HTTP明文传输80无加密&#xff0c;安全性低HTTPS数据…

Python3.10 + Firecrawl 下载公众号文章

获取Firecrawl apikey 打开官网&#xff0c;使用github账号登录 https://www.firecrawl.dev/ 进入个人中心 https://www.firecrawl.dev/app/api-keys 使用PyCharm创建python项目 创建.env # API配置 FIRECRAWL_API_KEYfc-9*********0816d5ac6b20 # 输出配置 OUTPUT_DIRout…

IoT/透过oc_lwm2m/boudica150 源码中的AT指令序列,分析NB-IoT接入华为云物联网平台IoTDA的工作机制

文章目录概述指令调用顺序具体接入指令分析ATE0 关闭回显ATQREGSWT 设置&#xff08;平台&#xff09;注册模式ATQLWSREGIND0 手动注册平台set_autoconnect / ATNCONFIGATNBANDx,xset_plmn / ATCOPS_set_apn / ATCGDCONT(安全)接入参数 CDPDTLSPSKATNNMI 设置新消息指示_check_…

Android UI(一)登录注册 - Compose

UI - 登录注册 - Compose一、声明式UI1. **颠覆传统开发模式**2. **技术优势**3. **开发效率提升**4. **未来生态方向**5. **实际影响**二、创建项目1. Compose UI结构2. Scaffold3. 可组合函数三、创建组件页面1. LoginPage2. RegisterPage3. MainPage四、导航1. 添加依赖2. 使…

分享10个ai生成ppt网站(附ai生成ppt入口)

实测对比&#xff1a;15页PPT从3小时压缩到3分钟的秘密武器 当ChatGPT能写方案、Midjourney能画图&#xff0c;做PPT还在手动排版就OUT了&#xff01;这些AI生成PPT网站已实现「输入文案秒出设计稿」&#xff0c;无论职场汇报、毕业答辩还是路演融资&#xff0c;零设计基础也能…

最强开源视频模型通义万相wan2.1在comfyui中的安装应用详解

摘要&#xff1a;阿里巴巴开源通义万相Wan2.1模型&#xff0c;支持文生视频、图生视频等多种功能&#xff0c;并整合关键环节简化创作流程。官方和Kiji版本需配套使用各自工作流。低显存显卡可使用GGUF模型解决方案&#xff0c;最低适配4G显存。ComfyUI已原生支持该模型&#x…

机器学习:基于OpenCV和Python的智能图像处理 实战

机器学习&#xff1a;基于OpenCV和Python的智能图像处理实战——待填坑图像处理基础图像的基本表示方法图像处理的基本操作图像运算图像的色彩空间转换图像几何变换4.1 仿射变换4.2 重映射4.3 投影变换 4.4 极坐标变换5 图像直方图处理7 图像阈值处理8 图像形态学处理github地址…

proteus实现简易DS18B20温度计(stm32)

一、新建proteus工程 具体看前面文章 二、搭建电路 需要配置供电网络以及寻找元器件&#xff0c;细节看前面文章&#xff0c;下面给出电路图 电路包含了五个部分&#xff1a; 1、DS18B20&#xff1a;数据引脚记得上拉 2、stm32电路 3、串口电路&#xff08;右下角那个器件…

Autoppt-AI驱动的演示文稿生成工具

本文转载自&#xff1a;Autoppt-AI驱动的演示文稿生成工具 - Hello123工具导航 ** 一、 Autoppt&#xff1a;AI 驱动的智能演示文稿生成工具 Autoppt 是一款基于人工智能的在线演示文稿生成平台&#xff0c;通过输入主题或上传文档&#xff08;Word/PDF/ 图片等&#xff09;&…

Flink on YARN启动全流程深度解析

Flink on YARN 模式启动流程及核心组件协作详解整个过程分为三个主要阶段&#xff1a;​​JobManager 启动​​&#xff08;作业提交与 AM 初始化&#xff09;​​TaskManager 资源分配与启动​​​​任务部署与执行​​第一阶段&#xff1a;作业提交与 JobManager (AM) 启动​…

安卓开发者自学鸿蒙开发1基础入门

1.基础 声明式UI&#xff1a;​​ ​​核心&#xff1a;​​ 你​​声明​​你想要UI是什么样子&#xff08;在build()方法里描述&#xff09;&#xff0c;而不是一步步命令式地创建和操作View对象&#xff08;findViewById, setText, setOnClickListener&#xff09;。 模块化…

弹性扩展新范式:分布式LLM计算的FastMCP解决方案

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。如果你想系统学习AI大模型应用开发&#xff0c;挑战AI高薪岗位&#xff0c;可在文章底部联系。在现代大语言模型&#xff08;LLM&#xff09;应用架构中…

springboot项目不同平台项目通过http接口AES加密传输

前言&#xff1a; 在公司协作开发的过程中&#xff0c;自己的项目是公共调用平台&#xff0c;也可以说是中转平台&#xff0c;供公司其他团队的项目进行接口调用。因为是不同团队项目之间的相互调用&#xff0c;所以不能通过openFeign远程调用。只能通过http远程调用&#xff…

推荐5个网页模板资源网

1. 企业模板官方网站&#xff1a; http://www.qimoban.com介绍&#xff1a;企业模板(qimoban.com )是一个专注于提供丰富多样的企业模板的优质平台&#xff0c;致力于为企业和个人打造高效、专业、个性化的模板获取渠道。该平台提供海量的企业模板资源&#xff0c;涵盖企业官网…

Redis持久化机制(RDB AOF)

1. RDB RDB 持久化是把当前进程数据生成快照保存到硬盘的过程&#xff0c;触发 RDB 持久化过程分为手动触发和 自动触发&#xff0c;存储的是二进制数据。 1.1 手动触发 使用 save 和 bgsave 命令触发&#xff1a; save&#xff1a;Redis服务主进程阻塞式执行持久化操作&…

【css】让浏览器支持小于12px的文字

【css】让浏览器支持小于12px的文字.demo {display: inline-block;/** 使用Webkit引擎的变换属性&#xff08;主要针对旧版Safari/Chrome&#xff09; **/-webkit-transform: scale(0.8); }注意&#xff1a;display: inline-block; 一定要加上&#xff01;1.transform: scale(…

机器学习-基础入门:从概念到核心方法论

在人工智能飞速发展的今天&#xff0c;机器学习作为其核心技术&#xff0c;正深刻改变着我们的生活与工作。从 AlphaGo 战胜围棋世界冠军&#xff0c;到日常的智能推荐、人脸识别&#xff0c;机器学习的应用无处不在。本文将从基础概念出发&#xff0c;带你系统了解机器学习的核…