You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则试位法(Regular False Position)递归Python程序运行无输出问题求助

正则试位法递归代码漏洞排查及修复

存在的核心问题

  • 试位法计算公式错误
    processinterval函数中求近似根c的公式完全写错,正则试位法的正确公式为c = (a * f(b) - b * f(a)) / (f(b) - f(a)),原代码分子错误写为a*f(a) - b*f(a),导致计算出的midpoint完全不符合预期,递归无法收敛。
  • 递归终止条件顺序错误
    原代码优先判断区间缩放逻辑,最后才判断精度收敛条件,只要f(a)*f(midpoint)不恰好等于0,程序会永远进入递归分支,永远触发不了精度判断的返回逻辑,最终要么递归栈溢出要么卡死无输出。
  • 冗余代码问题
    checkroot函数调用了falsepositionmethod但无返回也无打印,属于无效调用,不影响核心逻辑但冗余。
    代码中的&lt;是HTML转义字符,实际运行时要替换为<。

修复后的代码

import numpy as np
import sys

sys.setrecursionlimit(10000)

def function(x):     
    return float((1/x) - (np.log(x)) + (np.log(2)))

def checkroot(a, b):
    # 增加返回值,判断区间是否存在根
    return function(a) * function(b) < 0

def processinterval(a, b):
    # 修正试位法计算公式
    c = float((a * function(b) - b * function(a)) / (function(b) - function(a)))
    return c
 
def falsepositionmethod(a, b):
    midpoint = processinterval(a, b)
    # 先判断是否满足精度要求,满足直接返回,作为递归终止条件
    if np.abs(function(midpoint)) < 0.0005:
        return midpoint
    # 再判断区间缩放逻辑
    if function(a) * function(midpoint) < 0:
        return falsepositionmethod(a, midpoint)
    else:
        return falsepositionmethod(midpoint, b)
    
def main():
    a = 0.1
    b = 20.0
    if not checkroot(a, b):
        print("当前区间内不存在根或存在偶数个根,请调整区间")
        return
    root = falsepositionmethod(a, b)
    print(f"求得的根为:{root},对应函数值为:{function(root)}")
    
main()

运行说明

修复后运行代码会输出近似根结果,精度满足设置的0.0005阈值要求,不会再出现无输出卡死的情况。

内容的提问来源于stack exchange,提问作者Weightlifting Without Limits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:39:01