2017-06-09 42 views
-1

我试图使用Newton-Raphson法计算在Python一个数的近似平方根(式)逻辑错误,当使用牛顿 - 拉夫逊方法在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

看看[问] – pvg

+2

你永远不会改变'在while循环diff',因此深得't'diff> 0.0000000001'总是'真'? –

回答

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 
+0

嗨,感谢您的回复,我已经尝试过,但是在给出答案(1.4166666666666667)之前只循环一次。正确的答案应该是(1.4142135623730951) – pooroll

+0

@pooroll我调整了答案 – Euphe

+0

它的工作!非常感谢你的帮助! – pooroll