2013年2月20日水曜日

ガウスの消去法 Javaライブラリ

ガウスの消去法をJavaで解かせるためのライブラリです。
下記リンク内にEclipse用のプロジェクトがあるので、参考にして下さい。
https://docs.google.com/a/sangi.jp/file/d/0B5hI-TWePsTWa3RDSjY4NHlHM1U/edit?usp=sharing

以下ソースコードです。


package Gauss_lib;

//1.Gauss_libクラスのオブジェクト生成
// Gauss_lib gauss_lib = new Gauss_lib(n);//次元数nをコンストラクタに設定
//2.係数行列の引き渡し
//double T[][] = {{2,4,2,8},{4,10,3,17},{3,7,1,11}};
//gauss_lib.setT(T);//係数行列の引き渡し
//3.計算用エンジン呼び出し
//gauss_lib.gauss();//ガウスエンジン呼び出し
//4.解を得る
//x = gauss_lib.getx();//解を取り出す

public class Gauss_lib {
//フィールド
int n;
//配列の初期化
double [] x; //解
double [][] T ;//係数行列格納用配列
//コンストラクタ
public Gauss_lib(int n){
this.n = n;
x = new double[n];//解を代入する配列
T = new double[n][n + 1];//係数行列
}
public int getN(){//数値を出力
return n;
}

public double[] getx(){//解の受け渡し
return x;
}
public void setT(double[][] n){//係数行列の受け渡し
T = n;
}

public  void gauss() {
        int i,j,k,l,pivot;
        double p,q,m;
        double b[] = new double [n + 1];

        for(i=0;i<n;i++) 
        {
                m=0;
                pivot=i;

                for(l=i;l<n;l++) 
                {
                        if(Math.abs(T[l][i])>m) //i列の中で一番値が大きい行を選ぶ 
                        {   
                                m=Math.abs(T[l][i]);
                                pivot=l;
                        }
                }

                if(pivot!=i)    //pivotがiと違えば、行の入れ替え 
                {                          
                        for(j=0;j<n+1;j++) 
                        {
                                b[j]=T[i][j];        
                                T[i][j]=T[pivot][j];
                                T[pivot][j]=b[j];
                        }
                }
        }

        for(k=0;k<n;k++) 
        {
                p=T[k][k];              //対角要素を保存
                T[k][k]=1;              //対角要素は1になることがわかっているから

                for(j=k+1;j<n+1;j++) 
                {
                        T[k][j]/=p;
                }

                for(i=k+1;i<n;i++) 
                {
                        q=T[i][k];

                        for(j=k+1;j<n+1;j++) 
                        {
                                T[i][j]-=q*T[k][j];
                        }
                        T[i][k]=0;              //0となることがわかっているところ
                }
        }

/*解の計算*/
        for(i=n-1;i>=0;i--) 
        {
                x[i]=T[i][n];
                for(j=n-1;j>i;j--) 
                {
                        x[i]-=T[i][j]*x[j];
                }
        }
}
}

2013年2月8日金曜日

UbuntuでEclipseが立ち上がらなくなったときの対応

Ubuntu上でEclipseを動かしていると急に起動出来なくなるときがあります。
その場合はワークスペースを切り替えると起動できますが、毎回切り替えも大変です。

まずワークスペース内の「.metadata」ディレクトリを削除します。
そのあとUbuntuを再起動すれば大丈夫のようです。