基础数学回顾:线性代数、概率论与优化理论

说实话,很多做控制的同行,一听到「数学」两个字就头疼。我当年刚入行时也一样,觉得搞算法就是调调PID参数,哪用得上什么矩阵、特征值?

直到我第一次做多轴协同控制,系统怎么调都震荡,最后发现是状态耦合没解对。嗯,从那以后我老老实实把线性代数捡了起来。

今天咱们就把控制算法里最常用的数学工具过一遍。不搞纯理论推导,只讲你写代码、调参数时真正用得上的东西。

矩阵运算:控制系统的「语言」

你想想看,一个多输入多输出系统,如果不用矩阵,光写方程就能写满一黑板。矩阵说白了就是「批量处理」的工具。

我个人习惯把状态空间方程写成这样:

x_dot = A * x + B * u
y = C * x + D * u

这里的A、B、C、D全是矩阵。A矩阵描述系统内部怎么演化,B矩阵描述控制输入怎么影响状态,C矩阵描述你观测到了什么。

举个实际例子。我在做无人机姿态控制时,状态向量是 [roll, pitch, yaw, roll_rate, pitch_rate, yaw_rate],一共6个状态。A矩阵就是6x6的,描述了角速度怎么影响角度,以及角加速度怎么影响角速度。

核心要点:矩阵乘法不满足交换律,AB ≠ BA。这在控制系统里特别重要——你施加控制的顺序会影响结果。

矩阵运算里还有个东西叫「逆矩阵」。A的逆矩阵记作A⁻¹,满足A * A⁻¹ = I。在控制里,求逆经常出现在解耦、状态观测器设计这些地方。

注意:不是所有矩阵都有逆。行列式为0的矩阵是「奇异矩阵」,没有逆。我在项目中遇到过这种情况——设计的控制器矩阵奇异,仿真直接报错。后来检查发现是状态选取有冗余,两个状态线性相关了。

特征值与特征向量:系统的「灵魂」

特征值这东西,我第一次学的时候觉得抽象得要命。后来做系统稳定性分析才明白——特征值就是系统的「性格」。

定义很简单:对于方阵A,如果存在非零向量v和标量λ,使得:

A * v = λ * v

那么λ就是特征值,v就是对应的特征向量。

在控制领域,特征值决定了系统的动态行为:

  • 特征值实部为负 → 系统稳定(衰减)
  • 特征值实部为正 → 系统不稳定(发散)
  • 特征值有虚部 → 系统有振荡

说白了,你设计控制器就是在「配置特征值」。把特征值放到左半平面,系统就稳定。放到你想要的位置,系统就有你想要的响应速度。

个人经验:我曾经调试一个倒立摆系统,怎么调参数都立不住。后来算了一下A矩阵的特征值,发现有一个特征值实部为正——系统天生不稳定。这时候光调PID没用,得用状态反馈把特征值「推」到左半平面。这就是极点配置法的核心思想。

高斯分布:噪声的「标准模型」

实际系统中到处都是噪声。传感器噪声、执行器噪声、环境扰动...这些噪声怎么建模?

高斯分布是最常用的模型。它的概率密度函数长这样:

p(x) = (1 / sqrt(2πσ²)) * exp(-(x-μ)² / (2σ²))

μ是均值,σ是标准差。68%的数据落在μ±σ范围内,95%落在μ±2σ范围内。

为什么大家都用高斯分布?两个原因:

  1. 中心极限定理——很多独立随机变量的和趋近于高斯分布
  2. 数学性质好——计算方便,有闭式解

我在做卡尔曼滤波时,就假设过程噪声和观测噪声都是高斯分布。这个假设在大多数工程场景下都够用。

协方差矩阵:多维变量的「关系网」

单个变量的不确定性用方差描述。多个变量之间的关系呢?用协方差矩阵。

对于n维随机向量x,协方差矩阵P是n×n的对称矩阵:

P[i][j] = E[(x_i - μ_i)(x_j - μ_j)]

对角线元素是各个变量的方差,非对角线元素是变量之间的协方差。

协方差矩阵在控制里太重要了:

  • 卡尔曼滤波里,P矩阵表示状态估计的不确定性
  • 系统辨识里,协方差矩阵用来评估参数估计的精度
  • 传感器融合里,协方差矩阵决定各个传感器的权重

关键理解:协方差矩阵越大,说明不确定性越大。协方差矩阵的非对角线元素不为0,说明变量之间有相关性——一个变量的信息可以帮助推断另一个变量。

最小二乘法:最朴素的「拟合」

最小二乘法,说白了就是找一条线,让所有点到这条线的距离平方和最小。

数学形式:给定数据点(x_i, y_i),要找参数θ使得:

J(θ) = Σ(y_i - f(x_i, θ))² 最小

对于线性模型 y = Xθ,解是:

θ = (XᵀX)⁻¹Xᵀy

这个公式我闭着眼睛都能写出来。为什么?因为我在系统辨识里用了不下上百次。

避坑指南:我曾经用最小二乘法辨识一个系统的传递函数,结果算出来的参数完全不对。后来发现是输入信号不够丰富——激励信号要包含足够的频率成分,才能把系统的各个模态都「激发」出来。这就是所谓的「持续激励条件」。

梯度下降:迭代求解的「爬山法」

最小二乘法有闭式解,但不是所有问题都有。当目标函数太复杂时,就得用迭代方法。

梯度下降的思路很简单:沿着梯度反方向走,就能让函数值下降。

θ_new = θ_old - α * ∇J(θ_old)

α是学习率,∇J是梯度。

学习率怎么选?太小了收敛慢,太大了可能发散。我一般从0.01开始试,观察损失函数的变化曲线,再调整。

在控制领域,梯度下降的应用场景:

  • 神经网络控制器训练
  • 模型预测控制中的在线优化
  • 自适应控制中的参数更新

注意:梯度下降只能找到局部最优,不保证全局最优。如果你的目标函数是非凸的,初始值的选择就特别重要。我习惯多试几个初始点,选效果最好的那个。

小结

这一章的内容,说白了就是控制算法的「工具箱」:

  • 矩阵运算帮你处理多变量系统
  • 特征值告诉你系统稳不稳定
  • 高斯分布和协方差矩阵帮你处理不确定性
  • 最小二乘和梯度下降帮你从数据中学习模型

这些工具在后面的章节里会反复用到。别急,咱们慢慢来。

下一章,咱们开始讲状态空间模型——控制算法的「骨架」。