TransformationFunctions接受数值

Gar*_*eth 2 wolfram-mathematica

我希望改变表达式的形式

r^{-1-n} a^n
Run Code Online (Sandbox Code Playgroud)

结合Mathematica的权力给予

[(a/r)^n] / r.
Run Code Online (Sandbox Code Playgroud)

为此,我编写了这个TransformationFunction

PowerReduce[Times[Power[a_, -1 - b_], Power[c_, b_]]] := Power[a, -1] Power[c/a, b]
Run Code Online (Sandbox Code Playgroud)

这适用于这样的例子

Simplify[Power[r, -1 - n] Power[a, n], TransformationFunctions -> PowerReduce]
Run Code Online (Sandbox Code Playgroud)

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

Simplify[ Power[2, -1 - n] Power[a, n], TransformationFunctions -> PowerReduce]
Run Code Online (Sandbox Code Playgroud)

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

MultAllVals[Power[a_, b_]] := a b
Simplify[ Power[2, -1 - n] Power[a, n], TransformationFunctions -> MultAllVals]
Run Code Online (Sandbox Code Playgroud)

我怎样才能让Mathematica将n一起的权力分组到一个Power []?

Leo*_*rin 7

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

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

In[55]:= (a/2)^n/2
Out[55]= 2^(-1-n) a^n
Run Code Online (Sandbox Code Playgroud)

因此,无论您的转型是否真的有效,您的具体案例都将注定失败.事实上,它可以通过Print在rhs中包含一些语句来轻松检查PowerReduce.一条出路是定义你自己的功能,如times,power等,并让它们衰变为Times,Power在某些时候,等/在某些情况下.但是有了这个方法,你立即失去的主要优势Simplify等内置插件状TimesPower-即庞大和测试的内置规则基站间关于这些功能.也许可以设计一些混合方法,它可以在表达的不同部分使用两者来简化,但这似乎必然是特定于问题的.

  • 我个人的自动简化宠物小便是"1 + i"在内部成为"复杂[1,1]".如果这是一个较大的等式,你希望分离实部和虚部,这尤其令人沮丧.但是,它可以通过应用`#/来处理.复杂[a_,b _]:> a + qb`,简化和逆转转换. (2认同)