在尝试解决符号数学问题后,我得到了一个大约17000个字符的表达式。我正在使用Matlab的符号工具箱,但我对任何建议都持开放态度(Mathematica,无论如何)。
由于显而易见的原因,我不会将表达式直接复制粘贴到问题中。 Here is a link instead
运行Matlab
命令simplify
和simple
,甚至尝试collect
都没有改善情况(有些人情况更糟)。
但我想知道,我不关心是否使用时间参数逐步评估表达式。类似的东西:
z1 = a^2*y1;
%Now the expression can be simplified by using z1 as alias!
z1+z1^2 ....
是否有一种自动方法可以使用时间变量进行逐步简化?此外,您可以想到的任何其他方法都是合理的。
答案 0 :(得分:6)
可以尝试常见的子表达式消除(CSE)。这是一个来自
的例子Get mathematica to simplify expression with another equation
InputForm[Experimental`OptimizeExpression[(3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] +
a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6]]
==>
Out[206]//InputForm=
Experimental`OptimizedExpression[Block[{Compile`$1, Compile`$3, Compile`$4,
Compile`$5, Compile`$6}, Compile`$1 = a^2; Compile`$3 = 6*a;
Compile`$4 = 5*Compile`$1; Compile`$5 = 5 + Compile`$3 + Compile`$4;
Compile`$6 = Sqrt[Compile`$5]; (3 + 3*Compile`$1 + Compile`$6 +
a*(4 + Compile`$6))/6]]
答案 1 :(得分:2)
正如我在评论中所写,似乎Mathematica的简化工具比Matlab中的类似命令更有效。 由于您似乎是Matlab用户,因此我在此向您详细说明如何使用Mathematica中的两个简化命令。 如果将长表达式定义为
longExpression = (x3^2*(y2+y3-a*y1-a*y2-2*a*y3-...
然后你可以使用
Simplify[longExpression]
and
FullSimplify[longExpression]
最后一个产生一个漂亮而清晰的表达式,它只有1535个字符(听起来很多,但没有那么多变量)。 也许这足以简化您的问题。如果没有,请告诉我们。