簡體   English   中英

Python solve_bvp 四階微分方程

[英]Python solve_bvp fourth order differential equation

我正在嘗試將 scipy 的solve_bvp應用於以下問題

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

在大小為l的域和某個常數A上具有邊界條件:

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

T'(l) = A

到目前為止,我已經將四階方程簡化為一階系統,並編寫了以下 function:

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 function 應該返回什么嗎? 我真的很難理解文檔...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM