Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
MS-Excel在Java中的Linest函数_Java_Excel - Fatal编程技术网

MS-Excel在Java中的Linest函数

MS-Excel在Java中的Linest函数,java,excel,Java,Excel,我正在开发一个Java应用程序,需要在MS Excel中使用Linest函数。我花了很多时间,但找不到合适的答案。如果有人知道这件事,请一定告诉我。。。非常感谢。看看哪些可以用来做简单的线性回归。例如: import org.apache.commons.math3.stat.regression.SimpleRegression; public class Test { public static void main(String[] args) { double[

我正在开发一个Java应用程序,需要在MS Excel中使用Linest函数。我花了很多时间,但找不到合适的答案。如果有人知道这件事,请一定告诉我。。。非常感谢。

看看哪些可以用来做简单的线性回归。例如:

import org.apache.commons.math3.stat.regression.SimpleRegression;

public class Test {

    public static void main(String[] args) {
        double[][] data = { {1, 3}, {2, 7.9}, {3, 8}, {4, 9.2 }, {4.5, 12}, {5, 10.5}, {6, 15}};
        SimpleRegression regression = new SimpleRegression();
        regression.addData(data);
        System.out.println("y = "+ regression.getIntercept() + " + " + regression.getSlope() + " * x");
    } 
}

终于找到了答案。可以使用JAMA库计算与Excel完全相同的Linest。请参阅下面的链接。。

我知道您正在寻找一个用Java编码的答案,但是这里是一个用C实现的Excel的LINEST函数,没有库依赖项。它返回给定数据集的斜率,使用与LINEST相同的最小二乘法进行归一化:

public static double CalculateLinest(double[] y, double[] x)
{
   double linest = 0;
   if (y.Length == x.Length)
   {
      double avgY = y.Average();
      double avgX = x.Average();
      double[] dividend = new double[y.Length];
      double[] divisor = new double[y.Length];
      for (int i = 0; i < y.Length; i++)
      {
         dividend[i] = (x[i] - avgX) * (y[i] - avgY);
         divisor[i] = Math.Pow((x[i] - avgX), 2);
      }
      linest = dividend.Sum() / divisor.Sum();
   }
   return linest;
}
由于这些方法只适用于一组数据,如果希望生成多组线性回归数据,我建议在循环内部调用它们


这个链接帮助我找到了我的答案:

你想要的信息是Hi,谢谢你的回复,但公式给出的答案与第一多项式的excels Linest的答案不同。厄立特里亚人,谢谢你的回复,SimpleRegression只给出了斜率和截距值。我需要的是与Excel中相同的Linest输出。
private double CalculateYIntercept(double[] x, double[] y, double linest)
{
    return (y.Average() - linest * x.Average());
}