【发布时间】:2017-02-22 14:18:32
【问题描述】:
最近我不得不使用具有很多长符号表达式的算法,例如这个
upperside = ( e * e * n * p * tn * tn +
2 * e * e * n * p * tn * tp +
e * e * n * p * tp * tp +
2 * e * n * n * p * te * tn +
2 * e * n * n * p * te * tp +
N * e * n * n * tp * tp +
2 * e * n * p * p * te * tn +
2 * e * n * p * p * te * tp -
2 * N * e * n * p * tn * tp +
N * e * p * p * tn * tn +
n * n * n * p * te * te +
2 * n * n * p * p * te * te +
n * p * p * p * te * te)
改版
upperside = ( e * e * n * p * tn * tn +
2 * e * e * n * p * tn * tp +
e * e * n * p * tp * tp +
2 * e * n * n * p * te * tn +
2 * e * n * n * p * te * tp +
N * e * n * n * tp * tp +
2 * e * n * p * p * te * tn +
2 * e * n * p * p * te * tp -
2 * N * e * n * p * tn * tp +
N * e * p * p * tn * tn +
n * n * n * p * te * te +
2 * n * n * p * p * te * te +
n * p * p * p * te * te)
这些表达式是从 MATLAB 符号例程经过简化后推导出来的。很明显,在这种情况下,不可能通过例如合并因子来简化代数表达式。但是,似乎很有可能简化这个表达式,从而大大减少实际操作数。不幸的是,我在 MATLAB 或 Python 中找不到这样的选项。
感谢任何帮助。
编辑 目标是最小化 CPU 需要为此类表达式执行的操作。由于操作只涉及加法和乘法,我希望像 (e+tn)*(te+tp)+n+.... 我试图分解表达式,但不幸的是表达式不可分解。
【问题讨论】:
-
那么输出会是什么?
-
我希望乘积和加法的组合(例如,(e+n)(te+tp)+te+n...)。目标是找到一种方法来计算上述数量,从而尽可能少地涉及 CPU 操作
-
您删除了
Python标签,但您的问题中仍然提到了Python。哪一个是错误的或不相关的? -
在 Python 中 - Sympy?例如this
-
@Sardar_Usama 我试图移动标签,以便首先出现符号数学。但不知为何我把它搞砸了……
标签: python matlab symbolic-math