mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[solver] If one equation is undefined, display a warning
This commit is contained in:
@@ -4,6 +4,7 @@ AddEquation = "Ajouter une équation"
|
||||
Resolve = "Résoudre l'équation"
|
||||
RequireEquation = "L'entrée doit être une équation"
|
||||
UseEquationModel = "Utiliser le modèle d'équation"
|
||||
UndefinedEquation = "Une equation est indéfinie"
|
||||
TooManyVariables = "Le système a trop d'inconnus"
|
||||
NonLinearSystem = "Le système n'est pas linéaire"
|
||||
Solution = "Solution"
|
||||
|
||||
@@ -4,6 +4,7 @@ AddEquation = "Ajouter une équation"
|
||||
Resolve = "Résoudre l'équation"
|
||||
RequireEquation = "L'entrée doit être une équation"
|
||||
UseEquationModel = "Utiliser le modèle d'équation"
|
||||
UndefinedEquation = "Une equation est indéfinie"
|
||||
TooManyVariables = "Le système a trop d'inconnus"
|
||||
NonLinearSystem = "Le système n'est pas linéaire"
|
||||
Solution = "Solution"
|
||||
|
||||
@@ -4,6 +4,7 @@ AddEquation = "Ajouter une équation"
|
||||
Resolve = "Résoudre l'équation"
|
||||
RequireEquation = "L'entrée doit être une équation"
|
||||
UseEquationModel = "Utiliser le modèle d'équation"
|
||||
UndefinedEquation = "Une equation est indéfinie"
|
||||
TooManyVariables = "Le système a trop d'inconnus"
|
||||
NonLinearSystem = "Le système n'est pas linéaire"
|
||||
Solution = "Solution"
|
||||
|
||||
@@ -4,6 +4,7 @@ AddEquation = "Ajouter une équation"
|
||||
Resolve = "Résoudre l'équation"
|
||||
RequireEquation = "L'entrée doit être une équation"
|
||||
UseEquationModel = "Utiliser le modèle d'équation"
|
||||
UndefinedEquation = "Une equation est indéfinie"
|
||||
TooManyVariables = "Le système a trop d'inconnus"
|
||||
NonLinearSystem = "Le système n'est pas linéaire"
|
||||
Solution = "Solution"
|
||||
|
||||
@@ -4,6 +4,7 @@ AddEquation = "Ajouter une équation"
|
||||
Resolve = "Résoudre l'équation"
|
||||
RequireEquation = "L'entrée doit être une équation"
|
||||
UseEquationModel = "Utiliser le modèle d'équation"
|
||||
UndefinedEquation = "Une equation est indéfinie"
|
||||
TooManyVariables = "Le système a trop d'inconnus"
|
||||
NonLinearSystem = "Le système n'est pas linéaire"
|
||||
Solution = "Solution"
|
||||
|
||||
@@ -40,10 +40,12 @@ Expression * Equation::standardForm(Context * context) const {
|
||||
Expression * e = expression(context);
|
||||
if (e->type() == Expression::Type::Equal) {
|
||||
m_standardForm = static_cast<const Equal *>(e)->standardEquation(*context);
|
||||
} else {
|
||||
} else if (e->type() == Expression::Type::Rational && static_cast<Rational *>(e)->isOne()) {
|
||||
// The equality was reduced which means the equality was always true.
|
||||
assert(e->type() == Expression::Type::Rational && static_cast<Rational *>(e)->isOne());
|
||||
m_standardForm = new Rational(0);
|
||||
} else {
|
||||
// The equality has an undefined operand
|
||||
assert(e->type() == Expression::Type::Undefined);
|
||||
}
|
||||
}
|
||||
return m_standardForm;
|
||||
|
||||
@@ -72,6 +72,7 @@ bool EquationStore::haveMoreApproximationSolutions(Context * context) {
|
||||
|
||||
void EquationStore::approximateSolve(Poincare::Context * context) {
|
||||
assert(m_variables[0] != 0 && m_variables[1] == 0);
|
||||
assert(m_type == Type::Monovariable);
|
||||
m_numberOfSolutions = 0;
|
||||
double start = m_intervalApproximateSolutions[0];
|
||||
double step = (m_intervalApproximateSolutions[1]-m_intervalApproximateSolutions[0])*k_precision;
|
||||
@@ -93,6 +94,9 @@ EquationStore::Error EquationStore::exactSolve(Poincare::Context * context) {
|
||||
m_variables[0] = 0;
|
||||
int numberOfVariables = 0;
|
||||
for (int i = 0; i < numberOfDefinedModels(); i++) {
|
||||
if (definedModelAtIndex(i)->standardForm(context) == nullptr) {
|
||||
return Error::EquationUndefined;
|
||||
}
|
||||
numberOfVariables = definedModelAtIndex(i)->standardForm(context)->getVariables(m_variables);
|
||||
if (numberOfVariables < 0) {
|
||||
return Error::TooManyVariables;
|
||||
|
||||
@@ -16,9 +16,10 @@ public:
|
||||
};
|
||||
enum class Error : int16_t {
|
||||
NoError = 0,
|
||||
TooManyVariables = -1,
|
||||
NonLinearSystem = -2,
|
||||
RequireApproximateSolution = -3
|
||||
EquationUndefined = -1,
|
||||
TooManyVariables = -2,
|
||||
NonLinearSystem = -3,
|
||||
RequireApproximateSolution = -4
|
||||
};
|
||||
EquationStore();
|
||||
~EquationStore();
|
||||
|
||||
@@ -147,6 +147,9 @@ void ListController::resolveEquations() {
|
||||
}
|
||||
EquationStore::Error e = m_equationStore->exactSolve(static_cast<App *>(app())->localContext());
|
||||
switch (e) {
|
||||
case EquationStore::Error::EquationUndefined:
|
||||
app()->displayWarning(I18n::Message::UndefinedEquation);
|
||||
return;
|
||||
case EquationStore::Error::TooManyVariables:
|
||||
app()->displayWarning(I18n::Message::TooManyVariables);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user