PolynomialCurveFitter 多项式曲线拟合

Apache Commons Math3 中有多种类型的曲线拟合方式,PolynomialCurveFitter 是一种常用的拟合方式。

多项式

什么是多项式,复习一下初中的内容:
在数学中,由若干个单项式相加组成的代数式叫做多项式(若有减法:减一个数等于加上它的相反数)。多项式中的每个单项式叫做多项式的项,这些单项式中的最高项次数,就是这个多项式的次数。其中多项式中不含字母的项叫做常数项

一个简单的多项式如下:

4X4 + 3X3 + 2X2 + X + 10 = 0;

以上多项式中,4次项为 4,3次项为3,2次项为2, 1次项为1,常数项为 10。 当然多项式可以 N 个,依次类推。

PolynomialCurveFitter

Apache Commons Math3 中 PolynomialCurveFitter 就是通过一系列样本数据,模拟生成一个多项式,从而使用这个多项式可以进行数据的预测,也可以进行曲线的拟合。

测试程序

我通过一组特殊的数据来验证PolynomialCurveFitter 处理是否正确。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CurveTest {
public static double getY(double x){
return Math.pow(x ,2) * 5 + x*6 + 7;
}
public static void main(String[] args) {
WeightedObservedPoints points = new WeightedObservedPoints();
for(double x= 0 ; x < 10000; x++){
points.add(x, getY(x));
}
PolynomialCurveFitter fitter = PolynomialCurveFitter.create(2);
double[] result = fitter.fit(points.toList());
System.out.println(Arrays.toString(result));
}
}

我们使用的是 5X2 + 6X + 7 = y; 这个多项式生成的样本数据,以上程序生成的结果为:

1
[6.999999986766382, 6.00000000001226, 4.999999999999998]

其中常数项为:2次项为4.999999999999998 , 一次项为6.00000000001226 ,常数项为 6.999999986766382 和我们实际的结果 5,6,7 是非常接近的。