« 「成瀬は都を駆け抜ける」を読んだ。大学も学部も私と一緒になった成瀬。とにかくキャラが強くてぶれなくて面白い。よく知っている場所がたくさん出るのも森見登美彦作品が出るのもいい。第一作の最初のセリフが驚く場所で出て来たり。最後はやっぱり島崎と滋賀でグッとくる。 | トップページ | 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など »

2025年12月12日 (金)

Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(4) 多項式フィッティング(今回は3次)をしてJFreeChartでプロットする。

今回はこの例題。

 Javaの数値計算ライブラリApache Commons Mathを使う(4) 多項式フィッティング(今回は3次)をしてJFreeChartでプロットする。

コードはこんな感じで。


(ns mini.polynomialFit
  (:import [javax.swing JFrame]
           [java.awt BorderLayout]
           [org.jfree.chart ChartFactory ChartPanel]
           [org.jfree.chart.plot PlotOrientation]
           [org.jfree.chart.renderer.xy XYLineAndShapeRenderer]
           [org.jfree.chart.axis NumberAxis]
           [org.jfree.data.xy XYSeries XYSeriesCollection]
           [org.apache.commons.math3.analysis.polynomials PolynomialFunction]
           [org.apache.commons.math3.fitting PolynomialCurveFitter WeightedObservedPoints]))

(defn create-data []
  (let [x (double-array [0.0 1.0 2.0 3.0 4.0 5.0])
        y (double-array [0.0 0.8 0.9 0.1 -0.8 -1.0])
        obs (WeightedObservedPoints.)]
    ;; add original points
    (dotimes [i (alength x)]
      (.add obs (aget x i) (aget y i)))
    ;; fit cubic polynomial
    (let [fitter (PolynomialCurveFitter/create 3)
          coeff (.fit fitter (.toList obs))
          poly (PolynomialFunction. coeff)
          n 600
          xval (double-array n)
          yval (double-array n)]
      (dotimes [i n]
        (let [xi (+ -2.0 (* (/ (- 6.0 -2.0) (dec n)) i))]
          (aset xval i xi)
          (aset yval i (.value poly xi))))
      ;; build dataset
      (let [data (XYSeriesCollection.)
            s1 (XYSeries. "Original Points")
            s2 (XYSeries. "Cubic Fitting")]
        (dotimes [i (alength x)]
          (.add s1 (aget x i) (aget y i)))
        (dotimes [i n]
          (.add s2 (aget xval i) (aget yval i)))
        (.addSeries data s1)
        (.addSeries data s2)
        data))))

(defn create-chart []
  (let [chart (ChartFactory/createXYLineChart
               "Polynomial Fitting"
               "x"
               "y"
               (create-data)
               PlotOrientation/VERTICAL
               true
               false
               false)
        plot (.getXYPlot chart)
        renderer (XYLineAndShapeRenderer.)]
    ;; set styles
    (let [y-axis ^NumberAxis (.getRangeAxis plot)]
      (.setRange y-axis -2.0 2.0))
    (.setSeriesLinesVisible renderer 0 false)
    (.setSeriesShapesVisible renderer 1 false)
    (.setRenderer plot renderer)
    chart))

(defn -main [& _]
  (let [frame (JFrame. "Cubic Polynomial Fitting")
        chart (create-chart)
        panel (ChartPanel. chart)]
    (.setDefaultCloseOperation frame JFrame/EXIT_ON_CLOSE)
    (.setBounds frame 10 10 640 480)
    (.add (.getContentPane frame) panel BorderLayout/CENTER)
    (.setVisible frame true)))
(-main)

結果はこちら。

Clojurepolynomial1

« 「成瀬は都を駆け抜ける」を読んだ。大学も学部も私と一緒になった成瀬。とにかくキャラが強くてぶれなくて面白い。よく知っている場所がたくさん出るのも森見登美彦作品が出るのもいい。第一作の最初のセリフが驚く場所で出て来たり。最後はやっぱり島崎と滋賀でグッとくる。 | トップページ | 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など »

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

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

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

コメント

コメントを書く

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

« 「成瀬は都を駆け抜ける」を読んだ。大学も学部も私と一緒になった成瀬。とにかくキャラが強くてぶれなくて面白い。よく知っている場所がたくさん出るのも森見登美彦作品が出るのもいい。第一作の最初のセリフが驚く場所で出て来たり。最後はやっぱり島崎と滋賀でグッとくる。 | トップページ | 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など »

最近の記事

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