MATLAB Function Reference | ![]() ![]() |
表示
[L,U]=
lu(X) [L,U,P] = lu(X) lu(X) lu(X, thresh)
詳細
関数 lu
は、正方行列 X
を2つの三角行列の積として表現します。1つは下三角行列、もう1つは上三角行列に置換したものです。この因子分解は、しばしば、LU 分解と呼ばれますが、時として、LR 分解とも呼ばれます。
[L,U] = lu(X)
は、U
に上三角行列を、L
に見た目には、下三角行列 (下三角行列と置換行列の積)を出力し、X = L*U
となります。
[L,U,P] = lu(X)
は、U
に上三角行列を、L
に下三角行列を、P
に置換行列を出力し、L*U= P*X
となります。
lu(X)
は、LINPACK ルーチンの <DGETRF
、または、ZGETRF
からの出力を行います。
lu(X,thresh)
は、スパース行列に対して、ピポットをコントロールします。ここで、thresh
は、[0,1]
の範囲に入るピポットスレッシュホールドです。ピポット操作は、列の中の対角要素部が、その列の中の任意のサブ対角要素部の大きさの thresh
倍より小さくなります。thresh = 0
は、対角ピポットを行い、thresh = 1
は、デフォルトです。
注意
LU 分解を計算するほとんどのアルゴリズムは、ガウス消去法を変形したものです。この因子分解は、inv
を使って逆行列を求めたり、det
を使って行列式の値を求めるキーになる部分です。線形方程式の解法や、\
や /
を使った行列の除算に対しても基本的な役割を果たします。
引数
X |
分解されるスパース行列 |
thresh |
スパース行列に対するピポットスレッシュホールド。正しい値は、 [0,1] の中の値です。デフォルトは、1 です。 |
L |
X の因子。関数の型により、L は下三角行列か、下三角行列と置換行列P の積です。 |
U |
X の因子である上三角行列 |
P |
L*U = P*X を満たす置換行列。 |
例題
A=
1
2
3
4
5
6
7
8
0
LU分解を見るために、出力引数を2つ使って 、lu
をコールします。
[L,U]=
lu(A) L
=
0.1429
1.0000
0
0.5714
0.5000
1.0000
1.0000
0
0 U
=
7.0000
8.0000
0.0000
0
0.8571
3.0000
0
0
4.5000
L
は対角上に 1
をもつ下三角行列を置換した行列、U
は上三角行列であることに注意してください。関数の結果をチェックするために、積を計算します。
L*
U
この結果は、オリジナルの A
を出力します。同様に置換行列を得るために、左辺に3つの引数を使います。
[L,U,P] = lu(A)
L=
1.0000
0
0
0.1429
1.0000
0
0.5714
0.5000
1.0000 U
=
7.0000
8.0000
0
0
0.8571
3.0000
0
0
4.5000 P
=
0
0
1
1
0
0
0
1
0
L
*U
は A
の置換されたバージョンであることを確認するには、L
*U
を計算し、P
*A
との差を求めます。
P*
A - L*
U
例題の行列の逆行列 X = inv(A)
は、実際には三角行列の逆行列から計算されます。
X = inv(U)*
inv(L)
d = det(A) d=
27
d = det(L)*
det(U)
x = A\b
その解は、実際には2つの三角行列システムを解くことで計算されます。
y = L\b, x = U\y
アルゴリズム
lu
は、LAPACK のサブルーチン DGETRF
(実数) と ZGETRF
(複素数)を使っています。
参考
cond
, det
, inv
, luinc
, qr
, rref
代数演算子 \
と /
参考文献
Anderson, E., Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, and D. Sorensen, LAPACK User's Guide, Third Edition, SIAM, Philadelphia, 1999.
![]() | lsqr | luinc | ![]() |