python求圆柱体的体积_漫谈超球体的体积公式
現實生活中,我們只要掌握圓的周長和面積公式,了解球的表面積和體積公式就夠用了,沒有什么可以深究的。本篇將帶你走進高維度球的表面積和體積公式[1]。
我們生活在三維空間,對更高維度的空間難以構想。笛卡爾說:我思故我在。借助一點點想象力,我們來推導一下n維球的體積公式。
以下都假設球的半徑為r,表面積為S,體積為V。球心為坐標原點O,具有n個維度的點X坐標為
,球內任意一點X,都滿足距離條件 。 對于向量空間,距離測度分多種:
1范式 曼哈頓距離(Manhattan distance)
2范式 歐幾里德距離(Euclidean distance) ,
n范式
范式 切比雪夫距離( Chebyshev distance) 。超立方體
無窮大范式最簡單,我們先作討論。所有維度上的坐標的絕對值不超過r,這樣的形狀是一個邊長為2r的超立方體。超(hyper,不是super)是一個泛化的概念,用以延伸到所有的維度上。
超立方體的各個軸都是正交的,所以體積
上的積分等于在各個軸上的長度的乘積,即 。每個軸都有左右兩個超平面限定,于是n維體有2n個面。在向高維擴展時,n維球的“體”就會淪落為n+1維球的“面”。我們有
,然后連同上面的式子,我們得到 ??梢詫χ叫魏驼襟w檢查一下,是符合的。對于一維情況,“體”就是線長 無疑。但是根據公式,“面” ,與半徑無關,沒有量綱。有點奇怪,相當于零維空間點的左右兩個面?超錐體
在曼哈頓距離下,
構成什么形狀呢?可以從低維度入手。一維情況下是一條直線,二維情況下是一個圍住 的正四邊形,或者傾斜的正方體。三維情況下是正八面體,與各軸的交點是 。同理,n維情況下的交點是構成超多面體,每個軸上有左右兩個交點,每個軸上選一個交點,張成一個超平面。僅考慮正半軸,則形狀分別是三角形,三角錐,四角錐,……超角錐。超角錐的體積公式是 [2],注意超角錐的體積對二維(三角形)而言是面積,對三維(三角錐)而言是體積。再忘掉正半軸,一維有二儀,二維有四象,三維有八卦,超多面體則有 個超角錐,每個超角錐的體積為 ,于是體積公式就是 。超球體
最后,我們來看一下常用的歐幾里德距離——平方和后再開方。
先回憶一下公式:
圓的周長、面積公式
球的表面積、體積公式
根據上面的結論,一維球的“體”是二維球的“面”,對于一維球而言,其體積就是直線長度(類比二維球,即圓的周長), 。
關于圓的公式都涉及到 ,結合上面超體的結論,再從量綱上分析,我們可以先大膽地推測 ,其中 C, K為待求的常數。
我們可以選取笛卡爾坐標系或極坐標系,笛卡爾坐標系下的式子比較繁瑣。
轉化成極坐標系,就是
從一個空間映射到另一個空間,或者從一個坐標系變換到另一個坐標系,需要乘以雅可比矩陣( Jacobi matrix )。
球是中心對稱的,由n維球
基于被積函數是偶函數,縮小積分范圍為
然后令
,則 ,換元得整理一下
積分是Beta函數形式,Beta函數的定義為
于是,
Beta函數與Gamma函數存在關系
Gamma函數的定義
,性質到這里就是常見的一類積分了,同濟大學高等數學教材有講過高斯分布。平方后轉換成平面直角坐標系二重積分,然后轉換成極坐標系求解,用這樣巧妙的方法得到
帶入常數 得
通過一系列的迭代,Gamma函數分子分母相消,
帶入
和 得 。很顯然有
。三角函數積分
由于 是相對x而言是常量,可以移到積分式子外面去。加上被積的函數是偶函數,我們有 。
換元,設 ,則 ;
你也可以 ,則 。
好了,這一節的主角登場了。求積分 或者 。
n取1或2時容易求解,這引導著我們用分部積分法(integration by parts ) 達到降次的效果。
帶入 ,然后化簡
得到遞推公式
。接著,限定下上限分別為0和
,在邊界,因為 和 總有一個為0,導致第一項的結果總是為0,于是得到更簡單的遞推形式 ,然后分奇數、偶數迭代求解。
如何體面
球可以由半徑逐漸遞增的殼來填充,類似俄羅斯套娃。當填充的殼的厚度趨近于0時,我們就得到球的體積。由于球、球面的各向同性,球面上任何一個微元(facet)都可以近似看成平面,其體積為
,球面的體積為 ,積分得 ,反之 。對n維球的體積求導得n維球的表面積,這樣也解釋了對圓面積 求導得圓周長 ,對球體積 求導得球表面積 。通過求導,我們很體面地從“體”計算出“面”。(no pun intended)
其實,體積與面積之間還存在這樣一個比例關系
公式細究
Γ函數有很多的性質,是符合整數點階乘運算的最佳連續函數。
當
當 為奇數時,令 ,則 。
當
時, ,這個系數很是熟悉, 根據 Taylor 級數展開式 湊一下,有 ???#xff01;我們就這樣構造到了一個神奇的數字 。半徑取1的所有偶數維度球的體積之和為。是個超越數(Transcendental Number)。有了公式之后,任意維度的體積[3]就可以輕松計算了。
對于n維單位球,我們用matplotlib畫一下體積V關于維度n的函數圖。
#!/usr/bin/env python3 import matplotlib import numpy as np import scipyimport matplotlib.pyplot as pltfrom scipy.special import gamma# For unit sphere of dimension n, the volume is # V_n = frac {pi^{frac n 2}} {Gamma(frac n 2 + 1)} t0 = -5.0 t1 = 20.0 t = np.arange(t0, t1, 0.1) V = np.pi ** (t / 2.0) / gamma(t / 2.0 + 1.0)n = np.arange(t0, t1, 1.0) V_n = np.pi ** (n / 2.0) / gamma(n / 2.0 + 1.0)figure, ax = plt.subplots() ax.plot(t, V) ax.plot(n, V_n, color='green', marker='o', linestyle='')ax.set_xlabel('n (dimensionality)') ax.set_ylabel('C_n m^n') ax.set_title('volume of n dimensional unit sphere') ax.grid()figure.savefig("volume.png") plt.show()需要安裝numpy, scipy, matplotlib這三個Python庫,沒安裝的可以安裝一下,以后科學計算和作圖用得到的??刂婆_下輸入命令 pip3 install numpy, scipy, matplotlib。代碼運行無誤后,得到圖:
上面順帶也畫出了負維空間的情況。從正整數維度到分數維度,再到負數維度,一直擴充到了實數范圍。從圖中看到,對于單位球,五維空間的體積最大。五維空間是什么概念?不清楚。克里斯托弗·諾蘭是一個商業和藝術結合最好的導演,他在電影《星際穿越》中向我們描述了一個五維空間的存在。
固定半徑r,我們可以看到,隨著n的增長,分母以越來越大的正整數增加,分子以系數
維度越高,越靠近坐標軸。很形象的一個比喻就是海膽,核越來越小,刺突越來越長,也越來越尖。想看動畫效果?可以觀察
在平面直角坐標新中,p從無窮大到0,圖形的變化。順便,維度災難[4]也了解一下。參考
總結
以上是生活随笔為你收集整理的python求圆柱体的体积_漫谈超球体的体积公式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梁单元分析matlab,[FEM][有限
- 下一篇: 达梦数据库导入oracle数据_达梦数据