曲线拟合

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

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

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

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(拟合误差平方和的算术平方根)。
 

f=polyval(p,x)

然后plot出x和f即可。另外需要强调一点的是,往往需要在回归分析的时候给出相关系数(correlationcoefficient),实际上也很简单,我们可以使用命令:

r=corrcoef(x,y);

这样得到的r即为相关系数矩阵,其中r(1,2)=r(2,1)为相关系数,其值在[-1,1]之间,1表示最大程度的正相关,-1表示最大程度的负相关。相关系数绝对值越靠近1,线性相关性质越好,根据数据描点画出来的函数-自变量图线越趋近于一条平直线,拟合的直线与描点所得图线也更相近。
 
另外,转载两条使用polyfit的注意事项:
 
1.使用polyfit命令进行多项式拟合时要注意的是,向量x(其中元素作为自变量)中不重复的元素个数m,和拟合阶数k需要满足m>=k+1.简单分析:k阶拟合需要确定k+1个未知参数(如1阶拟合y= ax +b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。
 
2. polyfit只适合于形如y = a[k]*x^k + a[k-1]*x^(k-1) + …. + a[1]*x +a[0]的完全的一元多项式的数据拟合。


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

f=polyval(p,x)

然后plot出x和f即可。另外需要强调一点的是,往往需要在回归分析的时候给出相关系数(correlationcoefficient),实际上也很简单,我们可以使用命令:

r=corrcoef(x,y);

这样得到的r即为相关系数矩阵,其中r(1,2)=r(2,1)为相关系数,其值在[-1,1]之间,1表示最大程度的正相关,-1表示最大程度的负相关。相关系数绝对值越靠近1,线性相关性质越好,根据数据描点画出来的函数-自变量图线越趋近于一条平直线,拟合的直线与描点所得图线也更相近。
 


另外,转载两条使用polyfit的注意事项:
 
1.使用polyfit命令进行多项式拟合时要注意的是,向量x(其中元素作为自变量)中不重复的元素个数m,和拟合阶数k需要满足m>=k+1.简单分析:k阶拟合需要确定k+1个未知参数(如1阶拟合y= ax +b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。
 

2. polyfit只适合于形如y = a[k]*x^k + a[k-1]*x^(k-1) + …. + a[1]*x +a[0]的完全的一元多项式的数据拟合

举例:

x=(0:0.7:5)';
x1=(0:0.05:5)';
y=sin(x);
%%%p1,p2,p3是多项式的系数
p1=polyfit(x,y,4)
p2=polyfit(x,y,7)
p3=polyfit(x,y,10)
f1=polyval(p1,x1);
f2=polyval(p2,x1);
f3=polyval(p3,x1);
subplot(131);plot(x,y,'o',x1,f1,'-');
subplot(132);plot(x,y,'o',x1,f2,'-');

subplot(133);plot(x,y,'o',x1,f3,'-');





猜你喜欢

转载自blog.csdn.net/qq_40516725/article/details/80258334