1. 核心思想
当被控对象的数学模型未知或高度非线性时,我们可以用 模糊系统 作为万能逼近器,在线估计未知的非线性函数,并据此设计自适应控制器,使系统输出跟踪期望轨迹。
- 模糊系统:通过 IF-THEN 规则和隶属函数,能够以任意精度逼近紧集上的连续函数。
- 自适应律:根据 Lyapunov 稳定性理论,在线调整模糊系统的参数(如结论参数),保证闭环信号有界且跟踪误差收敛。
2. 问题描述
考虑一类二阶 SISO 非线性系统:
x¨=f(x,x˙)+g(x,x˙) u\ddot{x} = f(x,\dot{x}) + g(x,\dot{x})\,ux¨=f(x,x˙)+g(x,x˙)u
其中:
- xxx 为系统输出,uuu 为控制输入;
- f(⋅)f(\cdot)f(⋅) 为未知光滑非线性函数;
- g(⋅)g(\cdot)g(⋅) 为已知或符号已知的函数(本文假设 g=1g=1g=1 以便聚焦模糊逼近);
- 状态 x1=xx_1 = xx1=x, x2=x˙x_2 = \dot{x}x2=x˙ 可测。
控制目标 :设计控制律 uuu,使系统输出 x(t)x(t)x(t) 跟踪给定的参考轨迹 xd(t)x_d(t)xd(t),且所有信号有界。
3. 模糊系统设计
采用 Takagi-Sugeno 零阶模糊系统(也称模糊基函数网络):
f^(z∣θ)=θTξ(z)\hat{f}(z|\theta) = \theta^T \xi(z)f^(z∣θ)=θTξ(z)
其中:
- z=x1,x2Tz = x_1, x_2^Tz=x1,x2T 为输入向量;
- θ∈RM\theta \in \mathbb{R}^Mθ∈RM 为可调参数向量;
- ξ(z)=ξ1(z),...,ξM(z)T\xi(z) = \\xi_1(z), \\dots, \\xi_M(z)^Tξ(z)=ξ1(z),...,ξM(z)T 为模糊基函数向量,定义为:
ξi(z)=∏j=12μAji(zj)∑k=1M∏j=12μAjk(zj)\xi_i(z) = \frac{\prod_{j=1}^2 \mu_{A_j^i}(z_j)}{\sum_{k=1}^M \prod_{j=1}^2 \mu_{A_j^k}(z_j)}ξi(z)=∑k=1M∏j=12μAjk(zj)∏j=12μAji(zj)
- μAji(zj)\mu_{A_j^i}(z_j)μAji(zj) 为高斯隶属函数(中心 cjic_{ji}cji,宽度 σji\sigma_{ji}σji):
μAji(zj)=exp(−(zj−cji)22σji2)\mu_{A_j^i}(z_j) = \exp\left(-\frac{(z_j - c_{ji})^2}{2\sigma_{ji}^2}\right)μAji(zj)=exp(−2σji2(zj−cji)2)
模糊系统万能逼近性质 :对任意连续函数 f(z)f(z)f(z),存在最优参数 θ∗\theta^*θ∗ 使得逼近误差有界。
4. 自适应控制器设计
4.1 误差动态
定义跟踪误差:
e=xd−x,e˙=x˙d−x˙e = x_d - x, \quad \dot{e} = \dot{x}_d - \dot{x}e=xd−x,e˙=x˙d−x˙
定义滤波误差:
s=e˙+λe,λ>0s = \dot{e} + \lambda e, \quad \lambda > 0s=e˙+λe,λ>0
则:
s˙=x¨d−x¨+λe˙=x¨d−f−u+λe˙\dot{s} = \ddot{x}_d - \ddot{x} + \lambda \dot{e} = \ddot{x}_d - f - u + \lambda \dot{e}s˙=x¨d−x¨+λe˙=x¨d−f−u+λe˙
4.2 控制律与自适应律
取控制律:
u=x¨d+λe˙+ks−f^(z∣θ),k>0u = \ddot{x}_d + \lambda \dot{e} + k s - \hat{f}(z|\theta), \quad k > 0u=x¨d+λe˙+ks−f^(z∣θ),k>0
其中 f^\hat{f}f^ 为模糊系统对 fff 的估计。
代入 s˙\dot{s}s˙:
s˙=−ks+(f^−f)=−ks+θ~Tξ(z)−w\dot{s} = -k s + (\hat{f} - f) = -k s + \tilde{\theta}^T \xi(z) - ws˙=−ks+(f^−f)=−ks+θ~Tξ(z)−w
其中 θ~=θ^−θ∗\tilde{\theta} = \hat{\theta} - \theta^*θ~=θ^−θ∗,w=f−θ∗Tξw = f - \theta^{*T}\xiw=f−θ∗Tξ 为最小逼近误差(假设有界 ∣w∣≤wˉ|w| \leq \bar{w}∣w∣≤wˉ)。
4.3 Lyapunov 分析与自适应律
选取 Lyapunov 函数:
V=12s2+12γθ~Tθ~,γ>0V = \frac{1}{2}s^2 + \frac{1}{2\gamma}\tilde{\theta}^T\tilde{\theta}, \quad \gamma > 0V=21s2+2γ1θ~Tθ~,γ>0
求导:
V˙=ss˙+1γθ~Tθ^˙=s(−ks+θ~Tξ−w)+1γθ~Tθ^˙=−ks2−sw+θ~T(sξ+1γθ^˙)\dot{V} = s\dot{s} + \frac{1}{\gamma}\tilde{\theta}^T \dot{\hat{\theta}} = s(-k s + \tilde{\theta}^T\xi - w) + \frac{1}{\gamma}\tilde{\theta}^T \dot{\hat{\theta}} = -k s^2 - s w + \tilde{\theta}^T\left(s\xi + \frac{1}{\gamma}\dot{\hat{\theta}}\right)V˙=ss˙+γ1θ~Tθ^˙=s(−ks+θ~Tξ−w)+γ1θ~Tθ^˙=−ks2−sw+θ~T(sξ+γ1θ^˙)
为使 V˙≤0\dot{V} \leq 0V˙≤0(忽略 www 时),取自适应律:
θ^˙=−γsξ(z)\dot{\hat{\theta}} = -\gamma s \xi(z)θ^˙=−γsξ(z)
则:
V˙=−ks2−sw≤−ks2+∣s∣wˉ\dot{V} = -k s^2 - s w \leq -k s^2 + |s|\bar{w}V˙=−ks2−sw≤−ks2+∣s∣wˉ
当 ∣s∣>wˉ/k|s| > \bar{w}/k∣s∣>wˉ/k 时 V˙<0\dot{V}<0V˙<0,因此 sss 一致最终有界,进而 e,e˙e,\dot{e}e,e˙ 有界。
注:实际应用中常加入 σ‑修正或死区以避免参数漂移。
5. MATLAB 仿真示例
5.1 被控对象
考虑 Duffing 混沌系统(未知 fff):
x¨=−0.1x˙−x3+12cos(t)+u\ddot{x} = -0.1\dot{x} - x^3 + 12\cos(t) + ux¨=−0.1x˙−x3+12cos(t)+u
即 f(x,x˙)=−0.1x˙−x3+12cos(t)f(x,\dot{x}) = -0.1\dot{x} - x^3 + 12\cos(t)f(x,x˙)=−0.1x˙−x3+12cos(t),g=1g=1g=1。
我们假装不知道 fff 的表达式,用模糊系统逼近。
5.2 仿真代码
matlab
%% 基于模糊系统逼近的自适应控制仿真
clear; clc; close all;
%% 参数设置
dt = 0.001; % 仿真步长
T = 20; % 总时间
t = 0:dt:T;
N = length(t);
% 控制器参数
lambda = 5;
k = 10;
gamma = 50; % 自适应增益
% 模糊系统参数
% 输入范围:x1 ∈ [-3,3], x2 ∈ [-5,5]
% 每个维度划分 5 个隶属函数 → 共 25 条规则
numMF = 5;
x1_range = linspace(-3, 3, numMF);
x2_range = linspace(-5, 5, numMF);
sigma = 0.8; % 高斯宽度
% 生成所有规则的隶属函数中心和宽度
[c1, c2] = meshgrid(x1_range, x2_range);
centers = [c1(:), c2(:)]'; % 2×M
M = size(centers,2);
% 初始化参数 theta
theta = zeros(M,1);
% 参考轨迹
xd = @(t) sin(t);
dxd = @(t) cos(t);
ddxd = @(t) -sin(t);
% 状态初始化
x1 = 0; x2 = 0;
x1_history = zeros(1,N);
x2_history = zeros(1,N);
u_history = zeros(1,N);
theta_history = zeros(M,N);
s_history = zeros(1,N);
%% 仿真循环
for i = 1:N
% 当前时间
ti = t(i);
% 参考信号及其导数
xd_val = xd(ti);
dxd_val = dxd(ti);
ddxd_val = ddxd(ti);
% 误差
e = xd_val - x1;
de = dxd_val - x2;
s = de + lambda * e;
% 计算模糊基函数
z = [x1; x2];
xi = zeros(M,1);
for j = 1:M
mu1 = exp(-(z(1)-centers(1,j))^2/(2*sigma^2));
mu2 = exp(-(z(2)-centers(2,j))^2/(2*sigma^2));
xi(j) = mu1 * mu2;
end
xi = xi / sum(xi); % 归一化
% 模糊系统输出
f_hat = theta' * xi;
% 控制律
u = ddxd_val + lambda*de + k*s - f_hat;
% 自适应律(欧拉法)
theta = theta + dt * (-gamma * s * xi);
% 施加控制到系统(真实动力学)
% 真实 f = -0.1*x2 - x1^3 + 12*cos(ti)
f_real = -0.1*x2 - x1^3 + 12*cos(ti);
x2_dot = f_real + u;
x1_dot = x2;
% 更新状态(欧拉积分)
x1 = x1 + dt * x1_dot;
x2 = x2 + dt * x2_dot;
% 记录
x1_history(i) = x1;
x2_history(i) = x2;
u_history(i) = u;
theta_history(:,i) = theta;
s_history(i) = s;
end
%% 绘图
figure('Position', [100 100 900 800]);
subplot(3,1,1);
plot(t, xd(t), 'k--', 'LineWidth', 1.5); hold on;
plot(t, x1_history, 'r-', 'LineWidth', 1);
xlabel('Time (s)'); ylabel('x');
legend('Reference', 'Output');
title('跟踪性能');
grid on;
subplot(3,1,2);
plot(t, x1_history - xd(t)', 'b-', 'LineWidth', 1);
xlabel('Time (s)'); ylabel('Tracking error');
title('跟踪误差');
grid on;
subplot(3,1,3);
plot(t, u_history, 'g-', 'LineWidth', 1);
xlabel('Time (s)'); ylabel('Control input');
title('控制信号');
grid on;
figure;
% 显示部分参数收敛情况(取前5个规则)
plot(t, theta_history(1:5,:)');
xlabel('Time (s)'); ylabel('\theta');
title('模糊系统参数收敛(前5个规则)');
legend(arrayfun(@(i)sprintf('Rule %d',i),1:5,'UniformOutput',false));
grid on;
% 模糊逼近效果对比(在最后时刻)
z_test = [-2:0.1:2; -2:0.1:2]; % 测试点
f_true = -0.1*z_test(2,:) - z_test(1,:).^3 + 12*cos(T);
xi_test = zeros(M, length(z_test));
for j = 1:M
mu1 = exp(-(z_test(1,:)-centers(1,j)).^2/(2*sigma^2));
mu2 = exp(-(z_test(2,:)-centers(2,j)).^2/(2*sigma^2));
xi_test(j,:) = mu1 .* mu2;
end
xi_test = xi_test ./ sum(xi_test,1);
f_approx = theta' * xi_test;
figure;
plot(z_test(1,:), f_true, 'b-', 'LineWidth', 1.5); hold on;
plot(z_test(1,:), f_approx, 'r--', 'LineWidth', 1.5);
xlabel('x_1'); ylabel('f(x, \dot{x})');
legend('True f', 'Approximated f');
title('模糊系统逼近效果(固定 \dot{x}=-2 截面)');
grid on;
参考代码 基于模糊系统逼近的自适应控制 www.youwenfan.com/contentcsv/81427.html
5.3 运行结果说明
- 跟踪性能:输出很快跟上参考信号,稳态误差很小。
- 模糊逼近 :随着自适应进行,模糊系统参数收敛,对未知 fff 的逼近逐渐准确。
- 控制信号:初期因参数未收敛有较大波动,后期趋于平稳。
6. 扩展讨论
6.1 如何处理未知 g(x)g(x)g(x)?
若 ggg 未知但符号已知(例如 g>0g>0g>0),可采用:
u=1g^(z∣θg)(x¨d+λe˙+ks−f^(z∣θf))u = \frac{1}{\hat{g}(z|\theta_g)}\left( \ddot{x}_d + \lambda\dot{e} + k s - \hat{f}(z|\theta_f) \right)u=g^(z∣θg)1(x¨d+λe˙+ks−f^(z∣θf))
并对 θf\theta_fθf 和 θg\theta_gθg 分别设计自适应律(需注意避免除零,可加正则项)。
6.2 如何提高逼近精度?
- 增加隶属函数数量(规则数);
- 采用在线聚类或自适应网格划分;
- 结合神经网络(如 RBF 网络)作为逼近器。
6.3 鲁棒性增强
- 加入 σ\sigmaσ-修正:θ^˙=−γsξ−σθ^\dot{\hat{\theta}} = -\gamma s\xi - \sigma\hat{\theta}θ^˙=−γsξ−σθ^;
- 使用死区技术:当 ∣s∣|s|∣s∣ 小于阈值时不更新参数。
7. 总结
本方案利用模糊系统的万能逼近特性,结合 Lyapunov 自适应律,实现了对未知非线性系统的跟踪控制。仿真表明,该方法能有效补偿未知动力学,具有良好的瞬态和稳态性能。代码可直接复制运行,适用于教学和初步研究。