广义预测控制和丢番图方程求解程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%GPC.m 广义预测自适应控制算法(GPC)

clear;

%被控对象为y(k)-2y(k-1)+1.1y(k-2)=u(k-4)+2u(k-5)+xi(k)/delta

A=[1 -2 1.1];C=1;d=4;

B=[zeros(1,d-1) 1 2];

% A=[1 -1.414 0.6065];d=1;B=[0.2088 0.1766];

na=length(A)-1;nb=length(B)-1; %na、nb分别为A、B末项下标

N1=d; %优化时域初值N1

N2=8; %优化时域终值N-7

Nu=2; %控制时域Nu

L=400; %仿真步长L

xi=sqrt(0.001)*randn(L,1); %xi(k):方差为0.01的白噪声序列

w=10*[ones(1,L/4),-ones(1,L/4),ones(1,L/4),-ones(1,L/4+d)];

%设定值w (振幅为10的方波信号)

dy=zeros(1,L); %用dy(t)表示Δy(t),存放每一时刻的Δy

du=zeros(L,1); %用du(k)表示Δu(t),存放每一时刻的Δu

dyt=zeros(na,1); %dyt(i)表示Δy(t-i),对每一时刻t,存放过去的Δy dut=zeros(nb+1,1); %dut(i)表示Δu(t-i),对每一时刻t,存放过去的Δu y=zeros(1,L); %存放每一时刻计算的系统输出值

u=zeros(1,L); %控制量初值

Y=zeros(na+1,1); %计算Δu式中的Y'=[Δy(t)Δy(t-1)……Δy(t-i)]

theta0=0.9*[A(2:na+1) B]'; %模型参数辨识初值

% theta0=[A(2:na+1) B]';

% theta0=0.001*ones(na+nb+2-d,1);

theta_e=zeros(na+nb+1,L); %θ的估计值,用θ(:,i)表示i时刻θ的估计值P=10^6*eye(na+nb+1); %协方差矩阵P初值

mu=0.98; %遗忘因子μ

alpha=0.2; %0<α<1用于计算参考轨迹

Lambda=1; %加权常数λ

%循环开始

for k=1:L

%计算输出数据

switch k

case 1

dy(1)=xi(1); %Δy(1)

y(1)=dy(1); %t=1时刻系统输出值

otherwise

dy(k)=-A(2:na+1)*dyt+B*dut+xi(k);

y(k)=y(k-1)+dy(k);

end

%辨识开始

X=[-dyt;dut];

switch k

case 1

theta_e(:,1)=theta0; %t=1时刻θ的估计值等于θ0

otherwise

theta_e(:,k)=theta_e(:,k-1)+P*X*(dy(k)-X'*theta_e(:,k-

1))/(mu+X'*P*X);

P=(1/mu)*(P-P*X*X'*P/(mu+X'*P*X));

end

%提取辨识结果

A_e=[1 (theta_e(1:na,k))'];

B_e=theta_e(na+1:na+nb+1,k)';

% A_e=A;

% B_e=B;%测试用

%解丢番图方程

[E,F,G,H]=DPT(A_e,B_e,N1,N2,Nu,na,nb); %计算参考轨迹

yr=zeros(N2,1);

yr(1)=y(k);

for i=2:N2

yr(i)=alpha*yr(i-1)+(1-alpha)*w(k+d); end

yr=yr(N1:N2);

%计算控制量

G1=(G'*G+Lambda*eye(Nu,Nu))^(-1)*G'; p=G1(1,:);

Y(1)=y(k);

switch k

case 1

otherwise

i=min(k,na+1);

for j=2:i

Y(j)=y(k-j+1);

end

end

switch k

case 1

du(1)=p*yr-p*F*Y;

otherwise

du(k)=p*yr-p*F*Y-p*H*dut(1:nb); end

switch k

case 1

u(1)=du(1);

otherwise

u(k)=u(k-1)+du(k);

end

for i=na:-1:2

dyt(i)=dyt(i-1);

end

dyt(1)=dy(k);

for i=nb+1:-1:2

dut(i)=dut(i-1);

end

dut(1)=du(k);

end

%图形显示

figure(1)

subplot(2,1,1);

plot(1:L,y);

xlabel('\fontsize{15}k');

ylabel('\fontsize{15}y,w');

hold on;

plot(1:L,w(1:L),':r');

subplot(2,1,2);

plot(1:L,u);

xlabel('\fontsize{15}k');

ylabel('\fontsize{15}u');

figure(2);

plot(1:L,theta_e)

xlabel('\fontsize{15}k');

ylabel('\fontsize{15}\theta');

function [E,F,G,H]=DPT(A_e,B_e,N1,N2,Nu,na,nb)

%************************************************ %功能:丢番图方程的递推求解

%输入:模型向量A、B的估计值A_e、B_e和下标na、nb, % 优化时域的初值和终止N1、N2,控制时域Nu

%输出:丢番图方程2.3、2.4(P11)中的E、F、G、H

%************************************************

E=zeros(N2,N2);

F=zeros(N2,na+1);

G=zeros(N2,Nu);

H=zeros(N2,nb);

AA=conv(A_e,[1 -1]);

AA=AA(2:na+2); % AA=A*Δ-1

F(1,:)=-AA;

for j=1:1:N2

for i=1:1:na+1

switch i

case na+1

相关文档
最新文档