lu

LU-разложение матрицы

Описание

пример

[L,U] = lu(A) факторизация полной или разреженной матрицы A в верхнюю треугольную матрицу U и перестановочную нижнюю треугольную матрицу L таким образом A = L*U.

пример

[L,U,P] = lu(A) также возвращает матрицу сочетаний P таким образом A = P'*L*U. С помощью этого синтаксиса L является единичным нижним треугольным и U является верхним треугольным.

пример

[L,U,P] = lu(A,outputForm) возвращает P в форме, заданной outputForm. Задайте outputForm как 'vector' для возврата P как вектор сочетания, такой что A(P,:) = L*U.

пример

[L,U,P,Q] = lu(S) факторизирует разреженную матрицу S в модуль нижнюю треугольную матрицу L, верхняя треугольная матрица U, матрица сочетания строк Pи матрицу сочетания столбца Q, таким образом P*S*Q = L*U.

[L,U,P,Q,D] = lu(S) также возвращает диагональную матрицу масштабирования D таким образом P*(D\S)*Q = L*U. Как правило, масштабирование строк приводит к более разреженной и стабильной факторизации.

[___] = lu(S,thresh) задает пороги для стратегии поворота, используемой в lu использование любой из предыдущих комбинаций выходных аргументов. В зависимости от количества заданных выходных аргументов, значения по умолчанию и требований к thresh входы различаются. Смотрите thresh описание аргумента для получения дополнительной информации.

пример

[___] = lu(___,outputForm) возвращает P и Q в форме, заданной outputForm. Задайте outputForm как 'vector' для возврата P и Q как векторы сочетаний. Можно использовать любой из комбинаций входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Вычислите LU-факторизацию матрицы и исследуйте получившиеся множители. LU-факторизация является способом разложения матрицы A в верхнюю треугольную матрицу U, нижняя треугольная матрица L, и матрицу сочетаний P таким, что PA=LU. Эти матрицы описывают шаги, необходимые для выполнения Гауссова исключения на матрице, пока она не будет в приведенный ступенчатый по строкам вид матрицы. L матрица содержит все умножители и матрицу сочетания P счетов для смены строк.

Создайте матрицу 3 на 3 и вычислите коэффициенты LU.

A = [10 -7 0
     -3  2 6
      5 -1 5];
[L,U] = lu(A)
L = 3×3

    1.0000         0         0
   -0.3000   -0.0400    1.0000
    0.5000    1.0000         0

U = 3×3

   10.0000   -7.0000         0
         0    2.5000    5.0000
         0         0    6.2000

Умножьте коэффициенты для воссоздания A. С синтаксисом двух входных параметров, lu включает матрицу сочетаний P непосредственно в L коэффициент, такой что L возвращаться действительно P'*L и, таким образом A = L*U.

L*U
ans = 3×3

   10.0000   -7.0000         0
   -3.0000    2.0000    6.0000
    5.0000   -1.0000    5.0000

Можно задать три выхода, чтобы отделить матрицу сочетания от умножителей в L.

[L,U,P] = lu(A)
L = 3×3

    1.0000         0         0
    0.5000    1.0000         0
   -0.3000   -0.0400    1.0000

U = 3×3

   10.0000   -7.0000         0
         0    2.5000    5.0000
         0         0    6.2000

P = 3×3

     1     0     0
     0     0     1
     0     1     0

P'*L*U
ans = 3×3

   10.0000   -7.0000         0
   -3.0000    2.0000    6.0000
    5.0000   -1.0000    5.0000

Решите линейную систему, выполнив LU-факторизацию и используя факторы для упрощения задачи. Сравните результаты с другими подходами, используя оператор обратной косой черты и decomposition объект.

Создайте магическую квадратную матрицу 5 на 5 и решите линейную систему Ax=b со всеми элементами b равная 65, магическая сумма. Поскольку 65 является магической суммой для этой матрицы (все строки и столбцы добавляют к 65), ожидаемое решение для x является вектором на 1с.

A = magic(5);
b = 65*ones(5,1);
x = A\b
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

Для типовых квадратных матриц оператор обратной косой черты вычисляет решение линейной системы с помощью LU-разложения. LU-разложение выражает A как продукт треугольных матриц, и линейные системы, включающие треугольные матрицы, легко решаются с помощью формул замещения.

Чтобы воссоздать ответ, вычисленный обратной косой чертой, вычислите LU-разложение A. Затем используйте факторы, чтобы решить две треугольные линейные системы:

y = L\(P*b);
x = U\y;

Этот подход предварительного вычисления матричных факторов до решения линейной системы может улучшить эффективность, когда многие линейные системы будут решены, поскольку факторизация происходит только один раз и не требует повторения.

[L,U,P] = lu(A)
L = 5×5

    1.0000         0         0         0         0
    0.7391    1.0000         0         0         0
    0.4783    0.7687    1.0000         0         0
    0.1739    0.2527    0.5164    1.0000         0
    0.4348    0.4839    0.7231    0.9231    1.0000

