矩陣A的條件數等于A的範數與A的逆的範數的乘積,即cond(A)=‖A‖·‖A^(-1)‖,對應矩陣的3種範數,相應地可以定義3種條件數。 函數 cond(A,1)、cond(A)或cond(A inf) 是判斷矩陣病态與否的一種度量,條件數越大矩陣越病态。條件數事實上表示了矩陣計算對于誤差的敏感性。對于線性方程組Ax=b,如果A的條件數大,b的微小改變就能引起解x較大的改變,數值穩定性差。如果A的條件數小,b有微小的改變,x的改變也很微小,數值穩定性好。它也可以表示b不變,而A有微小改變時,x的變化情況。
本部落格所有文章分類的總目錄:【總目錄】本部落格博文總目錄-實時更新
開源Math.NET基礎數學類庫使用總目錄:【目錄】開源Math.NET基礎數學類庫使用總目錄
上個月對Math.NET的基本使用進行了介紹,主要内容有矩陣,向量的相關操作,解析資料格式,數值積分,資料統計,相關函數,求解線性方程組以及随機數發生器的相關内容。這個月接着深入發掘Math.NET的各種功能,并對源代碼進行分析,使得大家可以盡可能的使用Math.NET在.NET平台下輕易的開發數學計算相關的,或者可以将其中的源碼快速移植到自己的系統中去(有時候并不需要所有的功能,隻需要其中的部分功能代碼),今天要介紹的是Math.NET中利用C#計算矩陣條件數的功能。
矩陣條件數的概念比較難懂,以前學線性代數的時候,還比較了解,很久沒接觸了,也忘記了,是以理論部分引用百科的内容,對需要的還是看課本比較好。如果太複雜可以直接跳過看調用即可。但為了保持支援的完整性,我還是寫出來。
本文原文位址:http://www.cnblogs.com/asxinyu/p/4304307.html
1.什麼是矩陣條件數
矩陣A的條件數等于A的範數與A的逆的範數的乘積,即cond(A)=‖A‖·‖A^(-1)‖,對應矩陣的3種範數,相應地可以定義3種條件數。 函數 cond(A,1)、cond(A)或cond(A inf) 是判斷矩陣病态與否的一種度量,條件數越大矩陣越病态。條件數事實上表示了矩陣計算對于誤差的敏感性。對于線性方程組Ax=b,如果A的條件數大,b的微小改變就能引起解x較大的改變,數值穩定性差。如果A的條件數小,b有微小的改變,x的改變也很微小,數值穩定性好。它也可以表示b不變,而A有微小改變時,x的變化情況。
2.Math.NET矩陣條件數的實作
Math.NET在對矩陣條件數的計算過程與行列式和秩的計算都相同,直接用在矩陣分解算法使用ConditionNumber來擷取,如上文http://www.cnblogs.com/asxinyu/p/4304304.html的代碼中就有ConditionNumber的實作。
1 public override float ConditionNumber
2 {
3 get
4 {
5 var tmp = Math.Min(U.RowCount, VT.ColumnCount) - 1;
6 return Math.Abs(S[0]) / Math.Abs(S[tmp]);
7 }
8 }
其他過程比較簡單雷同,就不再說明了。如有需要看源碼,重要的還是使用的情況。
3.Math.NET計算矩陣條件數的代碼
上述過程和原理隻是便于大家了解其實作過程,下面簡單示範一下在Math.NET中計算矩陣條件數的過程,就是直接調用計算即可。
1 // 格式設定
2 var formatProvider = (CultureInfo)CultureInfo.InvariantCulture.Clone();
3 formatProvider.TextInfo.ListSeparator = " ";
4 //建立一個随機的矩陣
5 var matrix = new DenseMatrix(5);
6 var rnd = new Random(1);
7 for (var i = 0; i < matrix.RowCount; i++)
8 {
9 for (var j = 0; j < matrix.ColumnCount; j++)
10 {
11 matrix[i, j] = rnd.NextDouble();
12 }
13 }
14
15 Console.WriteLine(@"Initial matrix");
16 Console.WriteLine(matrix.ToString("#0.00\t", formatProvider));
17 Console.WriteLine();
18
19 //條件數 Condition number
20 Console.WriteLine(@"矩陣條件數");
21 Console.WriteLine(matrix.ConditionNumber());
22 Console.WriteLine();
結果如下:
1 Initial matrix
2 DenseMatrix 5x5-Double
3 0.25 0.11 0.47 0.77 0.66
4 0.43 0.35 0.94 0.10 0.64
5 0.03 0.25 0.32 0.99 0.68
6 0.65 0.28 0.62 0.70 0.70
7 0.95 0.09 0.16 0.38 0.80
8
9
10 矩陣條件數
11 21.581238807809
4.資源
包括源代碼以及案例都可以去官網下載下傳,下載下傳位址本系列文章的目錄中第一篇文章:http://www.cnblogs.com/asxinyu/p/4264638.html,有介紹。由于源碼很大,如果找不到相應的案例,可以進行搜尋,可以比較快的找到相應的代碼。
.NET資料挖掘與機器學習,作者部落格:
http://www.cnblogs.com/asxinyu
E-mail:[email protected]