python - Python solve_bvp 四阶微分方程
问题描述
我正在尝试将 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
函数应该为冯诺依曼边界条件返回什么吗?我真的很难理解文档...
解决方案
在计算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))
推荐阅读
- html - 如何在 CSS 中结合响应式布局和等高列?
- git - git unpack-objects 之后的源代码树在哪里?
- reporting-services - SSRS图表,有没有办法左对齐y轴?
- ios - 如何从 HealthKit Swift 4 获取每小时的步数
- uikit - QLPreviewController 适用于 UIDocumentBrowserViewController 提供的 URL,但不适用于手动生成的 URL
- c++ - 为 c++ cin 上的无效输入数量生成错误消息
- xamarin - 我该如何解决,当我们在 xamarin.ios 应用程序中输入文本字段时,键盘自动关闭
- c++ - SSLeay 读取 PEM 文件
- python - python - 非抽象方法调用抽象方法
- python - 在 Python 中查找句子中的点并用逗号替换它们