多智能体系统仿真学习笔记:(一)ODE
多智能体系统仿真学习笔记:(一)ODE学习(一)ODEⅠ.常微分方程 (ODE)Ⅱ.Matlab中可求解的ODE新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML
多智能体系统仿真学习笔记:(一)ODE
(一)ODE的一般形式
Ⅰ.常微分方程 (ODE)
常微分方程 (ODE) 包含与一个自变量 t(通常称为时间)相关的因变量 y 的一个或多个导数。此处用于表示 y 相对于 t 的导数的表示法对于一阶导数为 y′,对于二阶导数为 y′′,依此类推。
ODE 的阶数即y 在方程中出现的最高阶导数。
Ⅱ.ODE方程组
ODE的主要描述方式,用以对复杂系统进行表示,形如
y ˙ = f ( t , y ) \dot y = f(t,y) y˙=f(t,y)
其中, y = ( y 1 , y 2 , … , y n ) T y=(y_1,y_2,\dots,y_n)^T y=(y1,y2,…,yn)T.
例如
{ y 1 = y 2 y 2 = y 1 y 2 − 2 \left\{ \begin{aligned} y_1 & =y_2 \\ y_2 & =y_1y_2-2 \end{aligned} \right. {y1y2=y2=y1y2−2
Ⅲ.高阶ODE
高阶 ODE 可通过常规代换法重写为等效的一阶方程组
y 1 = y ˙ y 2 = y ¨ … y n = y ( n − 1 ) \begin{aligned} y_1 & =\dot y \\ y_2 & =\ddot y\\ &\dots \\ y_n & = y ^{(n-1)} \end{aligned} y1y2yn=y˙=y¨…=y(n−1)
通过代换,我们可以得到一个新的方程组
y ˙ 1 = y y ˙ 2 = y ¨ … y ˙ n = y ( n − 1 ) \begin{aligned} \dot y_1 & =y \\ \dot y_2 & =\ddot y\\ &\dots \\ \dot y_n & = y ^{(n-1)} \end{aligned} y˙1y˙2y˙n=y=y¨…=y(n−1)
Ⅳ.复数ODE
考虑复数 ODE 方程
y ˙ = f ( t , y ) , \dot y=f(t,y) , y˙=f(t,y) ,
其中 y = y 1 + i y 2 y=y_1+iy_2 y=y1+iy2。
为解算该方程,需要将实部和虚部分解为不同的解分量,最后重新组合相应的结果。从概念上讲,这类似于
y v = [ R e a l ( y ) , I m a g ( y ) ] f v = [ R e a l ( f ( t , y ) ) , I m a g ( f ( t , y ) ) ] \begin{aligned} y_v & =[Real(y) ,Imag(y)] \\ f_v & =[Real(f(t,y)) ,Imag(f(t,y))] \ \end{aligned} yvfv=[Real(y),Imag(y)]=[Real(f(t,y)),Imag(f(t,y))]
(二)Matlab中的ODE
Ⅰ.Matlab中可求解的ODE
Matlab 中的 ODE 求解器可解算以下类型的一阶 ODE:
-
显式线性ODE: y ˙ = f ( t , y ) \dot y=f(t,y) y˙=f(t,y);
-
线性隐式 ODE: M ( t , y ) y ˙ = f ( t , y ) M(t,y) \dot y=f(t,y) M(t,y)y˙=f(t,y)
– M(t,y) 为非奇异质量矩阵,该质量矩阵可能为时间或状态相关的矩阵,也可能为常量矩阵。
–线性隐式 ODE 可随时变换为显式形式 -
完全隐式 ODE: f ( t , y , y ˙ ) = 0 f(t,y,\dot y)=0 f(t,y,y˙)=0
–该方程 不能重写为显式形式,还可能包含一些代数变量。
–ode15i 求解器专为完全隐式问题(包括微分指数为 1 的 DAE)而设计。 -
微分代数方程或 DAE
–DAE 方程组会包含一些代数变量。代数变量是导数未出现在方程中的因变量。可通过对方程求导来将 DAE 方程组重写为等效的一阶 ODE 方程组,以消除代数变量。将 DAE 重写为 ODE 所需的求导次数称为微分指数。
–ode15s 和 ode23t 求解器可解算微分指数为 1 的 DAE。
Ⅱ.求解器的选择
ode45 适用于大多数 ODE 问题,一般情况下应作为首选求解器。但对于精度要求更宽松或更严格的问题而言,ode23 和 ode113 可能比 ode45 更加高效。
下表提供了关于何时使用每种不同求解器的一般指导原则。
求解器 | 问题类型 | 精度 |
---|---|---|
ode45 | 非刚性 | 中 |
ode23 | 非刚性 | 低 |
ode113 | 非刚性 | 低到高 |
ode15s | 刚性 | 低到中 |
ode23s | 刚性 | 低 |
ode15i | 完全隐式 | 低 |
Ⅲ.使用方法(以ode45为例)
A.语法
[t,y] = ode45(odefun,tspan,y0)
[t,y] = ode45(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)
sol = ode45(___)
B.参数说明
输出:
- t:返回的时间;
- y:返回的状态值, y 中的每一行都与列向量 t 中返回的值相对应;
- te:求解事件函数何处为零时,事件的时间。;
- ye:求解事件函数何处为零时,事件发生的解;
- ie:求解事件函数何处为零时,触发的事件的索引。
输入:
- odefun:给定的ode方程;
- tspan:求解的时间范围;
- y0:所求解的状态的初值;
- options:使用 odeset 函数创建的参数所定义的积分设置。例如,使用 AbsTol 和 RelTol 选项指定绝对误差容限和相对误差容限,或者使用 Mass 选项提供质量矩阵。
(三)ODE使用示例
Ⅰ.简单示例
解算ODE
y ˙ = 2 t \begin{aligned} \dot y& =2t \end{aligned} y˙=2t
使用时间区间 [0,5] 和初始条件 y0 = 0。
tspan = [0 5];
y0 = 0;
[t,y] = ode45(@(t,y) 2*t, tspan, y0);
绘图。
plot(t,y,'-o')
结果如下:
Ⅱ.复杂示例
Matlab有几个示例文件可用作大多数 ODE 问题的有用参考。要运行微分方程示例应用,以便轻松浏览和运行示例,请键入
odeexamples;
要打开单独的示例文件进行编辑,请键入
edit exampleFileName.m
要运行示例,请键入
exampleFileName
多智能体系统相关几个实例
名称 | 求解器 | 说明 |
---|---|---|
ballode | ode23 | 简单事件位置 - 弹球 |
batonode | ode45 | 短棒的位置移动 |
orbitode | ode45 | 高级事件位置 - 限制性三体问题 |
主要参考资料来源:
Mathworks官方帮助中心
求解器的选择:https://ww2.mathworks.cn/help/matlab/math/choose-an-ode-solver.html#bu22m6i-1**
ode45介绍:https://ww2.mathworks.cn/help/matlab/ref/ode45.html
更多推荐
所有评论(0)