Các loại ma trận và vector
Vector là một mảng một chiều thuộc kiểu thực hoặc phức, trong khi ma trận là một mảng hai chiều thuộc kiểu thực hoặc phức. Do đó, danh sách các kiểu số hợp lệ cho các phần tử của những đối tượng này bao gồm double
(được coi là kiểu mặc định), float
và complex
.
Từ góc độ của đại số tuyến tính (nhưng không phải trình biên dịch!), một số nguyên tố cũng là một vector tối thiểu, và một vector, ngược lại, có thể được xem như một trường hợp đặc biệt của ma trận.
Vector, tùy thuộc vào kiểu phần tử, được mô tả bằng một trong các từ khóa vector
(có hoặc không có hậu tố):
vector
là một vector với các phần tử thuộc kiểudouble
vectorf
là một vector với các phần tử thuộc kiểufloat
vectorc
là một vector với các phần tử thuộc kiểucomplex
Mặc dù vector có thể là dọc hoặc ngang, MQL5 không phân chia như vậy. Hướng cần thiết của vector được xác định (ngụ ý) bởi vị trí của vector trong biểu thức.
Các phép toán sau được định nghĩa trên vector: cộng và nhân, cũng như Norm (với phương thức norm
liên quan) để lấy độ dài hoặc mô-đun của vector.
Bạn có thể nghĩ về ma trận như một mảng, trong đó chỉ số đầu tiên là số hàng và chỉ số thứ hai là số cột. Tuy nhiên, việc đánh số hàng và cột, không giống như trong đại số tuyến tính, bắt đầu từ số không, như trong mảng.
Hai chiều của ma trận còn được gọi là các trục và được đánh số như sau: 0 cho trục ngang (dọc theo các hàng) và 1 cho trục dọc (dọc theo các cột). Số trục được sử dụng trong nhiều hàm ma trận. Đặc biệt, khi nói về việc chia nhỏ một ma trận thành các phần, chia ngang có nghĩa là cắt giữa các hàng, còn chia dọc có nghĩa là cắt giữa các cột.
Tùy thuộc vào kiểu phần tử, ma trận được mô tả bằng một trong các từ khóa matrix
(có hoặc không có hậu tố):
matrix
là một ma trận với các phần tử thuộc kiểudouble
matrixf
là một ma trận với các phần tử thuộc kiểufloat
matrixc
là một ma trận với các phần tử thuộc kiểucomplex
Để áp dụng trong các hàm mẫu, bạn có thể sử dụng ký hiệu matrix<double>
, matrix<float>
, matrix<complex>
, vector<double>
, vector<float>
, vector<complex>
thay cho các kiểu tương ứng.
vectorf v_f1 = {0, 1, 2, 3};
vector<float> v_f2 = v_f1;
matrix m = {{0, 1}, {2, 3}};
void OnStart()
{
Print(v_f2);
Print(m);
}
2
3
4
5
6
7
8
9
Khi được ghi lại, ma trận và vector được in dưới dạng chuỗi các số phân cách bằng dấu phẩy và được bao trong dấu ngoặc vuông.
[0,1,2,3]
[[0,1]
[2,3]]
2
3
Các phép toán đại số sau được định nghĩa cho ma trận:
- Cộng các ma trận cùng kích thước
- Nhân các ma trận có kích thước phù hợp, khi số cột của ma trận đầu tiên phải bằng số hàng của ma trận thứ hai
- Nhân một ma trận với một vector cột và nhân một vector hàng với một ma trận theo quy tắc nhân ma trận (vector, theo nghĩa này, là một trường hợp đặc biệt của ma trận)
- Nhân một ma trận với một số
Ngoài ra, các kiểu matrix
và vector
có các phương thức tích hợp tương ứng với các tương tự của thư viện NumPy (một gói phổ biến cho học máy trong Python), vì vậy bạn có thể tìm thêm gợi ý trong tài liệu và ví dụ thư viện. Danh sách đầy đủ các phương thức có thể được tìm thấy trong phần tương ứng của trợ giúp MQL5.
Thật không may, MQL5 không hỗ trợ ép kiểu ma trận và vector từ kiểu này sang kiểu khác (ví dụ, từ double
sang float
). Ngoài ra, một vector không được trình biên dịch tự động coi là một ma trận (với một cột hoặc hàng) trong các biểu thức mà một ma trận được mong đợi. Điều này có nghĩa là khái niệm kế thừa (đặc trưng của OOP) giữa ma trận và vector không tồn tại, mặc dù có mối quan hệ rõ ràng giữa các cấu trúc này.