IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数学建模——微分方程 -> 正文阅读

[数据结构与算法]数学建模——微分方程

在前面三章中通过线性规划、整数规划、非线性规划三方面对规划问题有了一个初步的认识。

线性规划:https://blog.csdn.net/qq_51564046/article/details/118568020?spm=1001.2014.3001.5501

整数规划:https://blog.csdn.net/qq_51564046/article/details/118571195?spm=1001.2014.3001.5501

非线性规划:https://blog.csdn.net/qq_51564046/article/details/118576469?spm=1001.2014.3001.5501

今天我们进入新的篇章——微分方程

适用范围:当直接导出变量之间的函数关系比较困难,但导出包含未知函数的导数或微分关系比较容易时。

一、人口模型(Malthus模型和Logistic模型)

1.马尔萨斯模型:

基本假设:人口增长率r是常数。

N(t+\Delta t)-N(t)=r\Delta N(t)

\frac{dN}{dt}=rN

N(t)=N_{0}e^{r(t-t_{0}))}

显著特点:种群数量翻一番的时间是固定的。故T=\frac{ln2}{r}

模型总结:适用于群体总数不太大时合理。人口的净增长率不可能保持常数,与人口数量有关。

马尔萨斯模型实例:

1625183019301960197419871999
5102030405060
T=1999-1960;
r=log(2)/T
x=[1960 1974 1987 1999 2011 2016];
y=[30 40 50 60 70 74.42];
plot(x,y,'*')
hold on
tt=1960:2050
xx=30*exp(r*(tt-1960));
plot(tt,xx,'r-')
legend('实际数据’,‘拟合数据')
xlabel('time')
ylabel('人数(亿)')

线性最小二乘法拟合

最小二乘拟合:作为度量误差“大小”标准的函数逼近

在次数不超过n的多项式中找一个函数使残差平方和最小

解决:matlab中的polyfit指令:x,y分别表示横纵坐标,n为拟合多项式的次数,P为输出的多项式系数向量。

polyval(p,x)。p为polyfit的结果。x为预测值得x坐标。函数结果即为x处对应得y值。

最小二乘法模型实例:

给出美国人口从1790年到1990年的人口,估计2010年的人口。

年份1790180018101820183018401850186018701880
人口3.95.37.29.612.917.123.231.438.650.2
年份1890190019101920193019401950196019701980
人口62.976.092.0106.5123.2131.7150.7179.3204.0226.5
xxdata=[1790 1800 1810 1820 1830 1840 1850 1860];
xdata=xxdata-1790;
yydata=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4];
ydata=log(yydata)
p=polyfit(xdata,ydata,1)%polyfit 基于最小二乘法的曲线拟合
xxxdata=[1790:2000];
xx=[0:2000-1790];
z1=polyval(p,xx)%求的xx处的y值
y1=exp(z1); 
xxx=[1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980];
yyy=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5];
plot(xxx,yyy,'*',xxxdata,y1,'r-')
hold on
legend('实际数据','预测数据')
xlabel('时间','fontsize',18)
ylabel('人口','fontsize',16)

看完上面的代码肯定有不少人都想问,为什么xdata做了-1790的处理和ydata用了log函数。

我们拟合的是一次函数,马尔萨斯模型的式子为N(t)=N_{0}e^{r(t-t_{0}))}

?经过处理变为一次函数形式:lny=lnc+r(t-t_{0}),看到这里相信大家的困惑就迎刃而解了。

这里还有一种函数类型:增函数,t->0时y=0;t->inf时,y趋于一个定值。指数类型:y=ae^{\frac{b}{t}}

非线性最小二乘法拟合

适用matlab中的lsqcurvefit函数。[x,resnorm]=lsqcurvefit(fun,x0,xdata,ydata)

fun为需要拟合的函数。x0为函数系数的初始猜测值。xdata为x的坐标值,ydata为y的坐标值。

output:x经拟合后的系数。resnorm误差

2.Logistic模型

人口的净增长率与人口的数量有关,r=r(N)=r-aN

\frac{dN}{dt}=(r-aN)N? ? ? ? 或者????????\frac{dN}{dt}=r(1-\frac{N}{K})N

