Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(2) 補間を行う(Interpolate) リニア、Akimaスプラインなどいろいろある。JFreeChartで散布図とXYプロットを描く。
今回はこれの移植。
コードはこんな感じで。ChatGPTにいろいろ教えてもらいながらできた。
(ns mini.interpolation
(:import [org.apache.commons.math3.analysis.interpolation AkimaSplineInterpolator LinearInterpolator]
[org.jfree.data.xy XYSeriesCollection XYSeries]
[org.jfree.chart ChartFactory ChartPanel]
[org.jfree.chart.renderer.xy XYLineAndShapeRenderer]
[javax.swing JFrame]))
(def n 10)
(def m 50)
(def x (make-array Double/TYPE n))
(def y (make-array Double/TYPE n))
(def xval (make-array Double/TYPE m))
(def yline (make-array Double/TYPE m))
(def yakima (make-array Double/TYPE m))
(dotimes [i n]
(aset x i (/ (* 2 Math/PI i) (dec n)))
(aset y i (Math/sin (aget x i))))
;; ここで interpolate して関数を作る
(def linearFn (.interpolate (LinearInterpolator.) x y))
(def akimaFn (.interpolate (AkimaSplineInterpolator.) x y))
(doseq [i (range m)]
(aset xval i (/ (* 2 Math/PI i) (dec m)))
(aset yline i (.value linearFn (aget xval i)))
(aset yakima i (.value akimaFn (aget xval i))))
(defn create-dataset []
(let [series (XYSeries. "data")
series2 (XYSeries. "linear")
series3 (XYSeries. "akima")]
;; 元データ
(dotimes [i n]
(.add series (aget x i) (aget y i)))
;; 線形補間
(dotimes [i m]
(.add series2 (aget xval i) (aget yline i))
(.add series3 (aget xval i) (aget yakima i)))
(doto (XYSeriesCollection.)
(.addSeries series)
(.addSeries series2)
(.addSeries series3))))
(defn create-chart [dataset]
(ChartFactory/createXYLineChart
"Interpolation"
"x-axis"
"y-axis"
dataset))
(defn display-chart [chart]
(let [frame (JFrame. "Intterpolation")
plot (.getXYPlot chart)
renderer (XYLineAndShapeRenderer.)
chart-panel (ChartPanel. chart)]
(.setSeriesLinesVisible renderer 0 false) ; 点だけ表示
(.setSeriesShapesVisible renderer 1 false) ; 線だけ
(.setSeriesShapesVisible renderer 2 false) ; 線だけ
(.setRenderer plot renderer)
(doto frame
(.add chart-panel)
(.pack)
(.setVisible true))))
(defn -main []
(let [dataset (create-dataset)
chart (create-chart dataset)]
(display-chart chart)))
(-main)
|
結果はこちら。
« 高周波・RFニュース 2025年12月3日 Samsungが三つ折りスマホGalaxy Z TriFold発表、Nordicがヘルスケア向け新Bluetooth SoC発表、太陽誘電が2012-100μFの基板内蔵MLCC発表、TechInsightsがiPhone AirのほうがGalaxy S25 Edgeより2%コスト高と分析、など | トップページ | 高周波・RFニュース 2025年12月4日 Industrial Growth PartnersがMarki Microwaveを買収、MarvellがCelestial AIを買収、SiTimeがルネサスのタイミング事業買収か?という報道、光・電気通信の相互運用性ウェビナー開催 »
「パソコン・インターネット」カテゴリの記事
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年12月12日 iFixitが水冷スマホRedMagic 11 Proを分解、Qorvoがロボット向けの技術を紹介、SamsungとKTが6Gに向けAI-RANを実証、NordicがnRF9151向けソフトと開発キット発表、Taoglasが6G向けアンテナ設計解説など(2025.12.12)
- 高周波・RFニュース 2025年12月11日 Qualcommが6Gに向けたOBBB法解説、GSMAが欧州のスペクトラム価格についての報告、Menlo Microが防衛向けに高スタンドオフ保護ミリ波スイッチ発表、京セラとローデ&シュワルツがCES2026でミリ波PAAMデモ、iFIxitのスマホアプリ(2025.12.11)
- 高周波・RFニュース 2025年12月10日 Sivers semiconductorとDigiKeyがパートナーシップ締結、u-bloxが車載Bluetothモジュール発表、TDKが車載パワーインダクタ発表、世界の6GHz Wi-Fi普及状況解説(2025.12.10)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年12月12日 iFixitが水冷スマホRedMagic 11 Proを分解、Qorvoがロボット向けの技術を紹介、SamsungとKTが6Gに向けAI-RANを実証、NordicがnRF9151向けソフトと開発キット発表、Taoglasが6G向けアンテナ設計解説など(2025.12.12)
- 高周波・RFニュース 2025年12月11日 Qualcommが6Gに向けたOBBB法解説、GSMAが欧州のスペクトラム価格についての報告、Menlo Microが防衛向けに高スタンドオフ保護ミリ波スイッチ発表、京セラとローデ&シュワルツがCES2026でミリ波PAAMデモ、iFIxitのスマホアプリ(2025.12.11)
- Google ColabでAPIキーなしにAIモデル(Gemini 2.5 flashなど)が使えるようになっていた。早速電子レンジの動作原理について聞いてみる。正しく2.45GHzは水分子の共振周波数ではない、と答えられた。(2025.12.10)
- 高周波・RFニュース 2025年12月10日 Sivers semiconductorとDigiKeyがパートナーシップ締結、u-bloxが車載Bluetothモジュール発表、TDKが車載パワーインダクタ発表、世界の6GHz Wi-Fi普及状況解説(2025.12.10)
« 高周波・RFニュース 2025年12月3日 Samsungが三つ折りスマホGalaxy Z TriFold発表、Nordicがヘルスケア向け新Bluetooth SoC発表、太陽誘電が2012-100μFの基板内蔵MLCC発表、TechInsightsがiPhone AirのほうがGalaxy S25 Edgeより2%コスト高と分析、など | トップページ | 高周波・RFニュース 2025年12月4日 Industrial Growth PartnersがMarki Microwaveを買収、MarvellがCelestial AIを買収、SiTimeがルネサスのタイミング事業買収か?という報道、光・電気通信の相互運用性ウェビナー開催 »



コメント