while schleife



  • vielleicht liegt das problem an deinen formeln, rundungsfehlern und deren fortpflanzung, etc. und nicht am programm?



  • nein, das ist ausgeschlossen. das habe ich schon überprüft. was sich in a_Mg2SiO4(T,x) ändert ist nicht nur die ganzen x[] sondern auch das DG_r_Mg2SiO4(t). ich vermute, dass es was damit oder was mit der while schleife und a_Mg2SiO4(T,x) in der if anweisung zu tun haben.

    viele grüße
    simsa



  • vermut0r schrieb:

    vielleicht liegt das problem an deinen formeln, rundungsfehlern und deren fortpflanzung, etc. und nicht am programm?

    ((0.00000E+00)*pow(t,3))



  • hab gerade mal ein bischen nach deinen konstanten gegoogelt, für alle die hier ein bischen mit rätseln, evtl. bringts einem was, die konstanten zu den "// Fit - Gleichungen" hab ich hier gefunden
    http://www.ita.uni-heidelberg.de/~gail/intdust/gsol-tab.DA

    GMG2SIO4 => DG_r_Mg2SiO4
    GMGSIO3  => DG_r_MgSiO3
    
    sowas gabs auch noch im angebot ;) 
    GMGSIO3=8.74400D+3/TG-6.92565D+5+(1.77877D+2-1.41412D-3*TG)*TG
    GMG2SIO4=7.52334D+4/TG-9.38369D+5+(2.47581D+2-3.14980D-3*TG)*TG
    

    wenn ich rausgefunden hab was eHe und R ist wär ich schon wieder ein stückchen weiter evtl. klärt uns jmd. auf was das eingentlich macht 😕
    mit "das ganze ist ein solver zum lösen von nichtlinearengleichungssystem für ein astrophysikalisches system" kann ich leider nur wenig anfangen 😞

    "t" sollte ja wie fast immer für die zeit stehen, also könnte da ja so gut wie alles rein was in den wertbereich eines double rein geht

    nichtlinearengleichungssystem ... hast dir das selbst ausgedacht oder gibts dazu einen algo wo man ein bischen spicken kann sowas in die richtung wie einen namen z.b. Runge-Kutta-Verfahren o.ä.

    😋

    lg lolo



  • denke es sollte eher einer der folgenden in frage kommen
    http://de.wikipedia.org/wiki/Liste_numerischer_Verfahren#Nichtlineare_Gleichungssysteme
    ich find schon noch raus welcher da verwendet wird 😃



  • Hallo noobLolo,

    das ist nicht so interessant was du da bei google über meine konstanten gefunden hast. bei mir sind die DG_r_XXX freien reaktions entalphien der reaktion von der specie XXXX. genauso wie die aus dem link. Falls dich das interessiert. die ganzen reaktions entalphien sind über T gefittet. daher die ganzen T bzw. TG bzw. bei mir t. t hat bei mir nichts mit der Zeit zu tun. sieh das als eine konstante.

    wenn dich die ganzen konstanten interesseiren, wie man sie berechnet empfehle ich dir die JANAF Tables oder BARIN Tables....

    eHe ist die Elementenhäufigkeit von Helium und R ist die Gaskonstante.
    WIE GESAGT. MEIN PROBLEM LIEGT NICHT IN DEN KONSTANTEN. DAS IST ALLES RICHTIG. MEIN PROBLEM MUSS WAS IN DER while schleife sein

    > Runge-Kutta-Verfahren o.ä.
    das ist was ganz anderes, hat hiermit nichts zu tun.

    ((0.00000E+00)*pow(t,3))
    das ist nicht das problem, ergebnis wäre ja 0 oder "maschinisch" 1e-248....

    gruß
    simsa



  • Kannst du das Problem mal in mathematischer Form beschreiben? (Das Forum unterstuetzt auch Latex)



  • da gibt es kein mathematisches problem. das problem ist, wenn ich die if anweisungen nur über T steuere funktioniert alles. wenn ich aber hingehe und es über a_Mg2SiO4(T,x) steuern will, geht es nicht.

    Es kann nichts mit der funktion a_Mg2SiO4(T,x) zu tun haben, da es zwar die "richtigen" werte liefert, aber nur zur falschen T.

    wenn es euch hilft, ich benutze den nleq_err solver.

    viele grüße
    simsa



  • ich hoffe, mein code ist übersichtlich:

    Eben nicht. Deswegen habe ich nach einer anderen Formulierung gefragt. Dein Code ist unuebersichtlich, da Berechnung und Ausgabe gemischt sind. Wahrscheinlich geht alles irgendwie einfacher.



  • simsa schrieb:

    da gibt es kein mathematisches problem. das problem ist, wenn ich die if anweisungen nur über T steuere funktioniert alles. wenn ich aber hingehe und es über a_Mg2SiO4(T,x) steuern will, geht es nicht.

    Wie wäre es, wenn du das ganze mit den Werten, die das Fehlverhalten verursachen debuggst? Die Rechnung in Teilschritte aufteilen und den Bug dingfest machen.



  • ich glaube hier im forum kann man mir nicht helfen. der eine redet von mathematischer formulierung der andere von debuggen und der andere ist der meinung, dass man code einfacher schreiben kann....

    leute kurz gesagt, ihr wisst es gar nicht besser. schade um so ein forum.

    gruß
    simsa



  • simsa schrieb:

    ich glaube hier im forum kann man mir nicht helfen. der eine redet von mathematischer formulierung der andere von debuggen und der andere ist der meinung, dass man code einfacher schreiben kann....

    leute kurz gesagt, ihr wisst es gar nicht besser. schade um so ein forum.

    gruß
    simsa

    Schade um dich, wenn du gut gemeinte Ratschläge nicht haben willst. Wenn dein Programm sich nicht so verhält, wie du gerne möchtest, dann ist Debuggen die Methode deiner Wahl - sollte es jedenfalls sein. Dann musst du einfach mal Schritt für Schritt mit dem Debugger durch das Programm gehen, die Zustände aller Variablen und den Ablauf überprüfen und so deinen Fehler aufspüren. So funktioniert das nun mal. Man findet Fehler selten, wenn man stundenlang auf einen Riesencode starrt, sondern eher, wenn man ihn zur Laufzeit aufspürt.



  • Versuch mal, deine Berechnung auf mehrere Funktionen aufzuteilen, vielleicht blickt man dann besser durch. Im Moment blickst du ja nicht mal mehr selbst durch.

    simsa schrieb:

    leute kurz gesagt, ihr wisst es gar nicht besser. schade um so ein forum.

    Lustig, das gleiche hab ich mir nach Zeile 23 über dich gedacht.
    🙂


Anmelden zum Antworten