Numworks Epsilon  1.4.1
Graphing Calculator Operating System
cartesian_function.h
Go to the documentation of this file.
1 #ifndef GRAPH_CARTESIAN_FUNCTION_H
2 #define GRAPH_CARTESIAN_FUNCTION_H
3 
4 #include "../shared/function.h"
5 
6 namespace Graph {
7 
9 public:
11  CartesianFunction(const char * text = nullptr, KDColor color = KDColorBlack);
12  bool displayDerivative();
13  void setDisplayDerivative(bool display);
14  double approximateDerivative(double x, Poincare::Context * context) const;
15  double sumBetweenBounds(double start, double end, Poincare::Context * context) const override;
16  struct Point {
17  double abscissa;
18  double value;
19  };
20  Point nextMinimumFrom(double start, double step, double max, Poincare::Context * context) const;
21  Point nextMaximumFrom(double start, double step, double max, Poincare::Context * context) const;
22  double nextRootFrom(double start, double step, double max, Poincare::Context * context) const;
23  Point nextIntersectionFrom(double start, double step, double max, Poincare::Context * context, const Shared::Function * function) const;
24  char symbol() const override;
25 private:
26  constexpr static double k_precision = 1.0E-5;
27  constexpr static double k_sqrtEps = 1.4901161193847656E-8; // sqrt(DBL_EPSILON)
28  constexpr static double k_goldenRatio = 0.381966011250105151795413165634361882279690820194237137864; // (3-sqrt(5))/2
29  typedef double (*Evaluation)(double abscissa, Poincare::Context * context, const Shared::Function * function0, const Shared::Function * function1);
30  Point nextMinimumOfFunction(double start, double step, double max, Evaluation evaluation, Poincare::Context * context, const Shared::Function * function = nullptr, bool lookForRootMinimum = false) const;
31  void bracketMinimum(double start, double step, double max, double result[3], Evaluation evaluation, Poincare::Context * context, const Shared::Function * function= nullptr) const;
32  Point brentMinimum(double ax, double bx, Evaluation evaluation, Poincare::Context * context, const Shared::Function * function = nullptr) const;
33  double nextIntersectionWithFunction(double start, double step, double max, Evaluation evaluation, Poincare::Context * context, const Shared::Function * function) const;
34  void bracketRoot(double start, double step, double max, double result[2], Evaluation evaluation, Poincare::Context * context, const Shared::Function * function) const;
35  double brentRoot(double ax, double bx, double precision, Evaluation evaluation, Poincare::Context * context, const Shared::Function * function) const;
36  bool m_displayDerivative;
37 };
38 
39 }
40 
41 #endif
Point nextMaximumFrom(double start, double step, double max, Poincare::Context *context) const
double sumBetweenBounds(double start, double end, Poincare::Context *context) const override
const char * text() const
Definition: function.cpp:64
void setDisplayDerivative(bool display)
KDColor color() const
Definition: function.h:21
Definition: app.cpp:9
double approximateDerivative(double x, Poincare::Context *context) const
double nextRootFrom(double start, double step, double max, Poincare::Context *context) const
char symbol() const override
constexpr KDColor KDColorBlack
Definition: color.h:41
CartesianFunction(const char *text=nullptr, KDColor color=KDColorBlack)
void start()
Definition: rt0.cpp:31
Function(const char *name=nullptr, KDColor color=KDColorBlack)
Definition: function.cpp:10
Definition: color.h:6
Point nextIntersectionFrom(double start, double step, double max, Poincare::Context *context, const Shared::Function *function) const
Point nextMinimumFrom(double start, double step, double max, Poincare::Context *context) const