![]() |
AW: Lineares Gleichungssystem lösen
Ich sehe Kegasetu’s Problem ganz wo anders: Mit dem schön aufgemachten Programm von Fiete45 (#30) lassen sich lineare Gleichungssysteme auch bis zu 100 und mehr Unbekannten in Sekundenschnelle lösen. Das geht wunderbar gut, aber das Programm ist interaktiv und dialogorientiert: Man muß also die Koeffizienten seiner Gleichungen per Hand in die Maske eingeben oder reinkopieren. Und das ist bei großen Gleichungssystemen mühsam und fehleranfällig.
Kegasetu will – so vermute ich – seine Gleichungen direkt per Delphi-Code an die Lösungsroutinen übergeben. Und dazu muß man jedoch genau wissen, wohin man die einzelnen Koeffizienten packen soll. Und das ist bei einem – bisher etwas chaotischen Gleichungssystem – schwer zu realisieren. In der momentanen (fehlenden) Struktur seines Gleichungssystems kann man auch Fiete45’s tolle Programm nicht benutzen. Zuerst muß man Ordnung in die Gleichungen bringen... Gruß, Andreas |
AW: Lineares Gleichungssystem lösen
Zitat:
das war ein allgemeiner Tipp für Leute, welche entweder mit Mathe und Info nicht soviel am Hut haben oder für Leute, welche gerade keinen Weg finden ein einfaches Mathe Problem zu lösen. Wenn ich das Programm von Fiete45 richtig verstehe, dann kann es keine Algebra. Mit Maple und Co kannst du zum Beispiel für das LGS Ax=b allgemeine Formeln für x ausgeben lassen in Abhängigkeit von A, b (Werte von A, b u.U. noch nicht alle bekannt). In gewissen Fällen sind diese Formeln einfach und der Weg über (hier) Gauss und andere wird unnötig. Wenn jeweils für A, b Werte vorliegen, dann ist natürlich ein "Löser" wie "Fietes45 Super Solver" topp. Punkto Ordnung: K muss ja nur die Summanden mit ma und mj aus den Gleichungen 1 und 8 auf die rechte Seite schieben; dann herrscht bereits jene Ordnung, welche du bei der Darstellung von inhomogenen LGS erwartest. Ich bin raus... ihr schafft das auch ohne mich ;-). Gruss Michael |
AW: Lineares Gleichungssystem lösen
Zitat:
|
AW: Lineares Gleichungssystem lösen
Moin,
habe das Gaußverfahren als Prozedur geschrieben:
Delphi-Quellcode:
Aufruf der Prozedur, wobei A und B mit Werten gefüllt sein müssen: GaussLGS(A,B,X,Anzahl);
type
TVektor=Array of Extended; TMatrix=Array of TVektor; procedure TGauss.GaussLGS(A:TMatrix;B:TVektor;var X:TVektor;var Anzahl:Integer); var N,K,I,L:Integer; T,Summe:Extended; begin N:=Length(B); for K:=0 to N-1 do begin // Pivotsuche I:=K; for L:=K+1 to N-1 do if abs(A[L,K])>abs(A[I,K]) then I:=L; if I>K then // tauschen der Zeilen i und k begin for L:=K to N-1 do begin T:=A[I,L];A[I,L]:=A[K,L];A[K,L]:=T end; T:=B[I];B[I]:=B[K];B[K]:=T; end; if A[K,K]=0.0 then begin Anzahl:=0;break end // K - Schleife verlassen, da keine Lösung else // Elimination begin for I:=K+1 to N-1 do begin T:=A[I,K]/A[K,K]; for L:=K to N-1 do A[I,L]:=A[I,L]-A[K,L]*T; B[I]:=B[I]-B[K]*T; end; end end; if (A[N-1,N-1]=0.0) and (B[N-1]=0.0) then begin Anzahl:=1000000; // unendlich viele Lösungen exit; end; // Rücksubstitution Anzahl:=1; // genau eine Lösung X[N-1]:=B[N-1]/A[N-1,N-1]; for I:=N-2 downto 0 do begin Summe:=0.0; for K:=I+1 to N-1 do Summe:=Summe+A[I,K]*X[K]; X[I]:=(B[I]-Summe)/A[I,I]; end; end; X ist der Lösungsvektor, Anzahl enthält die Lösungsanzahl. 0 - keine Lösung 1 - genau eine Lösung 1000000 - viele Lösungen Gruß Fiete |
AW: Lineares Gleichungssystem lösen
Was mir bereits bei deinem Programm aufgefallen ist:
Du unterscheidest keine oder eine Lösung oder "unendlich viele" Lösungen. Schön wäre es, wenn dein Programm im Fall "unendlich viele Lösungen" den Lösungsraum angeben würde. |
AW: Lineares Gleichungssystem lösen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz