Sympy: Definieren Sie eine benutzerdefinierte Ableitung für das Symbol
Posted: 12 Jan 2025, 11:07
Ich versuche, in Sympy ein benutzerdefiniertes Symbol zu erstellen, das sich wie folgt verhält: r = √(x2 + y2 + z2 ) – insbesondere ∂r/∂x = x/r:
Die erste Ableitung funktioniert wie vorgesehen:
Die zweite Ableitung sollte -x2/r3 + 1/r zurückgeben, aber Sympy differenziert das r< nicht /code>-Symbol erneut:
Ich habe das Zwischenergebnis überprüft und Folgendes gefunden:
Es erkennt also immer noch r als mein benutzerdefiniertes Objekt, aber irgendwie geht das verloren, wenn ich .diff des resultierenden Mul aufrufe Objekt.
Wie bringe ich das zum Laufen? Bin ich überhaupt auf dem richtigen Weg, wenn ich Symbol in eine Unterklasse unterteile?
Code: Select all
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()
Code: Select all
>>> r.diff(x)
x/r
Code: Select all
>>> r.diff(x).diff(x)
1/r
Code: Select all
>>> 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
Wie bringe ich das zum Laufen? Bin ich überhaupt auf dem richtigen Weg, wenn ich Symbol in eine Unterklasse unterteile?