Friday, March 6, 2015

Gauss Seidel method in Java

Wikipedia

double s1;

double s2;
int loop;
double[] x;
public double[] gaussSeidel(final double[][] a,double[] b,double[] start){
    double e=0.5*pow(10,-6);
    x=copy(start);
    final int n=start.length;
    double[] prev;
    do{
        prev=copy(x);
        for (loop = 0; loop < n; loop++) {
            s1=0;
            s2=0;
            Thread t1 = new Thread() {
                @Override
                public void run() {
                    for (int j = 0; j < loop; j++) {
                        s1 += a[loop][j] * x[j];
                    }
                }
            };
            Thread t2 = new Thread() {
                @Override
                public void run() {
                    for (int k = loop + 1; k < n; k++) {
                        s2 += a[loop][k] * x[k];
                    }
                }
            };
            t1.start();
            t2.start();
            try {
                t1.join();
                t2.join();
            } catch (InterruptedException ex) {

            }
            x[loop] = (1.0 / a[loop][loop]) * (b[loop]-s1-s2);
        }
    }while(normInf(dif(x,prev))>=e);
    return x;
}

This is part of the Matrices project.Refer to Basic matrix calculations in Java for the missing secondary methods.

No comments: