Я пытаюсь создать функцию, которая может генерировать систему уравнений, которые решаются в отдельной программе. Уравнения генерируются из дерева изотоп распадается, но для простоты я имею следующее дерево:Создать систему уравнений
Так что это может быть сделано в 2-х возможных цепочек распада:
[(A,0,1,5), (B,1,.4,4), (C,0,.4,0)]
[(A,0,1,5), (B,1,.6,6), (C,0,.6,0)]
где формат (вид, число, вероятность распада, период полураспада). Я пытаюсь сделать функцию, которая автоматически создаст систему уравнений для дерева распада, которая может быть более сложной, чем эта. Правила такие же, хотя для любого дерева:
Для некоторых видов X с родителями y_1, Y_2, ..., Y_n:
X_final
= сумма для каждого из родительских видов (вероятность распада Y_n -> X * количество Y_n/полураспада Y_n) - сумма X/полураспада X, который может быть представлен в виде:
и каждый вид в цепи будет иметь свое собственное уравнение будет решил позже. Так что для этого, я хочу следующую систему уравнений:
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
Кроме того, если период полураспада 0
, это означает, что она стабильна. В настоящее время я создаю систему уравнений, создавая словарь строк, но я думаю, что есть лучший способ сделать это. Я планирую превратить строки в переменные позже, после того как я создам систему со строками. Вот мой код:
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)
Как отдельная программа принимает отформатированные уравнения? –