qr

Описание

пример

X = qr(A) возвращает верхнюю треугольную R коэффициент QR-разложения A = Q*R. Если A полно, тогда R = triu(X). Если A является разреженным, тогда R = X.

пример

[Q,R] = qr(A) выполняет QR-разложение на m-by- n матрица A таким образом A = Q*R. Коэффициент R является m-by- n верхняя треугольная матрица и коэффициент Q является m-by- m ортогональная матрица.

пример

[Q,R,P] = qr(A) дополнительно возвращает матрицу сочетаний P таким образом A*P = Q*R.

пример

[___] = qr(A,0) создает разложение экономического размера, используя любую из предыдущих комбинаций выходных аргументов. Размер выходов зависит от размера m-by- n матрица A:

  • Если m > n, затем qr вычисляет только первое n столбцы Q и первый n строки R.

  • Если m <= nтогда разложение экономического размера аналогично регулярному разложению.

  • Если вы задаете третий выход с разложением экономического размера, то он возвращается как вектор сочетания, такой что A(:,P) = Q*R.

пример

[Q,R,P] = qr(A,outputForm) определяет, возвращать ли информацию о сочетании P как матрица или вектор. Для примера, если outputForm является 'vector', затем A(:,P) = Q*R. Значение по умолчанию outputForm является 'matrix' таким образом A*P = Q*R.

пример

[C,R] = qr(S,B) вычисляет C = Q'*B и верхний треугольный коэффициент R. Можно использовать C и R для вычисления решения методом наименьших квадратов разреженной линейной системы S*X = B с X = R\C.

пример

[C,R,P] = qr(S,B) дополнительно возвращает матрицу сочетаний P. Можно использовать C, R, и P для вычисления решения методом наименьших квадратов разреженной линейной системы S*X = B с X = P*(R\C).

пример

[___] = qr(S,B,0) создает разложение экономического размера, используя любую из предыдущих комбинаций выходных аргументов. Размер выходов зависит от размера m-by- n разреженная матрица S:

  • Если m > n, затем qr вычисляет только первое n строки C и R.

  • Если m <= nтогда разложение экономического размера аналогично регулярному разложению.

  • Если вы задаете третий выход с разложением экономического размера, то он возвращается как вектор сочетания таким образом, чтобы решение методом наименьших квадратов S*X = B является X(P,:) = R\C.

пример

[C,R,P] = qr(S,B,outputForm) определяет, возвращать ли информацию о сочетании P как матрица или вектор. Для примера, если outputForm является 'vector', затем решение методом наименьших квадратов для S*X = B является X(P,:) = R\C. Значение по умолчанию outputForm является 'matrix' таким образом, решение методом наименьших квадратов для S*X = B является X = P*(R\C).

Примеры

свернуть все

Найдите QR-разложение матрицы Паскаля 5 на 5. Задайте один выходной аргумент, чтобы вернуть только верхний треугольный коэффициент.

A = pascal(5);
X = qr(A)
X = 5×5

   -2.2361   -6.7082  -15.6525  -31.3050  -56.3489
    0.3090    3.1623   11.0680   26.5631   53.1263
    0.3090   -0.1744    1.8708    7.4833   19.2428
    0.3090   -0.4565    0.3548    0.6325    2.8460
    0.3090   -0.7387   -0.0281   -0.7490   -0.1195

Извлеките верхний треугольный коэффициент R от X.

R = triu(X)
R = 5×5

   -2.2361   -6.7082  -15.6525  -31.3050  -56.3489
         0    3.1623   11.0680   26.5631   53.1263
         0         0    1.8708    7.4833   19.2428
         0         0         0    0.6325    2.8460
         0         0         0         0   -0.1195

Сравните R в QR-декомпозиции без Q- R фактор в полном QR-разложении.

[Q1,R1] = qr(A)
Q1 = 5×5

   -0.4472   -0.6325    0.5345   -0.3162   -0.1195
   -0.4472   -0.3162   -0.2673    0.6325    0.4781
   -0.4472    0.0000   -0.5345    0.0000   -0.7171
   -0.4472    0.3162   -0.2673   -0.6325    0.4781
   -0.4472    0.6325    0.5345    0.3162   -0.1195

R1 = 5×5

   -2.2361   -6.7082  -15.6525  -31.3050  -56.3489
         0    3.1623   11.0680   26.5631   53.1263
         0         0    1.8708    7.4833   19.2428
         0         0         0    0.6325    2.8460
         0         0         0         0   -0.1195

Вычислите полное QR-разложение магической квадратной тестовой матрицы путем определения двух выходных аргументов.

