给蛋蛋看的

                        

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),修改之后的程序如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值