linie
f, a, b = symbols('f a b')
f = a + b
b = 10
nie zmieniają b
w wyrażeniu. Jeśli wydrukujesz f
zobaczysz, że nadal jest zdefiniowany jako a + b
.
Mylicie zmienne Pythona z symbolami SymPy. W pierwszym wierszu zmienna Python b
wskazuje symbol SymPy o nazwie b
(w rzeczywistości nie musi to być ta sama nazwa, można również napisać x = Symbol('b')
i y = a + x
). W drugim wierszu zmienna f
wskazuje na wyrażenie SymPy zawierające symbol b
. W trzecim wierszu zmienna b
wskazuje na liczbę całkowitą 10. Nie zmienia to żadnych poprzednich wierszy, które używały zmiennej b
, ponieważ zostały już uruchomione. To nie jest inaczej niż w przypadku ran
a = 1
b = 1
c = a + b
b = 2
Można by oczekiwać, że wartość c
w końcu być 2
nie 3
. Podobnie, gdy b
wskazuje na Symbol, wyrażenia, które tworzysz za jego pomocą, używają Symbolu, ale jeśli zmienisz go tak, by wskazywał na liczbę, nie wpływa to na poprzednie wiersze od kiedy był Symbolem.
Zalecanym sposobem radzenia sobie z tym w SymPy jest uniknięcie przypisania tej samej zmiennej do symbolu, a następnie do nie-symbolu (warto zauważyć, że twoja definicja f
w pierwszej linii jest całkowicie bezużyteczna, ponieważ natychmiast zmieniasz definicję w drugim wierszu). Aby zastąpić symbol w wyrażeniu, użyj subs:
a, b = symbols('a b')
f = a + b
f1 = f.subs(b, 10)
Zauważ, że subs
nie zmienia oryginalnego f
. Zwraca nowe wyrażenie.
This document może również pomóc usunąć to zamieszanie.
Należy unikać używania ciągów jako danych wejściowych do funkcji SymPy. – asmeurer