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

Python-Programme
Guest
 Sympy: Definieren Sie eine benutzerdefinierte Ableitung für das Symbol

Post by Guest »

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post