Метод матричной инверсии / Обработка 0 в элементе поворота - PullRequest
1 голос
/ 07 ноября 2011

В настоящее время я работаю над реализацией метода инверсии матрицы для класса Matrix в C ++.Одна вещь, которая не реализована, это проверка, когда элемент сводки равен 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;
}

Как или куда мне добавитьэта функциональность / проверка?

Спасибо.

...