clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];
[~,l]=size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
mu_1=[1;0];
E=[eye(n_x) zeros(n_x,n_u);zeros(n_u,n_x) zeros(n_u,n_u)];
H=[zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u)];
P=sdpvar(n_x+n_u,n_x+n_u);
XX1=sdpvar(2*(n_x+n_u),n_x,'full');
for j=1:1:s
G{j}=sdpvar(n_u,n_u);
GK{j}=sdpvar(n_u,n_x,'full');
end
Sigma_d=mdiag(P,-E'*P*E);
for i=1:1:l
for j=1:1:s
Xi{i}{j}=Sigma_d...
+[-XX1 -H*G{j} [XX1*A{i}+H*GK{j} XX1*B{i}-H*G{j}]]...
+[-XX1 -H*G{j} [XX1*A{i}+H*GK{j} XX1*B{i}-H*G{j}]]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
for j=1:1:s
GG{j}=value(G{j})
GGKK{j}=value(GK{j})
K{j}=inv(GG{j})*GGKK{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K{j}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
h{1}=w1/(w1+w2);h{2}=w2/(w1+w2);
K_global=0;
for j=1:1:s
K_global=K_global+K{j}*w{j};
% K_global=K_global+K{j}*h{j};%这应该才是对的,为什么最后不稳定在0处?
end
u=K_global*x;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure(1)
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure(2)
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
仅考虑上一时刻的有记忆
clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];
[~,l]=size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
mu_1=[1;0];
E=[eye(2*n_x) zeros(2*n_x,n_u);zeros(n_u,2*n_x) zeros(n_u,n_u)];
H=[zeros(n_x,n_u);zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(n_x,n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u)];
P=sdpvar(2*n_x+n_u,2*n_x+n_u);
X1=sdpvar(4*n_x+2*n_u,n_x,'full');
X2=sdpvar(4*n_x+2*n_u,n_x,'full');
for j=1:1:s
G{j}=sdpvar(n_u,n_u);
GK1{j}=sdpvar(n_u,n_x,'full');
GK0{j}=sdpvar(n_u,n_x,'full');
end
a=0.1;
Sigma_d=mdiag(P,(exp(-a)-1)*E'*P*E);
for i=1:1:l
for j=1:1:s
Xi{i}{j}=Sigma_d...
+[-X1 -X2 -H*G{j} [H*GK1{j} X1+X2*A{i}+H*GK0{j} X2*B{i}-H*G{j}]]...
+[-X1 -X2 -H*G{j} [H*GK1{j} X1+X2*A{i}+H*GK0{j} X2*B{i}-H*G{j}]]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
for j=1:1:s
GG{j}=value(G{j})
GGKK1{j}=value(GK1{j})
GGKK0{j}=value(GK0{j})
K1{j}=inv(GG{j})*GGKK1{j}
K0{j}=inv(GG{j})*GGKK0{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K1{j}+B{i}*K0{j}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
K1_global=0;K0_global=0;
for j=1:1:s
K1_global=K1_global+K1{j}*w{j};
K0_global=K0_global+K0{j}*w{j};
end
if i==1
u=K0_global*x;
else
u=K1_global*XX1(:,i-1)+K0_global*x;
end
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure(1)
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure(2)
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
仅考虑上一时刻的有记忆输出反馈
clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];C1{1}=[1 1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];C1{2}=[1 1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];C1{3}=[1 1];
[~,l]=size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
[n_y,~]=size(C1{1});
mu_1=[1;0];
E=[eye(n_y+n_x) zeros(n_y+n_x,n_u);zeros(n_u,n_y+n_x) zeros(n_u,n_u)];
H=[zeros(n_y,n_u);zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(n_y,n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u)];
P=sdpvar(n_y+n_x+n_u,n_y+n_x+n_u);
X1=sdpvar(2*(n_y+n_x+n_u),n_y,'full');
X2=sdpvar(2*(n_y+n_x+n_u),n_x,'full');
for j=1:1:s
G{j}=sdpvar(n_u,n_u);
GK1{j}=sdpvar(n_u,n_y,'full');
GK0{j}=sdpvar(n_u,n_y,'full');
end
a=0.1;
Sigma_d=mdiag(P,(exp(-a)-1)*E'*P*E);
for i=1:1:l
for j=1:1:s
Xi{i}{j}=Sigma_d...
+[-X1 -X2 -H*G{j} [H*GK1{j} X1*C1{i}+X2*A{i}+H*GK0{j}*C1{i} X2*B{i}-H*G{j}]]...
+[-X1 -X2 -H*G{j} [H*GK1{j} X1*C1{i}+X2*A{i}+H*GK0{j}*C1{i} X2*B{i}-H*G{j}]]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
for j=1:1:s
GG{j}=value(G{j})
GGKK1{j}=value(GK1{j})
GGKK0{j}=value(GK0{j})
K1{j}=inv(GG{j})*GGKK1{j}
K0{j}=inv(GG{j})*GGKK0{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K1{j}*C1{i}+B{i}*K0{j}*C1{i}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
u=0;
U=zeros(1,10);
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
K1_global=0;K0_global=0;
for j=1:1:s
for k=1:1:l
K1_global=K1_global+K1{j}*C1{k}*w{j};
K0_global=K0_global+K0{j}*C1{k}*w{j};
end
end
if i==1
u=K0_global*x;
else
u=K1_global*XX1(:,i-1)+K0_global*x;
end
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
U(:,i)=u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure()
plot(time, U, '-r' , 'linewidth',2);
xlabel('Time in samples');ylabel('u');
figure()
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure()
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
多层历史数据的,存在问题在改。
clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];C1{1}=[1 1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];C1{2}=[1 1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];C1{3}=[1 1];
[~,l]=size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
[n_y,~]=size(C1{1});
lambda=1;%历史数据层数
mu_1=[1;0];
E=[eye(lambda*n_y+n_x) zeros(lambda*n_y+n_x,n_u);zeros(n_u,lambda*n_y+n_x) zeros(n_u,n_u)];
H=[zeros(lambda*n_y,n_u);zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(lambda*n_y,n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u)];
P=sdpvar(lambda*n_y+n_x+n_u,lambda*n_y+n_x+n_u);
X1=sdpvar(2*(lambda*n_y+n_x+n_u),lambda*n_y,'full');
X2=sdpvar(2*(lambda*n_y+n_x+n_u),n_x,'full');
for j=1:1:s
G{j}=sdpvar(n_u,n_u);
for n=1:1:lambda+1
GK{n}{j}=sdpvar(n_u,n_y,'full');
end
% GK1{j}=sdpvar(n_u,n_y,'full');
% GK0{j}=sdpvar(n_u,n_y,'full');
end
a=0.1;
Sigma_d=mdiag(P,(exp(-a)-1)*E'*P*E);
for i=1:1:l
for j=1:1:s
GK_M=[];
for n=1:1:lambda
GK_M=[GK_M;GK{n}{j}];
end
Xi{i}{j}=Sigma_d...
+[-X1 -X2 -H*G{j} [H*GK_M X1*C1{i}+X2*A{i}+H*GK{lambda+1}{j}*C1{i} X2*B{i}-H*G{j}]]...
+[-X1 -X2 -H*G{j} [H*GK_M X1*C1{i}+X2*A{i}+H*GK{lambda+1}{j}*C1{i} X2*B{i}-H*G{j}]]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
for j=1:1:s
GG{j}=value(G{j})
for n=1:1:lambda+1
GGKK{n}{j}=value(GK{n}{j});
K{n}{j}=inv(GG{j})*GGKK{n}{j}
end
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
for n=1:1:lambda+1
AA{i}{j}=A{i}+B{i}*K{n}{j}*C1{i}
end
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
u=0;
U=zeros(1,10);
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
% K1_global=0;K0_global=0;
for n=1:1:lambda+1
K_global{n}=0;
k_global=0;
for j=1:1:s
for k=1:1:l
k_global=k_global+K{n}{j}*C1{k}*w{j};%这里隶属函数有问题,但是算了,后面再说。
end
end
K_global{n}=k_global;
end
if i<=lambda
u=0;
for n=lambda+1:1:lambda+2-i
u=u+K_global{n}*XX1(:,i-(lambda+1-n));
end
else
u=0;
for n=lambda+1:1:1
u=u+K_global{n}*XX1(:,i-(lambda+1-n));
end
end
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
U(:,i)=u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure()
plot(time, U, '-r' , 'linewidth',2);
xlabel('Time in samples');ylabel('u');
figure()
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure()
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
信道衰落的一次历史数据有记忆输出反馈控制
clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];C1{1}=[1 1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];C1{2}=[1 1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];C1{3}=[1 1];
[~,l] =size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
[n_y,~] =size(C1{1});
mu1=0.8;mu2=0.05;
mu_1=[1;1;0];mu_2=[1;1;0];
E =[eye(n_y+n_x) zeros(n_y+n_x,n_u);zeros(n_u,n_y+n_x) zeros(n_u,n_u)];
H1 =[zeros(n_y,n_u);zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(n_y,n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u);zeros(n_y,n_u);zeros(n_x,n_u);mu_1(3)*eye(n_u)];
H2 =[zeros(n_y,n_u);zeros(n_x,n_u);mu_2(1)*eye(n_u);zeros(n_y,n_u);zeros(n_x,n_u);mu_2(2)*eye(n_u);zeros(n_y,n_u);zeros(n_x,n_u);mu_2(3)*eye(n_u)];
P =sdpvar(n_y+n_x+n_u,n_y+n_x+n_u);
X11=sdpvar(3*(n_y+n_x+n_u),n_y,'full');
X12=sdpvar(3*(n_y+n_x+n_u),n_x,'full');
X21=sdpvar(3*(n_y+n_x+n_u),n_y,'full');
X22=sdpvar(3*(n_y+n_x+n_u),n_x,'full');
for j=1:1:s
G{j} =sdpvar(n_u,n_u);
GK1{j}=sdpvar(n_u,n_y,'full');
GK0{j}=sdpvar(n_u,n_y,'full');
end
a=0.1;
Sigma_d=mdiag(P,P,(exp(-a)-1)*E'*P*E);
for i=1:1:l
for j=1:1:s
X1A=[mu1*H1*GK1{j} X11*C1{i}+X12*A{i}+mu1*H1*GK0{j}*C1{i} X12*B{i}-H1*G{j}];
X2A=[sqrt(mu2)*H2*GK1{j} sqrt(mu2)*H2*GK0{j}*C1{i} zeros(3*(n_y+n_x+n_u),n_u)];
Xi{i}{j}=Sigma_d...
+[-X11 -X12 -H1*G{j} -X21 -X22 -H2*G{j} X1A+X2A]...
+[-X11 -X12 -H1*G{j} -X21 -X22 -H2*G{j} X1A+X2A]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
for j=1:1:s
GG{j}=value(G{j})
GGKK1{j}=value(GK1{j})
GGKK0{j}=value(GK0{j})
K1{j}=inv(GG{j})*GGKK1{j}
K0{j}=inv(GG{j})*GGKK0{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K1{j}*C1{i}+B{i}*K0{j}*C1{i}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
u=0;
U=zeros(1,10);
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
K1_global=0;K0_global=0;
for j=1:1:s
for k=1:1:l
K1_global=K1_global+K1{j}*C1{k}*w{j};
K0_global=K0_global+K0{j}*C1{k}*w{j};
end
end
if i==1
u=K0_global*x;
else
u=K1_global*XX1(:,i-1)+K0_global*x;
end
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
U(:,i)=u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure()
plot(time, U, '-r' , 'linewidth',2);
xlabel('Time in samples');ylabel('u');
figure()
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure()
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
%我不理解,为什么会出现非线性,一个转折?
在上一个的基础上考虑扰动
clear all;yalmip('clear');
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];D1{1}=[0.1;0.1];
C1{1}=[1 1];
C2{1}=[1 1];D2{1}=[0.1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];D1{2}=[0.1;0.1];
C1{2}=[1 1];
C2{2}=[1 1];D2{2}=[0.1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];D1{3}=[0.1;0.1];
C1{3}=[1 1];
C2{3}=[1 1];D2{3}=[0.1];
[~,l] =size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
[n_y,~] =size(C1{1});
[n_z,n_d]=size(D2{1});
mu1=0.8;mu2=0.05;
mu_1=[1;1;0];
mu_2=[1;1;0];
E =[eye(n_y+n_x) zeros(n_y+n_x,n_u);zeros(n_u,n_y+n_x) zeros(n_u,n_u)];
H1 =[zeros(n_y,n_u);zeros(n_x,n_u);mu_1(1)*eye(n_u);...
zeros(n_y,n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u);...
zeros(n_y,n_u);zeros(n_x,n_u);mu_1(3)*eye(n_u);zeros(n_d,n_u)];
H2 =[zeros(n_y,n_u);zeros(n_x,n_u);mu_2(1)*eye(n_u);...
zeros(n_y,n_u);zeros(n_x,n_u);mu_2(2)*eye(n_u);...
zeros(n_y,n_u);zeros(n_x,n_u);mu_2(3)*eye(n_u);zeros(n_d,n_u)];
P =sdpvar(n_y+n_x+n_u,n_y+n_x+n_u);
X11=sdpvar(3*(n_y+n_x+n_u)+n_d,n_y,'full');
X12=sdpvar(3*(n_y+n_x+n_u)+n_d,n_x,'full');
X21=sdpvar(3*(n_y+n_x+n_u)+n_d,n_y,'full');
X22=sdpvar(3*(n_y+n_x+n_u)+n_d,n_x,'full');
GAMMA2=sdpvar(1,1,'full');
for j=1:1:s
G{j} =sdpvar(n_u,n_u);
GK1{j}=sdpvar(n_u,n_y,'full');
GK0{j}=sdpvar(n_u,n_y,'full');
end
a=0.1;
for i=1:1:l
C2Bar=[zeros(n_z,n_y) C2{i} zeros(n_z,n_u)];
Sigma_d=mdiag(P,P,[(exp(-a)-1)*E'*P*E+C2Bar'*C2Bar C2Bar'*D2{i};D2{i}'*C2Bar D2{i}'*D2{i}-GAMMA2*eye(n_d)]);
for j=1:1:s
X1A=[mu1*H1*GK1{j} X11*C1{i}+X12*A{i}+mu1*H1*GK0{j}*C1{i} X12*B{i}-H1*G{j}];
X2A=[sqrt(mu2)*H2*GK1{j} sqrt(mu2)*H2*GK0{j}*C1{i} zeros(3*(n_y+n_x+n_u)+n_d,n_u)];
Xi{i}{j}=Sigma_d...
+[-X11 -X12 -H1*G{j} -X21 -X22 -H2*G{j} X1A+X2A X12*D1{i}]...
+[-X11 -X12 -H1*G{j} -X21 -X22 -H2*G{j} X1A+X2A X12*D1{i}]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
gamma=sqrt(value(GAMMA2))
for j=1:1:s
GG{j}=value(G{j})
GGKK1{j}=value(GK1{j})
GGKK0{j}=value(GK0{j})
K1{j}=inv(GG{j})*GGKK1{j}
K0{j}=inv(GG{j})*GGKK0{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K1{j}*C1{i}+B{i}*K0{j}*C1{i}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
u=0;
U=zeros(1,10);
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
K1_global=0;K0_global=0;
for j=1:1:s
for k=1:1:l
K1_global=K1_global+K1{j}*C1{k}*w{j};
K0_global=K0_global+K0{j}*C1{k}*w{j};
end
end
if i==1
u=K0_global*x;
else
u=K1_global*XX1(:,i-1)+K0_global*x;
end
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
U(:,i)=u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure()
plot(time, U, '-r' , 'linewidth',2);
xlabel('Time in samples');ylabel('u');
figure()
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure()
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
%出现问题,无解,可能确实存在问题,也可能是系统确实无解
%因此,我需要在状态反馈上尝试
在状态反馈上考虑干扰,仍然无解。
clear all;yalmip('clear');
% A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];
% A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];
% A{3}=[1 0;-0.3 1.3];B{3}=[1;1];
A{1}=[0.1 0.4;-0.8 0.9];B{1}=[1;1];D1{1}=[0.1;0.1];
C2{1}=[1 1];D2{1}=[0.1];
A{2}=[0.85 1;-0.3 0.9];B{2}=[1;1];D1{2}=[0.1;0.1];
C2{2}=[1 1];D2{2}=[0.1];
A{3}=[1 0;-0.3 1.3];B{3}=[1;1];D1{3}=[0.1;0.1];
C2{3}=[1 1];D2{3}=[0.1];
[~,l]=size(A);s=2;%被控对象模糊规则数,控制器模糊规则数
[n_x,n_u]=size(B{1});
[n_z,n_d]=size(D2{1});
mu_1=[1;0];
E=[eye(n_x) zeros(n_x,n_u);zeros(n_u,n_x) zeros(n_u,n_u)];
H=[zeros(n_x,n_u);mu_1(1)*eye(n_u);zeros(n_x,n_u);mu_1(2)*eye(n_u);zeros(n_d,n_u)];
P=sdpvar(n_x+n_u,n_x+n_u);
XX1=sdpvar(2*(n_x+n_u)+n_d,n_x,'full');
GAMMA2=sdpvar(1,1,'full');
for j=1:1:s
G{j}=sdpvar(n_u,n_u);
GK{j}=sdpvar(n_u,n_x,'full');
end
for i=1:1:l
C2Bar=[C2{i} zeros(n_z,n_u)];
Sigma_d=mdiag(P,[-E'*P*E+C2Bar'*C2Bar C2Bar'*D2{i};D2{i}'*C2Bar D2{i}'*D2{i}-GAMMA2*eye(n_d)]);
for j=1:1:s
Xi{i}{j}=Sigma_d...
+[-XX1 -H*G{j} [XX1*A{i}+H*GK{j} XX1*B{i}-H*G{j} XX1*D1{i}]]...
+[-XX1 -H*G{j} [XX1*A{i}+H*GK{j} XX1*B{i}-H*G{j} XX1*D1{i}]]';
end
end
LMI_S=[lmi(P>=0):'P'];
for i=1:1:l
for j=1:1:s
LMI_S=LMI_S+[lmi(Xi{i}{j}<=0):'LMI_S'];
end
end
options = sdpsettings('solver','mosek','shift','0.00');
solution = optimize(LMI_S, [],options)
check(LMI_S)
gamma=sqrt(value(GAMMA2))
for j=1:1:s
GG{j}=value(G{j})
GGKK{j}=value(GK{j})
K{j}=inv(GG{j})*GGKK{j}
end
for i=1:1:l
A{i}
eig(A{i})
for j=1:1:s
AA{i}{j}=A{i}+B{i}*K{j}
eig(AA{i}{j})
end
end
num=100;x0=[-1;2];
XX1=zeros(2,10);
x=x0;
for i=1:1:num
XX1(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
h{1}=w1/(w1+w2);h{2}=w2/(w1+w2);
K_global=0;
for j=1:1:s
K_global=K_global+K{j}*w{j};
% K_global=K_global+K{j}*h{j};%这应该才是对的,为什么最后不稳定在0处?
end
u=K_global*x;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x+B_global*u;
end
XX2=zeros(2,10);
x=x0;
for i=1:1:num
XX2(:,i)=x;
%计算隶属函数
w1_down=(x(1)+2)/10;
w1_up=(x(1)+3)/10;
w2_down=(-x(1)+2)/10;
w2_up=(-x(1)+4)/10;
w1=(1-(sin(x(1)))^2)*w1_down+((sin(x(1)))^2)*w1_up;
w2=0.5*w2_down+0.5*w2_up;
w3=1-w1-w2;
w{1}=w1;w{2}=w2;w{3}=w3;
A_global=0;B_global=0;
for j=1:1:l
A_global=A_global+A{j}*w{j};
B_global=B_global+B{j}*w{j};
end
x=A_global*x;
end
time=zeros(1,10);
for i=1:1:num
time(i)=i;
end
figure(1)
plot(time, XX1(1,:),'-r', time,XX2(1,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x1');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
figure(2)
plot(time, XX1(2,:),'-r', time,XX2(2,:),'-.b', 'linewidth',2);
xlabel('Time in samples');ylabel('x2');
h=legend('$$System\_withController(t)$$','$$System\_withoutController(t)$$');
set(h,'interpreter','latex');
也许是系统不行,但更可能是方法不对——我试一试。
如果是系统不行,我将γ设置成10000,系统应该是有解的(因为之前的仿真中已经证明出了结果)。因此,我的方法存在问题。
我找到了问题所在,问题在于我忘了在增广系统中考虑 z(k),修改之后的程序如下