【原創】開源Math.NET基礎數學類庫使用(17)C#計算矩陣條件數

來源:互聯網
上載者:User

標籤:

               本部落格所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html

開源Math.NET基礎數學類庫使用總目錄:http://www.cnblogs.com/asxinyu/p/4329737.html

  上個月對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 ConditionNumber2 {3     get4     {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 number20 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,有介紹。由於源碼很大,如果找不到相應的案例,可以進行搜尋,可以比較快的找到相應的代碼。

【原創】開源Math.NET基礎數學類庫使用(17)C#計算矩陣條件數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.