首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用最小二乘法结合Commons数学和拟合

用最小二乘法结合Commons数学和拟合
EN

Stack Overflow用户
提问于 2013-01-26 11:11:58
回答 2查看 6.5K关注 0票数 5

我试图使用commons数学来计算多项式中的常量。看起来这个例程是存在的,但我得到了这个错误。有人看到这个问题了吗?

我试着把这个问题转换成commons-math:https://math.stackexchange.com/questions/121212/how-to-find-curve-equation-from-data

从绘制数据(Wolfram|Alpha链接)来看,它看起来不是线性的。所以最好用多项式来拟合。我假设你想要拟合数据:

X Y 1 4 2 8 3 13 4 18 5 24 .使用二次多项式y=ax2+bx+c。

wolfram alpha提供了一个很好的实用程序。我希望我能从wolfram那里得到同样的答案。

http://www.wolframalpha.com/input/?i=fit+4%2C+8%2C+13%2C

例如,通过输入该数据,我将得到:4.5x-0.666667(线性)

以下是代码和错误:

代码语言:javascript
复制
import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression;
import org.apache.commons.math3.stat.regression.SimpleRegression;
final OLSMultipleLinearRegression regression2 = new OLSMultipleLinearRegression();
double[] y = {
        4.0, 
        8, 
        13,                 
};      
double[][] x2 = 
    {
        { 1.0, 1, 1  },
        { 1.0, 2, 4  },
        { 0.0, 3, 9  },             
    };
regression2.newSampleData(y, x2);
regression2.setNoIntercept(true);
regression2.newSampleData(y, x2);       
double[] beta = regression2.estimateRegressionParameters();
for (double d : beta) {
    System.out.println("D: " + d);
}

线程"main“org.apache.commons.math3.exception.MathIllegalArgumentException:中的异常没有足够的数据(3行)用于在org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression.newSampleData(OLSMultipleLinearRegression.java:70)的org.berlin.bot.algo.BruteForceSort.main(BruteForceSort.java:108)的org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression.validateSampleData(AbstractMultipleLinearRegression.java:236)的这么多的预测(3个预测)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-26 12:13:16

鲁库克是对的。我提供了额外的一行(测试用例),并生成了与wolfram/alpha相同的答案。

D: 0.24999999999999822 D: 3.4500000000000033 D: 0.24999999999999914

或0.25x^2 + 3.45x + 0.25

代码语言:javascript
复制
final OLSMultipleLinearRegression regression2 = new OLSMultipleLinearRegression();
        double[] y = {
                4, 
                8, 
                13,         
                18
        };              
        double[][] x2 = 
            {
                { 1, 1, 1  },
                { 1, 2, 4  },
                { 1, 3, 9  },                                                               
                { 1, 4, 16  },
            };

        regression2.newSampleData(y, x2);
        regression2.setNoIntercept(true);
        regression2.newSampleData(y, x2);       
        double[] beta = regression2.estimateRegressionParameters();
        for (double d : beta) {
            System.out.println("D: " + d);
        }
票数 0
EN

Stack Overflow用户

发布于 2013-01-26 11:41:17

validateSampleData()的javadoc声明,二维数组的行数必须至少比它的列数多一行。

http://commons.apache.org/proper/commons-math/javadocs/api-3.3/org/apache/commons/math3/stat/regression/AbstractMultipleLinearRegression.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14533475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档