電腦模擬

**電腦模擬**（ ），又叫**電腦仿真**，係科學上嘅研究方法。研究者會整個數學模型出嚟模擬想研究嘅現象，個模型會講明個現象涉及邊啲變數同埋呢啲變數之間嘅方程式係點，跟住個研究者就會將個模型寫成電腦程式嚟行，睇吓如果個數學模型正確，會發生乜嘢事，做到按理論知識預測現實世界嘅現象。除此之外，電腦模擬通常會配合埋科學視覺化技術，將模擬結果以圖像形式呈現出嚟。

舉個簡單例子說明，群動係電腦模擬嘅例子，想像家陣有一大柞個體一齊移動，途中佢哋會守三條規則：**分隔**－唔好撞到隔離嘅其他個體；**順向**－將自己方向對準周圍其他個體嘅平均；**凝聚**－將自己置於周圍其他個體嘅平均嘅位置。用電腦模擬嘅話，個程式會類似噉：
  設 n 件物件；
  設呢 n 件物件嘅初始位置
  設 t（時間）= 0；
  While t 未到某個值，
    Foreach 物件
      計「如果呢件物件跟嗰三條法則郁，佢嘅新位置會响邊」；
    顯示出每件物件嘅新位置；
    t 上升 1；
於是研究者就能夠知道「如果群動嘅數學模型正確，會發生乜嘢事（啲物件郁起上嚟望落會係點嘅樣）」。事實表明咗，群動模型可以準確噉預測某啲自然現象，例如係一大群雀鳥一齊飛嗰陣成個雀群成嘅形態。

電腦模擬係科學運算不可或缺嘅部份，喺物理學、化學同生物學等嘅自然科學上都會用到。除此之外，電腦模擬仲有俾人用落去社會科學上，例如用博弈論模擬社會（想像「如果社會當中有咁多咁多百分比嘅人跟噉樣噉樣嘅法則做決策，個經濟體會變成噉樣噉樣」），而工程學都有用到電腦模擬，例如模擬「如果部機械用噉嘅設計，部機械嘅效率會係咁高咁高」。

要學電腦模擬，啲人通常要學咗基本嘅程式編寫先。

## 源起背景

### 哲學諗頭

電腦模擬係廿一世紀初嘅科研方法。科學係用科學方法嚟追求知識，而科學方法涉及以下嘅步驟：
#根據手上已知係真嘅事實，諗一啲理論出嚟（「基於我哋經已觀察到嘅呢啲現象，我推測啲現象背後嘅法則係噉噉噉，令呢種現象出現」），而為求精確，呢啲理論通常都想係用數學模型嘅方式表達嘅；
#跟手就靠邏輯嘅思考，去諗吓呢柞理論會做點樣嘅**預測**（「如果我提倡嘅呢個理論係真確嘅，理應會...」）；
#然後就做實驗同觀察嚟攞數據，驗證吓個理論嘅預測係咪真確（「如果我呢個理論係真確，呢個實驗理應會得出某個某個結果，而個實際嘅實驗結果係...」）；
#如果數據顯示，個理論係做唔到準確嘅預測嘅話，就要一係根據攞到嘅數據睇吓個理論要點改先可以令佢做到準確啲嘅預測，一係就要諗新理論取代舊理論。
用電腦模擬做科研想要做嘅就係幫手**預測[[複雜系統]]嘅行為**：原則上，「理論會作出乜嘢預測」呢點可以由個研究者齋靠諗嚟做得到，例子可以睇吓好似基本牛頓力學入面嗰啲相對簡單嘅物理定律－呢啲定律吓吓都係一條式得嗰幾個變數，研究者可以輕易噉用人手計出「根據呢條定律，如果變數 x 嘅數值係咁多咁多，變數 y 嘅數值應該會係咁多咁多」。不過當研究緊嗰樣現象有返咁上下複雜嗰陣，「齋靠個研究者用腦諗」好多時就會難令人信服，例如係群動噉，好難說服人話「齋靠研究者用腦諗，就會準確計到群動三定律會出點嘅樣嘅移動」。於是研究者就將自己個理論（用數學模型嘅方式表示）編寫成電腦程式，然後再行呢個程式，睇吓個程式會引致乜嘢結果－呢啲結果就會係佢個理論會作出嘅預測。

### 起源
電腦模擬係喺廿世紀嗰陣同電腦一齊冒起嘅：科學研究呢家嘢喺中世紀經已有，當時要計數淨係有得用人手計，而好似萬有引力定律等相對簡單嘅科學理論（條式通常得嗰 3 到 4 個變數）要用人手計並唔難，但一研究好似係群動呢啲涉及閒閒地幾廿個個體隨時間分別噉變化嘅現象，用人手計就會好撈絞；不過廿世紀初出咗一樣好重要嘅發明－電腦，電腦係運算機械，即係能夠用快過人手好多嘅速度做大量嘅運算，所以電腦嘅出現令到人類能夠計一啲以前計唔到嘅數學模型，引起咗科學家用電腦模擬嚟做科研。到咗廿一世紀初，電腦模擬經已成為咗科研不可或缺嘅部份。

## 基本程式

喺最基本上，做電腦模擬嘅程式（或者最少係做動態模擬嘅程式）可以想像成以下噉嘅虛擬碼：
  初始化（講明個模型有乜變數，想像其中一個變數叫「y」）；
  設 t（時間）= 0；
  While t 未到某個值，
    按個理論嘅數學模型，計吓個現象跟住會變成點（y = f(t)）；f 係一個函數。
    顯示出個現象變成咗點嘅樣；
    t 上升 1；
呢個過程會俾研究者視覺化噉睇到「如果嗰個數學模型成立，噉會見到啲乜嘢現象」呢樣資訊。除此之外，電腦模擬仲可以將模擬途中嘅數據記低，例如記住「變數 y 喺每個時間點嘅數值」（即係好似下面段碼噉），跟手再將呢啲數據畫成圖表，即係例如 Y 軸表示變數 y 嘅數值，X 軸表示時間，畫一條線出嚟。

```cpp
t=0:    y = 0
t=1:    y = 0
t=2:    y = 10
t=3:    y = 30
t=4:    y = 60
t=5:    y = 100
...
```


## 主要分類
電腦模擬可以按多種準則分類，包括咗係：
### 有冇隨機性

隨機定決定－前者指有隨機喺入面嘅電腦模擬，例如個程式其中一行碼係 `rand(1,10);`（隨機噉產生一個數值响 1 同 10 之間嘅數值），將模擬緊嗰個現象想像成有隨機喺入面，而後者就指冇呢啲隨機嘅電腦模擬。

蒙地卡羅方法係一種出名嘅隨機模擬做法。蒙地卡羅方法係用隨機嘅做法應付決定性系統嘅演算法，源於 1940 年代：如果話某個系統係「決定咗」嘅，意思係指個系統冇隨機喺裏面。蒙地卡羅方法最基本嘅流程如下：
#定義個系統嘅輸入嘅可能數值（定義域）；
#用一個表示輸入數值、受定義域限制嘅概率分佈隨機噉產生一個輸入；
#對個輸入做決定性嘅運算；
#將步驟 2 同 3 重複 n 咁多次，得到 n 個輸出，再結合數據－例如計嗰 n 個輸出嘅平均值。
舉個簡單例子說明，蒙地卡羅方法可以用嚟估計圓周率（\pi）嘅數值（睇附圖）：
#畫一個正方形，再喺個正方形入面畫個 90° 嘅扇形，任何嘅輸入坐標 (x,y) 都實會喺個正方形裏面（定義域）；
#用一個均勻分佈產生一個輸入坐標數值，「均勻分佈」意思係指每個坐標可能數值出現嘅機會率都完全一樣；
#喺產生咗出嚟輸入坐標數值嘅位置嗰度畫一點（做運算）；
#將步驟 2 同 3 重複 n 咁多次，然後數吓有幾多點點係喺個扇形裏面（同原點距離細過 1）嘅，設呢個數值做 m，如果 n 嘅數值大到接近無限大嘅話，以下呢樣嘢會成立：
#:\frac{m}{n} = \frac{\pi}{4}
好似蒙地卡羅方法噉嘅隨機模擬帶出咗個諗頭：無論個系統係咪決定性嘅都好，用帶有隨機嘅方法**都有可能俾得到有返咁上下準嘅答案**－「有返咁上下準」意思係指，得出嘅答案同真實嘅答案差距唔係咁大，未至於大到能夠對解決問題嘅效率造成明顯嘅負面影響。而事實表明咗，就算個系統事實上冇隨機，好似蒙地卡羅方法噉嘅隨機模擬好多時都好使好用，例子可以睇吓蒙地卡羅樹搜尋相關嘅嘢。

