Как найти количество вызовов производной ОДУ за один вызов.

Я использую Python для выполнения упражнений по численному интегрированию ODE. сталкиваюсь с этой проблемой.

«Во время каждого отдельного запуска интегратора ODE (т. Е. Одного вызова метода интегрировать (t)) интегратор внутренне делит временной интервал на множество дискретных шагов и запускает указанную схему (например, Рунге-Кутта), используя эти шаги. Давайте посмотрим, сколько раз производная функция ОДУ вызывается во время этого процесса».

Существует ли какой-либо метод, чтобы найти количество раз? Спасибо.


person epx    schedule 18.03.2015    source источник


Ответы (1)


В функции, которую вы передаете интегратору, вы можете написать некоторый код, который будет собирать эту статистику для вас. Например, вместо

def f(t, x):
    return -2 * x

записывать

class F:

    def __init__(self):
        self.calls = 0

    def __call__(t, x):
        self.calls += 1
        return -2 * x

а затем передать объект этого класса интегратору, например. (схематично)

f = F()
r = ode(f, jac)
r.integrate(tmax)
print(f.calls)
person fjarri    schedule 18.03.2015
comment
Большое спасибо за ответ. - person epx; 18.03.2015