Python один с массивом в дифференциальном уравнении - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть следующее дифференциальное уравнение первого порядка (пример):

dn/dt=A*n; n(0)=28

Когда A постоянное, оно отлично решается с помощью python odeint. Но у меня есть массив различных значений A из файла .txt [не функция, просто массив значений]

A = [0.1,0.2,0.3,-0.4,0.7,...,0.0028]

И я хочу, чтобы в каждой итерации (или в каждый момент времени t ) решения оды A - это новое значение из массива. Я имею в виду, что: Первая итерация (или t = 0) - A = 0.1 Вторая итерация (или t = 1) - A = 0.2 и т. Д. c из массива.

Как я могу сделать это с помощью python одеинт?

1 Ответ

0 голосов
/ 14 февраля 2020

Да, вы можете сделать это, но не напрямую в odeint, поскольку у него нет механизма событий, а для того, что вы предлагаете, нужен механизм событий-действий.

Но вы можете разделить свою проблему на шаги , используйте внутри каждого шага odeint с постоянным параметром A, а затем в конце присоедините шаги.

T = [[0]]
N = [[n0]]
for k in range(len(A)):
    t = np.linspan(k,k+1,11);
    n = odeint(lambda u,t: A[k]*u, [n0],t)
    n0 = n[-1]
    T.append(t[1:])
    N.append(n[1:])

T = np.concatenate(T)
N = np.concatenate(N)
...