最小二乘参数辨识方法及应用程序清单
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章最小二乘参数辨识方法及应用程序清单
一、3.2.2节利用最小二乘法求取模型参数的程序
二、3.3 加权最小二乘算法
程序3:最小二乘参数辨识程序
clear all%清理工作间变量
close all%关闭所有图形
clc%清屏
z(1)=440,z(2)=430,z(3)=420,z(4)=380,z(5)=370,z(6)=360,z(7)=320,z(8)=310,z(9)=300,z(10)=260,z(11)=250,z(12 )=240,z(13)=220,z(14)=210,z(15)=170,z(16)=160;
u(1)=3,u(2)=2.7,u(3)=2.4,u(4)=2.1,u(5)=2.0,u(6)=1.9,u(7)=1.6,u(8)=1.54,u(9)=1.48,u(10)=1.2,u(11)=1.14,u(12)=1 .08,u(13)=0.95,u(14)=0.9,u(15)=0.7,u(16)=0.6;
HL=[-z(1) u(1);-z(2) u(2);-z(3) u(3);-z(4) u(4);-z(5) u(5);-z(6) u(6); -z(7) u(7); -z(8) u(8);-z(9) u(9); -z(10) u(10);-z(11) u(11);-z(12) u(12);-z(13) u(13);-z(14) u(14)] %给样本矩阵HL赋值
ZL=[z(3);z(4);z(5);z(6);z(7);z(8);z(9);z(10);z(11);z(12);z(13);z(14);z(15);z(16)]% 给样本矩阵zL赋值
%calculating parameters%计算参数
c1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c=c2*c3 %计算并显示
%DISPLAY PARAMETERS
a2=c(1), b2=c(2)
三、3.4 递推最小二乘算法
程序4:递推最小二乘参数辨识程序
clear all%清理工作间变量
close all%关闭所有图形
clc%清屏
%%%%%%%%%%%%%%%%%%%%%%%%%% 产生白噪声的程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=6;
x0=1;M=255;
for k=1:10000
x2=A*x0;
x1=mod (x2,M);
v1=x1/256;
v(:,k)=(v1-0.5)*2;
x0=x1;
v0=v1;
end
num=v;
k1=k;
% num=zeros(1,1000);
% randn('seed',100);
% num=randn(1,1000);
% 白噪声程序结束%%%%%%%
%%%%%% M序列产生程序%%%L=15;% M序列的周期
y1=1;y2=1;y3=1;y4=0;%四个移位积存器的输出初始值
for i=1:L;%开始循环,长度为L
x1=xor(y3,y4);%第一个移位积存器的输入是第3个与第4个移位积存器的输出的“或”
x2=y1;%第二个移位积存器的输入是第3个移位积存器的输出
x3=y2;%第三个移位积存器的输入是第2个移位积存器的输出
x4=y3;%第四个移位积存器的输入是第3个移位积存器的输出
y(i)=y4;%取出第四个移位积存器幅值为"0"和"1"的输出信号,
if y(i)>0.5,u(i)=-1;%如果M序列的值为"1"时,辨识的输入信号取“-0.03”
else u(i)=1;%当M序列的值为"0"时,辨识的输入信号取“0.03”
end%小循环结束
y1=x1;y2=x2;y3=x3;y4=x4;%为下一次的输入信号做准备
end%大循环结束,产生输入信号u
figure(1);%第1个图形
stem(u),grid on%以径的形式显示出输入信号并给图形加上网格
%%%% M序列产生程序程序结束%%%
%%%% 递推最小二乘辨识程序%%%%%
lamt=1;
z(2)=0;z(1)=0;%取z的前两个初始值为零
for k=3:15;%循环变量从3到15
z(k)=-1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+0*num(1,k);%给出理想的辨识输出采样信号
end
%RLS递推最小二乘辨识
c0=[0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值,即一个充分小的实向量
p0=10^3*eye(4,4);%直接给出初始状态P0,即一个充分大的实数单位矩阵
E=0.000000005;%相对误差E=0.000000005
c=[c0,zeros(4,14)];%被辨识参数矩阵的初始值及大小
e=zeros(4,15);%相对误差的初始值及大小
for k=3:15; %开始求K
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';
x=h1'*p0*h1+1*lamt;
x1=inv(x); %开始求K(k)
k1=p0*h1*x1;%求出K的值
d1=z(k)-h1'*c0;
c1=c0+k1*d1;%求被辨识参数c
% p1=p0-k1*k1'*(h1'*p0*h1+1);%求出p(k)的值
p1=1/lamt*(eye(4)-k1*h1')*p0;
e1=c1-c0;%求参数当前值与上一次的值的差值
e2=e1./c0;%求参数的相对变化
e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的最后一列
c(:,k)=c1;%把辨识参数c 列向量加入辨识参数矩阵的最后一列
c0=c1;%新获得的参数作为下一次递推的旧参数
p0=p1;%给下次用
if e2<=E
break;%若参数收敛满足要求,终止计算
end%小循环结束
end%大循环结束
%%% 最小二乘辨识程序结束%%%%%
%%%% 辨识结果显示程序%%%%%
c%显示被辨识参数
e%显示辨识结果的收敛情况
%分离参数
a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:);
ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:);
figure(2);%第2个图形
i=1:15;%横坐标从1到15
plot(i,a1,'r',i,a2,'b',i,b1,'k',i,b2,'g') %画出a1,a2,b1,b2的各次辨识结果
title('递推最小二乘参数辨识')%图形标题
figure(3); %第3个图形
i=1:15; %横坐标从1到15
plot(i,ea1,'r',i,ea2,'b',i,eb1,'k',i,eb2,'g') %画出a1,a2,b1,b2的各次辨识结果的收敛情况title('辨识精度') %图形标题
%%% 辨识结果显示程序结束%%
四、3.5 增广最小二乘辨识算法及原理
程序5:增广递推最小二乘参数辨识程序
clear all%清理工作间变量
close all%关闭所有图形
clc%清屏
%%%% M序列、噪声信号产生及其显示程序%%%%
L=60;%四位移位积存器产生的M序列的周期
y1=1;y2=1;y3=1;y4=0;%四个移位积存器的输出初始值
for i=1:L;
x1=xor(y3,y4);%第一个移位积存器的输入信号
x2=y1;%第二个移位积存器的输入信号
x3=y2;%第三个移位积存器的输入信号
x4=y3;%第四个移位积存器的输入信号
y(i)=y4;%第四个移位积存器的输出信号,幅值"0"和"1"
if y(i)>0.5,u(i)=-1;%M序列的值为"1"时,辨识的输入信号取“-1”
else u(i)=1;%M序列的值为"0"时,辨识的输入信号取“1”
end
y1=x1;y2=x2;y3=x3;y4=x4;%为下一次的输入信号作准备
end
figure(1);%画第一个图形
subplot(2,1,1); %画第一个图形的第一个子图
stem(u),grid on%画出M序列输入信号
v=randn(1,60); %产生一组60个正态分布的随机噪声
subplot(2,1,2); %画第一个图形的第二个子图
plot(v),grid on;%画出随机噪声信号
R=corrcoef(u,v);%计算输入信号与随机噪声信号的相关系数