« 高周波・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分解動画 »

2025年9月 1日 (月)

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。

https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/linear/MatrixUtils.html

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;
       
    }
}

実行結果。

Javalinear01

なるほど計算できてそうだ。次行ってみよう。

 

« 高周波・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ニュース 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分解動画 »

最近の記事

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