Двунаправленное распознавание постулатов базовой алгебры в символьных вычислениях

В некоторых платформах символьных вычислений, таких как Sage, я определяю «a=b+c», и когда я запрашиваю «a», я получаю «b+c» для результата, как и ожидалось. Но когда я запрашиваю «b», я получаю «b» вместо «a-c» и «b» вместе. Следуя той же логике с определением 'k=m' ; Я ожидаю получить результат «k» и «m» для запроса «m». Одна переменная может быть частью других переменных, и когда я исследую свою переменную, я хочу, чтобы она и все ее ассоциации были перечислены на выходе. Каков де-факто термин для случая, который я пытался объяснить? Должен быть как минимум способ добиться этого без определения каждой комбинации переменных.


person y33t    schedule 18.11.2013    source источник


Ответы (1)


Выполнение a = b не сообщает системе о некоторой логической связи между переменными. Все, что он делает, это присваивает переменной Python a значение b. См. http://docs.sympy.org/latest/tutorial/gotchas.html#symbols (в основном это работает и в Sage). Здесь важно понимать разницу между символическим символом и переменной языка программирования. В Python (который используют Sage и SymPy) = присваивается переменным языка программирования. Он не имеет математического смысла.

Чтобы представить математическое равенство, вам нужно использовать == в Sage или Eq() в SymPy. Если вы хотите получить представления символов с точки зрения других, вы должны использовать solve(). Например, в SymPy.

>>> a, b, c, k, m = symbols('a b c k m')
>>> eq1 = Eq(a, b + c)
>>> eq2 = Eq(k, m)
>>> solve([eq1, eq2], b)
{b: a - c}
>>> solve([eq1, eq2], m)
{m: k}
person asmeurer    schedule 19.11.2013
comment
Я думаю, что в Sage функция решения работает только с числовыми значениями. Для SymPy ваше решение работает; в Sage я делаю a==b+c вместо Eq(a,b+c), решение не возвращает результата. - person y33t; 21.11.2013
comment
Я предполагаю, что Sage использует другой синтаксис. Вам следует ознакомиться с его документацией. - person asmeurer; 21.11.2013