### 方程定個體

電腦模擬仲可以分做方程為本同個體為本兩大種：方程為本模型常用於物理學同化學等嘅物理科學，指成個模型靠住一大柞嘅方程式－好多時會係微分方程－嚟表達啲變數之間嘅啦掕，呢啲方程式當中通常會係涉及時間（t），所以隨住時間演進（t 數值由 0 開始上升），個模型會係噉計算個系統嘅各變數响時間點每一刻數值會係幾多。例如以下呢段用 C 程式語言寫嘅源碼可以攞嚟模擬喺牛頓第二定律之下郁動嘅物體：


```cpp
double t = 0.0;
float dt = 1.0f;

float velocity = 0.0f;
float position = 0.0f;
float force = 10.0f;
float mass = 1.0f;
// 設一大柞變數，包括咗時間點（t）、時間間隔（dt）、速度（velocity）、位置（position）、件物體受嘅力（force）、同件物體嘅質量（mass）。

while ( t <= 10.0 ) // 重複噉計若干次，計到時間點係 10 為止。
{
    position = position + velocity * dt;
    velocity = velocity + ( force / mass ) * dt; // 用牛頓第二定律計吓件物體受嘅力同佢嘅質量會點影響佢嘅速度。
    t += dt;
}
```

相比之下，個體為本模型涉及模擬一大柞嘅個體－個體為本模型比較常用於生物學同社會科學，因為呢啲領域研究嘅現象往往都涉及一大柞個體（人或者第啲生物）喺度個別噉做決策。基本上，行個體為本模型嘅程式做嘅嘢可以用以下呢幾個步驟總括：
#初始化，建構 n 個（離散嘅）個體（n 通常閒閒地係幾百），每一個個體都掕住一啲數值表示佢嘅個體特性（睇物件導向編程）；
#t 設做 0；
#喺呢個時間點 t，foreach 個體，按呢個個體嘅行動法則同埋特性，計佢跟住落嚟嘅狀態會點變；
#如果個模型涉及一啲整體嘅變數，按啲個體嘅新狀態嚟計呢啲整體變數嘅新數值；
#`t = t + 1`（t 數值上升 1）；
#一路係噉重複步驟 3 至 5，直至結束條件達到為止。
上面提咗嘅群動就係個體為本模型嘅例子。

### 第啲分類
除咗以上嘅分類法之外，電腦模擬仲可以按以下呢啲特性嚟分：
*離散事件模擬：指將模擬緊嗰個系統想像成喺離散時間（t_1, t_2, t_3, ...）當中存在嘅一連串事件；每件事件都會喺某個時間點發生，並且引起個系統嘅狀態 \mathbf{s} 變化（某啲變數嘅數值變），而且呢啲模型通常都假設咗個系統喺事件之間嘅時間內唔會起乜嘢變化。大自然當中嘅系統好少可會話「冇事件發生就企喺度唔郁」，不過離散事件模擬喺工程學同商學就頗為常用－呢啲領域成日都會分析一啲人造嘅系統，例如係用離散事件模擬某間銀行嘅變化，當中會影響間銀行嘅狀態嘅事件包括「客人 \text{A} 出現」同「客人 \text{B} 出現」呀噉。
*多重規模模型：指個模型會同時模擬多過一個層面嘅現象；如果話一個模型有「多層」，即係例如每層都會有一柞變數，而每層嘅變數都會係由下層嗰啲變數結合而成，
**熱力學例子：一嚿物體嘅溫度（高層變數）取決於嚿嘢內部嘅粒子嘅郁動（下層啲個體嘅變數）；
**進化論例子：一個物種絕種嘅機會率（高層變數）取決於個物種啲個體嘅繁殖能力（下層啲個體嘅變數）；
**經濟學例子：一間公司整體生產咗幾多件產品（高層變數）取決於個別員工嘅工作表現（下層啲個體嘅變數）。
**一個多重規模模型會同時考慮多過一個層面嘅現象，而且會用一個層面嗰啲變數出嘅數值（例：嚿物體啲粒子嘅平均速度、個物種啲個體平均每個生咗幾多後代、間公司嘅員工平均每人生產咗幾多件產品...）嚟做另外一啲層面嘅模擬嘅參數。
... 等等。

## 各領域嘅應用

### 物理學

運算物理學涉及用運算方法（包括電腦模擬）解決物理學上撞到嘅問題：物理學通常都會用一大柞方程式（尤其係微分方程）表達某啲變數之間嘅關係，用呢啲變數組成嘅模型嚟描述研究緊嘅現象。做物理學相關工作嘅人成日都會用電腦模擬嚟處理一啲解析解（簡單講即係齋靠操弄方程式）搞唔掂嘅問題－呢啲問題往往係要做「想像 x = 1，個答案係噉噉噉，想像 x = 2，個答案係噉噉噉...」噉嘅運算方法嚟解（睇埋數值分析），而當個冇得用解析解嚟解嘅問題涉及複雜系統嗰陣，變數嘅數量多得好交關，難以靠人手計嚟解決個問題，於是研究者就會用電腦模擬嘅方法，叫部電腦（例如）「計 x = 1 嗰陣嘅答案，計 x = 2 嗰陣嘅答案... 再將呢啲答案畫一條線出嚟睇」。

除此之外，用電腦嚟模擬物理現象仲可以幫到手製作更加迫真嘅虛擬世界－形成咗所謂嘅物理引擎技術，呢種技術對電子遊戲同虛擬實境等嘅產品嚟講不可或缺。例如類似以下呢段 C 碼噉嘅碼可以攞嚟模擬喺牛頓力學二維空間下郁動嘅粒子，可以喺電子遊戲入面用嚟模擬物體嘅郁動：

```c
...
    while (currentTime < totalSimulationTime) { // 當 currentTime < totalSimulationTime，一路做...
        for (int i = 0; i < NUM_PARTICLES; ++i) { // 家陣模擬若干粒粒子，foreach 粒子，做...
            Particle *particle = &particles[i];
            Vector2 force = ComputeForce(particle); // 有個子程序計吓呢粒粒子受緊幾多力。

            Vector2 acceleration = (Vector2){force.x / particle->mass, force.y / particle->mass};
            // 上面呢行碼係用牛頓第二定律計粒粒子跟住嘅加速度。

            particle->velocity.x += acceleration.x * dt; // 用加速度 update X 軸速度...
            particle->velocity.y += acceleration.y * dt; // 用加速度 update Y 軸速度...
            particle->position.x += particle->velocity.x * dt; // 用速度 update X 軸位置...
            particle->position.y += particle->velocity.y * dt; // 用速度 update Y 軸位置...
        }
        PrintParticles(); // 按啲粒子嘅位置，更新個畫面嘅樣。
        currentTime += dt; // currentTime 上升 1。
    }
...
```

### 生物學

運算生物學涉及用運算方法（包括電腦模擬）解決生物學上撞到嘅問題：同（例如）運算物理學比起嚟，運算生物學比較傾向用個體為本模型，例如係進化論同生態學等領域上嘅研究都成日要分析一大柞個別噉做決策嘅個體（動物或者植物個體呀噉）之間嘅互動，以及係呢啲互動出嘅結果，而由於基因突變等嘅現象，生命呢家嘢本質上就實會有可能存在個體差異－因為噉，個體為本模型就啱嗮，例子可以睇吓對物競天擇等嘅現象嘅模擬。

雖然話生命現象傾向似個體為本模型，但運算生物學當中都有用到方程為本模型，例如洛卡-伏塔拉模型就係生物學方程為本模型嘅例子，初頭呢個模型係俾人攞嚟模擬捕食者同獵物响生態系統當中嘅互動，打後呢個模型仲有俾人攞嚟模擬第啲生命現象。呢個模型涉及咗以下呢兩條非線性微分方程：
:\frac{dx}{dt} = \alpha x - \beta x y
:\frac{dy}{dt} = \delta x y - \gamma y
當中
*x 係獵物（例：兔仔）嘅個體數量；
*y 係捕食者（例：狼）嘅個體數量；
*t 表示時間；
*\frac{dx}{dt} 表示獵物個體數量隨時間嘅導數，即係獵物個體數量嘅瞬間變率（詳情可以睇微積分）；
*:－呢個數值取決於 x（獵物嘅數量會影響跟住落嚟有幾多隻新嘅獵物出世）同 x y（獵物同捕食者嘅數量會共同影響跟住落嚟有幾多隻獵物死亡）。
*\frac{dy}{dt} 表示捕食者個體數量隨時間嘅導數；
*:－呢個數值取決於 y（捕食者嘅數量會影響跟住落嚟有幾多隻新嘅捕食者出世）同 x y（獵物同捕食者嘅數量會共同影響跟住落嚟有幾多隻捕食者因為捉唔到獵物而餓死）。
*\alpha、\beta、\delta、\gamma 係一柞實數參數，反映獵物同捕食者「平均每隻生產幾多隻後代」等嘅因素；
如果將 x 同 y 畫做圖（打橫嗰條軸係時間），會出好似以下呢兩條噉嘅線（表示捕食者；表示獵物）：

跟住研究者仲有得調整吓啲參數，睇睇（例如）捕食者出生率突然勁跌會點樣影響個生態系統嘅情況。

### 認知科學

認知科學上都有用到電腦模擬－電腦模擬可以攞嚟研究認知（運算認知）同神經系統（運算神經科學），而人工智能（AI）本質上就係嘗試緊用電腦方法嚟模擬智能，務求教電腦展現出好似有智能噉嘅行為。例如人工神經網絡就係一種認知科學模型。人工神經網絡個諗頭係要用人工方法模仿動物神經細胞嘅功能：動物神經細胞喺受到某啲特定刺激嗰陣，會用電或者化學方式向第啲神經細胞傳出訊號，然後同呢粒神經細胞相連嗰啲神經細胞會受到佢嘅訊號刺激，跟住又會各自噉射新嘅訊號－於是資訊就會喺成個神經系統當中傳播開去；人工神經網絡由大量嘅人工神經細胞組成，喺用電腦程式整神經網絡嗰陣，研究者會每粒人工神經細胞都同佢設個數值代表佢嘅**啟動程度**，而每粒神經細胞嘅啟動程度嘅數值都有條式計，呢條式包括咗喺佢之前嗰啲神經細胞嘅啟動程度。即係例如個程式 foreach 細胞有一條類似噉樣嘅算式：
:A = W_1 A_1 + W_2 A_2...；（啟動函數）
A 代表粒神經細胞嘅啟動程度，A_n 代表前嗰排嘅神經細胞當中第 n 粒嘅啟動程度，而 W_n 就係前嗰排嘅神經細胞當中第 n 粒嘅權重（指嗰粒細胞有幾影響到 A）。所以當某粒人工神經細胞啟動嗰陣，會帶起佢後面啲細胞跟住佢啟動－似十足生物神經網絡入面嗰啲細胞噉。假如個神經網絡嘅程式令佢能夠自行按照經驗改變 W_n 嘅數值嘅話，佢就會曉學習。

到咗廿一世紀初，人工神經網絡經已俾科學界廣泛噉用落去各種各樣嘅問題嗰度。喺應用上，事實證實咗人工神經網絡能夠處理機械視覺同埋語音識別呢啲傳統嘅電腦程式好難解決到嘅問題；而喺理論性質嘅認知科學上亦有聯結主義理論，主張心靈可以用人工神經網絡嚟模擬，例如有研究就成功噉用人工神經網絡令人工智能好似人噉識得睇一幅圖決定要將注意力擺喺幅圖嘅邊忽。

### 社會科學

運算社會科學係指用運算方法研究社會科學，例如用電腦模擬解析社會現象。有學者指，電腦模擬呢種技術助長廿世紀起經濟學等嘅領域放棄唔真實嘅假設：廿世紀前嘅古典經濟學成日會做一啲唔真實嘅假設，包括假設咗啲經濟個體喺做經濟決策嗰陣係乜都知嘅（例如假設每個買家知道嗮市場裏面啲貨嘅價格），呢個假設好明顯唔合符現實，但當時嗰啲研究者受到運算能力嘅局限－要計「如果每個個體响資訊上都有差異，個模型會得出乜結果」需要做嘅運算量大得滯，用人手根本做唔嚟（例：想像個模型模擬 1,000 個個體，佢哋個個性格都唔同，研究者要人手噉逐個逐個計佢哋嘅決策結果）；呢點搞到啲學者明知個假設唔真實，都焗住要照用。廿世紀電腦模擬技術有咗好似個體為本模型噉嘅架生，令到經濟學家喺建立佢哋嘅模型嗰時可以考慮埋個體差異，助長咗經濟學上嘅革新。

