上個月對math.net的基本使用進行了介紹,主要内容有矩陣,向量的相關操作,解析資料格式,數值積分,資料統計,相關函數,求解線性方程組以及随機數發生器的相關内容。這個月接着深入發掘math.net的各種功能,并對源代碼進行分析,使得大家可以盡可能的使用math.net在.net平台下輕易的開發數學計算相關的,或者可以将其中的源碼快速移植到自己的系統中去(有時候并不需要所有的功能,隻需要其中的部分功能代碼),今天要介紹的是math.net中利用c#計算矩陣條件數的功能。
矩陣條件數的概念比較難懂,以前學線性代數的時候,還比較了解,很久沒接觸了,也忘記了,是以理論部分引用百科的内容,對需要的還是看課本比較好。如果太複雜可以直接跳過看調用即可。但為了保持支援的完整性,我還是寫出來。
矩陣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中計算矩陣條件數的過程,就是直接調用計算即可。
結果如下: