1

I want to calculate integral of some expriment with apache commonmath3.3 lib.

I saw this question.

SimpsonIntegrator simpson = new SimpsonIntegrator();
TrapezoidIntegrator trapezoid = new TrapezoidIntegrator();
double[] vector = new double[2];
vector[0] = 0;
vector[1] = 1;

PolynomialFunction f = new PolynomialFunction(vector);
UnivariateFunction uf = (UnivariateFunction)new PolynomialFunction(vector);
System.out.println("To String " + uf.toString());
System.out.println("Degree: " + f.degree());

double i = simpson.integrate(10, uf, -Float.MAX_VALUE, Float.MAX_VALUE);
double j = trapezoid.integrate(10, uf, 0, 1);
System.out.println("Simpson integral : " + i);        
System.out.println("Trapezoid integral : " + j);   

and i think we have to create a double array for Intervals of integral.but when i want to create array with more than size 2 i give this message:

Caused by:org.apache.commons.math3.exception.TooManyEvaluationsException: illegal state: maximal        count (10) exceeded: evaluations 05-27 08:11:33.461: E/AndroidRuntime(1349):    at     org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator.computeObjec tiveValue(BaseAbstractUnivariateIntegrator.java:218) 

Am I missing something?

How can i declare function for integral?
for example how can i declare "x^2+3" function for integral?

Community
  • 1
  • 1
max
  • 5,963
  • 12
  • 49
  • 80

1 Answers1

1

You need to increate the number of maximum evaluations allowed for the integrator in case of more complex polynomial functions.

Try something like this:

SimpsonIntegrator simpson = new SimpsonIntegrator();
TrapezoidIntegrator trapezoid = new TrapezoidIntegrator();
double[] vector = new double[3];
vector[0] = 0;
vector[1] = 1;
vector[2] = 2;

PolynomialFunction f = new PolynomialFunction(vector);
UnivariateFunction uf = (UnivariateFunction)new PolynomialFunction(vector);

double i = simpson.integrate(10, uf, -Float.MAX_VALUE, Float.MAX_VALUE);
double j = trapezoid.integrate(10000, uf, 0, 1);
System.out.println("Simpson integral : " + i);        
System.out.println("Trapezoid integral : " + j); 
T. Neidhart
  • 6,060
  • 2
  • 15
  • 38