Sympy: Definieren Sie eine benutzerdefinierte Ableitung für das Symbol

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Sympy: Definieren Sie eine benutzerdefinierte Ableitung für das Symbol

by Guest » 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:

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()
Die erste Ableitung funktioniert wie vorgesehen:

Code: Select all

>>> r.diff(x)
x/r
Die zweite Ableitung sollte -x2/r3 + 1/r zurückgeben, aber Sympy differenziert das r< nicht /code>-Symbol erneut:

Code: Select all

>>> r.diff(x).diff(x)
1/r
Ich habe das Zwischenergebnis überprüft und Folgendes gefunden:

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 
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?

Top