Đâ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