Система дифференциальных уравнений с зависящими от времени константами в массивах с использованием solve_ivp - PullRequest
0 голосов
/ 07 июля 2019

Я хочу сделать то же самое, что и этот пост , но у меня проблемы с переменными.

У меня есть три 1D-массива, которые я хочу внедрить в решатель разностных уравнений, чтобы мои три константы могли меняться со временем в соответствии с массивами

t = np.linspace(0, 50000, 50000)
ur = np.array([0, 5, 6, 12, 1.254, ..., 0.145])     # shape (50000, )
utheta = np.array([1.45, 5.9125, 1.367, ..., 3.1458])
uphi = np.array([0.124, 0.258, 0.369, ..., 0.147])

interp = interpolate.interp1d(t,(ur,utheta,uphi))


def c(t,zc):
    x1=zc[0]
    x2=zc[1]
    x3=zc[2]
    x4=zc[3]
    x5=zc[4]
    x6=zc[5]
    ur, utheta, uphi = interp(t)
    dx1dt=x2
    dx2dt= x1 * (...)  - 1) / (x1 ** 4)) + ur
    dx3dt=x4
    dx4dt= -((2*x2*x4) (...) * cot(x5) + (utheta / (x1 * sin(x5)))
    dx5dt=x6
    dx6dt= -((2*x2*x6) / x1) + (...) + (uphi / x1)
    return [dx1dt, dx2dt, dx3dt, dx4dt, dx5dt, dx6dt]

steps = 1
method = 'Radau'
atol = 1e-3
zc0=solve_ivp(c, (0, 50000), z0, method=method, t_eval=t, atol=atol)

Выход:

message: 'Required step size is less than spacing between numbers.'

t: array([0. , 1.00002]), this array should have 50000 elements

y: array([[ 6.78500000e+06, 4.72847723e+06],

 [ 2.24011561e-13, -4.11296318e+06],

 [ 7.45760534e-01, 7.45307438e-01], 

[-7.01068174e-04, -2.20751593e-04],

 [ 1.57077832e+00, 1.57195175e+00], 

[ 8.85785588e-04, 2.01498441e-03]]), and this matrix should have 50000 columns although it does have the correct number of lines (6)
...