8.3.4. QR-разложение MathCAD 12 руководство
- Системы линейных уравнений
- 8.1. Хорошо обусловленные системы с квадратной матрицей
- 8.1.1. Вычислительный блок Given / Find
- 8.1.2. Функция lsolve
- 8.2. Произвольные системы линейных уравнений
- 8.2.1. Переопределенные системы
- 8.2.2. Недоопределенные системы
- 8.2.3. Вырожденные и плохо обусловленные системы
- 8.3. Матричные разложения
- 8.3.1. СЛАУ с треугольной матрицей
- 8.3.2. Разложение Холецкого
- 8.3.3. LU-разложение
- 8.3.4. QR-разложение
- 8.3.5. SVD-(сингулярное) разложение
- 8.4. Собственные векторы и собственные значения матриц
Среди матричных разложений особую роль играют ортогональные преобразования, обладающие свойством сохранения нормы вектора. Напомним из курса линейной алгебры, что матрица
Q называется ортогональной, если Q
Свойство сохранения нормы вектора при ортогональных преобразованиях, т. е.
|Qx|=|x|, дает рецепт поиска псевдорешения вырожденных СЛАУ, а именно, замену исходной задачи минимизации невязки с «плохой» матрицей
|Аx-b| задачей |QT(Ax-b)|, в которой матрица уже будет «хорошей» благодаря специальному построению матрицы
Q. Таким образом, ортогональные разложения используются при решении любых систем (в том числе с прямоугольной матрицей А, причем как переопределенных, так и недоопределенных).
Одним из важнейших вариантов ортогональных разложений некоторой матрицы А является QR-разложение вида
A=QR, где Q — ортогональная матрица, а R — верхняя треугольная матрица:
- qr (A) — QR-разложение:
- А — вектор или матрица любого размера.
Результатом действия функции qr (А) является матрица, составленная из матриц
Q и R соответственно (подобно рассмотренному в предыдущем разделе
LU-разложению).
Листинг 8.22. QR-разложение
сингулярной матрицы
Если бы исходная СЛАУ Aх=b не была вырожденной, то можно было сразу записать: QTQ-Rx=QTb, откуда следует (благодаря ортогональности матрицы Q): Rx=QTb. Так как матрица к — треугольная, решение данной системы получается по формулам прямого хода. Если использовать нашу пользовательскую функцию решения треугольной системы (см. разд. 8.3. Т), то результат исходной СЛАУ запишется в виде одной строки кода: trg(R,QTb) (соответствующий пример решения невырожденной СЛАУ вы найдете на компакт-диске).
Обратимся теперь к проблеме решения СЛАУ с сингулярной квадратной NxN или прямоугольной
NxM матрицей А. Если ее ранг равен k (он может быть меньше N и м, как в листинге 8.22, где
N=M=S, a k=2), то получающаяся треугольная матрица R имеет следующую структуру:
где R1 — верхняя треугольная матрица, a R2 — просто некоторая матрица, а нули обозначают, в общем случае, нулевые матрицы соответствующих размеров.
Если система вырожденная, то она имеет бесконечное множество псевдорешений (векторов, минимизирующих норму невязки). При помощи QR-разложения можно сразу выписать одно из них (правда, не обладающее минимальной нормой). В нашем примере последняя строка матрицы R содержит одни нули, поэтому последняя компонента вектора псевдорешения х может быть абсолютно любой. Если положить х2=0, то остальные компоненты х определятся из треугольной СЛАУ R1x=QTb, как это проиллюстрировано листингом 8.23.
Листинг 8.23. Поиск одного из псевдорешений вырожденной
СЛАУ посредством QR-разложения (продолжение
листинга 8.22 )
Для того чтобы выбрать из всего множества псевдорешений (минимизирующих невязку исходной СЛАУ) нормальное псевдорешение (т. е. обладающее минимальной нормой), необходимо решить соответствующую задачу минимизации (см. разд. 8.2.3). Если построено QR-разложение, сделать это намного легче. Если произвольную компоненту решения обозначить переменной
у: х 2=у, то она определится из соответствующей задачи оптимизации (листинг 8.
24, 1—3 строки), а остальные составляющие самого решения
х — из треугольной СЛАУ R1x=QTb-R2y. В последней строке листинга выводится полученное нормальное псевдорешение, а также его норма и соответствующая норма невязки (которые полезно сравнить с результатом прошлого листинга). Вспомогательный рис. 8.13 помогает понять структуру минимизируемой функции из листинга 8.24.
Листинг 8.24. Нормальное псевдорешение вырожденной СЛАУ
(продолжение листингов 8.22 и 8.23)
Рис. 8.13. Норма псевдорешения в зависимости от у (продолжение листинга 8.24)
Резюмируя практические аспекты применения QR-разложения, надо отметить, что алгоритмы решения СЛАУ на его основе практически одинаковы как для хорошо обусловленных, так и для сингулярных систем.
ПРИМЕЧАНИЕ
На прилагаемом к книге компакт-диске вы найдете дополнительные примеры построения QR-разложения как для квадратной, так и прямоугольной матрицы А.
Нравится
Твитнуть
28. Алгоритм qr-разложения.
Ортогональные матрицы и матрицы плоского вращения.модулю 1.
Это следует из неравенства Коши-Шварца:
Сохранение углов между векторами следует из равенства:
QR-разложение может быть осуществлено методами вращения и отражения.
Рассмотрим вращение вектора на плоскости.
Матрица вращения задается в виде: , – угол вращения.
Свойство ортогональной матрицы – сохранение угла между векторами.
Видно, что матрица вращения – ортогональная матрица:
Если принять, что или , то .
Рассмотрим систему линейных алгебраических уравнений второго порядка:
Найдем матрицу Q такую, что
, где
Рассмотрим систему уравнений с матрицей .
Плоской матрицей вращения называется матрица, имеющая вид:
Можно подтвердить, что матица Q является ортогональной матрицей с определителем, равным 1.
Применение указанной матрицы к i-му
столбцу матрицы A:
,
дает вектор
,
имеющий в j-ой позиции 0.
(Верхний индекс обозначает номер
вектора).
Применяя к исходной матрице указанные плоские матрицы вращения получим матрицу:
С помощью указанных матриц вращения все элементы матрицы R ниже главной диагонали становятся равными нулю.
Для исключения соответствующих элементов, коэффициенты c и s определяются выражениями:
Произведение ортогональных матриц является ортогональной матрицей.
Чтобы решить задачу, матрица A дополняется матрицей , матрица
Учитывая, что ортогональное преобразование вектора невязки:
второе слагаемое не зависит от коэффициентов многочлена, линейное значение первого слагаемого сводится к решению системы уравнений: , где R – верхняя треугольная матрица.
Решение задачи наименьших квадратов при , сводится к задаче решения системы алгебраических уравнений с верхней треугольной матрицей:
Чтобы применить метод QR-разложения к решению задачи наименьших квадратов, нужно привести матрицу A к квадратной форме:
матрица B – произвольная.
Исходное уравнение:
Матрица является квадратной . К этой системе можно применить метод QR-разложения.
Применяя метод вращения, уравнение записывается: ,
размерность вектора , размерность вектора ,
– ортогональная матрица, – верхняя треугольная матрица.
Разобьем матрицу R на блоки:
Умножая матрицу R справа на можем записать:
невязка (ошибка)
От неизвестных параметров зависит только первое слагаемое нормы невязки.
Минимальное значение этого слагаемого, если матрица A максимальный размер, определяется из уравнения: .
Таким образом, задача наименьших квадратов решается в два этапа.
На первом этапе осуществляется QR-разложение расширенной матрицы и определяются ее подматрицы и .
На втором этапе решается задача решения системы линейных алгебраических уравнений, матрица которой представлена в QR форме.
Матрица Q является
ортогональной матрицей, т.
е. матрицей,
транспонирование которой совпадает с
обратной матрицей.
Матрица R – верхняя треугольная матрица, решение которой осуществляется методом обратной подстановки.
scipy.linalg.qr — Руководство по SciPy v1.10.0
- scipy.linalg.qr(
a , overwrite_a=False , lwork=None , mode=’full’ , pivoting=False , check_finite=True 5 9000) [016]Вычисление QR-разложения матрицы.
Вычислить разложение
A = Q Rгде Q унитарно/ортогонально и R верхний треугольный.- Параметры:
- а (M, N) array_like
Матрица для разложения
- overwrite_a bool, необязательно
Переписываются ли данные в a (может улучшить производительность, если overwrite_a устанавливается в True путем повторного использования существующих входных данных структуру, а не создавать новую.
)- lwork int, необязательный
Размер рабочего массива, lwork >= a.shape[1]. Если None или -1, оптимальный размер вычисляется.
- режим {‘полный’, ‘r’, ‘экономичный’, ‘необработанный’}, необязательный
Определяет, какая информация должна быть возвращена: либо Q, либо R («полный», по умолчанию), только R («r») или оба Q и R, но вычисляются в эконом-размер («экономичный», см. Примечания). Окончательный вариант «сырой» (добавлено в SciPy 0.11) заставляет функцию возвращать две матрицы (Q, TAU) во внутреннем формате, используемом LAPACK.
- поворот bool, необязательно
Должна ли факторизация включать поворот для раскрытия ранга qr разложение. При повороте вычислить разложение
A P = Q R, как указано выше, но где P выбран так, что диагональ R не возрастает.- check_finite bool, необязательный
Проверять, содержит ли входная матрица только конечные числа.
Отключение может дать прирост производительности, но может привести к проблемам
(сбои, незавершение), если входные данные содержат бесконечности или NaN.
- Возвращает:
- Q число с плавающей запятой или комплексный ndarray
Форма (M, M) или (M, K) для
mode='economic'. Не возвращено еслирежим='r'.- R с плавающей запятой или комплексный ndarray
Форма (M, N) или (K, N) для
mode='economic'.К = мин(М, Н).- P int ndarray
Формы (N,) для
поворота = True. Не возвращается, еслиповорот=ложь.
- Поднимает:
- LinAlgError
Возникает при сбое декомпозиции
Примечания
Это интерфейс для подпрограмм LAPACK dgeqrf, zgeqrf, dorgqr, zungqr, dgeqp3 и zgeqp3.

