Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 接受数值的变换函数_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 接受数值的变换函数

Wolfram mathematica 接受数值的变换函数,wolfram-mathematica,Wolfram Mathematica,我想改变表达的形式,比如 r^{-1-n} a^n 结合Mathematica中的幂给出 [(a/r)^n] / r. 为了实现这一点,我编写了这个转换函数 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 -> Power

我想改变表达的形式,比如

r^{-1-n} a^n
结合Mathematica中的幂给出

[(a/r)^n] / r.
为了实现这一点,我编写了这个转换函数

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]
其他函数似乎与数值一起工作。例如,以下内容适用于数值和代数值

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

我怎样才能让Mathematica将
n
的幂组合成一个幂[]?

问题实际上在于自动简化,而这些很难解决。在许多情况下,Mathematica会自动将输入转换为其认为更简单的等效形式,无需询问用户,也无需使用任何
Simplify
-系列函数。这样的简化是否是一个正确的设计选择是一个意见的问题。在某些情况下,它们非常有用,但很难撤销这种简化

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

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

因此,无论您的转换是否真的有效,您的具体案例都注定要失败。事实上,你可以通过在PowerReduce的r.h.s.中加入一些
Print
语句来轻松检查它。一种解决方法是定义自己的函数,如
时间
功率
等,并让它们在某个点/某些情况下衰减为
时间
功率
等。但是,使用这种方法,您会立即失去
Simplify
等内置功能的主要优势,如
Times
Power
——即与这些功能相关的庞大且经过测试的内置规则库。人们也许可以设计一些混合方法,在表达式的不同部分使用这两种方法进行简化,但这似乎必然是特定于问题的

谢谢你这么全面的回答。我个人的自动简化宠物脾气是
1+i
内部变得
复杂[1,1]
。这是特别令人沮丧的,如果这是一个更大的方程,你希望分离的实部和虚部。但是,可以通过应用
#/。复杂的[a_u,b_u]:>a+q b
,简化并逆转了转换。@Leonid,顺便说一句~9票对第一枚金牌Mathematica徽章@真的!但贝里萨里乌斯可能会更快,这只会是正确的。@Leonid,可能更正确。很可能,(55票对9票)不太可能。