« 東京油組総本店ドーチカ組で辛味噌油そばW盛り スペシャルトッピングAをいただく。底に辛味噌があるのでよく混ぜて食べるとかなりいい辛さに。卓上の辛味を入れるとさらに辛くできる。 | トップページ | RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3 »

2025年11月 4日 (火)

Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(1)  複素行列を定義してLU分解で一次方程式や逆行列、行列式などを計算する。Javaの配列とClojureの配列が全然違うのでちょっと面倒。

今回はこの例をClojureに移植する。

 Javaの数値計算ライブラリApache Commons Mathを使う(1)  複素行列を定義してLU分解で一次方程式や逆行列、行列式などを計算する。Swingを使ってウィンドウに表示する。

ClojureはJavaのコードに変換しているのではなく、あくまでJVM上で動くものなので配列も違う。なのでそのまま渡すことができずに、Javaの配列に変換するinto-arrayを多用しないといけない。全然LISPぽくないJavaぽいコードになってしまうがこんな感じでLU分解で一次方程式や逆行列、行列式などを計算できる。


(ns mini.LinearAlgebra  (:import [org.apache.commons.math3.complex Complex]
                               [org.apache.commons.math3.linear MatrixUtils FieldLUDecomposition]))

(defn matrixPrint [mat n]
  (dotimes [i n]
    (dotimes [j n]
      (print (str (.getEntry mat i j) " ")))
    (println "")))

(defn vectorPrint [vec n]
  (dotimes [i n]
    (println (str (.getEntry vec i) " "))))

(def m
  (MatrixUtils/createFieldMatrix
   (into-array
    [(into-array [(Complex. 2.0 0.0) (Complex. 1.0 0.0) (Complex. 1.0 0.0)])
     (into-array [(Complex. -1.0 0.0) (Complex. 1.0 0.0) (Complex. -1.0 0.0)])
     (into-array [(Complex. 1.0 0.0) (Complex. 2.0 0.0) (Complex. 3.0 0.0)])])))

(def v
  (MatrixUtils/createFieldVector
   (into-array [(Complex. 2.0 0.0) (Complex. 3.0 0.0) (Complex. -10.0 0.0)])))

(def decomp (FieldLUDecomposition. m))
(def solver (.getSolver decomp))
(def solution (.solve solver v))
(vectorPrint solution 3)
(println "")
(println (str (.getDeterminant decomp)))
(println "")
(def inv (.getInverse solver))
(matrixPrint inv 3)

実行すると

(3.0, 0.0)
(1.0, 0.0)
(-5.0, 0.0)

(9.0, 0.0)

(0.5555555555555555, 0.0) (-0.11111111111111113, 0.0) (-0.2222222222222222, 0.0)
(0.22222222222222224, 0.0) (0.5555555555555556, 0.0) (0.1111111111111111, 0.0)
(-0.3333333333333333, 0.0) (-0.3333333333333333, 0.0) (0.3333333333333333, 0.0)
が得られた。

Clojurematrix1

 

« 東京油組総本店ドーチカ組で辛味噌油そばW盛り スペシャルトッピングAをいただく。底に辛味噌があるのでよく混ぜて食べるとかなりいい辛さに。卓上の辛味を入れるとさらに辛くできる。 | トップページ | RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 東京油組総本店ドーチカ組で辛味噌油そばW盛り スペシャルトッピングAをいただく。底に辛味噌があるのでよく混ぜて食べるとかなりいい辛さに。卓上の辛味を入れるとさらに辛くできる。 | トップページ | RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3 »

最近の記事

2025年11月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ
フォト