<style> .reveal, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 { font-family: -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Helvetica, Arial, PingFangTC-Light, "Microsoft JhengHei", "微軟正黑", sans-serif, "Apple Color Emoji" } </style> # 用Python算圓周率 $\pi$ 先想想你怎麼做,再教Python ## 前言 上次我們學了用Python解立方根,是不是很有趣呢? 今天,我們再來挑戰一個到現在數學家都還在挑戰的問題:求圓周率。 --- ## 怎麼求 $\pi$ 首先,我們一樣要先瞭解人工怎麼求出圓周率。 - 假設圓的半徑 = r,圓面積的$\frac{1}{4}$ = A,則 $\frac{\pi r^2}{4} = A \Rightarrow \pi=\frac{4A}{r^2}$ - 假設圓的半徑為1,則 $\pi=4A$。 - 所以,只要能算出$\frac{1}{4}$圓的面積,就能算出 $\pi$。 --- ## 用電腦如何計算面積 ![](https://i.imgur.com/5Jj3wku.png =200x200) - 設定方形型範圍為 $1\times1$,以(0,0)為圓心,半徑為1的圓,有$\frac{1}{4}$面積在方形範圍內。 - 用亂數產生很多X,Y範圍為0~1的點,看有多少落在圓形範圍內,計算其比例,就是圓形部份的面積。 --- ## 用Python來實作 ### 取亂數 - Python並沒有內建取亂數的指令,必須匯入模組 :::danger import random $\Leftarrow$ 匯入模組 random.uniform(0,1) $\Leftarrow$亂數範圍 random.randint(1,10) $\Leftarrow$整數亂數 ::: - 試試看下列程式,看看執行結果如何? ```python= import random for i in range(10): print (random.uniform(0,1)) ``` --- ### 亂數夠亂嗎? 雖然random是指隨機取出來的亂數,但是其實有些系統取出來的亂數並不怎麼亂。 所以我們首先要知道亂數是不是平均分佈,要怎麼做呢? 我們可以把取出來的亂數分成兩半,看看兩邊的數量是不是差不多。 ```python= import random count=[0,0] for i in range(10000): randresult=random.uniform(0,1) if (0<randresult<=0.5): count[0]=count[0]+1 else: count[1]=count[1]+1 print (count) ``` 當然你也可以切成10段來觀察,想想看,要怎麼切成10段? --- ### 檢查X,Y取亂數 在這個專題裡面,我們需要是一個點的X,Y座標,所以每次要取兩個亂數,分別為Xrandresult和Yrandresult。 在開始計算之前,我們一樣要先檢查取出來的亂數夠不夠亂。 ```python= import random count=[0,0] totle=int(input('輸入次數')) for i in range(totle): Xrandresult=random.uniform(0,1) Yrandresult=random.uniform(0,1) if (0<Xrandresult<=0.1 and 0<Yrandresult<=0.1): count[0]=count[0]+1 else (0<Xrandresult<=0.1 and 0.1<Yrandresult<=0.2): count[1]=count[1]+1 print (count[0]/totle,count[1]/totle) ``` 同時我們可以用上次學到的input指令,輸入取亂數的次數,看看次數多或少,取出來的結果有沒有差別。 --- ### 怎麼知道點是不是落在圓形範圍內 再來我們又遇到一個問題:「怎麼知道點落在圓形內還是圓形外?」 想想看,已知X,Y座標,圓形半徑為1,可以怎麼算呢? ...... 這時候你們平常覺得沒有用的畢式定理就可以派上用場了。 - 畢氏定理 $a^2+b^2=c^2$,只要斜邊c小於1,就表示點在圓內。 - 所以只要點座標(X,Y)計算出來 $X^2+Y^2\leq1$ 即表示點落在圓形範圍內。 --- ### Python求 $\pi$ 下面有一個範例,你寫的和下面的例子一樣嗎? ```python= import random count=0 totle=int(input('輸入次數')) for i in range(totle): Xrandresult=random.uniform(0,1) Yrandresult=random.uniform(0,1) if (Xrandresult**2 + Yrandresult**2 <=1): count=count+1 pii=((count/totle)*4) print (pii) ``` 算出來結果和我們背的 $\pi$ 一樣嗎?有辦法算得更精準嗎?可以再想想看喔! ###### tags: `資訊科學教學法`
{"metaMigratedAt":"2023-06-14T23:19:32.611Z","metaMigratedFrom":"Content","title":"用Python算圓周率 $\\pi$","breaks":true,"contributors":"[{\"id\":\"97f277c6-1b8d-46ee-a337-5fe0e6cfd972\",\"add\":2548,\"del\":79}]"}
    593 views