欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python編程實(shí)現(xiàn)二分法和牛頓迭代法求平方根代碼

 更新時(shí)間:2017年12月04日 14:12:15   作者:ycf74514  
這篇文章主要介紹了Python編程實(shí)現(xiàn)二分法和牛頓迭代法求平方根代碼,具有一定參考價(jià)值,需要的朋友可以了解下。

求一個(gè)數(shù)的平方根函數(shù)sqrt(int num) ,在大多數(shù)語(yǔ)言中都提供實(shí)現(xiàn)。那么要求一個(gè)數(shù)的平方根,是怎么實(shí)現(xiàn)的呢?
實(shí)際上求平方根的算法方法主要有兩種:二分法(binary search)和牛頓迭代法(Newton iteration)

1:二分法

求根號(hào)5

a:折半: 5/2=2.5
b:平方校驗(yàn): 2.5*2.5=6.25>5,并且得到當(dāng)前上限2.5
c:再次向下折半:2.5/2=1.25
d:平方校驗(yàn):1.25*1.25=1.5625<5,得到當(dāng)前下限1.25
e:再次折半:2.5-(2.5-1.25)/2=1.875
f:平方校驗(yàn):1.875*1.875=3.515625<5,得到當(dāng)前下限1.875

每次得到當(dāng)前值和5進(jìn)行比較,并且記下下下限和上限,依次迭代,逐漸逼近平方根:

import math 
from math import sqrt 
 
def sqrt_binary(num): 
  x=sqrt(num) 
  y=num/2.0 
  low=0.0 
  up=num*1.0 
  count=1 
  while abs(y-x)>0.00000001: 
    print count,y 
    count+=1     
    if (y*y>num): 
      up=y 
      y=low+(y-low)/2 
    else: 
      low=y 
      y=up-(up-y)/2 
  return y 
 
print(sqrt_binary(5)) 
print(sqrt(5)) 

運(yùn)行結(jié)果:
1 2.5
2 1.25
3 1.875
4 2.1875
5 2.34375
6 2.265625
7 2.2265625
8 2.24609375
9 2.236328125
10 2.2314453125
11 2.23388671875
12 2.23510742188
13 2.23571777344
14 2.23602294922
15 2.23617553711
16 2.23609924316
17 2.23606109619
18 2.23608016968
19 2.23607063293
20 2.23606586456
21 2.23606824875
22 2.23606705666
23 2.2360676527
24 2.23606795073
25 2.23606809974
26 2.23606802523
27 2.23606798798
2.23606796935
2.2360679775
[Finished in 0.1s]

經(jīng)過(guò)27次二分法迭代,得到的值和系統(tǒng)sqrt()差別在0.00000001,精度在億分之一,

0.001需要迭代8次

因此,在對(duì)精度要求不高的情況下,二分法也算比較高效的算法。

2:牛頓迭代

仔細(xì)思考一下就能發(fā)現(xiàn),我們需要解決的問(wèn)題可以簡(jiǎn)單化理解。

從函數(shù)意義上理解:我們是要求函數(shù)f(x)=x²,使f(x)=num的近似解,即x²-num=0的近似解。

從幾何意義上理解:我們是要求拋物線g(x)=x²-num與x軸交點(diǎn)(g(x)=0)最接近的點(diǎn)。

我們假設(shè)g(x0)=0,即x0是正解,那么我們要做的就是讓近似解x不斷逼近x0,這是函數(shù)導(dǎo)數(shù)的定義:

可以由此得到

從幾何圖形上看,因?yàn)閷?dǎo)數(shù)是切線,通過(guò)不斷迭代,導(dǎo)數(shù)與x軸的交點(diǎn)會(huì)不斷逼近x0。

對(duì)于一般情況:

將m=2代入:

def sqrt_newton(num): 
  x=sqrt(num) 
  y=num/2.0 
  count=1 
  while abs(y-x)>0.00000001: 
    print count,y 
    count+=1 
    y=((y*1.0)+(1.0*num)/y)/2.0000 
  return y 
 
