最小二乘法与matlab拟合工具箱cftool

一)关于最小二乘法

百度百科解释:

用于数据拟合,直观的认识如下图所示:实际中你的数据可能是绿线所表示的那样(当然多数时候是离散的点),很明显,这样的数据没有规律也不光滑,那么你想用一个光滑的多项式函数来表示这些数据怎么办?就得拟合,像红线所示的那样,拟合出来一条光滑的曲线,而且这个曲线的表达式还是可以知道的。知道了表达式的形式的另一个好处是求任意给定的x值求y值(比如你的数据是x=1,2,3…对应的y值,如果你想求x=1.5对应的y值怎么办?),或者是可以用于函数的预测(比如你的数据是x=1,2,3…10这10个数据对应的y值,你想求x=11对应的y值怎么办?)。

关于函数的拟合说明到这,那么具体如何根据得到的数据得到拟合函数的具体形式呢?这里就需要一种算法来实现了,这就是最小二乘法。当然在这之前,你也需要明白一下内容:

(1)你所拟合的函数形式是什么样子的?

比如上面的数据,你能得到一系列x值以及对应的y值,想要拟合,你是不是也需要知道y与x对应的函数关系?比如是sin(x)的关系,或者cos(x)的关系,,亦或者是两者组合关系呢?这里我们随便假设一个:

y=a1*sin(x)+a2*cos(x)+a3*sin(x)*cos(x)

在这里可以看到,似乎又多出来了几个系数(a1,a2,a3)有木有?对了,这里我们所说的函数关系其实是x与y之间符合sin、cos和sin*cos的关系,但是他们之间具体是几倍关系,谁知道呢。从这里你也可以明晓的一点就是,最小二乘算法的函数拟合不是说跟你寻找到底是属于哪种关系,而是在你规定的关系上拟合出这些关系对应的系数(也就是寻找最优的a1,a2,a3),从这里你还可以明晓一点的就是,一旦你规定的关系不好,比如上面的,可以看出大概符合sin或者cos关系,你非要规定他们符合y=a1*x+a2*x^2,这样的关系,那么你也可以拟合出这样关系下的a1与a2,但是你会发现你的结果会非常差,很容易理解。

(2)判断是否最优的标准是什么?

有了上面的函数关系,下面就是寻找到这种关系下的系数了对不对?那么怎么评判一组系数(a1,a2,a3)比另一组系数(a1,a2,a3)要好呢,这就是最小二乘。

对于一组给定的系数后,你就相当于得到了一个函数关系,那么对于任意的x值,就会有一个实际值y和一个拟合值y’吧,那么对于所有的x值,最小二乘的就是求解下面公式的最小值:

公式很简单,简单描述就是求实际值与拟合值的误差(残差)平方和,也很容易知道,对于每一组系数(a1,a2,a3),势必会出现一个Y,算法的演变形式就是求取最小化Y对应的系数(a1,a2,a3)(有点像优化算法,当然完全可以用优化算法去求解)。

Ok到这,你应该知道了什么是最小二乘以及它的实用性问题了,下一步是如何求解这组系数了。

二)最小二乘求解

(1)老问题:关于函数关系:

这里再说一遍这个问题,有人可能会说,在实际问题中,我只能得到一系列的离散点,至于他们符合哪种函数关系谁知道呢?也是,要想知道完美的符合关系确实不可能,我们只能猜想到他们的近似函数关系,碰到这类问题,首先我们需要画出得到的离散点,看看他们大致符合哪种关系,然后去试吧(也没有好的方法—_—),当然后面会说到matlab自带的拟合工具箱,里面有很多函数关系,这就大大减少了你盲目去试的时间了。

一般来说,可能的函数关系(或者叫基函数)有:多项式、三角函数、指数函数、样条函数等。

(1)关于求解原理

这里我们假设已经知道了符合的函数关系了,比如像上面的那个函数关系:

y=a1*sin(x)+a2*cos(x)+a3*sin(x)*cos(x)

我们把这个函数划分开来,分为基函数和系数,那么基函数为:

对应的系数就为:

现在问题就转化为求待定系数:(a1,a2,a3)。即:

把这个式子再变一下:

那么由多元函数极值必要条件有:

对任意函数

快乐时,想想我的影子,我会在云上为你喝彩

最小二乘法与matlab拟合工具箱cftool

相关文章:

你感兴趣的文章:

标签云: