numl.Math.LinearAlgebra.Matrix.LU C# (CSharp) Метод

LU() публичный статический Метод

NOT IMPLEMENTED!
Thrown when the requested operation is invalid.
public static LU ( Matrix A ) : Tuple
A Matrix .
Результат Tuple
        public static Tuple<Matrix, Matrix, Matrix> LU(Matrix A)
        {
            // TODO: FINISH ALGORITHM
            if (A.Rows != A.Cols)
                throw new InvalidOperationException("Factorization requires a symmetric positive semidefinite matrix!");

            int n = A.Rows;

            Matrix P = Pivot(A);
            Matrix M = P * A;

            Matrix L = Identity(n);
            Matrix U = Zeros(n);

            for (int j = 0; j < n; j++)
            {
                L[j, j] = 1;

                for (int i = 0; i < j + 1; i++)
                {
                    U[i, j] = M[i, j];
                    for (int k = 0; k < i; k++)
                        U[i, j] -= U[k, j] * L[i, k];
                }

                for (int i = j; i < n; i++)
                {
                    L[i, j] = M[i, j];
                    for (int k = 0; k < j; k++)
                        L[i, j] -= U[k, j] * L[i, k];

                    if (U[j, j] == 0)
                        System.Diagnostics.Debug.WriteLine("Unstable divisor...");

                    L[i, j] /= U[j, j];
                }
            }

            return new Tuple<Matrix,Matrix,Matrix>(P, L, U);
        }