print(sqrt_newton(5)) 
print(sqrt(5)) 

運(yùn)行結(jié)果:
1 2.5
2 2.25
3 2.23611111111
2.23606797792
2.2360679775

精確到億分之一,牛頓法只迭代了3次,是二分法的十倍

3:利用牛頓法求開(kāi)立方

def cube_newton(num): 
  x=num/3.0 
  y=0 
  count=1 
  while abs(x-y)>0.00000001: 
    print count,x 
    count+=1 
    y=x 
    x=(2.0/3.0)*x+(num*1.0)/(x*x*3.0) 
  return x 
 
print(cube_newton(27))  

微積分、概率、線代是高級(jí)算法的基礎(chǔ)課。可是,這么多年,已經(jīng)忘得差不多了..............................

總結(jié)

以上就是本文關(guān)于Python編程實(shí)現(xiàn)二分法和牛頓迭代法求平方根代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。

相關(guān)文章

  • Python讀取Hive數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼詳解

    Python讀取Hive數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼詳解

    這篇文章主要介紹了Python讀取Hive數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 解決python爬蟲(chóng)中有中文的url問(wèn)題

    解決python爬蟲(chóng)中有中文的url問(wèn)題

    今天小編就為大家分享一篇解決python爬蟲(chóng)中有中文的url問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python 如何執(zhí)行控制臺(tái)命令與操作剪切板

    python 如何執(zhí)行控制臺(tái)命令與操作剪切板

    這篇文章主要介紹了python 如何執(zhí)行控制臺(tái)命令與操作剪切板,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Flask自定義序列化超詳細(xì)講解

    Flask自定義序列化超詳細(xì)講解

    序列化其實(shí)就是將數(shù)據(jù)轉(zhuǎn)化成一種可逆的數(shù)據(jù)結(jié)構(gòu),自然,逆向的過(guò)程就叫做反序列化。php將數(shù)據(jù)序列化和反序列化會(huì)用到兩個(gè)函數(shù):serialize 將對(duì)象格式化成有序的字符串、unserialize 將字符串還原成原來(lái)的對(duì)象
    2022-11-11
  • 用Python的線程來(lái)解決生產(chǎn)者消費(fèi)問(wèn)題的示例

    用Python的線程來(lái)解決生產(chǎn)者消費(fèi)問(wèn)題的示例

    這篇文章主要介紹了用Python的線程來(lái)解決生產(chǎn)者消費(fèi)問(wèn)題的示例,包括對(duì)使用線程中容易出現(xiàn)的一些問(wèn)題給出了相關(guān)解答,需要的朋友可以參考下
    2015-04-04
  • 如何使用PyCharm及常用配置詳解

    如何使用PyCharm及常用配置詳解

    對(duì)于一枚pycharm工具的使用新手,正確了解這門(mén)工具的配置及其使用,在使用過(guò)程中遇到的很多問(wèn)題也可以迎刃而解,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • flask框架jinja2模板與模板繼承實(shí)例分析

    flask框架jinja2模板與模板繼承實(shí)例分析

    這篇文章主要介紹了flask框架jinja2模板與模板繼承,結(jié)合實(shí)例形式分析了flask框架jinja2模板的基本用法與模板繼承相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-08-08
  • Python讀寫(xiě)csv文件流程及異常解決

    Python讀寫(xiě)csv文件流程及異常解決

    這篇文章主要介紹了Python讀寫(xiě)csv文件流程及異常解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python之模擬鼠標(biāo)鍵盤(pán)動(dòng)作具體實(shí)現(xiàn)

    python之模擬鼠標(biāo)鍵盤(pán)動(dòng)作具體實(shí)現(xiàn)

    這篇文章主要介紹了python之模擬鼠標(biāo)鍵盤(pán)動(dòng)作具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • 解讀Python編程中的命名空間與作用域

    解讀Python編程中的命名空間與作用域

    這篇文章主要介紹了Python編程中的命名空間與作用域,是Python入門(mén)學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論