タイプベクトルは、MQL5の特別なデータ型であり、ベクトル演算を可能にします。ベクトルは、 double型の1次元配列です。これは線形代数の基本的な概念の1つであり、物理学、幾何学など、多くの科学分野で使用されています。ベクトルは、3Dグラフィックスやその他のアプリケーション分野で、連立一次方程式を解くために使用されます。ベクトルは加算および乗算できます。ベクトル間の長さまたは距離は、ノルムを介して取得できます。プログラミングでは、ベクトルは通常、同種の要素の配列で表されます。これには、通常のベクトル演算がない(配列を追加または乗算できず、ノルムがない)場合があります。
行列を操作する場合、ベクトルは行ベクトルおよび文字列ベクトルとして表すことができます。また、線形代数ではベクトルの共変性と反変性の概念を使用します。ベクトル型の各オブジェクトが何であるかを決定するのはプログラマーだけなので、これらの概念はMQL5コードを書くときに何の違いももたらしません。たとえば、3Dグラフィックスの回転、変位、または圧縮ベクトルにすることができます。
一般的に言えば、線形代数の観点からは、数もベクトルですが、1次元のベクトル空間にあります。ベクトル自体は、行列の特殊なケースと見なすことができます。
タイプ行列は、あと1つのMQL5の特別なデータ型であり、行列を表します。行列は、実際にはdouble型の2次元配列です。ベクトルと行列は、特定のタイプのデータセットでの操作を容易にするために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) |
主対角線上に正方行列を作成します |
|
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) |
1次元配列から作成された行列を作成します |
|
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) |
ヴァンデルモンドの行列を生成します |
|
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) |
2つの行列の内積 |
|
matrix matrix.Inner(const matrix b) |
2つの行列の内積 |
|
matrix matrix.Outer(const matrix b) |
2つの行列の外積を計算します |
|
matrix matrix.MatMul(const matrix b) |
2つの行列の行列積 |
|
matrix matrix.MatrixPower(const int power) |
正方行列のn(整数)乗 |
|
matrix matrix.Kron(const matrix b) |
2つの行列のクロネッカー積を返します |
|
bool matrix.Cholesky(matrix& L) |
コレスキー分解を返します |
|
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) |
エルミート行列の固有値と固有ベクトルを返します |
|
bool matrix.EigVals(vector& eigen_values) |
一般的な行列の固有値を計算します |
|
bool matrix.EigValsH(vector& eigen_values) |
エルミート行列の固有値を計算します |
|
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() |
ガウスの方法を使用して配列の行列階数を返します |
|
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() |
ムーア・ペンローズ法により、行列の疑似逆行列を計算します |
|
int matrix.Compare(const matrix matrix_c, const double epsilon) |
|
2つの行列を比較します |