Почему замена переменной в выражении переменной с тем же именем, но другим именем символа не работает - PullRequest
0 голосов
/ 17 сентября 2018

Как заменить переменную в функции новым определением исходная переменная?

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 Ответ

0 голосов
/ 17 сентября 2018

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», и это единственная причина, по которой люди делают это. К сожалению, тогда модель вводит их в заблуждение и заставляет думать, что если они добавят a = что-то новое, это повлияет на Symbol("a") - это не так. Единственный эффект - переменная Python теперь указывает на что-то еще; выражения, содержащие Symbol("a"), не затрагиваются.

...