package org.matheclipse.core.eval.interfaces;
import org.apache.commons.math3.linear.FieldMatrix;
import org.apache.commons.math3.linear.RealMatrix;
import org.matheclipse.core.basic.Config;
import org.matheclipse.core.convert.Convert;
import org.matheclipse.core.eval.exception.Validate;
import org.matheclipse.core.expression.ExprFieldElement;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
public abstract class AbstractMatrix1Expr extends AbstractFunctionEvaluator {
public AbstractMatrix1Expr() {
}
@Override
public IExpr evaluate(final IAST ast) {
Validate.checkSize(ast, 2);
FieldMatrix matrix;
try {
int[] dim = ast.get(1).isMatrix();
if (dim != null) {
final IAST list = (IAST) ast.get(1);
matrix = Convert.list2Matrix(list);
return matrixEval(matrix).getExpr();
}
} catch (final ClassCastException e) {
if (Config.SHOW_STACKTRACE) {
e.printStackTrace();
}
} catch (final IndexOutOfBoundsException e) {
if (Config.SHOW_STACKTRACE) {
e.printStackTrace();
}
}
return null;
}
@Override
public IExpr numericEval(final IAST ast) {
Validate.checkSize(ast, 2);
RealMatrix matrix;
final IAST list = (IAST) ast.get(1);
try {
matrix = Convert.list2RealMatrix(list);
return realMatrixEval(matrix);
} catch (final ClassCastException e) {
// ClassCastException occurs in list2RealMatrix(),
// if the matrix elements aren't pure numerical values
FieldMatrix fieldMatrix = Convert.list2Matrix(list);
return matrixEval(fieldMatrix).getExpr();
} catch (final IndexOutOfBoundsException e) {
if (Config.SHOW_STACKTRACE) {
e.printStackTrace();
}
}
return null;
}
public abstract ExprFieldElement matrixEval(FieldMatrix matrix);
public abstract IExpr realMatrixEval(RealMatrix matrix);
}
Ads help maintain this website.