matlab最小二乘法多项式拟合

如题所述

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

最小二乘法原理: 

在我们研究两个变量(x,y)之间的相互关系时,通常可以得到一系列成对的数据(x_{1},y_{1}.x_{2},y_{2}...x_{m},y_{m});将这些数据描绘在x-y直角坐标系中,若发现这些点在一条直线附近,可以令这条直线方程如(式1-1)。 _{}:代表下标,^{}:代表上标。

y = a_{0}x+a_{1}  (式1-1)   其中:a0、a1 是任意实数

2 常见拟合曲线:
直线:    y = a_{0}x+a_{1}      

多项式:y=a_{0}x^{n} + a_{1}x^{n-1} + a_{2}x^{n-2} + …+a_{n}一般次数不易高于3。

3 matlab函数
polyfit函数基于最小二乘法,使用的基本格式为:

p = polyfit(x,y,n)

[p,S] = polyfit(x,y,n)

[p,S,mu] = polyfit(x,y,n)

注:

其中每个命令中的n为多项式拟合的次数,当n为1时,即为一次拟合(很多情况下等价于一元线性回归)。p是n+1维参数向量p(1),p(2)….那么拟合后对应的多项式即为p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1)。S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)。mu-包含两个值 mean(x)均值,std(x)标准差。

求出p之后我们需要作出拟合函数,那么只需要使用命令:

Q=polyval(p,x)

然后plot出x和Q即可。另外需要强调一点的是,多项式拟合不是拟合次数越高越好,而是残差越小越好。

往往需要在回归分析的时候给出相关系数(correlation coefficient),实际上也很简单,我们可以使用命令:r=corrcoef(x,y);这样得到的r即为相关系数矩阵,其中r(1,2)=r(2,1)为相关系数,其值在[-1,1]之间,1表示最大程度的正相关,-1表示最大程度的负相关。相关系数绝对值越靠近1,线性相关性质越好,根据数据描点画出来的函数-自变量图线越趋近于一条平直线,拟合的直线与描点所得图线也更相近。

4 举例
1. 已知观测数据为:

X:0 1 2 3 4 5 6 7 8 9 10

Y:-0.447 1.987 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2

用多项式曲线拟合这些数据点:

Matlab 代码:

clear all; close all; clc;

x=0:1:10;

y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.3,11.2];

plot(x,y,'k.','markersize',25)

hold on %图形保持功能

axis([0 13 -2 16]) %坐标轴范围

order=2; %阶数(一般不要超过3,可以更改确定)

[p s ]=polyfit(x,y,order);

t=0:1:12;

Q=polyval(p,t);

plot(t,Q,'r'); %画出图形

r=corrcoef(x,y); %相关系数
温馨提示:答案为网友推荐,仅供参考
相似回答