基礎:演算法、近似與誤差

數值演算法

演算法是一串定義明確的有限步驟,把輸入變成輸出——就像機器能照著做、不需自行判斷的食譜。數值演算法的輸入與輸出是數字(或數字陣列),其任務是為某個數學問題計算近似答案:解 A x = b、求 f 的根、對函數積分、擬合曲線。

要成為真正的演算法,須具備三件事。它必須有限:在確定的步數後一定停止(迭代法需要停止準則,否則就不是演算法)。它必須定義明確:給定當前資料,每一步都毫無歧義,因此兩個人手算會得到相同結果。它必須有清楚的輸入-輸出約定:明確說明它消耗什麼(一個矩陣、一個容忍度、一個初始猜測)以及承諾回傳什麼(一個解、一個估計、一個錯誤旗標)。例如,二分法接受連續函數 f、一個 f(a) 與 f(b) 異號的區間 [a, b],以及一個容忍度;它反覆把區間對半,回傳一個落在根的容忍度內的點。

同一個數學問題通常有很多演算法,而且優劣不一。它們在精度(結果有多接近)、成本(工作量與記憶體如何隨問題規模增長,常寫成 O(n^2) 或 O(n^3))、以及穩定性(捨入與小的輸入誤差是否被放大)上各有不同。好的選擇須權衡這三者;最快的方法若不穩定就毫無用處,最準的方法若永不終止也毫無用處。

高斯消去法是一種數值演算法:輸入矩陣 A 與向量 b;逐列消去未知數以化為三角系統;回代;輸出滿足 A x = b 的 x,對 n 階系統其成本約為 O(n^3) 次運算。

清楚的輸入、有限而無歧義的步驟、明確的輸出、已知的成本——演算法的四個標誌。

永遠循環(沒有停止準則)的虛擬碼不是演算法。迭代法只有在你定下何時停止後,才成為演算法。

又称
numerical methodnumerical procedure數值方法演算法