向量类型是MQL5中的一种特殊数据类型,它支持向量运算。向量是double类型的一维数组。它是线性代数的基本概念之一,应用于多个科学领域,包括物理学、几何学等。向量用于求解线性方程组、3D图形和其他应用领域。向量可以相加和相乘。向量之间的长度或距离可以通过范数获得。在编程中,向量通常用同构元素的数组表示,这些数组可能没有规则的向量运算,即数组不能相加或相乘时,它们没有范数。
使用矩阵时,向量可以表示为行向量和字符串向量。此外,线性代数中的向量使用协方差和逆变的概念。这些概念在编写MQL5代码时没有任何区别,因为只有程序员能决定每个向量类型的对象。例如,它可以是3D图形中的旋转、位移或压缩向量。
一般来说,从线性代数的角度来看,一个数也是一个向量,只不过是在一维向量空间中。向量本身可以被认为是矩阵的特例。
矩阵类型是MQL5中的另一种特殊数据类型,用于表示矩阵。矩阵实际上是double类型的二维数组。向量和矩阵已被引入MQL5,以便更轻松地对某些类型的数据集进行运算。通过向量和矩阵,开发人员可以以简单且类似于数学的形式从线性代数的可能性中受益。矩阵可用来更简洁地写出线性方程组或微分方程组。矩阵行数对应方程数,而列数等于未知数的个数。因此,线性方程组可以通过矩阵运算来求解。
为矩阵定义以下代数运算:
数学考虑了许多不同的矩阵类型。例如单位矩阵、对称矩阵、斜对称矩阵、上下三角矩阵等。 各种规范形式在矩阵理论中扮演着重要的角色。它们代表矩阵的某种规范形式,可以通过某些变换来获得。在实践中,使用具有附加属性(例如稳定性)的规范形式。
使用向量和矩阵,或者更确切地说,使用相关类型的特殊方法,可以创建更简单、更简洁和更清晰的代码,这接近于数学符号。使用这些方法,您可以避免创建嵌套循环或在计算中注意正确索引数组。因此,使用这些方法可以提高开发复杂程序的可靠性和速度。
矩阵和向量类型包括对应于相关NumPy程序库方法的方法。使用这些方法,您可以轻松地将算法和代码从Python转换为MQL5。许多数据处理任务、数学方程、神经网络和机器学习任务都可以使用现有的Python方法和程序库来解决。
方法矩阵/向量 |
NumPy中的类似方法 |
描述 |
---|---|---|
void matrix.Eye(const int rows, const int cols, const int ndiag=0) |
构造对角线为1,其他地方为0的矩阵 |
|
void matrix.Identity(const int rows) |
构造主对角线为1的矩形矩阵 |
|
void matrix.Ones(const int rows, const int cols) |
构造给定行和列的新矩阵,用1填充 |
|
void matrix.Zeros(const int rows, const int cols) |
构造给定行和列的新矩阵,用零填充 |
|
void matrix.Full(const int rows, const int cols, const scalar value) |
构造给定行和列的新矩阵,用标值填充 |
|
void matrix.Copy(const matrix a) |
构造给定矩阵的副本 |
|
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) |
构造从一维数组创建的矩阵 |
|
void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0) |
构造从文本或二进制文件创建的矩阵 |
|
void vector.FromString(const string source, const string sep=" ") |
构造从字符串中的文本数据初始化的向量 |
|
void vector.Arange(const scalar start, const scalar stop, const scalar step=1) |
构造给定的间隔内均匀间隔的值 |
|
void matrix.Diag(const vector v, const int ndiag=0) |
提取对角线或构造对角矩阵 |
|
void matrix.Tri(const int rows, const int cols, const int ndiag=0) |
构造在给定对角线处和给定对角线以下处为1,其他地方为0的矩阵 |
|
void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0) |
返回矩阵副本,其中第k条对角线以上的元素归零 |
|
void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0) |
返回矩阵副本,其中第k对角线以下的元素归零 |
|
void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false) |
生成Vandermonde矩阵 |
|
vector matrix.Row(const unsigned nrow) |
|
返回行向量 |
vector matrix.Col(const unsigned ncol) |
|
返回列向量 |
unsigned matrix.Rows() |
|
返回矩阵中的行数 |
unsigned matrix.Cols() |
|
返回矩阵中的列数 |
void matrix.Init() |
|
初始化矩阵 |
matrix matrix.Transpose() |
反转或置换矩阵轴;返回修改后的矩阵 |
|
matrix matrix.Dot(const matrix b) |
两个矩阵的点积 |
|
matrix matrix.Inner(const matrix b) |
两个矩阵的内积 |
|
matrix matrix.Outer(const matrix b) |
计算两个矩阵的外积 |
|
matrix matrix.MatMul(const matrix b) |
两个矩阵的矩阵乘积 |
|
matrix matrix.MatrixPower(const int power) |
将矩形矩阵提升到(整数)n次方 |
|
matrix matrix.Kron(const matrix b) |
返回两个矩阵的Kronecker乘积 |
|
bool matrix.Cholesky(matrix& L) |
返回Cholesky分解 |
|
bool matrix.QR(matrix& Q, matrix& R) |
计算矩阵的qr因式分解 |
|
bool matrix.SVD(matrix& U, matrix& V, vector& singular_values) |
奇异值分解 |
|
bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values) |
计算矩形矩阵的特征值和右特征向量 |
|
bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values) |
返回Hermitian矩阵的特征值和特征向量 |
|
bool matrix.EigVals(vector& eigen_values) |
计算一般矩阵的特征值 |
|
bool matrix.EigValsH(vector& eigen_values) |
计算Hermitian矩阵的特征值 |
|
bool matrix.LU(matrix& L, matrix& U) |
|
将矩阵LU分解为一个下三角形矩阵和上三角形矩阵的乘积 |
bool matrix.LUP(matrix& L, matrix& U, matrix& P) |
|
带部分枢轴的LUP分解,仅指带行排列的LU分解:PA=LU |
double matrix.Norm(const norm) |
返回矩阵或向量范数 |
|
double matrix.Cond(const norm) |
计算矩阵的条件数 |
|
vector matrix.Spectrum() |
|
将矩阵的范围计算为来自AT*A乘积的特征值集合 |
double matrix.Det() |
计算数组的行列式 |
|
int matrix.Rank() |
使用Gaussian方法返回数组的矩阵秩 |
|
int matrix.SLogDet(int& sign) |
计算数组行列式的符号和对数 |
|
double matrix.Trace() |
返回沿矩阵对角线的总和 |
|
vector matrix.Solve(const vector b) |
求解线性矩阵方程或线性代数方程组 |
|
vector matrix.LstSq(const vector b) |
返回线性代数方程组的最小平方解(对于非平方矩阵或退化矩阵) |
|
matrix matrix.Inv() |
计算矩阵的(乘法)逆矩阵 |
|
matrix matrix.PInv() |
通过Moore-Penrose方法计算矩阵的伪逆 |
|
int matrix.Compare(const matrix matrix_c, const double epsilon) |
|
比较两个矩阵 |