LinearAlgebra[QRDecomposition] - 行列の QR 分解を計算
使い方
QRDecomposition(A, fs, out, c, outopts, ...)
パラメータ
A - 行列
fs - (オプション) BooleanOpt(fullspan); 完全な QR 分解を実行するかどうかを選ぶ
out - (オプション) output = obj の形の等式、 obj は 'Q', 'R', 'NAG', 'rank' のいずれか、またはこれらの名前のいくつかのリスト。計算する結果オブジェクトを選択
c - (オプション) BooleanOpt(conjugate); グラム-シュミット処理で共役操作を実行するかどうか選択
outopts - (オプション) outputoptions[o] = list の形の等式、o は 'Q', 'R', 'NAG' のいずれか。 list はその結果コンストラクタオプションを含む。結果オブジェクトに対するコンストラクタオプション
... - (オプション) outputoptions[o] = list を追加する場合
|
説明
|
|
•
|
QRDecomposition 関数は行列 A の QR 分解を計算します。
|
•
|
A が記号成分を含むと、A の分解を生成するためにグラム-シュミット処理が使われます。fullspan オプション (fs) が省略されるか、 fullspan=false が入力され、A がフルランクを持たないか、行の数が列の数より多いとき、Q1R1 分解が実行されます。Q1 因子の列は A の列空間を張ります。
|
|
fullspan オプションが単に記号 fullspan または fullspan=true と指定されるか、A がフルランクを持つとき、完全な QR 分解が実行されます。
|
|
QR 分解が成功すると、行列はフルランクです。その他の場合、あるところで (対角上とその下側で) 0 の行が現れます。したがって、ランクはオプションの出力オブジェクトです。
|
|
デフォルトでは、グラム-シュミット処理中に共役をとります。conjugate=false が呼び出し手順で指定されていると、共役操作は行われません。
|
•
|
A が浮動小数点成分を含むならば、ハウスホルダー置換を用いて分解を計算します。
|
•
|
output オプション (out) に何が含まれるかによって、 Q, R, rank を含む式列または NAG, rank を含む式列が返されます。オブジェクトは output リストで指定したのと同じ順序で返されます。
|
|
rank が R (または NAG) 因子とともに output オプションに含まれていて、A が浮動小数点成分を持つとき、ランクは R (または NAG )因子の対角成分で、ある許容誤差を超えるものの個数を数えることにより計算されます。c を R の対角成分で絶対値で最大の要素として、この許容誤差は e と c の積に等しくなります。 R がハードウエア浮動小数点成分を持つとき、e は値 10^(1-evalhf(Digits)) を取り、ソフトウエア浮動小数点成分の場合は値 10^(1-Digits) を取ります。
|
|
出力オブジェクト NAG は入力行列が浮動小数点データを含んでいるときにだけ必要な可能性があります。それは他の行列出力オブジェクト Q か R のどちらかでは必要とされません。NAG オブジェクトは最初の項は行列で、2 番目の項はベクトルの式列です。NAG 出力オブジェクトの行列成分は m >= n のとき上三角部分に、m < n のとき下三角部分に R を含んでいます。行列成分の残りの部分と NAG 出力オブジェクトのベクトル成分は Q の因子を作り上げるリフレクタの意味を含みます。
|
|
fullspan オプスオンは 非正方行列Aに対する output=[NAG] オプションとは両立しません。
|
|
output オプションが呼び出し手順に含まれないならば、返される式列はオブジェクト Q と R を含みます。
|
•
|
outputoptions[o] オプション (outopts) はその結果を Matrix (または Vector) コンストラクタに対して付加情報(readonly, shape, storage, order, datatype, attributes) を与えます。
|
|
outputoptions のインデックスに対して許される値 [o] と対応する意味を示します。
|
Q 直交(ユニタリ)因子
R 上三角因子
NAG コンパクト (NAG-style) 形式
•
|
この関数は LinearAlgebra パッケージの一部ですから、コマンド with(LinearAlgebra) が実行した後のみ、 QRDecomposition(..) の形で使うことができます。ただし、コマンドの長い形 LinearAlgebra[QRDecomposition](..) を使えばいつでもアクセスすることができます。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := <<2,3,1>|<4,6,-1>|<-1,-3/2,-2>>;
|
| (2.1) |
>
|
(Q1,R1) := QRDecomposition(A);
|
| (2.2) |
>
|
(Q,R) := QRDecomposition(A, fullspan);
|
| (2.3) |
| (2.4) |
| (2.5) |
>
|
B := RandomMatrix(5,3,outputoptions=[datatype=float]);
|
| (2.6) |
>
|
(q,rank) := QRDecomposition(B, output=['Q', 'rank']);
|
| (2.7) |
>
|
map( fnormal, Transpose(q) . q );
|
| (2.8) |
|
|