![]() |
nichtlineares Gleichungssystem
Ich suche einen Weg ein nichtlineares Gleichungssystem zu lösen.
Zum Beispiel: (1 + x) / (10^2) - (10*y) + z = -15 (1 + x) / (2^2) - (2*y) + z = 12 (1 + x) / (5^2) - (5*y) + z = 12 Mit Derive 6 kommt folgendes raus: x = -683/8 y = 189/32 z = 1437/32 Es ist also möglich. Ich habe aber keinen Schimmer, wie ich das in Delphi nachprogrammieren könnte. :gruebel: Weiss jemand von euch wie das geht? Und wenn ja, könnt ihr mir das mal erklären? :) Danke im vorraus. :) |
Re: nichtlineares Gleichungssystem
Wieso ist das ein nichtlineares Gleichungssystem? :gruebel:
So wie ich das sehe, ist das ein ganz normales LGS mit drei Unbekannten, was man mit den üblichen Methoden lösen kann. |
Re: nichtlineares Gleichungssystem
korrigiert mich, wenn ich hier Müll laber, aber solange die Variablen alle in erster Potenz vorliegen ist das doch ein lineares Gleichungssystem, dass man allgemein auf die Form
ax + by + cz = d zurückführen kann. Dann nimmst du dir ein LGS in das du 3 allgemein formulierte Gleichungen packst und löst es auf. Du erhälst als Ergebnis die Variablen in Abhängigkeit von den Koeffizienten und den Konstanten. Dann muss Delphi nur noch die aktuellen Koeffizienten und Konstanten in die Gleichungen einsetzten und fertig. [EDIT] Deine Gleichungen lauten umgeformt ja: 1/100 * x - 10y + z = -15 - 1/100 1/4 * x - 2y + z = 12 - 1/4 1/25 * x - 5y + z = 12 - 1/25 was mit Schulmathematik absolut lösbar ist. |
Re: nichtlineares Gleichungssystem
Achsooo.
Na dann ist gut. Zitat:
|
Re: nichtlineares Gleichungssystem
|
Re: nichtlineares Gleichungssystem
Ja, ok.
Ich habe ja schon das gauss'sche Verfahren gefunden, mit dem man sowas lösen kann. Schön und gut. Dazu müssen meine Gleichungen aber irgendwie noch in diese Form, wie oben beschrieben. Wie das geht hab ich nicht gefunden. Oder bin ich blind? |
Re: nichtlineares Gleichungssystem
|
Re: nichtlineares Gleichungssystem
Das gezeigte Gleichungssystem
Zitat:
Wenn ich jetzt also mein Gleichungssystem in die Matriz eintragen will: Zitat:
Was muss denn da genau rein? 1 * x am Anfang, also schonmal eine 1 rein. Weiter drinne 10*y. also muss auch irgendwo eine 10 rein. Und dann noch einmal 1 * z, also eine 1 noch rein. Aber was ist mit dem Rest? Also (10^2), wo wird das berücksichtigt? Ich muss das irgendwie auf die Form a*x + b*y + c*z bringen. Ich weiss nur nicht, wie man das in Delphi realisieren soll. :cry: |
Re: nichtlineares Gleichungssystem
gordon freeman hat die Formeln doch schon umgestellt.
Hier nochmal die einzelnen Schritte für die erste Gleichung...
Code:
. 1+x
. --- - 10y + z = -15 | *10² . 10² . . 1+x - 10*10²y + 10²z = -15 * 10² . . 1+x - 1000y + 100z = -1500 | -1 . . x - 1000y + 100z = -1500 -1 | :100 . . 1 1 . ---x - 10y + z = -15 - --- . 100 100
Delphi-Quellcode:
TGaussSolved = array of Extended;
TGaussLine = TGaussSolved; TGaussMatrix = array of TGaussLine; : procedure TForm.ButtonClick(Sender: TObject); var A: TGaussMatrix; Res: TGaussSolved; i, j: Integer; s:string; begin SetLength(A, 3, 4); A[0][0] := 1/100; A[0][1] := -10; A[0][2] := 1; A[0][3] := -15-(1/100); A[1][0] := 1/4; A[1][1] := -2; A[1][2] := 1; A[1][3] := 12-(1/4); A[2][0] := 1/25; A[2][1] := -5; A[2][2] := 1; A[2][3] := 12-(1/25); for i := 0 to High(A) do begin s:=''; for j := 0 to High(A[i]) - 1 do s:=s +FloatToStr(A[i, j]) + '*x(' + inttostr(j + 1) + ') + '; Memo1.Lines.Append(s+'= c(' + inttostr(i + 1) + ')'); end; Res := SolveLinearSystem(A, 3, 4); for i := 0 to High(Res) do Memo1.Lines.Append('x(' + inttostr(i+1) + ') = ' + FloatToStr(Res[i])); end; ![]() Gruss Thorsten |
Re: nichtlineares Gleichungssystem
ahh, ich stand gearde auf dem Schlauch. :wall: Jetz weiss ich wies geht.
Viel Dank, auch für deine Geduld, omata und gordon freeman. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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-2025 by Thomas Breitkreuz