Python solve_bvp四阶微分方程

问题描述 投票:0回答:1

我正在尝试应用scipy的 solve_bvp 以解决以下问题

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

边界条件下,大小为 l 和一些常数 A:

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

T'(l) = A

到目前为止,我已经将四阶方程简化为一阶系统,并编写了以下函数。

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 函数应该返回Von Neumann边界条件?我真的很难理解文档的意思......

python numerical-methods differential-equations
1个回答
1
投票

在计算 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))

© www.soinside.com 2019 - 2024. All rights reserved.