不用微積分,如何計算圓面積

2020-12-04 機器之心Pro

選自medium

作者:Andre Ye

機器之心編譯

機器之心編輯部

殺雞用牛刀,我們用機器學習方法來算圓的面積。

詢問任何人圓的面積是多少,他們都會告訴你不就是r嗎。但如果你問他們為什麼,他們很可能並不知道。

這是因為圓的面積公式的證明在大多數情況下要麼不直觀,不令人滿意,要麼充斥著積分等高級數學概念。

借鑑統計學習和機器學習的核心原理,我們可以使用蒙特卡羅模擬和多項式/二次回歸來創建基於計算的方法,以找到圓的面積公式。

在不使用任何數學運算的情況下得出圓的面積,我們使用了蒙特卡羅方法。從探索不規則形狀的面積到預測股票市場的情況,都用到了蒙特卡羅方法。該方法的核心思想是引入隨機性,並測量系統對其作出的反饋,甚至可以在不了解系統原理的情況下獲得有效信息。

在使用蒙特卡羅來近似圓的面積時,我們先生成一些隨機坐標點 (x1,x2),這兩個方向的坐標都是從負半徑值到正半徑值的均勻分布繪製得到的。我們在圓中放入 250,000 個這樣的坐標點,如中心極限定理(或大數定律)所描述的,研究所用的真實隨機樣例點越多,得到的結果就會越準確。

對於圓內的每一個點,我們可以引入一個落入圓內的點的數目的計數變量。在所有隨機點都被投入之後,圓內的點數除以總點數(該研究中為 250,000)的值就代表在正方形內圓的面積所佔的分數。該正方形的邊長是圓的半徑的兩倍,因此正方形的面積是 4r,其中 r 是圓的半徑。用 4r乘之前得到的分數,就得到了圓的面積。通過蒙特卡羅方法,可以非常接近地得到圓的真實面積而無需數學計算公式。

道理很簡單,結果幾乎完全正確!

我們可以在給定半徑 r 的情況下找到任何圓的面積,但此時此刻我們還沒有歸納出圓的公式。為找到公式,我們需要創建一個二次方程式進行建模,該方程式需要一個半徑並嘗試輸出面積。為了正確地擬合方程,我們必須為每個半徑的蒙特卡洛近似面積收集數據。

import numpy as np

from tqdm import tqdm #Just a progress bar indicator

#Number of randomized points to generate for each approximation

num_points = 250_000

#Lists to store the radius and its corresponding area approximation

radii = []

areas = []

#For each of the 500 equally spaced values between 1 and 100 inclusive:

for radius in tqdm(np.linspace(1,100,500)):

#A counter for the number of points in the circle

in_circle = 0

for i in range(num_points):

#Generate an x and y coordinate from a uniform distribution bounded by a tangent box

xcoor = np.random.uniform(-radius,radius)

ycoor = np.random.uniform(-radius,radius)

#If the point is inside the circle, add one to in_circle

if xcoor**2 + ycoor**2

in_circle += 1

#Get the fraction of the points that were inside the circle

area_frac = in_circle/num_points

#Append the approximated area and the radius

areas.append(area_frac*(4*(radius**2)))

radii.append(radius)

而下一步就是寫一個擬合數據的二次項模型(回歸模型),y =ax。我們可以通過繪圖驗證數據為二次項,而不是三階或四階多項式。從本質上講,這是一個基礎的機器學習問題,因此再回顧一些基本術語:

模型參數:模型進行自動調整從而找到最佳參數,在這種情況下,參數為 a。如果具有 n 個參數,則該模型被稱為 n 維。我們所使用的最基本模型是一維的,而對圖像進行分類的深度神經網絡有可能具有數百萬個維度。

損失函數:損失函數是對當下模擬情況進行評估,並希望找到可以得到最低誤差度的參數集,從而使得損失函數最小化。比如某個參數值 j 的損失函數值為 3,而參數值 k 的損失函數值為 2,則理應選擇參數值 k。

平均絕對誤差(MAE):我們將使用損失函數/錯誤度量,其原因是因為它易於使用且易於理解。給定當前參數(a)和模型預測值,而平均絕對誤差是指預測值與真實值之間平均相差有多大,較低的 MAE 意味著模型更適合數據。

學習率:為了優化參數,模型會在特定「方向」上逐漸調整參數。由於我們現在的模型僅優化一個參數(a),因此僅需決定在一維平面上是增大或是減小參數值(任何變化都會產生較低的損失函數)。而模型在調整過程中的移動量稱為學習率。較高的學習速度意味著模型有可能短時間內就能得到一組效果較好的參數,但無法保證其準確度,而較低的學習率能夠獲得非常不錯的參數,並且擁有較高的準確度,唯一一點是需要大量的訓練時間。

有了這些變量,我們可以構建一個非常基礎簡單的程序,使得它對這些數據擬合:

把參數 coef(a)初始化為 0.1。

對於訓練周期中的每次迭代:

對 coef 提出兩條路徑;coef+lr 和 coef-lr,其中 lr 是學習率。

對使用 coef=coef+lr 的模型和使用 coef=coef-lr 的模型評估平均絕對誤差。

將 coef 設置為等於 coef+lr 和 coef-lr 中平均絕對誤差值較小的那個數字。

通過對平均絕對誤差的反覆優化,模型最終將收斂出一個「最佳」的 coef 值(從而最大程度地降低平均絕對誤差)。這一思路正是機器學習的核心原理——通過反覆地推斷、評估和修正,計算機可以「磨鍊」出一套最優的參數。

coef = 0.1 #Initial coefficient value

learning_rate = 0.00001 #How fast the model 'learns'

iterations = 100000 #How many times we want the model to 'practice and correct'

for i in tqdm(range(iterations)): #note - tqdm is just a progressbar

#Propose two path for the coefficient:

up_coef = coef + learning_rate #Move up

down_coef = coef - learning_rate #Or move down

#Store the predictions for a model using parameters up_coef and down_coef

up_pred = []

down_pred = []

#For each radius value in the previously created list radii:

for r in radii:

#Append the model using up_coef's and down_coef's prediction (a*r^2)

up_pred.append(up_coef*(r**2))

down_pred.append(down_coef*(r**2))

#Find the MAE. Both are converted to NumPy arrays for easy operation.

up_coef_mae = np.abs(np.array([up_pred])-np.array([areas])).mean()

down_coef_mae = np.abs(np.array([down_pred])-np.array([areas])).mean()

#If moving the coefficient down yields a lower (better) MAE:

if down_coef_mae

#Set it equal to down_coef

coef = down_coef

#Otherwise (moving the coefficient up yields a lower (better) or equal MAE:

else:

#Set it equal to up_coef

coef = up_coef

當我們查看訓練的 coef 值時,可以看到它等於π:

print(str(coef)[:5]) #first four digits of coefficient (decimal point counts as a character)

[Output]: '3.141'

當然,計算圓面積的公式很好記就是r。無需使用微積分中的任何複雜的數學方法或其他證明,我們就能找到它的公式,並找到一種使用蒙特卡洛模擬和二次回歸找到值的方法。使用這種思路就可以找到計算圓面積的方法——當然也可以找到任何圖形的面積計算公式——橢圓、心形、二維的烏龜形狀——只要參數可以說明它的輪廓。

近年來,計算機已經接手開始解決複雜的高可變數學問題,計算圓面積只是其中的一個簡單的示例。如果想要更複雜、更具開創性的,那當然是四色定理了(每個無外飛地的地圖都可以用不多於四種顏色來染色,且不會有兩個鄰接的區域顏色相同)。這是第一個由計算機先生成證明,又被數學家廣泛接受的成果。

藉助計算機,人類可以探索以往無法嘗試進入的,極其複雜的數學領域。

原文連結:https://medium.com/swlh/finding-the-formula-for-circle-area-without-using-any-math-898cbee70253

相關焦點

  • 不用任何數學方法,如何計算圓面積
    詢問任何人圓的面積是多少,他們都會告訴你不就是��r⊃2;嗎。但如果你問他們為什麼,他們很可能並不知道。這是因為圓的面積公式的證明在大多數情況下要麼不直觀,不令人滿意,要麼充斥著積分等高級數學概念。借鑑統計學習和機器學習的核心原理,我們可以使用蒙特卡羅模擬和多項式/二次回歸來創建基於計算的方法,以找到圓的面積公式。
  • 以圓面積的計算闡述有限元方法的思想和實質
    假定我們並不知道圓面積的計算公式和三角形面積計算公式,現在需要通過有限元方法給出半徑為R的圓的面積計算公式。
  • 古代樸素的微積分思維,通過計算圓形面積公式可以探知
    漢朝,注意,是漢朝的牛人劉微,發現圓內接正多邊形的面積與圓面積都有一個差,用有限次數的分割、拼補,是無法證明《九章算術》的圓面積公式的。因此劉徽大膽地將極限思想和無窮小分割引入了數學證明。他從圓內接正六邊形開始割圓,「割之彌細,所失彌少,割之又割,以至不可割,則與圓周合體,而無所失矣。」
  • 面積計算
    所以幾何學誕生之初就和面積的計算息息相關。 我們知道計算面積最好的辦法就是微積分,有了這個神器,媽媽再也不用擔心我算面積的事情了。但是對於小學生來說,這個超綱了。。。 何況微積分也必須是以承認矩形的面積等於長乘以寬為基礎的。事實上,在處理這些邊界不是直線段圖形面積的時候,古希臘人體現出了高超的計算技巧。
  • 一位數學老師的教學方法:如何推導圓的面積計算?
    圓也是最常見的平面圖形,它是最簡單的曲線圖形。俗話說「溫故而知新」,在學習新知之前,引導學生回憶以前探究長方形、平行四邊形、三角形、梯形面積公式的推導方法,引導學生發現「轉化」是探究新的數學知識、解決數學問題的好方法,為下方探究圓的面積計算的方法奠定基礎。
  • 與圓有關的計算,圓的陰影部分面積計算,學生:求心理陰影面積
    圓的陰影部分面積,在中考中屬於計算類題目,一般都是計算不規則圖形的陰影部分面積,我們常用規則圖形的面積作減法來計算,這裡我們需要知道扇形的面積計算公式和一些其它圖形的面積公式計算例一:>連接BC,OB,我們計算陰影部分的面積,就可以當作三角形BCE的面積減去拱形BC的面積,即BCE-(扇形OBC-OBC)例二:求陰影部分面積有時候輔助線很重要例三:例四:利用弧長公式計算
  • 如何給小學生講一點微積分?
    徹底嚴格地講清楚不太現實,但是從思想上做一些啟蒙還是可以的,如一些微元法和極限的思想,圓的面積公式的推導就是一個不錯的例子
  • 實例,PHP計算一個圓的面積
    本例通過計算圓的面積說明常量是如何定義和使用的,運行結果如下圖所示。實現過程創建腳本 index.php 文件,首先,通過 drfine()函數定義常量。將數值「3.1415926」定義常量名為PI。然後,定義數值型變量,將圓的半徑設置為12個單位。最後,通過echo輸出圓的面積。
  • 微積分原理,即求面積和求斜率是互逆運算
    微積分原理微積分原理,一言以蔽之,即,微分和積分是互逆的運算。在同濟版的高數教材中,有微積分基本定理,即∫f( x) dx= F(b)—F(a) (1)它是什麼意思呢?微積分基本公式,即牛頓萊布尼茨公式讓我們離開公式,積分就是求面積,這個積字就這麼來吧。
  • 有關圓的面積的圖形計算典型例題
    北師大版六年級上冊第一單元圓我們已經掌握了圓的周長和面積等相關知識,今天我們就來梳理一下有關圓的圖形計算的例題。><解析>要想知道這兩個圖中陰影部分的大小,我們首先要分析出來如何求它們的面積,其實第一幅圖是正方形中減去直徑是4的兩個半圓的面積,第二幅圖是正方形中減去4個半徑是2的1/4圓,即都是從邊長為4的正方形中減去一個半徑為2的圓的面積,所以剩下的(陰影部分)大小一樣。
  • 用微積分計算1到100連續自然數平方之和
    我們用公式很容易計算1到n的自然數之和,如下1到100的自然數之和等於5050但是如果我們用微積分來計算,會給我們帶來怎樣的結果呢?直觀上,這個積分是「重複地加一堆東西」——從微積分出發,連續自然數之和貌似符合如下微積分公式,它等於x^2/2我們看一下計算結果:從1到100的實際總和是5050。
  • 如何計算圓的體積和面積
    圓面積公式為s=πr2或/s=πd2÷4,圓的周長公式為C=2πr或C=πd,r=C÷π÷2/d=C÷π。圓柱的體積公式為底面積ⅹ高,圓錐的體積等於三分之一底面積x高。  1圓的性質  在一個平面內,一動點以一定點為中心,以一定長度為距離旋轉一周所形成的封閉曲線叫做圓。圓有無數個點。
  • python由圓半徑計算圓的周長和面積
    前言提到圓,大家一定會首先想到大鋼鏰兒上面的一圓的圓,因為大家都是財迷。這裡我們所說的圓是指圓形的圓,哈哈不過大鋼鏰兒也是圓形的。要計算圓的周長和面積,自然而然就要用到圓周率π,在我國,祖衝之在劉徽開創的探索圓周率的精確方法的基礎上,首次將「圓周率」精算到小數第七位,即在3.1415926和3.1415927之間,他提出的「祖率」對數學的研究有重大貢獻。直到16世紀,阿拉伯數學家阿爾·卡西才打破了這一紀錄。
  • 微積分的本質,抓住了方法你看五分鐘就懂,原來數學可以如此之美
    舉一個例子,我們都知道圓的面積計算是πr^2,但是是怎麼得來的,可能就不是很多人知道了。雖然以前很多人研究了很多種方法求算,但其本質是一樣的,都是使用無限逼近再求和。所以,我們就隨意選擇一其中樣了,還是用視頻裡面的方法吧,懶得自己作圖。我們畫一個半徑為R的圓,然後分成很多個等寬但大小不一的圓環,如下圖所示。也就是說,現在這個圓就是一圈圈等寬圓環組成的圓了。
  • 微積分的力量
    這幾天看了一本書《微積分的力量》,這確實是一本好書,也是我劃線比較多的一本書,很受啟發。
  • 微積分的歷程:什麼是微積分?所要解決的 4 個主要問題是哪些?
    但如何找到曲線上某點的斜率呢。 人們會用兩個非常非常靠近的點來近似。觀察下圖割線趨近切線的動畫過程:▌曲線的面積和長度如何算出曲線的面積和長度是天體力學中一個非常重要的問題。天文學家的目標是找到行星在給定時間內運行的距離。
  • 微積分出現後,人類就再也擋不住了!
    在芝諾之後,第一個研究微積分的人是柏拉圖的學生歐多克索斯。在此期間,幾乎每個人都能計算正方形、長方形和三角形等規則形狀的面積。他們負責發展我們對形狀及其特徵的理解。然而,現在是革命的時候了!他們需要計算一個曲面的面積,比如一個圓,但是這對他們來說是相當困難的。圓不可以畫線,然後分成三角形。相反,他們必須找到更複雜的東西。
  • 微積分出現後,人類就再也擋不住了
    在此期間,幾乎每個人都能計算正方形、長方形和三角形等規則形狀的面積。他們負責發展我們對形狀及其特徵的理解。然而,現在是革命的時候了!他們需要計算一個曲面的面積,比如一個圓,但是這對他們來說是相當困難的。圓不可以畫線,然後分成三角形。相反,他們必須找到更複雜的東西。我們的歷史資料顯示,歐多克索斯使用了一種窮竭法,這是一種精確的計算方法。他發現一個圓錐體的體積是相應圓柱體積的三分之一。
  • 圓的面積怎麼算,計算公式是什麼
    今天,我們的主題是:圓的面積怎麼算,計算公式是什麼圓面積是指圓形所佔的平面空間大小,常用S表示。圓是一種規則的平面幾何圖形,其計算方法有很多種。圓的面積就是圓的半徑r的平方乘以π,即S=πr²。1圓面積計算公式公式:圓周率乘以半徑的平方用字母可以表示為:S=πr²或S=π*(d/2)²。
  • 巧求與圓有關的面積問題,老師再也不用擔心我的學習
    今天鄭老師就教大家一起如何來巧求與圓有關的面積問題,學會後老師再也不用擔心你的學習啦!方法一:利用「作差法」求面積【分析】由菱形的性質得出AD=AB=6,∠ADC=120°,由三角函數求出菱形的高DF,圖中陰影部分的面積=菱形ABCD的面積﹣扇形DEFG的面積,根據面積公式計算即可.