QR
Tính phân tích QR của một ma trận.
cpp
bool QR(
matrix& Q, // ma trận với các cột trực chuẩn
matrix& R // ma trận tam giác trên
);
1
2
3
4
2
3
4
Tham số
Q
[out] Ma trận với các cột trực chuẩn. Khi mode = complete
, kết quả là một ma trận trực giao/đơn vị tùy thuộc vào việc ma trận đầu vào là thực hay phức. Định thức có thể là +/- 1 trong trường hợp đó. Nếu số chiều trong mảng đầu vào lớn hơn 2, thì một tập hợp các ma trận với các thuộc tính trên sẽ được trả về.
R
[out] Ma trận tam giác trên.
Giá trị trả về
Trả về true nếu thành công, false nếu không.
Ví dụ
cpp
//--- A*x = b
matrix A = {{0, 1}, {1, 1}, {1, 1}, {2, 1}};
Print("A \n", A);
vector b = {1, 2, 2, 3};
Print("b \n", b);
//--- A = Q*R
matrix q, r;
A.QR(q, r);
Print("q \n", q);
Print("r \n", r);
matrix qr=q.MatMul(r);
Print("qr \n", qr);
/*
A
[[0,1]
[1,1]
[1,1]
[2,1]]
b
[1,2,2,3]
q
[[0.4082482904638631,-0.8164965809277259,-1.110223024625157e-16,-0.4082482904638631]
[0.4625425214347352,-0.03745747856526496,0.7041241452319315,0.5374574785652647]
[-0.5374574785652648,-0.03745747856526496,0.7041241452319316,-0.4625425214347352]
[-0.5749149571305296,-0.5749149571305299,-0.09175170953613698,0.5749149571305296]]
r
[[-1.224744871391589,-0.2415816237971962]
[-1.22474487139159,-1.466326495188786]
[1.224744871391589,1.316496580927726]
[1.224744871391589,0.2415816237971961]]
qr
[[-1.110223024625157e-16,1]
[1,0.9999999999999999]
[1,1]
[2,1]]
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36