Mathematica替换

时间:2013-02-03 08:08:36

标签: replaceall

我尝试用函数替换一些表达式,但有些术语没有改变。 输入:

b + 2 * a /。 (b * m_ + a * n_):> chi [m,n]

停止

2 a + b

但如果不是1,我就放3 * b

3 * b + 2 * a /。 (b * m_ + a * n_):> chi [m,n]

输出正确

chi [3,2]

怪异

如果我写1. * b它效果更好

(1. * b + 2 * a)/。 (b * m_ + a * n_):> chi [m,n]

chi [1。,2]

必须采取什么假设来避免这一点?是的,最简单的方法是从模式中消除1,但在这个例子中,我只是为了解决问题而简化了过多的事情。我的情况是如何写一个大约五十个术语的总和,如

Sqrt [Pi] V (m * b ^ 2 + n * a ^ 2)^( - 3/2),

其中m和n是整数,b,a,V常数

1 个答案:

答案 0 :(得分:0)

子表达式b与模式b*m_不匹配。要查看此内容,请检查FullForm的{​​{1}}以及b。 Mathematica模式在语法形式上匹配,而不是在语义上匹配。您和我可能知道2*bb相同,但Mathematica没有,或者至少在将表达式与模式匹配时不适用。

修改

不,b*1也不起作用,Mathematica会在模式匹配之前将其评估为1*bb的规则明显不同。编写模式以匹配1.0*b有多种方法,最简单的方法是编写单独的规则,例如1*b