如何进行matlab的在线递推的matlab递推最小二乘法法?

关于递推最小二乘法辨识参数的matlab编程(含注释)
最近在做关于过热气温的动态建模问题。有现场运行的历史数据,要找出导前区和惰性区的传递函数。
对这类算法了解不多,程序读起来比较吃力,所以就转来一篇完整的辨识程序,在原有基础上进行了简化,并稍加注解一下,也能让有共同需要的朋友少花点时间。
function [sysd,sys,err]=ID(Y,U,Ts)
%基于递推最小二乘法的参数辨识程序
%仅针对二阶系统(工业对象大都是高阶系统,用起来很复杂,所以最终还是要降阶成为二阶近似系统)
%Inputs: Y是模型输出值,U是模型输入。二者都作为辨识程序的输入
%Outputs: sysd=离散传函,sys=连续传函,err=error
n=length(U);
Y=reshape(Y,n,1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%输出和输入的维数肯定是要对齐的,无须多言
U=reshape(U,n,1);
theta=[0.1;0.1;0.1;0.1;0.1]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%注意这是一个5*1矩阵
P=2^25*eye(5);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%P,和theta都是递推参数初始值,每一步递推都会改变
R0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%就是一个赋值
m=3:n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&X=[Y(m-1)
Y(m-2) U(m) U(m-1)
U(m-2)]';&&&
%X就是递推最小二乘法的算法公式中的Φ(k)
alfa=1/(R0+X'*P*X);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
L=alfa*P*X;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
theta(:,m-1)=theta(:,m-2)+L*(Y(m)-X'*theta(:,m-2));&
%theta=θ&&&&&%每迭代一次,theta就增加一列,新增加的那一列就是最新的参数估值。
P=P/R0-alfa*P*X*X'*P;
err=Y(m)-X'*theta(:,m-2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%计算实际输出值和估值输出的误差
&&&&&&&if&
abs(err)&=1e-10
&&&&&&&&&&&&&
m=length(theta(1,:));
result=[-theta(1:2,m);theta(3:5,m)];&&&&&&&&&&&&&&&&&&&
%对照着算法公式就明白了
&plot(t,theta(1,:),t,theta(2,:),t,theta(3,:),t,theta(4,:),t,theta(5,:));
legend('th1','th2','th3','th4','th5');
num=[result(3),result(4),result(5)];
den=[1,result(1),result(2)];
sysd=tf(num,den,Ts);
[n,d]=d2cm(num,den,Ts,'tustin');
sys=tf(n,d);
输入以下代码即可:
Y=data(:,3);U=data(:,2);
[sysd,sys,e]=ID(Y,U,0.001);
关于递推最小二乘法的算法公式,推荐这个###&&&
(###也包括在内。第15页有需要的公式,会用即可,不用追求太懂)
我的数据是在现场采集的,所以没法给出例子。但是在篇头给的原文地址中有范例,可以用simulink简单地试一下。
关于过热气温的建模,其实文献中有好多现成的例子。但是每个课题使用的机组都不同,得出的模型肯定也有差别,所以最好能亲自建模(就是求出对象的传递函数)。建模的步骤就不详谈了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
最小二乘法的Matlab实现  ① 一次函数 使用polyfit(x,y,1)  ②多项式函数 使用 polyfit(x,y,n),n为次数  拟合曲线  x=[0.5,1.0,1.5,2.0,2.5,3.0],  y=[1.75,2.45,3.81,4.80,7.00,8.60]。  解:MATLAB程序如下:  x=[0.5,1.0,1.5,2.0,2.5,3.0];  y=[1.75,2.45,3.81,4.80,7.00,8.60];  p=polyfit(x,y,2)  x1=0.5:0.05:3.0;  y1=polyval(p,x1);!!命令&polyval多项式函数的预测值,  plot(x,y,'*r',x1,y1,'-b')  计算结果为:  p =0.7 1.1560  即所得多项式为y=0..060  ③非线性函数 使用 lsqcurvefit(fun,x0,x,y)x=lsqcurvefit(@F, x0,t,y,v1,v2),
阅读(21596)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'最小二乘法的曲线拟合及matlab程序',
blogAbstract:'最小二乘法拟合:对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ 中,求p(x)∈Φ ,使误差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。从几何意义上讲,就是寻求与给定点 {(Xi,Yi)}(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。最小二乘法的Matlab实现',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:2,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}君,已阅读到文档的结尾了呢~~
递推最小二乘法的Matlab程序最..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
递推最小二乘法的Matlab程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口君,已阅读到文档的结尾了呢~~
基于MATLAB的递推最小二乘法..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于MATLAB的递推最小二乘法辨识与仿真
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 递推最小二乘法原理 的文章

 

随机推荐