Привет, я пытаюсь получить общие условия списка, чтобы упростить его, например, если у меня есть список:
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, вам нужно объявить символы, верно? Любая идея о том, как я могу решить эту проблему?
horner
становится довольно близко к тому, что вы хотите (после преобразования в выражение SymPy, как в ответе Франческо). По какой-то причине он не учитывает член D1 из последнего выражения должным образом. - person asmeurer   schedule 06.07.2016