我很难创建一种方法来将矩阵提升到幂。我试过用这个
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) ;
}
&#34; power&#34;,&#34; row&#34;,&#34; column&#34;是用户输入的int。
我有什么想法可以做到这一点??
感谢!!!
答案 0 :(得分:4)
这里有很多问题。
首先,矩阵平方算法存在(常见)错误。你有:
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
无法立即明确您的意思 - 确保您在整个矩阵上进行迭代。 E.g:
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
如果矩阵是正方形(它必须是,为了与自身相乘),则在上面是可以互换的。
其次,你的乘法正方形一个矩阵。这意味着如果你反复应用它,你每次都要保持矩阵的平方,这意味着你只能计算本身就是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;
}
答案 1 :(得分:-3)
为什么不使用Math.pow
?
import java.lang.Math;
然后你只需做
matrixFinal[power][i][j] = (int) Math.pow(matrix[i][j],power); //might have to cast this to an int