Если
режим = экономичный, формы Q и R вместо этого будут (M, K) и (K, N) из (M,M) и (M,N), гдеK=min(M,N).Примеры
>>> импортировать numpy как np >>> из scipy import linalg >>> rng = np.random.default_rng() >>> a = rng.standard_normal((9, 6))
>>> q, r = linalg.qr(a) >>> np.allclose(a, np.dot(q, r)) Истинный >>> q.shape, r.shape ((9, 9), (9, 6))
>>> r2 = linalg.qr(a, mode='r') >>> np.allclose(r, r2) Истинный
>>> q3, r3 = linalg.qr(a, режим='экономический') >>> q3.форма, r3.форма ((9, 6), (6, 6))
>>> q4, r4, p4 = linalg.qr(a, pivoting=True) >>> d = np.abs(np.diag(r4)) >>> np.all(d[1:] <= d[:-1]) Истинный >>> np.allclose(a[:, p4], np.dot(q4, r4)) Истинный >>> q4.форма, r4.форма, p4.форма ((9, 9), (9, 6), (6,))
>>> q5, r5, p5 = linalg.qr(a, mode='economic', pivoting=True) >>> q5.форма, r5.форма, p5.форма ((9, 6), (6, 6), (6,))
QR-разложение
QR-разложение
QR-факторизация (расширенный)
Мы видели, что для вычисления LSE необходимо инвертировать матрицу.
В предыдущих разделах мы использовали функцию решить . Однако решение не является стабильным решением. При кодировании вычислений LSE мы используем разложение QR. 93)
colnames(X) <- c("Перехват","x","x2","x3")
бета <- матрица (с (1,1,1,1),4,1)
set.seed(1)
y <- X%*%beta+rnorm(n,sd=1)
Стандартная функция R для инверсии выдает ошибку:
solve(crossprod(X)) %*% crossprod(X,y)
Чтобы понять, почему это происходит, посмотрите
варианты (цифры = 4) log10 (кросспродукт (X))
## Перехват x x2 x3 ## Пересечение 1,699 4,098 6,625 9,203 ## x 4,098 6,625 9,203 11,810 ## x2 6,625 9.203 11.810 14.434 ## x3 9,203 11,810 14,434 17,070
Обратите внимание на разницу в несколько порядков. На цифровом компьютере у нас есть ограниченный диапазон чисел. Из-за этого некоторые числа кажутся равными 0, когда нам также приходится рассматривать очень большие числа. Это, в свою очередь, приводит к делениям, которые практически являются делениями на 0 ошибок.
Факторизация
QR-факторизация основана на математическом результате, который говорит нам, что мы можем разложить любую матрицу полного ранга следующим образом:
с:
- матрица с
- верхняя треугольная матрица.
Верхнетреугольные матрицы очень удобны для решения системы уравнений.
Пример верхней треугольной матрицы
В приведенном ниже примере матрица слева является верхнетреугольной: она имеет только 0 под диагональю. Это значительно облегчает решение системы уравнений:
Мы сразу знаем, что , откуда следует, что . Это, в свою очередь, подразумевает и, таким образом, так. Написать алгоритм для этого несложно для любой верхней треугольной матрицы.
Нахождение LSE с помощью QR
Если мы перепишем уравнения LSE, используя вместо у нас есть:
верхний треугольник делает решение более стабильным. Кроме того, поскольку мы знаем, что столбцы находятся в том же масштабе, который стабилизирует правую сторону.
Теперь мы готовы найти LSE, используя разложение QR. Чтобы решить:
Мы используем обратное решение , которое использует верхнетреугольную природу .
QR <- QR(X) Q <- qr.Q( QR ) R <- qr.R( QR ) (бетахат <- обратное решение (R, crossprod (Q, y)) )
## [1] ## [1,] 0,9038 ## [2,] 1,0066 ## [3,] 1.0000 ## [4,] 1.0000
На практике ничего из этого делать не нужно благодаря встроенной функции solv.qr :
QR <- qr(X) (бетахат <- решить.qr(QR, y))
## [1] ## Перехват 0,9038 ## х 1,0066 ## x2 1.0000 ## x3 1.0000
Подобранные значения
Эта факторизация также упрощает вычисление подходящих значений:
В R мы просто делаем следующее: 92)/дф varbeta <- sigma2*chol2inv(qr.R(QR)) SE <- sqrt(diag(varbeta)) cbind (бетахат, SE)
## ЮВ ## Перехват 0,9038 4.508e-01 ## x 1,0066 7,858e-03 ## x2 1.0000 3.662e-05 ## x3 1.0000 4.802e-08
Это дает нам те же результаты, что и функция lm .