2007/04/26

LU Decomposition

前幾週想到這個 C++ data abstraction 示例,感覺上還不錯,把很多重點都串起來了,描述如下:

  1. 造出基本的 SquareMatrix class:這裡涵蓋基本的 class 概念,constructor 與 (member) function 的撰寫,arithmetic operator overloading,以及 const correctness。可能被挑剔的一點是:我習慣把 call operator 寫成矩陣元素存取,這在 C++ 其實是 unconventional usage。
  2. 寫出回返 L 和 U 兩個矩陣的函式:演算法本身當然需要稍加描繪(嚴謹證明部份可暫且省略),記得闡明這個函式為 const。
  3. 實作 cached LU 分解:算出 L 和 U 之後暫存起來,只要矩陣內容不變,下次索取 L, U 時可直接回傳。「矩陣值變」的判準暫先採用「non-const call operator 被呼叫」。儲存 L 和 U 的記憶體採用動態配置,所以 copy-control 三成員要補上,其中 copy assignment operator 使用 copy-n-swap idiom,所以也涉及一點 exception safety。分解函式為 const,但可能修改指向 L, U 的 pointer,所以比較罕見一點的 mutable members 也自然進入視野。
  4. 用 proxy objects 更精確掌控矩陣的修改時機:上一步驟的矩陣值變判準顯然不夠精確,所以此步令 non-const call operator 傳回一個 proxy object,精確判定矩陣元素是否被修改。撰寫 proxy object 也會用到 conversion operator。

感覺上值得寫成文章 XD。可是前一篇 ACM #476 ~ 478 都還沒寫完,從大一寫到現在 XD。(後者是從 476 ~ 478 引出多型,然後進一步模仿《Modern C++ Design》實作簡單、特化的 object factory(which is a Singleton),是 OOP 的例子。)

--
寫成文章的話,大概得寫 LU 'P' 分解 XD。

Labels:

Blogger yen34/26/2007 6:02 pm 說:

想寫什麼就寫什麼吧

 

<< 回到主頁