Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ tìm Cơ sở và Chiều không gian của Ma trận


Đây là chương trình C++ để tìm cơ sở (basis) và chiều (dimension) của một ma trận. Chương trình sử dụng phép tính định thức (determinant) để xác định xem các vector cột của ma trận có tạo thành cơ sở của không gian vector R^n hay không.

Thuật toán

Bắt đầu
  Hàm determinant():
    Tính định thức của ma trận.
    Tham số:
      n = số phần tử (cấp ma trận).
      matrix[10][10] = ma trận đầu vào.
    Khai báo ma trận con submatrix[10][10].
    // Thân hàm:
    nếu (n == 2)
      trả về ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]))
    ngược lại
      Vòng lặp c = 0 đến n-1
        Khởi tạo submati = 0, submatj.
        Vòng lặp i = 1 đến n-1
          Khởi tạo subj = 0
          Vòng lặp j = 1 đến n-1
            nếu (j == c) tiếp tục
            submatrix[submati][submatj] = matrix[i][j]
            Tăng subj.
          Tăng submati.
        Tính d = d + (pow(-1, c) * matrix[0][c] * determinant(n-1, submatrix)).
Kết thúc

Ví dụ mã nguồn

#include <iostream>
#include <math.h>
using namespace std;

double d = 0;

double determinant(int n, double matrix[10][10]) {
    double submatrix[10][10];
    if (n == 2)
        return ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]));
    else {
        for (int c = 0; c < n; c++) {
            int submati = 0, submatj;
            for (int i = 1; i < n; i++) {
                int subj = 0;
                for (int j = 0; j < n; j++) {
                    if (j == c)
                        continue;
                    submatrix[submati][submatj] = matrix[i][j];
                    subj++;
                }
                submati++;
            }
            d = d + (pow(-1, c) * matrix[0][c] * determinant(n - 1, submatrix));
        }
    }
    return d;
}

int main(int argc, char **argv) {
    cout << "Nhập số phần tử (cấp ma trận):\n";
    int n;
    cin >> n;
    double matrix[10][10];
    cout << "Nhập các phần tử lần lượt:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[j][i];
        }
    }
    d = determinant(n, matrix); // gọi hàm
    if (d != 0)
        cout << "Các phần tử tạo thành cơ sở của R" << n << " vì định thức khác 0";
    else
        cout << "Các phần tử KHÔNG tạo thành cơ sở của R" << n << " vì định thức bằng 0";
    return 0;
}

Kết quả chạy 1

Nhập số phần tử: 3
Nhập các phần tử lần lượt: 7 6 1 2 3 4 5 8 9
Các phần tử tạo thành cơ sở của R3 vì định thức khác 0

Kết quả chạy 2

Nhập số phần tử: 4
Nhập các phần tử lần lượt: 7 6 1 4 2 3 5 4 9 8 2 3 2 1 3 0
Các phần tử KHÔNG tạo thành cơ sở của R4 vì định thức bằng 0