guozi6

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
8-10 【Python0011】牛顿迭代法
分数 10
作者 doublebest
单位 石家庄铁道大学

【题目描述】编写程序,使用牛顿迭代法求方程
图片1.png
在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("未找到根或迭代未收敛。")
posted on 2024-04-10 23:00  汀幻  阅读(3)  评论(0编辑  收藏  举报