【发布时间】:2016-07-03 10:17:26
【问题描述】:
您好,我正在尝试获取列表的常用术语以简化它,例如,如果我拥有的列表是:
List=[['1','A1','B1','Kc','Ka'],['1','A1','B1','D2','Kc','Ka'],
['-1','A1','B1','D1','Kc','Ka'],['1','A1','B1','D1','KD','Ka'],
['-1','B1','D1','C1','Kc','Ka','KF'],['1','B1','D1','F1','Kc','Kz','Kl']]
有什么功能可以给我结果:
List_output=[['A1', 'B1', [['D1', [['KD', 'Ka'],
['-1', 'Ka', 'Kc']]], ['Ka', 'Kc'], ['D2', 'Ka', 'Kc']]],
['B1', 'D1', [['F1', 'Kc', 'Kl', 'Kz'], ['-1', 'C1', 'KF', 'Ka', 'Kc']]]]
我基本上想做的是代数归约。
(A1 B1 Kc Ka + A1 B1 D2 Kc Ka - A1 B1 D1 Kc Ka + A1 B1 D1 KD Ka -
B1 D1 C1 Kc Ka KF + B1 D1 F1 Kc Kz Kl ) ->
A1B1[D1[-KcKa + KDKa] + D2KcKa +KcKa] + B1D1[-C1[KcKaKF] + F1[KcKzKl]]
简化的唯一要求是所有简化的项都需要依赖于 K 的总和或其余部分。换句话说,一切都需要是 K 的线性组合的函数:[-KcKa + KDKa]; [KcKaKF]; [['-1','Kc','Ka'],['+1','KD','Ka']].
我正在尝试使用 SymPy,但我遇到的问题是要减少的术语来自其他地方,所以我永远不知道符号会是什么。要使用 SymPy,您需要声明符号,对吗?知道如何解决这个问题吗?
【问题讨论】:
-
一个非常有趣的问题。您对解决方案是否有任何要求以某种方式达到最优,或者任何好的简化工作都有效?
-
您的问题没有唯一的解决方案:子表达式可能以不止一种等价方式被分解。
-
唯一的要求是所有简化都需要依赖于 K 的总和或其余部分。换句话说,一切都需要是 K 的线性组合的函数
-
@user3671704 请编辑您的问题以包含此要求。
-
是不是和化学反应速度有关系? (只是猜测)
标签: python list sympy simplify