2015-09-27 63 views
0

我需要使用一个while循环使用公式使用而循环使用迭代式

$ X_ {K + 1} = \ dfrac {1} {计算根2的值来获得根2 2}(X_K + dfrac {2} {X_K} $

直到$ ABS(X_ {K + 1} - \ SQRT(2))$ < 0.0001

到目前为止我写下面的代码:

n=1 
iteration=0.5*(n+(2/n)) 
while abs(iteration-(2**0.5))>=0.0001: 
    n=n+1 

print iteration 

我从n = 1开始的原因是因为我的i nitial错误是n没有被定义为'迭代'。然后我将迭代公式分配给变量'迭代'。然后我会说,虽然迭代公式的绝对值减去根2大于或等于0.0001,但请继续使用每次更大的值n的迭代公式。

我知道这是错误的,因为我不想只使用更大的n值,但我想使用前一个结果的迭代值。

这样,我得到了1.5次印刷负载,我认为它进入了一个无限循环。

我是Python新手。

+0

你确定你的语言不解释$ A/B $与$ A $和$ B $整数作为*整数*(截断)除法? – vonbrand

回答

1

你不更新你intested的价值,你只是一个递增n

我认为你不应该测试你的结果与真实解决方案的区别。 如果你需要这样做,你通常不知道解决方案。相反,你应该测试收敛。因此,测试两个以下的迭代变化较小:

def iterate(k): 
    return 0.5 * (k + (2.0/k)) 

n = 0 
k = 1 
k_1 = iterate(k) 
while abs(k_1 - k) > 1e-4: 
    k = k_1 
    k_1 = iterate(k) 
    n += 1 

print('convergence after {} iterations'.format(n)) 
print('sqrt(2) = {:1.4f}'.format(k_1)) 

结果:sqrt(2) = 1.4142

1

您只定义iteration一次。它的价值没有得到更新。用一个函数调用:

def iteration(n): 
    return 0.5 * (n + (2/n)) 
n = 1 
current = iteration(n) 
sqrt_2 = 2 ** 0.5 # won't be calculated for each iteration now 
while abs(current - sqrt_2) >= 0.0001: 
    n += 1 
    current = iteration(n) 
print current