• 沒有找到結果。

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 1mM,其中 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

兩矩陣相對應元素誤差之絕對值

兩矩陣相對應元素誤差之絕對值加總後的結果

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

相關文件