博弈論上嘅研究成日都會用到個體為本模型，當中重複監犯困境就係一個例子：監犯困境係一種博弈；喺監犯困境當中，每位博弈者有兩個選擇－合作同背叛；而一場兩人監犯困境嘅報償矩陣如下，每個格嗰兩個數值表示兩個人嘅分別所得：

定義上，喺監犯困境當中，以下呢條不等式成立（假設報償值係愈正愈理想）：
:T > R > P > S
例：0 > -0.5 > -5 > -10；簡單講，監犯困境係指大家合作就可以得到 R 咁多利益，一位博弈者單方面背叛可以攞到著數（T > R），但如果雙方都背叛就大家齊齊輸（R > P）。重複監犯困境係指啲博弈者進入監犯困境嘅情境若干次。

有研究者進行電腦模擬研究，行個體為本模型模擬重複監犯困境，喺最簡單嘅情況下即係：
#初始化，將 `R`、`T`、`S` 同 `P` 設定做特定嘅數值；
#建立 n 個模擬嘅個體，每個個體有兩個屬性－「採取嘅策略」 `strat` 同埋「累積咗嘅總得益」 `jik`；
#是但抽兩個個體，俾佢哋進行監犯困境博弈，每位模擬嘅博弈者會按佢嘅 `strat` 做決策；
#按每個個體做嘅決定，計佢嘅總得益點變，例如兩個都揀咗合作嘅話，噉佢哋每個人都 `jik = jik + R`；
#重複步驟 3 同 4 若干次；
原則上，「最成功嘅策略」係指令到個體嘅總得益最大化嘅策略，所以研究者要做嘅嘢係喺步驟 3 同 4 重複咗若干次之後，foreach 策略類型，（例如）計吓採取嗰種策略嘅個體嘅平均 `jik`，而呢個數值最高嗰種策略就係「最成功嘅策略」。結果發現，「永遠淨係揀合作」係一種非常惡劣嘅策略，會搞到個個體係噉勁俾人背叛而最後輸（假設 T > S，而且 T - S 數值有咁上下大）。啲研究者就靠呢個結果作出推論：重複監犯困境就好似人嘅現實生活噉－人係有社會性嘅動物，往往會一齊合作先可以做到最多嘢（R > P），但喺合作嘅情境當中，成日都會出現機會容許某啲參與者搵第啲參與者老襯（背叛係有可能發生嘅，而且 T > R > S），而世界唔係烏托邦，完全利他嘅人係缺乏靠自己生存嘅能力嘅－人實要識得喺俾人背叛嗰陣，用返背叛嚟應對，以防俾人搵老襯。

### 工程學

運算工程學涉及用電腦模擬等嘅運算方法分析工程學上應付嘅人造系統（例如機械同建築物）。喺運算工程學上，電腦模擬通常會以物理學知識做基礎，即係「分析緊個系統，個系統嘅原理涉及咗呢柞呢柞物理定律，將個系統涉及嗰啲物理定律編寫做程式，再行嚟睇，就做到模擬個系統行起上嚟會係點」。

