Numworks Epsilon  1.4.1
Graphing Calculator Operating System
integral.h
Go to the documentation of this file.
1 #ifndef POINCARE_INTEGRAL_H
2 #define POINCARE_INTEGRAL_H
3 
7 #include <poincare/complex.h>
8 
9 namespace Poincare {
10 
11 class Integral : public StaticHierarchy<3> {
13 public:
14  Type type() const override;
15  Expression * clone() const override;
16  int polynomialDegree(char symbolName) const override;
17 private:
18  /* Layout */
19  ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override;
20  int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override {
21  return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "int");
22  }
23  /* Simplification */
24  Expression * shallowReduce(Context& context, AngleUnit angleUnit) override;
25  /* Evaluation */
26  Expression * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate<float>(context, angleUnit); }
27  Expression * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate<double>(context, angleUnit); }
28  template<typename T> Complex<T> * templatedApproximate(Context& context, AngleUnit angleUnit) const;
29  template<typename T>
30  struct DetailedResult
31  {
32  T integral;
33  T absoluteError;
34  };
35  constexpr static int k_maxNumberOfIterations = 10;
36 #ifdef LAGRANGE_METHOD
37  template<typename T> T lagrangeGaussQuadrature(T a, T b, VariableContext<T> xContext, AngleUnit angleUnit) const;
38 #else
39  template<typename T> DetailedResult<T> kronrodGaussQuadrature(T a, T b, VariableContext<T> xContext, AngleUnit angleUnit) const;
40  template<typename T> T adaptiveQuadrature(T a, T b, T eps, int numberOfIterations, VariableContext<T> xContext, AngleUnit angleUnit) const;
41 #endif
42  template<typename T> T functionValueAtAbscissa(T x, VariableContext<T> xcontext, AngleUnit angleUnit) const;
43 };
44 
45 }
46 
47 #endif
int polynomialDegree(char symbolName) const override
Definition: integral.cpp:26
#define T(x)
Definition: events.cpp:26
Type type() const override
Definition: integral.cpp:17
static int writePrefixExpressionTextInBuffer(const Expression *expression, char *buffer, int bufferSize, int numberOfDigits, const char *operatorName)
Expression * clone() const override
Definition: integral.cpp:21