
T-S模糊系统这几个字最早是我在读一篇倒立摆控制论文时撞见的。当时我以为它和常见的模糊控制是一回事无非把专家经验写成如果……那么……后来把公式抄到纸上自己推了一遍才发现它的骨架其实更接近线性系统理论前提部是模糊的结论部却是实打实的线性方程。这个设计让整个系统可以被写成若干线性子系统的加权求和也就是常说的 T-S 模糊系统Takagi-Sugeno Fuzzy System1985 年由 Takagi 和 Sugeno 提出。它能做的事很具体——把一类非线性系统精确或近似地拆成几块线性模型用 PDC并行分布补偿配一组线性控制器最后把稳定性判定交给 LMI 求解器。这份笔记适合手里已经有状态空间模型、想给非线性对象上一个能证明稳定性的控制器的朋友如果你只是想让规则库更像人话那它未必是最好的选择。下面按选型、建模、判稳、踩坑的顺序整理都是我自己推过、跑过、在板子上验过的东西。1. 为什么我把控制器从 Mamdani 换成了 T-S1.1 两种模糊推理的真正分界线在结论部很多人把 Mamdani 和 T-S 的差别理解成一个输出模糊、一个输出精确这样说没错但不够用。真正的分界线在结论部Mamdani 的每条规则输出的是一个模糊集推理完之后必须做一次面积中心centroid或者最大隶属度去模糊化这个过程的输入输出关系是一个黑箱映射你写不出解析表达式也就很难做稳定性分析。T-S 的每条规则输出的是一个线性函数常值只是线性函数的特例去模糊化退化成加权平均整个系统能统一写成$$ \dot{x}(t)\sum_{i1}^{r}h_i(z(t))\big(A_i x(t)B_i u(t)\big) $$这种形式的好处是它是关于 $h_i$ 的凸组合而 $h_i$ 只跟前提变量 $z$ 有关。也就是说在任何瞬间系统的瞬时模型都落在 $A_1,\dots,A_r$ 构成的凸包里。这个凸包性质就是后面所有 LMI 结论的地基。我在做一个小型两轮自平衡车时最初选的是 Mamdani。规则调得挺舒服直行没问题但一到侧向扰动恢复就开始来回摆我找不到任何理论工具去解释为什么它摆只能靠试参数。换成 T-S 之后虽然建模那两天很难受但后面每一个异常现象都能对应到一个具体的矩阵条件不满足排查效率完全不是一个量级。1.2 它在工程现场的三个硬优势第一可分析性。系统能写成解析形式Lyapunov、LQR、观测器、H∞ 这些成熟工具全部可以直接搬过来只是把单个矩阵换成一族矩阵加一组权重。第二与线性理论无缝对接。每个子系统本身是线性的控制器可以沿用 PDC 思路第 $i$ 条规则对应一个线性反馈增益 $F_i$整体控制量是这些增益的加权和。这样你调参时仍然是在调几个线性控制器心理负担比调一个纯非线性网络小得多。第三存在精确表示这条捷径。扇区非线性法可以把相当一部分非线性系统无损地写成 T-S 形式误差为零不是近似。这一点是 T-S 相对神经网络建模最本质的优势——神经网络逼近总有残余误差而精确 T-S 表示在某些结构下真的没有。第四个好处容易被忽略算得快。Mamdani 离散实现时每条规则都要在输出论域上离散化后做重心计算规则一多就顶不住T-S 只需要算 $r$ 个隶属度的乘积再做加权计算量基本线性于规则数。1.3 什么场景下我会劝人别碰 T-S如果项目的核心诉求是可读的专家规则比如工艺参数诊断、家电档位决策Mamdani 反而更合适因为它的结论本身就是一句人话操作员能看懂并修改。T-S 的结论是一组线性系数人看着就是一堆数字。如果前提变量超过四五个规则数会指数增长LMI 规模也跟着爆这时候 T-S 的建模成本会超过收益。如果系统里有强非光滑环节——库仑摩擦、继电器、死区——扇区非线性法很难找到紧的界硬做出来的模型会非常保守控制器性能还不如老老实实做一个增益调度。还有一种情况如果你连状态空间模型都没有数据驱动、自适应或者强化学习会更直接。T-S 的前提是你对系统结构有基本认知。2. 一条 T-S 规则的完整解剖2.1 前提部模糊、结论部线性语法长什么样标准形式是这样的第 $i$ 条规则$$ \text{IF } z_1(t) \text{ is } M_{i1} \text{ and } \cdots \text{ and } z_p(t) \text{ is } M_{ip}, \quad \text{THEN } \dot{x}(t)A_i x(t)B_i u(t) $$这里有三组信息要分清$z(t)[z_1,\dots,z_p]^T$ 是前提变量向量它可以是状态、可以是状态的函数、也可以是外部可测量$M_{ik}$ 是定义在 $z_k$ 论域上的模糊集就是一条隶属度曲线$A_i,B_i$ 是第 $i$ 个子系统的常值矩阵。最容易搞混的是 $z$ 和 $x$ 的关系。$z$ 不一定等于 $x$它可以只取 $x$ 的一部分分量也可以是 $x$ 的非线性组合。这一点非常关键选哪些量当前提变量直接决定了能不能做到精确表示也决定了规则数量。我在下面第 3 节会专门讲这个取舍。2.2 归一化权重为什么必须除以总和每条规则的激活强度是各前提隶属度的连乘$$ w_i(z)\prod_{k1}^{p}M_{ik}(z_k), \qquad h_i(z)\frac{w_i(z)}{\sum_{j1}^{r}w_j(z)} $$分母这一步不是可选项。工程上我见过有人省掉除法直接用 $w_i$ 加权短时间看不出问题但会埋两个雷一是系统矩阵不再落在凸包里所有基于凸性的稳定性判据失效你证不了稳定二是当所有 $w_i$ 都很小时比如输入落在几个隶属度函数尾巴之间的盲区输出会整体趋近于零表现为执行器突然卸载实机上是非常危险的。归一化之后有两个性质$h_i\ge 0$ 且 $\sum h_i1$。这两个性质看起来平淡但它是整套理论的入口。所有模糊系统的李雅普诺夫方法本质上都在用这个凸组合结构把无限多个可能的瞬时系统压缩成有限个顶点的条件。提示如果单前提变量且用互补的隶属度函数比如一个升一个降构造上就满足两者之和为 1连乘之后自然归一可以省掉除法。多前提变量按网格划分、每个变量各自归一乘积同样自动归一。只有当你用了不完备的规则库某些区域没有规则覆盖才必须显式除以总和——而这种不完备本身在设计上就值得反思。2.3 手算一个两规则例子把流程走一遍理论看多了容易飘我自己是强迫自己手算过几遍才把直觉建立起来的。设两条规则前提变量就是 $x$ 本身规则 1IF $x$ is $A_1$ THEN $y2x1$规则 2IF $x$ is $A_2$ THEN $y-x3$$A_1$ 用三角形峰值在 $x0$支撑区间 $[-2,2]$$A_2$ 峰值在 $x2$支撑区间 $[0,4]$。取 $x1$步骤规则 1规则 2隶属度 $\mu$$(2-1)/20.5$$(4-2)/21$不峰在 2左半段从 0 升到 2$\mu(1-0)/20.5$局部输出$2\times113$$-132$归一化权重$0.5/10.5$$0.5/10.5$最终 $y0.5\times30.5\times22.5$。这个例子的价值在于让你看清一点T-S 的输出永远落在各局部线性输出的凸包内它不会给出比所有局部模型都更极端的值。这也解释了为什么 T-S 控制器通常比纯非线性控制器温顺——它的行为被凸包约束住了能保证稳定性代价是可能不够激进。2.4 隶属度函数怎么选三角、高斯、梯形的实际代价类型计算量光滑性支撑常见用途三角形最低两次比较一次乘除$C^0$有折点有限实时性优先、嵌入式梯形低$C^0$有限需要平台区容错段高斯中一次 exp$C^\infty$无限需要求导、理论推导广义钟形较高$C^\infty$无限需要调形状参数我自己的习惯是先按理论方便选高斯做数学推导和 LMI 验证准备上板时再换成三角形或分段线性用分段线性去逼近同一个形状。原因是高斯函数在嵌入式上算 exp 很贵而在大多数控制场景里形状逼近的误差远小于模型本身的误差。换的时候记得重新跑一遍仿真因为形状变了之后等价于前提变量到各子系统的插值曲线变了闭环响应会有可见的差异。还有一个坑高斯的支撑是无限的理论上任何 $z$ 都会让每条规则有非零激活度。这在数值上意味着你永远得不到纯某个子系统的行为如果某个 $A_i$ 本身是不稳定的在凸组合里靠其他规则抵消一旦权重计算被浮点误差扰动可能出现微弱的漂移。梯形和三角形有有限支撑在边界上更干脆。3. 扇区非线性法把非线性系统无损写进 T-S3.1 局部线性化和精确 T-S 表示不是一回事很多入门材料讲 T-S 建模时先用雅可比线性化选一个工作点展开然后说在不同工作点线性化就得到不同的 $A_i$。这条路走得通但它是近似而且是有明确适用半径的近似。你在工作点附近稳不稳出了这个范围它管不了。精确 T-S 表示走的是另一条路。核心思想是如果非线性项在一个紧集上是有界的那么它就能写成上下界之间的一个凸组合。形式化一点设 $f(x)$ 在区域 $\Omega$ 上满足 $\underline{f}\le f(x)\le \overline{f}$那么$$ f(x)h_1(x)\underline{f}h_2(x)\overline{f},\quad h_1\frac{\overline{f}-f(x)}{\overline{f}-\underline{f}},\ h_2\frac{f(x)-\underline{f}}{\overline{f}-\underline{f}} $$且 $h_1h_21$、两者都非负。把 $f(x)$ 乘在某个状态上就自然得到两个线性子系统。这就是扇区非线性法的全部逻辑没有任何玄学成分。关键在于你能不能找到足够紧的上下界——界越松模型越保守控制器越怂。3.2 一个一维例子的完整手算拿一个能说明问题又不至于太繁的例子$\dot{x}-x-x^3$。这是个典型的自阻尼非线性$x$ 大时阻尼变强。假设我们关心 $|x|\le d$ 的范围$d0$ 是设计者定的比如 $d1$。先把非线性拆开看$-x-x^3-(1x^2)x$。这里 $x^2$ 在 $[-d,d]$ 上取值范围是 $[0,d^2]$很不巧它不是常值所以我们把它当成前提变量 $zx^2$。于是瞬时系统矩阵是 $-(1z)$$z$ 在 $[0,d^2]$ 之间跑。取两个顶点$$ A_1-(10)-1,\qquad A_2-(1d^2) $$对应的隶属度设计成$$ M_1(z)\frac{d^2-z}{d^2},\qquad M_2(z)\frac{z}{d^2} $$验证一下插值是否精确$$ h_1A_1h_2A_2\frac{d^2-z}{d^2}\cdot(-1)\frac{z}{d^2}\cdot(-(1d^2))-1\frac{z}{d^2}-\frac{z}{d^2}-z-(1z) $$完全吻合。这意味着在 $|x|\le d$ 内这个两规则 T-S 模型和原非线性系统逐点等价不存在建模误差。而且 $x^2$ 是在线可测量的状态可测时前提变量在实机上是能算出来的。这个例子还顺带说明了一个常见误解很多人以为精确 T-S 表示要求非线性项只能出现在状态乘子上。实际上只要你能把非线性写成某个有界函数乘以状态的形式就能做分解。$-x^3$ 看起来是三次项写成 $-(x^2)\cdot x$ 之后$x^2$ 天然就是前提变量。3.3 倒立摆经典例子里的一个隐藏陷阱小车倒立摆几乎是 T-S 文献里出现频率最高的对象。简化模型忽略离心项长这样$$ \dot{x}_1x_2,\qquad \dot{x}_2\frac{g}{l}\sin(x_1)-\frac{k}{m}x_2\frac{1}{ml^2}u $$其中 $x_1$ 是摆角$x_2$ 是角速度。经典文献给的是两规则模型规则 1IF $x_1$ 接近 0THEN 用 $g/l$ 作为线性化系数规则 2IF $x_1$ 接近 $\pm\pi/2$THEN 用 $\frac{2g}{\pi l}$ 作为线性化系数为什么是 $2/\pi$因为在 $|x_1|\le\pi/2$ 上$\sin(x_1)/x_1$ 的取值范围是 $[2/\pi,,1]$端点就是这两个值。把 $\sin(x_1)$ 写成 $\big(\sin(x_1)/x_1\big)\cdot x_1$那个系数就被夹在 $2/\pi$ 和 $1$ 之间。这里就是陷阱所在。如果你按文献的做法在 $x_1$ 上直接设计两条高斯隶属度曲线比如常用的 sigmoid 组合形式 $M_1(1-\frac{1}{1e^{-7(x_1-\pi/4)}})\cdot\frac{1}{1e^{-7(x_1\pi/4)}}$那么插值出来的曲线是 $M_1 x_1M_2\frac{2}{\pi}x_1$它不等于$\sin(x_1)$只是逼近。这个模型是近似模型不是精确模型。想做到精确前提变量就不能取 $x_1$而要取 $z\sin(x_1)/x_1$ 本身。它的范围是 $[2/\pi,1]$把 $z$ 当前提变量之后$$ h_1\frac{z-2/\pi}{1-2/\pi},\qquad h_2\frac{1-z}{1-2/\pi} $$这样才是逐点精确的。代价是 $z$ 本身是个非线性函数在线计算时要么实时算 $\sin$要么用查表。我在做摆类对象时通常的做法是控制器设计阶段用精确形式$z$ 作前提变量保证理论成立实现阶段用查表或者低阶多项式逼近 $z$然后在仿真里对比两条曲线的偏差把偏差控制在可接受范围内再上板。3.4 规则爆炸什么时候该砍前提变量规则数是 $m^p$$m$ 是每个前提变量的模糊集个数$p$ 是前提变量个数。听起来没什么算一下就知道厉害了前提变量数 $p$每个变量 3 个模糊集PDC 需要验证的 LMI 条数29453273784813321524329766LMI 条数是 $r(r1)/2$$r$ 是规则数。到了 5 个前提变量、243 条规则光矩阵不等式就有近三万条求解器基本上跑不动就算跑出来得到的增益精度也很难保证。我自己的取舍原则是三条第一只有真正携带非线性的量才当前提变量。如果某个状态在方程里是线性的、系数为常数它就不该进前提部。很多新手把全部状态都当前提变量纯属自找麻烦。第二能在建模阶段消掉的非线性就不要留给前提部。比如做一个坐标变换把 $x_1x_2^2$ 这种耦合变成两个独立项规则数可能直接减半。第三规则不是越多越精确。如果你只是为了提升逼近精度而细分隶属度先问一问提升的那点精度是不是被模型不确定性淹没了。绝大多数工程问题里三到五条规则的提升空间远大于三十条规则。4. PDC 加 LMI把稳定性判断外包给求解器4.1 公共二次 Lyapunov 函数给出的充分条件最基本的判据是找一个正定矩阵 $P$让所有子系统都满足 $A_i^TPPA_i0$。这个条件的意思是一个公用的二次函数 $Vx^TPx$ 对所有子系统的导数都是负的。它的充分性证明非常直接闭环里瞬时系统矩阵是 $\sum h_iA_i$那么$$ \dot{V}\sum_i h_i x^T(A_i^TPPA_i)x $$每一项的系数 $h_i\ge0$只要每个括号里的矩阵都是负定的加权和就是负定的。但要清楚它的定位这是充分条件不是必要条件。系统性未必存在公共 $P$但闭环仍然可能是稳定的。我在一个三规则的摆系统上就吃过这个亏公共 $P$ 死活证不出来我以为控制器设计有问题折腾了一周换前提变量、调隶属度形状最后换成模糊 Lyapunov 函数$V\sum h_ix^TP_ix$一次就过了。所以 LMI 不可行的时候先别急着改控制器先想想是不是判据太保守了。4.2 PDC 闭环里 $i\ne j$ 的交叉项为什么必须单独写PDC 控制器是 $u-\sum_{j1}^rh_jF_jx$。代入系统方程闭环变成双重求和$$ \dot{x}\sum_{i1}^r\sum_{j1}^rh_ih_j\big(A_i-B_iF_j\big)x $$注意这里是 $h_ih_j$有 $r^2$ 项。其中 $ij$ 有 $r$ 项$i\ne j$ 有 $r(r-1)$ 项而后者是对称出现的——$h_ih_j$ 和 $h_jh_i$ 是两个不同的项但系数一样可以合并成$$ h_ih_j\left[\big(A_i-B_iF_j\big)\big(A_j-B_iF_i\big)\right],\quad ij $$所以只需要对 $G_{ij}$ 和 $G_{ji}$ 的对称部分设条件也就是$$ \left(\frac{G_{ij}G_{ji}}{2}\right)^TPP\left(\frac{G_{ij}G_{ji}}{2}\right)0,\quad ij $$我见过最常见的错误是把交叉项漏掉只验证 $A_i-B_iF_i$ 稳定就收工。这在两规则系统里往往还能勉强跑规则一多必翻车而且翻得很隐蔽——仿真上看不出来实机上一受扰就发散。原因很直观$i\ne j$ 的项对应的是第 $i$ 个子系统的模型配第 $j$ 个控制器这种错配恰恰是模糊控制最容易出问题的地方不验证就等于没验证。4.3 一段能直接跑的 MATLAB YALMIP 代码下面这段是我自己的模板做过变量代换避免双线性问题。令 $XP^{-1}$$M_iF_iX$则条件全部变成关于 $X,M_i$ 的线性矩阵不等式。% A{i}, B{i} 已经准备好了r 是规则数 r numel(A); n size(A{1},1); m size(B{1},2); X sdpvar(n,n); M cell(1,r); for i 1:r M{i} sdpvar(m,n); end ops sdpsettings(solver,sedumi,verbose,1); C [X 1e-4*eye(n)]; % 对角项A_i X X A_i - B_i M_i - M_i B_i 0 for i 1:r C [C, A{i}*X X*A{i} - B{i}*M{i} - M{i}*B{i} -1e-5*eye(n)]; end % 交叉项i j用对称部分的形式 for i 1:r for j i1:r S A{i}*X X*A{i} A{j}*X X*A{j} ... - M{j}*B{i} - B{i}*M{j} ... - M{i}*B{j} - B{j}*M{i}; C [C, S -1e-5*eye(n)]; end end sol optimize(C, [], ops); if sol.problem 0 P inv(value(X)); F cell(1,r); for i 1:r F{i} value(M{i}) * P; % F_i M_i * X^{-1} end disp(可行增益已求出); else disp([不可行, sol.info]); end几个实操细节值得说一下。右侧那个-1e-5*eye(n)是故意留的余量不要写成严格 0求解器在边界上会给你一堆数值上勉强满足的解实机上根本不稳。还有X 1e-4*eye(n)用来防止求解器把 $X$ 推到数值奇异这个约束在大部分情况下不会破坏可行性但如果你的系统本身接近奇异可能需要把它放松到1e-6。拿到增益后闭环实现在线部分就是加权求和几行就够function u ts_pdc(x, F, A, B, mu) % mu: 各前提变量在各模糊集上的隶属度已归一化为 h h compute_weights(mu); u 0; for i 1:numel(F) u u - h(i) * (F{i} * x); end end4.4 LMI 不可行时的四条退路第一条换 Lyapunov 函数结构。从公共二次型换成模糊 Lyapunov 函数 $V\sum h_ix^TP_ix$或者分段二次型按前提空间分区域每个区域一个 $P$。这是最有效的放宽手段代价是引入更多变量求解变慢而且基于模糊 Lyapunov 的结论通常要求前提变量的导数有界会出现 $\dot{h}_i$ 项需要额外条件。第二条加松弛变量。经典松弛思路是引入矩阵 $S_{ij}\ge0$把交叉项条件写成 $\Phi_{ij}S_{ij}0$ 且配合边界约束用额外的自由度去换可行性。这类松弛条件在文献里有一大堆实际选哪个很大程度上取决于你的系统结构。第三条重新审视建模。很多时候不可行的根子在模型太保守前提变量的界取得太宽比如你把 $|x_1|\le\pi/2$ 改成 $|x_1|\le\pi$界一松$A_i$ 的差距拉大可行性急剧下降。把工作范围收窄到真正关心的区域可行性往往会回来。第四条接受局部结论。放弃全状态空间的稳定性转而估计吸引域在给定的椭球 $x^TPx\le c$ 内验证条件成立把这个椭球当作吸引域的子集。工程上这通常已经够用了因为你的实际工作区间本来就不是状态空间里的任意一点。5. 我在实机上踩过的五个坑5.1 权重和不为 1 导致的隐形偏差前面提过这里单独展开因为它是实机表现最诡异的一个。当时我为了减少计算量把某个变量的三条隶属度函数做成了不完备覆盖中间那段有个缺口。仿真上因为状态轨迹没走到那个区域一切正常。实机上操作员手动推了一下状态进了缺口区所有 $w_i$ 都接近零归一化分母很小$h_i$ 的数值变得极其敏感执行器输出出现高频抖动。修复方式很简单把那三条曲线改成构造上互补的形式或者保留除法但加上分母下限保护。我现在的做法是每次写完隶属度函数先扫一遍前提变量的整个工作范围用代码打印 $\sum w_i$ 的最小值低于 0.9 就直接报错重做不给自己留侥幸。5.2 前提变量必须在线可测而且采样要同步这是个看起来明显、实际经常出问题的地方。用一个 T-S 观测器时我把 $x_2$ 也放进了前提变量结果 $x_2$ 是观测出来的估计值。这就形成了前提变量依赖观测、观测又依赖控制器的隐式耦合仿真时看不出来因为仿真里估计误差很小实机上噪声一大估计值抖动导致权重抖动权重抖又反过来影响观测形成一个小幅自激。原则是前提变量优先选直接可测的物理量。如果实在避不开估计值就把观测器的收敛速度设计得比控制器快一个量级或者对估计出来的前提变量加低通滤波滤波时间常数取采样周期的 3 到 5 倍。另外多路信号的采样必须在同一个时间基准上差一个周期都会让权重算错。5.3 观测器和控制器分开设计的陷阱线性系统里有个分离原理观测器和控制器可以各自独立设计。T-S 系统里这个原理一般是不成立的不能直接套。原因是闭环里会出现 $A_i-B_iF_j$ 和观测误差动力学的交叉项这些项的组合结构与前提变量的权重耦合在一起分开设计的两个 $P$ 矩阵没法统一。可行的做法是用同一个 $P$ 矩阵联合求解控制器增益和观测器增益但这样问题会变成双线性的需要迭代 LMI 之类的算法每次迭代解一个 LMI来回几轮直到收敛。实践中我的建议是如果精度要求高、状态确实不可测老老实实做联合设计如果只是懒得装传感器那就加传感器。多买一个编码器比多调两周算法划算得多。5.4 离散化的顺序会破坏精确性T-S 模型连续域下的精确性到了离散域就不一定还在。用欧拉法把 $\dot{x}AxBu$ 离散成 $x_{k1}x_kT_s(Ax_kBu_k)$这是对连续系统的一阶近似和原来的非线性系统之间又多了一层误差两层误差叠在一起理论上精确表示这块招牌就没了。我的处理办法是先在连续域完成全部设计建模、PDC、LMI再对每个线性子系统用零阶保持做精确离散化得到 $A_{di},B_{di}$然后用离散形式重新验证稳定性$$ \big(A_{di}-B_{di}F_j\big)^TP\big(A_{di}-B_{di}F_j\big)-P0 $$注意离散情况下的条件是关于 $F_j$ 二次的双线性不能直接线性化。常用的两条路一是用 Schur 补引理配合锥互补线性化CCL迭代二是用 ILMI 算法从初始增益出发迭代求解。另外采样周期 $T_s$ 的选择也有讲究——$T_s$ 太大奇异摄动效应和计算延迟会淹没模型精度太小前提变量的变化在采样间隔内可忽略这个假设成立但计算负担上升。摆类系统我一般取 1 ms 到 2 ms电机类取 0.5 ms 到 1 ms。5.5 仿真稳、实机抖先查饱和和执行器动态这个坑我踩了不止一次后来总结出一个固定的排查顺序排查顺序检查点典型现象1控制量是否饱和大扰动后高频抖限幅处来回切2执行器带宽小幅高频抖和指令无关3权重计算是否出现零除/极小分母输出有毛刺位置与状态值相关4前提变量符号约定偶发反向现象固定在某侧5定点/浮点精度数值变大后出现低频漂移第一次踩的时候我以为是 LMI 增益算错了重新算了一遍又一遍结果发现是控制量饱和之后PDC 的加权结构被限幅破坏闭环等效成了一个完全不同的系统。教训是如果你的稳定性证明建立在 $u-\sum h_iF_ix$ 上那就在设计阶段把饱和考虑进去或者给控制量留足余量。最省事的做法是把 $|u|$ 的上限作为约束加进仿真先看仿真会不会碰到会碰到就先调小 $F_i$ 的范数。6. 这份笔记还能往哪几个方向延6.1 从稳定到性能H∞ 与保性能控制前面整套推导只回答了稳不稳没回答稳得多好。实际项目里抗扰能力和跟踪误差往往比稳定性更被关心。T-S 的 H∞ 版本思路是把外部扰动 $w$ 引入系统方程 $\dot{x}\sum h_i(A_ixB_iuB_{wi}w)$然后求解一个带衰减率 $\gamma$ 的 LMI让扰动到输出的增益小于 $\gamma$。形式上就是多一组矩阵不等式代码里多几行但参数 $\gamma$ 的整定需要迭代——从小到大试第一个可行的 $\gamma$ 就是能达到的最优值。保性能控制则是把二次型性能指标的上界写进 LMI做法类似。6.2 输出反馈与观测器从状态反馈到工程可落地状态反馈在仿真里很舒服实机上往往拿不到全状态。输出反馈有两条路一条是观测器加状态反馈需要处理上面提到的分离原理问题另一条是直接设计静态输出反馈 $u-\sum h_iK_iy$这个问题的难点在于约束是双线性的标准 LMI 工具直接上不去需要变量代换或者迭代算法。迭代 LMI 的思路值得记一下固定 $P$ 求 $K$再固定 $K$ 求 $P$来回几轮。不保证收敛但实践上只要初始值别太离谱多数情况下三到五轮就能稳定下来。我现在写这类代码都会在外面套一个最大迭代次数和收敛判据避免进入死循环。6.3 追踪控制与积分型结构做位置伺服的时候纯状态反馈会有稳态误差。惯用做法是引入误差积分 $\dot{\sigma}r-y$把 $\sigma$ 扩到状态里原来的 T-S 结构还能保持因为积分环节是线性的只是状态维数上升。这里有个容易忽略的点积分状态不该进前提变量它跟系统的非线性没有关系把它放进前提部只会徒增规则数。最后再提一句很多人问我但我觉得问错了方向的问题T-S 模糊系统到底算不算模糊从语言学角度看它确实丢掉了 Mamdani 那种如果温度偏高那么阀门开大的直观表达但从控制理论角度看它把一个难处理的非线性问题转化成了一族线性问题和一组凸约束这个转化本身就是它的价值所在。我用了两年多的体会是别纠结它叫不叫模糊把它当成带权重插值的线性变参数系统来理解反而每一步推导都变得理所当然。这也解释了为什么很多做增益调度的工程师上手 T-S 特别快——他们本来就在做类似的事只是换了一套更便于用 LMI 验证的数学语言。