Großes lineares Gleichungssystem lösen
-
Hallo,
ich stehe gerade vor dem Problem, ein großes lineares Gleichungssystem lösen zu müssen. Dabei geht es um diese Grundkonstellation.
Es sollen die Heizlasten in einem Gebäude mit max. 27 Räumen berechnet werden. Das Ganze funktioniert mit der Formel
wobei jedes Q folgendermaßen berechnet werden kann:
Q=k\*A\*(t-t_a)
Dabei entspricht Q dem Wärmeübergang einer Wand zum Nachbarraum. K beschreibt die Eigenschaften der Wand, A die Fläche der Wand und t die Temperatur des Raumes. ta entspricht der Temperatur des angrenzenden Raumes.Wenn man das jetzt alles in die erste Gleichung einsetzt, kommt da eine etwas längliche Gleichung heraus. Diese lässt sich einfach berechnen, wenn man die Temperaturen innerhalb der Räume konstant hält und Qzu bestimmen möchte.
Das Problem stellt sich aber, wenn Q zugeführt und damit konstant gehalten wird und man die sich resultierenden Temperaturen ermitteln möchte. Wenn man die Gleichung oben entsprechend für jeden Raum ausklammert und umstellt usw. erhält man ein lineares Gleichungssystem mit 27 Gleichungen und 27 Unbekannten.
Ich habe dazu jetzt auch schon zwei Algorithmen versucht, die aber beide zu irrealen Ergebnisen geführt haben. Hat vielleicht hier jemand eine Idee, wie dieses Problem zu lösen würde, da ich mit meinem Latein ziemlich am Ende bin?
Meine bisherigen Ergebnise findet ihr unter http://www.berberich-is.de/forum/src.zipHeiko
-
Hy,
Habe mich nicht sehr um dein Problem gekümmert, aberGleichungssystem mit 27 Gleichungen und 27 Unbekannten
sowas kann Matlab hervorragend, und sonst Octave (free and open source).
Gruss
-
eigrntlich sieht das problem lieb aus.
und zwar sieht es für mich so aus, als müsse mal als temperaturen etwas einigermaßen sinnvolles schätzen (sagen wir mal 20Grad) und dann ne iteration ansetzen.
für jeden raum einfach die temeperatur anhand der nachbarraumtemeraturen und wärmewiderstände berechnen. ich vermite mal, die ist das gewichtete mittel der nachbartemeperaturen mit den jeweils A*k als gewicht? na, das kannste besser als ich, du bist in der materie drin.
dabei stärt es gar nicht, daß die nachbarraumtemperaturen noch nicht stimmen, sondern nur ungenaue schätzwerte sind. hauptsache ist, daß der gerade berechnete schätzwert sich verbessert.
und das macht man dann einfach so lange, bis sich die werte nicht mehr viel ändern.
(auch von mir erfunden aber keine goldgrube).die laufzeit dürfte größer sein als die für ein direktes ausrechnen mit gauss und konsorten. aber es ist einfacher zu programmieren und wenn das system konvergiert, ist die lösung sogar glaubwürdig.
-
Hy,
Habe mich nicht sehr um dein Problem gekümmert, aberGleichungssystem mit 27 Gleichungen und 27 Unbekannten
sowas kann Matlab hervorragend, und sonst Octave (free and open source).
Gruss
-
Hallo Diabolito,
genau das sagt mein Prof. auch. Das dumme ist nur, dass er das Ganze innerhalb eines Programms mit entsprechender Visualisierung usw. haben möchte. Insofern bringt es mir wenig, wenn es MathLab und Konsorten wunderbar können.
-
Hallo volkard,
ich versuche mir gerade die iterative Lösung vorzustellen. Allerdings habe ich damit noch meine Probleme. Wenn ich Schätzwerte in die Gleichungen einsetze kommt ja höchstwarscheinlich eine falsche Lösung heraus. Nun verändere ich einen Wert um mich der Lösung anzunähern. Allerdings sind in jeder Gleichung die Temperaturen der 6 angrenzenden Räume enthalten. Da ich aber nur einen Wert verändern kann, verstehe ich noch nicht so ganz, wie der Algorithmus aussehen müsste, damit ich irgendwann auf die richtige Lösung kommen kann.
Ergänzung
Allerdings reduziert sich in den Eckräumen die Anzahl auf drei Unbekannte, da die Außentemperatur bekannt ist und nicht verändert wird.Heiko
-
heikob schrieb:
Da ich aber nur einen Wert verändern kann, verstehe ich noch nicht so ganz, wie der Algorithmus aussehen müsste, damit ich irgendwann auf die richtige Lösung kommen kann.
ich bau mal ein haus.
A-B-C-D
A ist außentemperatur von 10Grad. D ist heizungskeller mit 20Grad. hab keine anderen zu- oder abflüsse. alle wände gleich.
zuerat schätze ich alles auf 20 grad.
10 20 20 20
dann berechne ich B (B ist hier der mittelwert aus A und C)
10 15 20 20
dann berechne ich C
10 15 17.5 20
dann berechne ich B
10 13.75 17.5 20
dann berechne ich C
10 13.75 16,87 20
und so weiter. bald schon ändern sich die temperaturen nur noch in der fünften nachkommastelle und wir können anhalten.edit: oh, für einen prof ist das. dann mußte aber aufpassen. ich hab das verfahren zweimal für profs gecodet. beide male war noch krimskrams dabei. nichtlineares gezeugs oder fallunterscheidungen, das war mit einfachen matrizen nicht zu knacken. bei dieser aufgabe geht's aber und profs werden evtl furchbar wild, wenn man als informatiker keine hochmathematischen (wasauchimmer das sein mag) lösungen benutzt.
-
darfst du fremde bibliotheken einbinden? schnell ist die Singulärwertzerlegung, damit kannst du dann das pseudoinverse berechnen, und damit die gleichung lösen. das ergebnis ist nicht umbedingt das beste, aber es tut
-
Ansonsten kannst du mit Matlab auch stand-alone progs mit Gui schreiben, ist zwar nicht mein lieblingsteil, aber du kannst dann den matlab kernel verwenden.
-
nur mal so.
ist das nicht nur eine Gleichung für 27 unbekannte?
-
bf7f: Er wird doch die Bilanz sicher für jeden Raum aufstellen um damit an die 27 Unbekannten zu kommen.