用matlab实现最小二乘递推算法辨识系统参数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动化专业综合设计报告
设计题目:最小二乘递推算法辨识系统参数所在实验室:自动化系统仿真实验室
指导教师:
学生姓名
班级计082-2 班
学号
撰写时间:2012-3-1 成绩评定:
一.设计目的
1、学会用Matlab实现最小二乘法辨识系统参数。
2、进一步熟悉Matlab的界面及基本操作;
3、了解并掌握Matlab中一些函数的作用与使用;
二.设计要求
最小二乘递推算法辨识系统参数,利用matlab编程实现,设初始参数为零。z(k)-1.5*z(k-1)+0.7*z(k-2)=1*u(k-1)+0.5*u(k-2)+v(k);
选择如下形式的辨识模型:
z(k)+a1*z(k-1)+a2*z(k-2)=b1*u(k-1)+b2*u(k-2)+v(k);
三.实验程序
m= 3;
N=100;
uk=rand(1,N);
for i=1:N
uk(i)=uk(i)*(-1)^(i-1);
end
yk=zeros(1,N);
for k=3:N
yk(k)=1.5*yk(k-1)-0.7*yk(k-2)+uk(k-1)+0.5*uk(k-2);
end
%j=100;kn=0;
%y=yk(m:j)';
%psi=[yk(m-1:j-1);yk(m-2:j-2);uk(m-1:j-1);uk(m-2:j-2)]';
%pn=inv(psi'*psi);
%theta=(inv(psi'*psi)*psi'*y);
theta=[0;0;0;0];
pn=10^6*eye(4);
for t=3:N
ps=([yk(t-1);yk(t-2);uk(t-1);uk(t-2)]);
pn=pn-pn*ps*ps'*pn*(inv(1+ps'*pn*ps));
theta=theta+pn*ps*(yk(t)-ps'*theta);
thet=theta';
a1=thet(1);
a2=thet(2);
b1=thet(3);
b2=thet(4);
a1t(t)=a1;
a2t(t)=a2;b1t(t)=b1;b2t(t)=b2;
end
t=1:N;
plot(t,a1t(t),t,a2t(t),t,b1t(t),t,b2t(t));
text(20,1.47,'a1');
text(20,-0.67,'a2');
text(20,0.97,'b1');
text(20,0.47,'b2');
四.设计实验结果及分析
实验结果图:
仿真结果表明,大约递推到第十步时,参数辨识的结果基本到稳态状态,即a1= 1.5999,b1=1,c1=0.5,d1=-0.7。
五.设计感受
这周的课程设计告一段落了,时间短暂,意义重大。通过这次次练习的机会,重新把matlab课本看了一遍,另外学习了系统辨识的有关内容,收获颇丰。对matlab的使用更加纯熟,也锻炼了自己在课本中搜索信息和知识的能力。在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。同时我也进一步认识了matlab软件强大的功能。在以后的学习和工作中必定有很大的用处。