%递推增广最小二乘参数估计(RELS)
clear all;
close all;
clc;
d=3; %对象参数
na=2; nb=1; nc=1; %na、nb、nc为多项式A、B、C阶次
nf=nb+d-1; %nf为多项式F的阶次
L=400; %控制步数
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
yrk=zeros(nc,1); %期望输出初值
xik=zeros(nc,1); %白噪声初值
xiek=zeros(nc,1); %噪声估计初值
for k=1:L+d
yr(k,1)=2*sin(0.13*pi*k); %期望输出
end
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列
%RELS初值设置
thetae_1=0.001*ones(na+nb+1+nc,1); %非常小的正数(这里不能为零)
P=10^6*eye(na+nb+1+nc);
for k=1:L
time(k)=k;
y(k)=(yk(1)*yk(2)*(yk(1)-2.5))/(1+yk(1)*yk(1)+yk(1)*yk(1))+uk(1); %采集系统真实的输出数据
%递推增广最小二乘法
phie=[-yk;uk(d:d+nb);xiek];
K=P*phie/(1+phie'*P*phie);
thetae(:,k)=thetae_1+K*(y(k)-phie'*thetae_1);
P=(eye(na+nb+1+nc)-K*phie')*P;
xie=y(k)-phie'*thetae(:,k); %白噪声的估计值
%提取辨识参数
ae=[1;thetae(1:na,k)];
be=thetae(na+1:na+nb+1,k);
ce=[1;thetae(na+nb+2:na+nb+1+nc,k)];
if abs(be(2))>0.9
be(2)=sign(ce(2))*0.9; %MVC算法要求B稳定
end
if abs(ce(2))>0.9
ce(2)=sign(ce(2))*0.9; %MVC算法要求B稳定
end
[e,f,g]=Func_diophantine(ae,be,ce,d); %求解单步Diophantine方程
u(k)=(-f(2:nf+1)*uk(1:nf)+ce'*[yr(k+d:-1:k+d-min(d,nc));yrk(1:nc-d)]-g*[y(k);yk(1:na-1)])/f(1); %求控制量
%更新数据
thetae_1=thetae(:,k);
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
for i=nc:-1:2
yrk(i)=yrk(i-1);
xik(i)=xik(i-1);
xiek(i)=xiek(i-1);
end
if nc>0
yrk(1)=yr(k);
xik(1)=xi(k);
xiek(1)=xie;
end
end
figure(1);
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('k');ylabel('yr(k)和y(k)');
legend('yr(k)','y(k)');
axis([0 L -20 20]);
subplot(2,1,2);
plot(time,u);
xlabel('k');ylabel('u(k)');
legend('u(k)');
axis([0 L -20 20]);
figure(2);
subplot(2,1,1);
plot([1:L],thetae(1:na,:));
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2');
%axis([0 L -3 2]);
subplot(2,1,2);
plot([1:L],thetae(na+1:na+nb+1+nc,:));
xlabel('k'); ylabel('参数估计b、c');
legend('b_0','b_1','c_1');
% axis([0 L 0 1.5]);
assignment2_1.zip_在线参数估计_控制系统跟踪_最小方差自校正控制器
版权申诉
144 浏览量
2022-07-15
21:25:46
上传
评论 2
收藏 1KB ZIP 举报
JaniceLu
- 粉丝: 78
- 资源: 1万+
最新资源
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- sdk.config
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
- 基于matlab实现进行简单车辆识别-车辆检测.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