python中表示红色的表达式_python-SymPy中表达式的抽象表示

不依赖于所用符号的表示是一种功能.例如,

f1 = lambda x, y: (2*x+y)**2

定义了一个不与x和y绑定的函数,除了作为该函数内部的占位符外,它们不存在. (这是一个Python函数;也可以定义一个SymPy Function对象,但此处的区别并不重要.)

如果有人问您(2 * x y)** 2与a ** 2 4 * b *(a b)是否“相同”,您会怎么做?我知道的唯一方法是简化两者,并尝试在所有可能的排列下匹配变量.以下代码是做什么的.

from sympy import *

from itertools import permutations

f1 = lambda x, y: (2*x+y)**2

f2 = lambda a, b: a**2 + 4*b*(a+b)

vars = symbols("v0:2") # auxiliary variables to plug in f1 and f2

identical = any([simplify(f1(*vars) - f2(*p)) == 0 for p in permutations(vars)])

现在,True相同,因为表达式在您描述的意义上是相同的.

如果要以表达式而不是函数开头,则可以使用subs代替:

x, y, a, b = symbols("x y a b")

expr1 = (2*x+y)**2

expr2 = a**2 + 4*b*(a+b)

vars = symbols("v0:2")

identical = any([simplify(expr1.subs(zip((x, y), vars)) - expr2.subs(zip((a, b), p))) for p in permutations(vars)])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值