#python #sympy #mathematical-expressions
#python #симпатия #mathematical-выражения
Вопрос:
Каков наилучший способ проверить, увеличивает ли увеличение параметра в математическом выражении или уменьшает выражение в целом (в Python, предпочтительно SymPy)?
Предположения: все параметры положительны (т.е. > 0).
Пример A*B/(A C)
: A
должно быть найдено как пропорциональное выражению и C
должно быть найдено как обратно пропорциональное.
Одним из очевидных решений было бы присвоить 1 всем параметрам, 1 и 100 — C соответственно и применить eval()
, но это очень грубо и может привести к ошибкам (например, с (A-B)/C
, где лучшим вариантом было бы выдать ошибку вместо неправильного результата).
Ответ №1:
Я не верю, что это может быть решено в общем случае. Простым контрпримером является sin(A)
, который может быть как пропорциональным, так и обратно пропорциональным, в зависимости от того, какое значение A вы оцениваете.
Однако вы могли бы использовать инструмент автоматического дифференцирования, такой как PyDX или Theano, для вычисления производной функций при различных значениях параметра.
Комментарии:
1. Спасибо за ответ. Дифференцирование — хорошая идея, но тогда я бы предпочел численные методы, поскольку они намного менее затратны в вычислительном отношении.
2. Для одноразовых вычислений — да. Если вы собираетесь тестировать одну функцию при нескольких значениях параметров, AD, вероятно, так же эффективен.
3. Верно, но: в моем случае мне нужно протестировать каждое выражение только один раз 😉 Есть какие-либо рекомендации по инструменту, который делает это как однострочный?