« 高周波・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がルネサスのタイミング事業買収か?という報道、光・電気通信の相互運用性ウェビナー開催 »

2025年12月 3日 (水)

Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(2) 補間を行う(Interpolate) リニア、Akimaスプラインなどいろいろある。JFreeChartで散布図とXYプロットを描く。

今回はこれの移植。

 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)

結果はこちら。

Clojureinterp1

 

 

« 高周波・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月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がルネサスのタイミング事業買収か?という報道、光・電気通信の相互運用性ウェビナー開催 »

最近の記事

2025年12月
  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 31      
無料ブログはココログ
フォト