コレスキー分解をする関数
pythonで正値対称行列をコレスキー分解する関数。
例にあるように、リストのリストで行列を作成して使用する。
def cholesky_decomposition(matrix): size = len(matrix) result = [[0.0 for x in xrange(size)] for x in xrange(size)] for i in xrange(size): #calc non-diagonal for j in xrange(i): tmp = matrix[i][j] for k in xrange(j): tmp -= result[i][k] * result[j][k] result[i][j] = tmp/result[j][j] #calc diagonal tmp = matrix[i][i] for k in xrange(i): tmp -= result[i][k]**2 result[i][i] = tmp**(0.5) return result if __name__ == '__main__': print cholesky_decomposition([[10,2,3],[2,100,5],[3,5,1000]])
実行すると、
[[3.1622776601683795, 0.0, 0.0], [0.63245553203367588, 9.979979959899719, 0.0], [0.94868329805051377, 0.44088264883091133, 31.605468237157314]]
として、リストのリスト形式で下3角行列が出力される。値はRのchol関数とチェック済。