已知被控对象为G(s)=1/(10s+1)e^(-0.5s),假设系统给定值为阶跃值r=30,采样时间为0.5s,系统的初始条件值r(0)=0,用常规的模糊控制器控制,求Matlab代码。
时间: 2024-03-09 19:44:44 浏览: 235
模糊控制matlab代码
根据被控对象的传递函数,可以得到其离散化的传递函数:
```
s = tf('s');
G = 1/(10*s+1)*exp(-0.5*s);
Ts = 0.5; % 采样时间
Gd = c2d(G, Ts, 'zoh'); % 离散化
```
接下来,使用常规的模糊控制器控制系统,代码如下:
```
% 设计模糊控制器
fis = mamfis('Name', 'Fuzzy Controller');
% 设定输入输出变量
fis = addInput(fis, [-10 10], 'Error');
fis = addInput(fis, [-10 10], 'EC');
fis = addOutput(fis, [-100 100], 'Output');
% 设定模糊规则
ruleList = [1 1 1 1;
2 1 1 1;
3 1 1 1;
4 1 1 1;
5 1 1 1;
6 1 1 1;
7 1 1 1;
8 1 1 1];
fis = addRule(fis, ruleList);
% 仿真
t = 0:Ts:20;
r = 30*ones(size(t));
y = zeros(size(t));
ec = zeros(size(t));
error = zeros(size(t));
for k = 2:length(t)
% 计算误差和误差变化率
error(k) = r(k-1) - y(k-1);
delta_error = error(k) - error(k-1);
% 计算控制量
ec(k) = evalfis(fis, [error(k), delta_error]);
% 更新被控对象状态
[y(k), ~] = step(Gd*ec(k), Ts, [0, y(k-1)]);
end
% 绘图
plot(t, r, 'r--', t, y, 'b-');
xlabel('Time (s)');
ylabel('Output');
legend('Reference', 'Output');
```
注意,这里的模糊控制器是根据经验来设定的,实际应用中需要根据具体情况进行调整。
阅读全文