Как интегрировать функцию max с помощью sympy в python? - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу интегрировать функцию max с помощью sympy в python. Тем не менее, кажется, что 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 не может справиться с функции со сравнением. Выдает ту же ошибку, когда я пытаюсь выполнить кусочную функцию, которая также включает процесс сравнения.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

SymPy использует прописные и строчные имена для ссылки (часто) на функции и классы. Когда вы получаете ошибку «истинное значение», это означает, что что-то, что может дать ответ «Истина» или «Ложь», не было (например, if x < 1: print('less than 1')). Если x является символом, то x < 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
0 голосов
/ 07 апреля 2020

Есть две проблемы:

  • Первый параметр 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...