当前位置: 首页>>代码示例>>C#>>正文


C# GeneralMatrix.Inverse方法代码示例

本文整理汇总了C#中DotNetMatrix.GeneralMatrix.Inverse方法的典型用法代码示例。如果您正苦于以下问题:C# GeneralMatrix.Inverse方法的具体用法?C# GeneralMatrix.Inverse怎么用?C# GeneralMatrix.Inverse使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在DotNetMatrix.GeneralMatrix的用法示例。


在下文中一共展示了GeneralMatrix.Inverse方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Decrypt

        //decrypt line of input
        static void Decrypt(string input, GeneralMatrix key, GeneralMatrix invKey, Dictionary<char, int> hillDict, StringBuilder decText)
        {
            string pt = "";
            string[] line = input.Trim().Split(' ');
            GeneralMatrix inverse = key.Inverse();
            for (int i = 0; i < line.Length; i += 3)
            {
                //3 at a time
                double[] temp = new double[3];
                temp[0] = Convert.ToInt32(line[i]);
                temp[1] = Convert.ToInt32(line[i + 1]);
                temp[2] = Convert.ToInt32(line[i + 2]);

                //new 3x1 matrix
                GeneralMatrix ctMat = new GeneralMatrix(new double[] { temp[0], temp[1], temp[2] }, 3);
                //multiply by inverse
                GeneralMatrix ptMat = inverse.Multiply(ctMat);
                //mod 31 the result
                for (int x = 0; x < ptMat.RowDimension; x++)
                {
                    for (int y = 0; y < ptMat.ColumnDimension; y++)
                    {
                        var tempElement = Convert.ToInt32(ptMat.GetElement(x, y)) % 31;
                        while (tempElement < 0)
                            tempElement = tempElement + 31;
                        ptMat.SetElement(x, y, tempElement);
                    }
                }

                for (int x = 0; x < ptMat.RowDimension; x++)
                {
                    for (int y = 0; y < ptMat.ColumnDimension; y++)
                    {
                        pt += hillDict.FirstOrDefault(z => z.Value == ptMat.GetElement(x, y)).Key;
                    }
                }
            }
            //replace padding with space characters
            decText.Replace("?", " ");
            decText.AppendLine(pt);
        }
开发者ID:b-esf,项目名称:Crypto,代码行数:42,代码来源:Program.cs

示例2: Main


//.........这里部分代码省略.........
            }
            catch (System.SystemException e)
            {
                errorCount = try_failure(errorCount, "Rank()...", "incorrect Rank calculation");
                System.Console.Out.WriteLine(e.Message);
            }
            B = new GeneralMatrix(condmat);
            SVD = B.SVD();
            double[] singularvalues = SVD.SingularValues;
            try
            {
                check(B.Condition(), singularvalues[0] / singularvalues[System.Math.Min(B.RowDimension, B.ColumnDimension) - 1]);
                try_success("Condition()...", "");
            }
            catch (System.SystemException e)
            {
                errorCount = try_failure(errorCount, "Condition()...", "incorrect condition number calculation");
                System.Console.Out.WriteLine(e.Message);
            }
            int n = A.ColumnDimension;
            A = A.GetMatrix(0, n - 1, 0, n - 1);
            A.SetElement(0, 0, 0.0);
            LUDecomposition LU = A.LUD();
            try
            {
                check(A.GetMatrix(LU.Pivot, 0, n - 1), LU.L.Multiply(LU.U));
                try_success("LUDecomposition...", "");
            }
            catch (System.SystemException e)
            {
                errorCount = try_failure(errorCount, "LUDecomposition...", "incorrect LU decomposition calculation");
                System.Console.Out.WriteLine(e.Message);
            }
            X = A.Inverse();
            try
            {
                check(A.Multiply(X), GeneralMatrix.Identity(3, 3));
                try_success("Inverse()...", "");
            }
            catch (System.SystemException e)
            {
                errorCount = try_failure(errorCount, "Inverse()...", "incorrect Inverse calculation");
                System.Console.Out.WriteLine(e.Message);
            }
            O = new GeneralMatrix(SUB.RowDimension, 1, 1.0);
            SOL = new GeneralMatrix(sqSolution);
            SQ = SUB.GetMatrix(0, SUB.RowDimension - 1, 0, SUB.RowDimension - 1);
            try
            {
                check(SQ.Solve(SOL), O);
                try_success("Solve()...", "");
            }
            catch (System.ArgumentException e1)
            {
                errorCount = try_failure(errorCount, "Solve()...", e1.Message);
                System.Console.Out.WriteLine(e1.Message);
            }
            catch (System.SystemException e)
            {
                errorCount = try_failure(errorCount, "Solve()...", e.Message);
                System.Console.Out.WriteLine(e.Message);
            }
            A = new GeneralMatrix(pvals);
            CholeskyDecomposition Chol = A.chol();
            GeneralMatrix L = Chol.GetL();
            try
开发者ID:eylvisaker,项目名称:tbsuite,代码行数:67,代码来源:TestMatrix.cs

示例3: GetInverse

        //get inverse of encryption key for decryption
        static GeneralMatrix GetInverse(GeneralMatrix key)
        {
            GeneralMatrix invKey = key.Inverse();
            //calculate determinant to the power of 30
            double det = key.Determinant();
            double zDet = Math.Pow(det, 30);

            //multiply each value by det^30 and mod31 that value
            for (int i = 0; i < invKey.RowDimension; i++)
            {
                for (int j = 0; j < invKey.ColumnDimension; j++)
                {
                    var temp = (invKey.GetElement(i, j) * zDet) % 31;
                    invKey.SetElement(i, j, temp);
                }
            }
            Console.WriteLine("3x3 decryption matrix successfully created from key.txt");
            return invKey;
        }
开发者ID:b-esf,项目名称:Crypto,代码行数:20,代码来源:Program.cs


注:本文中的DotNetMatrix.GeneralMatrix.Inverse方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。