剛性方程(stiff equation)
想像一個過程同時帶有閃電般的快速瞬變與緩慢溫和的漂移——像把一根燒熱的針丟進溫暖的房間,針的溫度瞬間崩降到室溫,然後兩者再花上幾分鐘趨向平衡。在快的部分早已消逝後,你只在乎慢的部分——但顯式求解器仍對如今無關緊要的快速模態心存恐懼,拒絕走一個合理大小的步。這個令人抓狂的情況,就是「剛性」方程。
剛性源於系統具有相距極遠的時間尺度:雅可比矩陣(f 的線性化)的特徵值 lambda 大小差異極大,有些實部為大負數(快速衰減)、有些很小(緩慢演化)。快模態幾乎瞬間衰減,對答案不再重要——但它們仍掌控「穩定性」。顯式方法必須讓 h*lambda 對「每個」lambda 都落在它小小的穩定區域內,包括那個巨大的快模態,所以即使該模態已消失,它仍被迫走大小為 1/|lambda_fast| 的步,而準確度本來樂於允許大上一千倍的步。工作量由你不再在乎的模態的穩定性決定,而非由你在乎的模態的準確度決定。
解法是用一個穩定區域覆蓋整個左半平面的方法:像後向歐拉法這樣的「隱式」方法,或實務上的 BDF 家族。它們是 A-穩定(或近乎如此),所以快模態從不威脅穩定性,你可以走只由慢動力學準確度所決定的大步。誠實的要點是:剛性是「問題加上準確度需求」共同的性質,而非清楚的是非(當顯式方法被迫走遠小於準確度所需的步時,問題才算「剛性」);自動偵測它本身並不簡單(好的求解器會在顯式與隱式模式間切換);而剛性求解器為每個隱式步付出一個非線性求解的代價,所以每步較慢,但靠走遠少的步而整體取勝。讓模擬爬行的,通常是剛性,而非單純的規模大。
系統 y1' = -1000*(y1 - cos t)、y2' = -y2 混合了一個衰減如 e^(-1000t) 的模態(在 t = 0.01 後基本消失)與一個衰減如 e^(-t) 的模態。要走到 t = 10,前向歐拉法被快模態逼得用 h < 0.002——超過 5000 步——儘管 t = 0.01 之後再沒有任何快速的事發生。BDF 或後向歐拉法全程走大小 0.1 的步,少了 50 倍。
快速但已消亡的模態,在它們不再重要後仍長久節流顯式步長——隱式方法得以脫身。
剛性「不」等於解變化快——解可以變化快卻非剛性,而剛性問題也可以有一個完全平滑、緩慢的解,其快模態早已消亡。它的特徵是:顯式方法被迫走遠小於單憑準確度所需的步。