algorytm.org

Implementacja w Java

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Metoda Gaussa - Seidela - Implementacja w Java
Ocena użytkownikóww: *****  / 6
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 13 marca 2006 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.

GS.java:
// Metoda Gaussa-Seidela
// www.algorytm.org
// (c) 2006 Tomasz Lubinski

public class GS {

	private static double A[][];
	private static double L[][];
	private static double D[][];
	private static double U[][];
	private static double b[];
	private static double x[];

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		   int n, iter;
		   int i, j, k;

		   // Get n
		   System.out.println("Metoda Gaussa-Seidela");
		   System.out.println("Rozwiazywanie ukladu n-rownan z n-niewiadomymi Ax=b");
		   System.out.println("Podaj n");
		   n = Console.readInt("");
		   if (n < 1) {
		      System.out.println("Nieprawidlowa warosc parametru n");
		      return;
		   }

		   A = new double[n][n];
		   L = new double[n][n];
		   D = new double[n][n];
		   U = new double[n][n];
		   b = new double[n];
		   x = new double[n];

		   // Get values of A
		   for (i=0; i<n; i++)
		      for (j=0; j<n; 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<n; i++) {
		      System.out.println("b["+(i+1)+"] = ");
		      b[i] = Console.readDouble("");
		   }

		   // Divide A into L + D + U
		   for (i=0; i<n; i++)
		      for (j=0; j<n; j++) {
		         if (i < j) {
		            U[i][j] = A[i][j];
		         }
		         else if (i > j) {
		            L[i][j] = A[i][j];
		         }
		         else {
		            D[i][j] = A[i][j];
		         }
		      }

		   // Calculate D^-1
		   for (i=0; i<n; i++)
		      D[i][i] = 1/D[i][i];

		   // Calculate D^-1 * b
		   for (i=0; i<n; i++)
		      b[i] *= D[i][i];

		   //Calculate D^-1 * L
		   for (i=0; i<n; i++)
		      for (j=0; j<i; j++)
		         L[i][j] *= D[i][i];

		   //Calculate D^-1 * U
		   for (i=0; i<n; i++)
		      for (j=i+1; j<n; j++)
		         U[i][j] *= D[i][i];

		   //Initialize x
		   for (i=0; i<n; i++)
		      x[i] = 0;

		   System.out.println("Ile iteracji algorytmu wykonac?");
		   iter = Console.readInt("");

		   for (k=0; k<iter; k++)
		      for (i=0; i<n; i++) {
		         x[i] = b[i];                       // x = D^-1*b -
		         for (j=0; j<i; j++)
		            x[i] -= L[i][j]*x[j];    // D^-1*L * x -
		         for (j=i+1; j<n; j++)
		            x[i] -= U[i][j]*x[j];    // D^-1*U * x
		      }

		   System.out.println("Wynik");
		   for (i=0; i<n; i++)
		      System.out.println("x["+(i+1)+"] = " + x[i]);

		   return;
	}

}
Komentarze
photo
+3 # MichałK123 2014-09-22 09:35
Tylko że u mnie nie działa metoda read int
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz