【问题标题】:How to integrate a max function by sympy in python?如何在 python 中通过 sympy 集成一个 max 函数?
【发布时间】:2020-04-07 13:59:34
【问题描述】:

我想通过 sympy 在 python 中集成一个 max 函数。但是,似乎 sympy 无法通过关系比较来处理这样的函数。

import sympy
def func(x):
    return max(x,0)
x = sympy.symbols(x)
sympy.integrate(func(x),(x,-1,1))

运行上面的代码,它会给出错误信息:

  File "<ipython-input-11-2630b8af4afe>", line 2, in func
    return max(x,0)

  File "/Applications/anaconda/lib/python3.6/site-packages/sympy/core/relational.py", line 304, in __nonzero__
    raise TypeError("cannot determine truth value of Relational")

TypeError: cannot determine truth value of Relational

似乎 sympy 无法处理具有比较的函数。当我尝试分段函数时,它给出了同样的错误,它还包括一个比较过程。

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    SymPy 使用大写和小写名称来指代(通常)函数和类。当你得到一个“真值”错误时,这意味着可以给出真或假答案的东西没有(比如if x &lt; 1: print('less than 1'))。如果x 是一个符号,那么x &lt; 1 仍然是一个Lt(x, 1) 对象。

    在您的情况下,函数 max 尝试比较 x 和 0,但无法进行 True 或 False 比较。请改用Max 对象来查看您的积分评估:

    >>> from sympy import Max
    >>> from sympy.abc import x
    >>> integrate(Max(x,0),(x,-1,1))
    1/2
    

    【讨论】:

      【解决方案2】:

      有两个问题:

      • sympy.symbols 的第一个参数应该是一个字符串来表示变量。例如:x = sympy.symbols('x')

      • max 是一个 Python 函数。应使用 sympy 函数:sympy.Max

      import sympy
      
      def func(x):
          return sympy.Max(0, x)
      
      x = sympy.symbols('x')
      sympy.integrate(func(x), (x, -1, 1))
      

      还可以集成分段函数:

      def func2(x):
          return sympy.Piecewise((-x, x < 0), (x * x, x < 0.5), (x * x * x, True))
      
      sympy.integrate(func2(x), (x, -1, 1)) # 0.776041666666667
      

      【讨论】:

      • 如果这回答了你的问题,你可以考虑投票和/或accepting答案。
      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多