📄 predictive control.txt
字号:
den=conv([1 1.1 36+0.55^2],[1 0.5 15.4^2+0.25^2]);
system=tf(num,den);
T=0.01;%
plant=c2d(system,T);
nump=get(plant,'num');nump=nump{:}; %获得分子项系数
denp=get(plant,'den');denp=denp{:}; %获得分母项系数
nnump=length(nump)-1; %分子项系数个数(阶次)
ndenp=length(denp)-1; %分母项系数个数(阶次)
step(system);
tend=6;
N=60;
Ts=0.1;
stepresp=step(plant,[T:T:tend]);
a=stepresp((Ts/T):(Ts/T):tend/T);
P=6;
M=4;
Q=diag(ones(P,1),0);
R=0*diag(ones(M,1),0);
A=zeros(P,M);%初始化动态矩阵A,P*M维
A(:,1)=a(1:1:P);
for i=1:P,
for j=2:M,
if i>=j,
A(i,j)=A(i-1,j-1);
end
end
end
Q=diag(ones(P,1),0);
R=0*diag(ones(M,1),0);
D=(inv(A'*Q*A+R))*A'*Q;
c=eye(1,M);
d=c*D;
S=zeros(N,N);
for i=1:N-1;
S(i,i+1)=1;
end
S(N,N)=1;
alpha=0.5;
h=alpha*ones(N,1);
h(1)=1;
w=ones(P,1);
I=zeros(P,N); %置换矩阵
for i=1:P,
I(i,i) =1;
end
y=zeros(N,1); %预测输出初始化
YY=zeros(tend/T,1); %实际输出初始化
UU=zeros( N,1); %控制作用u(k)初始化
u=0;
Yold=zeros(ndenp,1); %历史输出Yold维数为离散化模型的分母阶次
Uold=zeros(nnump,1);%历史输入Uold维数为离散化模型的分子阶次
count =0;
for i=1:T/Ts
count=count+1;
Uold=[u;Uold(1:nnump-1)];
YY(count)=-denp(2:ndenp)*Yold+nump(2:nnump)*Uold; %计算实际输出
Yold =[YY(count);Yold(1:ndenp-1)];
end
for t=1:tend/Ts;
e=YY(1)-y(1); %计算误差
y=y+h*e; %修正预测输出
y=S*y; %移位设置该时刻初值
du=d*(w-I*y); %计算控制增量
u=u+du; %计算控制量
UU(t)=u; %保存当前控制量
y=y+a*du; %计算预测输出
figure(1); %第1个图形
plot(stepresp,'-');
hold on
figure(2); %第2个图形
plot(y,'-');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -