转换函数接受数值

时间:2011-10-06 14:54:43

标签: wolfram-mathematica

我希望改变像

这样的表达形式
r^{-1-n} a^n

将Mathematica中的权力结合起来给予

[(a/r)^n] / r.

为实现这一目标,我已经编写了这个TransformationFunction

PowerReduce[Times[Power[a_, -1 - b_], Power[c_, b_]]] := Power[a, -1] Power[c/a, b]

适用于像这样的例子

Simplify[Power[r, -1 - n] Power[a, n], TransformationFunctions -> PowerReduce]

但如果我使用数值,则会失败,例如r=2

Simplify[ Power[2, -1 - n] Power[a, n], TransformationFunctions -> PowerReduce]

其他TransformFunction似乎与数值一起使用。例如,以下适用于数值和代数值。

MultAllVals[Power[a_, b_]] := a b
Simplify[ Power[2, -1 - n] Power[a, n], TransformationFunctions -> MultAllVals]

如何让Mathematica将n的权力分组到一个Power []中?

1 个答案:

答案 0 :(得分:7)

问题实际上是自动简化,而且很难对付。在许多情况下,Mathematica会将输入转换为它认为更简单,自动而不需要用户的同等形式,并且不需要使用任何Simplify - 族函数。这种简化是否是正确的设计选择是一个意见问题。在某些情况下,它们非常有用,但很难撤消这种简化。

在您的特定情况下,请考虑:

In[55]:= (a/2)^n/2
Out[55]= 2^(-1-n) a^n

因此,无论您的转型是否真的有效,您的具体案例都将注定失败。事实上,它可以通过在r.h.中包含一些Print语句来轻松检查。 PowerReduce。一种方法是定义自己的函数,如timespower等,并让它们在某些情况下在某些时候衰减到TimesPower等。但是,使用这种方法,您会立即失去Simplify等主要优势,内置插件如TimesPower - 即与这些功能相互关联的巨大且经过测试的内置规则库。也许可以设计一些混合方法,它将在表达的不同部分使用两者来简化,但这似乎必然是问题特定的。