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

使用BISECTION METHODS求解三次方程根时循环不终止问题咨询

二分法代码问题诊断

核心问题

  • 目标函数硬编码
    你代码中计算中点函数值的逻辑是固定写死的:fungsiXt = eval("Xt**3+Xt**2-3*Xt-3"),当你把soal变量替换为其他方程(比如x**3+4*x**2-10)时,只有区间两端点的函数值是按新方程计算的,中点的函数值永远沿用第一个方程的计算逻辑,导致符号判断完全错误,永远无法满足abs(fungsiXt) <= epsilon的终止条件,最终进入死循环。
    修正方案:将中点函数值的计算改为和两端点一致的动态拼接逻辑:
fungsiXt = eval('Xt'.join(soal.split("x")))
  • 初始区间未做合法性校验
    当前代码的初始区间固定为[1, 2],而二分法的必要前提是初始区间两端点的函数值符号相反,保证区间内存在至少一个根。如果更换的方程在[1,2]区间内无根、两端函数值同号,二分法本身就无法收敛,也会触发死循环。
    修正方案:进入循环前添加校验逻辑,不满足条件直接提示:
var1, var2 = batasAtas[-1], batasBawah[-1]
fungsiSatu, fungsiDua = eval('var1'.join(soal.split("x"))), eval('var2'.join(soal.split("x")))
if fungsiSatu * fungsiDua >= 0:
    print("初始区间内无根或存在偶数个根,二分法不适用")
    exit()

其他优化建议

  • 将epsilon = 0.0001的定义移到循环外部,避免每次循环重复赋值
  • 避免使用eval执行动态表达式,存在安全隐患,可改用自定义函数传入x值计算函数结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:00:02