我会生成非常长且复杂的分析表达式,一般形式如下:
(...something not so complex...)(...ditto...)(...ditto...)...lots...
当我尝试使用
Simplify
时,Mathematica会变得非常缓慢,我认为这是因为它试图展开括号或简化不同括号之间的表达式。这些括号虽然包含了长表达式,但单独使用Mathematica很容易进行简化。有没有办法将Simplify
的范围限制在一个括号内?
编辑:一些额外的信息和进展。所以根据你们的建议,我现在开始使用类似以下的东西:
In[1]:= trouble = Log[(x + I y) (x - I y) + Sqrt[(a + I b) (a - I b)]];
In[2]:= Replace[trouble, form_ /; (Head[form] == Times) :> Simplify[form],{3}]
Out[2]= Log[Sqrt[a^2 + b^2] + (x - I y) (x + I y)]
将
Times
改为适当的标题,如 Plus
或 Power
,可以更精确地定位简化。然而,仍然存在以下问题/疑问:Simplify
将比指定给 Replace
的级别更深入。In[3]:= Replace[trouble, form_ /; (Head[form] == Plus) :> Simplify[form], {1}]
Out[3]= Log[Sqrt[a^2 + b^2] + x^2 + y^2]
它也可以简化平方根。
我的计划是从下往上逐级使用Replace
,但这显然会导致Simplify
大量重复的工作,最终导致Mathematica出现与我一开始遇到的完全相同的卡顿。有没有办法限制Simplify
到某个特定的级别?
我意识到这种限制可能不会产生最佳结果,但这里的想法是得到一个“足够好”的东西。