病態系統

本文的閱讀等級:初級

自1940年代末起,計算機科學的急速發展徹底改變了線性代數原本的純理論面貌,其中數值方法與分析──計算機科學與應用數學的交叉學科──就是將線性代數推廣至各類應用領域的主要推手。長久以來,學者早已察覺線性代數存在一些特有的數值計算問題,如果不設法解決這些問題,線性代數的應用恐怕只能流於空談。這篇短文從一個簡單的線性方程例子解釋何以矩陣的敏感性分析是一個無法逃避的研究課題,由此讀者可以體會誤差分析於數值線性代數的重要性。

 
例一:考慮線性方程組

\begin{aligned}  .540x_1+.387x_2&=.927\\    .647x_1+.323x_2&=.970\end{aligned}

真確解為 (x_1,x_2)=(1,1)。若 b_1=.927 受到微小擾動變更為 b^{\prime}_1=.926,計算至小數點後六位數的解為 (x_1,x_2)=(1.004252,.991483),兩組解並沒有顯著的差異。

 
例二:考慮線性方程組

\begin{aligned}    .540x_1+.323x_2&=.863\\    .647x_1+.387x_2&=1.034\end{aligned}

真確解為 (x_1,x_2)=(1,1)。同樣地,若 b_1=.863 替換為 b_1^{\prime}=.864,令人無法置信,真確解劇烈改變為 (x_1,x_2)=(-386,648)

 
例二的方程解對於微小的擾動極其敏感,這種敏感性並非由數值計算造成,而是來自線性系統本身。下圖解釋造成例二 2\times 2 系統對輕微擾動如此敏感的原因在於兩個方程式所代表的直線幾乎平行,只要任一直線稍稍上下平移,即可引發交點位置的明顯變化。換句話說,我們無法透過數值演算途徑消彌這種敏感性,一旦它存在於線性系統內就永遠擺脫不了這個問題。為界定線性系統受微小擾動造成方程解巨大變化的現象,我們稱這樣的系統是病態的 (ill-conditioned);反之,則稱系統是良置的 (well-conditioned)。

病態系統圖示

 
病態系統不能歸罪於計算誤差,根本問題在於不良的系統設計或不當的資料收集,但無論確切原因為何,這是每一位矩陣使用者最不願意遇到的情況。下面我們再說明一個病態系統令人不安的案例。考慮模型建立時常見的殘差 (residual) 分析,設 An 階方陣,如果線性方程 A\mathbf{x}=\mathbf{b} 的數值解為 \hat{\mathbf{x}},我們定義殘差為

\mathbf{e}=\mathbf{b}-A\hat{\mathbf{x}}

如果 \mathbf{e} 包含的各個殘差量都很小,這是否表示 \hat{\mathbf{x}} 靠近真確解?例二中,假設數值解為 (\hat{x}_1,\hat{x}_2)=(324, -539),代入上式計算得到

\begin{aligned}  e_1&=.863-.540\hat{x}_1-.323\hat{x}_2=0\\    e_2&=1.034-.647\hat{x}_1-.387\hat{x}_2=-.001\end{aligned}

第一個方程式的殘差值為零,第二個方程式的殘差相對其他係數也很小,這讓我們對此數值解深具信心,甚至以為解的誤差範圍也在 \pm .001 之間。事實上,真確解為 (x_1,x_2)=(1,1)。這個案例顯示病態系統可能造成的災難,它摧毀過去我們認為理所當然並且信以為真的分析基礎。

 
既然病態系統如此危險,給出了定性描述之後,我們希望設計出病態系統的定量偵測方法。從上面的幾何圖解可知病態系統非常接近不可逆系統,這項觀察結果似乎可用來發展病態系統的判別方法。自然地,我們可以考慮行列式於度量病態系統的適用性。若 An 階方陣,\mathrm{det}A=0 等於不可逆,那麼 \mathrm{det}A\approx 0 也表示非常接近不可逆嗎?如例二,

\det A=\begin{vmatrix}    .540&.323\\    .647&.387    \end{vmatrix}=-10^{-6}

如果將兩個方程式左右通乘 100,則

\det A^{\prime}=\begin{vmatrix}    540&323\\    647&387    \end{vmatrix}=-1

但這不表示 A^{\prime} 不為病態矩陣,因為兩條直線在平面的座落位置並未改變。另一方面,既使是良置系統也可能有很小的行列式值,如下例:

\begin{vmatrix}    .001&0\\    0&.001    \end{vmatrix}=10^{-6}

不幸地,引用行列式的單純想法宣告失敗,係數矩陣的行列式與線性系統是否為病態或良置沒有什麼相關性。

 
今天,病態系統的界定與分析方法已發展完善,這裡面最主要的概念稱為條件數 (condition number)。1947年,美國數學家諾伊曼 (John von Neumann) 和戈德斯坦 (Herman Goldstine) 首先引入條件數於分析矩陣數值計算的捨入誤差,同時也為界定病態系統的有效指標。條件數涉及較為複雜的矩陣分析技術,請見“條件數”。

This entry was posted in 線性代數專欄, 數值線性代數 and tagged , , , . Bookmark the permalink.

1 則回應給 病態系統

  1. Trent 說:

    解釋的真好!
    所以要檢查數值解是否正確,不能單單從residual著手。
    更要同時觀察此線性系統的condition number。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

你正使用 WordPress.com 帳號留言。 登出 / 變更 )

Twitter picture

你正使用 Twitter 帳號留言。 登出 / 變更 )

Facebook照片

你正使用 Facebook 帳號留言。 登出 / 變更 )

Google+ photo

你正使用 Google+ 帳號留言。 登出 / 變更 )

連結到 %s