泰勒公式:
如果我要计算a的平方根,计算的结果为x,根据上面的泰勒公式可以如下处理:
?
根据牛顿迭代法,随便取一个值x0,带入上式计算得到的结果为x1,x1带入得到的结果为x2,依次迭代,当xi和xi+1足够接近时,就是计算的结果。用下面的代码进行迭代计算,就能得出想要的结果。
讲完了原理,下面就用python实现
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import math
def func(a):
if a < 1e-6:
return 0
last = a
x = a / 2
while math.fabs(x-last) > 1e-6:
last = x
x = (x + a / x) / 2
return x
if __name__ == '__main__':
print(func(4))
print(func(16))
print(func(100))
运行上面的代码进行验证,结果如下:
得到的是浮点型的结果。4的平方根代码执行得出是2.0,16的平方根代码执行得出为4.0,100的平方根代码执行得出为10.0,执行结果和实际结果一致。
接下来用plot作图看下效果,代码如下
if __name__ == '__main__':
mpl.rcParams['font.sans-serif'] = [u'SimHei'] #指定默认字体
mpl.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 100, num=200) #x轴取值为0-100,等间隔的取200个点
func_ = np.frompyfunc(func, 1, 1) #1个输入1个输出
y = func_(x)
plt.figure(figsize=(10, 5), facecolor='w')
plt.plot(x, y, 'ro-', lw=2, markersize=6)
plt.grid(b=True, ls=':')
plt.xlabel(u'X', fontsize=16)
plt.ylabel(u'Y(平方根)', fontsize=16)
plt.title(u'牛顿法计算平方根', fontsize=18)
plt.show()
?执行后得到如下结果:
X轴为输入的数字,Y轴为对应X的平方根?
|