我真的很难创建一种将矩阵提升为幂的方法。我尝试使用这个
public static int powerMethod(int matrix, int power) { int temp = matrix ; for (int i = power; i == 1; i--) temp = temp * matrix ; return temp ;
但回报是WAYYY关闭。只有第一个(1,1)矩阵元素在点上。
我试过像这样主要使用该方法
// Multiplying matrices for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { for (l = 0; l < row; l++) { sum += matrix[i][l] * matrix[l][j] ; } matrix[i][j] = sum ; sum = 0 ; } } // Solving Power of matrix for (i = 0; i < row; i++) { for (j = 0; j < column; j++) matrixFinal[power][i][j] = Tools.powerMethod(matrix[i][j], power) ; }
其中“ power”,“ row”和“ column”是用户输入的整数。
任何想法我该怎么做?
谢谢!!!
这里有很多问题。
首先,您的矩阵平方算法有一个(常见)错误。你有:
for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { for (l = 0; l < row; l++) { sum += matrix[i][l] * matrix[l][j] ; } matrix[i][j] = sum ; sum = 0 ; } }
但是,您需要将结果存储在临时的第二个矩阵中,因为这样做时matrix[i][j] = sum,它将用输出替换该位置处的值,然后以后的结果将不正确。我也建议初始化sum为0 第一 ,因为它似乎你外面声明它这个循环的,并且第一初始化它保护您免受任意值sum,然后才会进入循环可能有。此外,它不是立即清除您的意思row和column-确保您遍历整个矩阵。例如:
matrix[i][j] = sum
sum
row
column
int temp[][] = new int[matrix.length]; for (i = 0; i < matrix.length; i++) { temp[i] = new int[matrix[i].length]; for (j = 0; j < matrix[i].length; j++) { sum = 0 ; for (l = 0; l < matrix.length; l++) { sum += matrix[i][l] * matrix[l][j] ; } temp[i][j] = sum ; } } // the result is now in 'temp', you could do this if you wanted: matrix = temp;
请注意,如果矩阵是正方形(为了与自身相乘必须是正方形),matrix.length并且matrix[i].length在上面可以互换。
matrix.length
matrix[i].length
其次,乘法将矩阵 平方 。这意味着,如果重复应用它,则每次都会对矩阵进行平方运算,这意味着您将只能计算本身就是2的幂的幂。
第三个问题是最后一点没有多大意义:
for (i = 0; i < row; i++) { for (j = 0; j < column; j++) matrixFinal[power][i][j] = Tools.powerMethod(matrix[i][j], power) ; }
目前尚不清楚您要在这里做什么。最后一部分似乎正在尝试将单个元素提高到一定程度。但这与将矩阵求幂是不同的。
您 需要 做的是定义一个适当的矩阵乘法方法,该方法可以将两个任意矩阵相乘,例如:
int[][] multiplyMatrices (int[][] a, int[][] b) { // compute and return a x b, similar to your existing multiplication // algorithm, and of course taking into account the comments about // the 'temp' output matrix above }
然后计算能力变得简单:
int[][] powerMatrix (int[][] a, int p) { int[][] result = a; for (int n = 1; n < p; ++ n) result = multiplyMatrices(result, a); return result; }