static Tuple<int[,],int[,]> luDecomposition(int[, ] mat, int n)
int[, ] lower = new int[n, n];
int[, ] upper = new int[n, n];
for (int i = 0; i < n; i++)
for (int k = i; k < n; k++)
for (int j = 0; j < i; j++)
sum += (lower[i, j] * upper[j, k]);
upper[i, k] = mat[i, k] - sum;
for (int k = i; k < n; k++)
for (int j = 0; j < i; j++)
sum += (lower[k, j] * upper[j, i]);
= (mat[k, i] - sum) / upper[i, i];
return Tuple.Create(lower,upper);
static String setw(int noOfSpace)
for (int i = 0; i < noOfSpace; i++)
static void printmatrix(int[,] mat, int n)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
Console.Write(setw(4) + mat[i, j] + "\t");
public static void Main()
int[, ] mat = { { 2, -1, -2 },
var outTuple = luDecomposition(mat, mat.GetLength((0)));
int[,] L = outTuple.Item1;
int[,] U = outTuple.Item2;
printmatrix(mat, mat.GetLength(0));
Console.WriteLine("\nL");
printmatrix(L, L.GetLength(0));
Console.WriteLine("\nU");
printmatrix(U, U.GetLength(0));