Единственный пример / документы, которые я могу найти, находятся на странице Scipy docs .
Чтобы проверить, я смотрю на не зависящий от времени уравнение Шреда в 1d бесконечной потенциальной яме. У этого есть точное аналитическое решение, найденное, решая DE и вставляя граничные условия 0 (0) = 0, ψ (L) = 0, и что функция soln к 1, но этот вопрос относится к решению любого DE, где BCs мы знаем, не для начального значения.
Вы можете решить эту проблему численно с помощью метода execute_ivp Сципи, начав с ψ (0) = 0, и выбрав соответствующий код для размещения ψ '(0), используя аналитическое решение. Можно использовать метод съемки, чтобы найти подходящее значение E, например, приведенное выше условие нормализации.
Это два набора BC: ψ (0) = 0 для обоих, нормализация для обоих и второе значение ψ для аналитического подхода и начальное значение ψ для подхода ivp. Кажется, решение Scipy solve_bvp предлагает решение, использующее первый набор чисел BC (поскольку мы обманываем, вставляя ψ '), но я не могу заставить его работать. Этот псевдокод описывает проблему и как я ожидаю, что API будет вести себя:
bcs = {0: (0, None), L: (0, None)} # Two BCs on ψ; no BCs on derivative
x_span = (0, L)
sol = solve_bvp(rhs, bcs, x_span)
На самом деле код выглядит примерно так, и я не могу заставить его работать:
def bc(ψ_a, ψ_b):
return np.array([ψ_a[0], ψ_b[0]])
x_span = (0, L)
x_eval = np.linspace(x_span[0], x_span[1], int(1e5))
x_guess = np.array([0, L])
ψ_guess = np.array([[0, 1], [0, -1]])
res = solve_bvp(rhs_1d, bc, x_guess, ψ_guess)
Я не знаю, как построить функцию bc, и не знаю, почему догадки настроены так, как они есть. И не знаете, как я могу угадать значение ψ, не вставляя предположение для guess '. (Документы подразумевают, что вы можете) Также обратите внимание, что в документах показан пример, подразумевающий, что вы можете использовать solve_bvp также для нормализации BC, но не знаете, как подойти. (Пример слишком скудный)
Эквивалентный и рабочий код ivp, для ref: (Сравните с моим псевдокодом solve_bvp)
Код Python:
ψ_0 = (0, sqrt(2/L) * n*π/L)
x_span = (0, L)
sol = solve_ivp(rhs_1d, x_span, ψ_0)