Example #1
0
        /// <summary>
        /// Create a non orthogonal frame based on an asymmetric inner product matrix
        /// </summary>
        /// <param name="ipm"></param>
        /// <returns></returns>
        private static GaFrameNonOrthogonal CreateNonOrthogonalFromIpm(MathematicaMatrix ipm)
        {
            MathematicaVector eigenValues;
            MathematicaMatrix eigenVectors;

            if (ipm.EigenSystem(MathematicaMatrix.EigenVectorsSpecs.OrthogonalInMatrixColumns, out eigenValues, out eigenVectors) == false)
            {
                throw new GMacSymbolicException("Cannot obtain orthogonal eigen system of the given matrix");
            }

            var baseFrame = CreateOrthogonal(eigenValues);

            var baseToDerivedOm = GaOuterMorphismFull.Create(eigenVectors);
            var derivedToBaseOm = GaOuterMorphismFull.Create(eigenVectors.Transpose());

            return(new GaFrameNonOrthogonal(baseFrame, ipm, derivedToBaseOm, baseToDerivedOm));
        }