我试图使用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
答案 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