1.动态系统的表示方法

一、前言
所谓动态系统是指生活中相关物质随时间运动规律的集合,其关键在于随时间变化。如社会人口的增长,疾病的传播,天体运动,空气的运动,大脑电信号的传递等。而我们对动态系统的研究,核心就是研究系统中各个组成部分之间的相互作用和变化规律。
二、动态系统的表示方法
要想研究动态系统的变化规律,从而对其进行控制,那么需要用合适的语言来对其进行刻画。而所研究的相互作用和变化可以通过一组(偏)微分方程或差分方程来描述。这些方程包含研究对象对时间的导数,表达了系统状态随时间的演化规律,即系统在不同时间点上的状态如何相互依赖和变化。
比如,对于兔子和狼两个种群之间的关系,如果用x代表兔子的数量,y代表狼的数量,则对于兔子数量的变化率由x和y以及一些参数决定,如:
可见,此时的变化率由此时
和
的值来决定,而此时
的变化率,将决定下一时刻
的值。而这个时刻是连续的,时间步长可以为0.0001,也可以为0.1,按时间步长和变化率求解下一步x的值,即是欧拉算法。而对于某些动态系统,可能研究以年,月,天等单位的,这时候右边的变化率即可以写成:
的形式,这就是离散后的差分方程。
以上,即称之为系统的状态变量,而状态变量本身的变化率则可以由等式右边进行确定,即等式右边说明了每个状态变量变化率的计算方法,它由系统参数与当前时刻系统状态变量的取值直接相关。

因此一般而言,动态系统可以写成如下式子:
其中是以向量形式表示的状态变量,
为确定每一个状态变量变化率的函数,其可能为非线性也可能为线性函数。如果为线性函数,则右边可以写成矩阵的形式,即:
因此,可以通过矩阵的一些理论和特性方便地对系统进行分析与控制。而如果系统是非线性的,则情况将会变得复杂许多。

在matlab或python等程序中,可以通过符号计算方式或数值计算方式表示动态系统以及求解。
以上matlab代码则通过syms定义了符号变量,并表达了pomega,pdelta等变量,p表示对状态变量求导。通过符号解析,能够对简单的系统进行相关分析。
以上代码则用函数定义了系统动态方程,以便通过m文件调用ode45函数等求解器函数进行数值求解。具体可参见matlab官网手册进行学习。
三、动态系统的求解
高数中所学的微分方程是较为经典的一类常微分方程,课本上通过若干技巧求解了它们的解析解。然而,现实中几乎所有的动态系统,是难以获取其解析解,因此,面对所构建的复杂(偏)微分方程组,需要通过数值求解的方法。
从求解的精度与考虑因素的复杂程度来看,常见求解微分方程组的数值方法有欧拉算法,龙格库塔等算法。从实用的角度来看,一般的程序中会自带求解器,当我们构建好模型方程,给定初值之后,就调用函数能够自动求解。
但从学习的角度来看,掌握复杂算法如龙格库塔算法,有助于我们对相关数值分析方法的理解,亦能够提升编程的能力,这也是大家课上将会学习的内容。
四、关于动态系统的研究
可以发现,动态系统这个名词与太多太多东西相关,从求解来看,就有求解算法的研究;从应用场景来看,生物、电气、社会、经济等都可以用上;从知识涉及面来看,其要掌握线性代数、微积分、控制理论、计算机等相关知识;从研究目标来看,有研究动态系统的分析方法,亦有研究控制方法等等。
同时,目前有一类较为前沿的研究是,将机器学习等基于数据驱动的方法运用到动态系统的分析与控制之中,这将解决许多传统分析方法难以解决的问题,从而给各个学科带来新的发展。
五、总结
本文集将相对独立的介绍动态系统的经典分析方法与理论,以及部分有趣前沿的方法,同时与电力系统建模分析与控制相结合,旨在传达基本的思考方式与学习思路。