c-求MxM矩阵的逆-使用高斯-约当消去法



现在,我想我理解了这个概念。但当我把它全部放进代码中时,它就不起作用了。。。

首先,我试图将矩阵转换为上三角矩阵,但由于某种原因,在第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

最新更新