首先,我不完全确定这是正确的stackexchange社区 . 我也在数学论坛上发帖,我认为它应该没问题,因为看问题的人应该对溢出与数学有不同的观点,但只是告诉我这是不是很糟糕我会删除其中一个帖子:
我有一系列的公式(其中很多,通常是100),我从CAS(Python Sympy)的计算中获得 . 这些公式将被翻译成C,并且应该在微控制器上有效地评估它们 . 为评估每个公式而执行的许多计算在不同公式之间是多余的 . 有没有办法通过Sympy中的算法找到一种“最优”或至少“合理”的方法来对计算进行分组,从而减少要执行的操作数量,并以系统的方式进行?或者我应该让编译器这样做(但有很多公式......)?
例如,如果许多公式包括该术语
$ \ cos \ left(\ frac {2} \ sqrt {w_x ^ 2 w_y ^ 2 w_z ^ 2} \ right)$
,我应该首先计算它并将其存储在变量中,让我们说$ cn $,并使用$ cn $进行后续评估 . 当然,我可以通过代码并“手动”进行euristicaly,但它不是真正的可扩展性,绝对是“丑陋的”,可能不是最佳的 . 我想,从理论上讲,一个“完美的”C编译器应该能够完成这项任务,但我想如果方程式很多且足够复杂,它将无法接近最优 .
编辑:我当然知道使用sympy的简单简化,例如http://docs.sympy.org/latest/modules/simplify/simplify.html#module-sympy.simplify.cse_main或factorize,简化等 . 这里的难点是,我想要几个方程之间的简化 .
1 回答
cse
能够接受表达式列表并提供出现在所有表达式中的公共子表达式 .