Diag
Trích xuất một đường chéo hoặc tạo một ma trận đường chéo.
vector matrix::Diag(
const int ndiag=0 // số thứ tự đường chéo
);
void matrix::Diag(
const vector v, // vector đường chéo
const int ndiag=0 // số thứ tự đường chéo
);
2
3
4
5
6
7
8
Tham số
v
[in] Một vector chứa các phần tử sẽ nằm trên đường chéo tương ứng (ndiag=0
là đường chéo chính).
ndiag=0
[in] Đường chéo được xét. Mặc định là 0. Sử dụng ndiag>0
cho các đường chéo phía trên đường chéo chính, và ndiag<0
cho các đường chéo phía dưới đường chéo chính.
Ghi chú
Có thể thiết lập đường chéo cho các ma trận chưa được cấp phát (không có kích thước). Trong trường hợp này, một ma trận số 0 sẽ được tạo với kích thước tương ứng với kích thước của vector đường chéo, sau đó các giá trị của vector sẽ được điền vào đường chéo tương ứng. Nếu đường chéo được thiết lập cho một ma trận đã tồn tại, kích thước ma trận không thay đổi và các giá trị của các phần tử ma trận ngoài vector đường chéo không thay đổi.
Ví dụ
vector v1={1,2,3};
matrix m1;
m1.Diag(v1);
Print("m1\n",m1);
matrix m2;
m2.Diag(v1,-1);
Print("m2\n",m2);
matrix m3;
m3.Diag(v1,1);
Print("m3\n",m3);
matrix m4=matrix::Full(4,5,9);
m4.Diag(v1,1);
Print("m4\n",m4);
Print("diag -1 -",m4.Diag(-1));
Print("diag 0 -",m4.Diag());
Print("diag 1 -",m4.Diag(1));
/*
m1
[[1,0,0]
[0,2,0]
[0,0,3]]
m2
[[0,0,0]
[1,0,0]
[0,2,0]
[0,0,3]]
m3
[[0,1,0,0]
[0,0,2,0]
[0,0,0,3]]
m4
[[9,1,9,9,9]
[9,9,2,9,9]
[9,9,9,3,9]
[9,9,9,9,9]]
diag -1 - [9,9,9]
diag 0 - [9,9,9,9]
diag 1 - [1,2,3,9]
*/
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
37
38
39
40
41
42