模糊控制matlab例子
时间: 2023-07-13 13:35:37 浏览: 113
以下是一个模糊控制的 MATLAB 例子:
假设我们要设计一个模糊控制器来控制一个水平移动的小车。小车的位置可以用一维坐标系表示,我们用一个模糊控制器来控制小车的位置。模糊控制器的输入变量是小车的位置误差 e,输出变量是小车的速度 v。我们希望当小车的位置偏离目标位置时,控制器可以自动调整小车的速度,使它回到目标位置。
以下是 MATLAB 代码:
```matlab
% 定义模糊集
e = -10:0.1:10; % 位置误差的模糊集
de = -10:0.1:10; % 位置误差的变化率的模糊集
v = -5:0.1:5; % 小车速度的模糊集
% 定义模糊规则
ruleList = [1, 1, 1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 2, 2, 2;
1, 1, 1, 2, 2, 2, 2, 3, 3;
1, 2, 2, 2, 2, 3, 3, 3, 4;
2, 2, 3, 3, 3, 4, 4, 4, 5;
2, 3, 3, 4, 4, 5, 5, 5, 5;
3, 3, 4, 4, 5, 5, 5, 6, 6;
4, 4, 5, 5, 5, 6, 6, 6, 7;
5, 5, 5, 6, 6, 7, 7, 7, 7;
6, 6, 6, 7, 7, 7, 7, 8, 8;
7, 7, 7, 7, 8, 8, 8, 8, 9;
8, 8, 8, 8, 8, 9, 9, 9, 9;
9, 9, 9, 9, 9, 9, 9, 9, 9];
% 定义模糊系统
fis = newfis('FIS_SCARA');
fis = addvar(fis, 'input', 'e', [-10 10]);
fis = addmf(fis, 'input', 1, 'NB', 'gaussmf', [1.5 -10]);
fis = addmf(fis, 'input', 1, 'NM', 'gaussmf', [1.5 -5]);
fis = addmf(fis, 'input', 1, 'NS', 'gaussmf', [1.5 -2.5]);
fis = addmf(fis, 'input', 1, 'ZO', 'gaussmf', [1.5 0]);
fis = addmf(fis, 'input', 1, 'PS', 'gaussmf', [1.5 2.5]);
fis = addmf(fis, 'input', 1, 'PM', 'gaussmf', [1.5 5]);
fis = addmf(fis, 'input', 1, 'PB', 'gaussmf', [1.5 10]);
fis = addvar(fis, 'input', 'de', [-10 10]);
fis = addmf(fis, 'input', 2, 'NB', 'gaussmf', [1.5 -10]);
fis = addmf(fis, 'input', 2, 'NM', 'gaussmf', [1.5 -5]);
fis = addmf(fis, 'input', 2, 'NS', 'gaussmf', [1.5 -2.5]);
fis = addmf(fis, 'input', 2, 'ZO', 'gaussmf', [1.5 0]);
fis = addmf(fis, 'input', 2, 'PS', 'gaussmf', [1.5 2.5]);
fis = addmf(fis, 'input', 2, 'PM', 'gaussmf', [1.5 5]);
fis = addmf(fis, 'input', 2, 'PB', 'gaussmf', [1.5 10]);
fis = addvar(fis, 'output', 'v', [-5 5]);
fis = addmf(fis, 'output', 1, 'NB', 'gaussmf', [0.5 -5]);
fis = addmf(fis, 'output', 1, 'NM', 'gaussmf', [0.5 -2.5]);
fis = addmf(fis, 'output', 1, 'NS', 'gaussmf', [0.5 -1.25]);
fis = addmf(fis, 'output', 1, 'ZO', 'gaussmf', [0.5 0]);
fis = addmf(fis, 'output', 1, 'PS', 'gaussmf', [0.5 1.25]);
fis = addmf(fis, 'output', 1, 'PM', 'gaussmf', [0.5 2.5]);
fis = addmf(fis, 'output', 1, 'PB', 'gaussmf', [0.5 5]);
% 添加规则
fis = addrule(fis, ruleList);
% 画出模糊集和规则
ruleview(fis)
% 模拟小车控制
t = 0:0.1:10;
x = zeros(size(t));
xs = 5;
e(1) = xs - x(1);
for i = 2:length(t)
de(i) = (e(i) - e(i-1)) / 0.1; % 计算位置误差变化率
v(i) = evalfis([e(i) de(i)], fis); % 使用模糊控制器计算小车速度
x(i) = x(i-1) + v(i) * 0.1; % 计算小车位置
e(i) = xs - x(i); % 计算位置误差
end
plot(t, x)
```
在这个例子中,我们首先定义了三个模糊集:位置误差 e、位置误差变化率 de 和小车速度 v。然后我们定义了一组模糊规则,用来确定小车速度的输出,这些规则是基于位置误差和位置误差变化率的模糊值来确定的。接着我们创建了一个模糊系统,并将变量和模糊集添加到系统中,然后添加规则。最后,我们使用模糊控制器来控制小车的位置,模拟小车的运动并画出小车的位置随时间的变化曲线。
阅读全文