您好,欢迎来到六九路网。
搜索
您的当前位置:首页GPC-matlab程序

GPC-matlab程序

来源:六九路网


%%

%GPC控制器函数

function [d_unow] = Control(A,B,SP,Zk,d_u,lanbt,Error)

%A表示差分方程右边输出变量的系数(从y(t-1),y(t-2),......,y(t-model_order1))

%B表示差分方程右边输入变量的系数(从u(t-1),u(t-2),......,u(t-model_order2))

%%

a = A(2:end); %差分方程右侧输出变量系数

b = B; %差分方程右侧输入变量系数

N0 = 1; %最小预测时域长度,一般取N0=1

N1 = 25; %最大预测时域长度

Nu = 25; %控制时域长度

% b = [zeros(1,9),B(10:end)];

E = zeros(N1,N1); %存储误差

% lanbt = 1; %加权系数

alpha = 0.19;

na = length(a);

nb = length(b)-1;

aa = zeros(1,na+1); if na>=2

for i = 2:na

aa(i) = (a(i)-a(i-1)); end

end

aa(1) = (a(1)-1);

%定义一个与输出变量阶数相等的数组

%计算差分方程右侧输出变量相邻阶次的系数差值

aa(na+1) = -a(na);

%%

%定义Diophantine方程求解过程多项式,参考王伟编写的《广义预测控制》2.1节广义预测控制的基本方法和2.2节Diophantine方程的递推求解

F = zeros(N1,na+1); %维数=预测时域长度*输出变量阶数

F(1,:) = -aa; %F初值

e = zeros(1,N1); %定义误差缓存数组

% f = zeros(1,na+1);

H = zeros(N1,nb); %维数=预测时域长度*(输入变量阶数-1)

H(1,:) = b(2:end); %H初值

g = zeros(1,N1);

e(1) = 1; %初始E=1

g(1) = e(1)*b(1); %初始G=e(1)*b(1)

%%

%求解diophantine方程

%递推求解F,E,H,G,参见王伟编写书的2.2节内容

for j = 1:N1-1

for i = 1:na

F(j+1,i) = F(j,i+1)-aa(i)*F(j,1);

end

F(j+1,na+1) = -aa(na+1)*F(j,1);

e(j+1) = F(j,1);

if nb>1

for i = 1:nb-1

H(j+1,i) = e(j+1)*b(i+1)+H(j,i+1);

end

end

H(j+1,nb) = e(j+1)*b(nb+1);

g(j+1) = e(j+1)*b(1)+H(j,1);

end

%计算矩阵G

G = zeros(N1,Nu); %定义G

for i = 1:Nu

G(i:end,i) = g(1:N1-i+1);

G(1:N0,:) = 0; %预测时域从N0~N1,固小于N0的G矩阵部分都取0,即无法预测

F(1:N0,:) = 0; %道理同G

H(1:N0,:) = 0; %同上

end

%计算(G'*G+lanbt*eye(size(G'*G)))的逆矩阵

aaa = size(G'*G);

R = diag([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); %N1*N1(24*24)单位对角阵

% R = diag([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); %N1*N1单位对角阵

Q = inv(G'*R*G+lanbt*eye(aaa(1)))*G'*R;

p = Q(1,:);

yr = zeros(N1+1,1);

yr(1) = Zk(1);

for i = 1:N1

yr(i+1) = alpha*yr(i)+(1-alpha)*SP;

end

% f = p(1)*F(1,:);

% for i = 2:N1

% f = f+ p(i)*F(i,:);

% end

yr1 = yr(2:end);

yr1=[SP;yr1(1:24)];

% yr1 = [yr11;yr12;yr13;yr14;yr15;yr16;yr17;yr18;yr19;yr20;yr1(1:15)];

% Error = 1.5782;

a1 = p*yr1;

a2 = p*F*Zk;

a3 = p*H*d_u;

d_unow = a1-a2-a3-Error;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务