qr

Описание

пример

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

пример

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

пример

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

пример

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

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

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

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

пример

[Q,R,P] = qr(A,outputForm) задает, возвратить ли информацию о сочетании P как матрица или вектор. Например, если outputForm isvector, затем A(:,P) = Q*R. Значение по умолчанию outputForm ismatrix таким образом, что 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. Можно использовать CR, и P вычислить решение методом наименьших квадратов к разреженной линейной системе S*X = B с X = P*(R\C).

пример

[___] = qr(S,B,0) производит разложение размера экономики с помощью любой из предыдущих комбинаций выходного аргумента. Размер выходных параметров зависит от размера m- 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 isvector, затем решение методом наименьших квадратов к S*X = B X(P,:) = R\C. Значение по умолчанию outputForm ismatrix таким образом, что решение методом наименьших квадратов к 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 в разложении Q-less QR к 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

VerifyThat 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)

spy(R)

Результаты показывают, что переставленное разложение производит 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')

Решите разреженную линейную систему и используйте результаты, чтобы видеть, как большая часть векторного 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);

VerifyThat 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 isvector, затем P вектор сочетания, который удовлетворяет A(:,P) = Q*R.

  • Значение по умолчанию outputForm ismatrix таким образом, что 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- n матричный A.

  • Для полных разложений, qr(A) возвращает Q как m- 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 isvector, затем решение методом наименьших квадратов к S*X = B X(P,:) = R\C.

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

Советы

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

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

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

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