步驟1:了解算法第1部分:定積分及其使用
我假設(shè)您對(duì)基本演算的背景了解一點(diǎn)積分。積分很重要,因?yàn)樗鼈兪鼓梢詫⒅禂?shù)組乘以 infinitesimal 長(zhǎng)度求和;這在金融,數(shù)論,物理,化學(xué)以及許多其他領(lǐng)域中很有用。但是,該程序僅允許您計(jì)算有限間隔內(nèi)曲線下方的面積,換句話說(shuō),它不會(huì)評(píng)估反導(dǎo)數(shù)-要使用更強(qiáng)大的算法,那。如果您需要在針對(duì)其他對(duì)象指定的較大程序中求值定積分,或者要檢查答案是否需要手工完成,則此算法很有用。
基本定積分表示函數(shù)定義的曲線下的面積,例如F(X)。對(duì)于確定的積分,我們求兩點(diǎn)之間的面積(分別標(biāo)記為a和b)。在圖片中,綠松石區(qū)域是我所指的區(qū)域,并且確定該區(qū)域的公式也顯示在該區(qū)域中。圖片中顯示的功能是任意的。
步驟2:了解算法第2部分:數(shù)值逼近
計(jì)算機(jī)需要大量的指令來(lái)計(jì)算該面積在可用于任何功能的任意函數(shù)下,因此您可能熟悉的分析方法沒(méi)有用,因?yàn)樗鼈兲厥饬恕R环N計(jì)算機(jī)可以實(shí)際處理的近似計(jì)算積分的方法是,用感興趣的區(qū)域填充用戶定義的寬度和高度可變的矩形,然后對(duì)所有矩形區(qū)域求和,從而完成計(jì)算。矩形的剛性將使某些總面積保持不變,因此為什么將其視為近似值;但是,您可以在邊界(a和b)之間填充的矩形越多,由于未觸摸的區(qū)域變得稀疏,所以近似值越準(zhǔn)確。由于計(jì)算機(jī)將執(zhí)行此任務(wù),因此可以將所需區(qū)域中的矩形數(shù)量設(shè)置為非常大的數(shù)量,從而使逼近非常精確。在支持圖片中,假設(shè)指定區(qū)域中的每個(gè)矩形都具有相等的寬度。我盡了最大努力使它們?cè)贛icrosoft Paint中具有相等的寬度,但沒(méi)有做得最好。
步驟3:了解算法第3部分:中點(diǎn)規(guī)則
此規(guī)則指定如何在矩形中制作和使用矩形近似值。 “ N個(gè)”矩形中的每個(gè)矩形必須具有相等的寬度Δx,但每個(gè)第n個(gè)矩形不能完全相同:變化因子是高度,它隨在某個(gè)點(diǎn)求值的函數(shù)而變化。中點(diǎn)規(guī)則之所以得名,是因?yàn)槟鷮⒚總€(gè)矩形的高度評(píng)估為f(x_n),其中“ x_n”是每個(gè)矩形的相應(yīng)中心點(diǎn),分別位于矩形的左側(cè)或右側(cè)。使用中點(diǎn)就像實(shí)現(xiàn)平均值,比起使用右或左時(shí),將使近似值更準(zhǔn)確。此步驟的輔助圖片總結(jié)了如何在數(shù)學(xué)上定義中點(diǎn)規(guī)則。
第4步:創(chuàng)建程序第1部分:下載Python編譯器/編輯器
現(xiàn)在,您了解了需要實(shí)現(xiàn)的算法,即讓計(jì)算機(jī)為您執(zhí)行計(jì)算的問(wèn)題。告訴計(jì)算機(jī)該怎么做的第一步是獲取執(zhí)行此操作的工具。該算法可以用任何語(yǔ)言編碼。為簡(jiǎn)單起見,該程序?qū)⑹褂肞ython語(yǔ)言進(jìn)行編碼。要命令您的計(jì)算機(jī)執(zhí)行Python操作,您將需要一個(gè)編輯器,該編輯器以該語(yǔ)言編寫指令,然后將其編譯為計(jì)算機(jī)可以理解的機(jī)器語(yǔ)言,從而可以執(zhí)行您要執(zhí)行的任務(wù)。在當(dāng)今時(shí)代,通常將編輯器和編譯器集成在一起,但是并不總是如此。您可以使用任何您喜歡的編輯器/編譯器,但我將向您展示如何獲取我個(gè)人最喜歡的Python:Canopy。如果您已經(jīng)具有編輯器/編譯器,則可以跳過(guò)這些步驟。
轉(zhuǎn)到https://www.enthought.com/product/canopy/
單擊下載機(jī)蓋
單擊與您的操作系統(tǒng)相對(duì)應(yīng)的下載按鈕
下載將自動(dòng)開始。
啟動(dòng)后,請(qǐng)按照滴注說(shuō)明進(jìn)行操作執(zhí)行文件
運(yùn)行程序
從程序主菜單中單擊“編輯器”
在屏幕中央單擊“創(chuàng)建新文件”
從這一點(diǎn)開始,您應(yīng)該看到一個(gè)空白的白色窗口,其光標(biāo)類似于基本的文字處理文檔?,F(xiàn)在您可以開始編碼用于求解定積分的數(shù)值積分算法了。后續(xù)步驟將提供您要復(fù)制的代碼片段,并說(shuō)明該代碼片段對(duì)整個(gè)程序的作用。
步驟5:創(chuàng)建程序第2部分:導(dǎo)入函數(shù)和定義變量
將代碼復(fù)制到圖片中。
對(duì)于您可能會(huì)發(fā)現(xiàn)自己進(jìn)行編碼的任何程序,都會(huì)有變量。變量是給將要操作并且可以更改的值的名稱。在大多數(shù)編程語(yǔ)言(如果不是全部)中,您必須先初始化變量,然后程序才能對(duì)其進(jìn)行更改。在此程序中,我將變量命名為“ N”,“ a”和“ b”。這些值分別表示迭代數(shù)(矩形的AKA數(shù)),下邊界和上邊界。您可以隨意命名這些名稱,但要匹配“理解算法第3部分:中點(diǎn)規(guī)則”中給出的公式,最好使其保持不變。請(qǐng)注意,它們不僅設(shè)置為特定值。這是因?yàn)閷⑺鼈冏鳛檩斎?,以便在運(yùn)行程序時(shí),程序的用戶可以定義值。輸入命令后,引號(hào)中的文字會(huì)在您運(yùn)行程序時(shí)顯示,告訴您要鍵入哪種類型的值。您還將注意到,在輸入名稱之前使用了“ int”和“ float”。這些術(shù)語(yǔ)告訴計(jì)算機(jī)此值將是什么類型的變量。 “ int”是整數(shù),“ float”是浮點(diǎn)值(即十進(jìn)制)。應(yīng)該清楚為什么要這樣指定它們。
在“?!敝蟪霈F(xiàn)的任何文本都是注釋,它使程序員可以以人性化的方式遵循代碼;我已經(jīng)在您的代碼中做了一些注釋,您將復(fù)制這些注釋,但是可以隨意添加任何對(duì)您有幫助的注釋。該程序?qū)⒉粫?huì)讀取任何帶有“?!弊鳛槊畹膬?nèi)容。
讀取“ from math import *”的代碼部分告訴程序?qū)胍幌盗锌梢允褂玫臄?shù)學(xué)函數(shù)無(wú)需自己編寫程序。 “ *”僅表示“全部”。將這部分代碼讀為:從數(shù)學(xué)庫(kù)中導(dǎo)入所有函數(shù)。這使您可以使用數(shù)學(xué)函數(shù),例如正弦,余弦,對(duì)數(shù),exp等。這些函數(shù)可以數(shù)學(xué)方式集成在代碼中。
第6步:創(chuàng)建程序第3部分:創(chuàng)建集成函數(shù)
將代碼復(fù)制到前一個(gè)下方的圖片中碼。
警告:本部分內(nèi)容繁瑣,我想清除一些可能引起混淆的內(nèi)容。在談?wù)?a href="http://www.www27dydycom.cn/v/tag/1315/" target="_blank">編程時(shí),“功能”一詞會(huì)彈出很多。當(dāng)您談?wù)摂?shù)學(xué)時(shí),這個(gè)詞也會(huì)彈出很多。因此,從這一點(diǎn)開始,當(dāng)我在編程意義上談?wù)撘粋€(gè)函數(shù)時(shí),我將寫“ Python函數(shù)”,而當(dāng)我談?wù)摂?shù)學(xué)函數(shù)時(shí),我將說(shuō)“數(shù)學(xué)函數(shù)”。在某些時(shí)候,我們將使用Python函數(shù)作為所討論數(shù)學(xué)函數(shù)的表示形式。
下一段代碼是程序的核心。在這里,定義了一個(gè)Python函數(shù),該函數(shù)使用中點(diǎn)規(guī)則執(zhí)行數(shù)值積分算法。 “ def Integrate(N,a,b)”的讀法是:定義一個(gè)名為“ Integrate”的函數(shù),該函數(shù)接受變量“ N”,“ a”和“ b”,并返回曲線下方的面積(數(shù)學(xué)函數(shù))這也在“集成” Python函數(shù)中定義。您可以在進(jìn)行編碼時(shí)以任何方式調(diào)用此Python函數(shù),但是將其稱為集成是有意義的,因?yàn)樗_實(shí)集成了數(shù)學(xué)函數(shù)。
在這一點(diǎn)上,值得一提的是Python隔離代碼塊。代碼塊是執(zhí)行特定任務(wù)的整個(gè)部分。不同的編程語(yǔ)言將具有指定的方式來(lái)區(qū)分這些“塊”。對(duì)于Python,一個(gè)塊通過(guò)縮進(jìn)來(lái)區(qū)分:每個(gè)執(zhí)行任務(wù)的部分都有自己的縮進(jìn),并且其他縮進(jìn)塊中也可以有縮進(jìn)塊。這代表了任務(wù)中的任務(wù),并從根本上告訴了代碼執(zhí)行的順序。對(duì)于已定義的Python函數(shù)“集成”,該函數(shù)中的所有內(nèi)容都縮進(jìn)一個(gè)塊,從而區(qū)分將在該函數(shù)中執(zhí)行的任務(wù)。這個(gè)Python函數(shù)中的縮進(jìn)部分也執(zhí)行自己的任務(wù)。內(nèi)容如下:列出命令(任務(wù)),在命令后面加冒號(hào),并在其下方縮進(jìn)該命令的內(nèi)容。
在定義“集成” Python函數(shù)之后,您將立即定義另一個(gè)稱為f(x)的Python函數(shù)。這表示將要積分的數(shù)學(xué)函數(shù)。對(duì)于要集成的每個(gè)不同的數(shù)學(xué)函數(shù),您都必須轉(zhuǎn)到此程序行以對(duì)其進(jìn)行更改(與運(yùn)行程序時(shí)定義的變量不同)。每個(gè)Python函數(shù)都會(huì)有一個(gè)返回值,這就是當(dāng)您將其賦值時(shí)該函數(shù)返回的結(jié)果。在這種情況下,拋出的值是“ x”,而這個(gè)“ x”項(xiàng)將采用您拋出的值的值,它是一個(gè)臨時(shí)值。
接下來(lái),是一個(gè)for循環(huán)充當(dāng)本教程“理解算法”部分的公式中定義的求和。此求和需要更多幾個(gè)變量,其中一個(gè)將作為整個(gè)“ Integrate” Python函數(shù)的返回值。在for循環(huán)之前,我已將這些變量指定為“ value”和“ value2”。 for循環(huán)的任務(wù)是遍歷指定變量的值范圍,該變量可以在for-loop命令中方便地定義;在這種情況下,該變量為“ n”。發(fā)生迭代的范圍是1到N + 1。您應(yīng)該注意到,上述公式中定義的總和范圍僅從1到N。我們用這種方式進(jìn)行定義,因?yàn)镻ython語(yǔ)言會(huì)從0開始對(duì)每個(gè)迭代值進(jìn)行計(jì)數(shù),因此我們必須從本質(zhì)上轉(zhuǎn)移這些值的范圍以適應(yīng)我們的期望范圍。然后,for循環(huán)允許將所有矩形的高度加在一起,并將該值存儲(chǔ)到我稱為“值”的變量中。這在顯示為:value + = f(a +((n-(1/2))*((b-a)/N)))的代碼段中可以看到。
從那里開始,下一段代碼使用名為“ value2”的變量,然后將其分配為每個(gè)矩形的所有高度的總和乘以每個(gè)矩形的標(biāo)準(zhǔn)化寬度。是我們要在程序中顯示的最終答案,因此是“集成” Python函數(shù)的返回值。
第7步:創(chuàng)建程序第4部分:顯示答案
將代碼復(fù)制到先前代碼下方的圖片中。
現(xiàn)在,可以通過(guò)“集成” Python函數(shù)獲得答案了,我們希望能夠顯示它。這只是將用戶輸入的值(“ N”,“ a”和“ b”)放入“集成” Python函數(shù)并將其打印在屏幕上的問(wèn)題。該命令顯示在第21行,它實(shí)際上是完成該步驟所需的全部操作。第19和20行上的代碼僅用于“修飾”整個(gè)程序的輸出。 “ print(” 。..。..。..。..。..。..。..。..。..。..。..。..?!埃睂⒊绦虻妮斎氩糠峙c輸出部分分開,然后“ print (“這是您的答案:”),僅表示將在該行文本之后打印答案。
步驟8:運(yùn)行程序第1部分:按原樣運(yùn)行程序
如果您不使用Canopy,則您甚至可能根本不需要執(zhí)行此步驟,并且運(yùn)行該程序可能需要不同的過(guò)程。在Canopy中,您必須先保存它,然后才能運(yùn)行該程序。 Python程序的文件類型是.py文件-它會(huì)自動(dòng)保存為。選擇要保存文件的位置,然后就可以運(yùn)行該程序了。
運(yùn)行程序:
在顯示文件名的工具欄上方,點(diǎn)擊看起來(lái)像“播放按鈕”的綠色按鈕(請(qǐng)參閱圖片) )。
然后該程序?qū)⒃诜Q為Canopy數(shù)據(jù)分析環(huán)境的編輯器的底部屏幕中運(yùn)行。假設(shè)您復(fù)制了我編寫的提示,則應(yīng)該在Canopy數(shù)據(jù)分析環(huán)境的底部看到提示:“輸入要累加的次數(shù)(更多=更準(zhǔn)確):?!?。 (請(qǐng)參閱圖片)
輸入一個(gè)值,表示要執(zhí)行多少次迭代,即10000(要推入您所在區(qū)域的矩形數(shù)),然后按Enter鍵。
將出現(xiàn)更多的提示,這些提示應(yīng)該是您在步驟5中編碼到程序中的熟悉的輸入提示。
應(yīng)該對(duì)積分求值,并且應(yīng)該顯示結(jié)果。
如果您如上圖所示對(duì)程序進(jìn)行編碼,則您剛剛積分了f(x) = x ^ 2在一定范圍內(nèi)。 x ^ 2的積分很容易手動(dòng)計(jì)算,因此您應(yīng)該檢查并確保程序?qū)κ謩?dòng)確定的正確分析值給出了非常接近的答案。當(dāng)我使用N = 10000,a = 0和b = 10的值運(yùn)行程序時(shí),得到的答案是333.33333249999964。正確的分析答案是333.333。這是非常準(zhǔn)確和快速的。實(shí)際上,您已經(jīng)在x軸上擠壓了10,000個(gè)介于0和10之間的矩形,并使用它們來(lái)近似計(jì)算曲線x ^ 2下的面積!
步驟9:運(yùn)行程序第2部分:集成其他數(shù)學(xué)函數(shù)
在上一步中,如果您一直在關(guān)注忠實(shí)地,您對(duì)f(x)= x ^ 2進(jìn)行了積分。這不是該程序可以集成的唯一數(shù)學(xué)函數(shù)。在第5步中,您已經(jīng)將Python函數(shù)的數(shù)學(xué)庫(kù)數(shù)組導(dǎo)入程序中。這使您可以使用可以集成的更復(fù)雜的數(shù)學(xué)函數(shù)。讓我們?cè)囈辉?。?dāng)然,您可以使用任何想要的函數(shù),但是我將通過(guò)集成一個(gè)特定的數(shù)學(xué)函數(shù)來(lái)進(jìn)一步證明該代碼的準(zhǔn)確性,該數(shù)學(xué)函數(shù)在一定范圍內(nèi)集成時(shí)會(huì)產(chǎn)生一個(gè)眾所周知的值。該函數(shù)為f(x)= Sin [x]。此數(shù)學(xué)函數(shù)顯示在第一張隨附的圖片中,從0到2π進(jìn)行繪制,并且感興趣的區(qū)域以綠松石陰影顯示。在此間隔中,正面積與負(fù)面積相等,因此,如果將總面積相加,則應(yīng)該為零。讓我們看看這是否真的發(fā)生:
將數(shù)學(xué)函數(shù)f(x)= Sin [x]放入程序中:
再次運(yùn)行程序之前,在注釋下“返回后#type您的函數(shù),”鍵入:sin(x)當(dāng)前位于x ** 2的位置。 (參考圖片)。
再次點(diǎn)擊綠色的播放按鈕運(yùn)行程序。
輸入10000作為N值(您希望求和多少次)。
輸入“ 0”作為下邊界。
將6.2832輸入上邊界(大約2π)。
看看您能得到什么價(jià)值。
當(dāng)我這樣做時(shí),最終得到的價(jià)值是1.079e-10:這等于.0000000001079,這實(shí)際上是接近于零,因此它看起來(lái)確實(shí)是準(zhǔn)確的,并且表明該算法足以處理負(fù)區(qū)域。
步驟10:運(yùn)行程序第3部分:擴(kuò)展程序
至此,您已經(jīng)完成:您已經(jīng)在其中編寫了一個(gè)有效的確定積分算法可以平穩(wěn)運(yùn)行并給出非常準(zhǔn)確答案的Python。但是,可以改進(jìn)此程序。我不是程序員,并且對(duì)Python的經(jīng)驗(yàn)很少。實(shí)際上,我不得不重新學(xué)習(xí)如何使用Python來(lái)完成本教程,但這應(yīng)該使您相信Python是一種易于學(xué)習(xí)的語(yǔ)言。我的觀點(diǎn)是,您可以通過(guò)提高程序效率來(lái)擴(kuò)展該程序,也許可以實(shí)現(xiàn)一些GUI,并使其更加用戶友好。
我對(duì)擴(kuò)展程序的想法:
實(shí)現(xiàn)一個(gè)圖形用戶界面,使您無(wú)需使用Canopy交互式數(shù)據(jù)分析環(huán)境即可運(yùn)行程序
對(duì)其進(jìn)行設(shè)置,以使無(wú)需集成要集成的數(shù)學(xué)函數(shù)程序,但可以在程序運(yùn)行后輸入(我最初是想這樣做,但無(wú)法弄清楚)。
定義一個(gè)“集成” Python函數(shù),以便將f(x)函數(shù)視為在其中定義了f(x)函數(shù)的地方。
這些是只是一些需要改進(jìn)的例子,但我保證還有很多其他可以改進(jìn)的地方。因此,我將這一步驟作為該程序存在缺陷的一個(gè)示例,并作為任何想進(jìn)一步改進(jìn)該程序的人的練習(xí)。
責(zé)任編輯:wv
-
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
83000 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86773
發(fā)布評(píng)論請(qǐng)先 登錄
零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?

有沒(méi)有什么方案能實(shí)現(xiàn)直接用matlab或python調(diào)用D4100_usb.dll?
Debye-Wolf積分計(jì)算器的用法
如何使用Python實(shí)現(xiàn)PID控制
用NE555制作點(diǎn)焊機(jī)
用AIC3254來(lái)作數(shù)字拾音器,遇到的幾個(gè)疑問(wèn)求解
請(qǐng)問(wèn)TAS5706如何用硬件控制I2C?
多個(gè)TLV320AIC3254用一路I2C總線對(duì)其配置可行嗎?
第二屆大會(huì)回顧第25期 | OpenHarmony上的Python設(shè)備應(yīng)用開發(fā)

評(píng)論