Sympy: определение пользовательской производной для символаPython

Программы на Python
Ответить
Anonymous
 Sympy: определение пользовательской производной для символа

Сообщение Anonymous »

Я пытаюсь создать в Sympy собственный символ, который будет вести себя как r = √(x2 + y2 + z2 ) -- в частности, ∂r/∂x = x/r:

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

from sympy import Symbol, symbols

x, y, z = symbols("x y z")

class _r(Symbol):
def __new__(self):
r = super().__new__(self, "r")
return r

def diff(self, var):
assert var in [x, y, z]
return 1 / self * var

r = _r()
Первая производная работает по назначению:

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

>>> r.diff(x)
x/r
Вторая производная должна возвращать -x2/r3 + 1/r, но Sympy не различает r< Еще раз символ /code>:

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

>>> r.diff(x).diff(x)
1/r
Я проверил промежуточный результат и обнаружил следующее:

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

>>> d = r.diff(x)
>>> type(d)
sympy.core.mul.Mul
>>> d.free_symbols
{r, x}
>>> for s in d.free_symbols:
>>>     print(s, type(s))
r 
x 
Таким образом, он по-прежнему распознает r как мой пользовательский объект, но каким-то образом это теряется при вызове .diff результирующего Mul объект.
Как заставить это работать? На правильном ли я пути, создав подкласс Symbol?

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

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

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

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

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

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