<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FGau%C3%9F-Algorithmus%2FMusterloesung</id>
	<title>Javakurs/Übungsaufgaben/Gauß-Algorithmus/Musterloesung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FGau%C3%9F-Algorithmus%2FMusterloesung"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;action=history"/>
	<updated>2026-04-25T04:06:32Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FreitagsrundenWiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;diff=20126&amp;oldid=prev</id>
		<title>MarkusH: fix alignment</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;diff=20126&amp;oldid=prev"/>
		<updated>2013-03-04T18:39:15Z</updated>

		<summary type="html">&lt;p&gt;fix alignment&lt;/p&gt;
&lt;a href=&quot;https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;amp;diff=20126&amp;amp;oldid=17701&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>MarkusH</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;diff=17701&amp;oldid=prev</id>
		<title>92.225.109.177: Die Seite wurde neu angelegt: „==Beispiel-Lösung==   ===Ausgabe der Zwischenschritte sind möglich===  &lt;code&gt;  /*   * @author Sebastian Peuser, c-line@mailbox.tu-berlin.de   */  public class G…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung&amp;diff=17701&amp;oldid=prev"/>
		<updated>2012-03-08T21:00:43Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „==Beispiel-Lösung==   ===Ausgabe der Zwischenschritte sind möglich===  &amp;lt;code&amp;gt;  ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;* @author Sebastian Peuser, c-line@mailbox.tu-berlin.de: &lt;/span&gt;  public class G…“&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Beispiel-Lösung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ausgabe der Zwischenschritte sind möglich===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /*&lt;br /&gt;
  * @author Sebastian Peuser, c-line@mailbox.tu-berlin.de&lt;br /&gt;
  */&lt;br /&gt;
 public class Gauss{&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
        &lt;br /&gt;
        double[][] matrix = {{1,1,1},{43,0,31},{4,0,7}};&lt;br /&gt;
        double [] vector = {2,4,8};&lt;br /&gt;
        &lt;br /&gt;
        /* &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; kann als dritter Parameter uebergeben werden.&lt;br /&gt;
         * &amp;quot;true&amp;quot; -&amp;gt; Zwischenschritte werden auf der Konsole ausgegeben&lt;br /&gt;
         * &amp;quot;false&amp;quot; -&amp;gt; nichts wird ausgegeben&lt;br /&gt;
         */&lt;br /&gt;
        printVector(getSolution(matrix,vector,false));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    /*&lt;br /&gt;
     * Gauss-Jordan-Algorithmus nur fuer eindeutige Gleichungssysteme geeignet (andernfalls wird NULL zurueckgegeben)&lt;br /&gt;
     * matrix[row][column]&lt;br /&gt;
     */&lt;br /&gt;
    public static double[] getSolution(double[][] matrix, double[] vector, boolean printSteps){&lt;br /&gt;
        &lt;br /&gt;
        //Das Gleichungssystem hat keine eindeutige Loesung!&lt;br /&gt;
        if(matrix.length&amp;lt;matrix[0].length){&lt;br /&gt;
            &lt;br /&gt;
            System.out.println(&amp;quot;Gleichungssystem nicht eindeutig loesbar!&amp;quot;);&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        //Merken der Spalte, welche eine Zahl ungleich null besitzt&lt;br /&gt;
        int tmpColumn = -1;&lt;br /&gt;
        &lt;br /&gt;
        //Alle Zeilen durchgehen: Ziel der for-Schleife -&amp;gt; Matrix in Zeilenstufenform bringen!&lt;br /&gt;
        //-&amp;gt; Alle Zahlen unterhalb der Diagonale sind null&lt;br /&gt;
        for(int line=0;line&amp;lt;matrix.length;line++){&lt;br /&gt;
            &lt;br /&gt;
            tmpColumn = -1;&lt;br /&gt;
            &lt;br /&gt;
            //Umformungsschritt 1: Finden einer Spalte mit einem Wert ungleich null&lt;br /&gt;
            for(int column=0;column&amp;lt;matrix[line].length;column++){&lt;br /&gt;
            &lt;br /&gt;
                for(int row=line;row&amp;lt;matrix.length;row++){&lt;br /&gt;
                &lt;br /&gt;
                    if(matrix[row][column]!=0){&lt;br /&gt;
                        tmpColumn = column;&lt;br /&gt;
                        break;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                //Abbruch, zahl ungleich null wurde gefunden&lt;br /&gt;
                if(tmpColumn!=-1){&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
            //NullZeile(n) entdeckt!&lt;br /&gt;
            if(tmpColumn==-1){&lt;br /&gt;
                &lt;br /&gt;
                for(int row=line;row&amp;lt;matrix.length;row++){&lt;br /&gt;
                    &lt;br /&gt;
                    //Gleichungssystem hat keine Loesung!&lt;br /&gt;
                    if(vector[line]!= 0){&lt;br /&gt;
                        &lt;br /&gt;
                        //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                        if(printSteps){&lt;br /&gt;
                            printStep(matrix,vector);&lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
                        System.out.println(&amp;quot;Gleichungssystem besitzt keine Loesung!&amp;quot;);&lt;br /&gt;
                        return null;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                //Nullzeile(n) vorhanden -&amp;gt; Ist das System noch eindeutig loesbar?&lt;br /&gt;
                if(matrix[0].length-1&amp;gt;=line){&lt;br /&gt;
                    &lt;br /&gt;
                    //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                    if(printSteps){&lt;br /&gt;
                        printStep(matrix,vector);&lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    //System nicht eindeutig loesbar.&lt;br /&gt;
                    System.out.println(&amp;quot;Gleichungssystem nicht eindeutig loesbar!&amp;quot;);&lt;br /&gt;
                    return null;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            //Umformungsschritt 2: Die Zahl matrix[line][tmpColumn] soll UNgleich null sein&lt;br /&gt;
            if(matrix[line][tmpColumn]==0){&lt;br /&gt;
            &lt;br /&gt;
                for(int row=line+1;row&amp;lt;matrix.length;row++){&lt;br /&gt;
                &lt;br /&gt;
                    if(matrix[row][tmpColumn]!=0){&lt;br /&gt;
                        &lt;br /&gt;
                        //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                        if(printSteps){&lt;br /&gt;
                            printStep(matrix,vector);&lt;br /&gt;
                            System.out.println(&amp;quot;Zeile &amp;quot;+(line+1)+&amp;quot; wird mit Zeile &amp;quot;+(row+1)+&amp;quot; getauscht&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
                        //Vertauschen von Zeilen -&amp;gt; matrix[line][tmpColumn] wird dann ungleich null&lt;br /&gt;
                        swapTwoLines(line,row,matrix,vector);&lt;br /&gt;
                        break;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
            //Umformungsschritt 3: matrix[line][tmpColumn] soll gleich 1 sein.&lt;br /&gt;
            if(matrix[line][tmpColumn]!=0){&lt;br /&gt;
                &lt;br /&gt;
                //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                if(printSteps){&lt;br /&gt;
                    printStep(matrix,vector);&lt;br /&gt;
                    System.out.println(&amp;quot;Zeile &amp;quot;+(line+1)+&amp;quot; wird durch &amp;quot;+matrix[line][tmpColumn]+&amp;quot; geteilt&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                //Division der Zeile mit matrix[line][tmpColumn]&lt;br /&gt;
                divideLine(line,matrix[line][tmpColumn],matrix,vector);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
            if(printSteps){&lt;br /&gt;
                printStep(matrix,vector);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            //Umformungsschritt 4: Alle Zahlen unter matrix[line][tmpColumn] sollen null sein.&lt;br /&gt;
            for(int row=line+1;row&amp;lt;matrix.length;row++){&lt;br /&gt;
                &lt;br /&gt;
                //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                if(printSteps){&lt;br /&gt;
                    System.out.println(&amp;quot;Zu Zeile &amp;quot;+(row+1)+&amp;quot; wird subtrahiert: &amp;quot;+matrix[row][tmpColumn]+&amp;quot; * Zeile &amp;quot;+(line+1));&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                //Subtraktion damit unter der Zahl im Umformungsschritt 3 nur nullen stehen&lt;br /&gt;
                removeRowLeadingNumber(matrix[row][tmpColumn],line,row,matrix,vector);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        //Umformungsschritt 6: Matrix in Normalform bringen (Zahlen oberhalb der Diagonale werden ebenfalls zu null)&lt;br /&gt;
        for(int column=matrix[0].length-1;column&amp;gt;0;column--){&lt;br /&gt;
            &lt;br /&gt;
            //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
            if(printSteps){&lt;br /&gt;
                printStep(matrix,vector);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            //Alle Werte oberhalb von &amp;quot;column&amp;quot; werden zu null&lt;br /&gt;
            for(int row=column;row&amp;gt;0;row--){&lt;br /&gt;
                &lt;br /&gt;
                //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
                if(printSteps){&lt;br /&gt;
                    System.out.println(&amp;quot;Zu Zeile &amp;quot;+(row)+&amp;quot; wird subtrahiert: &amp;quot;+matrix[row-1][column]+&amp;quot; * Zeile &amp;quot;+(column+1));&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                //Dazu wird Subtraktion angewandt&lt;br /&gt;
                removeRowLeadingNumber(matrix[row-1][column],column,row-1,matrix,vector);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        //Wenn die Zwischenschritte ausgegeben werden sollen&lt;br /&gt;
        if(printSteps){&lt;br /&gt;
            printStep(matrix,vector);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        //Unser ehemaliger Loesungsvektor ist jetzt zu unserem Zielvektor geworden :)&lt;br /&gt;
        return vector;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Hier werden einfach zwei Zeilen vertrauscht&lt;br /&gt;
     */&lt;br /&gt;
    private static void swapTwoLines(int rowOne, int rowTwo, double[][] matrix, double[] vector){&lt;br /&gt;
        &lt;br /&gt;
        double[] tmpLine;&lt;br /&gt;
        double tmpVar;&lt;br /&gt;
        &lt;br /&gt;
        tmpLine = matrix[rowOne];&lt;br /&gt;
        tmpVar = vector[rowOne];&lt;br /&gt;
        &lt;br /&gt;
        matrix[rowOne] = matrix[rowTwo];&lt;br /&gt;
        vector[rowOne] = vector[rowTwo];&lt;br /&gt;
        &lt;br /&gt;
        matrix[rowTwo] = tmpLine;&lt;br /&gt;
        vector[rowTwo] = tmpVar;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * eine Zeile wird durch &amp;quot;div&amp;quot; geteilt. &amp;quot;div&amp;quot; darf nicht null sein&lt;br /&gt;
     */&lt;br /&gt;
    private static void divideLine(int row, double div, double[][] matrix, double[] vector){&lt;br /&gt;
        &lt;br /&gt;
        for(int column=0;column&amp;lt;matrix[row].length;column++){&lt;br /&gt;
            &lt;br /&gt;
            matrix[row][column] = matrix[row][column]/div;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        vector[row] = vector[row]/div;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Eine Zeile (row) wird mit einem entsprechendem vielfachen (factor) von einer anderen Zeile (rowRoot) subtrahiert.&lt;br /&gt;
     */&lt;br /&gt;
    private static void removeRowLeadingNumber(double factor, int rowRoot, int row, double[][] matrix, double[] vector){&lt;br /&gt;
        &lt;br /&gt;
        for(int column=0;column&amp;lt;matrix[row].length;column++){&lt;br /&gt;
            &lt;br /&gt;
            matrix[row][column] = matrix[row][column]-factor*matrix[rowRoot][column];&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        vector[row] = vector[row]-factor*vector[rowRoot];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Ein Vector wird auf der Konsole ausgegeben (transponiert)&lt;br /&gt;
     */&lt;br /&gt;
    public static void printVector(double [] vector){&lt;br /&gt;
        &lt;br /&gt;
        if(vector == null){&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.print(&amp;quot;Loesungsvektor ist: (&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        for(int i=0;i&amp;lt;vector.length;i++){&lt;br /&gt;
            &lt;br /&gt;
            if(i != 0){&lt;br /&gt;
                System.out.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.print(vector[i]);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;)^T&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Eine Matrix wird auf der Konsole ausgegeben&lt;br /&gt;
     * matrix[row][column]&lt;br /&gt;
     */&lt;br /&gt;
    public static void printMatrix(double[][] matrix){&lt;br /&gt;
        &lt;br /&gt;
        if(matrix == null){&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        for(int row=0; row&amp;lt;matrix.length;row++){&lt;br /&gt;
            &lt;br /&gt;
            System.out.print(&amp;quot;(&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            for(int column=0;column&amp;lt;matrix[row].length;column++){&lt;br /&gt;
                &lt;br /&gt;
                if(column != 0){&lt;br /&gt;
                    System.out.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                System.out.print(matrix[row][column]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            System.out.println(&amp;quot;)&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /*&lt;br /&gt;
     * Diese Methode zeigt die Zwischenschritte der Berechnung auf der Konsole an.&lt;br /&gt;
     * Fuer die Aufgabe nicht weiter relevant (unbekannte Konzepte werden verwendet!)&lt;br /&gt;
     */&lt;br /&gt;
    private static void printStep(double[][] matrix, double[] vector){&lt;br /&gt;
        &lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        //Werte werden fuer die Ausgabe auf ein bestimmtes Format gebracht&lt;br /&gt;
        // -&amp;gt; Damit die Ausgabe auch immer schick aussieht&lt;br /&gt;
        java.text.DecimalFormat df = new java.text.DecimalFormat(&amp;quot;0.00&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        for(int row=0;row&amp;lt;matrix.length;row++){&lt;br /&gt;
            &lt;br /&gt;
            for(int column=0;column&amp;lt;matrix[row].length;column++){&lt;br /&gt;
                &lt;br /&gt;
                if(matrix[row][column]&amp;gt;=0){&lt;br /&gt;
                    &lt;br /&gt;
                    System.out.print(&amp;quot;+&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                System.out.print(df.format(matrix[row][column])+&amp;quot;    &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            System.out.print(&amp;quot;|    &amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if(vector[row]&amp;gt;=0){&lt;br /&gt;
                &lt;br /&gt;
                System.out.print(&amp;quot;+&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            System.out.println(df.format(vector[row]));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>92.225.109.177</name></author>
		
	</entry>
</feed>