Почему замена переменной в выражении переменной с тем же именем, но с другим именем символа не работает
Как заменить переменную в функции новым определением начальной переменной?
import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
Ввод g в интерпретаторе в этой точке печатает:
5 * а * х.
Теперь я хотел бы заменить напечатанное с альфа. Почему следующее не работает?
a = sy.symbols("alpha")
g = g.subs(a,a)
Я хорошо знаю, что я мог бы использовать следующее:
import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
alpha = sy.symbols("alpha")
g = g.subs(a,alpha)
Но я хотел бы понять, почему прежний подход не работает. Вообще меня интересует, как связаны назначенное имя a= и строка в символах ("a"). Должны ли они быть одинаковыми, чтобы sympy работал правильно?
1 ответ
g = g.subs(a, a)
никогда ничего не может сделать, так как он заменяет вещь собой.
Заменить a
с чем-то еще
g.subs(a, sy.symbols('alpha'))
должен быть использован. Соответствующая тема в документах SymPy - Назначение не создает отношения. Более простой пример:
a = sy.symbols('a')
b = a + 3 # b is now a+3
a = 5 # b is still a+3 and it will not become 8
В конце этого кода переменная Python a
не имеет отношения к символу SymPy с именем "a". Переменная 5; символ все еще Symbol("a")
и так будет всегда, так как выражения SymPy неизменны. Вместо a = 5
нужно было сделать b.subs(a, 5)
выполнить замену.
Меня интересует, как связанное имя a= и строка в символах ("a") связаны между собой.
Они не связаны вообще. Удобно использовать переменную Python a
указывать на символ с именем "а", это единственная причина, по которой люди делают это. К сожалению, модель затем вводит их в заблуждение, что если они a
= что-то новое, что будет влиять на Symbol("a")
-- Я не буду. Единственный эффект - переменная Python теперь указывает на что-то еще; выражения, содержащие Symbol("a")
не затронуты.