N(t)=\frac{N_{0}K}{N_{0}+(K-N_{0})e^{-rt}}

用Logistic模型预测美国2010年人口(数据见上表)

function [F]=myfun1(x,xdata)
F= x(1) ./ (1 + (x(1) / 3.9 - 1) .* exp(- x(2) .* xdata)); 
end
xx=[1790 1800 1810 1820 1830 1840 1850 1860 1870];
xdata=xx-1790;
ydata=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6];
x0=[1,1];
xi=lsqcurvefit(@myfun1,x0,xdata,ydata)
x1=1790:1:1980; xx1=x1-1790;
y1=myfun1(xi,xx1);
xxdata=[1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980];
yydata=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 106.5 123.2 131.7 150.7 179.3 204 226.5]; 
plot(xxdata,yydata,'ro',x1,y1,'b-')

Logistic模型同样适用于新产品推广问题和捕鱼业问题。只要是随着变量x的增加会导致目标结果涨幅的变慢,Logistic模型都适用。

二、传染病模型

模型1 :已感染人数i(t)

假设:每个病人每天有效接触人数为\lambda

i(t+\Delta t)-i(t)=\lambda i(t)\Delta t

i(t)=i_{0}e^{\lambda t}

模型2:区分已感染者和未感染者(SI模型)

假设:1.总人数不变,病人和健康人的比例分别未i(t)和s(t)。2.每个病人每天有效接触人数为\lambda,且使接触的健康人致病。

N[i(t+\Delta t)-i(t)]=[\lambda s(t)]Ni(t)\Delta t

\frac{di}{dt}=\lambda i(1-i)

属于Logistic方程:i(t)=\frac{1}{1+(\frac{1}{i_{0}}-1)e^{-\lambda t}}

模型3:病人治愈成为健康人,健康人可再次被感染。(SIS模型)

1.总人数不变,病人和健康人的比例分别未i(t)和s(t)。2.每个病人每天有效接触人数为\lambda,且使接触的健康人致病。3.病人每天的治愈比例为\mu

N[i(t+\Delta t)-i(t)]=\lambda Ns(t)i(t)\Delta t-\mu Ni(t)\Delta t
\frac{di}{dt}=\lambda i(1-i)-\mu i

?

?令?\sigma =\frac{\lambda }{\mu }。一个感染期内每个病人的有效接触人数。

\frac{di}{dt}=-\lambda i[i-(1-\frac{1}{\sigma })]

\sigma=1为阈值,当其大于1时,i(t)按S形曲线增长。当期小于1时,呈下降趋势。

SI模型可以看作SIS模型的一个特例。

模型4:病人治愈后移出感染系统。(SIR模型)

总人数N不变,病人、健康人和移出者的比例分别为i(t),s(t),r(t)。?每个病人每天有效接触人数为\lambda?

。?病人每天的治愈比例为\mu

?N[i(t+\Delta t)-i(t)]=\lambda Ns(t)i(t)\Delta t-\mu Ni(t)\Delta t

?N[s(t+\Delta t)-s(t)]=-\lambda Ns(t)i(t)\Delta t

微分形式:

\frac{di}{dt}=\lambda si-\mu i

\frac{ds}{dt}=-\lambda si

三、种群模型

一个自然环境种有两个种群生存,它们之间的关系:相互竞争,相互依存,弱肉强食。

甲乙两个种群,它们独自生存时数量变化均服从Logistic规律

两个种群生存在一起时,乙对甲的增长有阻滞作用与乙的数量成正比。甲对乙有同样作用

x_{1}(t)=r_{1}x_{1}\left [ 1-\frac{x_{1}}{N_{1}} -\sigma _{1}\frac{x_{2}}{N_{2}}\right ]

x_{2}(t)=r_{2}x_{2}\left [ 1-\frac{x_{2}}{N_{2}} -\sigma _{2}\frac{x_{1}}{N_{1}}\right ]

寻找该非线性方程的平衡点。

平衡点稳定判定准则:考虑方程的Jacobian矩阵

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:44:49  更:2021-07-10 14:45:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:31:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码