AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nichtlineares Gleichungssystem

Ein Thema von Neotracer64 · begonnen am 19. Aug 2006 · letzter Beitrag vom 19. Aug 2006
Antwort Antwort
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#1

nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:45
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.

Weiss jemand von euch wie das geht? Und wenn ja, könnt ihr mir das mal erklären?

Danke im vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:48
Wieso ist das ein nichtlineares Gleichungssystem?

So wie ich das sehe, ist das ein ganz normales LGS mit drei Unbekannten, was man mit den üblichen Methoden lösen kann.
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#3

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:51
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.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#4

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:52
Achsooo.
Na dann ist gut.

Zitat:
dass man allgemein auf die Form
ax + by + cz = d
zurückführen kann.
Habt ihr eine Idee, wie ich das in Delphi in diese Form bringen kann?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:54
Hier im Forum suchenGleichungssystem
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#6

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 19:59
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?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 20:03
Schau doch mal hier.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#8

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 20:10
Das gezeigte Gleichungssystem

Zitat:
I. x(1) + 2*x(2) - x(3) = -8
II. 2*x(1) - x(2) + x(3) = 11
III. 2*x(1) - 2*x(2) - 2*x(3) = 2

{ 1 2 -1 -8
A = 2 -1 1 11
2 -2 -2 2 }
untersscheidet sich aber von meinem ganz schön.

Wenn ich jetzt also mein Gleichungssystem in die Matriz eintragen will:

Zitat:
(1 + x) / (10^2) - (10*y) + z = -15
(1 + x) / (2^2) - (2*y) + z = 12
(1 + x) / (5^2) - (5*y) + z = 12

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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 20:33
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;
Code von SolveLinearSystem hier

Gruss
Thorsten
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#10

Re: nichtlineares Gleichungssystem

  Alt 19. Aug 2006, 21:03
ahh, ich stand gearde auf dem Schlauch. Jetz weiss ich wies geht.

Viel Dank, auch für deine Geduld, omata und gordon freeman.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz