読者です 読者をやめる 読者になる 読者になる

連立方程式

ちょっと連立方程式を解きたいときに計算してくれる電卓のようなものが欲しかったので作った.
http://yambi.mydns.jp/simuleq.html


ガウスの消去法とかを自分で実装するのは面倒だったのでjavaの科学計算用ライブラリjscienceを入れてFloat64Matrixを使った.
http://jscience.org/

ソースはこんなかんじ

import java.util.Scanner;
import java.io.*;
import org.jscience.mathematics.vector.*;
import org.jscience.mathematics.number.*;

public class Simuleq {
    public static void main(String[] args) { new Simuleq().run();}
    void run(){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Float64[][] a = new Float64[n][n];
        Float64[] y = new Float64[n];
        for(int i=0;i<n;++i){
            for(int j=0;j<n;++j)a[i][j]=Float64.valueOf(sc.nextDouble());
            y[i]=Float64.valueOf(sc.nextDouble());
        }

        DenseMatrix<Float64> am = DenseMatrix.valueOf(a);
        DenseVector<Float64> yv = DenseVector.valueOf(y);
        Vector<Float64> xv = am.solve(yv);
        for(int i=0;i<n;++i)System.out.print(xv.get(i)+((i<n-1)?", ":"\n"));
    }
}


ついでに解が有理数の方が便利なことが多いので有理数版も作った.
http://yambi.mydns.jp/rsimuleq.html