public bool EigenSystem(EigenVectorsSpecs specs, out MathematicaMatrix values, out MathematicaMatrix vectors) { var sysExpr = CasInterface[Mfs.Eigensystem[MathExpr]]; values = Create(CasInterface, CasInterface[Mfs.DiagonalMatrix[sysExpr.Args[0]]]); Expr vectorsExpr; switch (specs) { case EigenVectorsSpecs.InMatrixRows: vectorsExpr = Mfs.Eigenvectors[sysExpr.Args[1]]; break; case EigenVectorsSpecs.InMatrixColumns: vectorsExpr = CasInterface[Mfs.Transpose[Mfs.Eigenvectors[sysExpr.Args[1]]]]; break; case EigenVectorsSpecs.OrthogonalInMatrixRows: vectorsExpr = CasInterface[Mfs.Orthogonalize[Mfs.Eigenvectors[sysExpr.Args[1]]]]; break; default: vectorsExpr = CasInterface[Mfs.Transpose[Mfs.Orthogonalize[Mfs.Eigenvectors[sysExpr.Args[1]]]]]; break; } vectors = Create(CasInterface, vectorsExpr); //TODO: Test if the eigen sytem is OK return(true); }
public MathematicaMatrix EigenVectors(EigenVectorsSpecs specs) { Expr vectorsExpr; switch (specs) { case EigenVectorsSpecs.InMatrixRows: vectorsExpr = Mfs.Eigenvectors[MathExpr]; break; case EigenVectorsSpecs.InMatrixColumns: vectorsExpr = Mfs.Transpose[Mfs.Eigenvectors[MathExpr]]; break; case EigenVectorsSpecs.OrthogonalInMatrixRows: vectorsExpr = Mfs.Orthogonalize[Mfs.Eigenvectors[MathExpr]]; break; default: vectorsExpr = Mfs.Transpose[Mfs.Orthogonalize[Mfs.Eigenvectors[MathExpr]]]; break; } return(new MathematicaMatrix(CasInterface, CasInterface[vectorsExpr])); }