MATLAB学习--多项式拟合,1 - 铁树银花

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.表明拟合效果很好。