Dekker的数值方法区间更新混淆

Dekker's numerical method interval update confusion

提问人:blov 提问时间:11/12/2023 更新时间:11/16/2023 访问量:34

问:

我正在实现 Dekker 的数值寻根方法,但我对更新区间有点困惑。关于这一点的 wiki 提到

选择新的对位,使得 f(a_k+1) 和 f(b_k+1) 具有相反的符号。如果 f(a_k) 和 f(b_k+1) 具有相反的符号,则对位保持不变:a_k+1 = a_k。否则,f(b_k+1) 和 f(b_k) 具有相反的符号,因此新的对位变为 a_k+1 = b_k。

我不明白在 f(a_k) 和 f(b_k+1) 没有相反符号的情况下你会怎么做。实现这部分非常令人困惑。

目前我正在做:

# check signs of function, if f(bk_k+1) * f(ak) < 0 make no change, else set ak to old bk
if fbk_next * func(ak) < 0:
    ak = ak
else:
    ak = bk

然后它继续提到:

如果 |f(a_k+1)|< |f(b_k+1)|,那么 a_k+1 可能比 b_k+1 更能猜测解决方案,因此交换了 a_k+1 和 b_k+1 的值。

目前尚不清楚这种交换应该在什么时候发生。希望对 Dekker 数值方法算法的这一部分有任何见解和澄清。到目前为止,我已经提供了我当前的代码,它似乎略微收敛。

德克尔s_method.py

python jupyter-notebook 数值方法

评论

0赞 cards 11/12/2023
我投票关闭这个问题,因为这是关于编程的,周围有很多教程(还有视频)
0赞 cards 11/12/2023
Dekker 的方法是混合的。 173 页更多详细信息

答:

0赞 Lutz Lehmann 11/12/2023 #1

你有旧的包围间隔,可能按降序排列。您将在区间中得到一个新点,即割线根或中点。根据括号间隔的性质,存在符号变化,因此在 和 之一中仍然存在符号变化。[ a[k], b[k] ]v[k][ a[k], v[k] ][ v[k], b[k] ]

无论哪种情况,.在第一种情况下,在第二种情况下.b[k+1] = v[k]a[k+1] = a[k]a[k+1] = b[k]

特别是在被选为中点/中点的情况下,也很少用于割线根,可能是新点的函数值不是最小的。然后进行适当的重新安排来补救这一点。点和得到交换以及下一个割线根是根据它们计算的,而不是从最后两个值计算的。据我所知,这部分在维基百科上没有提到。此外,还缺少在多个根上所需的最小步骤,以及将包围间隔减少到误差容限以下的最后一步。v[k]a[k+1]b[k+1]b