qr

QR-факторизация символьной матрицы

Описание

пример

R = qr(A) возвращает часть R разложения QR A = Q*R. Здесь, A m-by-n матрица, R m-by-n верхняя треугольная матрица и Q m-by-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 должен иметь одинаковое число строк.

CR, и 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.

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

пример

___ = qr(___,'econ') возвращает "разложение" размера экономики. Если 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-by-n верхняя треугольная символьная матрица.

Q часть разложения QR, возвращенного как m-by-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