Skip to content

Commit

Permalink
CharacteristicPolynomial clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
axkr committed Jun 22, 2024
1 parent f00075f commit 90d66e9
Showing 1 changed file with 22 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1049,12 +1049,16 @@ public IExpr evaluate(final IAST ast, EvalEngine engine) {
IExpr variable = ast.arg2();
if (!variable.isVariable()) {
// `1` is not a valid variable.
return Errors.printMessage(ast.topHead(), "ivar", F.list(variable), engine);
return Errors.printMessage(S.CharacteristicPolynomial, "ivar", F.list(variable), engine);
}
IExpr det = generateCharacteristicPolynomial(dimensions[0], matrix, variable);
IExpr polynomial = engine.evaluate(det);
if (!polynomial.isList()) {
return polynomial;
try {
IExpr det = generateCharacteristicPolynomial(dimensions[0], matrix, variable);
IExpr polynomial = engine.evaluate(det);
if (!polynomial.isList()) {
return polynomial;
}
} catch (IllegalArgumentException | UnsupportedOperationException iae) {
return Errors.printMessage(S.CharacteristicPolynomial, iae, engine);
}
}

Expand Down Expand Up @@ -2109,22 +2113,22 @@ public IExpr evaluate(final IAST ast, EvalEngine engine) {
boolean hasNumericArgument = arg1.isNumericArgument(true);// (IAST.CONTAINS_NUMERIC_ARG);
if (!hasNumericArgument) {
// if (dim[0] <= 4 && dim[1] <= 4) {
ISymbol x = F.Dummy("x");
IExpr m = engine.evaluate(F.CharacteristicPolynomial(arg1, x));
if (m.isPolynomial(x)) {
IExpr eigenValues =
RootsFunctions.roots(m, false, F.List(x), false, true, engine);
if (eigenValues.isList()) {
if (eigenValues.forAll(v -> v.isNumericFunction())) {
IAST sortFunction =
sortValuesIfNumeric((IASTMutable) eigenValues, numberOfEigenvalues);
if (sortFunction.isPresent()) {
return engine.evaluate(sortFunction);
}
ISymbol x = F.Dummy("x");
IExpr m = engine.evaluate(F.CharacteristicPolynomial(arg1, x));
if (m.isPolynomial(x)) {
IExpr eigenValues =
RootsFunctions.roots(m, false, F.List(x), false, true, engine);
if (eigenValues.isList()) {
if (eigenValues.forAll(v -> v.isNumericFunction())) {
IAST sortFunction =
sortValuesIfNumeric((IASTMutable) eigenValues, numberOfEigenvalues);
if (sortFunction.isPresent()) {
return engine.evaluate(sortFunction);
}
}
}
// }
}
// }
}
}
}
Expand Down

0 comments on commit 90d66e9

Please sign in to comment.