0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python實(shí)現(xiàn)所有算法:拉夫遜方法

云深之無(wú)跡 ? 來(lái)源:云深之無(wú)跡 ? 作者:云深之無(wú)跡 ? 2022-07-10 09:42 ? 次閱讀

emmmmm,好長(zhǎng)時(shí)間沒(méi)有用matplotlib,都不會(huì)畫(huà)圖了。先繪制一個(gè)x**3-1的函數(shù),然后考慮在a,b之間找他的根。

b4bc35b0-fecf-11ec-ba43-dac502259ad0.png

-10,10

b4f53ec8-fecf-11ec-ba43-dac502259ad0.png

-5,5

b52eb87e-fecf-11ec-ba43-dac502259ad0.png

那么這個(gè)函數(shù)被起名為intersection

連續(xù)函數(shù)與x相交時(shí)就是根,是不是很形象。

def intersection(function: Callable[[float], float], x0: float, x1: float) -> float:

因?yàn)槲覀冎?,這個(gè)函數(shù)應(yīng)該是我們給出要求解的區(qū)間和函數(shù)給出一個(gè)根。那么這里function的Callable就是可以當(dāng)匿名函數(shù)傳遞。

b5709dd4-fecf-11ec-ba43-dac502259ad0.png

為了函數(shù)的靈活性,這里使用float

b5966d84-fecf-11ec-ba43-dac502259ad0.png

主函數(shù),因?yàn)槲覀兒瘮?shù)其實(shí)不知道具體的函數(shù)的循環(huán)次數(shù),那么就可以使用while的循環(huán)。

一開(kāi)始要判斷參數(shù)的情況,如果都相等,你這算啥???以及都帶進(jìn)去,再算一下,雙保險(xiǎn),雙重?fù)浣帧?/p>

b5c434b2-fecf-11ec-ba43-dac502259ad0.png

接下來(lái)就是這個(gè)公式,我是個(gè)罪人,用了一張A4紙就寫(xiě)一個(gè)這

b5ff2d9c-fecf-11ec-ba43-dac502259ad0.png

計(jì)算的X看看符合要求嗎?不符合就繼續(xù)將值域縮小。直到很小。

這個(gè)不是二分法,但是差不多的意思,不過(guò)這個(gè)是牛頓法,也叫牛頓-拉夫遜(拉弗森)方法,就我的題目。

這篇文章的下面就講講這個(gè)東西:

它是牛頓在17世紀(jì)提出的一種在實(shí)數(shù)域和復(fù)數(shù)域上近似求解方程的方法。

多數(shù)方程不存在求根公式,因此求精確根非常困難,甚至不可解,從而尋找方程的近似根就顯得特別重要。方法使用函數(shù) f(x) 的泰勒級(jí)數(shù)的前面幾項(xiàng)來(lái)尋找方程 f(x)=0 的根。牛頓迭代法是求方程根的重要方法之一,其最大優(yōu)點(diǎn)是在方程 f(x)=0 的單根附近具有平方收斂,而且該法還可以用來(lái)求方程的重根、復(fù)根,此時(shí)線性收斂,但是可通過(guò)一些方法變成超線性收斂。

b62c82a6-fecf-11ec-ba43-dac502259ad0.png

牛!

迭代法也稱(chēng)輾轉(zhuǎn)法,是一種不斷用變量的舊值遞推新值的過(guò)程,跟迭代法相對(duì)應(yīng)的是直接法(或者稱(chēng)為一次解法),即一次性解決問(wèn)題。迭代算法是用計(jì)算機(jī)解決問(wèn)題的一種基本方法。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),都從變量的原值推出它的一個(gè)新值。

利用迭代算法解決問(wèn)題,需要做好以下三個(gè)方面的工作:

一、確定迭代變量

在可以用迭代算法解決的問(wèn)題中,至少存在一個(gè)可直接或間接地不斷由舊值遞推出新值的變量,這個(gè)變量就是迭代變量。

二、建立迭代關(guān)系式

所謂迭代關(guān)系式,指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決迭代問(wèn)題的關(guān)鍵,通常可以使用遞推或倒推的方法來(lái)完成。

三、對(duì)迭代過(guò)程進(jìn)行控制