例如廿一世紀初嘅結構分析就時不時都會用到電腦模擬：結構分析常用於土木工程－包括咗結構工程同建築工程－指個工程師分析一個結構同埋嗰個結構嘅各橛分別受到點樣嘅負荷，以及係分析呢啲負荷會對個結構造成乜嘢影響（例如係會唔會砸冧個結構），對於建設安全嘅結構嚟講不可或缺，例如想像以下呢個噉嘅簡單結構，個結構係個等邊三角形，個工程師打算用呢個結構嚟撐住啲嘢，個結構要承受一股由上面壓落嚟嘅力，股力嘅大細係 10 \text{ N} 咁多：
:
由力學上嘅知識（作為分析基礎嘅物理學知識）已知，呢股力會造成一股反作用力。而假設組成個結構嗰啲樑夠嗮硬淨唔會變形（剛體），而且啲節點又夠勁（啲樑唔會走位），噉啲反作用力（\text{R}_{A_x}、\text{R}_{A_y}、\text{R}_{B}）會係噉嘅樣（想像啲節點有特殊構造）：
:
而按物理學上對力嘅知識，如果成個結構企到喺度唔郁（個結構會郁就表示可能會冧），噉啲力加埋嗮係 0，即係話喺 \text{A} 嗰點嘅力可以噉樣想像（F_y 係沿打戙嗰條軸嘅力，F_x 係沿打橫嗰條軸嘅力，因為個結構係等邊三角形，所以每隻角嘅角度係 60°）：
:\sum F_y=0=R_{Ay}+F_{AD}\sin(60)=\frac{10}{2} +F_{AD}\frac{\sqrt{3} }{2} \Rightarrow F_{AD}=-\frac{10}{\sqrt{3}}
:\sum F_x=0=R_{Ax}+F_{AD}\cos(60)+F_{AB}=0-\frac{10}{\sqrt{3} }\frac{1}{2}+F_{AB} \Rightarrow F_{AB}=\frac{5}{\sqrt{3}}
:
... 喺另外嗰幾點嘅力可以用同樣嘅道理嚟諗。如是者，個工程師就計到嗮「每條樑會受幾多力」等嘅重要資訊。上述呢個係一個簡化嘅例子：喺現實應用上，大些少嘅建築物會有成千上萬個類似噉嘅結構部件，唔可能人手計嗮。所以廿世紀末以來嘅工程師都會搵電腦模擬幫手，將結構唔同部份之間嘅互動定律組裝成矩陣，然後解方程，得出結構每部分需要受幾多力同會郁幾多，知道成棟嘢會唔會因為噉而有機會冧，俾工程師做「成棟建築物噉樣起得唔得」嘅判斷。

複雜啲嘅工程運算會涉及唔係線性嘅自然定律，呢啲定律加埋日常物件形狀上嘅不規則，工程運算原則上冇絕對準嘅答案，只能夠將現實處境拆做好多嚿細細個、會彼此互動嘅組件，然後用電腦模擬計個大約啱嘅答案出嚟。呢種做法就叫做有限元分析。

## 驗證同確認

喺做咗電腦模擬之後，研究者仲要評估個模型掂唔掂：電腦模擬用嘅模型梗會涉及抽象化，即係有一啲特徵係現實嗰樣現象有、但個模型係冇嘅；例如工程學上用電腦模型模擬機械或者建築物等嘅結構嗰時，就好興假設組成個結構嗰啲柱同樑係剛體唔會變形－原則上，呢個假設係理想化做法，現實世界冇任何嘢係真正嘅剛體，不過如果啲建築材料真係造得好精良，硬淨得好交關，硬淨到要極大嘅力（例如有嚿隕石撞落去）先可以搞到佢變形，而呢啲「極大嘅力」出現嘅機率微乎其微（有嚿隕石跌落嚟，係好少可會發生嘅事件），噉「個結構係剛體」呢一點喺絕大多數時候都會成立，所以個假設雖然唔真實，但唔會對分析嘅準確度造成顯著嘅負面影響，可以照用。由呢個例子睇得出，電腦模擬模型實會有可能做唔到準確噉描述現實，問題只係個模型失敗嘅機率有幾大（一般係愈低愈好）同個模型會喺幾多個情況下啱用（一般係愈多愈好）。

評估一個電腦模擬模型主要有兩大過程－驗證同確認：
***驗證**係指睇吓個模型嘅輸出同原模型嗰啲微分方程嘅解答接唔接近；呢個過程包括檢查個模型啲源碼做嘅運算係咪同預想中嘅演算法相同，仲有係睇吓用個模型計出嚟嘅結果係咪合符用解析解得出嘅結果（如果個模型模擬嗰樣現象係有可能用解析解計嘅話）。
***確認**係指睇吓個模型「表示到現實嗰樣系統嘅程度」係咪足以達到場電腦模擬嘅目的；呢個過程通常會涉及個研究者行完場模擬之後走去做實驗攞數據，睇吓啲數據係咪真係合乎個模型嘅預測，例如一個工程師做電腦模擬，模擬一個新設計嘅摩打行起上嚟係點，個模型預測個摩打嘅效率「會係咁多咁多」，而個模型預測嘅效率數值非常好（根據佢個理論，個摩打效率非常咁高），令佢有信心郁手整個摩打嘅原型出嚟；响整好咗個原型之後，佢就開始試行吓個原型摩打，並且搵方法量度個摩打嘅效率（攞到數據）－「啲數據係咪合符佢嘅原先預期」就反映佢個模型掂唔掂。
**有好多做電腦模擬研究嘅科學家都覺得確認呢個工序好緊要－電腦模擬嘅方法曾經受唔少人抨擊，覺得呢啲模型傾向抽象化得滯，而成功噉確認一個電腦模擬模型反映嗰個模型能夠描述現實，令個模型唔淨只係流於理論。

