gpt4 book ai didi

python - 在Python中求解固定非均匀网格上的BVP而不进行插值

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:23 26 4
gpt4 key购买 nike

我知道scipy.solve_bvp,但它要求您插入我不想做的变量。

我有以下形式的边值问题:

y1'(x) = -c1*f1(x)*f2(x)*y2(x) - f3(x)

y2'(x) = f4(x)*y1 + f1(x)*y2(x)

y1(x=0)=0, y2(x=1)=0

我在非均匀网格上有 x=[0, 0.0001, 0.025, 0.3, ... 0.9999999, 1] 的值,并且仅在这些值上有所有变量/函数的值x 的值。

如何解决这个 BVP?

最佳答案

这是一个新功能,我的scipy上没有它。版本(0.17),但我在 scipy/scipy/integrate/_bvp.py 中找到了源代码(github)。

相关的拉取请求是 https://github.com/scipy/scipy/pull/6025 ,去年四月。

它基于论文和 MATLAB 实现,

       J. Kierzenka, L. F. Shampine, "A BVP Solver Based on Residual
Control and the Maltab PSE", ACM Trans. Math. Softw., Vol. 27,
Number 3, pp. 299-316, 2001.

x网格处理似乎是:

while True:
....
solve_newton
....
insert_1, = np.nonzero((rms_res > tol) & (rms_res < 100 * tol))
insert_2, = np.nonzero(rms_res >= 100 * tol)
nodes_added = insert_1.shape[0] + 2 * insert_2.shape[0]

if m + nodes_added > max_nodes:
status = 1
if verbose == 2:
nodes_added = "({})".format(nodes_added)
print_iteration_progress(iteration, max_rms_res, m,
nodes_added)
...
if nodes_added > 0:
x = modify_mesh(x, insert_1, insert_2)
h = np.diff(x)
y = sol(x)

哪里modify_mesh将节点添加到 x基于:

insert_1 : ndarray
Intervals to each insert 1 new node in the middle.
insert_2 : ndarray
Intervals to each insert 2 new nodes, such that divide an interval
into 3 equal parts.

据此我推断

  • 您可以使用 verbose 跟踪节点的添加情况。参数

  • 节点已添加,但未删除。因此输出网格应该包含所有输入点。

  • 我假设添加节点是为了提高问题某些部分的分辨率

这是基于阅读代码,并没有通过测试代码进行验证。您可能是唯一在 SO 上询问此功能的人,也是少数实际使用过它的人之一。

关于python - 在Python中求解固定非均匀网格上的BVP而不进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com