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:
Post a Comment