Поиск корня функции в Python с помощью функции в функции

#python #numpy #scipy #scipy-optimize

#python #numpy #scipy #scipy-оптимизировать

Вопрос:

У меня есть функция со скалярными значениями, скажем myFunction , которая зависит от нескольких параметров, скажем, x и y . x является скаляром и y может быть, например, списком (хотя в моем приложении есть больше параметров различных типов).

Для каждого фиксированного значения y , myFunction имеет уникальный корень в x , который я хотел бы вычислить (как функцию y ).

Способ, которым я это делаю, заключается в следующем:

 from scipy import optimize

def myFunction(x,y):
    return ...


def myRoot(y):
    def localFunction(x):
        return myFunction(x,y)
    return optimize.root_scalar(localFunction,x0=0).root
  

Оказывается, поскольку мне приходится запускать это тысячи раз, это слишком медленно для моей цели. Есть ли более эффективный способ сделать это?

Комментарии:

1. Похоже, это не имеет отношения к проблеме поиска корня. Вы ознакомились с общими стратегиями оптимизации производительности, такими как multiprocessing ?

2. Вы можете рассмотреть возможность запуска ее с использованием мультиобработки. Предварительные условия: 1) Имеет смысл, чтобы ваш код выполнялся параллельно 2) у вас многоядерная машина. Смотрите docs.python.org/3.8/library/multiprocessing.html

3. Итак, нет лучшего способа сделать это с точки зрения реализации?

4. Вы скрываете то, что находится в myFunction. Также вам, вероятно, следует пометить свой вопрос scipy

5. Что в этом медленного? Это тот факт, что для возврата myFunction требуется много времени? Если это так, то, по сути, поиск нескольких тысяч ее корней будет медленным. Если scipy выполняет много вызовов функций для поиска каждого корня, то, возможно, вы можете настроить параметры scipy.root_scalar, чтобы уменьшить это (например, используя другой метод, указав границы, если это возможно, уменьшая допуск для решателя)