【发布时间】:2020-05-11 15:00:01
【问题描述】:
我正在用 Octave 编写定点迭代脚本,需要检查方法是否收敛。目前我唯一想到的是对在 x0 中评估的 g(x) 的导数进行非常基本的检查。
if (conv_x<=1)
fprintf("\nThe method guarantees convergence:\n|g'(x0)| <= 1\n%d <= 1\n", conv_x)
else
fprintf("\nThe method does not guarantee convergence:\n|g'(x0)| > 1\n%d > 1\n", conv_x)
endif
尽管在某些情况下它确实会收敛,即使它并不能保证。 示例(命令窗口):
The method does not guarantee convergence:
|g'(x0)| > 1
2.48318 > 1
i x_i Ea Er Er%
0 1.000000
1 3.623970 0.292484 0.080708 8.07081%
2 3.277427 0.346543 0.105736 10.5736%
3 2.929255 0.348173 0.118860 11.886%
4 2.663926 0.265329 0.099601 9.96007%
5 2.531185 0.132741 0.052442 5.24424%
6 2.490991 0.040194 0.016136 1.61356%
7 2.482583 0.008408 0.003387 0.338681%
8 2.481053 0.001530 0.000617 0.0616501%
9 2.480784 0.000270 0.000109 0.0108692%
10 2.480736 0.000047 0.000019 0.00190502%
11 2.480728 0.000008 0.000003 0.000333541%
>>
有没有一种方法可以让程序读取结果,然后让它说出它是否收敛?而不是在应用方法之前只说是否保证收敛。
【问题讨论】:
-
不清楚你在问什么。要查看一个方法是否收敛,您可以查看错误并检查它是否在连续迭代步骤中变小。这就是收敛的定义。
-
@Cris Luengo 问题是我知道这个例子中的误差越来越小,即使由于选择了 x0 而不能保证收敛。我想知道是否有办法显示一条消息,指出该方法正在收敛,尽管 |g'(x0)| > 1.
-
数值方法通常将当前结果与上一步中的结果进行比较。如果差值小于某个选定值,则认为过程已经收敛并停止迭代。如果你达到这一点,你写出“方法收敛”。如果您没有达到这一点(在运行固定数量的步骤后退出迭代),您会写出“方法没有收敛”。你问的是这个吗?
标签: octave fixed point convergence