2017-02-26 8 views
2

私はLU分解を使ってAx = bを解決しようとしていますが、何とかL * Uを乗算してAを得ることはできません。コードと結果は次のとおりです。LU分解の行列乗算問題?

A = array([2,3,5,4]).reshape(2,2) 
b = array([4,3]) 
P,L, U = lu(A) 

及びL * U

dot(L,U): 

array([[ 5., 4.], 

     [ 2., 3.]]) 

ので、代わりの((2,3)、(5,4))はLとU

L: 

array([[ 1. , 0. ], 

     [ 0.4, 1. ]]) 

U: 

array([[ 5. , 4. ], 

     [ 0. , 1.4]]) 

結果の結果、私は得ている((5.、4.。)、(2.、3.))。そして結果として、私はAx = bを解くことができません。そのようなL * U結果を得る理由は何ですか?

答えて

4

ああ、完全置換行列Pを忘れてしまったようです。Pの逆数にL * Uを掛けてみると、問題は解決しました。

dot(inv(P),dot(P,A)): 

array([[ 2., 3.], 
     [ 5., 4.]]) 
+1

をそれとも、 '' L、U = scipy.linalg.lu(A、permute_l =真)の代わりに使用することができます。それで 'L.dot(U)'は期待通りです。 –

1

WikiPediaによると、PA = LU。

あなたはA = LUをしたいのであれば、あなたはpermute_l=Trueluに機能追加することができます。

(ins)>>> a = np.array([2,3,5,4]).reshape(2,2) 
(ins)>>> l,u = scipy.linalg.lu(a, permute_l=True) 
(ins)>>> l.dot(u) 
array([[ 2., 3.], 
     [ 5., 4.]])