0

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

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]

输出是正确的

志[3, 2]

诡异的

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

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

出去

智[1., 2]

必须做什么样的假设才能避免提出这一点?是的,最简单的方法是从模式中消除 1,但在这个例子中,我简化了太多只是为了解决问题。我的情况是如何写出大约五十个这样的形式的总和

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

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

4

1 回答 1

0

子表达式b与模式不匹配b*m_。要查看这一点,请检查FullFormofb和 of,例如2*b. Mathematica 模式匹配句法形式,而不是语义。你和我可能知道这和Mathematica 不b一样b*1,或者至少在将表达式匹配到模式时不应用它。

编辑

不,1*b也不起作用,Mathematica 会b在模式匹配之前对其进行评估。的规则1.0*b显然是不同的。有多种方法可以编写模式来匹配1*b,最简单的方法是编写单独的规则,例如{b,a*n_}->chi[1,n].

于 2013-02-03T08:49:17.463 回答