Как явно определить область определения функции в SympyPython

Программы на Python
Ответить
Anonymous
 Как явно определить область определения функции в Sympy

Сообщение Anonymous »

В Sympy я хочу определить кусочную функцию внутри [1, 3] и хочу явно запретить значения за пределами этого диапазона.
Мой текущий код выглядит следующим образом. Я использую nan для обозначения значений, выходящих за пределы диапазона.

Код: Выделить всё

from sympy import *
from sympy.plotting import Plot

x = symbols('x')

f = Piecewise(
(x * 2 - 3, (x = 1)),
(5 - x * 2, (x = 2)),
(nan, True),
)
Однако я столкнулся с двумя проблемами. Во-первых, я не могу использовать f в условии другой кусочной функции, потому что Sympy не может сравнить nan с 0.

Код: Выделить всё

>>> g = Piecewise((2, f < 0), (3, True))
Traceback (most recent call last):
File "", line 1, in 
File "/usr/lib/python3/dist-packages/sympy/functions/elementary/piecewise.py", line 136, in __new__
pair = ExprCondPair(*getattr(ec, 'args', ec))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/functions/elementary/piecewise.py", line 28, in __new__
cond = piecewise_fold(cond)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/functions/elementary/piecewise.py", line 1156, in piecewise_fold
new_args.append((expr.func(*e), And(*c)))
^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/relational.py", line 836, in __new__
raise TypeError("Invalid NaN comparison")
TypeError: Invalid NaN comparison
>>>
Во-вторых, я не могу построить f:

Код: Выделить всё

>>> plot(f)
Traceback (most recent call last):
File "", line 1, in 
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 1873, in plot
plots.show()
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 251, in show
self._backend.show()
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 1549, in show
self.process_series()
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 1546, in process_series
self._process_series(series, ax, parent)
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 1367, in _process_series
x, y = s.get_data()
^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 605, in get_data
points = self.get_points()
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/plotting/plot.py", line 779, in get_points
f_start = f(self.start)
^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/plotting/experimental_lambdify.py", line 176, in __call__
result = complex(self.lambda_func(args))
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/plotting/experimental_lambdify.py", line 272, in __call__
return self.lambda_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1, in 
NameError: name 'nan' is not defined. Did you mean: 'NaN'?
>>>
Есть ли собственный способ указать домен f? Или мне придется отслеживать домен вручную?

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-in-sympy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»