A = magic(5);
[Q,R] = qr(A)
Q = 5×5

   -0.5234    0.5058    0.6735   -0.1215   -0.0441
   -0.7081   -0.6966   -0.0177    0.0815   -0.0800
   -0.1231    0.1367   -0.3558   -0.6307   -0.6646
   -0.3079    0.1911   -0.4122   -0.4247    0.7200
   -0.3387    0.4514   -0.4996    0.6328   -0.1774

R = 5×5

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

Проверьте, что A=QR, в пределах точности машины.

norm(A-Q*R)
ans = 1.2569e-14

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

Вычислите QR-разложение west0479 разреженная матрица. Задайте три выхода, чтобы вернуть матрицу сочетания, которая удовлетворяет AP=QR.

load west0479
A = west0479;
[Q,R,P] = qr(A);

Проверьте, что A*P = Q*R для матрицы сочетаний P, в пределах точности машины.

norm(A*P-Q*R,'fro')
ans = 3.3386e-10

Теперь задайте 'vector' опция возврата p как вектор сочетания.

[Q,R,p] = qr(A,'vector');

Проверьте, что A(:,p) = Q*R для вектора сочетания p, в пределах точности машины.

norm(A(:,p) - Q*R,'fro')
ans = 3.3386e-10

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

[Q1,R1] = qr(A);
spy(R1)

Figure contains an axes. The axes contains an object of type line.

spy(R)

Figure contains an axes. The axes contains an object of type line.

Результаты показывают, что перестановленное разложение создает R коэффициент с существенно меньшим количеством ненулей.

Используйте QR-разложение экономического размера матрицы коэффициентов, чтобы решить линейную систему Ax=b.

Создайте матрицу коэффициентов 10 на 5 с помощью первых пяти столбцов magic(10). Для правой стороны линейного уравнения Ax=b, используйте суммы строк матрицы. С помощью этой настройки, решение уравнения x должен быть вектором таковых.

A = magic(10);
A = A(:,1:5)
A = 10×5

    92    99     1     8    15
    98    80     7    14    16
     4    81    88    20    22
    85    87    19    21     3
    86    93    25     2     9
    17    24    76    83    90
    23     5    82    89    91
    79     6    13    95    97
    10    12    94    96    78
    11    18   100    77    84

b = sum(A,2)
b = 10×1

   215
   215
   215
   215
   215
   290
   290
   290
   290
   290

