求解平方根,是多项式求解的一个最简单的特例。
分别采用梯度下降和牛顿迭代解法如下。
其中梯度下降的步进如何选择有点不解,迭代次数比牛顿多太多了。

import sys import mathdef gradient_descent(y):    x = 1     alpha = 0.001    delta = 1     count = 0     while abs(delta) > 0.000001:        delta = 4 * x * ( x ** 2 - y)        x -= alpha * delta        count += 1        #print("y=%f\tcount=%d\tx=%f\tdelta=%f\n"%(y, count, x, delta))    return x,countdef niudun(y):    x = 1     delta = abs(x ** 2 - y)    count = 0;    while delta > 0.000001:        x = (x + y/x) / 2         delta = abs(x * x - y)        count += 1        #print("y=%f\tcount=%d\tx=%f\tdelta=%f\n"%(y, count, x, delta))    return x,countwhile True:    try:        print "select mode, 1-gradient_descent, 2-niudun, and input y to sqrt"        m, y = map(float, sys.stdin.readline().split(' '))        if m == 1:            x, cnt = gradient_descent(y)        else:            x, cnt = niudun(y)        print("mode=%d, sqrt(%f)=%f, delta=%f, cnt=%d" % (m, y,x, x-math.sqrt(y), cnt))    except RuntimeError, e:        print("exception: ", e)        continue