1. 调用格式:
a. p=polyfit(x,y,n)
b. [p,S] = polyfit(x,y,n)
c. [p,S,mu]=polyfit(x,y,n)
2. 参数意义
x : 源数据点对应的横坐标,可为行向量、矩阵
y : 源数据点对应的纵坐标,可为行向量、矩阵
n : 要拟合的阶数,k阶拟合需要确定k+1个未知参数,故而至少需要k+1对点(x,y)。
p : 拟合多项式 的系数(共n+1个)
S : S是一个结构体数组(struct),用来估计预测误差,包含了R,df和normr。
R:polyfit函数中,先根据输入的x构建范德蒙矩阵V,然后进行QR分解,得到的上三角矩阵(系数矩阵的QR分解的上三角阵)。
df:自由度, df=length(y)-(n+1)。df>0时,为超定方程组的求解,即拟合点数比未知数(p(1)~p(n+1))多。
normr:[ 拟合误差平方和的算术平方根=sqrt(sum((ya-yb).^2)) ] 、标准偏差、残差范数,normr=norm(y-V*p),此处的p为求解之后的数值。残差是多大的数才算拟合效果好其实并不能确定。只有相关系数(-1,1)才能确定拟合的好坏,越接近1(或-1),表示拟合的效果较好,一般来说在0.95以上可以认为基本拟合。
r=corrcoef(ya,yb)对角线上是自相关,所以是1,剩下两个变量分别是ya与yb的相关和yb与ya的相关。min(min(corrcoef(ya, yb))) 就是ya,yb之间的相关系数。
mu: x的估计量 XHAT = (X-MU(1))/MU(2) where MU(1) = MEAN(X) and MU(2) = STD(X)把X根据公式XHAT = (X-mu(1))/mu(2)做了一下中心及比例变换,用XHAT和Y进行N阶拟合,所以结果会不一样。是说这样做能同时提高多项式和拟合算法的数值特性。
3. 基本用法
示例
数据
x = 1:10;
y = [1 5 10 3 6 32 52 6 15 60];
代码
clear;
clc;
x = 1:10;
y = [1 5 10 3 6 32 52 6 15 60];
[p,s] = polyfit(x,y,6)
xi = linspace(1,10,100);
yb=polyval(p,x);
yi=polyval(p,xi);
plot(x,y,'b-',xi,yi,'r-');
legend('原始数据','拟合曲线');
corrco = min(min(corrcoef(y,yb))); %相关系数可用来衡量拟合效果
co_err = [corrco,s.normr]
结果
p =
0.0103 -0.2254 1.3680 0.7959 -29.4813 78.0417 -50.4333
s =
R: [7x7 double] df: 3 normr: 26.8533
co_err =
0.9090 26.8533
4. 相关函数
利用polyval函数求出拟合曲线在x处的预测值。
y = polyval(p,x)
[y,delta] = polyval(p,x,S)
y = polyval(p,x,[],mu)
[y,delta] = polyval(p,x,S,mu)