函数的递推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; %就是一个赋值

for 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'

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值