Пропорциональность параметра и математического выражения

#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. Верно, но: в моем случае мне нужно протестировать каждое выражение только один раз 😉 Есть какие-либо рекомендации по инструменту, который делает это как однострочный?