|
Evron |
Forum-Fortgeschrittener
|
|
Beiträge: 51
|
|
|
|
Anmeldedatum: 22.11.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.02.2010, 15:13
Titel:
|
|
Hallo,
schön gerade diese Diskussion zu finden, da ich gerade gleiches Problem habe und somit erinnert ihr mich an den Grund, der mir irgendwie schön völlig entfallen war. Aber für den Fall, dass jemand mal das gleich Problem hat, will ich es kurz ausführen.
Ein Rechner arbeitet mit Binärzahlen, d.h. alle Zahl werden durch eine Summe von Zweierpotzenzen dargestellt. So ist z.B. 35 = 1*2^5 + 1*2^2 + 1*2^0, was 100011 entspricht. Bei Zahlen kleiner 0 werden sie durch Summation von Zweierpotzen mit negativem Exponenten dargestellt, dass wird entsprechend schwierig, wenn man das z.B. mit der 0,3 versucht, dann wird daraus 0,010011...
Einzige Lösung, wie Harald schon meinte scheint einfach nur zu versuchen mit Werten größer 0 zu arbeiten also entsprechend zu multiplizieren.
|
|
|
|
|
Drover |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 31.08.20
|
|
|
|
Wohnort: Pfalz
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 31.08.2020, 14:50
Titel: Problem Verstanden, Lösung nicht in Sicht ^^
|
|
|
|
|
Guten Tag,
nachdem ich seit 2 Wochen an einer Simulation sitze und mich die ganze Zeit um das Hauptproblem gedrückt habe bzw. keine Idee hatte an was es liegen könnte hat mir dieser Thread schonmal geholfen zu wissen wieso. Nur das Problem bleibt:
Ich bin dabei eine Thermische Trennung zu simulieren die (zu Forschungszwecken) in einem geschlossenen System (Rektifikationskolonne) stattindet. Um nicht zu sehr mit details zu langweilen: Es geht nichts rein und nichts raus, die Stoffströme laufen nur im Kreis. Wenn ich jetzt die Ströme in der Kolonne berechne muss! das was oben rausgeht genau dem entsprechen was unten wieder reingeht sonst kann sich nie ein Gleichgewicht einstellen.
Dieses kurze Beispiel zeigt mir für "Test" den Wert "0.018900000000000", für Test 2 aber "-4.336808689942018e-19" an. Ich bekomme bei minimaler Änderung einiger Eingangsparameter die verrücktesten Ergebnisse, weil das Modell nicht funktionieren kann, wenn die Menge der Flüssigkeit in der Kolonne größer oder kleiner wird.
Viel Text um zu sagen ich verstehe das Problem mit dem binären Rechnen der Programmiersprache, aber hat jemand ne Idee wie ich in meinem Fall damit umgehen könnte ?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 31.08.2020, 18:16
Titel:
|
|
|
|
|
Hallo,
daran, dass hier eine Differenz ungleich 0 herauskommt, lässt sich nur zuverlässig etwas ändern, wenn man mit symbolischen Zahlen arbeitet.
Die Frage dürfte aber eher sein: inwiefern genau bereitet diese Ungenauigkeit ein Problem bzw. was sind die Berechnungen, die mit diesen Variablen durchgeführt werden?
Wenn ich an Gramm als Einheit denke, dann dürfte die Ungenauigkeit in der Größenordnung eines Atoms sein.
Eine Alternative kann ein Wechsel der Einheit sein. Wenn ich z.B. an µg statt g denke, dann ist die Rechnung exakt, da kleine ganze Zahlen im Binärsystem eine exakte Darstellung haben:
Sich darauf zu verlassen, dass nicht doch irgendwo Dezimalzahlen ins Spiel kommen, halte ich aber für ziemlich riskant.
Grüße,
Harald
P.S.: nein, alle Zahlen mit 1e6 multiplizieren wird das Problem allgemein nicht lösen, da dort die Ungenauigkeit erhalten bleiben kann.
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Drover |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 31.08.20
|
|
|
|
Wohnort: Pfalz
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 31.08.2020, 19:43
Titel:
|
|
|
|
|
Hallo nochmal,
danke vielmals für die Antwort und den Tipp mit den symbolischen Zahlen , das werde ich mir näher anschauen, auch war ein Ansatz die Zahlen eventuell bei jeder Iteration zu runden und dafür zu sorgen das die Rechnung so aufgeht.
Habe natürlich irgendwie doch noch gehofft das ich nur nen dummen Denkfehler habe und man matlab einfach sagen kann was man möchte ^^
Ich wollte nicht zu sehr ins Detail gehen, ist ja ein matlab Forum und keines der Verfahrenstechnik aber der Vollständigkeit halber:
Ich bekomme wenn ich versuche Gleichgewichte zu berechnen bei einer Veränderung der Eingangsparameter zum Teil negative Lösungen(nicht möglich) / unrealistische Ergebnisse oder Warnungen das die "Matrix close to singular or badly scaled" ist. Da durch die ungleichen Ströme in einem theoretisch ideal geschlossenen System dann einfach "Stoff A" irgendwann fehlt/größer/kleiner wird denke ich mir kann fsolve hier einfach keine vernünftigen Lösungen für einen stationären Zustand finden.
In meinem Fall berechnet sich LK und D normalerweise aus dem Dampfstrom und dem Rücklaufverhätlnis in der Kolonne.
und diese Angaben werden gebraucht um über fsolve Gleichgewichtszustände auf jedem Boden der Kolonne zu berechnen.
Ein Wechsel der Einheiten kommt im Prinzip zwar in Frage, aber da ich, sobald ich tiefer in die dynamische Simulation gehe / die Vorgänge genauer beschreiben will, sowieso genauere Werte mit Nachkommastellen bekomme ist die Frage in wie weit mir geholfen wäre.
Gruß
Alex
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 31.08.2020, 20:23
Titel:
|
|
Hallo,
ist für mich schwierig nachvollziehbar, insbesondere ist mir nicht klar, wie die Zeitdynamik ins Spiel kommt. Eine Möglichkeit kann sein, bei beispielsweise drei Stoffen die Menge des dritten nicht über welche Gleichungen auch immer, sondern über
zu berechnen. Dann bleibt der Fehler in sehr engen Grenzen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Drover |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 31.08.20
|
|
|
|
Wohnort: Pfalz
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 01.09.2020, 10:23
Titel:
|
|
Guten morgen,
nachdem ich noch gefühlt 100 Möglichkeiten ausprobiert habe und die Werte auf verschiedene Art und Weisen berechnet oder als symbolisch definiert oder oder oder habe, habe ich die Zeile die mein Gleichgewicht im Kopf der Kolonne beschreibt der Übersichtlichkeit halber mal umgeschrieben und siehe da:
Für Matlab scheint
nicht das gleiche zu sein wie :
Aus welchem Grund auch immer..., jedenfalls liefert mir fsolve jetzt keine Fantasiewerte mehr die rein physikalisch keinen Sinn machen.
Danke Harald für´s damit befassen, bin mir sicher auch wenn ich den Fehler jetzt erstmal weg habe werden mir das Hintergrundwissen und die Tipps nochmal helfen
Gruß Alex
|
|
|
|
Gehe zu Seite Zurück 1, 2
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|