From 7ed836d12b5f768a960eb475bd6a438c11e076e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 14 Jun 2018 14:03:29 +0200 Subject: [PATCH] [apps/reg] Fix non invertible matrix condition --- apps/regression/model/model.cpp | 4 ++-- poincare/include/poincare/expression.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/regression/model/model.cpp b/apps/regression/model/model.cpp index d01473e7c..7f06a3667 100644 --- a/apps/regression/model/model.cpp +++ b/apps/regression/model/model.cpp @@ -105,8 +105,8 @@ double Model::alphaPrimeCoefficient(Store * store, int series, double * modelCoe double result = 0.0; if (k == l) { result = alphaCoefficient(store, series, modelCoefficients, k, l)*(1.0+lambda); - if (result == 0) { - result = lambda; + if (std::fabs(result) < Expression::epsilon()) { + result = 2*Expression::epsilon(); } } else { result = alphaCoefficient(store, series, modelCoefficients, l, k); diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 90cc058fa..cf77d1cf0 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -274,6 +274,9 @@ public: Coordinate2D nextMaximum(char symbol, double start, double step, double max, Context & context) const; double nextRoot(char symbol, double start, double step, double max, Context & context) const; Coordinate2D nextIntersection(char symbol, double start, double step, double max, Context & context, const Expression * expression) const; + + /* Evaluation engine */ + template static T epsilon(); protected: /* Constructor */ Expression() : m_parent(nullptr) {} @@ -282,7 +285,6 @@ protected: /* Evaluation Engine */ typedef float SinglePrecision; typedef double DoublePrecision; - template static T epsilon(); constexpr static int k_maxNumberOfSteps = 10000; /* Simplification */