U = 5×5

   23.0000    5.0000    7.0000   14.0000   16.0000
         0   20.3043   -4.1739   -2.3478    3.1739
         0         0   24.8608   -2.8908   -1.0921
         0         0         0   19.6512   18.9793
         0         0         0         0  -22.2222

P = 5×5

     0     1     0     0     0
     1     0     0     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     0     0     1     0

y = L\(P*b);
x = U\y
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

The decomposition объект также полезен для решения линейных систем с помощью специализированных факторизаций, поскольку вы получаете многие преимущества эффективности от предварительного вычисления матричных факторов, но вам не нужно знать, как использовать факторы. Используйте объект разложения с 'lu' введите для повторного создания тех же результатов.

dA = decomposition(A,'lu');
x = dA\b
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

Вычислите LU-факторизацию разреженной матрицы и проверьте тождества L*U = P*S*Q.

Создайте разреженную матрицу смежности 60 на 60 график связности геодезического купола Бакминстера-Фуллера.

S = bucky;

Вычислите LU-факторизацию S использование синтаксиса разреженной матрицы с четырьмя выходами для возврата матриц сочетания строк и столбцов.

[L,U,P,Q] = lu(S);

Транспозиция строк и столбцов S с P*S*Q и сравните результат с умножением треугольных множителей L*U. 1-норма их различия находится в пределах округления ошибки, что указывает на то, что L*U = P*S*Q.

e = P*S*Q - L*U;
norm(e,1)
ans = 2.4425e-15

Вычислите LU-факторизацию матрицы. Сохраните память, вернув сочетания строк в виде вектора вместо матрицы.

Создайте случайную матрицу 1000 на 1000.

A = rand(1000);

Вычислите LU-факторизацию с информацией о сочетаниях, хранящейся в матрице P. Сравните результат с информацией о сочетаниях, хранящейся в виде вектора p. Чем больше матрица, тем больше памяти эффективно использовать вектор сочетания.

[L1,U1,P] = lu(A);
[L2,U2,p] = lu(A,'vector');
whos P p
  Name         Size                Bytes  Class     Attributes

  P         1000x1000            8000000  double              
  p            1x1000               8000  double              

Использование вектора сочетания также экономит время выполнения в последующих операциях. Например, можно использовать предыдущие LU-факторизации, чтобы решить линейную систему Ax=b. Хотя решения, полученные из вектора сочетания и матрицы сочетания, эквивалентны (вплоть до округления), решение, использующее вектор сочетания, обычно требует немного меньше времени.

Сравните результаты вычисления LU-факторизации разреженной матрицы с перестановками столбцов и без них.

Загрузите west0479 матрица, которая является действительной 479 на 479 разреженной матрицей.

load west0479
A = west0479;

Вычислите LU-факторизацию A по вызову lu с тремя выходами. Сгенерируйте шпионские графики факторов L и U.

[L,U,P] = lu(A);
subplot(1,2,1)
spy(L)
title('L factor')
subplot(1,2,2)
spy(U)
title('U factor')

Figure contains 2 axes. Axes 1 with title L factor contains an object of type line. Axes 2 with title U factor contains an object of type line.

Теперь вычислите LU-факторизацию A использование lu с четырьмя выходами, который переключает столбцы A уменьшить количество ненулей в факторах. Результирующие факторы намного разреженнее, чем если бы не использовались сочетания столбцов.

[L,U,P,Q] = lu(A);
subplot(1,2,1)
spy(L)
title('L factor')
subplot(1,2,2)
spy(U)
title('U factor')

Figure contains 2 axes. Axes 1 with title L factor contains an object of type line. Axes 2 with title U factor contains an object of type line.

Входные параметры

свернуть все

Входная матрица. A может быть полным или разреженным, а также квадратным или прямоугольным в размере.

Типы данных: single | double
Поддержка комплексного числа: Да

Разреженная входная матрица. S может быть квадратным или прямоугольным в размере.

Типы данных: double
Поддержка комплексного числа: Да

Поворотные пороги для разреженных матриц, заданные как скалярный или двухэлементный вектор. Допустимые значения указаны в интервале [0 1]. Способ задания thresh зависит от того, сколько выходов задано в вызове lu:

  • Для трех выходов или менее, thresh должен быть скаляром, а значение по умолчанию 1.0.

  • Для четырех выходов или более, thresh может быть скаляром или вектором с двумя элементами. Значение по умолчанию [0.1 0.001]. Если вы задаете thresh в качестве скаляра, тогда это только заменяет первое значение в векторе.

На высоком уровне этот вход позволяет вам заключать компромиссы между точностью и общим временем выполнения. Меньшие значения thresh имеют тенденцию приводить к более рассеянным факторам LU, но решение может стать неточным. Большие значения могут привести к более точному решению (но не всегда), и обычно увеличение общего использования работы и памяти.

