Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lineares Gleichungssystem lösen (https://www.delphipraxis.net/205830-lineares-gleichungssystem-loesen.html)

Andreas13 31. Okt 2020 18:41

AW: Lineares Gleichungssystem lösen
 
:thumb:

Kegasetu 1. Nov 2020 18:54

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Andreas13 (Beitrag 1476459)
Zitat:

Zitat von Kegasetu (Beitrag 1476405)
usw..
Ich habe lzha[] jetzt mit l vereinfacht
Mir stellt sich jetzt noch die Frage, wie ich mit dem "SetLength" umgehe und vielmehr was es bedeutet?
Das n müsste ja n= 11 sein.

Hallo Kegasetu,
schreib bitte alle Deine 10 Gleichungen mit den konkreten Koeffizienten (= Zahlenwerten) auf, damit ich für Dich das Programm erstellen kann.
Gruß, Andreas

Danke für das Angebot!!!

Ich schreibe morgen Früh alles raus.

Kegasetu 1. Nov 2020 18:55

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Fiete45 (Beitrag 1476489)
Moin Kegasetu,
mit dem Programm kannst Du Gleichungssysteme lösen.
Die Daten mußt Du selbst eingeben.
Die Größe der Systeme ist vom SpinEditN abhängig.
Viel Erfolg beim Testen!
Gruß Fiete

Danke für die zahlreiche Unterstützung. Auch das werde ich morgen mal durchgehen.

Kegasetu 2. Nov 2020 08:07

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Andreas13 (Beitrag 1476492)
:thumb:

Die Gleichungen lauetet wie folgt:

lzha1[1]*ma+2(lzha1[1]+lzha1[2])*mb+lzha1[2]*mc=mma1[1]
lzha1[2]*mb+2(lzha1[2]+lzha1[3])*mc+lzha1[3]*md=mma1[2]
lzha1[3]*mc+2(lzha1[3]+lzha1[4])*md+lzha1[4]*me=mma1[3]
lzha1[4]*md+2(lzha1[4]+lzha1[5])*me+lzha1[5]*mf=mma1[4]
lzha1[5]*me+2(lzha1[5]+lzha1[6])*mf+lzha1[6]*mg=mma1[5]
lzha1[6]*mf+2(lzha1[6]+lzha1[7])*mg+lzha1[7]*mh=mma1[6]
lzha1[7]*mg+2(lzha1[7]+lzha1[8])*mh+lzha1[8]*mi=mma1[7]
lzha1[8]*mh+2(lzha1[8]+lzha1[9])*mi+lzha1[9]*mj=mma1[8]



fab11[1]*blf11[1]+bl*lzha1[1]+mb=0
fab11[1]*blf11[1]+a*lzha1[1]-mb=0

fab11[2]*blf11[2]+cl*lzha1[2]+mb-mc=0
fab11[2]*blf11[2]+br*lzha1[2]-mb+mc=0

Die vier unteren sind noch nicht vollständig. Es geht mir erstmal um die oberen acht.

Kegasetu 2. Nov 2020 09:20

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Kegasetu (Beitrag 1476529)

lzha1[1]*ma+2(lzha1[1]+lzha1[2])*mb+lzha1[2]*mc=mma1[1]
lzha1[2]*mb+2(lzha1[2]+lzha1[3])*mc+lzha1[3]*md=mma1[2]
lzha1[3]*mc+2(lzha1[3]+lzha1[4])*md+lzha1[4]*me=mma1[3]
lzha1[4]*md+2(lzha1[4]+lzha1[5])*me+lzha1[5]*mf=mma1[4]
lzha1[5]*me+2(lzha1[5]+lzha1[6])*mf+lzha1[6]*mg=mma1[5]
lzha1[6]*mf+2(lzha1[6]+lzha1[7])*mg+lzha1[7]*mh=mma1[6]
lzha1[7]*mg+2(lzha1[7]+lzha1[8])*mh+lzha1[8]*mi=mma1[7]
lzha1[8]*mh+2(lzha1[8]+lzha1[9])*mi+lzha1[9]*mj=mma1[8]

Es gilt mb bis mi herauszufinden.

Kegasetu 2. Nov 2020 09:40

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Fiete45 (Beitrag 1476489)
Moin Kegasetu,
mit dem Programm kannst Du Gleichungssysteme lösen.
Die Daten mußt Du selbst eingeben.
Die Größe der Systeme ist vom SpinEditN abhängig.
Viel Erfolg beim Testen!
Gruß Fiete

Super Teil!

Andreas13 2. Nov 2020 14:32

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Kegasetu (Beitrag 1476531)
lzha1[1]*ma+2(lzha1[1]+lzha1[2])*mb+lzha1[2]*mc=mma1[1]
lzha1[2]*mb+2(lzha1[2]+lzha1[3])*mc+lzha1[3]*md=mma1[2]
lzha1[3]*mc+2(lzha1[3]+lzha1[4])*md+lzha1[4]*me=mma1[3]
lzha1[4]*md+2(lzha1[4]+lzha1[5])*me+lzha1[5]*mf=mma1[4]
lzha1[5]*me+2(lzha1[5]+lzha1[6])*mf+lzha1[6]*mg=mma1[5]
lzha1[6]*mf+2(lzha1[6]+lzha1[7])*mg+lzha1[7]*mh=mma1[6]
lzha1[7]*mg+2(lzha1[7]+lzha1[8])*mh+lzha1[8]*mi=mma1[7]
lzha1[8]*mh+2(lzha1[8]+lzha1[9])*mi+lzha1[9]*mj=mma1[8]

Es gilt mb bis mi herauszufinden.

Was ist mit ma und mj? Sind sie bekannt oder kommen noch zwei weitere Gleichungen dafür?
Gruß, Andreas

Kegasetu 2. Nov 2020 15:06

AW: Lineares Gleichungssystem lösen
 
Zitat:

Zitat von Andreas13 (Beitrag 1476555)
Zitat:

Zitat von Kegasetu (Beitrag 1476531)
lzha1[1]*ma+2(lzha1[1]+lzha1[2])*mb+lzha1[2]*mc=mma1[1]
lzha1[2]*mb+2(lzha1[2]+lzha1[3])*mc+lzha1[3]*md=mma1[2]
lzha1[3]*mc+2(lzha1[3]+lzha1[4])*md+lzha1[4]*me=mma1[3]
lzha1[4]*md+2(lzha1[4]+lzha1[5])*me+lzha1[5]*mf=mma1[4]
lzha1[5]*me+2(lzha1[5]+lzha1[6])*mf+lzha1[6]*mg=mma1[5]
lzha1[6]*mf+2(lzha1[6]+lzha1[7])*mg+lzha1[7]*mh=mma1[6]
lzha1[7]*mg+2(lzha1[7]+lzha1[8])*mh+lzha1[8]*mi=mma1[7]
lzha1[8]*mh+2(lzha1[8]+lzha1[9])*mi+lzha1[9]*mj=mma1[8]

Es gilt mb bis mi herauszufinden.

Was ist mit ma und mj? Sind sie bekannt oder kommen noch zwei weitere Gleichungen dafür?
Gruß, Andreas

Die sind bekannt. Andernfalls würde sich das System auch nicht lösen lassen.
Ich bin gerade dabei mein Programm zu vereinfachen. Eventuell gelingt es mir sogar, den Code abzuändern und zu implementieren.
Danke für deine Unterstützung, ich würde mich später (morgen, übermorgen) nochmal melden und fragen, wenn ich nicht weiterkomme.

Andreas13 2. Nov 2020 19:17

AW: Lineares Gleichungssystem lösen
 
Hallo,
wenn allerdings ma und mj bekannt sind, habe sie auf der linken Seite des Gleichungssystems (GLS) nichts verloren! Denn die konstanten Terme sind per Definition auf der rechten Seite. Sie müssen dann von den jeweiligen mma1[Zeile] abgezogen werden.

Damit wird allerdings nicht nur die Struktur Deiner Koeffizienten-Matrix (= linke Seite des GLS; A_Matrix) und der Rechte-Seite-Vektor (b_Vektor) chaotisch, sondern auch die Benennung Deiner Variablen: Der Vektor mma1[..] enthält sowohl konstante, also bekannte Terme, wie auch die zu bestimmenden Unbekannten!

Zwei Vermutungen habe ich hierbei:

1):
Wenn ma und mj wirklich bekannt sein sollen, dann darfst Du sie nicht mit den Unbekannten zusammen speichern, sondern separat, unter ganz anderen Namen, sonst ist das Chaos perfekt und Du kannst später Deinen Code weder verstehen, noch warten, geschweige denn weiterentwickeln.

