十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
用蒙特卡洛方法計(jì)算定積分
創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、肇東網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為肇東等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
計(jì)算定積分
利用蒙特卡洛計(jì)算方法,核心步驟是求取隨機(jī)的 g(X1),………,g(Xn),n∈[a,b],由數(shù)學(xué)期望和大數(shù)定理可以近似計(jì)算定積分,公式為
原函數(shù):
導(dǎo)函數(shù):
計(jì)算導(dǎo)函數(shù)在[10,15]上的定積分;
Python
用蒙特卡洛方法計(jì)算的定積分:
直接用原函數(shù)計(jì)算的定積分:
偏差程度為:
需要加載一下math庫(kù),math.pi是π,r是球半徑。
體積:
4/3?*?math.pi?*?r**3
表面積:
4?*?math.pi?*?r**2
1、print()函數(shù):打印字符串;
2、raw_input()函數(shù):從用戶鍵盤捕獲字符;
3、len()函數(shù):計(jì)算字符長(zhǎng)度;
4、format()函數(shù):實(shí)現(xiàn)格式化輸出;
5、type()函數(shù):查詢對(duì)象的類型;
6、int()函數(shù)、float()函數(shù)、str()函數(shù)等:類型的轉(zhuǎn)化函數(shù);
7、id()函數(shù):獲取對(duì)象的內(nèi)存地址;
8、help()函數(shù):Python的幫助函數(shù);
9、s.islower()函數(shù):判斷字符小寫;
10、s.sppace()函數(shù):判斷是否為空格;
11、str.replace()函數(shù):替換字符;
12、import()函數(shù):引進(jìn)庫(kù);
13、math.sin()函數(shù):sin()函數(shù);
14、math.pow()函數(shù):計(jì)算次方函數(shù);
15、os.getcwd()函數(shù):獲取當(dāng)前工作目錄;
16、listdir()函數(shù):顯示當(dāng)前目錄下的文件;
17、time.sleep()函數(shù):停止一段時(shí)間;
18、random.randint()函數(shù):產(chǎn)生隨機(jī)數(shù);
19、range()函數(shù):返回一個(gè)列表,打印從1到100;
20、file.read()函數(shù):讀取文件返回字符串;
21、file.readlines()函數(shù):讀取文件返回列表;
22、file.readline()函數(shù):讀取一行文件并返回字符串;
23、split()函數(shù):用什么來(lái)間隔字符串;
24、isalnum()函數(shù):判斷是否為有效數(shù)字或字符;
25、isalpha()函數(shù):判斷是否全為字符;
26、isdigit()函數(shù):判斷是否全為數(shù)字;
27、 lower()函數(shù):將數(shù)據(jù)改成小寫;
28、upper()函數(shù):將數(shù)據(jù)改成大寫;
29、startswith(s)函數(shù):判斷字符串是否以s開始的;
30、endwith(s)函數(shù):判斷字符串是否以s結(jié)尾的;
31、file.write()函數(shù):寫入函數(shù);
32、file.writeline()函數(shù):寫入文件;
33、abs()函數(shù):得到某數(shù)的絕對(duì)值;
34、file.sort()函數(shù):對(duì)書數(shù)據(jù)排序;
35、tuple()函數(shù):創(chuàng)建一個(gè)元組;
36、find()函數(shù):查找 返回的是索引;
37、dict()函數(shù):創(chuàng)建字典;
38、clear()函數(shù):清楚字典中的所有項(xiàng);
39、copy()函數(shù):復(fù)制一個(gè)字典,會(huì)修改所有的字典;
40、 get()函數(shù):查詢字典中的元素。
…………
對(duì)于氣象繪圖來(lái)講,第一步是對(duì)數(shù)據(jù)的處理,通過(guò)各類公式,或者統(tǒng)計(jì)方法將原始數(shù)據(jù)處理為目標(biāo)數(shù)據(jù)。
按照氣象統(tǒng)計(jì)課程的內(nèi)容,我給出了一些常用到的統(tǒng)計(jì)方法的對(duì)應(yīng)函數(shù):
在計(jì)算氣候態(tài),區(qū)域平均時(shí)均要使用到求均值函數(shù),對(duì)應(yīng)NCL中的dim_average函數(shù),在python中通常使用np.mean()函數(shù)
numpy.mean(a, axis, dtype)
假設(shè)a為[time,lat,lon]的數(shù)據(jù),那么
需要特別注意的是,氣象數(shù)據(jù)中常有缺測(cè),在NCL中,使用求均值函數(shù)會(huì)自動(dòng)略過(guò),而在python中,當(dāng)任意一數(shù)與缺測(cè)(np.nan)計(jì)算的結(jié)果均為np.nan,比如求[1,2,3,4,np.nan]的平均值,結(jié)果為np.nan
因此,當(dāng)數(shù)據(jù)存在缺測(cè)數(shù)據(jù)時(shí),通常使用np.nanmean()函數(shù),用法同上,此時(shí)[1,2,3,4,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的,求某數(shù)組最大最小值時(shí)也有np.nanmax(), np.nanmin()函數(shù)來(lái)補(bǔ)充np.max(), np.min()的不足。
其他很多np的計(jì)算函數(shù)也可以通過(guò)在前邊加‘nan’來(lái)使用。
另外,
也可以直接將a中缺失值全部填充為0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求數(shù)據(jù)標(biāo)準(zhǔn)化的函數(shù)dim_standardize()
其實(shí)也就是一行的事,根據(jù)需要指定維度即可。
皮爾遜相關(guān)系數(shù):
相關(guān)可以說(shuō)是氣象科研中最常用的方法之一了,numpy函數(shù)中的np.corrcoef(x, y)就可以實(shí)現(xiàn)相關(guān)計(jì)算。但是在這里我推薦scipy.stats中的函數(shù)來(lái)計(jì)算相關(guān)系數(shù):
這個(gè)函數(shù)缺點(diǎn)和有點(diǎn)都很明顯,優(yōu)點(diǎn)是可以直接返回相關(guān)系數(shù)R及其P值,這避免了我們進(jìn)一步計(jì)算置信度。而缺點(diǎn)則是該函數(shù)只支持兩個(gè)一維數(shù)組的計(jì)算,也就是說(shuō)當(dāng)我們需要計(jì)算一個(gè)場(chǎng)和一個(gè)序列的相關(guān)時(shí),我們需要循環(huán)來(lái)實(shí)現(xiàn)。
其中a[time,lat,lon],b[time]
(NCL中為regcoef()函數(shù))
同樣推薦Scipy庫(kù)中的stats.linregress(x,y)函數(shù):
slop: 回歸斜率
intercept:回歸截距
r_value: 相關(guān)系數(shù)
p_value: P值
std_err: 估計(jì)標(biāo)準(zhǔn)誤差
直接可以輸出P值,同樣省去了做置信度檢驗(yàn)的過(guò)程,遺憾的是仍需同相關(guān)系數(shù)一樣循環(huán)計(jì)算。
球諧函數(shù)在圖形學(xué)光照計(jì)算等領(lǐng)域有著重要應(yīng)用,因?yàn)槟壳霸趯?shí)際工作中接觸較少,所以對(duì)其的理解僅僅停留在表面,本著越是基礎(chǔ)的東西,其重要性越高的想法,特此開篇文章對(duì)其背后的數(shù)學(xué)理論進(jìn)行拆解,拆解過(guò)程參考了大量其他同學(xué)的工作,相應(yīng)鏈接在文末的參考文獻(xiàn)中有列出,引用過(guò)程中如有表述不清晰的內(nèi)容,可以通過(guò)原文輔助閱讀。
調(diào)和函數(shù)指的是一種特殊的二階連續(xù)可導(dǎo)函數(shù)(簡(jiǎn)稱C2,在某個(gè)定義域存在二階導(dǎo)數(shù),且二階導(dǎo)數(shù)連續(xù)),數(shù)學(xué)符號(hào)用 表達(dá),其中 是 (表示n維實(shí)數(shù)域)的一個(gè)開子集(相當(dāng)于一維數(shù)據(jù)空間中的開區(qū)間),其特殊在于需要滿足拉普拉斯方程(下面有介紹),用(笛卡爾坐標(biāo)系下)數(shù)學(xué)表達(dá)式來(lái)描述的話,就是對(duì)于任意 ,需要滿足如下的二階偏微分方程:
這里來(lái)回顧一下微分方程的相關(guān)知識(shí),單個(gè)變量下,也就是一元變量情況下,函數(shù)與函數(shù)各階導(dǎo)數(shù)組成的微分方程叫做常微分方程:
多元函數(shù)而言,函數(shù)以及函數(shù)對(duì)各個(gè)自變量的各階偏導(dǎo)數(shù)組成的微分方程叫做偏微分方程:
這個(gè)公式也經(jīng)常以如下的形式出現(xiàn)( 稱為拉普拉斯算子, 稱為向量微分算子,也就是nabla算子):
其中 叫做拉普拉斯算子,光看定義太抽象,我們來(lái)舉個(gè)例子吧,下面兩個(gè)函數(shù)都是二元的調(diào)和函數(shù):
拉普拉斯方程也被稱為調(diào)和方程、位勢(shì)方程,這是一種偏微分方程,因?yàn)槠淇梢杂脛?shì)函數(shù)的形式來(lái)描述電磁場(chǎng)、引力場(chǎng)、流場(chǎng)(統(tǒng)稱為保守場(chǎng)或者有勢(shì)場(chǎng))的性質(zhì)而被廣泛應(yīng)用。
笛卡爾坐標(biāo)系下的表述形式前面已經(jīng)寫過(guò)了,下面給出球面坐標(biāo)系下的拉普拉斯方程表述形式:
這個(gè)方程也常用如下的簡(jiǎn)化形式來(lái)代替:
或者
其中div指的是向量場(chǎng)(指的是空間中的每一點(diǎn)都有一個(gè)對(duì)應(yīng)的帶長(zhǎng)度的向量)的散度(divergence),grad表示的是標(biāo)量場(chǎng)的梯度(gradient)。
散度是向量分析中常用的向量算子,用于實(shí)現(xiàn)向量場(chǎng)到標(biāo)量場(chǎng)的轉(zhuǎn)換映射,也就是說(shuō),經(jīng)過(guò)散度算子處理后,得到的是一個(gè)標(biāo)量場(chǎng)(每一點(diǎn)有一個(gè)不帶方向的數(shù)值)。以靜電場(chǎng)為例,空間中的電場(chǎng)強(qiáng)度是一個(gè)向量場(chǎng),電場(chǎng)線正出負(fù)歸,在正電荷附近,對(duì)應(yīng)的散度為正值,且電荷帶電量越大,散度越大,負(fù)電荷附近則反之,其散度為負(fù)值,且電荷帶電量越大,散度絕對(duì)值越大。更為通用的概括是,散度可以看成是向量場(chǎng)在某一點(diǎn)的通量密度,當(dāng)散度大于0的時(shí)候,就表示該點(diǎn)有流量留出,此時(shí)這一點(diǎn)可以被稱為源點(diǎn),當(dāng)散度小于0的時(shí)候,表示此點(diǎn)有流量流入,此時(shí)此點(diǎn)被稱為匯點(diǎn),散度為0,表示該點(diǎn)無(wú)流入也無(wú)流出,如果整個(gè)向量場(chǎng)的散度都是0,那么這個(gè)向量場(chǎng)可以稱為無(wú)源場(chǎng)。
對(duì)于某個(gè)向量場(chǎng) 而言,其散度可以通過(guò)如下公式求得:
梯度是對(duì)多元函數(shù)的導(dǎo)數(shù)的一種描述,單元函數(shù)(只有一個(gè)自變量)的導(dǎo)數(shù)是標(biāo)量值函數(shù),而多元(多個(gè)自變量)函數(shù)的導(dǎo)數(shù)則是一個(gè)向量值函數(shù),這里多元函數(shù)的導(dǎo)數(shù),我們也稱為多元函數(shù)的梯度,多元函數(shù)f在點(diǎn)P處的梯度指的是以f在P處的偏微分作為分量的向量,如一個(gè)三維空間函數(shù) ,其梯度函數(shù)可以用如下的形式來(lái)表述:
單元函數(shù)的導(dǎo)數(shù)對(duì)應(yīng)的是函數(shù)在某一點(diǎn)切線的斜率,對(duì)應(yīng)到梯度上,如果多元函數(shù)在某點(diǎn)P的梯度不為0的話,那么計(jì)算出來(lái)的梯度方向指的是這個(gè)函數(shù)在P點(diǎn)處增長(zhǎng)最快的方向(超平面的切線),而梯度的長(zhǎng)度則是函數(shù)在此點(diǎn)處的增長(zhǎng)率(超平面的斜率)。
舉個(gè)例子,如果某個(gè)房間內(nèi)的溫度用一個(gè)函數(shù)來(lái)表示,那么這個(gè)函數(shù)在三維空間中的梯度就對(duì)應(yīng)于房間中某點(diǎn)處溫度上升最快的方向,而其長(zhǎng)度則對(duì)應(yīng)于溫度增長(zhǎng)率。
可以看到,一個(gè)多元函數(shù)的標(biāo)量場(chǎng),經(jīng)過(guò)梯度轉(zhuǎn)化后,得到的是一個(gè)向量場(chǎng)。
從調(diào)和函數(shù)的定義我們可以看到,所謂的調(diào)和函數(shù),實(shí)際上就是拉普拉斯方程的解,而我們?nèi)粘Kf(shuō)的球諧函數(shù)(Spherical Harmonics Function)實(shí)際上就是拉普拉斯方程在球坐標(biāo)系空間下的解。
拉普拉斯方程是一個(gè)偏微分方程,而解偏微分方程常用的策略是分離變量法,即將偏微分方程分解成幾個(gè)常微分方程進(jìn)行求解,下面我們通過(guò)將半徑跟角度進(jìn)行分離來(lái)進(jìn)行求解。
設(shè) ,將之代入前面的拉普拉斯方程,可以得到:
上面公式乘上 之后可以得到:
對(duì)于上面公式中后面的等式,我們繼續(xù)使用分離變量法,令(這里是假設(shè)Y具有可以分離的形式,當(dāng)然這個(gè)假設(shè)不是必然成立的,只是為了簡(jiǎn)化計(jì)算而給出的,只有一些特殊的函數(shù)才具有這種假設(shè)的可分離的形式) ,代入前面公式可以得到:
簡(jiǎn)化后,令左右兩邊均等于 ,可以得到:
一個(gè)先驗(yàn)知識(shí)是m是一個(gè)復(fù)數(shù)常量(怎么得到的?),且由于 是一個(gè)周期函數(shù),其周期可以整除 ,因此m就會(huì)是一個(gè)整數(shù),而 則是復(fù)數(shù)指數(shù) 的線性組合,Y的常規(guī)解出現(xiàn)在極點(diǎn),也就是 的時(shí)候,而在上面的第二個(gè)方程中求解 時(shí)的常規(guī)狀態(tài)出現(xiàn)在Sturm-Liouville problem的邊界點(diǎn)上,在這個(gè)邊界點(diǎn)中會(huì)將 ,其中l(wèi)是非負(fù)整數(shù),且 ,此外,將上面公式中的 用t來(lái)替代,就能夠得到勒讓德公式(Legendre equation),而勒讓德公式的解就是伴隨勒讓德多項(xiàng)式 的倍數(shù)。
對(duì)于滿足前面假設(shè)的Y,對(duì)于給定的 ,我們總共有 個(gè)獨(dú)立解,這些角度上的解可以表示為三角函數(shù)的乘積,這里可以用復(fù)數(shù)指數(shù)與伴隨勒讓德多項(xiàng)式來(lái)表示:
其中這個(gè)解需要滿足:
上述公式中的 就被稱為一個(gè)m階(order)l度(degree)的球諧函數(shù), 就是一個(gè)伴隨勒讓德多項(xiàng)式,N是一個(gè)歸一化的常量, 則代表著球上的經(jīng)緯度
所有的球諧函數(shù)組成了一組正交基,所謂的正交基指的是,兩兩基函數(shù)相乘的積分只有當(dāng)兩個(gè)基函數(shù)是同一個(gè)基函數(shù)的情況下結(jié)果為1,否則為0。
上圖給出了不同的SH基函數(shù)的幾何形狀展示,這個(gè)圖是通過(guò)以方向?yàn)樽宰兞浚角蛐牡木嚯x作為因變量繪制的。
而其他函數(shù)都可以通過(guò)使用不同系數(shù)來(lái)對(duì)SH基函數(shù)進(jìn)行線性組合來(lái)實(shí)現(xiàn)近似模擬,這個(gè)過(guò)程有點(diǎn)像是周期函數(shù)的傅里葉展開。
未完待續(xù)……
[1] Rendering-球諧光照推導(dǎo)及應(yīng)用
[2] 調(diào)和函數(shù)
[3] 拉普拉斯方程
[4] 散度
[5] 梯度
[6] Spherical harmonics
[7]. Laplace's equation
向量球諧函數(shù)(Vector spherical harmonics)是應(yīng)用于球坐標(biāo)系的拉普拉斯方程式的向量解,是球諧函數(shù)的向量衍伸形式。在必須計(jì)算向量場(chǎng)的電動(dòng)力學(xué)等領(lǐng)域中被廣泛應(yīng)用。
定義
在球坐標(biāo)系下,拉普拉斯算符作用在一三維向量場(chǎng)上可以寫為
利用分離變數(shù)法可以將此一方程式的解分解為一系列本征函數(shù)的線性組合
其中的徑向解與標(biāo)量球諧函數(shù)相同,而為一與角度相關(guān)的向量解,也就是向量球諧函數(shù)。
向量球諧函數(shù)依用途有很多定義方式。這邊我們依照 Barrera 等人的定義,以對(duì)球諧函數(shù)Y?m(θ, φ)為基礎(chǔ),將三個(gè)向量球諧函數(shù)表示為
這邊是對(duì)應(yīng)球座標(biāo) (r, θ, φ) 的向量,而則為其單位向量。
主要特性
依照上述 Barrera 的定義,向量球諧函數(shù)有以下特性:
對(duì)稱性
與球諧函數(shù)相同,向量球諧函數(shù)有對(duì)稱性
星號(hào) * 代表共軛函數(shù)。
正交性
三種向量球諧函數(shù)彼此兩兩正交
另外同種類的球諧函數(shù)的內(nèi)積為:
標(biāo)量場(chǎng)的梯度
對(duì)一個(gè)標(biāo)量場(chǎng),若其多極展開可表示為:
則其梯度可以向量球諧函數(shù)表示為:
散度
三種向量球諧函數(shù)之散度分別為:
其中為球諧函數(shù)之徑向分布,為球諧函數(shù)。