LU-разложение
В численном анализе и алгебре линейной нижне-верхнее ( LU ) разложение или факторизация факторизуют матрицу как произведение нижней треугольной матрицы и верхней треугольной матрицы (см. матричное разложение ). Иногда продукт включает в себя матрицу перестановок также . LU-разложение можно рассматривать как матричную форму исключения Гаусса . Компьютеры обычно решают квадратные системы линейных уравнений с использованием LU-разложения, и это также ключевой шаг при инвертировании матрицы или вычислении определителя матрицы. Разложение LU было предложено польским астрономом Тадеушем Банакевичем в 1938 году. [1] Цитируем: «Похоже, что Гаусс и Дулитл применили метод [исключения] только к симметричным уравнениям. Более поздние авторы, например, Эйткен, Банакевич, Дуайер и Краут… подчеркивали использование этого метода или его вариаций в связи с несимметричными проблемами… Банакевич… видел суть… в том, что основная проблема на самом деле одна. матричной факторизации, или «разложения», как он это называл». [2] Его также иногда называют LR- разложением (факторы на левую и правую треугольные матрицы).
Определения
[ редактировать ]Пусть A — квадратная матрица. Факторизация LU относится к факторизации A с правильным порядком строк и/или столбцов или перестановками на два фактора — нижнюю треугольную матрицу L и верхнюю треугольную матрицу U :
В нижней треугольной матрице все элементы выше диагонали равны нулю, в верхней треугольной матрице все элементы ниже диагонали равны нулю. Например, для матрицы A 3×3 ее LU-разложение выглядит так:
Без надлежащего упорядочения или перестановок в матрице факторизация может не осуществиться. Например, легко проверить (развернув матричное умножение ), что . Если , то хотя бы один из и должно быть равно нулю, что означает, что либо , либо U сингулярны L . Это невозможно, если A неособа (обратима). Это процедурная проблема. Его можно удалить, просто переупорядочив строки A так, чтобы первый элемент перестановочной матрицы был ненулевым. Ту же проблему на последующих этапах факторизации можно решить таким же образом; см. основную процедуру ниже.
LU-факторизация с частичным поворотом
[ редактировать ]Оказывается, для LU-факторизации достаточно правильной перестановки в строках (или столбцах). Факторизация LU с частичным поворотом (LUP) часто относится к факторизации LU только с перестановками строк:
где L и U — снова нижняя и верхняя треугольные матрицы, а — матрица перестановок , которая при умножении слева на A переупорядочивает строки A. P Оказывается, все квадратные матрицы можно факторизовать в таком виде: [3] и факторизация на практике численно устойчива. [4] Это делает LUP-разложение полезным на практике методом.
LU-факторизация с полным поворотом
[ редактировать ]Факторизация LU с полным поворотом включает в себя перестановки как строк, так и столбцов:
где L , U и P определены, как и раньше, а — матрица перестановок, которая переупорядочивает столбцы A. Q [5]
Разложение по нижней диагонали-верхней (LDU)
[ редактировать ]Разложение «нижняя диагональ-верхняя» (LDU) — это разложение вида
где D — диагональная матрица , а L и U — унитреугольные матрицы , что означает, что все элементы на диагоналях L и U равны единице.
Прямоугольные матрицы
[ редактировать ]Выше мы требовали, чтобы A была квадратной матрицей, но все эти разложения можно обобщить и на прямоугольные матрицы. [6] В этом случае L и D — квадратные матрицы, каждая из которых имеет то же количество строк, что и A , а U имеет точно такие же размеры, что A. и Верхний треугольник следует интерпретировать как имеющий только нулевые записи ниже главной диагонали, которая начинается в верхнем левом углу. Точно так же более точный термин для U заключается в том, что это форма эшелона строк матрицы A .
Пример
[ редактировать ]Мы факторизуем следующую матрицу 2х2:
Один из способов найти LU-разложение этой простой матрицы — просто решить линейные уравнения путем проверки. Расширение матричного умножения дает
Эта система уравнений является недоопределенной . В этом случае любые два ненулевых элемента матриц L и U являются параметрами решения и могут быть произвольно присвоены любому ненулевому значению. Следовательно, чтобы найти единственное LU-разложение, необходимо наложить некоторые ограничения на L и U. матрицы Например, мы можем удобно потребовать, чтобы нижняя треугольная матрица L была единичной треугольной матрицей (т.е. приравняла все элементы ее главной диагонали к единицам). Тогда система уравнений имеет следующее решение:
Подстановка этих значений в приведенное выше LU-разложение дает
Существование и уникальность
[ редактировать ]Квадратные матрицы
[ редактировать ]Любая квадратная матрица допускает LUP и PLU . факторизацию [3] Если является обратимым , то он допускает факторизацию LU (или LDU ) тогда и только тогда, когда все его ведущие главные миноры [7] ненулевые [8] (например не допускает факторизации LU или LDU ). Если представляет собой сингулярную матрицу ранга , то он допускает LU- факторизацию, если первый ведущие главные миноры не равны нулю, хотя обратное неверно. [9]
Если квадратная обратимая матрица имеет LDU (факторизация, в которой все диагональные элементы L и U равны 1), то факторизация уникальна. [8] В этом случае LU- факторизация также будет уникальной, если мы потребуем, чтобы диагональ (или ) состоит из единиц.
Вообще любая квадратная матрица может иметь одно из следующих значений:
- уникальная LU-факторизация (как упоминалось выше);
- бесконечно много LU-факторизаций, если два или более любых первых ( n -1) столбцов линейно зависимы или любой из первых ( n -1) столбцов равен 0;
- нет LU-факторизации, если первые ( n −1) столбцы ненулевые и линейно независимые и хотя бы один ведущий главный минор равен нулю.
В случае 3 можно аппроксимировать LU-факторизацию, изменив диагональную запись. к чтобы избежать нулевого ведущего главного минора. [10]
Симметричные положительно определенные матрицы
[ редактировать ]Если A — симметричная (или эрмитова , если A комплексная) положительно определенная матрица устроить дело так, что — сопряженная транспонированная матрица L. , мы можем U То есть мы можем написать А как
Это разложение называется разложением Холецкого . Если положительно определена, то разложение Холецкого существует и единственно. Более того, вычисление разложения Холецкого более эффективно и численно более стабильно, чем вычисление некоторых других LU-разложений.
Общие матрицы
[ редактировать ]Для (не обязательно обратимой) матрицы над любым полем известны точные необходимые и достаточные условия, при которых она имеет LU-факторизацию. Условия выражаются через ранги определенных подматриц. Алгоритм исключения Гаусса для получения LU-разложения также был распространен на этот наиболее общий случай. [11]
Алгоритмы
[ редактировать ]Закрытая формула
[ редактировать ]Когда факторизация LDU существует и уникальна, существует замкнутая (явная) формула для элементов L , D и U в терминах отношений определителей некоторых подматриц исходной A. матрицы [12] В частности, и для , это соотношение -я главная подматрица -я главная подматрица. Вычисление определителей требует больших вычислительных затрат , поэтому эта явная формула на практике не используется.
Использование исключения Гаусса
[ редактировать ]Следующий алгоритм по существу представляет собой модифицированную форму исключения Гаусса . Для вычисления LU-разложения с использованием этого алгоритма требуется операции с плавающей запятой, игнорируя члены низшего порядка. Частичный поворот добавляет только квадратичный член; это не относится к полному повороту. [13]
Обобщенное объяснение
[ редактировать ]Обозначения
[ редактировать ]Учитывая размера N × N матрицу , определять как оригинальная, немодифицированная версия матрицы . Надстрочный индекс в скобках (например, ) матрицы это версия матрицы. Матрица это матрица, в которой элементы ниже главной диагонали уже исключены до 0 методом исключения Гаусса для первого столбцы.
Ниже приведена матрица, которая поможет нам запомнить обозначения (где каждый представляет любое действительное число в матрице):
Процедура
[ редактировать ]В ходе этого процесса мы постепенно изменяем матрицу используя операции со строками, пока она не станет матрицей в котором все элементы ниже главной диагонали равны нулю. При этом мы одновременно создадим две отдельные матрицы и , такой, что .
Мы определяем окончательную матрицу перестановок как единичную матрицу, в которой все одни и те же строки поменяны местами в том же порядке, что и матрица, пока она преобразуется в матрицу . Для нашей матрицы , мы можем начать с замены строк, чтобы обеспечить желаемые условия для n-го столбца. Например, мы можем поменять местами строки, чтобы выполнить частичный поворот, или сделать это, чтобы установить элемент поворота. на главной диагонали к ненулевому числу, чтобы мы могли завершить исключение Гаусса.
Для нашей матрицы , мы хотим установить каждый элемент ниже до нуля (где – элемент n-го столбца главной диагонали). Ниже мы обозначим каждый элемент как (где ). Чтобы установить равным нулю, мы устанавливаем для каждой строки . Для этой операции . Как только мы выполнили операции со строками для первого столбцов, мы получили верхнетреугольную матрицу который обозначается .
Мы также можем создать нижнюю треугольную матрицу, обозначенную как , путем непосредственного ввода ранее рассчитанных значений по формуле ниже.
Пример
[ редактировать ]Если нам дана матрица мы выберем реализацию частичного поворота и, таким образом, поменяем местами первую и вторую строки, чтобы наша матрица и первая итерация нашего матрица соответственно становится После того, как мы поменяли строки местами, мы можем исключить элементы ниже главной диагонали в первом столбце, выполнив такой, что, После вычитания этих строк мы получили матрица Поскольку мы реализуем частичный поворот, мы меняем местами вторую и третью строки нашей производной матрицы и текущую версию нашей матрица соответственно, чтобы получить Теперь мы исключим элементы ниже главной диагонали во втором столбце, выполнив такой, что . Поскольку в нашей текущей итерации ниже главной диагонали не существует ненулевых элементов. после вычитания этой строки это вычитание строки дает наш окончательный результат матрица (обозначается как ) и финал матрица: Также переключив соответствующие строки, мы получим наш окончательный результат. матрица: Теперь эти матрицы имеют такое отношение, что .
Отношения, когда строки не меняются местами
[ редактировать ]Если мы вообще не меняли местами строки во время этого процесса, мы можем выполнять операции со строками одновременно для каждого столбца. установив где представляет собой единичную матрицу размера N × N , в которой ее n -й столбец заменен транспонированным вектором Другими словами, нижняя треугольная матрица
Выполнение всех операций над строками для первого столбцы с использованием формула эквивалентна нахождению разложения Обозначим так что .
Теперь вычислим последовательность . Мы знаем, что имеет следующую формулу.
Если есть две нижние треугольные матрицы с единицами на главной диагонали, и ни одна из них не имеет ненулевого элемента ниже главной диагонали в том же столбце, что и другая, то мы можем включить все ненулевые элементы в одно и то же место в произведении. из двух матриц. Например:
Наконец, умножьте вместе и сгенерировать объединенную матрицу, обозначенную как (как упоминалось ранее). Использование матрицы , мы получаем
Понятно, что для того, чтобы этот алгоритм работал, нужно иметь на каждом этапе (см. определение ). Если в какой-то момент это предположение не сработает, нужно поменять местами n -ю строку с другой строкой, расположенной ниже, прежде чем продолжить. Вот почему LU-разложение в целом выглядит так: .
LU Разложение Крута
[ редактировать ]Обратите внимание, что разложение, полученное с помощью этой процедуры, представляет собой разложение Дулитла : главная диагональ L состоит исключительно из 1 с. Если продолжить удаление элементов над главной диагональю путем добавления кратных столбцов (вместо удаления элементов ниже диагонали путем добавления кратных строк ) , мы получим разложение Крута , где главная диагональ U равна 1 с. .
Другой (эквивалентный) способ создания разложения Краута данной матрицы A состоит в том, чтобы получить разложение Дулитла транспонированной матрицы A . Действительно, если — LU-разложение, полученное с помощью алгоритма, представленного в этом разделе, а затем путем принятия и , у нас это есть представляет собой разложение Краута.
Через рекурсию
[ редактировать ]Кормен и др. [14] описать рекурсивный алгоритм LUP-разложения.
Учитывая матрицу A , пусть P 1 будет матрицей перестановки такой, что
- ,
где , если в первом столбце A есть ненулевая запись ; или в противном случае возьмите P 1 в качестве единичной матрицы. Теперь позвольте , если ; или в противном случае. У нас есть
Теперь мы можем рекурсивно найти LUP-разложение. . Позволять . Поэтому
что является LUP-разложением A .
Рандомизированный алгоритм
[ редактировать ]Можно найти аппроксимацию низкого ранга для LU-разложения, используя рандомизированный алгоритм. Учитывая входную матрицу и желаемый низкий ранг , рандомизированный LU возвращает матрицы перестановок и нижняя/верхняя трапециевидные матрицы размера и соответственно, такой, что с большой вероятностью , где – константа, зависящая от параметров алгоритма и это -е сингулярное значение входной матрицы . [15]
Теоретическая сложность
[ редактировать ]Если две матрицы порядка n можно перемножить за время M ( n ), где M ( n ) ≥ n а для некоторого a > 2 LU-разложение можно вычислить за время O( M ( n )). [16] Это означает, например, что O( n 2.376 ) существует алгоритм, основанный на алгоритме Копперсмита-Винограда .
Разложение разреженной матрицы
[ редактировать ]Разработаны специальные алгоритмы факторизации больших разреженных матриц . алгоритмы пытаются найти разреженные факторы L и U. Эти В идеале стоимость вычислений определяется количеством ненулевых записей, а не размером матрицы.
Эти алгоритмы используют свободу обмена строк и столбцов для минимизации заполнения (записей, которые изменяются от начального нуля до ненулевого значения во время выполнения алгоритма).
Общую обработку порядков, минимизирующих заполнение, можно решить с помощью теории графов .
Приложения
[ редактировать ]Решение линейных уравнений
[ редактировать ]Дана система линейных уравнений в матричной форме
мы хотим решить уравнение для x , учитывая A и b . Предположим, мы уже получили LUP-разложение A такое, что , так .
В этом случае решение осуществляется в два логических этапа:
- Сначала решаем уравнение для тебя .
- Во-вторых, решаем уравнение для х .
В обоих случаях мы имеем дело с треугольными матрицами ( L и U ), которые можно решить напрямую путем прямой и обратной замены без использования процесса исключения Гаусса (однако нам действительно нужен этот процесс или его эквивалент для вычисления самого LU- разложения).
Вышеописанную процедуру можно многократно применять для решения уравнения несколько раз для разных b . В этом случае быстрее (и удобнее) выполнить LU-разложение матрицы A один раз, а затем решить треугольные матрицы для разных b , вместо того, чтобы каждый раз использовать метод исключения Гаусса. Можно было бы подумать, что матрицы L и U «закодировали» процесс исключения Гаусса.
Стоимость решения системы линейных уравнений составляет примерно операции с плавающей запятой, если матрица имеет размер . Это делает его в два раза быстрее алгоритмов, основанных на QR-разложении , стоимость которого составляет около операции с плавающей запятой при отражений Хаусхолдера использовании . По этой причине обычно предпочтительнее LU-разложение. [17]
Инвертирование матрицы
[ редактировать ]При решении систем уравнений b обычно рассматривают как вектор длиной, равной высоте A. матрицы Однако при инверсии матрицы вместо вектора b у нас есть матрица B , где B — n матрица размера на p , так что мы пытаемся найти матрицу X (также n матрицу размера на p ):
для решения каждого столбца матрицы X. Мы можем использовать тот же алгоритм, представленный ранее , Теперь предположим, что B — единичная матрица размера n . что результат X должен быть обратным результату A. Отсюда следует , [18]
Вычисление определителя
[ редактировать ]Учитывая LUP-разложение квадратной матрицы A определитель A можно вычислить непосредственно как
Второе уравнение следует из того факта, что определитель треугольной матрицы представляет собой просто произведение ее диагональных элементов и что определитель матрицы перестановок равен (−1). С где S — количество перестановок строк в разложении.
В случае разложения LU с полным поворотом также равно правой части приведенного выше уравнения, если мы позволим S быть общим количеством перестановок строк и столбцов.
Тот же метод легко применим к LU-разложению, устанавливая P равным единичной матрице.
Примеры кода
[ редактировать ]Пример кода C
[ редактировать ]/* INPUT: A - array of pointers to rows of a square matrix having dimension N
* Tol - small tolerance number to detect failure when the matrix is near degenerate
* OUTPUT: Matrix A is changed, it contains a copy of both matrices L-E and U as A=(L-E)+U such that P*A=L*U.
* The permutation matrix is not stored as a matrix, but in an integer vector P of size N+1
* containing column indexes where the permutation matrix has "1". The last element P[N]=S+N,
* where S is the number of row exchanges needed for determinant computation, det(P)=(-1)^S
*/
int LUPDecompose(double **A, int N, double Tol, int *P) {
int i, j, k, imax;
double maxA, *ptr, absA;
for (i = 0; i <= N; i++)
P[i] = i; //Unit permutation matrix, P[N] initialized with N
for (i = 0; i < N; i++) {
maxA = 0.0;
imax = i;
for (k = i; k < N; k++)
if ((absA = fabs(A[k][i])) > maxA) {
maxA = absA;
imax = k;
}
if (maxA < Tol) return 0; //failure, matrix is degenerate
if (imax != i) {
//pivoting P
j = P[i];
P[i] = P[imax];
P[imax] = j;
//pivoting rows of A
ptr = A[i];
A[i] = A[imax];
A[imax] = ptr;
//counting pivots starting from N (for determinant)
P[N]++;
}
for (j = i + 1; j < N; j++) {
A[j][i] /= A[i][i];
for (k = i + 1; k < N; k++)
A[j][k] -= A[j][i] * A[i][k];
}
}
return 1; //decomposition done
}
/* INPUT: A,P filled in LUPDecompose; b - rhs vector; N - dimension
* OUTPUT: x - solution vector of A*x=b
*/
void LUPSolve(double **A, int *P, double *b, int N, double *x) {
for (int i = 0; i < N; i++) {
x[i] = b[P[i]];
for (int k = 0; k < i; k++)
x[i] -= A[i][k] * x[k];
}
for (int i = N - 1; i >= 0; i--) {
for (int k = i + 1; k < N; k++)
x[i] -= A[i][k] * x[k];
x[i] /= A[i][i];
}
}
/* INPUT: A,P filled in LUPDecompose; N - dimension
* OUTPUT: IA is the inverse of the initial matrix
*/
void LUPInvert(double **A, int *P, int N, double **IA) {
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
IA[i][j] = P[i] == j ? 1.0 : 0.0;
for (int k = 0; k < i; k++)
IA[i][j] -= A[i][k] * IA[k][j];
}
for (int i = N - 1; i >= 0; i--) {
for (int k = i + 1; k < N; k++)
IA[i][j] -= A[i][k] * IA[k][j];
IA[i][j] /= A[i][i];
}
}
}
/* INPUT: A,P filled in LUPDecompose; N - dimension.
* OUTPUT: Function returns the determinant of the initial matrix
*/
double LUPDeterminant(double **A, int *P, int N) {
double det = A[0][0];
for (int i = 1; i < N; i++)
det *= A[i][i];
return (P[N] - N) % 2 == 0 ? det : -det;
}
Пример кода С#
[ редактировать ]public class SystemOfLinearEquations
{
public double[] SolveUsingLU(double[,] matrix, double[] rightPart, int n)
{
// decomposition of matrix
double[,] lu = new double[n, n];
double sum = 0;
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
sum = 0;
for (int k = 0; k < i; k++)
sum += lu[i, k] * lu[k, j];
lu[i, j] = matrix[i, j] - sum;
}
for (int j = i + 1; j < n; j++)
{
sum = 0;
for (int k = 0; k < i; k++)
sum += lu[j, k] * lu[k, i];
lu[j, i] = (1 / lu[i, i]) * (matrix[j, i] - sum);
}
}
// lu = L+U-I
// find solution of Ly = b
double[] y = new double[n];
for (int i = 0; i < n; i++)
{
sum = 0;
for (int k = 0; k < i; k++)
sum += lu[i, k] * y[k];
y[i] = rightPart[i] - sum;
}
// find solution of Ux = y
double[] x = new double[n];
for (int i = n - 1; i >= 0; i--)
{
sum = 0;
for (int k = i + 1; k < n; k++)
sum += lu[i, k] * x[k];
x[i] = (1 / lu[i, i]) * (y[i] - sum);
}
return x;
}
}
Пример кода MATLAB
[ редактировать ]function LU = LUDecompDoolittle(A)
n = length(A);
LU = A;
% decomposition of matrix, Doolittle's Method
for i = 1:1:n
for j = 1:(i - 1)
LU(i,j) = (LU(i,j) - LU(i,1:(j - 1))*LU(1:(j - 1),j)) / LU(j,j);
end
j = i:n;
LU(i,j) = LU(i,j) - LU(i,1:(i - 1))*LU(1:(i - 1),j);
end
%LU = L+U-I
end
function x = SolveLinearSystem(LU, B)
n = length(LU);
y = zeros(size(B));
% find solution of Ly = B
for i = 1:n
y(i,:) = B(i,:) - LU(i,1:i)*y(1:i,:);
end
% find solution of Ux = y
x = zeros(size(B));
for i = n:(-1):1
x(i,:) = (y(i,:) - LU(i,(i + 1):n)*x((i + 1):n,:))/LU(i, i);
end
end
A = [ 4 3 3; 6 3 3; 3 4 3 ]
LU = LUDecompDoolittle(A)
B = [ 1 2 3; 4 5 6; 7 8 9; 10 11 12 ]'
x = SolveLinearSystem(LU, B)
A * x
См. также
[ редактировать ]- Блочное разложение LU
- Разложение Брюа
- Разложение Холецкого
- Разложение матрицы Краута
- Неполная LU-факторизация
- Сокращение ЛУ
- Разложение матрицы
- QR-разложение
Примечания
[ редактировать ]- ^ Шварценберг-Черни, А. (1995). «О матричной факторизации и эффективном решении методом наименьших квадратов». Серия дополнений по астрономии и астрофизике . 110 : 405. Бибкод : 1995A&AS..110..405S .
- ^ Дуайер, Пол С. (1951). Линейные вычисления . Нью-Йорк: Уайли.
- ^ Jump up to: а б Окунев и Джонсон (1997) , Следствие 3.
- ^ Трефетен и Бау (1997) , с. 166.
- ^ Трефетен и Бау (1997) , с. 161.
- ^ Лэй, Дэвид С. (2016). Линейная алгебра и ее приложения . Стивен Р. Лэй, Джудит Макдональд (Пятое изд.). Харлоу. п. 142. ИСБН 978-1-292-09223-2 . OCLC 920463015 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Риготти (2001) , ведущий второстепенный исполнитель
- ^ Jump up to: а б Хорн и Джонсон (1985) , следствие 3.5.5
- ^ Хорн и Джонсон (1985) , Теорема 3.5.2.
- ^ Нхиайи, Ли; Фан-Ямада, Туетдонг (2021). «Изучение возможного разложения LU». Североамериканский журнал GeoGebra . 9 (1).
- ^ Окунев и Джонсон (1997)
- ^ Домохозяин (1975)
- ^ Голуб и Ван Лоан (1996) , с. 112, 119.
- ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стоун, Клиффорд (2001). Введение в алгоритмы . MIT Press и McGraw-Hill. ISBN 978-0-262-03293-3 .
- ^ Шаббат, Гил; Шмуэли, Янив; Эйзенбуд, Ярив; Авербух, Амир (2016). «Рандомизированное LU-разложение». Прикладной и вычислительный гармонический анализ . 44 (2): 246–272. arXiv : 1310.7202 . дои : 10.1016/j.acha.2016.04.006 . S2CID 1900701 .
- ^ Банч и Хопкрофт (1974)
- ^ Трефетен и Бау (1997) , с. 152.
- ^ Голуб и Ван Лоан (1996) , с. 121
Ссылки
[ редактировать ]- Банч, Джеймс Р.; Хопкрофт, Джон (1974), «Треугольная факторизация и инверсия путем быстрого умножения матриц», Mathematics of Computation , 28 (125): 231–236, doi : 10.2307/2005828 , hdl : 1813/6003 , ISSN 0025-5718 , JSTOR 2005828 .
- Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Штейн, Клиффорд (2001), Введение в алгоритмы , MIT Press и McGraw-Hill, ISBN 978-0-262-03293-3 .
- Голуб, Джин Х .; Ван Лоан, Чарльз Ф. (1996), Матричные вычисления (3-е изд.), Балтимор: Джонс Хопкинс, ISBN 978-0-8018-5414-9 .
- Хорн, Роджер А.; Джонсон, Чарльз Р. (1985), Матричный анализ , Издательство Кембриджского университета, ISBN 978-0-521-38632-6 . См. раздел 3.5. Н - 1
- Хаусхолдер, Алстон С. (1975), Теория матриц в численном анализе , Нью-Йорк: Dover Publications , MR 0378371 .
- Окунев Павел; Джонсон, Чарльз Р. (1997), Необходимые и достаточные условия существования LU-факторизации произвольной матрицы , arXiv : math.NA/0506382 .
- Пул, Дэвид (2006), Линейная алгебра: современное введение (2-е изд.), Канада: Томсон Брукс/Коул, ISBN 978-0-534-99845-5 .
- Пресс, WH; Теукольский, С.А.; Феттерлинг, WT; Фланнери, BP (2007), «Раздел 2.3» , Численные рецепты: искусство научных вычислений (3-е изд.), Нью-Йорк: Cambridge University Press, ISBN 978-0-521-88068-8 .
- Трефетен, Ллойд Н .; Бау, Дэвид (1997), Численная линейная алгебра , Филадельфия: Общество промышленной и прикладной математики, ISBN 978-0-89871-361-9 .
- Риготти, Лука (2001), ECON 2001 - Введение в математические методы, лекция 8
Внешние ссылки
[ редактировать ]Ссылки
- LU-разложение на MathWorld .
- LU-разложение на Math-Linux .
- Разложение LU в Институте целостных численных методов
- Факторизация LU-матрицы . Справочник MATLAB.
Компьютерный код
- LAPACK — это набор подпрограмм FORTRAN для решения задач плотной линейной алгебры.
- ALGLIB включает частичный порт LAPACK на C++, C#, Delphi и т. д.
- Код C++ , профессор Дж. Лумис, Дейтонский университет
- Код C , Библиотека исходного кода по математике
- Код ржавчины
- ЛУ в X10
Интернет-ресурсы