【题目描述】编写程序,使用牛顿迭代法求方程
在x附近的一个实根。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】请在一行中输入方程系数a、b、c、d和实数x,数据中间以空格为间隔。
【输出格式】对每一组输入的数据,输出牛顿迭代法求出的实根(格式为保留小数点后2位,四舍五入)。
【输入样例】1.0 2.0 3.0 4.0 1.0
【输出样例】-1.65
关于牛顿迭代法是什么,参考:如何通俗易懂地讲解牛顿迭代法求开方(数值分析)?
代码:
num = input()
n1 = num.split(" ")
n = []
for i in n1[::]:
if i == '':
n1.remove(i)
for i in n1:
n.append(float(i))
def f(x):
return n[0] * pow(x, 3) + n[1] * pow(x, 2) + n[2] * pow(x, 1) + n[3]
def fd(x):
return 3 * n[0] * pow(x, 2) + 2 * n[1] * pow(x, 1) + n[2]
def newtonMethod(assum):
x = assum
a = f(x)
b = fd(x)
if f(x) == 0.0:
print(round(x, 2))
return x
else:
next = x - a / b
# print('next x = ' + str(next)) # 输出下一条切线的值
if a - f(next) < 1e-6:
print(round(next, 2)) # 设置跳出条件,同时输出满足f(x) = 0 的x的值
else:
return newtonMethod(next) # 递归
newtonMethod(n[4])