def yield_pairs(seq): """ For a sequence [a,b,c,d], return the pairs (a,b), (b,c), (c,d). (Analogous for longer sequences.) """ last = None for i in seq: if last is not None: yield (last, i) last = i def verify_order_of_convergence(label, sequence, order): i = 1 print label for last, current in yield_pairs(sequence): print "|e_%d|/|e_%d|^%g = %g" % (i+1,i,order,current/last**order) i += 1 verify_order_of_convergence("Method 1", [4.0e-2, 9.1e-4, 4.8e-7], 2) verify_order_of_convergence("Method 2", [3.7e-4, 1.2e-15, 1.5e-60], 3.9) verify_order_of_convergence("Method 2", [4.3e-3, 1.8e-8, 1.4e-24], 3)