package org.matheclipse.core.reflection.system;
import org.matheclipse.core.eval.exception.Validate;
import org.matheclipse.core.eval.interfaces.AbstractFunctionEvaluator;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
/**
* Compute the characteristic polynomial of a matrix.
*
* See Wikipedia -
* Characteristic polynomial
*/
public class CharacteristicPolynomial extends AbstractFunctionEvaluator {
public CharacteristicPolynomial() {
super();
}
@Override
public IExpr evaluate(final IAST ast) {
Validate.checkSize(ast, 3);
int[] dim = ast.arg1().isMatrix();
if (dim != null && dim[0] == dim[1]) {
// a matrix with square dimensions
final IExpr[] valuesForIdentityMatrix = { F.C0, ast.arg2() };
return F.eval(F.Det(F.Subtract(ast.arg1(), IdentityMatrix
.diagonalMatrix(valuesForIdentityMatrix, dim[0]))));
}
return null;
}
}
Ads help maintain this website.