有限差分法(finite-difference method)
導數是比值的極限——當兩個鄰近點滑到重合時你所趨近的斜率。電腦無法真的取那個極限,但它可以對相距一小段有限距離的兩點去算那個比值。有限差分法就建立在這唯一的取捨上:在空間(與時間)上鋪一張網格,把每個導數換成相鄰網格值之間的差,微分方程於是變成你能以蠻力求解的普通算術。
標準的組件來自泰勒展開。一階導數可用中央差分 df/dx ~= (f(x + h) - f(x - h)) / (2 h) 近似,誤差為 h^2 階;或用單邊的前向差分 (f(x + h) - f(x)) / h,誤差為 h 階。二階導數則變成 d^2f/dx^2 ~= (f(x + h) - 2 f(x) + f(x - h)) / h^2。把這些差分模板代入偏微分方程,例如帕松方程或熱傳導方程,就會把它變成一組把各網格節點值連起來的大型代數方程組,再以線性代數或隨時間往前推進來求解。
凡是做數值物理的地方你都會遇到它:在晶格上解薛丁格方程、計算靜電位、模擬熱流與流體力學。最關鍵的警告是穩定性。顯式的時間推進格式,只有在時間步相對於空間步夠小時才穩定,這個界限由庫朗-弗里德里希斯-列維(CFL)條件表達;一旦違反,數值解就會爆發成毫無意義的振盪。這裡還有一個張力:更細的網格降低離散化誤差,卻迫使時間步更小、計算量更大,而且它完全無法觸及捨入誤差。
要求出無電荷區域中的靜電位,你把拉普拉斯方程離散化到網格上;二階差分模板使每個內部節點的電位等於其四個相鄰節點的平均,於是反覆做這個平均(鬆弛法)直到不再變化,就得到解。
網格上的拉普拉斯方程:每個節點鬆弛到相鄰點的平均值。
細化網格能降低離散化誤差卻無法降低捨入誤差,而且在顯式時間推進格式中,較小的空間步會透過 CFL 穩定條件迫使時間步也變小,因此計算成本可能比解析度增長得更快。