Разложение матрицы Кроута - Crout matrix decomposition
В линейная алгебра, то Разложение матрицы Кроута является LU разложение который разлагает матрица в нижняя треугольная матрица (L), верхнетреугольная матрица (U) и, хотя и не всегда необходимо, матрица перестановок (П). Он был разработан Prescott Durand Crout. [1]
Разложение матрицы Краута алгоритм немного отличается от Метод Дулитла. Метод Дулиттла возвращает единичную нижнюю треугольную матрицу и верхнюю треугольную матрицу, а метод Crout возвращает нижнюю треугольную матрицу и единичную верхнюю треугольную матрицу.
Итак, если матричное разложение матрицы A таково, что:
- A = LDU
поскольку L - единичная нижняя треугольная матрица, D - диагональная матрица и U - единичная верхнетреугольная матрица, то метод Дулиттла дает
- А = L (DU)
и метод Краута производит
- А = (LD) U.
Реализации
Реализация C:
пустота сухарик(двойной const **А, двойной **L, двойной **U, int п) { int я, j, k; двойной сумма = 0; за (я = 0; я < п; я++) { U[я][я] = 1; } за (j = 0; j < п; j++) { за (я = j; я < п; я++) { сумма = 0; за (k = 0; k < j; k++) { сумма = сумма + L[я][k] * U[k][j]; } L[я][j] = А[я][j] - сумма; } за (я = j; я < п; я++) { сумма = 0; за(k = 0; k < j; k++) { сумма = сумма + L[j][k] * U[k][я]; } если (L[j][j] == 0) { printf("det (L) близко к 0! п Нельзя делить на 0 ... п"); выход(EXIT_FAILURE); } U[j][я] = (А[j][я] - сумма) / L[j][j]; } }}
Реализация Octave / Matlab:
функция[L, U] =LUdecompCrout(А)[р, C] = размер(А); за я = 1: R L(я, 1) = А(я, 1); U(я, я) = 1; конецдля j = 2: R U(1, j) = А(1, j) / L(1, 1); конецдля i = 2: R за j = 2: я L(я, j) = А(я, j) - L(я, 1:j - 1) * U(1:j - 1, j); конецдля j = i + 1: R U(я, j) = (А(я, j) - L(я, 1:я - 1) * U(1:я - 1, j)) / L(я, я); конецконец конец
Рекомендации
- ^ Press, Уильям Х. (2007). Числовые рецепты 3-е издание: Искусство научных вычислений. Издательство Кембриджского университета. С. 50–52. ISBN 9780521880688.
- Реализация с использованием функций В Matlab