package test;
/**
* 矩阵运算
*
* @author Administrator
*
*/
public class MatrixOperation {
/**
* 自动填充矩阵,将不足的行后自动补0
*
* @param M
* @return
*/
public static int[][] fillMatrix(int[][] M) {
int ml = 0;// 最长行
for (int i = 0; i < ; i++) {
ml = ml < M[i].length ? M[i].length : ml;
}
int Nm[][] = new int[][ml];
for (int i = 0; i < ; i++) {
for (int j = 0; j < M[i].length; j++) {
Nm[i][j] = M[i][j];
}
}
return Nm;
}
/**
* 矩阵乘法A*B
*
* @param A
* @param B
* @return
* @throws Exception
*/
public static int[][] multiplication(int[][] A, int[][] B) throws Exception {
// 先判断A矩阵的列是否等于B矩阵的行,A矩阵与B矩阵可以进行乘法运算的条件就是A的列数等于B的行数
A = fillMatrix(A);
B = fillMatrix(B);
if (A[0].length != ) {
throw new Exception("矩阵A的列不等于矩阵B的行!");
}
int C[][] = new int[][B[0].length];
for (int i = 0; i < ; i++) {
for (int j = 0; j < B[i].length; j++) {
for (int k = 0; k < A[i].length; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
/**
* 矩阵转置
*
* @param A
* @return
*/
public static int[][] transposed(int[][] A) {
A = fillMatrix(A);
int[][] AT = new int[A[0].length][];
for (int i = 0; i < ; i++) {
for (int j = 0; j < AT[0].length; j++) {
AT[i][j] = A[j][i];
}
}
return AT;
}
}