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

 我来答
yan4612248
2018-03-20 · TA获得超过2415个赞
知道答主
回答量:22
采纳率:75%
帮助的人:3467
展开全部

最小二乘法,通常用在我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程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

mcr董事长
2018-03-20 · TA获得超过1064个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:107万
展开全部
用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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式