Abbruchbedingung- Iteratives Verfahren

Midorima

Mitglied
Moin Moin Freunde der Sonne,

ich habe da so ein kleines Problem und verstehe nicht wirklich woran es liegen kann.
Es handelt sich um folgendes: Ich solle ein iteratives Verfahren anwenden und dieses solange durchlaufen lassen bis es eine gewisse Genauigkeit erreicht in dem Fall auf 1*10^-5
Das ganze habe ich in eine while Schleife verpackt.
Wie müsste die Abbruchbedingung lauten? Denn bei mir vergleicht er den alten Wert und neuen Wert und gibt danach nichts mehr aus obwohl sie nicht identisch sind.
Ich hoffe ihr könnt mir helfen und bedanke mich schonmal!
Java:
import java.text.*;

import java.util.Scanner;

 
public class jacobi1 {
	
	public static void main (String[] args){
	NMatrix();
	
		}

	 private static void NMatrix (){
		 
		 	System.out.println("Please enter gamma");
		    Scanner s = new Scanner(System.in);
		    double gamma;
		    gamma = s.nextDouble();
		    int Schritt = 0;
		  
		  
			// startwert x
		    double [] x1 = new double [9];
			for ( int a = 0 ; a<= 8 ;a++){
				x1[a]= 1;
				
			}
			
		    
			  // ausgangsmatrix A addiert mit gamma
			  
//			double [][] A = new double [][]{{4+gamma,-1,0,-1,0,0,0,0,0},
//											{-1,4+gamma,-1,0,-1,0,0,0,0},
//											{0,-1,4+gamma,0,0,-1,0,0,0},
//											{-1,0,0,4+gamma,-1,0,-1,0,0},
//											{0,-1,0,-1,4+gamma,-1,0,-1,0}, 
//											{0,0,-1,0,-1,4+gamma,0,0,-1},
//											{0,0,0,-1,0,0,4+gamma,-1,0},
//											{0,0,0,0,-1,0,-1,4+gamma,-1},
//											{0,0,0,0,0,-1,0,-1,4+gamma}};
			
			
			
			// L+U von A
			double [][] L_U = new double [][]{	{0,-1,0,-1,0,0,0,0,0},
												{-1,0,-1,0,-1,0,0,0,0},
												{0,-1,0,0,0,-1,0,0,0},
												{-1,0,0,0,-1,0,-1,0,0},
												{0,-1,0,-1,0,-1,0,-1,0},
												{0,0,-1,0,-1,0,0,0,-1},
												{0,0,0,-1,0,0,0,-1,0},
												{0,0,0,0,-1,0,-1,0,-1},
												{0,0,0,0,0,-1,0,-1,0}};		
			
			//inverse D von "aufgesplittenen" matrix A = L + U + D
			
			double [][] Dinv = new double [][]{	{1/(4+gamma),0,0,0,0,0,0,0,0},
												{0,1/(4+gamma),0,0,0,0,0,0,0},
												{0,0,1/(4+gamma),0,0,0,0,0,0},
												{0,0,0,1/(4+gamma),0,0,0,0,0},
												{0,0,0,0,1/(4+gamma),0,0,0,0},
												{0,0,0,0,0,1/(4+gamma),0,0,0},
												{0,0,0,0,0,0,1/(4+gamma),0,0},
												{0,0,0,0,0,0,0,1/(4+gamma),0},
												{0,0,0,0,0,0,0,0,1/(4+gamma)}};
			double [] loesung = new double [9];
			
			
			s.close();
			
			
			double [] ersteVektor = new double [9];
			double summe=0;
			double summe3=0;
			
			
			
			
			int iterations = 0;
			while(true){ 
				iterations++;
			
			// multiplikation ( (L+U)*x )
			for (int g=0;g<=8; g++) {
			    	for (int k=0;k<=8;k++) {
				    summe=summe+(L_U[g][k]*x1[k]);
			    	}
				ersteVektor[g]=summe;
				summe=0.0;	    
			}
			
			// initialisiere b 
			double [] b = new double [9];
			for ( int a = 0 ; a<= 8 ;a++){
				b[a]= 1;
				}
			
			// b-(L+U)*x
		double [] zweiterVektor = new double [9];
		for (int t=0; t<=8; t++) {
		    
			zweiterVektor[t]= b[t]-ersteVektor[t];
		}
		
		
			// D^-1 *(b-(L+U)*x)
		
		
		
		for (int o=0;o<=8; o++){
					    	
		    	for (int k=0;k<=8;k++) {
		    		
			    summe3=summe3+(Dinv[o][k]*zweiterVektor[k]);
		    	}
			loesung[o]=summe3;
			summe3=0.0;
			if(x1==loesung) break;
			Schritt++;
	    	x1=loesung;
		
			
		    
		
			
		

		
			
	    	for (int l = 0; l <= 8; ++l) {
	    		
	    		System.out.print(loesung[l] + "\t");
	    		
	    	}
	    	
	    	System.out.println(" ");	
	    			
				
	
			}// ende von while
		
	  System.out.print(Schritt + " Iterations");
	 
	
			
			
	 }
}}
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Wie wäre es wenn du so eine Prüfung machen würdest:
Code:
if((Math.abs(alterWert-neuerWert) < 1*10^-5) {
          // Resultat ist genug genau .
}
else {
   // Resultat ist noch nicht genug genau 
}
 

arilou

Bekanntes Mitglied
while( true )
ist eigentlich immer falsch. Was du möchtest ist doch
while( Zielgenauigkeit nicht erreicht ) {
// bestimme präziseres Ergebnis
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Konsoleneingabe mit Abbruchbedingung beenden Java Basics - Anfänger-Themen 11
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Variablen Abbruchbedingung: Dezimalzahl Java Basics - Anfänger-Themen 32
F Abbruchbedingung einer For-Schleife Java Basics - Anfänger-Themen 5
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
S Abbruchbedingung Java Basics - Anfänger-Themen 11
A Frage zur Abbruchbedingung Rekursion Java Basics - Anfänger-Themen 8
A for Schleife Abbruchbedingung Java Basics - Anfänger-Themen 9
C Schleife mit Abbruchbedingung Java Basics - Anfänger-Themen 6
S Wuerfeln über Schleifen, Abbruchbedingung Java Basics - Anfänger-Themen 6
J Stackoverflow-Abbruchbedingung Java Basics - Anfänger-Themen 7
M EInfaches Addieren mit Abbruchbedingung Java Basics - Anfänger-Themen 9
G Abbruchbedingung für Timer Java Basics - Anfänger-Themen 3
R Abbruchbedingung readObject (deserialisieren) Java Basics - Anfänger-Themen 31
G Abbruchbedingung Java Basics - Anfänger-Themen 18
L Quadratwurzelrechnung mittels Heron-Verfahren Java Basics - Anfänger-Themen 6
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
M Heron Verfahren Java Basics - Anfänger-Themen 3
G Jacobi-Verfahren Java Basics - Anfänger-Themen 6
A RSA - Verfahren Java Basics - Anfänger-Themen 2
K Doublettenprüfung mit statistischen Verfahren Java Basics - Anfänger-Themen 4
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
L Gauß-Seidel Verfahren, logischer Fehler Java Basics - Anfänger-Themen 16
G OnlineBanking TAN-Verfahren! Java Basics - Anfänger-Themen 35
B Bubblesort Verfahren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben