Matlab在线性参数最小二乘法中的应用.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Matlab在线性参数最小二乘法中的应用

Matlab在线性参数最小二乘法中的应用 姓 名: 张东风 学 号: 0702381008 班 级: 测控071 指导老师: 林富生 日 期: 2010/12/26 一:核心算法介绍 1.参数的最小二乘法处理 为了确定t 个不可直接测量的未知量X1,X2,?,Xt的估计值x1,x2,?,xt,可对与该t 个未知量有线性系的直接测量量Y(Y=a1X1+a2X2+?+atXt)进行n 次测量,测得数据为: l1,l2,?,ln。设直接测量量Y1,Y2,?Y3的估计值用y1,y2,?,yn表示,则线性参数的测量方程为: (1) 相应的估计量为: (2) 由于测量误差的存在,估计值与实测值不完全相等,其误差方程为: (3) 由最小二乘法可知: 参数的最佳值应在残余误差平方和为最小的条件下给出,即应满足: (4) 利用极值的偏倒数为零的性质,现用残余误差平方和对t个未知量求偏导,并令其为零,可得到t个方程,整理后得: (5) 此方程即为线性参数最小二乘法处理的正规方程,方程的个数等于未知量的个数,有唯一确定的解,由此可解得欲求的估计量。 但从方程中也可以看出,计算工作量将随未知量个数的增大而迅速增大,计算非常繁杂,因此借助Matlab强大的计算功能可迅速减小工作量,而且准确可靠,减小人为误差。 为了借助Matlab强大的矩阵运算功能,对正规方程表示成矩阵形式,如式(6)所示: (6) 令 则式(6)可表示为: (7) 式(3)可表示为: (8) 把式(8)代入式(9)得: 由此可得未知量最佳估计值的矩阵解: Matlab 求解算法流程如图一所示: 2.实例数据处理: 研究测力计示值F 与测量时的温度t 的对应关系,已知F 值随t 的变化呈线性关系F=k0+kt,为求出k0和k 最小二乘估计及其相应精度,独立测得数据如表一所示: 表一强度与力关系表 程序代码如下: A=[1,15;1,18;1,21;1,24;1,27;1,30]; L=[43.61;43.63;43.68;43.71;43.74;43.78]; C=inv(A*A); B=A*L; X=C*B V=L-A*X; V1=V*V; Q=sqrt(V1/4); gidu=Q*sqrt(diag(C)) 程序输出结果为: X=[43.4324;0.0115] gidu=[0.0119;0.0005] 即k0的最佳估计值为43.4324,精度为0.0119; k 的最佳估计值为0.0115,精度为0.0005。 二.程序接界面设计: 打开程序加入欢迎界面,如图所示: 点击OK加入主界面,如图所示: Help界面: 关于界面: 该程序可以从外部的TXT格式的文件中读入参数,参数一以事先录在A.TXT,参数二可以事先录在B.TXT 如图所示: 点击File-( DataFromFile,读入数据点击OK进行计算,结果如图所示: 三.部分程序解释: 1.欢迎界面点击OK后,欢迎界面将退出,然后调用主界面,程序如下, h=gcf;%获取当前界面的句柄 zuixiaoerchfa2;%%调用zuixiaoerchfa2函数,即显示主界面 delete(h);%%退出欢迎界面 Help界面和关于界面中的PushButton的CallBack函数语句类似。 2.主界面函数实现 ①在参数一和参数二中没有输入数据或者输入数据列数不相等,或者输入数据出现错误,OK按钮将不可用。实现代码为: str1=get(handles.edit1,String); str2=get(handles.edit2,String);%%分别得到两个输入框edit1和edit2中的字符 str11=str2num(str1); str21=str2num(str2);%%将得到的字符分别转化为数字 [str12,str13]=size(str11); [str22,str23]=size(str21);%%得到两组数据的行数和列数,行数存在str12和str22中 if str12==str22~=0 str12~=0 set(handles.pushbutton1,Enable,ON);%%如果输入数据满足要求,使能OK按钮 else set(handles.pushbutton1,Enable,OFF);%%否者禁止OK按钮 end ②OK按钮函数代码如下: A1=get(handles.edit1,String); B1=get(handles.edit2,String);%%分别得到两个输入框中的数据 A=str2num(A1); L=str2num(B

您可能关注的文档

文档评论(0)

weizhent2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档