From 4653f9ff52077b601434a912ac573c694ba90ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 19 Oct 2016 15:17:35 +0200 Subject: [PATCH] [apps/graph] Add method to approximate the derivative function at a given abscissa Change-Id: I31bbd99a0469f7fad140a38dae1783b2d2ee414d --- apps/graph/function.cpp | 9 ++++++++- apps/graph/function.h | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/graph/function.cpp b/apps/graph/function.cpp index cd43159c8..b5c8e7d18 100644 --- a/apps/graph/function.cpp +++ b/apps/graph/function.cpp @@ -61,9 +61,16 @@ void Function::setActive(bool active) { m_active = active; } -float Function::evaluateAtAbscissa(float x, EvaluateContext * context) { +float Function::evaluateAtAbscissa(float x, EvaluateContext * context) const { context->setOverridenValueForSymbolX(x); return m_expression->approximate(*context); } +float Function::approximateDerivative(float x, EvaluateContext * context) const { + float functionPlus = evaluateAtAbscissa(x + k_epsilon, context); + float functionMinus = evaluateAtAbscissa(x - k_epsilon, context); + float growthRate = (functionPlus - functionMinus)/(2*k_epsilon); + return growthRate; +} + } diff --git a/apps/graph/function.h b/apps/graph/function.h index fc8ba57fc..44c1252f5 100644 --- a/apps/graph/function.h +++ b/apps/graph/function.h @@ -22,8 +22,10 @@ public: void setActive(bool active); void setContent(const char * c); void setColor(KDColor m_color); - float evaluateAtAbscissa(float x, EvaluateContext * context); + float evaluateAtAbscissa(float x, EvaluateContext * context) const; + float approximateDerivative(float x, EvaluateContext * context) const; private: + constexpr static float k_epsilon = 0.0001f; constexpr static int k_bodyLength = 255; char m_text[k_bodyLength]; const char * m_name;