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 Jacobiego - Implementacja w Java
Ocena użytkownikóww: *****  / 10
SłabyŚwietny
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;
	}

}
Dodaj komentarz