现在,我想我理解了这个概念。但当我把它全部放进代码中时,它就不起作用了。。。
首先,我试图将矩阵转换为上三角矩阵,但由于某种原因,在第2列之后,它停止了工作。。
输入的数组为:
[1.00][5.00][4.00][4.00][1.00]
[5.00][7.00][7.00][4.00][8.00]
[7.00][4.00][8.00][4.00][7.00]
[10.0][12.00][8.00][4.00][3.00]
[10.0][12.00][13.00][4.00][3.00]
输出
double** inverseMatrix(double **matA, int dimension)
{
double** matInverse=malloc(dimension*sizeof(double*));
double **holder = matA;
for(int i = 0; i < dimension; i++){
matInverse[i] = malloc(dimension*sizeof(matInverse[0]));
}
for(int i = 0; i < dimension; i++){
for(int j = 0; j < dimension; j++){
matInverse[i][j] = 0.0;
}
matInverse[i][i] = 1.0;
}
for(int i = 0; i < dimension; i++){
double pivot = holder[i][i];
for(int j = 0; j < dimension; j++){
holder[i][j] = (holder[i][j]/pivot);
matInverse[i][j] = (matInverse[i][j]/pivot);
}
for(int row = i+1; row < dimension; row++){
int number = holder[row][i];
for(int col = 0; col < dimension; col++){
holder[row][col] = holder[row][col] - (holder[i][col] * number);
matInverse[row][col] = matInverse[row][col] - (matInverse[i][col] * number);
}
}
}
虽然函数不完整,我们无法判断调用方站点是否存在其他问题,但在发布的代码段中可以检测到错误:
int number = holder[row][i];
这里number
应该是double
。