Problem/Vereinfachung Gauss Algorithmus

  • Hallo,
    Ich hab ein kleines Problem.. da ich z.T. faul bin mache ich meine Mahte Hausaufgaben per Autoit und deshalb habe ich mir mal den Gauss Algorithmus vorgenommen
    ich wollte den Code optimieren und hoffe nun auf eure Vorschläge (optimal wäre eine Funktion in die man alles einsetzen könnte)
    dies folgt gleich zu meinem "echten" Problem:
    Wie kann ich den Algorithmus für X Unbekannte machen?
    (bei einem SEHR unübersichtlichen Versuch kamen FALSCHE Ergebnisse raus)
    hier ist meine (noch sehr unübersichtliche, jedoch funktionierende funktion mit 3 unbekannten):

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $x = "Error!"
    $y = "Error!"
    $z = "Error!"

    [/autoit] [autoit][/autoit] [autoit]

    Dim $original[12]
    Dim $temporary[12]
    Dim $hilfsarray[3]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 11
    $original[$i] = InputBox("Wert: " & $i + 1, "Gib den Wert an..", "Array Nummer:"&$i)
    $original[$i] = Execute($original[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $temporary = ursprungswert($temporary, 0, 11, $original)

    [/autoit] [autoit][/autoit] [autoit]

    $w1 = isnegativ($temporary[0])
    If $w1 = 1 Then
    $temporary = malminus1($temporary, 0, 3)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $w2 = isnegativ($temporary[4])
    If $w2 = 0 Then
    $temporary = malminus1($temporary, 4, 7)
    EndIf
    $1 = $temporary[0]
    $2 = $temporary[4] * (-1)
    $temporary = multiplizieren($temporary, 0, 3, $2)
    $temporary = multiplizieren($temporary, 4, 7, $1)

    [/autoit] [autoit][/autoit] [autoit]

    $temporary = sumaddieren($temporary, 0, 3, 4, 7)

    [/autoit] [autoit][/autoit] [autoit]

    $temporary = ursprungswert($temporary, 0, 3, $original)
    _ArrayDisplay($temporary)
    If $w1 = 1 Then
    $temporary = malminus1($temporary, 0, 3)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $w3 = isnegativ($temporary[8])
    If $w3 = 0 Then
    $temporary = malminus1($temporary, 8, 11)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $3 = $temporary[0]
    $4 = $temporary[8] * (-1)
    $temporary = multiplizieren($temporary, 0, 3, $4)
    $temporary = multiplizieren($temporary, 8, 11, $3)

    [/autoit] [autoit][/autoit] [autoit]

    $temporary = sumaddieren($temporary, 0, 3, 8, 11)
    $temporary = ursprungswert($temporary, 0, 3, $original)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 2
    $hilfsarray[$i] = $temporary[$i + 5]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $w1 = isnegativ($temporary[5])
    If $w1 = 1 Then
    malminus1($temporary, 5, 7)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $w2 = isnegativ($temporary[9])
    If $w2 = 0 Then
    malminus1($temporary, 9, 11)
    EndIf
    $5 = $temporary[5]
    $6 = $temporary[9] * (-1)
    $temporary = multiplizieren($temporary, 5, 7, $6)
    $temporary = multiplizieren($temporary, 9, 11, $5)
    $temporary = sumaddieren($temporary, 5, 7, 9, 11)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 2
    $temporary[$i + 5] = $hilfsarray[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $temporary[10] <> 0 Then
    $z = $temporary[11] / $temporary[10]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $temporary[5] <> 0 Then
    $y1 = $temporary[7] - ($temporary[6] * $z)
    $y = $y1 / $temporary[5]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $temporary[0] <> 0 Then
    $x1 = $temporary[3] - ($temporary[2] * $z) - ($temporary[1] * $y)
    $x = $x1 / $temporary[0]
    EndIf
    $x = Execute($x)
    $y = Execute($y)
    $z = Execute($z)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Die Unbekannten lauten:", "P( " & $x & " | " & $y & " | " & $z & " )")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func ursprungswert($array1, $anfang, $ende, $array2)
    For $i = $anfang To $ende Step 1
    $array1[$i] = $array2[$i]
    Next
    Return $array1
    EndFunc ;==>ursprungswert

    [/autoit] [autoit][/autoit] [autoit]

    Func sumaddieren($array, $anfang1, $ende1, $anfang2, $ende2)
    For $i = 0 To $ende1 - $anfang1 Step 1
    $array[$anfang2 + $i] = $array[$anfang1 + $i] + $array[$anfang2 + $i]
    Next
    Return $array
    EndFunc ;==>sumaddieren

    [/autoit] [autoit][/autoit] [autoit]

    Func multiplizieren($array, $anfang, $ende, $faktor)
    For $i = $anfang To $ende Step 1
    $array[$i] = $array[$i] * $faktor
    Next
    Return $array
    EndFunc ;==>multiplizieren

    [/autoit] [autoit][/autoit] [autoit]

    Func malminus1($array, $anfang, $ende)
    For $i = $anfang To $ende Step 1
    $array[$i] = $array[$i] * (-1)
    Next
    Return $array
    EndFunc ;==>malminus1

    [/autoit] [autoit][/autoit] [autoit]

    Func isnegativ($wert)
    If $wert < 0 Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>isnegativ

    [/autoit]

    Vielen Dank für jede Unterstützung ^^

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Hallo XovoxKingdom,

    schau dir doch mal diesen Link an, es ist auch eine kleine sehr übersichtiche Formel dabei, vielleicht kannst du ja was damit anfangen,

    mfg (Auto)Bert

  • Jo vielen Dank für den Link,
    den hab ich als Grundlage genommen um die Funktionen zu bauen..
    (siehe den code)
    er funktioniert auch... kann man den noch optimieren (oder was noch besser wäre, für eine variable Anzahl an Unbekannten erstellen?)
    Ich versuch die Tage nochmal den Code in eine Funktion umzuwandeln

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!