从java中的excel获取多项式函数的值

我在Excel中有一个图表,表示一天内的某个值。 所以我添加引用函数,我得到这样的东西:

y = 1E-13x6 - 2E-10x5 + 8E-08x4 - 1E-05x3 + 0,0004x2 + 0,0275x + 8,414 

我的数据集中的一个mesure是:

 09:36:21 => 5,27 

我需要知道的是,如何将时间戳转换为一个值赋予该函数。 经过一些单元格值转换后,我发现excel给出的时间戳在0.00000和0.99999之间,所以例如09:36:21是0.400243055555556。 然后我编写了一个小小的javatesting脚本:

 double x = 0.400243055555556; double x6 = (1*Math.pow(10, -13))*Math.pow(x, 6); double x5 = (2*Math.pow(10, -10))*Math.pow(x, 5); double x4 = (8*Math.pow(10, -8))*Math.pow(x, 4); double x3 = (1*Math.pow(10, -5))*Math.pow(x, 3); double x2 = (4*Math.pow(10, -4))*Math.pow(x, 2); double y = x6 - x5 + x4 - x3 + x2 + 0.0275*x + 8.414; 

但是在执行这个脚本之后,我得到了y = 8.425070122712738。 所以这显然不起作用。 我必须说,图表中的所有值范围从5到12。

我显然做错了什么,但我不知道是什么。 也许我把这个函数写得很糟糕,或者我select的x不是一个正确的值,但有些错误。 谁能帮忙?

更新:我的代码不是很好,duffymobuild议更好地工作。 但问题是,Excel正在给我错误的tendendy线。 我设法使用散点图来获得好的一个。

我不会推荐这样编码 – 四舍五入可能是一个问题。

我会推荐Hornerscheme :

我这样编码,得到了和你一样的答案:

 public class Horner { public static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("0.000"); public static void main(String[] args) { double [] a = { 8.414, 0.0275, 0.0004, -1.0e-5, 8.0e-8, -2.0e-10, 1.0e-13 }; for (double x = 0.0; x < 1.0; x += 0.05) { double y = a[0] + x*(a[1] + x*(a[2] + x*(a[3] + x*(a[4] + x*(a[5]))))); System.out.println("x = " + DEFAULT_FORMAT.format(x) + " y = " + DEFAULT_FORMAT.format(y)); } } } 

这是我得到的结果。 高阶条件并不好, 系数很小,当你将一小部分提高到一个功率时,它的效果就更小了。

 x = 0.000 y = 8.414 x = 0.050 y = 8.415 x = 0.100 y = 8.417 x = 0.150 y = 8.418 x = 0.200 y = 8.420 x = 0.250 y = 8.421 x = 0.300 y = 8.422 x = 0.350 y = 8.424 x = 0.400 y = 8.425 x = 0.450 y = 8.426 x = 0.500 y = 8.428 x = 0.550 y = 8.429 x = 0.600 y = 8.431 x = 0.650 y = 8.432 x = 0.700 y = 8.433 x = 0.750 y = 8.435 x = 0.800 y = 8.436 x = 0.850 y = 8.438 x = 0.900 y = 8.439 x = 0.950 y = 8.440 

仍然不是你想要的,但我认为编码要简单得多。