0
我試圖找到尋找方矩陣行列式的代碼,並且我遇到了這個代碼。高斯消元矩陣的行列式C++
int det(vector<vector<int> > mat) {
int n = mat.size();
for(int col = 0; col < n; ++col) {
bool found = false;
for(int row = col; row < n; ++row) {
if(mat[row][col]) {
mat[row].swap(mat[col]);
found = true;
break;
}
}
if(!found) {
return 0;
}
for(int row = col + 1; row < n; ++row) {
while(true) {
int del = mat[row][col]/mat[col][col];
for (int j = col; j < n; ++j) {
mat[row][j] -= del * mat[col][j];
}
if (mat[row][col] == 0)
break;
else
mat[row].swap(mat[col]);
}
}
}
li res = 1;
for(int i = 0; i < n; ++i) {
res *= mat[i][i];
}
return abs(res);
}
但是我很難理解第20-29行,即從另一行的多個行中減去行。我的意思是爲什麼在這裏需要while循環?因爲我是 減去商*分紅,它應該總是0,對嗎?所以我認爲它應該只是一個迭代。那麼,爲什麼我們需要執行這個mat[row].swap(mat[col]);
操作? 在此先感謝。
Woh !!這是一種避免浮點精度錯誤的好辦法,其中矩陣的所有條目都只是整數。謝謝@R薩胡 – 2014-09-04 14:17:20