殘差誤差檢查(residual error check)
你通常無法量出答案有多錯,因為那得知道你並不擁有的真實答案。但有一個便宜、可計算的合理性檢查,幾乎總能執行:把你算出的答案代回方程式,看它有多不平衡。剩下的這份不平衡就是殘差,它是判斷一個算出的解值不值得信任的、實際的事後(a posteriori)方法。
對於線性系統 A x = b 與算出的解 x-hat,殘差是 r = b - A x-hat。若 x-hat 精確,殘差就會是零;其大小 ||r|| 衡量方程式剩下的不平衡。關鍵在於,殘差是向後誤差的量,不是向前誤差:相對殘差 ||r|| / (||A|| ||x-hat||) 很小,就證明 x-hat 恰好解出一個鄰近系統(A x-hat = b - r),也就是向後誤差很小。要把殘差變成向前誤差估計,你必須除過條件數——相對向前誤差大約是相對殘差乘以 kappa(A)。同樣的想法在線性系統之外也適用:對於求根答案 x-hat,殘差就是 f(x-hat),也就是函數離零有多遠。
誠實的警告,正是那個條件性陷阱的化身。殘差很小「不」保證解很準確。在病態問題上,你可能有漂亮的小殘差,卻仍離真實的 x 很遠,因為殘差報告的是向後誤差,而準確度需要的是向前誤差,條件數就夾在兩者之間。所以小殘差讓人對你的「演算法」放心(它向後穩定),但除非你也知道問題良態,否則它對「答案」說得很少。殘差檢查與迭代修正天然搭配,後者用殘差來打磨一個解。
你求解 A x = b,發現 ||b - A x-hat|| / (||A|| ||x-hat||) ~ 10^-15——一個極佳的殘差。但若 kappa(A) ~ 10^12,向前誤差仍為 ~ 10^-15 乘以 10^12 = 10^-3,所以儘管殘差極小,x-hat 也只該信任約 3 位數字。
小殘差衡量的是向後誤差;條件數才把它換算成實際的準確度。
小殘差證明的是向後誤差小,不是向前誤差小。在病態問題上,你可能有近乎零的殘差,卻有一個錯得離譜的解。