Commons Math學(xué)習(xí)筆記——矩陣
1.2 矩陣
看其他篇章到目錄選擇。
今天來第二篇:矩陣——Matrix。
Math包org.apache.commons.math.linear里對矩陣的表示是有一個層次結(jié)構(gòu)的。
最頂層的AnyMatrix是一個基本的interface。下面有3個sub interface:BigMatrix, FieldMatrix<T>, RealMatrix。而每個sub interface分別被相應(yīng)的矩陣類實現(xiàn)。整個矩陣的層次結(jié)構(gòu)也就出來了。不過其中的BigMatrix已經(jīng)不用了。被Array2DRowFieldMatrix替代了。

具體拿RealMatrix來說。
RealMatrix是一個可以表示實數(shù)類型數(shù)據(jù)的矩陣接口,實現(xiàn)RealMatrix接口的類有AbstractRealMatrix。它的子類有Array2DRowRealMatrix, BlockRealMatrix, OpenMapRealMatrix, RealMatrixImpl。
今天以Array2DRowRealMatrix為例研究一下矩陣Matrix都有哪些操作。
我認(rèn)為通常最簡單的學(xué)習(xí)方式就是直接看代碼樣例,為此,我寫了使用Matrix的樣例代碼,通過代碼的演示來看看如何使用Array2DRowRealMatrix。
Array2DRowRealMatrix的內(nèi)部實現(xiàn)是一個2維double類型的數(shù)組double [][]data;。它的getData方法可以返回對應(yīng)的數(shù)組表示。LU decomposition用來進(jìn)行矩陣的分解及相關(guān)操作,Array2DRowRealMatrix中有幾個方法已經(jīng)過時,均被LU decomposition取代。像矩陣的求逆運算、特征值以及奇異性等。矩陣的一些分解運算,我想還是放到后面再研究吧。代碼一次太多也不好,嘻嘻。
具體的代碼實現(xiàn)里有注釋和輸出提示,我想這樣的代碼大家運行后基本就能完全理解Array2DRowRealMatrix的所有操作了。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

運行結(jié)果:
matrix is Array2DRowRealMatrix{{1.0,2.0,3.0},{2.0,5.0,3.0},{1.0,0.0,8.0}}
it is square matrix! : true
row dimension is 3
column dimension is 3
mat1 + mat1 = Array2DRowRealMatrix{{2.0,4.0,6.0},{4.0,10.0,6.0},{2.0,0.0,16.0}}
mat1 + 5 = Array2DRowRealMatrix{{6.0,7.0,8.0},{7.0,10.0,8.0},{6.0,5.0,13.0}}
mat1 - mat1 = Array2DRowRealMatrix{{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0}}
the maximum absolute row sum norm is 14.0
mat1 * t_mat = Array2DRowRealMatrix{{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0}}
mat1 * 5.0 = Array2DRowRealMatrix{{5.0,10.0,15.0},{10.0,25.0,15.0},{5.0,0.0,40.0}}
t_mat * mat1 = Array2DRowRealMatrix{{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0}}
the trace is 14.0
the transpose of mat1 is Array2DRowRealMatrix{{1.0,2.0,1.0},{2.0,5.0,0.0},{3.0,3.0,8.0}}
the first row vector is {1; 2; 3}
sub matrix of mat1 is Array2DRowRealMatrix{{2.0,3.0},{0.0,8.0}}
AnyMatrix接口只定義了最基本的操作,獲取維度和判斷方陣。
RealMatrix接口擴(kuò)展了AnyMatrix,定義了一些操作,比如加減乘等。
AbstractRealMatrix抽象類實現(xiàn)了RealMatrix,定義了更多的get方法,可以獲得更多矩陣相關(guān)的參數(shù),比如矩陣的秩、矩陣的跡、矩陣的特征值和矩陣的轉(zhuǎn)置等。
Array2DRowRealMatrix繼承了AbstractRealMatrix,將里面的抽象方法全部實現(xiàn)。
其中的multiply矩陣乘法運算,multiply返回的是this*m;而preMultiply返回的是m*this。
另外值得一提的是,linear包里有MatrixUtils類提供了一系列靜態(tài)方法用來檢測矩陣,其中的方法主要以check***為主,檢測矩陣的合法性。
相關(guān)資料:
矩陣知識:http://zh.wikipedia.org/zh/%E7%9F%A9%E9%98%B5
Commons math包:http://commons.apache.org/math/index.html
posted on 2010-12-11 21:12 changedi 閱讀(4081) 評論(3) 編輯 收藏 所屬分類: 數(shù)學(xué)