【问题标题】:Python solve_bvp fourth order differential equationPython solve_bvp 四阶微分方程
【发布时间】:2020-08-23 14:38:30
【问题描述】:

我正在尝试将 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 函数应该为冯诺依曼边界条件返回什么吗?我真的很难理解文档...

【问题讨论】:

    标签: python numerical-methods differential-equations


    【解决方案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))
    
    

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 2020-08-18
      • 2022-07-16
      • 2021-07-27
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多