2016-08-02 23 views
-1

Ich hoffe, mein Titel ist verständlich. Ich mache ein Universitätsprojekt darüber, wie Chlor (zu Desinfektionszwecken) im Meerwasser mit der Zeit zerfällt. Es wird angenommen, dass es einen schnellen anfänglichen Zerfall gibt und dass er sich dann verlangsamt, was zu zwei Abklingraten führt, die jedoch von demselben exponentiellen Gesamtabfall herrühren. Es wurde schon einmal gemacht, aber ich berechne die Rate für das Meerwasser in meiner Stadt.Zwei Abklingraten für eine exponentielle Abklingkurve

Ich bin neu bei Python und fing erst an, es für dieses Projekt zu lernen. Andere Antworten auf den exponentiellen Zerfall auf dieser Seite behandeln nur eine Zerfallsrate anstelle der zwei, die ich brauche.

Ich habe die Werte und habe die Graphen gemacht, also habe ich x- und y-Werte. Die Form, in der ich die Antwort brauche, ist c (t) = c (a * exp^(- mt)) + ((1-a) * exp^(- nt))
Wo m und n die Raten sind , t ist Zeit, c ist Anfangskonzentration, a's sind nur Proportionalitätskonstanten. Die m-Rate ist die schnelle Anfangsrate und die n-Rate ist die langsamere. Der c (t) -Wert wird schließlich Null erreichen oder ihm sehr nahe kommen.

Die Daten sind in ascii/txt-Format, oder ich könnte es nur geben, wie x = np.array ...

Wenn es nicht möglich ist, es auf einmal zu tun, dann wäre es möglich, Wenn ich die Abschnitte aufteile, um die beiden Raten getrennt zu erhalten? d. h. ich gebe nur die Daten ein, die für die m-Rate benötigt werden, und berechne anschließend die n-Rate.

Ich habe die oben erwähnte Form gesehen, die ich zu wissenschaftlichen Papieren brauche, aber ich bin mir nicht sicher, wie sie es gemacht haben.

Vielen Dank im Voraus für jeden, der

+1

Hallo Matt, Für mich persönlich ist Ihre Frage nicht ganz klar. Ich verstehe, dass Sie eine Funktion 'c (t)' haben, aber es ist mir nicht klar, was Sie erreichen wollen. Möchten Sie diese Funktion plotten oder den Wert an einem bestimmten Punkt lösen? Es könnte hilfreich sein zu sehen, was Sie mit den Beispielen tun möchten, die Sie erwähnen (die anderen Antworten auf dieser Website, die Sie gelesen haben). –

+0

Hallo @Patrik H. Ich würde gerne in der Lage sein, an bestimmten Punkten nach Werten zu suchen. Also brauche ich die Raten 'm' und 'n' sowie 'a'. [Die Graphen, die ich basierend auf den bisherigen Experimenten gemacht habe, sind nicht perfekt, aber sie ähneln exponentiellen Zerfällen, also gehe ich davon aus, dass Python sie wie ideale exponentielle Zerfälle behandelt. In anderen Beispielen fangen sie an, ** die Funktion mit den Variablen (t, a, m, n) ** zu definieren, aber dann die ** return ** -Zeile (Beispiel = a * np.exp (-m * t) + n) hat nur einen exponentiellen Term in sich. Die Antwort von Alex könnte helfen? – Matt

+0

Bedeutet das, dass Alex deine Frage beantwortet oder gibt es noch etwas, bei dem du Hilfe brauchst? –

Antwort

0

Ihre Frage hilft, ist nicht ganz klar, aber es scheint, dass Sie versuchen, am besten Fitparameter für die doppelte Exponentialfunktion Sie zitieren zu finden.

Eine einfache Möglichkeit ist die scipy.optimize.curve_fit Funktion zu verwenden. Zunächst definieren die Funktion Sie

import numpy as np 
    import scipy.optimize 
    def my_exp(t,a,m,n): 
     return a*np.exp(-m*t) + (1-a)*np.exp(-n*t) 

und übergeben Sie die Funktion zusammen mit Ihren Daten, anfängliche Vermutung, was die Parameter sein könnte, etc. an die curve_fit Funktion angepasst werden soll.

parameters, their_covariance = scipy.optimize.curve_fit(my_exp, xdata, ydata) 

Tipp: Sie können lesen, was die Funktion im Detail funktioniert durch help(scipy.optimize.curve_fit) in der Python-Shell aufrufen.

+0

Danke Alex. Das scheint mich auf den richtigen Weg gesetzt zu haben – Matt

+0

Also, beantwortet es deine Frage? Wenn nicht, seien Sie bitte genauer, wonach Sie suchen. Sie schreiben, dass Sie nach einer Funktion c (t) = (etwas exponentiell) suchen; Der obige Code definiert eine solche Funktion und hilft Ihnen dabei, die besten Parameter für 'a',' m' und 'n' zu finden. Was brauchst du noch? – Alex

+0

Ja, das war die Antwort, nach der ich gesucht habe. Ich wusste einfach nicht, dass ich nur die Werte von "Parametern" überprüfen musste (in meinem Code einfügen), weil die Werte entgegengesetzt zu dem waren, was ich erwartet hatte, und ich nahm an, dass sie falsch lagen. Das ist das nächste Problem: – Matt