python代替mathematica_如何使用Python(Sympy)实现一个函数,在Wolfram Mathematica中实现与’_’和替换规则相同的功能?...

在Wolfram Mathematica中,我可以定义命名模式,其中_(称为

Blank)匹配任何表达式,然后在

replacement rule中使用匹配.

一个例子:

testexpr = p1[MM]*p2[NN] + p1[XX]*p2[MM] + p1[XX]^2;

FunTest[expr_] := Expand[expr] /. {(p1[l1_]*p2[l2_]) -> FF1[l1]*FF2[l2],

p1[l1_]^n_ -> 0, p2[l1_]^n_ -> 0}

FunTest[testexpr]

结果是FF1 [XX] FF2 [MM] FF1 [MM] FF2 [NN]

但是,我不知道如何在Python中使用sympy来做同样的事情.

import sympy as sp

p1 = sp.IndexedBase("p1")

p2 = sp.IndexedBase("p2")

FF1 = sp.IndexedBase("FF1")

FF2 = sp.IndexedBase("FF2")

MM,NN,XX=sp.symbols('MM NN XX')

SSlist=[MM,NN,XX]

testexpr=p1[MM]*p2[NN] + p1[XX]*p2[MM] + p1[XX]**2

def FunTest(expr):

expr=expr.subs([(p1[SS]*p2[SS2],FF1[SS]*FF2[SS2]) for SS in SSlist

for SS2 in SSlist]+[(p1[SS]**2,0) for SS in SSlist]+[(p2[SS]**2,0)

for SS in SSlist],simultaneous=True)

return expr

rest=FunTest(testexpr)

print(rest)

因此结果也是FF1 [MM] * FF2 [NN] FF1 [XX] * FF2 [MM].

但是我想知道是否有一种简单的方法可以使它更加通用,就像在Wolfram Mathematica中一样.如果SSlist是一个大型列表并且存在许多不同的变量,那么使用我的解决方案将难以实现.

I wonder whether there is an easy way without writing a loop over the whole list, for SS in SSlist, as in Mathematica. Can someone familiar with sympy give me any hints?

非常感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值