Я использую решатель Sympy (версия 0.7.3, Python 2.7.5, Mac OS X) для решения некоторых матричных уравнений, и я столкнулся с непоследовательным поведением, которое портит все мои результаты. Если быть точным, результат, похоже, зависит от порядка уравнений, которые должны быть решены.Sympy - непредсказуемое поведение Solver
Минимальный рабочий пример производится с помощью следующего кода:
from sympy import *
axx, bxx, byy = symbols('axx bxx byy')
Эта команда
solve([axx - bxx, byy])
дает {axx: bxx, byy: 0}
как результат, в то время как переключение порядок уравнений
solve([byy, axx - bxx])
дает {byy: 0, bxx: axx}
, что, конечно, математическое LY то же самое, но имеет значение при применении этого решения, используя subs
функцию SymPy, то есть:
axx.subs({byy: 0, bxx: axx})
возвращает axx
, в то время как
axx.subs({axx: bxx, byy: 0})
возвращает bxx
, который, очевидно, может вызвать много проблем в последующих расчетах.
Буду признателен, если сообщу мне, как заставить SymPy вести себя последовательно. Меня не волнует, если результат {axx: bxx}
или {bxx: axx}
, но он должен быть таким же, независимо от того, в каком порядке я передаю уравнения.
Есть дополнительные аргументы, которые вы можете предоставить 'solve', чтобы указать, что вы хотите решить. Проверьте примеры в docstring. – Krastanov
Я уже пробовал это, но если бы я включил все символы, то есть 'решать ([axx - bxx, byy], [axx, bxx, byy])', что я должен в моем случае, тогда вывод одинаков. – m4r73n
Почему вы включаете все символы?Включите символ, который вы хотите решить для решения: 'solve ([x, yz], [x, y])' – Krastanov