2):
Daher vermute ich eher, daß Du hier wahrscheinlich einen Spezialfall Deines GLS mit ursprünglich 10 Unbekannten behandeln willst, wenn zwei Unbekannte ma und mj definierte Werte annehmen. In diesem Fall solltest Du für die beiden „momentan“ konstanten Variablen ma und mj zwei weitere Gleichungen hinzufügen:

Code:
ma = mma1[0]
mj = mma1[9]
Damit wird die in der Struktur der Matrix und des Vektors steckende Gesetzmäßigkeit gewahrt. Das ist extrem wichtig für die Belegung von A-Matrix und b_Vektor, damit Du diese mit einer einfachen For-Schleife füllen kannst und nicht jedes Element mühselig und vor allem fehleranfällig „zu Fuß“ hinzufügen mußt.

Wenn Du obige Ratschläge beherzigst, entsteht auf der linken Seite Deines Gleichungssystems eine sogenannte Bandmatrix, ganz speziell eine Tridiagonal-Matrix. Diese läßt sich wesentlich schneller – mit einem Bruchteil an Operationen – und genauer (weniger Operationen, weniger Rundungsfehler) berechnen, allerdings nicht mit dem Gaußschen Algorithmus, sondern mit speziell für Tridiagonal-Matrizen entwickelten Algorithmen der linearen Algebra. Aber das würde hier zu weit führen. Daher nur so viel: Gauß ist OK, aber er macht hier riesige unnötige Umwege. Aber der heutige PC ist schnell und es fällt daher gar nicht auf.

Summe Summarum: Bevor Du also weiter programmierst, überprüfe zunächst Dein Gleichungssystem und benenne Deine Variablen mit Bedacht, damit Du es beim Implementieren der Algorithmen und bei der späteren Pflege der Routinen leichter hast.

Gruß, Andreas

Michael II 2. Nov 2020 20:43

AW: Lineares Gleichungssystem lösen
 
Noch ein Tipp: Zum Beispiel Maple und Mathematica können dir bei solchen Problemen oft sehr rasch helfen. Wenn du also Zugriff auf solche Software hast...

Maple gibt's auch online; allerdings in sehr reduzierter Form (LGS zum Beispiel nur bis dim=5):
https://de.maplesoft.com/products/St...pps/index.aspx

Wenn du oft Matheprobleme lösen musst und mit deiner Software Geld verdienst, dann lohnt sich die Anschaffung einer Vollversion ganz sicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Seite 4 von 5   « Erste     234 5      

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