# Lineares Gleichungssystem nach Gauß-Jordan lösen?



## -horn- (4. Nov 2011)

moien,

ich versuche gerade einen Aglorithmus für das Gauß-Jordan Verfahren zur Lösung von linearen Gleichungssystemen zu bauen. Zur Kontrolle nutze ich dann Lösen linearer Gleichungssysteme
Aber das Ganze will irgendwie nicht und ich wollte fragen, ob Ihr vielleicht was fertiges dazu habt? Google spuckt mir dazu leider keine Library aus, die ich nutzen kann oder ich nachvollziehen kann.

Würde mich freuen,

Andreas


----------



## 2AndAHalfBit (5. Nov 2011)

wie dynamisch möchtest du es denn machen? Du hast da auf jedenfall eine Aufgabe vor dir -.-


----------



## Marco13 (6. Nov 2011)

Da hatte mal jemand was gebastelt, was ich dann nach JCuda portiert hatte: jcuda.org - Samples - der verwendet AFAIR Gauß-Jordan ... da ist auch 'n PDF verlinkt, vielleicht hilft's :bahnhof:


----------



## -horn- (6. Nov 2011)

moien,



2AndAHalfBit hat gesagt.:


> wie dynamisch möchtest du es denn machen? Du hast da auf jedenfall eine Aufgabe vor dir -.-


ich brauche das erstmal für eine 3x4 matrix weil ich das für eine positionsbestimmung brauche, aber ich würde es gerne so allgemein haben wollen, dass das auch für größere matrizen geht. aber sollte auf jedenfall für die 3x4er gehen. und sie sollte auch prüfen, wenn mal eine zeile der matrix komplett null enthält, denn dann lässt sich der spass ja nicht lösen, oder auf eine 2x3 matrix reduzieren.



Marco13 hat gesagt.:


> Da hatte mal jemand was gebastelt, was ich dann nach JCuda portiert hatte: jcuda.org - Samples - der verwendet AFAIR Gauß-Jordan ... da ist auch 'n PDF verlinkt, vielleicht hilft's :bahnhof:


gucke ich mir gleich mal an. cuda ist ne coole sache, kann ich aber auf meinem laptop "noch" nicht nutzen. erst der neue wird es können .

Andreas


----------



## -horn- (15. Nov 2011)

moien,

ich habe mir was für ein 3x4 system ausgedacht, was bis jetzt immer richtig lag, aber wenn ich es auf 4x5 und mehr erweitere, dann stimmt mein gedöns nicht mehr.
ich würde also gerne wissen wollen, wie zb Lösen linearer Gleichungssysteme das macht? hab mich versucht durch das JS script zu hangeln, aber ich fand das mehr kryptisch als hilfreich.

ich werd ja sicherlich nicht der aller erste sein, der das braucht .

Andreas


----------



## Marco13 (15. Nov 2011)

Natürlich nicht, das wird sehr oft benötigt, aber wenn man es "echt" braucht, sucht man sich eine Lib, die das gut kann (und nicht notwendigerweise eine, bei der man gut nachvollziehen kann, wie sie programmiert ist). Jedenfalls sollte der Algorithmus an sich für alle Matrixgrößen gleich sein - vorausgesetzt, das GLS ist nicht unter- oder überbestimmt. Poste am besten mal den aktuellen Code, oder versuch' die Frage zu präzisieren.


----------



## muckelzwerg (16. Nov 2011)

Was ist denn mit den ganzen Javaklassen die man dazu bei Google findet?
Funktionieren die nicht, oder sind nicht verständlich?


----------



## -horn- (19. Nov 2011)

moien,

was noch fehlt ist eine sortierung, damit auch immer auf der diagonale eine zahl ungleich 0 steht.
kann mir da jemand fürs vorsrotieren einen tipp geben?


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package positioning;

/**
 *
 * @author Andreas
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        //http://mathrefresher.blogspot.com/2007/04/gauss-jordan-elimination.html
        //http://www.arndt-bruenner.de/mathe/scripts/gaussjordan.htm
        double[][] mat = {{1, 2, 3, 0, 15}, {0,2, -3, 0, 14 },{ 2, 0, 3, 5, 0}, {0,0, 0, 1, 14 }};


        mat = lineareq.gaussjordan(mat);

        for(int i=0; i<mat.length; i++){
            for(int j=0; j<mat[i].length; j++){
                System.out.print(mat[i][j]+";");
            }
            System.out.println();
        }

    }

}
```


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package positioning;

/**
 *
 * @author Andreas
 */
public class lineareq {
    public static double[][] gaussjordan(double[][] mat){
        //http://people.richland.edu/james/lecture/m116/matrices/pivot.html

        double factor1 =0;
        double factor2 =0;


        for(int i=0; i<mat.length; i++){
            
            factor1 = mat[i][i];
            if(factor1!=0){
                for(int j=0; j<mat.length; j++){
                    factor2 = mat[j][i];
                    if(i!=j && factor2!=0){
                        System.out.println(factor1+";"+factor2);
                        for(int k=0; k<mat.length+1; k++){
                            mat[j][k] = factor1*mat[j][k]-factor2*mat[i][k];
                        }
                    }
                }
            }
        }

        for(int i=0; i<mat.length; i++){
            factor1=mat[i][i];
            if(mat[i][i]!=0){
                for(int j=0; j<mat.length+1; j++){
                    if(mat[i][j]!=0){
                        mat[i][j]=mat[i][j]/factor1;
                    }
                }
            }
        }

        return mat;
    }

}
```


----------



## AlexSpritze (19. Nov 2011)

Hallo,

ich empfehle dir entweder JAMA oder noch besser Apache Commons Math. Wie du letztere Api benutzt, steht hier. Eventuell ist der Code von Commons Math auch gut nachzuvollziehen, wenn dich wirklich interessiert, wie das gemacht wird.


----------



## -horn- (19. Nov 2011)

moien,

schon klar, aber ich würd es gerne selber können.
dinge nehmen ist immer schön, aber ich würde es gerne auch selber umsetzen. vorallem, weil ich gerade nur mit java rumspiele und das später auf nem mikrocontroler packen will. dafür muss es ja java unabhängig sein.

grüße, Andreas


----------

