在上一篇博文中,我提到了,生活中方方面面都是动态系统,并稍微提了一下现代控制理论里的State-Space Representation。这篇博文将描述在现代控制理论中如何表示动态系统。
既然你选择看这篇博文,你对于以下这张图肯定不陌生:
对于系统(plant),变量 是输入, 是输出,可以代表系统的全部动态信息或者部分信息。
上一篇博文提到了人口增长的例子:
假设我们每年统计一次,上面的式子可以变为离散表达式( 是采样时间):
如果外界有刺激输入,比方说粮荒或者大丰收,那么系统也可以表示为:
也即:
我们再看一个例子(Mass-Spring-Damper):
这个系统的数学表达式是(a是加速度,v是速度):
如果我们从一个动态的角度来描述这个系统,那么外力u,位置y,速度v(位置的微分,),加速度a(速度的微分,),都在变化:
线性时不变系统的State-Space Representation
对于连续的系统,我们可以表示为:
with
对于离散的系统:
with
这里,值得注意的是,有时候便于计算,会将连续系统转化为离散系统,那 和 的关系是:
也即,
.
回想上一篇博文中稳定性的判断:当 的所以特征值的实数部分都是负数时,系统稳定。那么对于,如果需要系统稳定,我们则需要它的所有特征值的模长小于1。如下图所示:
在复数坐标系中特征值,让连续系统稳定的是左半边,意思是实数部分为负数;让离散系统稳定的是单位圆内,意思是模长小于1。
也可根据下面的MATLAB代码来感受它们的一一对应:
%%
clear, close all, clc
n = 10;
CC = jet(n*5);
A = -randi(10,n,n);
eigA = eig(A)
subplot(1,2,1);
hold on
for k=1:n
plot(real(eigA(k)), imag(eigA(k)),'*','Color',CC(k*5,:),'LineWidth',1.2)
end
ax = 30;
axis([-ax ax -ax ax]);
axh = gca;
line(get(axh,'XLim'), [0 0], 'Color', 'k', 'LineWidth',1, 'LineStyle', '-');
line([0 0], get(axh,'YLim'), 'Color', 'k', 'LineWidth',1, 'LineStyle', '-');
dt = 0.01;
At = A*dt+eye(n);
eigAt = eig(At)
subplot(1,2,2);
hold on
for k=1:n
plot(real(eigAt(k)), imag(eigAt(k)),'*','Color',CC(k*5,:),'LineWidth',1.2)
end
viscircles([0,0],1);
ax = 10;
axis([-ax ax -ax ax]);
axh = gca;
line(get(axh,'XLim'), [0 0], 'Color', 'k', 'LineWidth',1, 'LineStyle', '-');
line([0 0], get(axh,'YLim'), 'Color', 'k', 'LineWidth',1, 'LineStyle', '-');
(对应关系是)
从常微分方程到State-Space Representation
常微分方程可以是很多阶的,比方说上面的mass-spring-damper的例子就是二阶的,而State-Space Representation是一阶。那么我们如何把常微分方程改成State-Space Representation呢?先看一个普遍的表达式:
.
我们可以定义一个空间向量来表示 以及它的各阶微分:
所以,
而 可以通过隔离上面的常微分方程得到:
所以,
用矩阵的方式表达,为:
也即,
其中,
再回看Mass-Spring-Damper的例子:
我们设空间向量:
,
所以,
也即