3. 演算法與程式設計
3.4 程式設計
國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3.4 程式設計
本程式以 MATLAB 軟體設計,程式設計包含 4 個部分:(1) 輸入端檢查 (2) IBD 程
式 (3) Rank One 程式 (4) 對應矩陣 A 及 B 的聯合機率矩陣JAB程式。
3.4.1 輸入端檢查:
設計判斷輸入端矩陣 A 及 B 是否符合條件矩陣型式,使用者在視窗介面下呼叫執
行檔 Main,並利用 Excel 輸入或讀入 A 及 B 矩陣資料,由程式判定是否為條件矩陣,
以決定是否執行 IBD、Rank One 程式,若不符合,則顯示不合之處,供使用者調整。
如下例所示:(黑框內為 MATLAB 程式視窗之擷取畫面,紅框為作者額外標記)
例 5:給定的矩陣A及B皆不是條件矩陣
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
例 6:給定的矩陣A及B為條件矩陣但不滿足NA NB,故A及B不相容
3.4.2 IBD 程式:
透過輸入端檢查後,若輸入的矩陣為滿足NA NB的條件矩陣 A 及 B,本程式會
詢問是否執行 IBD 程式,若同意則產生比值矩陣C並執行 IBD 程式得出T(C)矩陣(程式
以 C_IBD 表示),IBD 程式會記錄轉換成T(C)矩陣之列指標順序E 集合(程式以 E_seto
表示)與行指標順序F 集合(程式以 F_set 表示),並列出不可約化塊狀對角矩陣個數 M (程o
式以 IBD_Number 表示 )。
如下例所示:
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
例 7:給定的矩陣A及B為條件矩陣且滿足NA NB,故可執行IBD程式檔,並執行之。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3.4.3 Rank One 程式
執行 IBD 程式後,延續 IBD 程式,會再詢問是否要執行 Rank One 程式,同意後
Rank One 程式會將T(C)矩陣中的不可約化塊狀對角矩陣T ,m 1mM,其中 M 為不
可約化塊狀對角矩陣個數(程式以 IBD_Number 表示),依T ,1 T ,2 ,T 的順序逐步檢M
驗T 是否為秩 1 矩陣;若每個m T 矩陣皆為秩 1,則顯示對應m T 矩陣的m u 及m v 向量,m
並顯示填值後的T(C)矩陣T(C)(程式以 C_IBD_bar 表示);若其中任一個不為秩 1,如第
m 個,則顯示T 不是秩 1 矩陣,即表 A 及 B 矩陣不相容,並中斷執行。m
承例 7 (執行 IBD 程式後) 續跑 Rank One 程式
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
顯示填值後的T(C)矩陣T(C)(程式以C_IBD_bar表示)
3.4.4 對應矩陣 A 及 B 的聯合機率矩陣
JAB程式
延續 Rank One 程式,若執行後每個不可約化的塊狀對角矩陣T 可填值為秩 1 矩m
陣,則表示 A 及 B 矩陣是相容的,會再詢問是否求出對應 A 及 B 的聯合機率矩陣JAB,
同意後,輸入 M 個正值比重k1, , km, , kM後,程式首先將比重正規化,再利用
Rank One 程式所記錄每個T 填值產生的m u 及比重正規化值得出m u (程式將以 uk 表k
示),最後又再利用 IBD 程式轉換成T(C)矩陣所記錄之列指標順序E 集合還原o u 順序k
得出w (程式將以 wk 表示),最後將k w 正規對角化後與 B 矩陣相乘即可求出k JAB (程
式以 J_AB 表示),詳如JAB演算法。
如下例所示:(本例輸入k1 1 及 k2 1)
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
承承例例 77(執(執行行RRaannkkOnOnee 程程式式後後)) 續跑續跑JAB程式程式
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
下面例子顯示A及B滿足NA NB的條件矩陣但不相容
例 8: 給定的矩陣 A 及 B 為條件矩陣且滿足NA NB,執行 IB D 程式,再執行 Rank One
程式後,發現不相容
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3.4.5 程式測試之設計:
本節另外設計程式,以隨機產生聯合機率矩陣 J,再由 J 矩陣造出條件矩陣 A 及 B
予本程式執行,觀察執行後產生的JAB矩陣與 J 矩陣誤差結果是否達合理範圍,在程式
設計上我們要求兩矩陣對應元素的誤差要小於1010。
J 矩陣和JAB矩陣的可能誤差主要發生在 Rank One 程式填值時。為檢驗 J 矩陣所造
的 C 矩陣是否為秩 1 矩陣,程式設計上,因為做矩陣相除的關係,可能產生數值誤差,
取值過程中,若兩個值的誤差除以兩者較小值不超過1010,則設定此兩個值相等,並取
最大值為共同值。最後所求之JAB矩陣與原造 J 矩陣內相對應元素誤差之絕對值皆小於
1010,本程式設計已符合需求。
如下例所示:(黑框內為 MATLAB 程式視窗之擷取畫面,箭頭與藍字為作者額外標記)
矩陣矩陣大大小小以以11000000x1x1000000為例為例
由J由J矩矩陣陣造造出出條條件件矩矩陣陣AA及及BB
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖為 Matlab 程式視窗下所顯示之條件矩陣 A 及 B
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
註: 本文末附錄為本程式所寫之使用說明與程式碼,供讀者參考。
隨機產生之聯合機率矩陣 J,IBD Number =1
執行程式後所得出之聯合機率矩陣 JAB
兩矩陣相對應元素誤差之絕對值
兩矩陣相對應元素誤差之絕對值加總後的結果