在什么時(shí)候結(jié)束迭代過(guò)程?這是編寫(xiě)迭代程序必須考慮的問(wèn)題。不能讓迭代過(guò)程無(wú)休止地執(zhí)行下去。迭代過(guò)程的控制通??煞譃閮煞N情況:一種是所需的迭代次數(shù)是個(gè)確定的值,可以計(jì)算出來(lái);另一種是所需的迭代次數(shù)無(wú)法確定。對(duì)于前一種情況,可以構(gòu)建一個(gè)固定次數(shù)的循環(huán)來(lái)實(shí)現(xiàn)對(duì)迭代過(guò)程的控制;對(duì)于后一種情況,需要進(jìn)一步分析得出可用來(lái)結(jié)束迭代過(guò)程的條件。

b682300c-fecf-11ec-ba43-dac502259ad0.png

然后,自己的函數(shù)也可以這樣定義

intersection(f, 3, 3.5)

b6aa3642-fecf-11ec-ba43-dac502259ad0.png

精度ok

再說(shuō)說(shuō)數(shù)值求法:

大多數(shù)的數(shù)值求根算法都使用迭代法,生成一個(gè)以方程的根為極限的收斂數(shù)列。它們需要一個(gè)或多個(gè)根作為迭代的初期值,之后每次迭代都生成一個(gè)逐步逼近根的值。

由于迭代法必須在有限步內(nèi)終止于某個(gè)點(diǎn),這些方法都只能提供一個(gè)根的近似值,而不能提供一個(gè)精確解。許多方法是通過(guò)代入上一個(gè)迭代值來(lái)計(jì)算一個(gè)輔助方程,從而得出下一個(gè)迭代值的。此處所指的輔助方程是指為了使原方程的根是一個(gè)定點(diǎn)并使迭代值能更快地收斂到這些定點(diǎn)而設(shè)計(jì)的一個(gè)方程,因此迭代值的極限是這個(gè)輔助方程的一個(gè)定點(diǎn)。

求根算法的性能是數(shù)值分析的研究范疇。一種算法的效率可能大幅度取決于已知點(diǎn)的性質(zhì)。

例如,一部分算法都使用輸入函數(shù)的導(dǎo)數(shù)(此要求函數(shù)不但連續(xù),而且可導(dǎo)),而其他算法則能用于任何一個(gè)連續(xù)函數(shù)。在一般情況下,數(shù)值算法不能保證找到一個(gè)函數(shù)的所有根,因此算法未能找到根并不能證明方程無(wú)根。然而,對(duì)于多項(xiàng)式,存在特定的使用代數(shù)學(xué)性質(zhì)以定位根的所在區(qū)間(或復(fù)根所在的圓盤(pán))的算法,這個(gè)區(qū)間(或圓盤(pán))足夠小以能保證數(shù)值算法(例如牛頓法)能收斂到唯一被定位的根。

審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
  • 方程
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    16900
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    607

    瀏覽量

    28257

原文標(biāo)題:Python實(shí)現(xiàn)所有算法-牛頓-拉夫遜(拉弗森)方法

