exponenta event banner

qr

Описание

пример

R = qr(A) возвращает R-часть QR-разложения A = Q*R. Здесь, A - матрица m-на-n, R является m-на-n верхней треугольной матрицей, и Q является m-по-m унитарной матрицей.

пример

[Q,R] = qr(A) возвращает верхнюю треугольную матрицу R и унитарная матрица Q, такой, что A = Q*R.

пример

[Q,R,P] = qr(A) возвращает верхнюю треугольную матрицу R, унитарная матрица Qи матрица перестановок P, такой, что A*P = Q*R. Если все элементы A может аппроксимироваться числами с плавающей запятой, тогда этот синтаксис выбирает перестановку столбца P чтобы abs(diag(R)) уменьшается. В противном случае возвращается P = eye(n).

пример

[C,R] = qr(A,B) возвращает верхнюю треугольную матрицу R и матрица C, такой, что C = Q'*B и A = Q*R. Здесь, A и B должно иметь одинаковое количество строк.

C и R представляют решение матричного уравнения A*X = B как X = R\C.

пример

[C,R,P] = qr(A,B) возвращает верхнюю треугольную матрицу R, матрица C, такой, что C = Q'*Bи матрица перестановок P, такой, что A*P = Q*R. Если все элементы A может аппроксимироваться числами с плавающей запятой, тогда этот синтаксис выбирает матрицу перестановки P чтобы abs(diag(R)) уменьшается. В противном случае возвращается P = eye(n). Здесь, A и B должно иметь одинаковое количество строк.

C, R, и P представляют решение матричного уравнения A*X = B как X = P*(R\C).

пример

[Q,R,p] = qr(A,'vector') возвращает информацию о перестановке в виде вектора p, такой, что A(:,p) = Q*R.

пример

[C,R,p] = qr(A,B,'vector') возвращает информацию о перестановке в виде вектора p.

C, R, и p представляют решение матричного уравнения A*X = B как X(p,:) = R\C.

пример

___ = qr(___,'econ') возвращает разложение «economy size». Если A является mоколо-n матрица с m > n, то qr вычисляет только первый n столбцы Q и первый n строки R. Для m <= n, синтаксисы с 'econ' эквивалентны соответствующим синтаксисам без 'econ'.

При использовании 'econ', qr всегда возвращает информацию о перестановке в виде вектора p.

Вы можете использовать 0 вместо 'econ'. Например, [Q,R] = qr(A,0) эквивалентно [Q,R] = qr(A,'econ').

пример

___ = qr(___,'real') предполагает, что входные аргументы и промежуточные результаты являются реальными, и, следовательно, подавляет вызовы abs и conj. При использовании этого флага qr предполагает, что все символьные переменные представляют вещественные числа. При использовании этого флага убедитесь, что все числовые аргументы являются действительными числами.

Использовать 'real' во избежание комплексных сопряжений в результате.

Примеры

R часть факторизации QR

Вычислите часть R разложения QR 4около-4 Матрица теста собственных значений Уилкинсона.

Создать 4около-4 Матрица теста собственных значений Уилкинсона:

A = sym(wilkinson(4))
A =
[ 3/2,   1,   0,   0]
[   1, 1/2,   1,   0]
[   0,   1, 1/2,   1]
[   0,   0,   1, 3/2]

Используйте синтаксис с одним выходным аргументом, чтобы вернуть R-часть QR-разложения без возврата Q-части:

R = qr(A)
R =
[ 13^(1/2)/2,        (4*13^(1/2))/13,            (2*13^(1/2))/13,                              0]
[          0, (13^(1/2)*53^(1/2))/26, (10*13^(1/2)*53^(1/2))/689,       (2*13^(1/2)*53^(1/2))/53]
[          0,                      0,   (53^(1/2)*381^(1/2))/106, (172*53^(1/2)*381^(1/2))/20193]
[          0,                      0,                          0,             (35*381^(1/2))/762]

QR факторизация матрицы Паскаля

Вычислить QR-разложение 3около-3 Матрица Паскаля.

Создать 3около-3 Матрица Паскаля:

A = sym(pascal(3))
A =
[ 1, 1, 1]
[ 1, 2, 3]
[ 1, 3, 6]

Найти Q и R матрицы, представляющие QR-разложение A:

[Q,R] = qr(A)
Q =
[ 3^(1/2)/3, -2^(1/2)/2,  6^(1/2)/6]
[ 3^(1/2)/3,          0, -6^(1/2)/3]
[ 3^(1/2)/3,  2^(1/2)/2,  6^(1/2)/6]
 
R =
[ 3^(1/2), 2*3^(1/2), (10*3^(1/2))/3]
[       0,   2^(1/2),  (5*2^(1/2))/2]
[       0,         0,      6^(1/2)/6]

Убедитесь, что A = Q*R использование isAlways:

isAlways(A == Q*R)
ans =
  3×3 logical array
     1     1     1
     1     1     1
     1     1     1

Информация о перестановках

Использование перестановок помогает повысить числовую стабильность QR-факторизации для матриц с плавающей запятой. qr функция возвращает информацию о перестановке либо в виде матрицы, либо в виде вектора.

Установите число значащих десятичных цифр, используемых для арифметики с переменной точностью, равным 10. Приблизительное значение 3около-3 символьная матрица Гильберта по числам с плавающей запятой:

previoussetting = digits(10);
A = vpa(hilb(3))
A =
[          1.0,          0.5, 0.3333333333]
[          0.5, 0.3333333333,         0.25]
[ 0.3333333333,         0.25,          0.2]

Сначала вычислите QR-разложение A без перестановок:

[Q,R] = qr(A)
Q =
[ 0.8571428571, -0.5016049166,  0.1170411472]
[ 0.4285714286,  0.5684855721, -0.7022468832]
[ 0.2857142857,  0.6520863915,  0.7022468832]
 
R =
[ 1.166666667, 0.6428571429,           0.45]
[           0, 0.1017143303,   0.1053370325]
[           0,            0, 0.003901371573]

Вычислить разницу между A и Q*R. Вычисленный Q и R матрицы не полностью удовлетворяют равенству A*P = Q*R из-за ошибок округления.

A - Q*R
ans =
[ -1.387778781e-16, -3.989863995e-16, -2.064320936e-16]
[ -3.469446952e-18, -8.847089727e-17, -1.084202172e-16]
[ -2.602085214e-18, -6.591949209e-17, -6.678685383e-17]

Чтобы повысить числовую стабильность QR-разложения, используйте перестановки, указав синтаксис с тремя выходными аргументами. Для матриц, не содержащих символьных переменных, выражений или функций, этот синтаксис вызывает поворот, так что abs(diag(R)) в возвращенной матрице R уменьшается.

[Q,R,P] = qr(A)
Q =
[ 0.8571428571, -0.4969293466, -0.1355261854]
[ 0.4285714286,  0.5421047417,  0.7228063223]
[ 0.2857142857,  0.6776309272, -0.6776309272]
R =
[ 1.166666667,         0.45,   0.6428571429]
[           0, 0.1054092553,   0.1016446391]
[           0,            0, 0.003764616262]
P =
     1     0     0
     0     0     1
     0     1     0

Проверка равенства A*P = Q*R снова. Факторизация QR с перестановками приводит к меньшим ошибкам округления.

A*P - Q*R
ans =
[ -3.469446952e-18, -4.33680869e-18, -6.938893904e-18]
[                0, -8.67361738e-19, -1.734723476e-18]
[                0, -4.33680869e-19, -1.734723476e-18]

Теперь верните информацию о перестановке в виде вектора, используя 'vector' аргумент:

[Q,R,p] = qr(A,'vector')
Q =
[ 0.8571428571, -0.4969293466, -0.1355261854]
[ 0.4285714286,  0.5421047417,  0.7228063223]
[ 0.2857142857,  0.6776309272, -0.6776309272]
R =
[ 1.166666667,         0.45,   0.6428571429]
[           0, 0.1054092553,   0.1016446391]
[           0,            0, 0.003764616262]
p =
     1     3     2

Убедитесь, что A(:,p) = Q*R:

