如何使用牛顿算法创建一个名为mySqrt的python函数,该函数将近似数字的平方根,称之为n。这是我到目前为止所做的:
def newguess(x):
result = x/2
return result
def mySqrt(n):
result = (1/2) * (oldguess + (n/oldguess))
return result
v = newguess(45)
t = mySqrt(65)
print(t)
答案 0 :(得分:2)
我认为这就是你要找的东西:
def my_sqrt(n):
approx = n/2
closer = (approx + n/approx)/2
while closer != approx:
approx = closer
closer = (approx + n/approx)/2
return approx
答案 1 :(得分:1)
Newton方法找到等式r
的近似解f(x) = 0
,如下所示:
r
设置为初步猜测。设置epsilon := 0.00001
(精度)abs(f(r)) > epsilon
重复r := r - f(r)/f'(r)
r
在上面的步骤1中,epsilon
是您想要达到的精度。精度越高,程序的使用时间越长。在第2步中,f'(r)
代表f
的{{1}}衍生物。
现在,您想使用牛顿方法为r
的任何值计算sqrt(a)
。
根据定义,a >= 0
表示x = sqrt(a)
或x^2 = a
。让x^2 - a = 0
查找f(x) = x^2 - a.
的{{1}}解决方案等同于查找r
。请注意,在这种情况下,我们有f(x) = 0
如果我们现在将上述算法应用于此案例,并将r = sqrt(a)
作为初始猜测(实际上是f'(x) = 2*x.
和a/2
之间的任何内容),我们会得到:
0
和a
r := a/2
重复epsilon := 0.000000001
abs(r^2 - a) > epsilon
因此,您现在唯一需要做的就是将这三个简单的步骤转换为植物程序。
答案 2 :(得分:0)
这是一个使用 50 次迭代来近似值的解决方案:
def mySqrt(n):
newGuess=n/2
for i in range(50):
newGuess=0.5*(newGuess + (n/newGuess))
return newGuess