SmartDecimal[,] PrepareProblem(int places) { SmartDecimal.Places = places; var res = new SmartDecimal[original.GetLength(0), original.GetLength(1)]; for (int i = 0; i < original.GetLength(0); i++) { for (int j = 0; j < original.GetLength(1); j++) { res[i, j] = new SmartDecimal((decimal)original[i, j]); } } return(res); }
SmartDecimal[,] LU_Decomposition(SmartDecimal[,] a) { int n = a.GetLength(0); var d = new SmartDecimal[n, n + 1]; for (int j = 0; j < n; j++) { for (int i = j; i < n; i++) { d[i, j] = a[i, j] - Enumerable.Range(0, j).Aggregate(new SmartDecimal(0), (acc, k) => acc + d[i, k] * d[k, j]); } for (int i = j + 1; i < n + 1; i++) { d[j, i] = (a[j, i] - Enumerable.Range(0, j).Aggregate(new SmartDecimal(0), (acc, k) => acc + d[j, k] * d[k, i])) / d[j, j]; } } return(d); }