Nadesłany przez Tomasz Lubiński, 08 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Jacobi.java:
// Metoda Jacobiego
// www.algorytm.org
// (c) 2006 Tomasz Lubinski
public class Jacobi {
private static double A[][];
private static double M[][];
private static double N[];
private static double b[];
private static double x1[];
private static double x2[];
/**
* @param args
*/
public static void main(String[] args) {
int num, iter;
int i, j, k;
// Get n
System.out.println("Metoda Jacobiego");
System.out.println("Rozwiazywanie ukladu n-rownan z n-niewiadomymi Ax=b");
System.out.println("Podaj n");
num = Console.readInt("");
if (num < 1) {
System.out.println("Nieprawidlowa warosc parametru n");
return;
}
A = new double[num][num];
M = new double[num][num];
N = new double[num];
b = new double[num];
x1 = new double[num];
x2 = new double[num];
// Get values of A
for (i=0; i<num; i++)
for (j=0; j<num; j++) {
System.out.println("A["+(i+1)+"]["+(j+1)+"] = ");
A[i][j] = Console.readDouble("");
if ((i == j) && (A[i][j] == 0)){
System.out.println("Wartosci na przekatnej musza byc rozne od 0");
return;
}
}
// Get values of b
for (i=0; i<num; i++) {
System.out.println("b["+(i+1)+"] = ");
b[i] = Console.readDouble("");
}
// Calculate N = D^-1
for (i=0; i<num; i++)
N[i] = 1/A[i][i];
// Calculate M = -D^-1 (L + U)
for (i=0; i<num; i++)
for (j=0; j<num; j++)
if (i == j)
M[i][j] = 0;
else
M[i][j] = - (A[i][j] * N[i]);
//Initialize x
for (i=0; i<num; i++)
x1[i] = 0;
System.out.println("Ile iteracji algorytmu wykonac?");
iter = Console.readInt("");
for (k=0; k<iter; k++) {
for (i=0; i<num; i++) {
x2[i] = N[i]*b[i];
for (j=0; j<num; j++)
x2[i] += M[i][j]*x1[j];
}
for (i=0; i<num; i++)
x1[i] = x2[i];
}
System.out.println("Wynik");
for (i=0; i<num; i++)
System.out.println("x["+(i+1)+"] = " + x1[i]);
return;
}
}

