Solve_ivp навсегда застревает в этой проблеме

Я пытаюсь решить систему дифференциальных уравнений с scipy.integrate.solve_ivp. Система зависит от реальной независимой переменной t и зависимых переменных, c n (t) -и в целом сложные. Загвоздка в том, что решатель всегда застревает, независимо от размера системы (определяется n_max). Вот установка:

# Constants
from scipy.constants import hbar as h_
n_max = 2
t_max = 1

# The derivative function
def dcdt(t, c):
    return (-1.0j/h_)*((V_mat*np.exp(1.0j*w_mat*t)) @ c)

# Initial conditions
c_0 = np.zeros(n_max, dtype = complex)
c_0[0] = 1.0

#  Solving the deal
t = np.linspace(0, t_max, 10)
c = solve_ivp(dcdt, [0, t_max], c_0, t_eval = t)

И вот оно, не перестает работать.
Вот примеры матриц V_mat и w_mat:

>>> V_mat
array([[1.0000000e-09, 1.8008153e-56],
       [1.8008153e-56, 1.0000000e-09]])

>>> w_mat
array([[      0.        , -156123.07053024],
       [ 156123.07053024,       0.        ]])

Как вы заметите, V_mat и w_mat - это двумерные квадратные матрицы размерности n_max.

Проблема связана с большими / очень маленькими значениями в матрицах? Или это как-то связано со сложными ценностями?


person amzon-ex    schedule 30.05.2020    source источник


Ответы (1)


Как я уже догадался, проблема связана с большими значениями в дифференциальных уравнениях, которые я пытаюсь решить, в частности, из-за -1.0j/h_ в

def dcdt(t, c):
    return (-1.0j/h_)*((V_mat*np.exp(1.0j*w_mat*t)) @ c)

где h_ = 1.054e-34 - приведенная постоянная Планка. Изменение масштаба уравнения и удаление h_ решает проблему.

person amzon-ex    schedule 27.06.2020