Accord.Math.Decompositions.LuDecomposition.Inverse C# (CSharp) Method

Inverse() public method

Solves a set of equation systems of type A * X = I.
public Inverse ( ) : ].double[
return ].double[
        public double[,] Inverse()
        {
            if (!Nonsingular)
            {
                throw new InvalidOperationException("Matrix is singular");
            }

            int rows = lu.GetLength(1);
            int columns = lu.GetLength(1);
            int count = rows;

            // Copy right hand side with pivoting
            var X = new double[rows,columns];
            for (int i = 0; i < rows; i++)
            {
                int k = pivotVector[i];
                X[i, k] = 1.0;
            }

            // Solve L*Y = B(piv,:)
            for (int k = 0; k < columns; k++)
                for (int i = k + 1; i < columns; i++)
                    for (int j = 0; j < count; j++)
                        X[i, j] -= X[k, j]*lu[i, k];

            // Solve U*X = I;
            for (int k = columns - 1; k >= 0; k--)
            {
                for (int j = 0; j < count; j++)
                    X[k, j] /= lu[k, k];

                for (int i = 0; i < k; i++)
                    for (int j = 0; j < count; j++)
                        X[i, j] -= X[k, j]*lu[i, k];
            }

            return X;
        }

Usage Example

        public void InverseTestNaN()
        {
            int n = 5;

            var I = Matrix.Identity(n);

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    double[,] value = Matrix.Magic(n);

                    value[i, j] = double.NaN;

                    var target = new LuDecomposition(value);
                    Assert.IsTrue(Matrix.IsEqual(target.Solve(I), target.Inverse()));

                    var target2 = new JaggedLuDecomposition(value.ToJagged());
                    Assert.IsTrue(Matrix.IsEqual(target2.Solve(I.ToJagged()), target2.Inverse()));
                }
            }
        }
All Usage Examples Of Accord.Math.Decompositions.LuDecomposition::Inverse