实验题目梯度校正最小二乘法.docx
《实验题目梯度校正最小二乘法.docx》由会员分享,可在线阅读,更多相关《实验题目梯度校正最小二乘法.docx(10页珍藏版)》请在冰豆网上搜索。
实验题目梯度校正最小二乘法
1、实验题目:
梯度校正最小二乘法
2、实验工具:
MATLAB
三、实验目的:
通过MATLAB仿真实现梯度校正最小二乘法的验证。
四、实验框图:
五、实验思想:
递推算法的基本机构为:
新的参数估计值等于老的参数估计之加上增益矩阵与信息的乘积。
梯度校正参数识别方法具有相同的结构,但基本原理却完全不同与最小二乘法参数识别。
它的基本思想是沿着准则函数的负梯度方向,逐渐修正模型参数的估计值,直至准则函数达到最小值。
六、实验程序及结果:
辨别个数为3时的程序:
clear
u=[-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,1];
y=[0,-2,-6,-7,-7,-3,5,7,3,-1,5,3,-5,-3,1,-1,1,-5,-7,-7];
%画出u和y的图形
figure
(1),subplot(2,1,1),stem(u),subplot(2,1,2),stem(y),holdon
k=1:
20;plot(k,y)
%给出初始值
h1=[-1,0,0]';h2=[-1,-1,0]';g=[0,0,0]';I=[1,0,0;0,1/2,0;0,0,1/4];
h=[h1,h2,zeros(3,16)];
%计算样本数据h(k)
fork=3:
18
h(:
k)=[u(k),u(k-1),u(k-2)]';
end
%计算权矩阵R(k)和g的估计值
fork=1:
18
a=h(1,k)^2+(h(2,k)^2)/2+(h(3,k)^2)/4;a1=1/a;R=a1*I;
g(:
k+1)=g(:
k)+R*h(:
k)*(y(k+1)-h(:
k)'*g(:
k));
end
%绘图
g1=g(1,:
);g2=g(2,:
);g3=g(3,:
);
figure
(2);k=1:
19;subplot(121);plot(k,g1,'r',k,g2,'g',k,g3,'b'),gridon
%计算模型输出ym及系统输出与模型输出之间的误差Ey
fork=1:
18
ym(k)=h(:
k)'*g(:
k);Ey(k)=y(k+1)-ym(k);
end
k=1:
18;subplot(122);plot(k,Ey),gridon
g,ym,Ey%显示脉冲响应估计值、模型输出及系统输出与模型行输出之间的误差
figure(3);x=0:
1:
3;y=[0,g(1,18),g(2,18),g(3,18)];xi=linspace(0,3);yi=interp1(x,y,xi,'cubic');
plot(x,y,'o',xi,yi,'m'),gridon%画出脉冲响应估计值及其三次插值曲线
辨别个数为3时的结果
g=
Columns1through8
02.00004.66675.23815.23811.53742.14382.2393
001.33331.61901.61903.46943.77263.8204
0000.14290.14291.06800.91640.9403
Columns9through16
1.96581.95592.00631.99181.99801.99531.99951.9995
3.95713.96213.98733.99463.99773.99903.99693.9969
1.00871.00620.99360.99720.99570.99630.99740.9974
Columns17through19
1.99952.00012.0032
3.99693.99723.9988
0.99740.99720.9980
ym=
Columns1through8
0-2.0000-6.0000-7.00003.47623.93886.83282.5213
Columns9through16
-0.98264.91182.9746-4.9891-2.99531.0073-1.00001.0000
Columns17through18
-4.9990-6.9945
Ey=
Columns1through8
-2.0000-4.0000-1.00000-6.47621.06120.16720.4787
Columns9through16
-0.01740.08820.0254-0.0109-0.0047-0.0073-0.00000
Columns17through18
-0.0010-0.0055
图一
辨别个数为5时的程序:
>>clear
u=[-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,1];
y=[0,-2,-6,-7,-7,-3,5,7,3,-1,5,3,-5,-3,1,-1,1,-5,-7,-7];
%画出u和y的图形
figure
(1),subplot(2,1,1),stem(u),subplot(2,1,2),stem(y),holdon
k=1:
20;plot(k,y)
%给出初始值
h1=[-1,0,0,0,0]';h2=[-1,-1,0,0,0]';h3=[-1,-1,-1,0,0]';h4=[-1,-1,-1,-1,0]';g=[0,0,0,0,0]';I=[1,0,0,0,0;0,1/2,0,0,0;0,0,1/4,0,0;1,0,0,1/6,0;1,0,0,0,1/8];
h=[h1,h2,h3,h4,zeros(5,16)];
%计算样本数据h(k)
fork=5:
18
h(:
k)=[u(k),u(k-1),u(k-2),u(k-3),u(k-4)]';
end
%计算权矩阵R(k)和g的估计值
fork=1:
18
a=h(1,k)^2+(h(2,k)^2)/2+(h(3,k)^2)/4+(h(4,k)^2)/6+(h(5,k)^2)/8;a1=1/a;R=a1*I;
g(:
k+1)=g(:
k)+R*h(:
k)*(y(k+1)-h(:
k)'*g(:
k));
end
%绘图
g1=g(1,:
);g2=g(2,:
);g3=g(3,:
);g4=g(4,:
);g5=g(5,:
);
figure
(2);k=1:
19;subplot(121);plot(k,g1,'r',k,g2,'g',k,g3,'b',k,g4,'y',k,g5,'b'),gridon
%计算模型输出ym及系统输出与模型输出之间的误差Ey
fork=1:
18
ym(k)=h(:
k)'*g(:
k);Ey(k)=y(k+1)-ym(k);
end
k=1:
18;subplot(122);plot(k,Ey),gridon
g,ym,Ey%显示脉冲响应估计值、模型输出及系统输出与模型行输出之间的误差
figure(3);x=0:
1:
5;y=[0,g(1,18),g(2,18),g(3,18),g(4,18),g(5,18)];xi=linspace(0,5);yi=interp1(x,y,xi,'cubic');
plot(x,y,'o',xi,yi,'m'),gridon%画出脉冲响应估计值及其五次插值曲
辨别个数为3时的结果
g=
Columns1through8
02.00004.66675.23812.50521.89884.67869.4430
001.33331.61900.25260.55581.94574.3279
0000.1429-0.5404-0.3888-1.08370.1074
02.00004.66675.23812.04971.54433.86097.8312
02.00004.66675.23812.50521.97464.40708.5758
Columns9through16
5.15620.8088-0.37202.34080.74252.95322.78644.7719
6.47138.64508.05466.69825.89914.79374.87713.8844
1.17910.09220.3874-0.29080.1088-0.4439-0.48560.0108
4.2588-0.8130-2.19070.9742-0.35762.22152.02693.6815
3.7531-1.1377-2.4661-0.0924-1.89040.59650.45062.1879
Columns17through19
4.57362.05253.2521
3.98352.72303.3227
-0.03870.59150.8914
3.51620.57491.5745
1.9649-0.24111.1084
ym=
Columns1through8
0-2.0000-6.0000-12.2381-1.7619-0.6756-2.7272-5.7523
Columns9through16
7.87587.41098.5386-8.2631-7.51340.6595-5.05380.5952
Columns17through18
-10.1473-4.5510
Ey=
Columns1through8
-2.0000-4.0000-1.00005.2381-1.23815.67569.72728.7523
Columns9through16
-8.8758-2.4109-5.53863.26314.51340.34054.05380.4048
Columns17through18
5.1473-2.4490
图二
七、实结果分析:
图一递推到第10步时,被识别参数基本上达到了稳定状态,即
此时系统的输出与模型的输出误差也基本达到稳定状态,即
由于被识别参数的个数较少,递推校正算法的熟练性较好,也就是说,输入输出的观测数据量已足够。
但是从图一的figure3中可以看出,由于被识别你别参数的个数较少,他一不足以充分显示全部的系统脉冲响应。
为了能够充分显示系统的脉冲响应,可以把被识参数的个数增加到5个。
图二给出了被识别参数的个数为5时的识别结果。
图二基本显示出了系统的全部脉冲响应过程。
但是在图二的辨识中,还是利用了上面给出的20对输入输出数据。
通过图一与图二的比较可以看出,在观测数据两一定的情况下,随着被辨别参数的个数的增加,梯度校正辨别算法的收敛性变差,这是由于观测数据不足,递推步数有限造成的。
所以,随着被辨别参数的个数的增加,若要保持梯度校正辨别算法的收敛效果,需要同步增加观测数据。
8、实验心得:
张旭:
通过这次实验,我学会了很多受益匪浅,这次实验在我们组员的共同努力我们的实验完成得很顺利,一方面对MATLAB有了进一步的认识,一方面学习了梯度校正最小二乘辨识参数的方法。
耿莉:
通过这次试验,我再一次和我的partners合作完成了这次实验,在实验中在matlab平台上完成了我们这次试验,在实验中我我们了解了梯度校正参数识别方法,从确定性问题的梯度校正参数的辨识到脉冲响应梯度校正辨识再到随机性问题的梯度校正参数的辩证,我们这次课题的主要针对脉冲响应梯度辨识的MATLAB仿真。
从确定性梯度校正辨识公式的推到到权矩阵的选择到最终线性时不变系统脉冲相应的辨识,我在这次实验中不但学会了在团队中如何发挥自己的作用,完成实验,也对MATLAB工具有了深刻的认识。
谭方:
在经历过找工作的坎坷后,沉静下来的心开始进入学习状态,希望可以有一门自己的本事,尤其是作为硬件类学生会一样硬件类开发工具将会有多大的优势,在经历过protel的打击后我在这次试验中认真对MATLAB认真系统的学习,一边自己学习,一边跟我的搭档们合作,完成了本次实验,也学会了很多东西,更希望它之后可以有助于我的将来。
王余刚:
看到大家的心得体会,我感觉他们都说到了我的心里面,感觉是那么的实在,一方面我也处于找工作的苦恼中,明白真本事在工作的竞争力量,一方面在跟大家一起做实验中,也体会了团队的力量,并不是一个人可以替代的,大家可以解决很多问题,比如在这次试验中我们遇到将便是个数增大的问题时,在大家的共同努力下,我们很快解决了问题。
李妮:
在上次利用MATLAB做完PID控制的实验后,已经好久没有碰MATLAB这个工具了,这次实验一方面温习了这个工具,我们这次做的实验是基于线性时不变SISO系统,是建立在确定性问题的梯度校正参数识别的基础之上的,一方面了解了梯度校正参数识别的原理和过程,特别是在将辨识个数有3改为5时,特别领会了梯度校正的具体过程,辨别个数越多,辨别算法的收敛性越差,但是辨识个数有同时限制着系统脉冲响应的显示,所以选择合适的辨别个数是这次实验的最大收获。