Python resolve_bvp дифференциальное уравнение четвертого порядка - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь применить scipy solve_bvp к следующей проблеме

T''''(z) = -k^4 * T(z)

с граничными условиями в домене размером l и некоторой константой A:

T(0) = T''(0) = T'''(l) = 0

T'(l) = A

До сих пор я свел уравнение четвертого порядка к системе 1-го порядка и написал следующую функцию:

def fun1(t, y):
    y0 = y[1]
    y1 = y[2]
    y2 = y[3]
    y3 = -k**4 * y0
    ret = np.vstack((y0, y1, y2, y3))
    return ret

Затем я установил свои граничные условия, пытаясь следовать документации (которую я действительно не понимаю ...)

def bc(ua, ub):
    # 0th, 1st, 2nd and 3rd derivative BCs
    return [ua[0], ub[1]-A, ua[2], ub[3]]

Затем я установил свои первоначальные предположения

A, l = 10, 3
x_init = [0, l]
y_init = [[0, 0], [0, A], [0, 0], [0, 0]]

, однако, когда я запускаю solve_bvp(fun, bc, x, y), я получаю неправильное решение. Не знаю почему. Решатель сходится, но это не похоже на то, что я ожидал.

Кто-нибудь, пожалуйста, объясните, что функция bc должна возвращать для граничных условий фон Неймана? Я действительно изо всех сил пытаюсь осмыслить документацию ...

1 Ответ

1 голос
/ 08 мая 2020

При вычислении y3 вам действительно нужно использовать y[0], а не y0=y[1].

Чтобы избежать такого недоразумения, я бы написал

def fun1(t, y):
    dy0 = y[1]
    dy1 = y[2]
    dy2 = y[3]
    dy3 = -k**4 * y[0]
    return np.vstack((dy0, dy1, dy2, dy3))

...