解释:我们需要将一个二阶矩阵进行矩阵的幂方运算,首先,你得知道矩阵运算的性质,如果没接触过矩阵运算,那就先看看线性代数
int[][]matrx = {{1,2},{1,2}}拿一个简单的矩阵,即可推算的所有矩阵运算规律 我们在进行矩阵运算容易遇到的问题,怎么去接收每一行每一列的运算的结果,这个是一个最大的问题,如果解决这个问题那么二阶矩阵的运算就迎刃而解了。 假设我们进行矩阵二次幂运算
我们定义一个方法,我们需要定义两个同阶的数组,一个是用来接收矩阵每一次行与列运算时的结果,另一个是用来得到最终结果的,也就是每一次幂之积的结果
public class Juzheng {
public static void main(String[] args) {
int[][] matrix = {{1,2},{1,2}};
mijuzheng(matrix, 2);
}
public static int[][] mijuzheng(int[][] matrix, int n) {
int[][] newMatrix = matrix;
//n-1表示 多少次幂,n = 2 ,就是二次幂
for (int j = 0; j < n - 1; j++) {
//初始化一个二维数组,用于接收每一次的矩阵运算
int[][] startM = new int[matrix.length][matrix.length];
for (int y = 0; y < matrix.length; y++) {
//startM的每一个元素的获取
for (int x = 0; x < matrix.length; x++) {
for (int i = 0; i < matrix.length; i++) {
//每一行乘以每一列的值,累加到一起
startM[y][x] += newMatrix[y][i] * matrix[i][x];
}
}
}
//startM运算完,则用newMatrix接收
newMatrix = startM;
}
for (int i = 0; i < newMatrix.length; i++) {
for (int j = 0; j < newMatrix.length; j++) {
System.out.print(newMatrix[i][j] + "\t\t");
}
System.out.println("\n");
}
System.out.println();
return newMatrix;
}
}
输出结果
[3,6] [3,6]
当n取4,matrix初值为
[ [0, 1, 2, 5], [1, 2, 1, 0], [1, 0, 0, 1], [0, 8, 9, 0] ]
输出结果
[169, 782, 828, 506]
[126, 283, 250, 110]
[112, 224, 197, 154]
[252, 1010, 1006, 251]