Fortran Coder

标题: 求助大佬,在某个位置这个二分算法会陷入死循环求帮助 [打印本页]

作者: 盛世青衫    时间: 2024-4-10 14:54
标题: 求助大佬,在某个位置这个二分算法会陷入死循环求帮助
大佬好,想重点请教一下一个问题。我这里是一个简单的二分计算,其中pl,pr分别是上界和下界。一开始计算还比较好。
但是他在某种情况下会一直循环,并且循环的时候上界和下界不进行重置,也不对我需要的值进行二分重新赋值,就按照某一个数不断死循环,请问这可能是什么情况呢。
下面是我对于这个循环的退出条件
if((abs(hiter-dis)<htoler).or.((abs(pl-pr)<htoler).and.(k.gt.5)))then   
        jiaodu=0.97*alpha_before
        exit
        end if
我发现他这个没有退出的原因是没有达到我给他的htoler,但是如果我增大这个残差的话,他的计算就不准确了,请问为什么在如图所示的二分代码中他没有更新变量值,而是一直死循环呀。
感谢


1712731836293.png (89.28 KB, 下载次数: 27)

1712731836293.png

作者: li913    时间: 2024-4-11 11:13
在给定区间,函数不是单调的,二分法可能失效。
作者: weixing1531    时间: 2024-4-11 13:36
推荐用布伦特 (Brent )法求解
作者: 盛世青衫    时间: 2024-4-11 15:57
li913 发表于 2024-4-11 11:13
在给定区间,函数不是单调的,二分法可能失效。

感谢回复,找到原因了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2