球の体積について
半径rの球の体積は、4πr3/3 ですね。導出は、また回を改めてやってみましょう。半径1とすると、4π/3 になります。
半径1の球の式は
x2+y2=1
でした。球は立体なので、x、y、z軸が必要になり、
x2+y2+z2=1
になります。乱数を使って体積を求める場合は、
一辺が2の立方体と、それに内接する球(半径1)を考えます。
一辺が2の立方体の中に乱数をn個プロットする。
プロットした点を(a,b,c)としよう。a2+b2+c2<1が成立したプロット数をカウントする。z個としよう。
立方体の体積:球の体積=n:z
なので、
(球の体積)×z =(立方体の体積)×n
が近似的に成り立ちます。これから
(球の体積)=(立方体の体積)×n / z
として求めることができます。
pythonで計算してみよう
さっそくpythonで計算させてみましょう。
import random total=10000 en=0 for i in range(0,total,1): a=random.uniform(-1,1) b=random.uniform(-1,1) c=random.uniform(-1,1) if a*a+b*b+c*c<1: en=en+1 en_taiseki=8.0*en/total print(str(en_menseki))
【プログラムを見てみよう】
a=random.uniform(-1,1)
で、[-1,1]の範囲の乱数を発生させます。これをa,b,cと3っつ発生させて、それぞれx、y、zの値とします。
if a*a+b*b+c*c<1:
en=en+1
で球体内部にプロットされた数をカウントします。
最後に
en_taiseki=8.0*en/total
で体積を計算します。1辺が2の立方体の体積は8であることに注意しておきます。
結果は、
4.2016
となりました。理論値は
4π/3=4.18
ですので、近い値がでました。もっと近い値を出したいときは、totalの値を増やして、プロット数を増やします。
ちょっと微分に寄り道
球の体積と表面積には、
体積の微分=表面積
という関係があります。ちょっと微分を思いだしながら計算してみましょう。
球の体積をV(r)とおきます。(Vはrの関数という意味。rは球の半径です)
V(r)=4πr3/3
です.
V(r)の微分は、
( V(r+h)-V(r) ) / h
を計算して、hを0に近づければよかったです。
まず、V(r+h)-V(r) を計算してみましょう。
V(r+h)-V(r)=4π(r+h)3/3 – 4πr3/3
=(4π/3)×((r+h)3 -r3)
=(4π/3)×(r3+3r2h+3rh2+h3 -r3)
=(4π/3)×(3r2h+3rh2+h3)
なので、全体をhで割って、
( V(r+h)-V(r) ) / h = (4π/3)×(3r2+3rh+h2)
hを0に近づけると、(hがかかっている項は0とみなします)
(4π/3)×(3r2 )= 4πr2
となり、表面積と同じになります。
さらに学習したい方には
python初心者マークの方は
Pythonの絵本 Pythonを楽しく学ぶ9つの扉 [ 株式会社アンク ]
他の言語もかじりました系の方は
コメント