ts模糊控制matlab仿真
时间: 2023-07-03 14:27:42 浏览: 121
Matlab T-S模糊控制仿真
4星 · 用户满意度95%
以下是T-S模糊控制的MATLAB仿真示例:
```matlab
% 1. 确定输入和输出变量
s = linspace(-10, 10, 101);
e = linspace(-10, 10, 101);
[S,E] = meshgrid(s,e);
G = 1./(1+S.^2+E.^2);
% 2. 确定模糊规则库
fis = newfis('myfuzzy');
% 输入变量1 - 偏差s
fis = addvar(fis, 'input', 's', [-10 10]);
fis = addmf(fis, 'input', 1, 'nb', 'gaussmf', [-2 0]);
fis = addmf(fis, 'input', 1, 'nm', 'gaussmf', [-1.5 0]);
fis = addmf(fis, 'input', 1, 'ns', 'gaussmf', [-1 0]);
fis = addmf(fis, 'input', 1, 'ze', 'gaussmf', [0 0]);
fis = addmf(fis, 'input', 1, 'ps', 'gaussmf', [1 0]);
fis = addmf(fis, 'input', 1, 'pm', 'gaussmf', [1.5 0]);
fis = addmf(fis, 'input', 1, 'pb', 'gaussmf', [2 0]);
% 输入变量2 - 偏差变化率e
fis = addvar(fis, 'input', 'e', [-10 10]);
fis = addmf(fis, 'input', 2, 'nb', 'gaussmf', [-2 0]);
fis = addmf(fis, 'input', 2, 'nm', 'gaussmf', [-1.5 0]);
fis = addmf(fis, 'input', 2, 'ns', 'gaussmf', [-1 0]);
fis = addmf(fis, 'input', 2, 'ze', 'gaussmf', [0 0]);
fis = addmf(fis, 'input', 2, 'ps', 'gaussmf', [1 0]);
fis = addmf(fis, 'input', 2, 'pm', 'gaussmf', [1.5 0]);
fis = addmf(fis, 'input', 2, 'pb', 'gaussmf', [2 0]);
% 输出变量 - 控制增量du
fis = addvar(fis, 'output', 'du', [-1 1]);
fis = addmf(fis, 'output', 1, 'nb', 'gaussmf', [-0.5 0]);
fis = addmf(fis, 'output', 1, 'nm', 'gaussmf', [-0.25 0]);
fis = addmf(fis, 'output', 1, 'ns', 'gaussmf', [-0.1 0]);
fis = addmf(fis, 'output', 1, 'ze', 'gaussmf', [0 0]);
fis = addmf(fis, 'output', 1, 'ps', 'gaussmf', [0.1 0]);
fis = addmf(fis, 'output', 1, 'pm', 'gaussmf', [0.25 0]);
fis = addmf(fis, 'output', 1, 'pb', 'gaussmf', [0.5 0]);
% 3. 设计模糊控制器的输出
ruleList = [1 1 1 1 1 1 1 1 1; % nb nb -> nb
1 2 1 1 1 1 1 1 1; % nb nm -> nb
1 3 2 2 1 1 1 1 1; % nb ns -> nm
2 4 3 3 2 2 1 1 1; % nm ze -> ns
3 5 4 4 3 3 2 2 1; % ns ps -> pm
4 6 5 5 4 4 3 3 2; % pm pm -> pb
5 7 6 6 5 5 4 4 3; % pb pb -> pb
6 7 7 7 6 6 5 5 4; % pb pb -> pb
7 7 7 7 7 7 6 6 5];% pb pb -> pb
fis = addrule(fis, ruleList);
% 4. 在MATLAB中编写代码实现模糊控制器
T = 100; % 总仿真时间
dt = 0.1; % 仿真步长
N = T/dt; % 仿真步数
s0 = 5; % 初始偏差
e0 = 0; % 初始偏差变化率
du = zeros(1, N); % 控制增量
s = zeros(1, N); % 偏差
e = zeros(1, N); % 偏差变化率
s(1) = s0;
e(1) = e0;
for i = 1:N-1
% 计算控制增量
input = [s(i) e(i)];
du(i) = evalfis(input, fis);
% 计算下一时刻的偏差和偏差变化率
s(i+1) = s(i) + e(i)*dt;
e(i+1) = e(i) + du(i)*dt;
end
% 绘制仿真结果
t = linspace(0, T, N);
plot(t, s, 'r', t, e, 'g', t, du, 'b');
legend('偏差', '偏差变化率', '控制增量');
xlabel('时间');
ylabel('量程');
title('T-S模糊控制仿真');
```
这是一个基本的T-S模糊控制的MATLAB仿真示例,具体的实现可以根据具体需求和实际情况进行调整和修改。
阅读全文