Javaの数値計算ライブラリApache Commons Mathを使う(1) 複素行列を定義してLU分解で一次方程式や逆行列、行列式などを計算する。Swingを使ってウィンドウに表示する。
今回はこちらの例題をJavaに移植。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
複素行列のためにはApache Commons Mathのバージョンは3.6.1にしないとだめなのは前回の通り(4.0-beta1から複素数はNumbersライブラリに移ったのでそこの整合がとれてない?)。複素行列のためには
CreateFieldMatrix
を使わないとだめで、実数だけなら
CreateRealMatrix
などでOK。
System.out.printlnは便利だがなんかアプリっぽくないのでSwingを使ってみる。
コードはこんな感じで、
import org.apache.commons.math3.complex.*;
import org.apache.commons.math3.linear.FieldLUDecomposition;
import org.apache.commons.math3.linear.FieldMatrix;
import org.apache.commons.math3.linear.MatrixUtils;
import javax.swing.*;
import java.awt.*;
public class MatrxCalc {
public static void main(String[] args) {
Complex[][] m =
{
{new Complex(2.0, 0.0), new Complex(1.0, 0.0), new Complex(1.0, 0.0)},
{new Complex(-1.0, 0.0), new Complex(1.0, 0.0), new Complex(-1.0, 0.0)},
{new Complex(1.0, 0.0), new Complex(2.0, 0.0), new Complex(3.0, 0.0)}
};
Complex[] v = {
new Complex(2.0, 0.0),new Complex(3.0, 0.0),new Complex(-10.0, 0.0)
};
var A = MatrixUtils.createFieldMatrix(m);
var b = MatrixUtils.createFieldVector(v);
var decomp = new FieldLUDecomposition<Complex>(A);
var solver = decomp.getSolver();
var det = decomp.getDeterminant();
var sol = solver.solve(b);
var inv = solver.getInverse();
JFrame frame = new JFrame("Linear Algebra");
frame.setBounds(100, 100, 640, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));
JTextArea solArea = new JTextArea();
JTextArea detArea = new JTextArea();
JTextArea invArea = new JTextArea();
JLabel solLabel = new JLabel("Solution");
JLabel detLabel = new JLabel("Detarminant");
JLabel invLabel = new JLabel("Inverse Matrix");
solArea.setFont(new Font("Arial", Font.PLAIN, 15));
detArea.setFont(new Font("Arial", Font.PLAIN, 15));
invArea.setFont(new Font("Arial", Font.PLAIN, 15));
p.add(solLabel);
p.add(solArea);
p.add(detLabel);
p.add(detArea);
p.add(invLabel);
p.add(invArea);
String s = "";
for (int i = 0; i < 3; i++) {
s += sol.getEntry(i) + "\n";
}
solArea.append(s);
detArea.append(det.toString());
invArea.append(MatrixString(inv));
frame.getContentPane().add(p, BorderLayout.CENTER);
frame.setVisible(true);
}
private static String MatrixString(FieldMatrix<Complex> m) {
String s = "";
for (int i = 0; i < m.getRowDimension(); i++) {
s += "[";
for (int j = 0; j < m.getColumnDimension(); j++) {
s += m.getEntry(i, j).toString();
if (j < m.getColumnDimension() - 1) {
s += ", ";
}
}
s +="]\n";
}
return s;
}
}
|
実行結果。
なるほど計算できてそうだ。次行ってみよう。
« 高周波・RFニュース 2025年9月1日 Google Pixel 10 Pro XL分解、5Gミリ波AiPは1つで基板間のRFはフレキで基板内は同軸、Ericssonのモバイルイノベーションレポート、Qorvoの5G,SATCOMアレイアンテナ設計ツール、3GPPのRel.19フリーズに向けた動き | トップページ | 高周波・RFニュース 2025年9月2日 Microwave JournalがAI in RFサミット開催、Qualcommが6Gウェビナー開催、GSAが5Gスタンドアロンレポート発行、Samsung Galaxy A17 5G分解動画 »
「パソコン・インターネット」カテゴリの記事
- 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年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年7月9日 KeysightとIEMNが6Gに向けてSubTHzのRIS評価、ローデ・シュワルツとチャイナモバイルが生成AIユーザーエクスペリエンステスト、6G MRSS解説記事、Sパラメータと分布インピーダンス解説記事(2026.07.09)
- 高周波・RFニュース 2026年7月8日 Mini-Circuitsがアディティブフェイズノイズについて解説、ローデシュワルツが品質検査用ミリ波スキャナ発表、UMSが27.5-31GHz 25Wパワーアンプ発表、HuaweiがAI-centricネットワークのマネタイズに向けたロードマップ発表など(2026.07.08)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・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年7月9日 KeysightとIEMNが6Gに向けてSubTHzのRIS評価、ローデ・シュワルツとチャイナモバイルが生成AIユーザーエクスペリエンステスト、6G MRSS解説記事、Sパラメータと分布インピーダンス解説記事(2026.07.09)
- 高周波・RFニュース 2026年7月8日 Mini-Circuitsがアディティブフェイズノイズについて解説、ローデシュワルツが品質検査用ミリ波スキャナ発表、UMSが27.5-31GHz 25Wパワーアンプ発表、HuaweiがAI-centricネットワークのマネタイズに向けたロードマップ発表など(2026.07.08)
« 高周波・RFニュース 2025年9月1日 Google Pixel 10 Pro XL分解、5Gミリ波AiPは1つで基板間のRFはフレキで基板内は同軸、Ericssonのモバイルイノベーションレポート、Qorvoの5G,SATCOMアレイアンテナ設計ツール、3GPPのRel.19フリーズに向けた動き | トップページ | 高周波・RFニュース 2025年9月2日 Microwave JournalがAI in RFサミット開催、Qualcommが6Gウェビナー開催、GSAが5Gスタンドアロンレポート発行、Samsung Galaxy A17 5G分解動画 »



コメント