用matlab最小二乘法编写程序求方程参数的值

如题所述

function [sysd,sys,err] = ID(Y,U,Ts)
%
%基于递推最小二乘法的参数辨识程序
%仅针对二阶系统:)
%出处:http://blog.sina.com.cn/xianfa110
%=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=
%Inputs:
%=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=
%Y = nX1 vector of your model output
%U = nX1 vector of your model input
%Ts = sample time
%
%=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=
%Outputs:
%=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=
%sysd = discrete-time transfer function identified
%sys = continuous-time transfer function identified
%err = error
%
if nargin<3 || nargin>3
error('Must be three inputs!');
end
if length(Y)~=length(U)
error('length of inputs must be equal.');
end
n=length(U);
Y=reshape(Y,n,1);
U=reshape(U,n,1);
theta=[0.1;0.1;0.1;0.1;0.1];
P=2^25*eye(5);
R0=1;
for m=3:n
X=[Y(m-1) Y(m-2) U(m) U(m-1) U(m-2)]';
alfa=1/(R0+X'*P*X);
L=alfa*P*X;
theta(:,m-1)=theta(:,m-2)+L*(Y(m)-X'*theta(:,m-2));
P=P/R0-alfa*P*X*X'*P;
err=Y(m)-X'*theta(:,m-2);
if abs(err)<=1e-10
break;
end
end
m=length(theta(1,:));
result=[-theta(1:2,m);theta(3:5,m)];
t=1:m;
figure;
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);
%%====================================================
exaple:
对于以下模型:

运行之后,数据通过Scope传递到工作空间,方法参见Simulink利用Scope输出及绘制仿真波形技巧。
输入以下代码:
Y=data(:,3);U=data(:,2);
[sysd,sys,e]=ID(Y,U,0.001);
得到结果如下:
Transfer function:
-4.314e-009 z^2 + 8.784e-005 z + 4.362e-005
-------------------------------------------
z^2 - 1.975 z + 0.9753

Sampling time: 0.001

Transfer function:
-1.12e-005 s^2 - 0.04417 s + 133.1
----------------------------------
s^2 + 25.02 s - 0.008906

e =
-6.8120e-011
温馨提示:内容为网友见解,仅供参考
无其他回答

用matlab最小二乘法编写程序求方程参数的值
用matlab最小二乘法编写程序求方程参数的值 x=[10,20,30,35,40,50,60,70,80,90,100]';y=[2.1681,2.2030,2.2482,2.2783,2.3075,2.3687,2.4364,2.5053,2.5882,2.6663,2.7611]';X=[ones(size(x)) x x.^2];coe=X\\y ...

如何在matlab用最小二乘拟合求方程参数a b,已有x,y数据集,方程如图
总的来说微分方程参数拟合有三种方法:1.将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。2 将问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测...

最小二乘法求多元线性回归方程Matlab
第二步:表达式为 y=-0.0第一步:第一步:第六步:x^第二步:+第三步:第一步:.第三步:第一步:第一步:第八步:x+第三步:第一步:第七步:.第三步:第二步:第七步:第一步:;第三步:regress用于一元及多元线性回归,本质上是最小二乘法。在Matlab 第二步:0第一步:第四...

最小二乘法(附MATLAB代码)
对于需要了解最小二乘法的朋友们,这里提供一个MATLAB实现的简单教程。首先,最小二乘法涉及到两个基本函数:polyfit(x,y,n)和polyval(p,x)。polyfit函数用于计算拟合多项式系数,接受输入为x和y的向量,其中x代表自变量,y代表因变量,n则指定拟合的多项式次数。返回的p向量按多项式降幂排列。而polyval...

用matlab算最小二乘法
用matlab计算最小二乘法实验报告,大致可以按下列步骤进行 1、【实验目的】 了解了什么,学习了什么 2、【实验内容】计算数据和要求 3、【实验准备】最小二乘法的知识内容及MATLAB最小二乘法的的命令内容 4、【实验方法与步骤】5、【结果分析与讨论】由于不知道具体的问题,较详细的内容也无法来描述...

关于matlab最小二乘法的问题?
最小二乘法的问题如何用matlab来实现?我们可以根据数理统计的最小二乘法原理来写:为了说明问题,特举例。已知某种合金的抗拉强度y与含碳量x的数据,求其一元线性回归数学模型(y=β0+β1*x)。第一步,将含碳量数据和合金的抗拉强度数据分别赋值给x、y,即 x=【。。。】y=【。。。】第二步...

如何用MATLAB进行最小二乘法参数估计
用最小二乘法进行AR(n)模型的参数估计,其实很简单,关键是要把序列写成矩阵形式:Y=XΦ+a可直接算出系数Φ的最小二乘估计=inv((X'*X))*(X'Y)

求一matlab程序(最小二乘法)
clear >> x=[19 ,25 ,31 , 38, 44];>> f=[19.0,32.3,49.0,73.3,97.8];>> xx=x.^2;>> A=[xx;ones(size(x))]';>> c=A\\f';>> a=c(2);>> b=c(1);>> y=a+b*xx;>> plot(x,f,'.',x,y,'r')做出的图,点表示原始数值。红线为拟合的直线。

matlab中用最小二乘法拟合直线怎么做?
最小二乘法,通常用在我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测...

如何用matlab做最小二乘法求弹簧的k值
F=[9,19,29,41,50,58,71];k=x'\\F'得到:k = 9.9500 (2)M-T^2 我们知道 k\/M=[(2*pi)\/T]^2 变形得 k\/(4*pi^2*m)=1\/T^2 上式是关于k的一元方程 比说说数据:T=[1,2,3,4,5,6,7]; %这是T M=[9,19,29,41,50,58,71];T2=T.^2;A=1\/4\/pi^2.\/M;b=...

相似回答