A(:,p) - Q*R
ans =
[ -3.469446952e-18, -4.33680869e-18, -6.938893904e-18]
[                0, -8.67361738e-19, -1.734723476e-18]
[                0, -4.33680869e-19, -1.734723476e-18]

Точные символьные вычисления позволяют избежать ошибок округления:

A = sym(hilb(3));
[Q,R] = qr(A);
A - Q*R
ans =
[ 0, 0, 0]
[ 0, 0, 0]
[ 0, 0, 0]

Восстановите количество значащих десятичных цифр до значения по умолчанию:

digits(previoussetting)

Использовать QR-декомпозицию для решения матричного уравнения

Вы можете использовать qr для решения систем уравнений в матричном виде.

Предположим, нужно решить систему уравнений A*X = b, где A и b являются следующей матрицей и вектором:

A = sym(invhilb(5))
b = sym([1:5]')
A =
[    25,   -300,    1050,   -1400,    630]
[  -300,   4800,  -18900,   26880, -12600]
[  1050, -18900,   79380, -117600,  56700]
[ -1400,  26880, -117600,  179200, -88200]
[   630, -12600,   56700,  -88200,  44100]
b =
 
 1
 2
 3
 4
 5

Использовать qr поиск матриц C и R, такой, что C = Q'*B и A = Q*R:

[C,R] = qr(A,b);

Вычислите решение X:

X = R\C
X =
        5
    71/20
   197/70
  657/280
 1271/630

Убедитесь, что X является решением системы A*X = b использование isAlways:

isAlways(A*X == b)
ans =
  5×1 logical array
     1
     1
     1
     1
     1

Использовать QR-декомпозицию с информацией перестановки для решения матричного уравнения

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

Предположим, нужно решить систему уравнений A*X = b, где A и b являются следующей матрицей и вектором:

previoussetting = digits(10);
A = vpa([2 -3 -1; 1 1 -1; 0 1 -1]);
b = vpa([2; 0; -1]);

Использовать qr поиск матриц C и R, такой, что C = Q'*B и A = Q*R:

[C,R,P] = qr(A,b)
C =
  -2.110579412
 -0.2132007164
  0.7071067812
R =
[ 3.31662479, 0.3015113446, -1.507556723]
[          0,  1.705605731, -1.492405014]
[          0,            0, 0.7071067812]
P =
     0     0     1
     1     0     0
     0     1     0

Вычислите решение X:

X = P*(R\C)
X =
   1.0
 -0.25
  0.75

Либо верните информацию о перестановке в виде вектора:

[C,R,p] = qr(A,b,'vector')
C =
  -2.110579412
 -0.2132007164
  0.7071067812
R =
[ 3.31662479, 0.3015113446, -1.507556723]
[          0,  1.705605731, -1.492405014]
[          0,            0, 0.7071067812]
p =
     2     3     1

В этом случае вычислите решение X следующим образом:

X(p,:) = R\C
X =
   1.0
 -0.25
  0.75

Восстановите количество значащих десятичных цифр до значения по умолчанию:

digits(previoussetting)

Декомпозиция «Экономный размер»

Использовать 'econ' для вычисления «размера экономии» QR-разложения.

Создайте матрицу, состоящую из первых двух столбцов 4около-4 Матрица Паскаля:

A = sym(pascal(4));
A = A(:,1:2)
A =
[ 1, 1]
[ 1, 2]
[ 1, 3]
[ 1, 4]

Вычислите разложение QR для этой матрицы:

[Q,R] = qr(A)
Q =
[ 1/2, -(3*5^(1/2))/10,    (3^(1/2)*10^(1/2))/10,          0]
[ 1/2,     -5^(1/2)/10, -(2*3^(1/2)*10^(1/2))/15,  6^(1/2)/6]
[ 1/2,      5^(1/2)/10,   -(3^(1/2)*10^(1/2))/30, -6^(1/2)/3]
[ 1/2,  (3*5^(1/2))/10,    (3^(1/2)*10^(1/2))/15,  6^(1/2)/6]
 
R =
[ 2,       5]
[ 0, 5^(1/2)]
[ 0,       0]
[ 0,       0]

Теперь вычислите «экономичный размер» QR-разложения для этой матрицы. Поскольку число строк превышает число столбцов, qr вычисляет только первый 2 столбцы Q и первый 2 строки R.

[Q,R] = qr(A,'econ')
Q =
[ 1/2, -(3*5^(1/2))/10]
[ 1/2,     -5^(1/2)/10]
[ 1/2,      5^(1/2)/10]
[ 1/2,  (3*5^(1/2))/10]
 
R =
[ 2,       5]
[ 0, 5^(1/2)]

Избегайте комплексных сопряжений

Используйте 'real' флаг, чтобы избежать комплексных сопряжений в результате.

Создайте матрицу, одним из элементов которой является переменная:

syms x
A = [1 2; 3 x]
A =
[ 1, 2]
[ 3, x]

Вычислите факторизацию QR этой матрицы. По умолчанию qr предполагает, что x представляет комплексное число, и поэтому результат содержит выражения с abs функция.

[Q,R] = qr(A)
Q =
[     10^(1/2)/10, -((3*x)/10 - 9/5)/(abs(x/10 - 3/5)^2...
                          + abs((3*x)/10 - 9/5)^2)^(1/2)]
[ (3*10^(1/2))/10,      (x/10 - 3/5)/(abs(x/10 - 3/5)^2...
                          + abs((3*x)/10 - 9/5)^2)^(1/2)]
 
R =
[ 10^(1/2),                           (10^(1/2)*(3*x + 2))/10]
[        0, (abs(x/10 - 3/5)^2 + abs((3*x)/10 - 9/5)^2)^(1/2)]

При использовании 'real', qr предполагает, что все символьные переменные представляют вещественные числа и могут возвращать более короткие результаты:

[Q,R] = qr(A,'real')
Q =
[     10^(1/2)/10, -((3*x)/10 - 9/5)/(x^2/10 - (6*x)/5...
                                          + 18/5)^(1/2)]
[ (3*10^(1/2))/10,      (x/10 - 3/5)/(x^2/10 - (6*x)/5...
                                          + 18/5)^(1/2)]
 
R =
[ 10^(1/2),         (10^(1/2)*(3*x + 2))/10]
[        0, (x^2/10 - (6*x)/5 + 18/5)^(1/2)]

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

свернуть все

Входная матрица, заданная как символьная матрица m-by-n.

Ввод, заданный как символьный вектор или матрица. Количество строк в B должно совпадать с количеством строк в A.

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

свернуть все

R-часть QR-разложения, возвращаемая в виде m-на-n верхней треугольной символьной матрицы.

Q часть QR разложения, возвращенная в виде m-на-m унитарной символьной матрицы.

Информация о перестановках, возвращаемая в виде матрицы значений двойной точности, таких, что A*P = Q*R.

Информация о перестановках, возвращаемая в виде вектора значений двойной точности, таких, что A(:,p) = Q*R.

Матрица, представляющая решение матричного уравнения A*X = B, возвращается в виде символической матрицы, такой, что C = Q'*B.

Подробнее

свернуть все

QR факторизация матрицы

Факторизация QR выражает mоколо-n матрица A как A = Q*R. Здесь, Q является mоколо-m унитарная матрица, и R является mоколо-n верхняя треугольная матрица. Если компоненты A вещественные числа, то Q - ортогональная матрица.

Совет

  • Верхняя треугольная матрица R удовлетворяет следующему условию: R = chol(A'*A).

  • Аргументы 'econ' и 0 влияют только на форму возвращаемых матриц.

  • Запрос qr для числовых матриц, которые не являются символическими объектами (не созданы sym, syms, или vpa) вызывает MATLAB ®qr функция.

  • Если вы используете 'matrix' вместо 'vector', то qr возвращает матрицы перестановок, как по умолчанию. Если вы используете 'matrix' и 'econ', то qr выдает ошибку.

  • Матричные вычисления, включающие множество символьных переменных, могут быть медленными. Чтобы увеличить вычислительную скорость, уменьшите число символьных переменных, подставив заданные значения для некоторых переменных.

См. также

| | |

Представлен в R2014a