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 "看到"或以你的方式显示表达方式通常是徒劳的.这是上述开头陈述成立的原因之一.
我同意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_]表达式