You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

数值分析收敛准则的正确选择:二分、牛顿-拉夫逊等迭代法问询

嘿,这个问题可是数值迭代里的经典坑——不少初学者都会只盯着|f(x)|来设收敛准则,但实际上得结合方法本身的特性和你要达到的精度需求来综合考量。我来给你拆解下三种方法各自该怎么选收敛准则:

二分法:优先看区间长度,辅助看函数值

二分法是唯一能保证收敛的迭代方法(只要初始区间满足f(a)f(b)<0),它的收敛逻辑很直白:每次迭代把区间砍半,真实根一定在剩下的区间里。所以最靠谱的收敛准则是区间长度小于你要求的根的精度:比如你需要根的绝对误差不超过1e-6,那当区间长度b-a < 1e-6时就可以停了——因为此时区间里随便选个点(比如中点)和真实根的差距绝不会超过区间长度的一半,完全能满足精度要求。

当然你也可以加个|f(x)| < δ的辅助判断,但别把它当核心——毕竟有些函数在根附近特别平坦,|f(x)|很小的时候,x可能离真实根还有不小距离。

牛顿-拉夫逊法:双维度判断,兼顾x的变化和函数值

牛顿法是二阶收敛的,速度快得飞起,但前提是初始点选得合理、根附近导数不为零。这里的收敛准则最好同时看两个维度:

  • 迭代值的变化量:也就是|x_{n+1} - x_n| < ε,因为牛顿法收敛时,相邻两次迭代的x值差距会极速缩小,这个指标能直接反映x逼近真实根的程度;
  • 函数值的大小|f(x_n)| < δ,这里的δ得和你的精度需求匹配——比如如果要求根的绝对误差是1e-6,那δ可以设成1e-12左右(因为在根附近,|f(x)| ≈ |f’(x*)| * |x - x*|,函数值误差和x的误差是线性相关的)。

另外别忘了加个迭代次数上限,万一初始点选砸了,牛顿法可是会发散的,别让程序死循环。

不动点迭代法:核心看x的迭代变化量

不动点迭代是x_{n+1} = g(x_n),它的收敛条件是根附近|g’(x)| < 1。这里的收敛准则主要看相邻迭代值的差|x_{n+1} - x_n| < ε,因为它是一阶收敛的,这个差值直接对应着误差的量级。同样可以加|f(x_n)| < δ当辅助,但别本末倒置——毕竟如果g(x)选得不好,可能|f(x)|很小但x离真实根还远,或者反过来。

回到你的问题

你用|f(x)| ≤ 0.5×10^{-5}得到了x=0.652910,但参考答案的准则更小,大概率是因为参考答案要求的是根的绝对误差更高,而不是只满足函数值的误差。比如假设真实根是0.652912,你的结果和真实根差了2e-6,虽然|f(x)|达标了,但如果题目要求根的精度到1e-6,那你的结果就不够。所以下次设准则的时候,别只盯着函数值,先明确题目要的是根的精度还是函数值的精度,再结合方法特性来选。

内容的提问来源于stack exchange,提问作者Numerical Newbie

火山引擎 最新活动