我目前正在为 C++ 中的 Matrix 类实现矩阵求逆方法。未实现的一件事是检查枢轴元素何时为 0,这意味着我需要将其值与另一个可接受行的值交换。如果有帮助,我将使用对角元素作为枢轴元素。
以下是我对 Inversion 方法的了解:
Matrix Matrix:: invert()
{
if (rows != cols) { // Check for square matrix
cout << "Matrix must be square." << endl;
exit(1);
}
double ratio, sum;
int i, j, k;
Matrix T1(rows, cols*2); // New temp identity matrix of same order
Matrix F(rows, cols); // Final Inverted Matrix
// Add Identity Matrix
for(i = 1; i <= rows; i++){
for(j = rows; j <= 2*rows; j++){
if(i == (j-cols)){
T1.el[i][j] = 1.0;
}
else
T1.el[i][j] = 0.0;
}
}
// Add original Matrix to 1st half of Temp Matrix
for (i = 1; i <=rows; i++) {
for(j=1;j<=rows; j++) {
T1.el[i][j] = el[i][j];
}
}
cout << "\n\nOriginal matrix with added Identity Matrix" << endl;
for (i = 1; i <=rows; i++) {
cout << setw(5);
for(j=1;j<=rows*2; j++) {
cout << T1.el[i][j] << setw(6);
}
cout << endl;
}
// Row Operations
for(i = 1; i <= rows; i++){
for(j = 1; j <= rows; j++){
if(i != j) {
ratio = T1.el[j][i]/T1.el[i][i];
for(k = 1; k <= 2*rows; k++) {
T1.el[j][k] -= ratio * T1.el[i][k];
}
}
}
}
// backwards substitutions
for(i = 1; i <= rows; i++){
sum = T1.el[i][i];
for(j = i+1; j <= 2*rows; j++){
T1.el[i][j] /= sum;
}
}
// Copy to return Matrix
for(i=1; i<=rows; i++){
for (j=1; j<=rows; j++) {
F.el[i][j] = T1.el[i][j+cols];
}
}
return F;
}
我将如何或在哪里添加此功能/检查?
谢谢。