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

标签 java excel function

我有一个 Excel 图表,它代表一天内的一些值。所以我添加了引用函数,我得到了这样的结果:

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

我的数据集中的一个度量是:

09:36:21 => 5,27

我需要知道的第一件事是如何将时间戳转换为提供给函数的值。经过一些单元格值转换后,我发现 Excel 给出的时间戳表示在 0.00000 和 0.99999 之间,因此例如 09:36:21 是 0.400243055555556。然后我编写了一些 java 测试脚本:

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 之间。

我显然做错了什么,但我不知道是什么。也许我对函数的编码很糟糕,或者我选择的 x 不是一个正确的值,但有些地方是错误的。有人可以帮忙吗?

更新:我的代码不太好,duffymo 建议的效果更好。但问题是 Excel 给了我错误的趋势线。我已经成功地使用散点图获得了好的结果。

最佳答案

我不建议以这种方式编码 - 舍入可能是一个问题。

我会推荐Horner scheme :

我这样编码并得到了与您相同的答案:

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

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

关于java - 从java中的excel获取多项式函数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4603937/

相关文章:

java - 推送完后如何获取 child 的数据?

java - IntellijJ可以通过apache taglib和EL在JSP中找到用法吗

java - 使用 jersey 2.0 时出现 NoSuchMethodError

VBA循环遍历一个列,获取每个位置的前10个(如果小于10,则为最大值)的范围

c - 有没有办法在C中获取函数的参数名称

java - 使用 Tapestry 4.0.1 在 @For 循环中显示 javascript/css 工具提示

vba - 运行时错误 #13 - 类型不匹配(如果范围...则...)

r - 我可以从 R 中的同一数据帧中写入相同的 xlsx 文件吗?

php - WordPress 向 the_content() 添加过滤器

c++ - 打印数组将 48 添加到预期值