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:
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:
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?
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]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]
Die erste Ableitung funktioniert wie vorgesehen:
[code]>>> r.diff(x)
x/r
[/code]
Die zweite Ableitung sollte -x2/r3 + 1/r zurückgeben, aber Sympy differenziert das r< nicht /code>-Symbol erneut:
[code]>>> r.diff(x).diff(x)
1/r
[/code]
Ich habe das Zwischenergebnis überprüft und Folgendes gefunden:
[code]>>> 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
[/code]
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?