pvd*_*pvd 0 python math newtons-method
我试图以自己的方式编码,但发现我得到了错误的答案.
我看过这个页面.并尝试启动该过程:

F(X)= X ^ 2-E
数学:

所以有我的代码:
def sqrtRootNR(num, count, epsl):
"""
for test
"""
num = float(num)
guess = num / 2.0
diff = guess ** 2.0 - num
_cnt = 0
while abs(diff) > epsl and _cnt < count:
guess = guess - (guess ** 2.0 + epsl) / (guess * 2.0)
diff = guess ** 2.0 - num
_cnt = _cnt +1
print guess, _cnt
sqrtRootNR(2, 100, 0.0001)
Run Code Online (Sandbox Code Playgroud)
但是,我得到了错误的答案.
该函数的输出是:
D:\ poc> python sq.py
0.0595177826557 100
编程的一项重要技能是了解哪些信息最有用.如果添加一些简单的调试信息:
while abs(diff) > epsl and _cnt < count:
guess = guess - (guess ** 2.0 + epsl) / (guess * 2.0)
diff = guess ** 2.0 - num
print guess, _cnt
_cnt = _cnt +1
print guess, _cnt
Run Code Online (Sandbox Code Playgroud)
您可以看到您的程序很快出错:
$ ./sqrt.py
0.49995 0
0.249874989999 1
0.124737394941 2
0.0619678553654 3
0.0301770577385 4
0.0134316410297 5
0.00299326718803 6
-0.0152075217183 7
-0.00431591416548 8
0.00942707405618 9
-0.000590335594744 10
....
Run Code Online (Sandbox Code Playgroud)
似乎每次迭代都会将数字减半,直到它变为负数,此时行为很难一目了然.但你可以明显地说,前几次迭代是错误的.
对我来说看起来很可疑的东西: (guess ** 2.0 + epsl)
在评估牛顿的平方根方法时,你不应该使用epsilon - 毕竟,你要确保你的错误小于epsilon.
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |