11 lines
420 B
Clojure
11 lines
420 B
Clojure
(defn cholesky
|
|
[matrix]
|
|
(let [n (count matrix)
|
|
A (to-array-2d matrix)
|
|
L (make-array Double/TYPE n n)]
|
|
(doseq [i (range n) j (range (inc i))]
|
|
(let [s (reduce + (for [k (range j)] (* (aget L i k) (aget L j k))))]
|
|
(aset L i j (if (= i j)
|
|
(Math/sqrt (- (aget A i i) s))
|
|
(* (/ 1.0 (aget L j j)) (- (aget A i j) s))))))
|
|
(vec (map vec L))))
|