matlab中用最小二乘法拟合直线怎么做?

如题所述

最小二乘法,通常用在我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。

本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测很多组数据来让我的a和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 = Σ(xi*yi)

    a*Σxi + b*N = Σyi

    其中N是(xi,yi)的个数。即我们测了多少组数据

    解上面的二元方程,我们就可以得到唯一的一组a,b啦,这就是我们所需要的a和b

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-20
用polyfit函数,(用来多项式拟合的,是用最小二乘法)

举个例子
x=[90 91 92 93 94 95 96];
z=[70 122 144 152 174 196 202];
a=polyfit(x,z,1)

结果:

a =
1.0e+03 *
0.0205 -1.7551
1表示1次多项式(一次时就是直线,适用于你的情况)
a是多项式的系数向量,是从高次项往低次项排的,
如果想运用结果,比如想知道当x=97时z等于多少
那么有两种方法,
直接用系数

>> a(1)*97+a(2)
ans =
233.4286
或者用polyval函数
>> polyval(a,97)
ans =
233.4286

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

最小二乘算法原理、来源及其Matlab实现(直线拟合)
理想情况下,我们可能只需两次观测,但现实中,为了抵消误差,通常会进行多次观测,形成多组数据(ti, yi)。此时,目标是找到使各观测点与拟合直线偏差平方和最小的a和b值。最小二乘法的起源可追溯至勒让德1805年的著作,他提出通过最小化误差平方和来找到“最佳”解,这一理论后来由高斯在1809年的...

最小二乘法在matlab中怎么实现啊?
matlab中用最小二乘拟合的常用函数有polyfit(多项式拟合)、nlinfit(非线性拟合)以及regress(多元线性回归)。自变量有2个或以上时,应变量一个,可以使用的有nlinfit和regress,线性时用regress,非线性时用nlinfit。对于进阶matlab使用者还有更多的选择,如拟合工具箱、fit函数、interp系列插值拟合等等。具...

Matlab 的线性回归最小二乘法 求大神解答
使用最小二乘法拟合比较简单:x_r=[abscissa ones(size(abscissa))]\\ordinates;求出来即为题中的x和γ。如果不限方法,也可以使用多项式拟合:p = polyfit(abscissa, ordinates,1);得到的结果是一致的(但二者分别是列向量和行向量)。使用绝对值最小的拟合方法稍微复杂一些:e = ones(size(absciss...

matlab最小二乘法拟合曲线
Matlab最小二乘法拟合曲线的步骤:1. 准备数据:准备要进行拟合的数据点集,包括横坐标和纵坐标的数据。2. 使用polyfit函数进行拟合:在Matlab中,可以使用polyfit函数进行多项式拟合,该函数基于最小二乘法原理。调用格式为[p,S,mu] = polyfit,其中x和y是数据点,n是多项式的阶数,p是多项式系数向量...

matlab 最小二乘法拟合
主要的问题是inline函数写法不对,matlab不能识别下面的写法:f = inline('R * exp(-a * x)','[R a]','x');像这种有多个待辨识参数的情况,应该写成一个向量,如 f = inline('c(1) * exp(-c(2) * x)','c','x');参考代码:生成测试数据t=linspace(0,2*pi,50);x=1.5*...

怎样用matlab作数据的最小二乘拟合?
用polyfit()语句可以,polyfit(x,y,拟合次数n);x,y是你的数据,n是你要进行几次拟合,填1的话为一次也就是最小二乘法拟合 你可以这样写 x=[0.250.50.7511.522.533.544.55678910111213141516];y=[3068758282776868585150413835282518151210774];p=polyfit(x,y,1);plot(x,y,'b',x,polyval(p,x...

如何用最小二乘法在matlab中将六个离散点连成直线
比如:x=1:3:13;y=2*x+5*rand;p=polyfit(x,y,1);%一次拟合,即得到直线;y2=polyval(p,x);%求拟合后的直线上的点的纵坐标;plot(x,y,'b*',x,y2);

...自带的VBA程序实现数据的最小二乘法拟合直线?
你需要一段可以实现“最小二乘法”的程序;这个程序可以为Excel所用,解决具体的曲线拟合问题;所以我的解决方法是:用Matlab的最小二乘法解决这个问题——Matlab的数学功能很强大,这种代码一搜一大把 把Matlab打包为DLL,用VBA调用 ——综上,我的想法是:与其把精力花在研究VBA的算法上(用VBA实现的...

用最小二乘法拟合,matlab该怎么写,x,y如下:
;y=[32.5 20.9 8.2 17.06666666 15.5 21.05 12.53333333 28.3 22.6333333 15.23333333 9.7666666666 21.5];n=10;%n可改 A=polyfit(x,y,n); %n是给定的多项式的次数,拟合出来的结果A是系数向量 y1=polyval(A,x); %计算出拟合的y值 plot(x,y,'k*',x,y1,'r-');

相似回答