在Python

时间:2017-06-09 05:52:05

标签: python

我试图使用Newton-Raphson方法(公式)计算python中数字的近似平方根

但是代码不起作用,因为它停留在while循环中(至少我认为是这样)。我的计划是计算近似值,直到近似值相差1e-10。 这是我现在的代码:

k = input("Enter a number")
try:
    k = int(k)
    xi = 1
    xi2 = xi - (xi**2 - k)/(xi*2)
    diff = xi2 - xi
    while (diff > 0.0000000001):
        xi = xi2
        xi2 = xi - (xi**2 - k)/(xi*2)
        print(xi2)
    print(xi2)
except:
    print("bye")

我是python的新手,所以任何帮助都将不胜感激!非常感谢! :)

更新: 我尝试使用下面的代码作为一些答案建议,但是当给出输入2时它只给出了一个循环才给出答案(1.4166666666666667)。正确的答案应该是(1.4142135623730951)。

while (diff > 0.0000000001):
    xi = xi2
    xi2 = xi - (xi**2 - k)/(xi*2)
    diff = xi2 - xi

1 个答案:

答案 0 :(得分:0)

问题是您没有更改循环中的diff。差异始终是您指定的初始值,因此它永远不会小于1e-10

while (diff > 0.0000000001):
        xi = xi2
        xi2 = xi - (xi**2 - k)/(xi*2)
        diff=xi2-xi

修改

你的问题不是编程问题。 在print(diff)块添加while的情况下运行一些迭代后,我注意到存在负值。

考虑- 1e-2的值。它确实满足循环中断条件,因为它小于1e-10,但它实际上与期望的结果相距很远。

如果您正在处理差异,请使用绝对值:

k = input("Enter a number ")
k = int(k)
xi = 1
xi2 = xi - (xi**2 - k)/(xi*2)
diff = abs(xi2 - xi)
#0.0000000001
while (diff > 0.0000000001):
    xi = xi2
    xi2 = xi - (xi**2 - k)/(xi*2)
    diff = abs(xi2 - xi)
    print(diff)
print(xi2)

输出:

$ python newton-raphson.py
Enter a number 2
0.08333333333333326
0.002450980392156854
2.123899820016817e-06
1.5947243525715749e-12
1.4142135623730951