Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从excel获取多项式函数的值_Java_Excel_Function - Fatal编程技术网

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

在java中从excel获取多项式函数的值,java,excel,function,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.400

我在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.40024305556。然后我编写了一个小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不是一个正确的值,但有点不对劲。有人能帮忙吗


更新:我的代码不是很好,达菲莫建议的效果更好。但问题是Excel给了我错误的趋势线。我已经设法用散点图得到了一个好的结果。

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

我建议:

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

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));
      }
   }
}

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

我不建议这样编码-舍入可能是一个问题

我建议:

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

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));
      }
   }
}

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

您最初的假设肯定有问题,当您将8.414添加到它时,它怎么可能是一个介于0和1之间的数字,而所有其他变量都是-1X值在0和1之间(从我看到excel如何转换时间戳的推断),我期望的y值在5到12之间。你的初始假设一定有问题,当你向其中添加8.414时,它怎么可能是一个介于0和1之间的数字,而所有其他变量都是-1X值在0和1之间(从我看到excel如何转换时间戳的推断),我期望的y值在5到12之间。很好,我喜欢这个建议。我已经更新了我的代码。问题是结果不会改变。也许我误解了excel函数,1E-13x6不是1E-13*x^6,而是可能有所不同?我不知道。这个评论和你对奇怪的时间戳的想法向我建议,你应该深入研究Excel,更好地了解它在做什么。只有当你感冒了,你才能把它翻译成Java。我建议你试着用x=0,检查它应该是8.414。如果这是不对的,其他的都不会。谢谢你对代码的帮助。很明显,我的问题要么是我使用的函数不正确,要么是x值错误。所以我会继续找的。非常感谢你的帮助。太好了,我喜欢这个建议。我已经更新了我的代码。问题是结果不会改变。也许我误解了excel函数,1E-13x6不是1E-13*x^6,而是可能有所不同?我不知道。这个评论和你对奇怪的时间戳的想法向我建议,你应该深入研究Excel,更好地了解它在做什么。只有当你感冒了,你才能把它翻译成Java。我建议你试着用x=0,检查它应该是8.414。如果这是不对的,其他的都不会。谢谢你对代码的帮助。很明显,我的问题要么是我使用的函数不正确,要么是x值错误。所以我会继续找的。非常感谢你的帮助。