1.轉置矩陣
1.1轉置矩陣簡介
把矩陣A的行換成同序數的列得到的新矩陣,叫做A的轉置矩陣(Transpose of a Matrix),記作ATAT。
例如:
因此,轉置矩陣的特點:
(1)轉置矩陣的行數是原矩陣的列數,轉置矩陣的列數是原矩陣的行數;
(2)轉置矩陣下標(i,j)的元素對應於原矩陣下標(j,i)的元素。
1.2實現
使用二維數組作為矩陣的存儲結構,根據轉置矩陣的特點,很容易得到轉置矩陣。
-
/**************************************************
-
*@para:matrix:原矩陣;row:矩陣行數;column:矩陣列數
-
*@ret:返回轉置矩陣
-
**************************************************/
-
int** getTransposeMatrix(int** matrix,int row,int column){
-
int** matrixR=new int*[columns];
-
for(int i=0;i<columns;++i){
-
matrixR[i]= new int[rows];
-
}
-
-
for(int i=0;i<row;++i){
-
for(int j=0;j<column;++j){
-
matrixR[j][i]=matrix[i][j];
-
}
-
}
-
return matrixR;
-
}
2.矩陣相乘
2.1矩陣相乘簡介
矩陣相乘的特點:
(1)當矩陣A的列數等於矩陣B的行數時,A與B才可以相乘。
(2)乘積C的第m行第n列的元素等於矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。
(3)矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。
2.2示例代碼
-
/********************************************
-
*@para:A:矩陣A;B:矩陣B;C:相乘結果矩陣;rowA:A的行數;columnB:B的列數;columnA:A的列數
-
*@ret:void
-
********************************************/
-
void matrixMul(int **A, int **B, int **C, int rowA, int columnB, int columnA){
-
for (int i=0;i<rowA;i++){
-
for (int j=0; j<columnB;j++){
-
C[i][j] = 0;
-
for (int k=0;k<columnA;k++){
-
C[i][j]+=A[i][k]*B[k][j];
-
}
-
}
-
}
-
}
3矩陣相乘后轉置
一個矩陣的轉置與它相乘,為什么是對稱陣?
證明它們的乘積的轉置等於其本身就可以了。(A^T*A)^T=A^T*(A^T)^T=A^T*A