一つ前に戻る

JScience を利用して、複素数の連立方程式の解法

Jakarta Commons Mathが、あるのに、なぜ、JScienceも利用したかというと、Jakarta には、複素数の行列の逆行列を算出するAPIがないのです。
JScienceには、複素数行列の逆行列をサポートしているので、自分で、逆行列のプログラムを作らず、既製品を探している人には良いかもしれません。
私は、これだけの為に、JScienceを導入しました。

先ずは、JScienceの入手先は

http://jscience.org/

の Get Libraryより、

jscience-4.3.1-bin.zip

を、入手、これを展開して、IDEのライブラリーに jscience.jar を アマウントするだけです。導入方法は、Jakartaと同じです。

当ホームページの複素数計算例の

http://www.geocities.jp/tomtomf/denki/AC3/ac3.htm

を,java で計算した、サンプルコードを、例示したいと思います。

              サンプルコード

        //複素数配列を作り値を代入する
        Complex [][] d ={{Complex.valueOf(1.0, 0.0),Complex.valueOf(-1.0, 0.0),Complex.valueOf(-1.0, 0.0)},
        {Complex.valueOf(0.0,0.0),Complex.valueOf(30.0, 40.0),Complex.valueOf(0.0, 0.0)},
        {Complex.valueOf(0.0, 0.0),Complex.valueOf(0.0, 0.0),Complex.valueOf(40.0, -30.0)}};

        //上記配列を行列計算用配列に代入する  配列1
        ComplexMatrix cm =ComplexMatrix.valueOf(d);

        //上記操作と同様に、配列計算用複素数配列に値を代入する
        Complex [][] da ={{Complex.valueOf(0.0, 0.0)},{Complex.valueOf(100.0, 0.0)},{Complex.valueOf(100.0,0.0)}};
        //配列2
        ComplexMatrix cm1 = ComplexMatrix.valueOf(da);

        //配列1の逆行列に配列2の積を、複素配列anに代入する
        ComplexMatrix an = cm.inverse().times(cm1);

        //計算結果の出力
        show(an);


//計算結果の出力様関数
    private void show(ComplexMatrix cm) {

        for(int i=0;i<cm.getNumberOfRows();++i){
            for(int j=0;j<cm.getNumberOfColumns();++j){
                System.out.print(cm.get(i, j).toString()+"     ");
            }
            System.out.println();
        }
    }

計算結果
2.7999999999999998 - 0.40000000000000013i     
1.2 - 1.6i     
1.6 + 1.2i   


勘違いすると、問題なので、注意を追記します。Jakarta Commons MathとJScienseが混在した場合は、
ComplexMatrixに利用されるComplexは、JScienseのComplexを利用しないと、駄目です。(初心者用の注記)

既製品のAPIを使うと、プログラムソースが、すっきりします。