1、矩阵加法、减法
只需要将两矩阵的对应项相加(或相减)即可;
注意:
矩阵加法、减法运算时必须保证两个矩阵的行数、列数必须相等;
2、矩阵乘法
对于给定的mn矩阵A和nk矩阵B,其乘积矩阵为C=AB;这里矩阵C为m*k阶的;
C[i][j] = ∑A[i][t]B[t][j] (0≤t≤n-1)
第一个矩阵的第i行所有元素与矩阵B的第j列所有元素对应相乘,再把所得的结果相加结果就是矩阵C的第i行第j列的元素:
注意:
矩阵乘法运算时,矩阵A的列数必须等于矩阵B的行数,且矩阵的乘法不具有交换性,即:AB != BA;
/**
* @ClassName TestDemo14
* @Description 矩阵计算
* @Author lzq
* @Date 2018/12/1 14:44
* @Version 1.0
**/
public class TestDemo14 {
public static void main(String[] args) {
int[][] A = {{1,2,3},
{4,5,6},
{7,8,9}};
int[][] B = {{3,7,5},
{9,-5,2},
{-1,5,9}};
System.out.println("矩阵A");
show(A);
System.out.println("矩阵B");
show(B);
System.out.println("两矩阵相加得:");
show(matrix_add(A,B));
System.out.println("两矩阵相减得:");
show(matrix_sub(A,B));
System.out.println("两矩阵相乘得:");
show(matrix_multiplication(A,B));
}
/**
* 判断两个矩阵的行数、列数是否相同
* @param A
* @param B
* @return
*/
public static boolean is_matrix1(int[][] A,int[][] B) {
if(A.length != B.length) {
System.out.println("两矩阵不符合相加(或相减)要求!");
return false;
}
for(int i = 0;i < A.length;i++) {
if(A[i].length != B[i].length) {
System.out.println("两矩阵不符合相加(或相减)要求!");
return false;
}
}
return true;
}
/**
* 判断一个矩阵的行数是否与另一个矩阵的列数相等
* @param A
* @param B
* @return
*/
public static boolean is_matrix2(int[][] A,int[][] B) {
for(int i = 0;i < A.length;i++) {
if(A[i].length != B.length) {
System.out.println("两矩阵不符合相乘要求!");
return false;
}
}
return true;
}
/**
* 矩阵相加
* @param A
* @param B
* @return
*/
public static int[][] matrix_add(int[][] A,int[][] B) {
if(!is_matrix1(A,B)) {
return null;
}
int[][] C = new int[A.length][A[0].length];
int i,j;
for(i = 0;i < A.length;i++) {
for(j = 0;j < B[i].length;j++) {
C[i][j] = A[i][j]+B[i][j];
}
}
return C;
}
/**
* 矩阵相减
* @param A
* @param B
* @return
*/
public static int[][] matrix_sub(int[][] A,int[][] B) {
if(!is_matrix1(A,B)) {
return null;
}
int[][] C = new int[A.length][A[0].length];
int i,j;
for(i = 0;i < A.length;i++) {
for(j = 0;j < B[i].length;j++) {
C[i][j] = A[i][j]-B[i][j];
}
}
return C;
}
/**
* 矩阵相乘
* @param A
* @param B
* @return
*/
public static int[][] matrix_multiplication(int[][] A,int[][] B) {
if(!is_matrix1(A,B)) {
return null;
}
int[][] C = new int[A.length][B[0].length];
int i,j,t;
for(i = 0;i < A.length;i++) {
for(j = 0;j < B[i].length;j++) {
C[i][j] = 0;
for(t = 0;t < B.length;t++) {
C[i][j] += (A[i][t]*B[t][j]);
}
}
}
return C;
}
/**
* 打印矩阵
* @param X
*/
public static void show(int[][] X) {
int i,j;
for(i = 0;i < X.length;i++) {
for(j = 0;j < X[i].length;j++) {
System.out.print(X[i][j]+"\t");
}
System.out.println();
}
System.out.println("==================");
}
}
矩阵A
1 2 3
4 5 6
7 8 9
==================
矩阵B
3 7 5
9 -5 2
-1 5 9
==================
两矩阵相加得:
4 9 8
13 0 8
6 13 18
==================
两矩阵相减得:
-2 -5 -2
-5 10 4
8 3 0
==================
两矩阵相乘得:
18 12 36
51 33 84
84 54 132
==================