Вычислите QR-разложение A. Затем решите линейную систему QRx=b с x(p,:) = R\(Q\b). Потому что Q ортогонально, это уравнение то же, что и x(p,:) = R\(Q'*b).

[Q,R,p] = qr(A,0)
Q = 10×5

   -0.0050   -0.4775   -0.0504    0.5193    0.0399
   -0.0349   -0.5001   -0.0990   -0.1954   -0.2006
   -0.4384    0.1059   -0.4660    0.4464    0.0628
   -0.0947   -0.4151   -0.2923   -0.2542    0.5274
   -0.1246   -0.4117   -0.2812   -0.1326   -0.4130
   -0.3787    0.0209    0.2702    0.4697    0.0390
   -0.4085   -0.0017    0.2217   -0.2450   -0.2015
   -0.0648   -0.3925    0.6939    0.0669    0.1225
   -0.4683    0.0833    0.0283   -0.3038    0.5265
   -0.4982    0.0867    0.0394   -0.1822   -0.4138

R = 5×5

 -200.7112  -55.5026 -167.6040  -84.7237 -168.7997
         0 -192.1053  -40.3557 -152.4040  -39.2814
         0         0  101.3180  -89.4254   96.0172
         0         0         0   41.0248  -14.9083
         0         0         0         0   24.6386

p = 1×5

     3     1     5     2     4

x(p,:) = R\(Q\b)
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

Составьте полулогарифмический график диагонали R чтобы подтвердить, что перестановочное разложение создает коэффициент R со abs(diag(R)) уменьшение. Постройте график сингулярных значений A на том же графике для сравнения. На практике диагональные значения R вести себя подобно сингулярным значениям A. Поэтому можно использовать диагональные значения R как мера для того, насколько близка к сингулярной матрица A является.

semilogy(abs(diag(R)),'-o')
hold on
semilogy(svd(A),'r-o')
legend('Diagonal of R','Singular Values of A')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Diagonal of R, Singular Values of A.

Решите разреженную линейную систему и используйте результаты, чтобы увидеть, сколько из вектора b лежит в пространстве столбцов S.

Создайте случайную разреженную матрицу 500 на 20 с плотностью 10% и вектором из них. Использование qr для факторизации матрицы в множители R и C = Q'*b.

S = sprand(500,20,0.1);
b = ones(500,1);
[C,R] = qr(S,b,0);

Используйте результаты, чтобы решить Sx=b с x = R\C.

x = R\C;

Рассмотрим тождестваb2=Sx-b2+C2.

Разделение по норме b, вы получаете новые тождества, которая показывает, сколько из b лежит в пространстве столбцов S:

Sx-b2b2+C2b2=1.

Первый термин показывает, сколько из b не лежит в пространстве столбцов S, в то время как второй термин говорит, сколько из b лежит в пространстве столбцов S.

t1 = norm(S*x-b)^2/norm(b)^2
t1 = 0.4000
t2 = norm(C)^2/norm(b)^2
t2 = 0.6000

Использование qr для решения матричного уравнения Sx=B с прямоугольной разреженной матрицы коэффициентов S.

Загрузите west0479 разреженная матрица и используйте первые 200 столбцов в качестве прямоугольной матрицы коэффициентов в линейной системе. Для правой стороны уравнения используйте суммы строк S. С помощью этой настройки, решение для Sx=B является вектором таковых.

load west0479
S = west0479(:,1:200);
B = sum(S,2);

Решить Sx=B использование qr с двумя входами и тремя выходами. Решение линейной системы x = P*(R\C).

[C,R,P] = qr(S,B);
x = P*(R\C);

Проверьте, что Sx-B=0, в пределах точности машины.

norm(S*x-B)
ans = 8.4349e-11

Примечание. Чтобы вычислить верхний треугольный коэффициент R и матрица сочетаний P, но избегайте вычисления ортогональной матрицы Q (который часто является наиболее в вычислительном отношении дорогостоящей частью вызова qr), можно задать B как пустая матрица:

emptyB = zeros(size(S,1),0);
[~,R,P] = qr(S,emptyB);

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

свернуть все

Входная матрица, заданная как полная или разреженная матрица.

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

Вход матрицы коэффициентов, заданная как разреженная матрица. С двумя входными матрицами, qr вычисляет решение линейной системы методом наименьших квадратов S*X = B.

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

Правая матрица, заданная как полная или разреженная матрица. С двумя входными матрицами, qr вычисляет C = Q'*B, который можно использовать, чтобы решить линейную систему S*X = B.

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

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

  • Если outputForm является 'vector', затем P - вектор сочетания, который удовлетворяет A(:,P) = Q*R.

  • Значение по умолчанию outputForm является 'matrix' таким образом A*P = Q*R.

Пример: [Q,R,P] = qr(A,'vector')

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

свернуть все

Выходная матрица. Содержимое X зависят от того, A полно или разреженно:

  • Если A полно, тогда верхний треугольный множитель QR-разложения R = triu(X). (Нижнетреугольные элементы являются частью данных, используемых для вычисления Q.)

  • Если A разрежен, тогда фактор R = X.

Ортогональный коэффициент, возвращенный как матрица, которая удовлетворяет A = Q*R для m-by- n матрица A.

  • Для полного разложения, qr(A) возвращает Q как m-by- m ортогональная матрица, удовлетворяющая QHQ=QQH=Im.

  • Для прямоугольных A с m > n, экономичное разложение qr(A,0) вычисляет только первое n столбцы Q и первый n строки R. Столбцы Q сформировать ортонормированный базис для пространства столбцов A.

Различные машины и релизы MATLAB® может производить различные столбцы в Q которые все еще являются численно точными. Соответствующие строки и столбцы в Q и R могут переворачивать свои знаки, так как это не влияет на значение выражения A = Q*R.

Верхне-треугольный множитель, возвращенный как матрица, которая удовлетворяет A = Q*R.

Информация о сочетании, возвращенная в виде матрицы или вектора. Форма P зависит от значения outputForm. Также, qr выбирает P чтобы удовлетворить различным критериям в зависимости от того, является ли первая входная матрица полной или разреженной:

  • Полный - qr выбирает P так что abs(diag(R)) уменьшается.

  • Разреженные - qr выбирает P для уменьшения заполнения R.

Линейный системный коэффициент, возвращенный как матрица, которая удовлетворяет C = Q'*B. Решение методом наименьших квадратов для S*X = B является X = R\C. Если выход сочетания P задан, тогда решение либо X = P*(R\C) или X(P,:) = R\C, в зависимости от значения outputForm:

  • Если outputForm является 'vector', затем решение методом наименьших квадратов для S*X = B является X(P,:) = R\C.

  • Значение по умолчанию outputForm является 'matrix' таким образом, решение методом наименьших квадратов для S*X = B является X = P*(R\C).

Совет

  • Чтобы решить несколько линейных систем с одной и той же матрицей коэффициентов, используйте decomposition объекты.

  • Для получения синтаксиса [C,R] = qr(S,B), значение X = R\C является решением методом наименьших квадратов для S*X = B только когда S не имеет низкого ранга.

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

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