Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- // Функция для вычисления ранга матрицы A (m x n)
- int matrixRank(vector<vector<double>>& A)
- {
- int m = A.size();
- if(m == 0) return 0;
- int n = A[0].size();
- int rank = 0;
- int row = 0;
- for(int col = 0; col < n && row < m; col++)
- {
- // Ищем pivotRow
- int pivotRow = row;
- while(pivotRow < m && A[pivotRow][col] == 0.0)
- {
- pivotRow++;
- }
- if(pivotRow == m) continue; // нет pivot в этом столбце
- // swap
- if(pivotRow != row)
- {
- A[row].swap(A[pivotRow]);
- }
- // нормируем
- double pivot = A[row][col];
- for(int c = col; c < n; c++)
- {
- A[row][c] /= pivot;
- }
- // зануляем в строках ниже
- for(int r = row+1; r < m; r++)
- {
- double factor = A[r][col];
- for(int c = col; c < n; c++)
- {
- A[r][c] -= factor*A[row][c];
- }
- }
- rank++;
- row++;
- }
- return rank;
- }
- int main()
- {
- int m, n;
- cin >> m >> n;
- vector<vector<double>> mat(m, vector<double>(n));
- for(int i = 0; i < m; i++)
- {
- for(int j = 0; j < n; j++)
- {
- cin >> mat[i][j];
- }
- }
- int r = matrixRank(mat);
- cout << "Ранг = " << r << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement