Я разрабатываю классическую схему Рунге-Кутты (RK4) для большого количества связанных уравнений в Python 2.7. Поскольку будет более сотни связанных уравнений 1-го порядка, циклы for будут чертовски большими, и я ищу некоторые подсказки по оптимизации.
<сильный>1. При вычислении вектора возвращаемых переменных для коэффициентов РК лучше ли...
- Предварительно выделите
numpy array
и заполните его или - Использовать
list.append
для каждой переменной иnumpy.array(list)
в конце?
<сильный>2. Связанные уравнения, очевидно, имеют коэффициенты. Может лучше...
- Вставьте их в функцию, вызываемую в шагах RK4 (т. е. переопределяйте их каждый раз, когда вызывается оценка функции) или
- Пометить их как глобальные переменные?
scipy.integrate.odeint
вместо самостоятельной реализации метода... Я не думаю, что 2 будет иметь значение для времени работы. Для 1 лучший вариант лучше, но вам действительно следует попытаться сформировать правый вектор с помощью операций с массивом numpy вместо того, чтобы перебирать массив. - person   schedule 13.12.2016lsoda
, который стоит заodeint
, является хорошо протестированным и хорошо задокументированным черным ящиком. Установите относительные (и абсолютные) пределы погрешности, так как значения по умолчанию довольно высоки. Сделайте несколько прогонов с разными настройками ошибок, чтобы задокументировать стабильность результата. - person Lutz Lehmann   schedule 14.12.2016