Compare
So sánh các phần tử của hai ma trận/vector với độ chính xác được chỉ định.
ulong vector::Compare(
const vector& vec, // vector để so sánh
const double epsilon // độ chính xác
);
ulong matrix::Compare(
const matrix& mat, // ma trận để so sánh
const double epsilon // độ chính xác
);
2
3
4
5
6
7
8
9
Tham số
vec
[in] Vector để so sánh.
mat
[in] Ma trận để so sánh.
epsilon
[in] Độ chính xác.
Giá trị trả về
Số lượng các phần tử không khớp của các ma trận hoặc vector được so sánh: 0 nếu các ma trận bằng nhau, lớn hơn 0 nếu không.
Ghi chú
Các toán tử so sánh ==
hoặc !=
thực hiện so sánh chính xác từng phần tử. Được biết rằng việc so sánh chính xác các số thực có hạn chế, vì vậy phương pháp so sánh epsilon đã được thêm vào. Có thể xảy ra trường hợp một ma trận chứa các phần tử trong một khoảng, ví dụ từ 1e-20
đến 1e+20
. Những ma trận như vậy có thể được xử lý bằng cách so sánh từng phần tử đến các chữ số có nghĩa.
Đối với các ma trận/vector phức, việc so sánh liên quan đến việc ước lượng khoảng cách giữa các số phức. Khoảng cách được tính bằng công thức sqrt(pow(r1-r2, 2) + pow(i1-i2, 2))
và là một số thực có thể được so sánh với epsilon
.
Ví dụ
matrix matrix_a={{10,3,2},{1,8,12},{6,5,4}};
matrix matrix_i=matrix::Identity(3,3);
matrix matrix_c=matrix_a.Inv();
matrix matrix_check=matrix_a.MatMul(matrix_c);
Print("matrix_check\n",matrix_check);
ulong errors=matrix_check.Compare(matrix::Identity(3,3),1e-15);
Print("errors=",errors);
/*
matrix_check
[[1,0,0]
[4.440892098500626e-16,1,8.881784197001252e-16]
[4.440892098500626e-16,2.220446049250313e-16,0.9999999999999996]]
errors=0
*/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16