LU- и QR-разложения
Так называемые LU- и QR-разложения реализуются следующими матричными функциями:
Функция lu выражает любую квадратную матрицу X как произведение двух треугольных матриц, одна из которых (возможно, с перестановками) – нижняя треугольная матрица, а другая – верхняя треугольная матрица [В MATLAB 6 аргументом (входным аргументом) функции lu может быть и полная прямоугольная матрица. – Примеч. ред.]. Иногда эту операцию называют LR-разложением. Для выполнения этой операции служит следующая функция:
- [L,U] = lu(X) – возвращает верхнюю треугольную матрицу U и психологическую нижнюю матрицу L (т. е. произведение нижней треугольной матрицы и матрицы перестановок), так что X=L*U;
- [L,U,P.] = lu(X) – возвращает верхнюю треугольную матрицу U, нижнюю треугольную матрицу L и сопряженную (эрмитову) матрицу матрицы перестановок Р, так что L*U =Р*Х;
- lu(Х) – вызванная с одним выходным параметром функция возвращает результат из подпрограмм DGETRF (для действительных матриц) или ZGETRF (для комплексных) известного пакета программ линейной алгебры LAPACK.
- lu(X, thresh) – где thresh в диапазоне [0…1] управляет центрированием в разреженных матрицах (см. урок 12). Отдельная форма предыдущего случая. Центрирование происходит, если элемент столбца на диагонали меньше, чем произведение thresh и любого поддиагонального элемента. Thresh=1 – значение по умолчанию. Thresh=0 задает центрирование по диагонали. Если матрица полная (не разреженная), выводится сообщение об ошибке.
Функция qr выполняет QR-разложение матрицы. Эта операция полезна для квадратных и треугольных матриц. Она выполняет QR-разложение, вычисляя произведение унитарной [Квадратная матрица с комплексными элементами, обладающая тем свойством, что обратная матрица ее комплексно сопряженной матрицы равна транспонированной, т. е. (А*)''-А'. – Примеч. ред. ] матрицы и верхней треугольной матрицы. Функция используется в следующих формах: [ Квадратная матрица с комплексными элементами, обладающая тем свойством, что обратная матрица ее комплексно сопряженной матрицы равна транспонированной, т. е. (А*)''-А'. – Примеч. ред.]
- [Q.R] = qr(X) – вычисляет верхнюю треугольную матрицу R того же размера, как и у X, и унитарную матрицу Q, так что X=Q*R;
- [Q.R.E] = qr(X) – вычисляет матрицу перестановок Е, верхнюю треугольную матрицу R с убывающими по модулю диагональными элементами и унитарную матрицу Q, так что X*E=Q*R. Матрица перестановок Е выбрана так, что abs(diag(R)) уменьшается;
- [Q.R] = qr(X.O) и [Q.R.E] = qr(X,0) – вычисляют экономное разложение, в котором Е – вектор перестановок, так что Q*R=X(:,Е). Матрица Е выбрана так, что abs(diag(R)) уменьшается;
- А = qr(X) – возвращает результат из LAPACK. Пример:
>> C=rand(5.4) C=0.8381 0.5028 0.1934 0.69790.0196 0.7095 0.6822 0.37840.6813 0.4289 0.3028 0.86000.3795 0.3046 0.5417 0.85370.8318 0.1897 0.1509 0.5936>> [Q.R]=qr(C) Q=-0.5922-0.11140.5197 0.0743-0.6011-0.0139-0.9278-0.0011-0.34480.1420-0.4814-0.11730.0699 0.5940 0.6299-0.2681-0.1525-0.82680.2632-0.3898-0.58770.2997-0.2036-0.67340.2643R =-1.4152-0.7072-0.5037-1.41030-0.7541-0.7274-0.48190 0-0.3577-0.40430 0 0 0.25730 0 0 0- [Q,R] = qrdelete(Q,R, j) – изменяет Q и RTaKHM образом, чтобы пересчитать QR-разложение матрицы А для случая, когда в ней удален j-й столбец (А(:, j)=[ ]). Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q. R]=qr(A)..Аргумент j определяет столбец, который должен быть удален из матрицы А.
Примеры:
>> C=rand(3.3) C =0.0164 0.0576 0.71760.1901 0.3676 0.69270.5869 0.6315 0.0841>> [Q.R]=qr(C) Q=-0.0265-0.2416-0.9700-0.3080-0.92120.2378-0.95100.3051-0.0500R =-0.6171-0.7153-0.31230-0.1599-0.78580 0-0.5356>> [Q1.R1]=qrdelete(Q.R.2) Q1 =-0.02650.7459 0.6655-0.30800.6272-0.7153-0.9510-0.22390.2131R1 =-0.6171-0.31230 0.95100 0- [Q.R] = qrinsert(Q,R,j,x) – изменяет Q и R таким образом, чтобы пересчитать разложение матрицы А для случая, когда в матрице А перед j-м столбцом вставлен столбец х. Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q,R]=qr(A). Аргумент х – вектор-столбец, который нужно вставить в матрицу А. Аргумент j определяет столбец, перед которым будет вставлен вектор х.
Примеры:
>> C=rand(3.3) C =0.1210 0.8928 0.86560.4508 0.2731 0.23240.7159 0.2548 0.8049>> [Q,R]-qr(c) Q =-0.14160.9835 0.1126-0.52750.0213-0.8493-0.8377-0.17970.5157R =-0.8546-0.4839-0.91940 0.8381 0.71160 0 0.3152>> x=[0.5.-0.3.0.2];[Q2.R2]=qrinsert(Q.R.2,x') Q2 =-0.14160.7995-0.5838-0.5275-0.5600-0.6389-0.83770.2174 0.5010R2 =-0.8546-0.0801-0.4839-0.91940 0.6112 0.6163 0.73690 0-0.5681-0.2505