Hallo Zusammen,
wer wollte nicht schon immer mal nichtlineare mehrdimensionale Gleichungen nummerisch lösen?
Weil ich es manchmal beruflich benötige, habe ich mir mit AU3 eine relativ einfache Lösung gebastelt, diese ist evtl. auch für andere Leute brauchbar, denn wenn man es ein wenig aufhübscht könnte man so etwas wie den M$ Excel Solver damit programmieren.
Hier ein Beispiel Programm:
[autoit]#include "solver01.au3"
[/autoit][autoit][/autoit][autoit]; Weitere Infos unter http://de.wikipedia.org/wiki/Newton-Ve…hrdimensionalen
[/autoit][autoit][/autoit][autoit]; Gleichungssystem 1 aus "fa1.csv"
; x1^2-2*x2=10
; sin(x1)+4*x2=20;
dim $a[1][1], $b[1][1], $x[1][1], $D[1][1]
csv2Fmatrix("fa1.csv",$a,$b)
erzeuge0Matrix($x,$a[1][0],1)
; Startwerte für Iteration
$x[1][1]=10
$x[2][1]=10
; Mehrdimensionale Lösung nach Newton
$x=solverM($a,$b,$x,1E-3,200,1E-5)
_arraydisplay($x, "Eine Lösung für x1=$x[1][1], x2=$x[2][1]")
; Probe
msgbox(0,"x1^2-2*x2=10",$x[1][1]^2-2*$x[2][1]&"=10")
msgbox(0,"sin(x1)+4*x2=20",sin($x[1][1])+4*$x[2][1]&"=20")
; Gleichungssystem 2 aus "fa2.csv"
; x1/x3+2*x2+x3=10
; x1+4*x2+x3*x1=5
; x1^2+x2+x3=1
dim $a[1][1], $b[1][1], $x[1][1], $D[1][1]
csv2Fmatrix("fa2.csv",$a,$b)
erzeuge0Matrix($x,$a[1][0],1)
; Startwerte für Iteration
$x[1][1]=1
$x[2][1]=1
$x[3][1]=1
; Mehrdimensionale Lösung nach Newton
$x=solverM($a,$b,$x,1E-3,200,1E-6)
_arraydisplay($x, "Eine Lösung für x1=$x[1][1], x2=$x[2][1], x3=$x[3][1]")
msgbox(0,"x1/x3+2*x2+x3=10",$x[1][1]/$x[3][1]-2*$x[2][1]+$x[3][1]&"=10")
msgbox(0,"x1+4*x2+x3*x1=5",$x[1][1]+4*$x[2][1]+$x[3][1]*$x[1][1]&"=5")
msgbox(0,"x1^2+x2+x3=1",$x[1][1]^2+$x[2][1]+$x[3][1]&"=1")
Alles weiter (die benötigten units und die csv Beispiel Dateien) im Anhang!
Bei der Nutzung bitte beachten:
- Lösung muss vollständig im Bereich der Reellen-Zahlen liegen!!!
- Es wird immer nur eine Lösung gefunden
- Diese Lösung kann je nach Startwert verschieden sein
Weitere Infos unter
http://de.wikipedia.org/wiki/Newton-Ve…hrdimensionalen
Gruß
uuchip