8-10 【Python0011】牛顿迭代法
分数 10
作者 doublebest
单位 石家庄铁道大学
【题目描述】编写程序,使用牛顿迭代法求方程
在x附近的一个实根。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】请在一行中输入方程系数a、b、c、d和实数x,数据中间以空格为间隔。
【输出格式】对每一组输入的数据,输出牛顿迭代法求出的实根(格式为保留小数点后2位,四舍五入)。
【输入样例】1.0 2.0 3.0 4.0 1.0
【输出样例】-1.65
代码量
def newton_raphson(a, b, c, d, x0, tol=1e-8, max_iter=100):
def f(x):
return a*x**3 + b*x**2 + c*x + d
def f_prime(x):
return 3*a*x**2 + 2*b*x + c
x_n = x0
for _ in range(max_iter):
x_n1 = x_n - f(x_n) / f_prime(x_n)
if abs(x_n1 - x_n) < tol:
return x_n1 # 收敛,返回结果
x_n = x_n1 # 更新迭代值
return None # 未在最大迭代次数内收敛
# 示例使用
a, b, c, d = 1, -6, 11, -6 # 示例方程 x^3 - 6x^2 + 11x - 6 = 0 的系数
x0 = 1 # 初始猜测值
root = newton_raphson(a, b, c, d, x0)
if root is not None:
print(f"方程的实根约为: {root}")
else:
print("未找到根或迭代未收敛。")