- Добавлены новые методы OpenBLAS:
Приведение матриц
- ReduceToHessenberg — преобразует вещественную или комплексную общую матрицу A размером n на n к матрице B верхней формы Хессенберга с помощью ортогонального преобразования подобия: Q**T * A * Q = H. LAPACK-функция GEHRD.
- ReflectHessenbergToQ — генерирует ортогональную матрицу Q, которая определяется как произведение n-1 элементарных рефлекторов порядка n, возвращаемых функцией ReduceToHessenberg: Q = H(1) H(2) . . . H(n-1). LAPACK-функция ORGHR.
Вычисление собственных значений и собственных векторов
- EigenHessenbergSchurQ — вычисляет собственные значения матрицы Хессенберга H и матриц T и Z из разложения Шура: H = Z T Z**T. Здесь T — верхняя квазитреугольная матрица (форма Шура), а Z — ортогональная матрица векторов Шура. LAPACK-функция HSEQR.
Решение систем линейных уравнений
- SylvesterEquationTriangular — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: op(A)*X + X*op(B) = scale*C или op(A)*X - X*op(B) = scale*C, где op(A) = A или A**T или A**H, а A и B — верхнетреугольные. LAPACK-функция TRSYL.
- SylvesterEquationTriangularBlocked — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: op(A)*X + X*op(B) = scale*C или op(A)*X - X*op(B) = scale*C, где op(A) = A, A**T или A**H, а A и B — верхнетреугольные матрицы. LAPACK-функция TRSYL3. Это блочная (BLAS уровня 3) версия TRSYL. Быстрее до 5 раз, но менее точная.
Факторизованные расчеты
- SylvesterEquationSchur — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: A*X + X*B = C, где A и B — верхнетреугольные матрицы. A имеет размер m на m, а B — n на n; правая часть C и решение X имеют размер m на n. LAPACK-функция TRSYL.
- SylvesterEquationSchurBlocked — решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц: A*X + X*B = C, где A и B — верхнетреугольные матрицы. A имеет размер m на m, а B — n на n; правая часть C и решение X имеют размер m на n. LAPACK-функция TRSYL3. Это блочная (BLAS уровня 3) версия TRSYL. Быстрее до 5 раз, но менее точная.
Расчет норм матриц для разных структур
- MatrixNorm — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента прямоугольной матрицы общего вида. LAPACK-функция LANGE.
- MatrixNormGeTrid — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента общей трехдиагональной матрицы. LAPACK-функция LANGT.
- MatrixNormHessenberg — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента верхней матрицы Хессенберга. LAPACK-функция LANHS.
- MatrixNormSy — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента действительной симметричной или комплексной эрмитовой матрицы. LAPACK-функции LANSY и LANHE.
- MatrixNormComplexSy — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента комплексной симметричной (не эрмитовой) матрицы. LAPACK-функция LANSY.
- MatrixNormSyTrid — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента действительной симметричной или комплексной эрмитовой трехдиагональной матрицы. LAPACK-функции LANST и LANHT.
- MatrixNormTriangular — возвращает значение 1-нормы, бесконечной нормы, нормы Фробениуса или наибольшего абсолютного значения любого элемента трапециевидной матрицы размером m на n или треугольной матрицы. LAPACK-функция LANTR.
Анализ структурных свойств матриц
- IsSymmetric — проверяет, является ли квадратная матрица симметричной.
- IsHermitian — проверяет, является ли квадратная комплексная матрица эрмитовой.
- IsUpperTriangular — проверяет, является ли квадратная матрица верхнетреугольной.
- IsLowerTriangular — проверяет, является ли квадратная матрица нижнетреугольной.
- IsTrapezoidal — проверяет, является ли прямоугольная (не квадратная) матрица размером m на n верхней или нижней трапециевидной.
- IsUpperHessenberg — проверяет, является ли квадратная матрица верхней матрицей Хессенберга.
- IsLowerHessenberg — проверяет, является ли квадратная матрица нижней матрицей Хессенберга.
- IsTridiagonal — проверяет, является ли квадратная матрица трехдиагональной.
- IsUpperBidiagonal — проверяет, является ли квадратная матрица верхней бидиагональной.
- IsLowerBidiagonal — проверяет, является ли квадратная матрица нижней бидиагональной.
- IsDiagonal — проверяет, является ли квадратная матрица диагональной.
- IsScalar — проверяет, является ли квадратная матрица скалярной.
- Добавлен метод Conjugate для комплексных матриц и векторов. Он изменяет знак мнимой части комплексного числа и возвращает измененную матрицу или вектор.
- Усилены правила скрытия методов. При наличии в производном классе метода с тем же именем, что и в базовом, теперь по умолчанию вызывается версия из производного класса. Чтобы обратиться к базовому методу, теперь требуется квалификатор:
struct A
{
int y;
string func(double x)
{
return(__FUNCSIG__);
}
};
struct B : public A
{
string func(int x)
{
return(__FUNCSIG__);
}
};
void OnStart(void)
{
B b;
b.func(M_PI);
b.A::func(M_PI);
}
Это упрощает чтение кода и устраняет неоднозначность, ранее сопровождавшуюся лишь предупреждением компилятора.
Ранее при компиляции было предупреждение:
deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
Теперь это изменение вступило в силу.
Некоторое количество билдов в журнал будет выводиться предупреждение, если по параметрам доступен более подходящий скрытый метод.
call resolves to 'string B::func(int)' instead of 'string A::func(double)' due to new rules of method hiding
see declaration of function 'B::func'
see declaration of function 'A::func'
truncation of constant value from 'double(3.141592653589793)' to 'int(3)'
- Запрещено дублирование имен в одной области видимости. Например, ранее вы могли объявлять параметр input и функцию с одинаковым именем в одном файле. Теперь такое дублирование недопустимо:
input int somename=42;
int somename(int x)
{
return(42);
}
- Добавлена строгая проверка типов значений по умолчанию в перечислениях. Для параметров-функций, принимающих enum, теперь проверяется не только значение, но и точное соответствие типа:
int somename(ENUM_TIMEFRAMES TF=PERIOD_CURRENT);
int somename(ENUM_TIMEFRAMES TF=0)
{
return(42);
}
- Запрещены одинаковые идентификаторы в разных перечислениях. Идентификатор внутри одного перечисления теперь не может повторяться в другом в одной области видимости:
enum A
{
Value
};
enum B
{
Value
};
void OnStart(void)
{
enum C
{
Value
};
}
В разных областях видимости можно использовать одинаковые имена.
- Включены жесткие требования к шаблонным функциям-инициализаторам. При создании матриц/векторов через функции-инициализаторы отключены:
- Автотипизация шаблонных функций
- Значения параметров по умолчанию
Теперь необходимо явно указывать параметры шаблона и все аргументы:template<typename T>
void Initializer(matrix<T>& mat,int method=0);
matrix<double> A(10,10,Initializer,42);
matrix<double> A(10,10,Initializer<double>);
matrix<double> A(10,10,Initializer<double>,42);
- Улучшена поддержка ONNX. Добавлена неявная конверсия знакового типа при передаче массивов ulong в функциях, что облегчает интеграцию MQL5 с моделями ONNX.
OnnxSetInputShape( … , ulong_array );
OnnxSetOutputShape( … , ulong_array );
- Исправлено отображение типов в предупреждениях о неявном преобразовании строк.
- Обновлен пакет интеграции с Python. Для установки обновления выполните команду:
pip install --upgrade MetaTrader5