## 創發嘅啟示

有哲學家指出，電腦模擬對理解創發嘅現象嚟講至關重要。創發係一種現象，指一樣由好多唔同部份組成嘅事物具有一啲佢組成部份冇嘅特性。好似係水噉，水喺化學上由氫同氧呢兩種化學元素組成嘅，水喺正常溫度同壓力下處於液體狀態，而呢種特性係氫同氧都冇嘅（氫同氧喺正常溫度壓力下會呈氣體狀態）－水具有最少一樣「氫同氧唔具有嘅特性」（創發出嚟嗰樣特性）；又或者好似係一個人噉，正常健康嘅人識行路識思考，而呢啲嘢都係組成人類身體嘅個別細胞唔能夠獨力做到嘅；創發仲可以分做兩種－弱創發同強創發，弱創發係指創發出嚟嗰樣特性係可以由啲組成部份嘅特性解釋嘅，而強創發係指創發出嚟嗰樣特性係**冇得**由啲組成部份嘅特性嚟解釋。

呢啲哲學家主張，電腦模擬嘅技術好幫到手理解弱創發嘅現象：研究者可以將一個預想中嘅系統寫做一個電腦模擬程式，個程式曉做（人手計唔嚟嘅）「foreach 組成部份，做噉噉噉嘅運算」；而事實係，會用得電腦模擬嘅，好多時都係因為研究緊嗰樣現象有返咁上下複雜，齋靠用個人腦諗唔能夠想像到個系統會出現乜嘢特性；不過假設個模型係掂嘅，個研究者跟住就有得靠住個模型，睇到個整體系統會出現啲乜嘢特性－包括係個系統有冇啲柞組成部份冇嘅特性，從而攞到一啲冇電腦模擬就攞唔到、有關弱創發嘅資訊。

## 睇埋
*模擬器
*離散化
*時間序列
*運算理論
*統計模型
*情景計劃
*模擬遊戲

## 文獻

*Desa, W. L. H. M., Kamaruddin, S., & Nawawi, M. K. M. (2012). Modeling of aircraft composite parts using simulation (PDF). In Advanced Materials Research (Vol. 591, pp. 557-560). Trans Tech Publications Ltd.
*Downey, A. (2021). Think Bayes (PDF). " O'Reilly Media, Inc."，呢本書入門式噉介紹貝葉斯統計，當中 **5.4** 嗰度提到，電腦模擬其中一個缺點係，佢哋只能夠提供大致正確嘅結果。
*Hartmann, S. (1996). The world as a process (PDF). In *Modelling and simulation in the social sciences from the philosophy of science point of view* (pp. 77-100). Springer, Dordrecht.
*Kaizer, J. S., Heller, A. K., & Oberkampf, W. L. (2015). Scientific computer simulation review (PDF). *Reliability Engineering & System Safety*, 138, 210-218.
*Macal, C. M., & North, M. J. (2008, December). Agent-based modeling and simulation: ABMS examples (PDF). In *2008 Winter Simulation Conference* (pp. 101-112). IEEE.
*McClelland, J. L. (2009). The place of modeling in cognitive science (PDF). *Topics in Cognitive Science*, 1(1), 11-38.
*Nutaro, J. J. (2011). ''Building software for simulation: Theory and algorithms, with application in C++'' (PDF). John Wiley & Sons Ltd.
*Schelling, T. C., (1971). "Dynamic Models of Segregation (PDF)," *Journal of Mathematical Sociology*, 1: 143–186.
*Winsberg, E. (2003). Simulated experiments: Methodology for a virtual world (PDF). *Philosophy of science*, 70(1), 105-125.

## 註釋

## 引述
篇文用咗嘅行話，英文名如下：

篇文引用咗以下呢啲文獻同網頁：

## 拎

* 科學中嘅電腦模擬，史丹福哲學百科全書
* 科學上嘅模型，史丹福哲學百科全書