sympy:使用Wild符号作为函数的输入

卡利克斯

考虑一下python / sympy中的以下表达式:

from sympy.abc import x, y
expression = 3*x**2*y**1 + x**2*y**3

现在我要替换x**n*y**m通过max(n,m)使用模式匹配:

from sympy import Wild
n = Wild('n')
m = Wild('m')
expression = expression.replace(x**n*y**m,max(n,m))

但是,我得到了TypeError

Traceback (most recent call last):
   File "wild.py", line 15, in <module>
     expression = expression.replace(x**n*y**m,max(n,m))
   File "/usr/lib/python3/dist-packages/sympy/core/relational.py", line 103, in __nonzero__
     raise TypeError("cannot determine truth value of\n%s" % self)
TypeError: cannot determine truth value of
    m_ > n_

问题显然是在匹配表达式时,sympy在将Wild符号的值转发给-function之前不会将其转换为匹配的值max有什么办法可以使这项工作吗?

请注意,这是我遇到的一个更普遍问题的简单示例,因此无法很好地概括的解决方法不是很有帮助。我特别希望有一个使用表达式匹配的解决方案。

更新:遵循三明治的建议max(n,m)并由(m+n+abs(m-n))/2工作取代,但是,我在实际程序中使用的功能要复杂得多。关于夹心提到的replace从表达式树的底部开始执行替换的问题:如果我使用exact=True并定义,f = sympy.Function('f')那么以下工作(除了我将不得不分别处理某些情况):

expression = expression.replace(x**n*y**m,f(n,m),exact=True)

但是,它仍然不适用于max(n,m)

下沉

max 被内置在Python函数,它试图立即评估,因此误差(它不能确定其 n m 较大时,他们是象征性)。您可能需要SymPy Max 函数,该函数可以象征性地工作。 my_func 你在你的答案定义实际上是一个基本的实现的 Max

In [14]: expression = expression.replace(x**n*y**m, Max(n,m))

In [15]: expression
Out[15]: 4

看来这行不通(答案4是错误的)。问题是,它匹配x**2x**2*y**0由于替换函数的数学值取决于表达式的形式,因此这是有问题的,因为SymPy试图变得聪明。实际上,你可以做nm不匹配0有Wild('n', exclude=[x, 0]),但后来有一个问题,它不匹配x**2*yx**2*y**1

因此,我建议将表达式转换为多项式并进行精确替换。希望这能很好地概括您的实际工作

In [18]: Poly(expression, x, y)
Out[18]: Poly(x**2*y**3 + 3*x**2*y, x, y, domain='ZZ')

In [19]: Poly(expression, x, y).terms()
Out[19]: [((2, 3), 1), ((2, 1), 3)]

In [20]: sum(max(pows)*coeff for pows, coeff in Poly(expression, x, y).terms())
Out[20]: 9

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sympy:使用Wild符号作为函数的输入

来自分类Dev

从SymPy符号定义函数

来自分类Dev

使用sympy的latex()函数而不计算输入

来自分类Dev

使用sympy的latex()函数而不计算输入

来自分类Dev

使用函数中的 numpy、sympy 创建符号矩阵?

来自分类Dev

使用元组作为函数中的输入

来自分类Dev

使用闪亮的输入作为函数的参数

来自分类Dev

如何使用张量作为函数的输入?(tensorflow)

来自分类Dev

MATLAB 如何使用 inputdlg 函数处理符号函数输入?

来自分类Dev

使用向量作为Matlab中多个输入函数的输入

来自分类Dev

使用内部用户输入作为函数Python中的输入

来自分类Dev

使用Rcpp函数将NULL值作为符号地址传递

来自分类Dev

使用dict作为函数的输入,但仅接受函数需要的参数

来自分类Dev

使用符号作为数据

来自分类Dev

使用SymPy将符号表达式转换为Python函数

来自分类Dev

使用输入字符串作为函数名称C ++

来自分类Dev

在Python函数中使用输入语句作为参数

来自分类Dev

如何应用使用多列作为熊猫输入的函数?

来自分类Dev

使用全局变量作为R函数的输入

来自分类Dev

vim:使用选定的行作为python函数的输入

来自分类Dev

在Python函数中使用输入语句作为参数

来自分类Dev

使用#defined函数名称作为dlsym的输入

来自分类Dev

在将流作为输入的函数中使用Guard.Against

来自分类Dev

使用字典作为输入并行化python函数

来自分类Dev

Python/BS4 - 在函数中使用列表作为输入

来自分类Dev

使用字符向量的元素作为函数的数据输入名称

来自分类Dev

SymPy:使用 sympy.solve 函数的结果

来自分类Dev

如何使用Java Scanner读取命题逻辑符号作为输入?

来自分类Dev

使用sympy扩展索引符号方程

Related 相关文章

  1. 1

    sympy:使用Wild符号作为函数的输入

  2. 2

    从SymPy符号定义函数

  3. 3

    使用sympy的latex()函数而不计算输入

  4. 4

    使用sympy的latex()函数而不计算输入

  5. 5

    使用函数中的 numpy、sympy 创建符号矩阵?

  6. 6

    使用元组作为函数中的输入

  7. 7

    使用闪亮的输入作为函数的参数

  8. 8

    如何使用张量作为函数的输入?(tensorflow)

  9. 9

    MATLAB 如何使用 inputdlg 函数处理符号函数输入?

  10. 10

    使用向量作为Matlab中多个输入函数的输入

  11. 11

    使用内部用户输入作为函数Python中的输入

  12. 12

    使用Rcpp函数将NULL值作为符号地址传递

  13. 13

    使用dict作为函数的输入,但仅接受函数需要的参数

  14. 14

    使用符号作为数据

  15. 15

    使用SymPy将符号表达式转换为Python函数

  16. 16

    使用输入字符串作为函数名称C ++

  17. 17

    在Python函数中使用输入语句作为参数

  18. 18

    如何应用使用多列作为熊猫输入的函数?

  19. 19

    使用全局变量作为R函数的输入

  20. 20

    vim:使用选定的行作为python函数的输入

  21. 21

    在Python函数中使用输入语句作为参数

  22. 22

    使用#defined函数名称作为dlsym的输入

  23. 23

    在将流作为输入的函数中使用Guard.Against

  24. 24

    使用字典作为输入并行化python函数

  25. 25

    Python/BS4 - 在函数中使用列表作为输入

  26. 26

    使用字符向量的元素作为函数的数据输入名称

  27. 27

    SymPy:使用 sympy.solve 函数的结果

  28. 28

    如何使用Java Scanner读取命题逻辑符号作为输入?

  29. 29

    使用sympy扩展索引符号方程

热门标签

归档