AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Lineares Gleichungssystem lösen

Ein Thema von Kegasetu · begonnen am 21. Okt 2020 · letzter Beitrag vom 10. Nov 2020
Antwort Antwort
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#1

AW: Lineares Gleichungssystem lösen

  Alt 2. Nov 2020, 13:32
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#2

AW: Lineares Gleichungssystem lösen

  Alt 2. Nov 2020, 14:06
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.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Lineares Gleichungssystem lösen

  Alt 2. Nov 2020, 18:17
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Lineares Gleichungssystem lösen

  Alt 2. Nov 2020, 19:43
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.
Michael Gasser
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Lineares Gleichungssystem lösen

  Alt 2. Nov 2020, 20:12
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 ( 2. Nov 2020 um 20:15 Uhr)
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Lineares Gleichungssystem lösen

  Alt 3. Nov 2020, 06:48
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
Zuerst muß man Ordnung in die Gleichungen bringen...

Gruß, Andreas
Hallo Andreas

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
Michael Gasser
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#7

AW: Lineares Gleichungssystem lösen

  Alt 3. Nov 2020, 06:50
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
Also chaotisch sollte das eigentlich nicht werden. Die bekannten Werte würde ich einfach gegen die Konstanten auf der anderen Seite rechnen. Das klappt schon, da bin ich ganz euphorisch. Ich sitze jetzt wieder dran und hoffe, ich bin nachher schon so weit die ersten versuche zu starten.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:13 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