@@ -214,8 +214,7 @@ protected IASTAppendable analyzeSublistRecursive(ArrayList<ExprAnalyzer> analyze
214
214
} else if (numericFlag ) {
215
215
listOfRules = findRoot (exprAnalyzer , engine );
216
216
if (listOfRules .isPresent ()) {
217
- listOfRules =
218
- exprAnalyzer .mapOnOriginal (exprAnalyzer .getOriginalExpr (), listOfRules );
217
+ listOfRules = exprAnalyzer .mapOnOriginal (exprAnalyzer .getOriginalExpr (), listOfRules );
219
218
}
220
219
}
221
220
if (listOfRules .isPresent ()) {
@@ -618,22 +617,23 @@ public IExpr solveRecursive(IASTMutable termsEqualZeroList, IAST inequationsList
618
617
// expensive recursion try
619
618
IExpr firstEquation = termsEqualZeroList .arg1 ();
620
619
620
+ IASTMutable reducedEqualZeroList = termsEqualZeroList .copyAppendable ();
621
621
for (int i = 1 ; i < variables .size (); i ++) {
622
622
IExpr variable = variables .get (i );
623
623
624
624
IAST [] reduced = Eliminate .eliminateOneVariable (F .list (F .Equal (firstEquation , F .C0 )),
625
625
variable , true , engine );
626
626
if (reduced != null ) {
627
627
variables = variables .splice (i );
628
- termsEqualZeroList = termsEqualZeroList .removeAtCopy (1 );
628
+ reducedEqualZeroList = reducedEqualZeroList .removeAtCopy (1 );
629
629
// oneVariableRule = ( firstVariable -> reducedExpression )
630
630
IAST oneVariableRule = reduced [1 ];
631
- IExpr replaced = termsEqualZeroList .replaceAll (oneVariableRule );
631
+ IExpr replaced = reducedEqualZeroList .replaceAll (oneVariableRule );
632
632
if (replaced .isList ()) {
633
633
IExpr subResult = solveRecursive ((IASTMutable ) replaced , inequationsList , numericFlag ,
634
634
variables , engine );
635
635
if (subResult .isListOfLists ()) {
636
- return F .mapList ((IAST ) subResult , t -> {
636
+ IASTMutable result = F .mapList ((IAST ) subResult , t -> {
637
637
final IAST listOfRules = (IAST ) t ;
638
638
IExpr replaceAllExpr = oneVariableRule .second ().replaceAll (listOfRules );
639
639
if (replaceAllExpr .isPresent ()) {
@@ -642,12 +642,13 @@ public IExpr solveRecursive(IASTMutable termsEqualZeroList, IAST inequationsList
642
642
}
643
643
return F .NIL ;
644
644
});
645
+ return crossChecking (termsEqualZeroList , result , engine );
645
646
} else if (subResult .isList ()) { // important for NSolve
646
647
replaced = oneVariableRule .second ().replaceAll ((IAST ) subResult );
647
648
if (replaced .isPresent ()) {
648
- IASTAppendable appendable = ((IAST ) subResult ).copyAppendable ();
649
- appendable .append (F .Rule (variable , replaced ));
650
- return appendable ;
649
+ IASTAppendable result = ((IAST ) subResult ).copyAppendable ();
650
+ result .append (F .Rule (variable , replaced ));
651
+ return crossChecking ( termsEqualZeroList , result , engine ) ;
651
652
}
652
653
}
653
654
}
@@ -941,7 +942,6 @@ private IASTMutable solveTimesEquationsRecursively(IASTMutable termsEqualZero,
941
942
solveTimesAST ((IAST ) termEQZero , termsEqualZero , inequationsList , numericFlag ,
942
943
variables , multipleValues , engine , subSolutionSet , i );
943
944
}
944
-
945
945
}
946
946
}
947
947
}
@@ -1019,6 +1019,10 @@ private static IASTMutable crossChecking(IASTMutable termsEqualZero, IASTMutable
1019
1019
break ;
1020
1020
}
1021
1021
} else {
1022
+ if (possibleZero .isIndeterminate ()) {
1023
+ removedPositions [untilPosition ++] = j ;
1024
+ break ;
1025
+ }
1022
1026
if (!engine .evalTrue (F .PossibleZeroQ (replaceAll ))) {
1023
1027
removedPositions [untilPosition ++] = j ;
1024
1028
break ;
0 commit comments