LinearAlgebra[LUDecomposition] - 行列のコレスキー、PLU、PLU1R 分解を計算
使い方
LUDecomposition(A, m, out, c, ip, outopts, ...)
パラメータ
A - 行列
m - (オプション) method = name の形の等式、name は 'GaussianElimination', 'RREF', 'FractionFree', 'Cholesky', 'none' のいずれか; A を分解する方法
out - (オプション) output = obj の形の等式、obj は 'P', 'L', 'U', 'U1', 'R', 'NAG', 'determinant', 'rank' のいずれか、またはこれらの名前のいくつかからなるリスト; 計算する結果オブジェクトを選択する
c - (オプション) BooleanOpt(conjugate); コレスキー分解の場合エルミート転置を使用するかどうかを指定
ip - (オプション) BooleanOpt(inplace); U または NAG が output リストにあるとき出力が入力を上書きするかどうかを指定
outopts - (オプション) outputoptions[o] = list の形の等式、o は 'P', 'L', 'U', 'U1', 'R', 'NAG' のいずれか、そしてリストは結果をコンストラクタオプションを含む;結果オブジェクトのためのコンストラクタオプション
... - (オプション) outputoptions[o] = list の追加する場合
|
説明
|
|
•
|
LUDecomposition 関数は行列 A の PLU 分解、修正 PLU1R 分解、または を計算します。
|
|
output オプション (out) に何が含まれているかによって、因子、 P, L, U, U1, R, コンパクト NAG 形式、 determinant 、rank のいくつかが含まれる式列が返されます。オブジェクトは output リストに指定されたのと同じ順序で返されます。
|
|
注意: U か U1 と R の組が返されるかもしれませんが、両方が一緒には返されることはありません。
|
•
|
LUDecomposition(A) の呼び出し手順は LUDecomposition(A, output=['P','L','U']) と同値です。この LU 分解は A = P . L . U を満たす A と同じ次元を持つ正方単位下三角行列 L 因子と上三角因子 U を生成します。行列 P は置換行列です。
|
|
PLU1R 分解は LUDecomposition(A, method='RREF') または LUDecomposition(A, output=['P','L','U1','R']) を用いてなされます。 これはさらに U を U1 . R に分解します。ここで U1 は正方上三角因子で R は行列 A の一意的な被約行階段形です。この場合、 A = P . L . U1 . R です。
|
|
正定値行列 A のコレスキー分解は LUDecomposition(A, method=Cholesky) を使って得られます。これは正方下三角因子 L を生成します。 A が実対称行列ならば、A = L . Transpose(L)、A が複素エルミート行列ならば、A = L . HermitianTranspose(L) です。
|
•
|
m が呼出し手順で指定されないと、method='none' が使用されます。注意: method='none' は method='GaussianElimination' と同等です。
|
•
|
コレスキー分解において、エルミート転置がデフォルトで使用されます。 conjugate=false が呼び出し手順に指定されると、普通の転置が使用されます。
|
•
|
output オプション (out) は返される式列の内容を決定します。
|
|
output='NAG' と method='Cholesky' が呼び出し手順で指定されると、出力はその下三角部分に下三角分解のデータを含む行列から成ります。対角線の上側の成分はゼロに設定されないかもしれません。
|
|
output='NAG' が指定され、コレスキー分解法が使用されない場合、ベクトルの後に行列が続く式列が出力されます。行列の上三角部分は U 因子で狭義下三角部分を L 因子です (対角にそって 1 があるものとして)。ベクトルは NAG -スタイルのピボットベクトルです。
|
|
NAG が output リストに含まれていると、output の成分は determinant と rank を除いてすべて除外されます。
|
•
|
inplace オプション (ip) は結果をどこに返されるかを決定します。inplace=true が指定され、U か NAG が output リストに含まれていると、結果は最初の引数を上書きします。inplace=false が指定されるかこのオプションが呼び出し手順に含まれないと、結果は新しい行列に返されます。
|
|
条件 inplace=true は inplace と略記することができます。
|
|
inplace オプションは用心して使用しなければなりません。なぜならその演算が失敗したならば、本来の行列引数が壊れてしまうかもしれないからです。
|
•
|
outputoptions[o] オプション (outopts) は付加情報 (readonly, shape, storage, order, datatype, attributes) をその結果を構成する Matrix (または Vector) に提供します。
|
|
outputoptions のインデックス [o] に対して許される値と対応する意味を示します。
|
P 置換行列
L 下三角行列
U 上三角行列
U1 正方上三角行列
R 被約行階段形式
NAG コンパクト(NAG-style)形式
•
|
inplace と outputoptions は同時に使うことができません。
|
•
|
P*L*U1*R 分解の詳細は次を参照して下さい: Corless, Robert M, and Jeffrey, David J, "The Turing Factorization of a Rectangular Matrix," Sigsam Bulletin 31, no. 3 (September 1997): 20-28. この論文は U1 因子を U と呼んでいます。
|
•
|
この関数は LinearAlgebra パッケージの一部ですから、コマンド with(LinearAlgebra) を実行した後でのみ LUDecomposition(..) の形で使うことができます。ただし、コマンドの長い形 LinearAlgebra[LUDecomposition](..) を使えばいつでもアクセスすることが出来ます。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := <<0,-2,0,3>|<1,3,0,1>|<1,1,0,0>|<-3,4,1,0>>;
|
| (2.1) |
>
|
(p, l, u) := LUDecomposition(A);
|
| (2.2) |
| (2.3) |
>
|
B := <<1,0,2>|<3,1,4>|<6,1,4>|<1,1,2>>:
LUDecomposition( B, method='RREF', outputoptions['U1']=[datatype=integer] );
|
| (2.4) |
>
|
C := Matrix([[2,3+I,4+2*I,5+3*I],[13,17+3*I,21+6*I],[41,50+6*I],[62]],
scan=triangular[upper],shape=hermitian,datatype=complex(sfloat)):
G := LUDecomposition(C, method='Cholesky');
|
| (2.5) |
行列を を用いて簡約するために、'U' オブジェクトを指定します。
>
|
LUDecomposition(A, output='U');
|
| (2.6) |
行列をガウス-ジョルダン消去法を用いて簡約するために、'R' オブジェクトを指定します。
>
|
LUDecomposition( B, output='R' );
|
| (2.7) |
|
|