📄 dlb simulate.m
字号:
clear
tc=newfis('tc','sugeno');
tc=addvar(tc,'input','theta',[-pi,pi]);
tc=addmf(tc,'input',1,'NG','gaussmf',[1.2 -3]);
tc=addmf(tc,'input',1,'ZR','gaussmf',[1.2 0]);
tc=addmf(tc,'input',1,'PO','gaussmf',[1.2 3]);
tc=addvar(tc,'input','opega',[-5,5]);
tc=addmf(tc,'input',2,'NG','gaussmf',[1.8 -5]);
tc=addmf(tc,'input',2,'ZR','gaussmf',[1.8 0]);
tc=addmf(tc,'input',2,'PO','gaussmf',[1.8 5]);
tc=addvar(tc,'output','r',[-2,2]);
tc=addmf(tc,'output',1,'NO.1','linear',[-357.4135 -45.3333 0]);
tc=addmf(tc,'output',1,'NO.2','linear',[-341.4135 -45.3333 0]);
tc=addmf(tc,'output',1,'NO.3','linear',[-662.5861 -102.6667 0]);
tc=addmf(tc,'output',1,'NO.4','linear',[-680.4563 -109.5949 0]);
tc=addmf(tc,'output',1,'NO.5','linear',[-680.4563 -95.7385 0]);
rulist=[1 1 4 1 1;
1 2 3 1 1;
1 3 5 1 1;
2 1 2 1 1;
2 2 1 1 1;
2 3 2 1 1;
3 1 5 1 1;
3 2 3 1 1;
3 3 4 1 1];
tc=addrule(tc,rulist);
model=newfis('model','sugeno');
model=addvar(model,'input','theta',[-pi pi]);
model=addmf(model,'input',1,'NG','gaussmf',[1.2 -3]);
model=addmf(model,'input',1,'ZR','gaussmf',[1.2 0]);
model=addmf(model,'input',1,'PO','gaussmf',[1.2 3]);
model=addvar(model,'input','opega',[-5,5]);
model=addmf(model,'input',2,'NG','gaussmf',[1.8 -5]);
model=addmf(model,'input',2,'ZR','gaussmf',[1.8 0]);
model=addmf(model,'input',2,'PO','gaussmf',[1.8 5]);
model=addvar(model,'input','u',[-5,5]);
model=addmf(model,'input',3,'Any','gaussmf',[1.5 -5]);
model=addvar(model,'output','d_theta',[-2,2]);
model=addmf(model,'output',1,'NO.1','linear',[0 1 0 0]);
model=addmf(model,'output',1,'NO.2','linear',[0 1 0 0]);
model=addmf(model,'output',1,'NO.3','linear',[0 1 0 0]);
model=addmf(model,'output',1,'NO.4','linear',[0 1 0 0]);
model=addmf(model,'output',1,'NO.5','linear',[0 1 0 0]);
model=addvar(model,'output','d_omega',[-2,2]);
model=addmf(model,'output',2,'NO.1','linear',[17.2941 0 -0.1765 0]);
model=addmf(model,'output',2,'NO.1','linear',[14.47061 0 -0.1765 0]);
model=addmf(model,'output',2,'NO.1','linear',[5.8512 0 -0.0799 0]);
model=addmf(model,'output',2,'NO.1','linear',[7.2437 0.5399 -0.0799 0]);
model=addmf(model,'output',2,'NO.1','linear',[7.2437 -0.5399 -0.0799 0]);
rulist1=[1 1 0 4 4 1 1;
1 2 0 3 3 1 1;
1 3 0 5 5 1 1;
2 1 0 2 2 1 1;
2 2 0 1 1 1 1;
2 3 0 2 2 1 1;
3 1 0 5 5 1 1;
3 2 0 3 3 1 1;
3 3 0 4 4 1 1];
model=addrule(model,rulist1);
N=500;h=0.005;
x=[1.309;0];
y=zeros(2,N);
u=zeros(1,N);
for k=2:N
u(k)=(-1)*evalfis([x(1),x(2)],tc);
k0=evalfis([x(1),x(2),u(k)],model)';
x1=x+h*k0/2;
k1=evalfis([x1(1),x1(2),u(k)],model)';
x1=x+h*k1/2;
k2=evalfis([x1(1),x1(2),u(k)],model)';
x1=x+h*k2;
k3=evalfis([x1(1),x1(2),u(k)],model)';
x=x+(k0+2*k1+2*k2+k3)*h/6;
y(:,k)=x;
end
kk=[1:N]*h;
figure(1)
subplot 211
plotmf(tc,'input',1),grid on
subplot 212
plotmf(tc,'input',2),grid on
figure(2)
subplot 211
plot(kk,y),grid on
xlabel('x'),ylabel('系统状态');
subplot 212
plot(kk,u),grid on
xlabel('u(k)'),ylabel('模糊控制器输出');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -