空白在替换规则的分母中

Ben*_*enB 3 wolfram-mathematica

Mathematica 7.0似乎不喜欢在分母中有空白.谁能解释为什么会这样?

输入:

ClearAll["Global`*"];
(*Without blanks:*)
a^2 / b^2 /. a^2 / b^2 -> d
(*with:*)
a^2 / b^2 /. a^c_ / b^c_ -> d
(*Without blanks:*)
a^2 / b^2 /. (a / b)^2 -> d
(*With:*)
a^2 / b^2 /. (a / b)^c_ -> d
(*Without blanks:*)    
a^2 / b^2 /. a^2 * b^(-2) -> d
(*With:*)
a^2 / b^2 /. a^c_ * b^(-c_) -> d
Run Code Online (Sandbox Code Playgroud)

输出:

d
a^2/b^2
d
a^2/b^2
d
a^2/b^2
Run Code Online (Sandbox Code Playgroud)

我正在努力解决一个更复杂的问题.我要做的替换是在表单中:

(a ^ c_. * Coefficient1_. / b ^ c_. / Coefficient2_.)  +  (a ^ d_. * Coefficient3_. / b ^ d_. / Coefficient4_.)
Run Code Online (Sandbox Code Playgroud)

系数可能涉及可能包括也可能不包括的变量的和,产品和商.ab

可能相关:

FullForm显示分母中的功率存储为-1和c的乘积:

输入:

FullForm[a^2/b^2]
FullForm[a^c_/b^c_]
FullForm[ (a / b)^2 ]
FullForm[(a / b)^c_ ]
FullForm[a^2 * b^(-2) ]
FullForm[a^c_ * b^(-c_)]
Run Code Online (Sandbox Code Playgroud)

输出:

Times[Power[a,2],Power[b,-2]]
Times[Power[a,Pattern[c,Blank[]]],Power[b,Times[-1,Pattern[c,Blank[]]]]]
Times[Power[a,2],Power[b,-2]]
Power[Times[a,Power[b,-1]],Pattern[c,Blank[]]]
Times[Power[a,2],Power[b,-2]]
Times[Power[a,Pattern[c,Blank[]]],Power[b,Times[-1,Pattern[c,Blank[]]]]]
Run Code Online (Sandbox Code Playgroud)

编辑:粗略更改我的实际案例.

Mr.*_*ard 11

一般来说,你应该尽量避免做数学使用操纵ReplaceAll这是一个结构性工具.

相反FullForm,我将TreeForm用来说明这些表达式:

a^2/b^2   // TreeForm
a^c_/b^c_ // TreeForm
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

你可以看到虽然这些表达式在数学上是相似的,但它们在结构上却完全不同.您可能能够针对特定案例制定有效的替换规则,但通常最好使用Mathematica提供的公式操作(或多项式代数)工具.

如果您仔细描述了您希望实现的数学操作,我将尝试提供更好的解决方案.


正如belisarius在评论中幽默地指出的那样,试图迫使Mathematica "看到"或以你的方式显示表达方式通常是徒劳的.这是上述开头陈述成立的原因之一.


Sjo*_*ies 6

我同意Mr.Wizard所写的一切.话虽如此,在这种特定情况下可以使用的替换规则是:

a^2/b^2 /. (Times[Power[a,c_],Power[b,e_]]/; e == -c )-> d
Run Code Online (Sandbox Code Playgroud)

要么

a^2/b^2 /.  (a^c_ b^e_/; e == -c )-> d
Run Code Online (Sandbox Code Playgroud)

请注意,我添加了约束,/; e == -c以便我-c_实际上没有实际创建相应的Times[-1,c_]表达式