如何用while循环求解f(x)=x²–50的根?需转换现有for循环代码
用while循环实现牛顿迭代求解f(x)=x²–50的根
你原来的代码用的是牛顿迭代法求根,要改成while循环,只需要把固定次数的for循环换成计数器控制的while循环即可,同时把目标函数改成作业要求的x²-50。
基础版本(和原for循环迭代次数一致)
# 定义目标函数f(x)=x²-50及其导数 f = lambda x: x**2 - 50 fd = lambda x: 2 * x # 初始迭代值 a = 50 # 迭代计数器,从1开始 i = 1 # 循环执行99次,和原range(1,100)逻辑一致 while i < 100: a = a - (f(a) / fd(a)) print(f"{i}. root in step - {a}") # 计数器自增,避免死循环 i += 1
优化版本(加入精度判断)
固定迭代次数不够灵活,实际求根时通常会设置精度阈值,当函数值足够小时就停止迭代:
f = lambda x: x**2 - 50 fd = lambda x: 2 * x a = 50 i = 1 # 设置精度阈值,比如10^-6,函数值小于这个数就认为找到根 precision = 1e-6 # 循环条件:未达到精度且未超过最大迭代次数 while abs(f(a)) > precision and i < 100: a = a - (f(a) / fd(a)) print(f"{i}. root in step - {a}") i += 1 # 输出最终结果 if abs(f(a)) <= precision: print(f"收敛到根:{a},迭代次数:{i-1}") else: print("达到最大迭代次数,未收敛到指定精度")
内容的提问来源于stack exchange,提问作者user22850879
相关产品推荐
相关产品推荐

