python-牛顿迭代法

【题目描述】编写程序,使用牛顿迭代法求方程 图片1.png 在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])

 

posted @ 2022-03-18 22:24  睡觉不困  阅读(1004)  评论(0编辑  收藏  举报