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)
|
結果はこちら。
« 「成瀬は都を駆け抜ける」を読んだ。大学も学部も私と一緒になった成瀬。とにかくキャラが強くてぶれなくて面白い。よく知っている場所がたくさん出るのも森見登美彦作品が出るのもいい。第一作の最初のセリフが驚く場所で出て来たり。最後はやっぱり島崎と滋賀でグッとくる。 | トップページ | 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など »
「パソコン・インターネット」カテゴリの記事
- Google Antigravityで作った任意のポート数のTouchstone形式のSパラメータファイルを読み込み、dB、位相、スミスチャートを描くアプリSparameterViewerにTDR(Time Domain Reflectometry)機能を組み込む。サンプルコード3行渡せば1分もかからないで完成。(2026.01.15)
- RF Weekly Digest (Gemini 3 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2026/1/4-2026/1/11(2026.01.12)
- Google Antigravityで任意のポート数のTouchstone形式のSパラメータファイルを読み込み、dB、位相、スミスチャートを描くアプリSparameterViewerを作る。インストールしてすぐ一発で動くものができ、何度かやり取りしてほしいものが完璧にできた。これがVibe codingか…(2026.01.13)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2026年1月16日 Microwave JournalにDirect RF特集記事、NXPが5G RF事業を縮小、RCRTechのテスト・計測についてのレポート、MediaTekがDimensity 9500sと8000を発表、TDKの車載チップバリスタ、I-PEXのロック付きRF同軸コネクタ(2026.01.16)
- 高周波・RFニュース 2026年1月15日 IEEE Microwave MagazineはCMOS LNAレビューなど、Journal of Microwavesはアボカドのマイクロ波イメージングなど、LitePointが3つのワイヤレストレンドを調査、Ericsson ConsumerLabのCSP差別化レポート、Motorola Moto G Power 2026 分解(2026.01.15)
- 高周波・RFニュース 2026年1月12日 VIAVIが拡張現実を使ってRF信号を可視化するソリューション発表、Mini-CircuitsがMMICゲインイコライザ発売、LitePointがQualcommのWi-Fi 8テスト実証、低周波線路シミュレーション技術、Xiaomi Poco F8 Ultra分解動画など(2026.01.12)
- Google Antigravityで作った任意のポート数のTouchstone形式のSパラメータファイルを読み込み、dB、位相、スミスチャートを描くアプリSparameterViewerにTDR(Time Domain Reflectometry)機能を組み込む。サンプルコード3行渡せば1分もかからないで完成。(2026.01.15)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2026年1月16日 Microwave JournalにDirect RF特集記事、NXPが5G RF事業を縮小、RCRTechのテスト・計測についてのレポート、MediaTekがDimensity 9500sと8000を発表、TDKの車載チップバリスタ、I-PEXのロック付きRF同軸コネクタ(2026.01.16)
- 高周波・RFニュース 2026年1月15日 IEEE Microwave MagazineはCMOS LNAレビューなど、Journal of Microwavesはアボカドのマイクロ波イメージングなど、LitePointが3つのワイヤレストレンドを調査、Ericsson ConsumerLabのCSP差別化レポート、Motorola Moto G Power 2026 分解(2026.01.15)
- 高周波・RFニュース 2026年1月12日 VIAVIが拡張現実を使ってRF信号を可視化するソリューション発表、Mini-CircuitsがMMICゲインイコライザ発売、LitePointがQualcommのWi-Fi 8テスト実証、低周波線路シミュレーション技術、Xiaomi Poco F8 Ultra分解動画など(2026.01.12)
- Google Antigravityで作った任意のポート数のTouchstone形式のSパラメータファイルを読み込み、dB、位相、スミスチャートを描くアプリSparameterViewerにTDR(Time Domain Reflectometry)機能を組み込む。サンプルコード3行渡せば1分もかからないで完成。(2026.01.15)
« 「成瀬は都を駆け抜ける」を読んだ。大学も学部も私と一緒になった成瀬。とにかくキャラが強くてぶれなくて面白い。よく知っている場所がたくさん出るのも森見登美彦作品が出るのもいい。第一作の最初のセリフが驚く場所で出て来たり。最後はやっぱり島崎と滋賀でグッとくる。 | トップページ | 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など »



コメント