常微分方程的數值方法

自適應步長控制(adaptive step-size control)

駕駛不會整趟旅程都保持一個固定速度——他們在髮夾彎慢到爬行,在空曠的直路上全力加速。固定步長的 ODE 求解器就像處處用同一速度開車:在解平靜處慢得浪費,在解劇變處快得危險。自適應步長控制讓求解器即時改變步長 h,在解平滑處放大、在解尖銳處縮小,使達到目標準確度所需的工作最少。

機制是:每一步估計局部誤差(通常來自嵌入式龍格-庫塔對,或預測器與校正器之間的差距)。把估計值 err 與使用者「容差」tol 比較。若 err 低於 tol,就「接受」這一步,而既然有餘裕,就為下一步「放大」h;若 err 超過 tol,就「拒絕」這一步並用更小的 h「重做」。新步長由類似 h_new = h * safety * (tol/err)^(1/(p+1)) 的公式選出,其中 p 是方法的階,safety 是略小於 1 的係數以避免反覆被拒。容差通常混合絕對與相對兩部分,tol = atol + rtol*|y|,使無論解很大或趨近零都能合理縮放。

自適應正是讓求解器既「穩健」又「高效」的關鍵:它在突發尖峰處自動走數千個謹慎的小步,在漫長平靜的區段走少數幾個巨大的步,全為把誤差維持在你要求的容差附近。誠實之處在於:控制器導引的是「局部」(每步)誤差,它只鬆散地界定「全域」誤差——在長時間或混沌的計算上,嚴格的容差不保證全域上的緊答案。容差設得太鬆,答案是垃圾;太緊,你會淹沒在無數小步與捨入誤差裡。而自適應顯式方法仍救不了剛性問題;那裡步長是被「穩定性」而非準確度夾到極小,你必須改用隱式求解器。

積分一個偶爾受到猛烈撞擊的擺:撞擊之間解平滑,所以控制器把 h 拉長以大步前進;撞擊一來,誤差估計就飆過容差,這一步被拒絕並用約縮小 10 倍的 h 重試,求解器小心地爬過這段瞬變,再重新放開。使用者設定 tol = 1e-6,從不手動碰 h。

平滑處大步、尖銳處小步——把誤差維持在所要求的容差附近。

控制器界定的是每步的「局部」誤差,而非全域誤差,所以小容差是全域準確的必要而非充分條件。而在剛性問題上,顯式求解器的步長受穩定性而非準確度節流——此時自適應只會永遠產生極小的步;應改用隱式方法。

又称
adaptive time-steppingautomatic step-size selectionstep-size adaptation自適應時間步進可變步長