@einfachtobi hier der Code.
Es soll ein Ansatz per Eingaben berechnet, geplottet und weiterverarbeitet werden. (Excel wäre möglich, Vorgabe ist Python und ich sehe die Automation besser gegeben.
Zuerst soll das Programm starten und die Einwaagen, Zeitpunkte der Proben und die Messwerte eingegeben werden (das funktioniert erstmal).
Dann soll daraus eine Ausbeute berechnet werden und diese graphisch gegen die Zeit aufgetragen werden.
Hier der erste Haken, die Berechnung für t = 0 mit der Sorbitolkonzentration führe ich nicht händisch durch. Bislang habe ich dort immer eine 100 eingegeben + die 3 Messwerte. Dies führt zum Zeitpunkt t = 0 zu Ausbeuten von 112% für Sorbitol, was nicht möglich ist
Daher suche ich nach einem Weg, wie ich das erste Feld im Array für sorbitol_conc durch die davor gewählten eingaben errechnen kann und anschließend die 3 fehlenden Felder (sorbitol_conc[1],[2],[3]) per Hand eintage.
Sollte dies funktionieren, soll das Programm dann den Grafen plotten, speichern, eine Datei mit den Ausbeuten ausgeben und die weiteren Faktoren berechnen.
Idealerweise werden die berechneten Faktoren/Konstanten dann nochmal in eine neue Datei gespeichert, welche jedesmal um den nächsten Faktor (beim nächsten Prgrammdurchlauf) erweitert wird. So könnte ein zweites Programm die Datei öffnen und ebenfalls plotten.
Das würde die gesamte Auswertung auf zweimal "ausführen" und einmal Eingabe der bekannten Werte reduzieren.
Möchte hinzufügen, dass ich gesamt Python seit etwa 3 Wochen angehe, also noch absoluter Anfänger bin.
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
#Eingabe der Einwaagen, Zeitpunkte der Proben und Messdaten der Proben
t = np.fromstring(input("Zeitpunkt der Probenname in h:"), sep=" ")
m_sorbitol = float(input("Einwaage Sorbitol in g:")) * 1000 #Abfrage in g
m_ansatz = float(input("Einwaage gesamt in g:")) #Abfrage in g
#start_sorbitol = m_sorbitol / m_ansatz
sorbitol_conc = np.fromstring(input("Sorbitol Koncentration aus der HPLC Leerzeichen getrennt"), sep=" ")
#isosorbid_conc = np.fromstring(input("Isosorbid Koncentration aus der HPLC Leerzeichen getrennt"), sep=" ")
nebenprodukt_conc = np.fromstring(input("2,5-AHS + 1,4-AHS Koncentration aus der HPLC Leerzeichen getrennt"), sep=" ")
#pg_conc = np.fromstring(input("PG Koncentration aus der HPLC Leerzeichen getrennt"), sep=" ")
sorbitol_conc = np.array([100, 23.74])
isosorbid_conc = np.array([0, 51.2])
#eg_conc = np.array([0, 0.12])
#pg_conc = np.array([0, 0.5])
#Berechnung sämtlicher Hintergründe
mw_sorbitol = 182.17
n_sorbitol = m_sorbitol / mw_sorbitol
mw_isosorbid = 146.14
m_isosorbid_soll = mw_isosorbid * n_sorbitol
mw_nebenprodukt = 164.16
m_nebenprodukt_soll = n_sorbitol * mw_nebenprodukt
#mw_pg = 76.09
#m_pg_soll = n_sorbitol * mw_pg
m_gesamt_sorbitol = m_ansatz * sorbitol_conc
m_gesamt_isosorbid = m_ansatz * isosorbid_conc
m_gesamt_nebenprodukt = m_ansatz * nebenprodukt_conc
#m_gesamt_pg = m_ansatz * pg_conc
ausbeute_sorbitol = m_gesamt_sorbitol / m_sorbitol * 100 #<----- Diese darf zum Array[0] nicht >100% liegen, kommt sie aktuell leider
ausbeute_isosorbid = m_gesamt_isosorbid / m_isosorbid_soll * 100
ausbeute_nebenprodukt = m_gesamt_nebenprodukt / m_nebenprodukt_soll * 100
#ausbeute_pg = m_gesamt_pg / m_pg_soll * 100
#Plotten der Grafik
plt.plot(t, ausbeute_isosorbid, label ="Isosorbid")
plt.plot(t, ausbeute_sorbitol, label ="Sorbitol")
plt.plot(t, ausbeute_nebenprodukt, label="1,4-AHS + 2,5-AHS")
#plt.plot(t, ausbeute_pg, label="Propylenglykol")
titel = input("Diagramm- und Dateinamen eingeben:")
plt.title(titel)
plt.ylabel("Ausbeute in %")
plt.xlabel("Zeit in [h]")
plt.legend(loc = "best")
plt.savefig(titel)
#Überprüfung für mich
print(ausbeute_isosorbid, ausbeute_sorbitol, ausbeute_nebenprodukt) #ausbeute_pg)
file = np.array(["Isosorbid", ausbeute_isosorbid, "Sorbitol",ausbeute_sorbitol, "2,5-AHS + 1,4-AHS", ausbeute_nebenprodukt]) # "PG", ausbeute_pg])
#auswerfen einer txt-Datei
with open(titel, "w") as output:
output.write(str(file))
#Berechnung von k, welche anschließend in einer Datei idealerweise gespeichert werden soll, damit ein zweites Programm die Datei zu einer Grafik plotten kann (es sollen verschiedene k-Werte dort hinein geschrieben werden)
if len(t) == 4:
if np.max(ausbeute_isosorbid) == ausbeute_isosorbid[1]:
k_isosorbid_1 = ausbeute_isosorbid[1] - ausbeute_isosorbid[0]
elif np.max(ausbeute_isosorbid) == ausbeute_isosorbid[2]:
k_isosorbid_1 = ausbeute_isosorbid[2] - ausbeute_isosorbid[0]
elif np.max(ausbeute_isosorbid) == ausbeute_isosorbid[3]:
k_isosorbid_1 = ausbeute_isosorbid[3] - ausbeute_isosorbid[0]
else: k_isosorbid_1 = (ausbeute_isosorbid[1] - ausbeute_isosorbid[0])
print("maximale Ausbeute Isosorbid", k_isosorbid_1, "%")
if len(t) == 4:
if np.max(ausbeute_isosorbid) == ausbeute_isosorbid[1]:
k_zeit = (t[1] - t[0]) * 3600
elif np.max(ausbeute_isosorbid) == ausbeute_isosorbid[2]:
k_zeit = (t[2] - t[0]) * 3600
elif np.max(ausbeute_isosorbid) == ausbeute_isosorbid[3]:
k_zeit = (t[3] - t[0]) * 3600
else: k_zeit = (t[1] - t[0]) * 3600
print("Maximale Ausbeute erreicht nach", k_zeit, "Sekunden")
k_isosorbid_konstante = k_isosorbid_1 / k_zeit
print("Geschwindigkeitskonstante k(Isosorbid)", k_isosorbid_konstante)
if len(t) == 4:
if np.min(ausbeute_sorbitol) == ausbeute_sorbitol[1]:
k_sorbitol = ausbeute_sorbitol[0] - ausbeute_sorbitol[1]
elif np.min(ausbeute_sorbitol) == ausbeute_sorbitol[2]:
k_sorbitol = ausbeute_sorbitol[0] - ausbeute_sorbitol[2]
elif np.min(ausbeute_sorbitol) == ausbeute_sorbitol[3]:
k_sorbitol = ausbeute_sorbitol[0] - ausbeute_sorbitol[3]
else: k_sorbitol = (ausbeute_sorbitol[0] - ausbeute_sorbitol[1])
print("maximale Ausbeute Sorbitol", k_sorbitol, "%")
if len(t) == 4:
if np.min(ausbeute_sorbitol) == ausbeute_sorbitol[1]:
k_zeit = (t[1] - t[0]) * 3600
elif np.min(ausbeute_sorbitol) == ausbeute_sorbitol[2]:
k_zeit = (t[2] - t[0]) * 3600
elif np.min(ausbeute_sorbitol) == ausbeute_sorbitol[3]:
k_zeit = (t[3] - t[0]) * 3600
else: k_zeit = (t[1] - t[0]) * 3600
print("Maximale Ausbeute erreicht nach", k_zeit, "Sekunden")
k_sorbitol_konstante = k_sorbitol / k_zeit
print("Geschwindigkeitskonstante k(Sorbitol)", -k_sorbitol_konstante)