MATLAB学习--多项式拟合(1)
(1)polyfit函数
MATLAB的polyfit函数用于多项式拟合,其语法为:
p = polyfit(x, y, k);
其中,x,y分别是横纵坐标向量,它们不仅元素个数相同,而且同为行向量或同为列向量。k为非负整数,是待拟合的多项式的最高次数。p是输出项,为待拟合的多项式的系数向量(由高次到低次排列)。
例子:
在MATLAB的命令窗口输入以下代码:
>> x = [1, 2, 3, 4]; >> y = [3, 5, 7, 9]; >> p = polyfit(x, y, 1)
敲击回车键,得到输出结果:
p =
2.0000 1.0000
所以拟合得的函数就是:y = 2.0000X + 1.0000.
在进行多项式拟合时,必须注意的是,拟合的精度是有限的,一般而言,需要满足以下条件:
记m为不重复的横坐标的数目,则拟合次数k <= m - 1,在此前提下尽量使用低次多项式进行拟合。
(2)polyval函数
polyval,顾名思义就是“多项式的值”,该函数的功能是将已知数据代入拟合得的多项式求值。语法格式:
y = polyval(p, x);
其中,p是已经拟合的多项式(比如说(1)中的p),x是自变量组成的向量,y是所求值组成的向量。
例子:
在命令窗口输入以下代码:
>> clear >> x = [1, 2, 3]; >> y = [3, 5, 7]; >> p = polyfit(x, y, 1); %得到拟合多项式:y = 2*x + 1 >> t = [1, 2, 3, 4, 5]; >> s = polyval(p, t)
得到结果:
s =
3.0000 5.0000 7.0000 9.0000 11.0000
(3)计算多项式拟合的方差
已知原始数据x和y,拟合得到多项式p,判断拟合效果好坏的一个重要指标是方差,方差的计算方法是
e = sum((y - polyval(p, x)).^2).
polyval(p, x)得到拟合值向量,y是真实值向量,两者相减得到真实值和拟合值的差值向量,“.^2”表示对矩阵中的每一个元素进行平方运算,于是得到差值向量中每一个元素的平方,sum是求和函数,显然就是求差值向量元素的平方和,而这就是方差。
例子:
编写代码求多项式:
>> x = [1, 2, 3, 4]; >> y = [4, 5, 6, 7]; >> p = polyfit(x, y, 1)
得到
p =
1.0000 3.0000
于是拟合的多项式为:y = 1.0000x + 3.0000
编写代码求方差:
>> e = sum((y - polyval(p, x)).^2)
得到方差:
e =
3.1554e-030
可见,方差≈0.表明拟合效果很好。