我尝试用函数替换一些表达式,但有些术语没有改变。 输入:
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常数
答案 0 :(得分:0)
子表达式b
与模式b*m_
不匹配。要查看此内容,请检查FullForm
的{{1}}以及b
。 Mathematica模式在语法形式上匹配,而不是在语义上匹配。您和我可能知道2*b
与b
相同,但Mathematica没有,或者至少在将表达式与模式匹配时不适用。
修改强>
不,b*1
也不起作用,Mathematica会在模式匹配之前将其评估为1*b
。 b
的规则明显不同。编写模式以匹配1.0*b
有多种方法,最简单的方法是编写单独的规则,例如1*b
。