文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)現(xiàn)狄克準(zhǔn)則

    求用LabView實(shí)現(xiàn)狄克準(zhǔn)則算法
    發(fā)表于 03-24 14:13

    Python實(shí)現(xiàn)k-近鄰算法

    算法。5、測(cè)試算法:計(jì)算錯(cuò)誤率。6、使用算法:首先需要輸入樣本數(shù)據(jù)和結(jié)構(gòu)化的輸出結(jié)果,然后運(yùn)行k-近鄰算法判定輸入數(shù)據(jù)分別屬于哪個(gè)分類(lèi),最后應(yīng)用對(duì)計(jì)算出的分類(lèi)執(zhí)行后續(xù)的處理。關(guān)于k-近
    發(fā)表于 10-10 10:32

    利用python實(shí)現(xiàn)KNN算法

    K近鄰python實(shí)現(xiàn)
    發(fā)表于 10-25 17:24

    Python的Apriori算法和FP-Growth算法是什么

    [源碼和文檔分享]基于Python實(shí)現(xiàn)的Apriori算法和FP-Growth算法的頻繁項(xiàng)集挖掘的研究與實(shí)現(xiàn)
    發(fā)表于 06-04 12:49

    KNN分類(lèi)算法python代碼實(shí)現(xiàn)

    kNN分類(lèi)算法Python實(shí)現(xiàn)
    發(fā)表于 06-05 12:02

    基于Matpower的電力系統(tǒng)潮流計(jì)算設(shè)計(jì)原理是什么

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔基于Matlab的8機(jī)28節(jié)點(diǎn)電力系統(tǒng)潮流計(jì)算設(shè)計(jì)前言一、牛頓-拉夫算法潮流計(jì)算的基本原理1.牛頓-拉夫
    發(fā)表于 06-30 07:44

    基于Matpower的電力系統(tǒng)潮流計(jì)算原理及仿真設(shè)計(jì)

    基于Matpower的電力系統(tǒng)潮流計(jì)算設(shè)計(jì)原理第一部分 前言第二部分 牛頓-拉夫算法潮流計(jì)算的基本原理1.牛頓-拉夫計(jì)
    發(fā)表于 06-30 06:36

    Python實(shí)現(xiàn)k-近鄰算法

    算法。5、測(cè)試算法:計(jì)算錯(cuò)誤率。6、使用算法:首先需要輸入樣本數(shù)據(jù)和結(jié)構(gòu)化的輸出結(jié)果,然后運(yùn)行k-近鄰算法判定輸入數(shù)據(jù)分別屬于哪個(gè)分類(lèi),最后應(yīng)用對(duì)計(jì)算出的分類(lèi)執(zhí)行后續(xù)的處理。關(guān)于k-近
    發(fā)表于 01-04 14:03

    BP神經(jīng)網(wǎng)絡(luò)算法 python實(shí)現(xiàn)

    直接上代碼是最有效的學(xué)習(xí)方式。這篇教程通過(guò)由一段簡(jiǎn)短的 python 代碼實(shí)現(xiàn)的非常簡(jiǎn)單的實(shí)例來(lái)講解 BP 反向傳播算法。
    發(fā)表于 12-29 14:06 ?2.1w次閱讀
    BP神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>算法</b> <b class='flag-5'>python</b><b class='flag-5'>實(shí)現(xiàn)</b>

    蟻群算法python編程實(shí)現(xiàn)

    本文主要介紹了Python編程實(shí)現(xiàn)蟻群算法詳解,涉及螞蟻算法的簡(jiǎn)介,主要原理及公式,以及Python中的
    發(fā)表于 02-02 10:36 ?7390次閱讀
    蟻群<b class='flag-5'>算法</b><b class='flag-5'>python</b>編程<b class='flag-5'>實(shí)現(xiàn)</b>

    簡(jiǎn)單潮流計(jì)算的牛頓拉夫程序

    本文檔內(nèi)容介紹了基于簡(jiǎn)單潮流計(jì)算的牛頓拉夫程序,供參考
    發(fā)表于 03-05 15:12 ?9次下載

    使用Python實(shí)現(xiàn)所有算法

    typing 是Python3.5中開(kāi)始新增的專(zhuān)用于類(lèi)型注解(type hints)的模塊,為Python程序提供靜態(tài)類(lèi)型檢查。
    的頭像 發(fā)表于 07-06 16:39 ?923次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>所有</b><b class='flag-5'>算法</b>

    Python實(shí)現(xiàn)所有算法-基本牛頓法

    -牛頓-拉夫(拉弗森)方法 Python實(shí)現(xiàn)所有算法
    的頭像 發(fā)表于 07-13 10:40 ?1528次閱讀

    [源代碼]Python算法詳解

    [源代碼]Python算法詳解[源代碼]Python算法詳解
    發(fā)表于 06-06 17:50 ?0次下載

    基于Python實(shí)現(xiàn)隨機(jī)森林算法

    機(jī)器學(xué)習(xí)算法是數(shù)據(jù)挖掘、數(shù)據(jù)能力分析和數(shù)學(xué)建模必不可少的一部分,而隨機(jī)森林算法和決策樹(shù)算法是其中較為常用的兩種算法,本文將會(huì)對(duì)隨機(jī)森林算法
    的頭像 發(fā)表于 09-21 11:17 ?1030次閱讀
    基于<b class='flag-5'>Python</b><b class='flag-5'>實(shí)現(xiàn)</b>隨機(jī)森林<b class='flag-5'>算法</b>