Javaの数値計算ライブラリApache Commons Mathを使う(2) 補間を行う(Interpolate) リニア、Akimaスプラインなどいろいろある。JFreeChartで散布図とXYプロットを描く。
今回は補間。
いろいろあるがリニアとAkima(秋間)スプラインを使ってみよう。
コードはこんな感じ。
import org.apache.commons.math3.analysis.UnivariateFunction;
import org.apache.commons.math3.analysis.interpolation.AkimaSplineInterpolator;
import org.apache.commons.math3.analysis.interpolation.LinearInterpolator;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class Interpolation extends JFrame {
public static void main(String[] args) {
Interpolation frame = new Interpolation();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 640, 480);
frame.setTitle("Interpolation");
frame.setVisible(true);
}
public Interpolation() {
JFreeChart chart =
ChartFactory.createXYLineChart("Interpolation",
"x",
"y",
createData(),
PlotOrientation.VERTICAL,
true,
false,
false);
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer =new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, false);
renderer.setSeriesShapesVisible(1, false);
renderer.setSeriesShapesVisible(2, false);
plot.setRenderer(renderer);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private XYSeriesCollection createData(){
int n = 10;
double[] x = new double[n];
double[] y = new double[n];
for (int i = 0; i < n; i++) {
x[i] = 2.0 * Math.PI * (double)i / (double)(n - 1);
y[i] = Math.sin(x[i]);
}
int m = 50;
double[] xval = new double[m];
double[] yline = new double[m];
double[] yakima = new double[m];
LinearInterpolator linearInterpolator = new LinearInterpolator();
AkimaSplineInterpolator akimaSplineInterpolator = new AkimaSplineInterpolator();
UnivariateFunction lineFunction = linearInterpolator.interpolate(x, y);
UnivariateFunction akimaFunction = akimaSplineInterpolator.interpolate(x, y);
for (int i = 0; i < m; i++) {
xval[i] = 2.0 * Math.PI * (double)i / (double)(m - 1);
yline[i] = lineFunction.value(xval[i]);
yakima[i] = akimaFunction.value(xval[i]);
}
XYSeriesCollection data = new XYSeriesCollection();
XYSeries series1 = new XYSeries("Original Points");
for (int i = 0 ; i < n ; i++){
series1.add(x[i], y[i]);
}
XYSeries series2 = new XYSeries("Linear");
for (int i = 0 ; i < m ; i++){
series2.add(xval[i], yline[i]);
}
XYSeries series3 = new XYSeries("Spline");
for (int i = 0 ; i < m ; i++){
series3.add(xval[i], yakima[i]);
}
data.addSeries(series1);
data.addSeries(series2);
data.addSeries(series3);
return data;
}
}
|
実行結果。
ちゃんと補間されている。
« ルクア大阪 11階 風の広場から下を見る。 | トップページ | 阪急清荒神駅から歩いて清荒神清澄寺でお参り。 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/7/5-7/12(2026.07.12)
- Grok 4.5(Grok Build)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。エラーもなく一発で動くものができた。ただFreeだと1日のリミットが結構厳しめ。(2026.07.13)
- RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/28-7/5(2026.07.05)
- Ornith-1.0-35B(llama.cppで4ビット量子化使用)に、電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。(2026.07.03)
- Ornith-1.0-35B(llama.cppで4ビット量子化使用、DuckDuckGo Searchも)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。足りない情報は検索してプランも立ててまずまずの出来。(2026.07.02)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2026年月16日 Microwave JournalでCadenceのRF設計向けAI紹介、Samtecが30°傾いた1.85mmコネクタ発表、Mini-CircuitsのMMICアッテネータ紹介、SEMCOがAI向けMLCC発表など(2026.07.16)
- 高周波・RFニュース 2026年7月15日 IEEE Microwave Magazineで自分のコードを高周波シミュレータに組み込む等、DeepSigがAIベースのRF検出OminiSIG 4.0発表、BroadcomのWi-Fi 8 SoC解説、GSMAがモバイルネットゼロレポート発行など(2026.07.15)
- 高周波・RFニュース 2026年7月14日 KeysightとRCRTechが6Gウェビナー開催、Copper Mountain Technologiesの新低価格4ポートVNA、フジクラの5G Sub6GHz向け漏洩同軸ケーブル、TDKのパワー半導体向けMLCCアプリケーションガイドなど(2026.07.14)
- RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/7/5-7/12(2026.07.12)
- Grok 4.5(Grok Build)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。エラーもなく一発で動くものができた。ただFreeだと1日のリミットが結構厳しめ。(2026.07.13)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2026年月16日 Microwave JournalでCadenceのRF設計向けAI紹介、Samtecが30°傾いた1.85mmコネクタ発表、Mini-CircuitsのMMICアッテネータ紹介、SEMCOがAI向けMLCC発表など(2026.07.16)
- 高周波・RFニュース 2026年7月15日 IEEE Microwave Magazineで自分のコードを高周波シミュレータに組み込む等、DeepSigがAIベースのRF検出OminiSIG 4.0発表、BroadcomのWi-Fi 8 SoC解説、GSMAがモバイルネットゼロレポート発行など(2026.07.15)
- 高周波・RFニュース 2026年7月14日 KeysightとRCRTechが6Gウェビナー開催、Copper Mountain Technologiesの新低価格4ポートVNA、フジクラの5G Sub6GHz向け漏洩同軸ケーブル、TDKのパワー半導体向けMLCCアプリケーションガイドなど(2026.07.14)
- RF Weekly Digest (Codex(GPT-5.5)で作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/7/5-7/12(2026.07.12)
- Grok 4.5(Grok Build)でPythonのscikit-rfを使ってTouchstoneフォーマットのSパラメータファイルを読んでdB, 位相, スミスチャート, TDRを表示するGUIアプリを作成。エラーもなく一発で動くものができた。ただFreeだと1日のリミットが結構厳しめ。(2026.07.13)



コメント