function [sysd,sys,err] = ID(Y,U,Ts)
%
%基于递推最小二乘法的参数辨识程序
%仅针对二阶系统:)
%出处:>
写在前面:
喵。。也就我这么好心。。。只有15分还帮你写程序。。。。
如果你将来做技术,你就会经常要搭建数学模型,那么就会大量运用各种的最小二乘法来拟合模型参数,所以要好好学哦,亲~
希望通过这个例子,能够让你对最小二乘法入门。。。
开始:
最小二乘法,通常用在,我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。
本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测很多组数据来让我的a和b更加准确。
“我们测很多组数据来让我的a和b更加准确” ,那么我从数学角度如何体现这句话呢?
比如在此例中,已知数学模型 y=ax+b
我们有很多组数据,那么我们要找一条直线,使得我们测得的每个数据,到这条直线的偏离量的总和最小。(这句话有点拗口,慢慢理解下 = =)
那么怎么用数学描述“偏离量总和最小”这个概念呢?
数学家运用了方差!
数学模型 y=ax+b
设F=ax+b-y
那么对于模型上的点(注意是模型上的点,也就是理论值),F=ax+b-y=0
但是对于实际值来说,F=axi+b-yi 一定不等于0。那么我们就要找到一对a和b,使得F尽可能接近于0。
也就是说,“偏离量总和最小”这个概念,在数学上实际上就是要求F的方差最小。
即 Σ F^2→0 (F的平方和趋近于0)
即 Σ(axi+b-yi)^2→0
那么我们得到一个方程f(a,b)=Σ(axi+b-yi)^2,我们要找到合适的a,b使得f(a,b)最小!
也就是说,我们要找到的实际上是f(a,b)的最小值点。(因为方差不可能小于0)
因此我们需要求f(a,b)的极值点。我们借助数学工具偏导。
如果有一组a,b使得
∂f(a,b)/∂a=0
∂f(a,b)/∂b=0
那么f(a,b)就是极值点,如果a,b只有一对,那么它就是最小值点。
即 ∂( Σ(axi+b-yi)^2 )/∂a=0
∂( Σ(axi+b-yi)^2 )/∂b=0
化简得到
aΣxi^2 + bΣxi = Σ(xiyi)
aΣxi + bN = Σyi
其中N是(xi,yi)的个数。即我们测了多少组数据
解上面的二元方程,我们就可以得到唯一的一组a,b啦,这就是我们所需要的a和b
O(∩_∩)O~是不是蛮简单的?
Matlab最基础的程序如下。。。= =
%原始数据
X=[163 123 150 123 141];
Y=[186 126 172 125 148];
n=5; %一共5个变量
x2=sum(X^2); % 求Σ(xi^2)
x1=sum(X); % 求Σ(xi)
x1y1=sum(XY); % 求Σ(xiyi)
y1=sum(Y); % 求Σ(yi)
a=(nx1y1-x1y1)/(nx2-x1x1); %解出直线斜率b=(y1-ax1)/n
b=(y1-ax1)/n; %解出直线截距
%作图
% 先把原始数据点用蓝色十字描出来
figure
plot(X,Y,'+');
hold on
% 用红色绘制拟合出的直线
px=linspace(120,165,45);
py=apx+b;
plot(px,py,'r');
结果 a=15555 b=-66365
喵~希望对你有帮助。。眼泪汪汪。。啪嗒啪嗒。。。
Matlab利用最小二乘法对荧光寿命进行拟合,可以按下列步骤进行:
1、要已知一组t、N的数据(10个以上)
2、利用plot()绘出其散点图,确定荧光寿命函数模型
3、利用nlinfit或lsqcurvefit等拟合函数,拟合出其系数
4、根据t的取值范围,用荧光寿命函数,求出相应的N值。
5、再用plot()绘出t—N关系曲线图
x=[80 85 90 95 100 105 110 113 115];
y=[4152231 13424033 24250989 37160690 52923648 72921277 100454481 124380081 148070950];
A=polyfit(x,y,2)
结果为
A =
10e+004
00010 -01613 64443
曲线拟合\x0d\已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值,这一过程称为曲线拟合。最常用的曲线拟合方法是最小二乘法,该方法是寻找函数使得最小。\x0d\MATLAB函数:p=polyfit(x,y,n)\x0d\[p,s]= polyfit(x,y,n)\x0d\说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s用于生成预测值的误差估计。(见下一函数polyval)\x0d\多项式曲线求值函数:polyval()\x0d\调用格式: y=polyval(p,x)\x0d\[y,DELTA]=polyval(p,x,s)\x0d\说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。\x0d\[y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计YDELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则YDELTA将至少包含50%的预测值。\x0d\\x0d\练习:如下给定数据的拟合曲线,x=[05,10,15,20,25,30],\x0d\y=[175,245,381,480,700,860]。\x0d\解:MATLAB程序如下:\x0d\x=[05,10,15,20,25,30];\x0d\y=[175,245,381,480,700,860];\x0d\p=polyfit(x,y,2)\x0d\x1=05:005:30;\x0d\y1=polyval(p,x1);\x0d\plot(x,y,'r',x1,y1,'-b')\x0d\计算结果为:\x0d\p =05614 0828711560\x0d\即所得多项式为y=05614x^2+008287x+115560\x0d\===========================================================================\x0d\===========================================================================\x0d\polyfit函数是matlab中用于进行曲线拟合的一个函数。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。\x0d\解释1用法 polyfit(x,y,n ) ;用多项式求过已知点的表达式,其中x为源数据点对应的横坐标,可为行向量、矩阵,y为源数据点对应的纵坐标,可为行向量、矩阵,n为你要拟合的阶数,一阶直线拟合,二阶抛物线拟合,并非阶次越高越好,看拟合情况matlab polyfit 做出来的值从左到右表示从高次到低次的多项式系数给个例子一看就知道了x = (0: 01: 25)';y = erf(x);p = polyfit(x,y,6)p =00084 -00983 04217 -07435 01471 11064 00004则y=00084x^6-00983x^5+04217x^4-07435x^3+01471x^2+11064x+00004解释2:MATLAB软件提供了基本的曲线拟合函数的命令.多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式y=a1xn++anx+a n+1的系数多项式在x处的值y可用下面程序计算.y=polyval(a,x,m)线性:m=1, 二次:m=2, polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。例:x=0:01:1; y=[-0447 1978 328 616 708 734 766 956 948930 112]; \x0d\polyfit用法示例结果\x0d\A=polyfit(x,y,2)z=polyval(A,x);plot(x,y,'r',x,z,'b')释疑:在不少书中和论坛上,polyfit被误写作“ployfit”,使得很多初学者误解,认为自己安装的MATLAB软件出错,无法找到这样的函数。只要注意拼写正确即可。同样地,polyval函数也易被误写为“ployval”。
以上就是关于用matlab最小二乘法编写程序求方程参数的值全部的内容,包括:用matlab最小二乘法编写程序求方程参数的值、在matlab 中用最小二乘法拟合y=a*x^2+b*x的程序要如何写、Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)