- Типы матриц и векторов
- Создание и инициализация матриц и векторов
- Копирование матриц, векторов и массивов
- Копирование таймсерий в матрицу или вектор
- Копирование истории тиков в матрицу или вектор
- Вычисление выражений с матрицами и векторами
- Манипуляции над матрицами и векторами
- Произведения матриц и векторов
- Преобразования (разложение) матриц
- Получение статистики
- Характеристики матриц и векторов
- Решение уравнений
- Методы машинного обучения
Типы матриц и векторов
Вектор — это одномерный массив вещественного или комплексного типа, а матрица — двумерный массив вещественного или комплексного типа. Таким образом, перечень допустимых числовых типов для элементов этих объектов включает double (считается типом по умолчанию), float и complex.
C точки зрения линейной алгебры (но не компилятора!) простое число также является минимальным вектором, а вектор, в свою очередь, можно рассматривать, как частный случай матрицы.
Вектор, в зависимости от типа элементов, описывается с помощью одного из ключевых слов vector (с суффиксом или без):
- vector — вектор с элементами типа double;
- vectorf — вектор с элементами типа float;
- vectorc — вектор с элементами типа complex.
Хотя векторы бывают вертикальными и горизонтальными, в MQL5 подобное разделение не делается. Необходимая ориентация вектора определяется (подразумевается) местом вектора в выражении.
Над векторами определены операции сложения и умножения, а также введено понятие "Норма" (и соответствующий метод Norm) для получения длины или модуля вектора.
Матрицу можно представить как массив, где первый индекс означает номер строки, а второй индекс — номер столбца. Однако нумерация строк и столбцов, в отличие от линейной алгебры, начинается с нуля, как и в массивах.
Две размерности матриц называются также осями (axes) и нумеруются следующим образом: 0 — горизонтальная ось (вдоль строк), 1 — вертикальная ось (вдоль столбцов). Номера осей используются во многих матричных функциях. В частности, когда мы будем говорить о разбиении матрицы на фрагменты, то разбиение по горизонтали означает "разрез" между (или, если угодно, вдоль) строк, а разбиение по вертикали — разрез между столбцов.
В зависимости от типа элементов, матрица описывается с помощью одного из ключевых слова matrix (с суффиксом или без):
- matrix — матрица с элементами типа double;
- matrixf — матрица с элементами типа float;
- matrixc — матрица с элементами типа complex.
Для применения в шаблонных функциях можно использовать запись matrix<double>, matrix<float>, matrix<complex>, vector<double>, vector<float>, vector<complex> вместо соответствующих типов.
vectorf v_f1 = {0, 1, 2, 3,};
|
При выводе в журнал матрицы и векторы печатаются как последовательности чисел, разделенных запятыми и заключенных в квадратные скобки.
[0,1,2,3]
|
Для матрицы определены следующие алгебраические операции:
- сложение матриц, имеющих одинаковый размер;
- умножение матриц подходящего размера, при этом число столбцов матрицы слева должно соответствовать числу строк матрицы справа;
- умножение матрицы на вектор-столбец и умножение вектора-строки на матрицу по правилу матричного умножения (вектор является в этом смысле частным случаем матрицы);
- умножение матрицы на число.
Кроме того, типы matrix и vector имеют встроенные методы, которые соответствуют аналогам библиотеки NumPy (популярный пакет для машинного обучения на Python), поэтому вы можете получить дополнительные подсказки в документации и примерах для этой библиотеки. Полный перечень методов можно найти в соответствующем разделе справки по MQL5.
К сожалению, в MQL5 не предусмотрено приведение матриц и векторов одного типа к другому (например, от double к float). Кроме того, вектор автоматически не трактуется компилятором как матрица (с одним столбцом или строкой) в тех выражениях, где ожидается матрица. То есть, принципы наследования (характерные для ООП) между матрицами и векторами не существуют, несмотря на кажущуюся родственную связь между этими "структурами".