From 2e5e2a32580f697f9f26f7d64270a11f076ff77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 13 May 2020 13:41:05 +0200 Subject: [PATCH] [apps/regression] Rename Affine -> Linear and Linear -> Proportional --- apps/graph/graph/banner_view.cpp | 2 +- apps/regression/Makefile | 2 +- apps/regression/base.de.i18n | 2 +- apps/regression/base.en.i18n | 2 +- apps/regression/base.es.i18n | 2 +- apps/regression/base.fr.i18n | 2 +- apps/regression/base.pt.i18n | 2 +- apps/regression/base.universal.i18n | 2 +- apps/regression/graph_controller.cpp | 2 +- apps/regression/model/affine_model.cpp | 52 ------------------- apps/regression/model/linear_model.cpp | 15 ++++-- apps/regression/model/linear_model.h | 4 +- apps/regression/model/model.h | 18 +++---- apps/regression/model/proportional_model.cpp | 45 ++++++++++++++++ .../{affine_model.h => proportional_model.h} | 12 ++--- apps/regression/regression_controller.cpp | 2 +- apps/regression/store.cpp | 2 +- apps/regression/store.h | 4 +- apps/shared.universal.i18n | 2 +- 19 files changed, 87 insertions(+), 87 deletions(-) delete mode 100644 apps/regression/model/affine_model.cpp create mode 100644 apps/regression/model/proportional_model.cpp rename apps/regression/model/{affine_model.h => proportional_model.h} (69%) diff --git a/apps/graph/graph/banner_view.cpp b/apps/graph/graph/banner_view.cpp index 7033a1d3c..fa900c652 100644 --- a/apps/graph/graph/banner_view.cpp +++ b/apps/graph/graph/banner_view.cpp @@ -11,7 +11,7 @@ BannerView::BannerView( ) : Shared::XYBannerView(parentResponder, inputEventHandlerDelegate, textFieldDelegate), m_derivativeView(Font(), 0.5f, 0.5f, TextColor(), BackgroundColor()), - m_tangentEquationView(Font(), I18n::Message::AffineRegressionFormula, 0.0f, 0.5f, TextColor(), BackgroundColor()), + m_tangentEquationView(Font(), I18n::Message::LinearRegressionFormula, 0.0f, 0.5f, TextColor(), BackgroundColor()), m_aView(Font(), 0.5f, 0.5f, TextColor(), BackgroundColor()), m_bView(Font(), 0.5f, 0.5f, TextColor(), BackgroundColor()), m_numberOfSubviews(Shared::XYBannerView::k_numberOfSubviews) diff --git a/apps/regression/Makefile b/apps/regression/Makefile index b23db2450..e63a802cb 100644 --- a/apps/regression/Makefile +++ b/apps/regression/Makefile @@ -8,7 +8,6 @@ app_regression_test_src += $(addprefix apps/regression/,\ ) app_regression_test_src += $(addprefix apps/regression/model/,\ - affine_model.cpp \ cubic_model.cpp \ exponential_model.cpp \ linear_model.cpp \ @@ -16,6 +15,7 @@ app_regression_test_src += $(addprefix apps/regression/model/,\ logistic_model.cpp \ model.cpp \ power_model.cpp \ + proportional_model.cpp \ quadratic_model.cpp \ quartic_model.cpp \ trigonometric_model.cpp \ diff --git a/apps/regression/base.de.i18n b/apps/regression/base.de.i18n index 25ea97908..b49e91e7c 100644 --- a/apps/regression/base.de.i18n +++ b/apps/regression/base.de.i18n @@ -10,7 +10,7 @@ ValueNotReachedByRegression = "Wert in diesem Fenster nicht erreicht" NumberOfDots = "Punktanzahl" Covariance = "Kovarianz" Linear = "Lineare" -Affine = "Affine" +Proportional = "Proportional" Quadratic = "Quadratische" Cubic = "Kubische" Quartic = "Biquadratische" diff --git a/apps/regression/base.en.i18n b/apps/regression/base.en.i18n index 58cac5578..7b257c653 100644 --- a/apps/regression/base.en.i18n +++ b/apps/regression/base.en.i18n @@ -10,7 +10,7 @@ ValueNotReachedByRegression = "Value not reached in this window" NumberOfDots = "Number of points" Covariance = "Covariance" Linear = "Linear" -Affine = "Affine" +Proportional = "Proportional" Quadratic = "Quadratic" Cubic = "Cubic" Quartic = "Quartic" diff --git a/apps/regression/base.es.i18n b/apps/regression/base.es.i18n index d1c5ec86b..147304a40 100644 --- a/apps/regression/base.es.i18n +++ b/apps/regression/base.es.i18n @@ -10,7 +10,7 @@ ValueNotReachedByRegression = "Valor no alcanzado en esta ventana" NumberOfDots = "Número de puntos" Covariance = "Covarianza" Linear = "Lineal" -Affine = "Affine" +Proportional = "Proporcional" Quadratic = "Cuadrática" Cubic = "Cúbica" Quartic = "Cuártica" diff --git a/apps/regression/base.fr.i18n b/apps/regression/base.fr.i18n index be93f4aa8..c8f80d875 100644 --- a/apps/regression/base.fr.i18n +++ b/apps/regression/base.fr.i18n @@ -10,7 +10,7 @@ ValueNotReachedByRegression = "Valeur non atteinte dans cette fenêtre" NumberOfDots = "Nombre de points" Covariance = "Covariance" Linear = "Linéaire" -Affine = "Affine" +Proportional = "Proportionnelle" Quadratic = "Quadratique" Cubic = "Cubique" Quartic = "Quartique" diff --git a/apps/regression/base.pt.i18n b/apps/regression/base.pt.i18n index 9590cb914..4ff5a3eaf 100644 --- a/apps/regression/base.pt.i18n +++ b/apps/regression/base.pt.i18n @@ -10,7 +10,7 @@ ValueNotReachedByRegression = "Valor não alcançado nesta janela" NumberOfDots = "Número de pontos" Covariance = "Covariancia" Linear = "Linear" -Affine = "Affine" +Proportional = "Proporcional" Quadratic = "Quadrática" Cubic = "Cúbica" Quartic = "Quarto grau" diff --git a/apps/regression/base.universal.i18n b/apps/regression/base.universal.i18n index f04c13b35..a26602af1 100644 --- a/apps/regression/base.universal.i18n +++ b/apps/regression/base.universal.i18n @@ -1,4 +1,4 @@ -LinearRegressionFormula = " y=a·x " +ProportionalRegressionFormula = " y=a·x " QuadraticRegressionFormula = " y=a·x^2+b·x+c " CubicRegressionFormula = " y=a·x^3+b·x^2+c·x+d " QuarticRegressionFormula = " y=a·x^4+b·x^3+c·x^2+d·x+e " diff --git a/apps/regression/graph_controller.cpp b/apps/regression/graph_controller.cpp index d2e6cdef2..9db55a5b1 100644 --- a/apps/regression/graph_controller.cpp +++ b/apps/regression/graph_controller.cpp @@ -187,7 +187,7 @@ void GraphController::reloadBannerView() { coefficientName++; } - if (m_store->seriesRegressionType(*m_selectedSeriesIndex) == Model::Type::Linear || m_store->seriesRegressionType(*m_selectedSeriesIndex) == Model::Type::Affine) { + if (m_store->seriesRegressionType(*m_selectedSeriesIndex) == Model::Type::Linear || m_store->seriesRegressionType(*m_selectedSeriesIndex) == Model::Type::Proportional) { int index = model->numberOfCoefficients(); // Set "r=..." numberOfChar = 0; diff --git a/apps/regression/model/affine_model.cpp b/apps/regression/model/affine_model.cpp deleted file mode 100644 index 0356b7991..000000000 --- a/apps/regression/model/affine_model.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "affine_model.h" -#include "../store.h" -#include -#include -#include - -using namespace Poincare; - -namespace Regression { - -Layout AffineModel::layout() { - if (m_layout.isUninitialized()) { - const char * s = "a·X+b"; - m_layout = LayoutHelper::String(s, strlen(s), k_layoutFont); - } - return m_layout; -} - -double AffineModel::evaluate(double * modelCoefficients, double x) const { - double a = modelCoefficients[0]; - double b = modelCoefficients[1]; - return a*x+b; -} - -double AffineModel::levelSet(double * modelCoefficients, double xMin, double step, double xMax, double y, Poincare::Context * context) { - double a = modelCoefficients[0]; - double b = modelCoefficients[1]; - if (a == 0) { - return NAN; - } - return (y-b)/a; -} - -void AffineModel::fit(Store * store, int series, double * modelCoefficients, Poincare::Context * context) { - modelCoefficients[0] = store->slope(series); - modelCoefficients[1] = store->yIntercept(series); -} - -double AffineModel::partialDerivate(double * modelCoefficients, int derivateCoefficientIndex, double x) const { - if (derivateCoefficientIndex == 0) { - // Derivate: x - return x; - } - if (derivateCoefficientIndex == 1) { - // Derivate: 1; - return 1; - } - assert(false); - return 0.0; -} - -} diff --git a/apps/regression/model/linear_model.cpp b/apps/regression/model/linear_model.cpp index 0fc663f45..3de85628f 100644 --- a/apps/regression/model/linear_model.cpp +++ b/apps/regression/model/linear_model.cpp @@ -10,7 +10,7 @@ namespace Regression { Layout LinearModel::layout() { if (m_layout.isUninitialized()) { - const char * s = "a·X"; + const char * s = "a·X+b"; m_layout = LayoutHelper::String(s, strlen(s), k_layoutFont); } return m_layout; @@ -18,19 +18,22 @@ Layout LinearModel::layout() { double LinearModel::evaluate(double * modelCoefficients, double x) const { double a = modelCoefficients[0]; - return a*x; + double b = modelCoefficients[1]; + return a*x+b; } double LinearModel::levelSet(double * modelCoefficients, double xMin, double step, double xMax, double y, Poincare::Context * context) { double a = modelCoefficients[0]; - if (a == 0.0) { + double b = modelCoefficients[1]; + if (a == 0) { return NAN; } - return y/a; + return (y-b)/a; } void LinearModel::fit(Store * store, int series, double * modelCoefficients, Poincare::Context * context) { modelCoefficients[0] = store->slope(series); + modelCoefficients[1] = store->yIntercept(series); } double LinearModel::partialDerivate(double * modelCoefficients, int derivateCoefficientIndex, double x) const { @@ -38,6 +41,10 @@ double LinearModel::partialDerivate(double * modelCoefficients, int derivateCoef // Derivate: x return x; } + if (derivateCoefficientIndex == 1) { + // Derivate: 1; + return 1; + } assert(false); return 0.0; } diff --git a/apps/regression/model/linear_model.h b/apps/regression/model/linear_model.h index d98dbd756..4fd9d2988 100644 --- a/apps/regression/model/linear_model.h +++ b/apps/regression/model/linear_model.h @@ -14,8 +14,8 @@ public: double levelSet(double * modelCoefficients, double xMin, double step, double xMax, double y, Poincare::Context * context) override; void fit(Store * store, int series, double * modelCoefficients, Poincare::Context * context) override; double partialDerivate(double * modelCoefficients, int derivateCoefficientIndex, double x) const override; - int numberOfCoefficients() const override { return 1; } - int bannerLinesCount() const override { return 2; } + int numberOfCoefficients() const override { return 2; } + int bannerLinesCount() const override { return 3; } }; } diff --git a/apps/regression/model/model.h b/apps/regression/model/model.h index e38cebb01..78f14aab6 100644 --- a/apps/regression/model/model.h +++ b/apps/regression/model/model.h @@ -14,16 +14,16 @@ class Store; class Model { public: enum class Type : uint8_t { - Linear = 0, - Affine = 1, - Quadratic = 2, - Cubic = 3, - Quartic = 4, - Logarithmic = 5, - Exponential = 6, - Power = 7, + Linear = 0, + Proportional = 1, + Quadratic = 2, + Cubic = 3, + Quartic = 4, + Logarithmic = 5, + Exponential = 6, + Power = 7, Trigonometric = 8, - Logistic = 9 + Logistic = 9 }; static constexpr int k_numberOfModels = 10; static constexpr int k_maxNumberOfCoefficients = 5; // This has to verify: k_maxNumberOfCoefficients < Matrix::k_maxNumberOfCoefficients diff --git a/apps/regression/model/proportional_model.cpp b/apps/regression/model/proportional_model.cpp new file mode 100644 index 000000000..a6d1bdb1c --- /dev/null +++ b/apps/regression/model/proportional_model.cpp @@ -0,0 +1,45 @@ +#include "proportional_model.h" +#include "../store.h" +#include +#include +#include + +using namespace Poincare; + +namespace Regression { + +Layout ProportionalModel::layout() { + if (m_layout.isUninitialized()) { + const char * s = "a·X"; + m_layout = LayoutHelper::String(s, strlen(s), k_layoutFont); + } + return m_layout; +} + +double ProportionalModel::evaluate(double * modelCoefficients, double x) const { + double a = modelCoefficients[0]; + return a*x; +} + +double ProportionalModel::levelSet(double * modelCoefficients, double xMin, double step, double xMax, double y, Poincare::Context * context) { + double a = modelCoefficients[0]; + if (a == 0.0) { + return NAN; + } + return y/a; +} + +void ProportionalModel::fit(Store * store, int series, double * modelCoefficients, Poincare::Context * context) { + modelCoefficients[0] = store->slope(series); +} + +double ProportionalModel::partialDerivate(double * modelCoefficients, int derivateCoefficientIndex, double x) const { + if (derivateCoefficientIndex == 0) { + // Derivate: x + return x; + } + assert(false); + return 0.0; +} + +} diff --git a/apps/regression/model/affine_model.h b/apps/regression/model/proportional_model.h similarity index 69% rename from apps/regression/model/affine_model.h rename to apps/regression/model/proportional_model.h index 868664c21..b2eca094f 100644 --- a/apps/regression/model/affine_model.h +++ b/apps/regression/model/proportional_model.h @@ -1,21 +1,21 @@ -#ifndef REGRESSION_AFFINE_MODEL_H -#define REGRESSION_AFFINE_MODEL_H +#ifndef REGRESSION_PROPORTIONAL_MODEL_H +#define REGRESSION_PROPORTIONAL_MODEL_H #include "model.h" namespace Regression { -class AffineModel : public Model { +class ProportionalModel : public Model { public: using Model::Model; Poincare::Layout layout() override; - I18n::Message formulaMessage() const override { return I18n::Message::AffineRegressionFormula; } + I18n::Message formulaMessage() const override { return I18n::Message::ProportionalRegressionFormula; } double evaluate(double * modelCoefficients, double x) const override; double levelSet(double * modelCoefficients, double xMin, double step, double xMax, double y, Poincare::Context * context) override; void fit(Store * store, int series, double * modelCoefficients, Poincare::Context * context) override; double partialDerivate(double * modelCoefficients, int derivateCoefficientIndex, double x) const override; - int numberOfCoefficients() const override { return 2; } - int bannerLinesCount() const override { return 3; } + int numberOfCoefficients() const override { return 1; } + int bannerLinesCount() const override { return 2; } }; } diff --git a/apps/regression/regression_controller.cpp b/apps/regression/regression_controller.cpp index fb348cd56..188007d6b 100644 --- a/apps/regression/regression_controller.cpp +++ b/apps/regression/regression_controller.cpp @@ -82,7 +82,7 @@ HighlightCell * RegressionController::reusableCell(int index, int type) { void RegressionController::willDisplayCellAtLocation(HighlightCell * cell, int i, int j) { assert(i == 0); assert(j >= 0 && j < k_numberOfRows); - I18n::Message messages[k_numberOfRows] = {I18n::Message::Linear, I18n::Message::Affine, I18n::Message::Quadratic, I18n::Message::Cubic, I18n::Message::Quartic, I18n::Message::Logarithmic, I18n::Message::Exponential, I18n::Message::Power, I18n::Message::Trigonometrical, I18n::Message::Logistic}; + I18n::Message messages[k_numberOfRows] = {I18n::Message::Linear, I18n::Message::Proportional, I18n::Message::Quadratic, I18n::Message::Cubic, I18n::Message::Quartic, I18n::Message::Logarithmic, I18n::Message::Exponential, I18n::Message::Power, I18n::Message::Trigonometrical, I18n::Message::Logistic}; MessageTableCellWithExpression * castedCell = static_cast(cell); castedCell->setMessage(messages[j]); castedCell->setLayout(m_store->regressionModel((Model::Type) j)->layout()); diff --git a/apps/regression/store.cpp b/apps/regression/store.cpp index f1ac3dd9a..cfba25903 100644 --- a/apps/regression/store.cpp +++ b/apps/regression/store.cpp @@ -285,7 +285,7 @@ double Store::squaredCorrelationCoefficient(int series) const { } Model * Store::regressionModel(int index) { - Model * models[Model::k_numberOfModels] = {&m_affineModel, &m_linearModel, &m_quadraticModel, &m_cubicModel, &m_quarticModel, &m_logarithmicModel, &m_exponentialModel, &m_powerModel, &m_trigonometricModel, &m_logisticModel}; + Model * models[Model::k_numberOfModels] = {&m_linearModel, &m_proportionalModel, &m_quadraticModel, &m_cubicModel, &m_quarticModel, &m_logarithmicModel, &m_exponentialModel, &m_powerModel, &m_trigonometricModel, &m_logisticModel}; return models[index]; } diff --git a/apps/regression/store.h b/apps/regression/store.h index bb97b2774..92acd0f8f 100644 --- a/apps/regression/store.h +++ b/apps/regression/store.h @@ -8,10 +8,10 @@ #include "model/logarithmic_model.h" #include "model/logistic_model.h" #include "model/power_model.h" +#include "model/proportional_model.h" #include "model/quadratic_model.h" #include "model/quartic_model.h" #include "model/trigonometric_model.h" -#include "model/affine_model.h" #include "../shared/interactive_curve_view_range.h" #include "../shared/double_pair_store.h" #include @@ -80,7 +80,7 @@ private: uint32_t m_seriesChecksum[k_numberOfSeries]; Model::Type m_regressionTypes[k_numberOfSeries]; LinearModel m_linearModel; - AffineModel m_affineModel; + ProportionalModel m_proportionalModel; QuadraticModel m_quadraticModel; CubicModel m_cubicModel; QuarticModel m_quarticModel; diff --git a/apps/shared.universal.i18n b/apps/shared.universal.i18n index 344244ab2..b313ff93c 100644 --- a/apps/shared.universal.i18n +++ b/apps/shared.universal.i18n @@ -119,7 +119,7 @@ InvSortCommandWithArg = "sort>(L)" K = "k" Lambda = "λ" LcmCommandWithArg = "lcm(p,q)" -AffineRegressionFormula = " y=a·x+b " +LinearRegressionFormula = " y=a·x+b " LogCommandWithArg = "log(x,a)" MatrixCommand = "[[\x11]]" MatrixCommandWithArg = "[[1,2][3,4]]"