使用Apache Commons Math计算高阶多项式的积分时的TooManyEvaluationsException

时间:2016-11-05 21:37:00

标签: java apache math apache-commons

我使用Apache Math使用此代码计算某些高阶多项式的积分(40度,含有多个项):

simpsonIntegrator.integrate(Integer.MAX_VALUE, uf, 0, 100);

但是我得到了这个例外:

Exception in thread "main" org.apache.commons.math3.exception.TooManyEvaluationsException: illegal state: maximal count (2,147,483,647) exceeded: evaluations
    at org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator.computeObjectiveValue(BaseAbstractUnivariateIntegrator.java:235)
    at org.apache.commons.math3.analysis.integration.TrapezoidIntegrator.stage(TrapezoidIntegrator.java:135)
    at org.apache.commons.math3.analysis.integration.SimpsonIntegrator.doIntegrate(SimpsonIntegrator.java:112)
    at org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator.integrate(BaseAbstractUnivariateIntegrator.java:280)

Apache Math可以计算这个复杂的积分吗?

以下示例代码:

double[] coefficients = new double[] { 120.38735982092798, -7.432833370751281, -4.197678241326614,
            1.935518550792998, -0.2717208510603644, 0.010272539175964844, 0.0014583652338223108,
            -2.3545889963370238E-4, 1.7089604714800273E-5, -7.940595470645408E-7, 2.60400363658514E-8,
            -6.295312573702475E-10, 1.147109622979095E-11, -1.591490268563359E-13, 1.683228910193124E-15,
            -1.3473343508219034E-17, 8.022211284926259E-20, -3.4419978519650748E-22, 1.0053973045968942E-24,
            -1.7889385990234268E-27, 1.4626500062261931E-30 };

PolynomialFunction p = new PolynomialFunction(coefficients);

UnivariateFunction uf = (UnivariateFunction) new PolynomialFunction(p.multiply(p).getCoefficients());

// integrate regression
SimpsonIntegrator integrator = new SimpsonIntegrator();
System.out.println("answer: " + (Math.PI * integrator.integrate(Integer.MAX_VALUE, uf, 0, 100)));

如果需要很长时间才能解决,我只需要一个答案。

0 个答案:

没有答案