矩陣乘法

矩陣乘法

數學學科内容
矩陣相乘最重要的方法是一般矩陣乘積。它隻有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義。一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由于它把許多數據緊湊地集中到了一起,所以有時候可以簡便地表示一些複雜的模型,如電力系統網絡模型。矩陣乘法是最簡單的數學問題,同時由于其計算量大而通常被用來對計算機的浮點運算速度進行測試,尤其是對于并行計算機,其并行效率的好壞可通過這個簡單的問題反應出來,如果在這個問題上都不能取得很好的效果,對于其它問題就更不可能。此外,為了提高計算性能,對求解數值代數中的問題最終會歸結到有矩陣乘法的計算[1]。
    中文名:矩陣乘法 外文名:Matrix multiplication 适用領域: 所屬學科: 類别:對稱矩陣等 應用學科:數學、工程學、信息學 應用領域:代數,離散 基本性質:結合性等

定義

設A為的矩陣,B為的矩陣,那麼稱的矩陣C為矩陣A與B的乘積,記作,其中矩陣C中的第行第列元素可以表示為:

如下所示:

注意事項

1、當矩陣A的列數(column)等于矩陣B的行數(row)時,A與B可以相乘。

2、矩陣C的行數等于矩陣A的行數,C的列數等于B的列數。

3、乘積C的第m行第n列的元素等于矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。

基本性質

乘法結合律:(AB)C=A(BC)

乘法左分配律:(A+B)C=AC+BC

乘法右分配律:C(A+B)=CA+CB

對數乘的結合性k(AB)=(kA)B=A(kB).

轉置(AB)T=BTAT

矩陣乘法在以下兩種情況下滿足交換律。

AA*=A*A,A和伴随矩陣相乘滿足交換律。

AE=EA,A和單位矩陣或數量矩陣滿足交換律。

其他的乘積形式

除了上述的矩陣乘法以外,還有其他一些特殊的“乘積”形式被定義在矩陣上,值得注意的是,當提及“矩陣相乘”或者“矩陣乘法”的時候,并不是指代這些特殊的乘積形式,而是定義中所描述的矩陣乘法。在描述這些特殊乘積時,使用這些運算的專用名稱和符号來避免表述歧義。

哈達馬積(Hadamardproduct)

矩陣矩陣的Hadamard積記作。其元素定義為兩個矩陣對應元素的乘積的m×n矩陣。例如,

克羅内克積(KroneckerProduct)

克羅内克積是兩個任意大小的矩陣間的運算,符号記作。克羅内克積也被稱為直積或張量積.以德國數學家利奧波德·克羅内克命名。計算過程如下例所示:

實現

C++代碼

1

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

62

63

64

65

66

67

68

69

70

71

72

73

structMatrix:vector>//使用标準容器vector做基類,需#include語句

{

Matrix(intx=0,inty=0,intz=0)//初始化,默認為0行0列空矩陣

{

assign(x,vector(y,z));

}

inth_size()const//常量說明不可省,否則編譯無法通過

{

returnsize();

}

intl_size()const

{

returnempty()?0:front().size();//列數要考慮空矩陣的情況

}

Matrixpow(intk);//矩陣的k次幂,用快速幂實現,k為0時返回此矩陣的單位矩陣

};

Matrixoperator*(constMatrix&m,constMatrix&n)//常量引用避免拷貝

{

if(m.l_size()!=n.h_size())returnMatrix();//非法運算返回空矩陣

Matrixans(m.h_size(),n.l_size());

for(inti=0;i!=ans.h_size();++i)

for(intj=0;j!=ans.l_size();++j)

for(intk=0;k!=m.l_size();++k)

ans[i][j]+=m[i][k]*n[k][j];

returnans;

}

MatrixMatrix::pow(intk)

{

if(k==0)

{

Matrixans(h_size(),h_size());

for(inti=0;i!=ans.h_size();++i)

ans[i][i]=1;

returnans;

}

if(k==2)return(*this)*(*this);

if(k%2)returnpow(k-1)*(*this);

returnpow(k/2).pow(2);

}

實際應用

數據統計

某公司有四個工廠,分布在不同地區,同時三種産品,産量(單位;t),試用矩陣統計這些數據。

工廠産品

P1

P2

P3

5

2

4

3

8

2

6

0

4

0

1

6

可用下述矩陣描述,其中四行分别表示甲乙丙丁四個工廠的生産情況,三列分布表示三種産品P1,P2,P3的産量。

再設矩陣,其中第一列表示三種産品的單件利潤,第二列表示三種産品的單件體積。

矩陣C的第一列數據分别表示四個工廠的利潤,第二列分别表示四個工廠産品需要的存儲空間。

路徑問題

給定一個有向圖,問從A點恰好走k步(允許重複經過邊)到達B點的方案數。

把給定的圖轉為鄰接矩陣,即A(i,j)=1當且僅當存在一條邊i->j。令C=A*A,那麼C(i,j)=ΣA(i,k)*A(k,j),實際上就等于從點i到點j恰好經過2條邊的路徑數(枚舉k為中轉點)。類似地,C*A的第i行第j列就表示從i到j經過3條邊的路徑數。同理,如果要求經過k步的路徑數,我們隻需要二分求出A^k即可。

上一篇:亨利定律

下一篇:靜止土壓力

相關詞條

相關搜索

其它詞條