Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(5) 常微分方程式の数値解法、アダプティブな刻み幅の8次のルンゲクッタ法、Dormand-Princeを使ってローレンツ方程式を計算、 JFreeChartでプロット。
今回はこの例題。
これはChatGPTに全面的にサポートしてもらってやっとできた…コードはこんな感じで。
(ns mini.Lorenz
(:import [org.apache.commons.math3.ode FirstOrderDifferentialEquations]
[org.apache.commons.math3.ode.nonstiff DormandPrince853Integrator]
[org.apache.commons.math3.ode.sampling StepHandler StepInterpolator]
[org.jfree.data.xy XYSeries XYSeriesCollection]
[org.jfree.chart ChartFactory ChartPanel]
[org.jfree.chart.plot PlotOrientation]
[org.jfree.chart.renderer.xy XYLineAndShapeRenderer]
[javax.swing JFrame]
[java.awt BorderLayout]))
;; Lorenz ODE: dx/dt = σ(y-x), dy/dt = ρx - y - xz, dz/dt = xy - βz
(defn make-lorenz [sigma rho beta]
(proxy [FirstOrderDifferentialEquations] []
(getDimension [] 3)
(computeDerivatives [t y yDot]
(aset yDot 0 (* sigma (- (aget y 1) (aget y 0))))
(aset yDot 1 (- (* rho (aget y 0))
(aget y 1)
(* (aget y 0) (aget y 2))))
(aset yDot 2 (- (* (aget y 0) (aget y 1))
(* beta (aget y 2)))))))
(defn integrate-lorenz []
(let [ylist (atom [])
tstep 0.01
tmax 200.0
integrator (DormandPrince853Integrator. 1.0e-8 tstep 1.0e-10 1.0e-10)
ode (make-lorenz 10.0 28.0 (/ 8.0 3.0))
y0 (double-array [1.0 1.0 1.0])
step-handler
(proxy [StepHandler] []
(init [t0 y0 t])
(handleStep [^StepInterpolator interpolator isLast]
(let [t (.getCurrentTime interpolator)
y (.getInterpolatedState interpolator)]
(swap! ylist conj [t (aget y 0) (aget y 1) (aget y 2)]))))]
(.addStepHandler integrator step-handler)
(.integrate integrator ode 0.0 y0 tmax y0)
@ylist))
(defn create-dataset [points]
(let [seriesY (XYSeries. "Y" false)
seriesZ (XYSeries. "Z" false)]
#_{:clj-kondo/ignore [:unused-binding]}
(doseq [[t x y z] points]
(.add seriesY x y)
(.add seriesZ x z))
(doto (XYSeriesCollection.)
(.addSeries seriesY)
(.addSeries seriesZ))))
(defn create-chart [dataset]
(let [chart (ChartFactory/createXYLineChart
"Lorenz Equation by Dormand-Prince 8(5,3)"
"X"
"Y, Z"
dataset
PlotOrientation/VERTICAL
true false false)
plot (.getXYPlot chart)
renderer (XYLineAndShapeRenderer.)]
(.setSeriesShapesVisible renderer 0 false)
(.setSeriesShapesVisible renderer 1 false)
(.setRenderer plot renderer)
chart))
(defn -main []
(let [points (integrate-lorenz)
dataset (create-dataset points)
chart (create-chart dataset)
frame (JFrame. "Lorenz Equation")]
(.setDefaultCloseOperation frame JFrame/EXIT_ON_CLOSE)
(.setBounds frame 10 10 640 480)
(doto frame
(.add (ChartPanel. chart) BorderLayout/CENTER)
(.setVisible true))))
(-main)
|
結果はこちら。
« 高周波・RFニュース 2025年12月19日 Ericssonがドコモ5G向けに4.5GHz MassiveMIMO導入、ヒロセ電機が110GHzまで使える垂直同軸コネクタ発表、Huawei Mate 80/80 Pro Max分解動画、FCNT arrows Alpha分解記事など | トップページ | アバター:ファイヤー・アンド・アッシュをIMAXレーザーGT3Dで観てきた。CGはもう慣れたと思ってもこれは別格!水・火の表現、空・水中を行く爽快感、夜の戦闘の臨場感、表情の豊かさ(特にヴァラン)がすごい。最後にはびっくりの人も出てくる。スマホを皆使ってないのも。 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Gemini 3.5 Flash・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/31-6/7(2026.06.07)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/24-5/31(2026.05.31)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/17-5/24(2026.05.24)
- Microsoft 365 Copilot Chat(GPT-5.5 Think Deeper)でサザエさんじゃんけん予測アプリをいろいろな予測アルゴリズムを扱えるように作り直してもらう。5/24は勾配ブースティング系だけがパーを出すと予測、ランダムフォレストやLSTM、マルコフ連鎖などは全てチョキと予想。(2026.05.24)
- ExcelのCopilotのPlanモードで、サザエさんじゃんけんの次回の予測をやってもらう。予測法はいろいろ挙げてもらって推奨のランダムフォレストにしてもらった。次回はチョキと予測(Codexはパーと予測)。(2026.05.21)
「学問・資格」カテゴリの記事
- RF Weekly Digest (Gemini 3.5 Flash・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/31-6/7(2026.06.07)
- 高周波・RFニュース 2026年6月4日 Qualcommが6Gウェビナー開催、Next G Allianceが5G ISACイニシアティブ立ち上げ、Keysightが新RFシグナルアナライザ発表、アンリツが5G LTM評価環境構築(2026.06.04)
- 高周波・RFニュース 2026年6月3日 BroadcomがブロードバンドエッジAIポートフォリオ発表、Marvellが102.4Tbpsスイッチ発表、Mini-CircuitsがLTCC・MMICフィルタのカスケード接続解説、ASUSのミニPCにSnapdragon X2 Elite、KeysightとNTTドコモ・NTTが6Gシミュレーション協業(2026.06.03)
- 高周波・RFニュース 2026年6月2日 QualcommがSnapdragon C発表&6G解説記事、アンリツが140Gbaudバイアスティ内蔵 広帯域リニアアンプ発売、SONY Xperia 10 VII分解動画など(2026.06.02)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/24-5/31(2026.05.31)
「日記・コラム・つぶやき」カテゴリの記事
- RF Weekly Digest (Gemini 3.5 Flash・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/31-6/7(2026.06.07)
- 高周波・RFニュース 2026年6月4日 Qualcommが6Gウェビナー開催、Next G Allianceが5G ISACイニシアティブ立ち上げ、Keysightが新RFシグナルアナライザ発表、アンリツが5G LTM評価環境構築(2026.06.04)
- 高周波・RFニュース 2026年6月3日 BroadcomがブロードバンドエッジAIポートフォリオ発表、Marvellが102.4Tbpsスイッチ発表、Mini-CircuitsがLTCC・MMICフィルタのカスケード接続解説、ASUSのミニPCにSnapdragon X2 Elite、KeysightとNTTドコモ・NTTが6Gシミュレーション協業(2026.06.03)
- 高周波・RFニュース 2026年6月2日 QualcommがSnapdragon C発表&6G解説記事、アンリツが140Gbaudバイアスティ内蔵 広帯域リニアアンプ発売、SONY Xperia 10 VII分解動画など(2026.06.02)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/24-5/31(2026.05.31)
« 高周波・RFニュース 2025年12月19日 Ericssonがドコモ5G向けに4.5GHz MassiveMIMO導入、ヒロセ電機が110GHzまで使える垂直同軸コネクタ発表、Huawei Mate 80/80 Pro Max分解動画、FCNT arrows Alpha分解記事など | トップページ | アバター:ファイヤー・アンド・アッシュをIMAXレーザーGT3Dで観てきた。CGはもう慣れたと思ってもこれは別格!水・火の表現、空・水中を行く爽快感、夜の戦闘の臨場感、表情の豊かさ(特にヴァラン)がすごい。最後にはびっくりの人も出てくる。スマホを皆使ってないのも。 »



コメント