lu выбирает стратегию поворота, основанную сначала на количестве выходных аргументов, а затем на свойствах факторизируемой матрицы. Во всех случаях, устанавливая пороговое значение (значения) в 1.0 приводит к частичному повороту, при этом устанавливая их на 0 вызывает выбор поворотов только на основе разреженности получившейся матрицы. Все значения L иметь абсолютное значение 1/min(thresh) или меньше.

  • Три или меньше выходных аргументов - Алгоритм выбирает диагональный центр, если он удовлетворяет уравнению

    A(j,j) >= thresh * max(abs(A(j:m,j)))
    В противном случае выбирается строка, содержащая элемент с наибольшим абсолютным значением.

  • Симметричная стратегия поворота - если S - квадратная разреженная матрица с большей частью симметричной структурой и в основном ненулевой диагональю, затем lu использует симметричную стратегию поворота. Для этой стратегии алгоритм выбирает диагональный центр j если он удовлетворяет неравенству:

    A(i,j) >= thresh(2) * max(abs(A(j:m,j)))
    Если диагональный элемент не проходит этот тест, то lu выбирает самую разреженную строку i удовлетворение неравенства:
    A(i,j) >= thresh(1) * max(abs(A(j:m,j)))

  • Несимметричная стратегия поворота - Если S не удовлетворяет требованиям симметричной стратегии поворота, тогда lu использует несимметричную стратегию. В этом случае lu выбирает самую разреженную строку i удовлетворение неравенства:

    A(i,j) >= thresh(1) * max(abs(A(j:m,j)))
    Значение 1.0 для thresh(1) приводит к обычному частичному повороту. Записи в L иметь абсолютное значение 1/thresh(1) или меньше. Второй элемент thresh входной вектор не используется с несимметричной стратегией.

Примечание

В некоторых редких случаях неправильная факторизация приводит к P*S*QL*U. Если это происходит, увеличивайте thresh максимум до 1.0 (регулярное частичное вращение) и повторите попытку.

Форма выходов сочетания, заданная как 'matrix' или 'vector'. Этот флаг управляет ли lu возвращает сочетания строк P и сочетания столбцов Q как матрицы сочетаний или векторы сочетаний.

Как матрицы, выходы P и Q удовлетворить эти тождества:

  • Три выхода - P удовлетворяет P*A = L*U.

  • Четыре выхода - P и Q удовлетворить P*S*Q = L*U.

  • Пять выходов - P, Q, и D удовлетворить P*(D\S)*Q = L*U.

Как векторы, выходы P и Q удовлетворить эти тождества:

  • Три выхода - P удовлетворяет A(P,:) = L*U

  • Четыре выхода - P и Q удовлетворить S(P,Q) = L*U

  • Пять выходов - P, Q, и D удовлетворить D(:,P)\S(:,Q) = L*U.

Пример: [L,U,P] = lu(A,'vector')

Выходные аргументы

свернуть все

Нижний треугольный множитель, возвращенный как матрица. Форма L зависит от того, сочетания ли строка P возвращаются отдельным выходом:

  • Если третий выход P задается, затем L возвращается как модуль нижняя треугольная матрица (то есть нижняя треугольная матрица с 1с на основной диагонали).

  • Если третий выход P не задан, тогда L возвращается как строка-перестановка модуля нижней треугольной матрицы. В частности, это продукт P'*L выходов P и L возвращается в трех выходных случаях.

Верхний треугольный множитель, возвращенный как верхняя треугольная матрица.

Сочетание строка, возвращенная как матрица сочетания или, если 'vector' задан параметр в качестве вектора сочетания. Используйте этот выход для улучшения числовой устойчивости вычисления.

См. outputForm для описания тождеств, которые удовлетворяет этот выход.

Сочетание столбца, возвращенная как матрица сочетания или, если 'vector' задан параметр в качестве вектора сочетания. Используйте этот выход для уменьшения заполнения (количества ненулевых) в факторах разреженной матрицы.

См. outputForm для описания тождеств, которые удовлетворяет этот выход.

Масштабирование строк, возвращаемое как диагональная матрица. D используется для масштабирования значений в S таким образом P*(D\S)*Q = L*U. Обычно, но не всегда, масштабирование строк приводит к более разреженной и стабильной факторизации.

Алгоритмы

LU-факторизация вычисляется с помощью варианта Гауссова исключения. Вычисление точного решения зависит от значения числа обусловленности исходной матрицы cond(A). Если матрица имеет большое число обусловленности (она почти сингулярна), вычисленная факторизация может быть неточной.

Эта LU-факторизация является ключевым шагом в получении обратной функции с inv и определяющий с det. Это также базис для решения линейного уравнения или матричного деления, полученного операторами \ и /. Это обязательно означает, что числовые ограничения lu также присутствуют в этих зависимых функциях.

Расширенные возможности

..

См. также

| | | | | | |

Представлено до R2006a