使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python),,牛顿法(Newton
使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python),,牛顿法(Newton
牛顿法(Newton’s method)又称为牛顿-拉弗森法(Newton-Raphson method),是一种近似求解实数方程式的方法。(注:Joseph Raphson在1690年出版的《一般方程分析》中提出了后来被称为“牛顿-拉弗森法”的数学方法,牛顿于1671年写成的著作《流数法》中亦包括了这个方法,但该书在1736年才出版。)
之前的一篇博客中提到的二分法可以求解方根,而使用牛顿迭代法可以更快地解出方根。现在,人们使用的计算器里面大多数都是运用的牛顿迭代法。
假设n=x2,现在需要求n的方根,n=x2亦即x2-n=0,把它转换成方程式f(x)=x2-n,如上图所示。
选取作为求解方根的初始近似值,过点作切线T,T的方程为,求出T与x轴交点的横坐标,称x1为n方根的一次近似值。
过点再作切线,并求得该切线与x轴交点的横坐标,称为n方根的二次近似值。
以此类推,得到牛顿法的迭代公式:(注:f‘(xn)是导数,这里也就是切线的斜率,数值是2*xn)。
猜测值在经过多次迭代后会越来越接近曲线的根,用数学术语来说就是,这个方程式在的时候收敛,故能求得近似n方根的值。
总的图示如下:
代码如下:
def sqrt_NR(n):调用此函数试一下:
‘‘‘为了方便起见,先假设n为正数‘‘‘
guess=n/2 # 设置初始猜测值为n的一半
diff=guess**2-n # f(Xn)
count=1 # 设置猜测次数起始值为1
while abs(diff)>0.001 and count<100: # 当猜测值的平方和n本身的差值无限接近误差值时,循环才会停止;同时设置猜测次数不超过100次
guess=guess-diff/(2*guess) # 根据牛顿法的迭代公式Xn+1=Xn-f(Xn)/f‘(Xn),将上一次的猜测值减去f(Xn)/导数的值赋予新的猜测值
diff=guess**2-n # 更新f(Xn)
count+=1 # 猜测次数每次增加1
return guess
print(sqrt_NR(8))
运行结果如下:
2.8284313725490198
二分法和牛顿法对比:
把这两个函数的eplison都设置为0.01,增加显示count
运行:
print(“二分法: ", sqrt_bi(8))
print("牛顿法: ", sqrt_NR(8))
结果如下:
二分法: (2.828369140625, 15)
牛顿法: (2.8284313725490198, 4)
是不是牛顿法比二分法快多了?
参考:麻省理工学院公开课:计算机科学及编程导论 (第6课)
使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)
相关内容
- python django -6 常用的第三方包或工具,pythondjango,常用的
- Sublime Text3 配置Python3编译环境,sublimepython3,Sublime Te
- python爬虫:multipart/form-data格式的POST实体封装与提交,
- deepin下使用python遇到的一些情况,deepinpython,1.系统自带
- Python读取jsonlines格式文件,python读取jsonlines,Python读取
- ubuntu 16.04 python 3.x 安装OpenSSL,16.04openssl,错误提示:C
- python学习之----用虚拟环境保存库文件,python----,如果你
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (二),,部分
- Python:你应该知道这些,Python:,1. Python的
- Python3——局部变量和全局变量,python3全局变量,在函数
评论关闭