Gauss Algorithmus



  • Hallo Forum,

    hat jemand von Euch vielleicht einen Gauss-Algorithmus (LGS) liegen?
    Er soll so weit eliminieren, bis nur noch die Diagonale ("Treppe") übrig ist.

    Danke im voraus

    Susi


  • Mod

    Das folgende ist ein etwas modifiziertes Gauss-Jordan-Verfahren zum Gleichungssystem-lösen:
    [java]
    public static float [] solveSystem (float [][] system)
    throws NotSolvableException
    {
    int rows = system.length;
    int columns = system[0].length;
    if (rows + 1 != columns) throw new NotSolvableException ();
    int [] selectedRows = new int [rows];
    boolean [] usedRows = new boolean [rows];
    int i;
    int vars = columns - 1;
    for (i = 0 ; i < vars ; ++i)
    {
    selectedRows [i] = getOptimalRow (system,i,usedRows);
    usedRows [selectedRows [i]] = true;
    processRow (system,i,selectedRows [i]);
    }
    float [] result = new float [vars];
    for (i = 0 ; i < vars ; ++i)
    {
    result [i] = system [selectedRows [i]][vars];
    }
    return result;
    }

    /**
    * @param system [row][column]
    */
    private static void processRow (float [][] system, int column, int row)
    {
    float factor = 1.0f / system [row][column];
    system [row][column] = 1.0f;
    int columnCount = system[0].length;
    int rowCount = system.length;
    int i,j;
    for (i = column + 1 ; i < columnCount ; ++i)
    {
    system [row][i] *= factor;
    }
    for (j = 0 ; j < rowCount ; ++j)
    {
    if (j == row) continue;
    factor = system [j][column];
    system [j][column] = 0.0f;
    for (i = column + 1 ; i < columnCount ; ++i)
    {
    system [j][i] -= factor * system [row][i];
    }
    }
    }

    /**
    * @param system [row][column]
    */
    private static int getOptimalRow (float [][] system, int column,
    boolean [] usedRows)
    throws NotSolvableException
    {
    int selectedRow = 0;
    float currentAbsValue = 0.0f;
    float tempValue = 0.0f;
    int rows = system.length;
    for (int i = 0 ; i < rows ; ++i)
    {
    if (usedRows [i]) continue;
    if ((tempValue = Math.abs(system[i][column])) > currentAbsValue)
    {
    currentAbsValue = tempValue;
    selectedRow = i;
    }
    }
    if (currentAbsValue < 1e-3f) throw new NotSolvableException();
    return selectedRow;
    }[/code]
    ...die Funktionalität ist aber etwas eingeschränkt.



  • wenn zum ende des semester geht, posten komischerweise alle typen immer unter frauennamen.. wie seltsam.. schon die zweite 😉



  • tolle erkenntnis 😃



  • Original erstellt von <Ilse>:
    tolle erkenntnis 😃

    jo .. gelle 😉


Anmelden zum Antworten