(set-env! :dependencies '[;; https://mvnrepository.com/artifact/org.apache.commons/commons-math3
[org.apache.commons/commons-math3 "3.6.1"]
])
(import (org.apache.commons.math3.linear EigenDecomposition
MatrixUtils
RealMatrix))
(MatrixUtils/createRealMatrix 2 2) ;ゼロ行列
(MatrixUtils/createRealIdentityMatrix 2) ;単位行列
(let [m (MatrixUtils/createRealMatrix (into-array [(double-array [1 2 3])
(double-array [4 5 6])]))]
[m
(.transpose m)
(.scalarMultiply m 10)
])
(let [m1 (MatrixUtils/createRealMatrix (into-array [(double-array [1 2])
(double-array [3 4])]))
m2 (MatrixUtils/createRealMatrix (into-array [(double-array [10 0])
(double-array [0 10])]))]
[(.add m1 m2)
(.subtract m1 m2)
(.multiply m1 m2)])
(let [m (MatrixUtils/createRealMatrix (into-array [(double-array [1 2])
(double-array [3 4])]))]
[(MatrixUtils/blockInverse m 0) ;逆行列
(.multiply m (MatrixUtils/blockInverse m 0)) ;単位行列になるハズ
])
;;; 非正則行列に対して逆行列は計算できない
(let [m (MatrixUtils/createRealMatrix (into-array [(double-array [2 1])
(double-array [2 1])]))]
(MatrixUtils/blockInverse m 0))
;; 行列式
(let [m (MatrixUtils/createRealMatrix (into-array [(double-array [1 -2])
(double-array [3 -4])]))
ed (EigenDecomposition. m)]
(.getDeterminant ed))
(let [m (MatrixUtils/createRealMatrix (into-array [(double-array [1 -2])
(double-array [3 -4])]))
ed (EigenDecomposition. m)]
(->> (.getRealEigenvalues ed)
(map-indexed (fn [i x]
{:固有値 x
:固有ベクトル (.getEigenvector ed i)}))))