Ich versuche, eine Funktion zu machen, die ein System von Gleichungen erzeugen kann, die in einem unterschiedlichen Programm gelöst werden. Die Gleichungen werden von einem Baum von isotopen Zerfällen erzeugt, aber der Einfachheit halber habe ich den folgenden Baum:Generiere das System von Gleichungen
[(A,0,1,5), (B,1,.4,4), (C,0,.4,0)]
[(A,0,1,5), (B,1,.6,6), (C,0,.6,0)]
wo das:
So kann diese in die zwei möglichen Zerfallsketten gemacht werden Format ist (Art, Anzahl, Wahrscheinlichkeit des Verfalls, Halbwertszeit). Ich versuche eine Funktion zu machen, die automatisch ein Gleichungssystem für einen Zerfallsbaum macht, das komplexer sein kann. Die Regeln sind die gleichen, obwohl für jeden Baum:
Für einige Arten X mit Eltern Y_1, Y_2, ..., Y_n:
X_final
= Summe für jede Elternarten (Wahrscheinlichkeit des Zerfalls von Y_n -> X * Menge Y_n/Halbwertszeit von Y_n) - Menge von X/Halbwertszeit von X, die wie folgt dargestellt werden:
und jede Spezies in der Kette wird seine eigene Gleichung sein müssen später gelöst. Also für das, ich das folgende System von Gleichungen will:
A_f = - A_i/5
B1_f = .4 * A_i/5 - B1_i/4
B2_f = .6 * A_i/5 - Β2_i/6
C = B1_i/4 + B2_i/6
Auch wenn die Halbwertszeit 0
ist, bedeutet, dass es stabil ist. Zurzeit erzeuge ich das Gleichungssystem, indem ich ein Wörterbuch von Strings erstelle, aber ich denke, es gibt einen besseren Weg, es zu tun. Ich plane, die Strings später zu Variablen zu machen, nachdem ich das System mit Strings erstellt habe. Hier ist mein Code:
A = 'A'
B = 'B'
C = 'C'
D = 'D'
chain1 = [(A,0,1,5),(B,1,.4,4),(C,0,.4,0),(D,0,.4,0)]
chain2 = [(A,0,1,5),(B,2,.6,6),(C,0,.6,0),(D,0,.6,0)]
master_chain = [chain1, chain2]
def equation_builder(master_chain):
master_equations = {}
m = 0
for chain in master_chain:
n = 0
for item in chain:
if item == chain[0]:
equation = {str(item[0]) + str(item[1]) + 'f' :\
'-' + str(item[0]) + str(item[1]) + 'i/' + str(item[3])}
master_equations.update(equation)
elif str(item[0])+str(item[1])+'f' not in master_equations:
equation = {str(item[0]) + str(item[1]) + 'f' :\
str(item[2]/chain[n-1][2])+str(chain[n-1][0]) +
str(chain[n-1][1])+'i/' + str(chain[n-1][3])+\
'-'+str(item[0])+str(item[1])+'i/'+str(item[3])}
master_equations.update(equation)
elif str(item[0])+str(item[1])+'f' in master_equations \
and master_chain[m-1][n-1] != master_chain[m][n-1]:
old_equation = master_equations[str(item[0])+str(item[1])+'f']
new_equation = old_equation + '+' +\
str(item[2]/chain[n-1][2])+str(chain[n-1][0]) +\
str(chain[n-1][1])+'i/' + str(chain[n-1][3])
equation = {str(item[0])+str(item[1])+'f' : new_equation}
master_equations.update(equation)
n += 1
m += 1
return master_equations
if __name__ == '__main__':
print equation_builder(master_chain)
Wie akzeptiert das separate Programm Formeln, die formatiert werden sollen? –