私は自分自身(そしてPythonでコードを書くことを学ぶ目的で)として、小さな行列操作ライブラリをプログラミングの課題として作っています。 2×2、3×3および4×4行列の行列式を計算する。Pythonの行列式の計算(外部ライブラリを使用しない)
私が線形代数を理解する限り、私は最初の2を行うためにSarrusのルールを実装する必要がありますが、これをPythonや大きなサイズの行列にどう対処するか分かりません。すべてのヒント、ヒント、ガイドは非常に高く評価されます。
私は自分自身(そしてPythonでコードを書くことを学ぶ目的で)として、小さな行列操作ライブラリをプログラミングの課題として作っています。 2×2、3×3および4×4行列の行列式を計算する。Pythonの行列式の計算(外部ライブラリを使用しない)
私が線形代数を理解する限り、私は最初の2を行うためにSarrusのルールを実装する必要がありますが、これをPythonや大きなサイズの行列にどう対処するか分かりません。すべてのヒント、ヒント、ガイドは非常に高く評価されます。
Sarrusのルールは、3x3行列式を解くためのニーモニックであり、そのサイズを超えて移動するのに役立ちません。
任意に大きな正方行列の行列式を計算するためのライプニーズの式を調べる必要があります。この式の良い点は、n*n
行列の行列式が、再帰関数解にうまく適合するサブ行列のいくつかの行列式の組み合わせによって決定できるということです。
Leibnizの式の背後にあるアルゴリズムを理解していて、以前に再帰関数を使って作業していれば、これをコード(Pythonなど)に変換するのは簡単でしょうし、4x4の行列式行列を超えて!
ありがとう、ジェイソン! – trainreq
Mは山車の行列である場合は、ここで が凝縮法の醜いバージョンです(CHIO?)、 私はそれがうまくいくと思う...
私のpythonに2.7.2まで読む
from itertools import product, islice
def det(M,prod=1):
dim = len(M)
if dim == 1:
return prod * M.pop().pop()
it = product(xrange(1,dim),repeat=2)
prod *= M[0][0]
return det([[M[x][y]-M[x][0]*(M[0][y]/M[0][0]) for x,y in islice(it,dim-1)] for i in xrange(dim-1)],prod)
を使用していますLU分解で。行列が分解されると、U行列の対角を使って行列式を計算することができます。 –