Matrizen und Vektoren

Der Typ Vektor ist ein spezieller Datentyp in MQL5, der Operationen mit Vektoren ermöglicht. Ein Vektor ist ein eindimensionales Array vom Typ Double. Er ist eines der grundlegenden Konzepte der linearen Algebra, die in vielen Bereichen der Wissenschaft, einschließlich Physik, Geometrie und anderen, verwendet wird. Vektoren werden zur Lösung linearer Gleichungssysteme, in der 3D-Grafik und in anderen Anwendungsbereichen verwendet. Vektoren können addiert und multipliziert werden. Die Länge oder der Abstand zwischen Vektoren kann durch die Norm ermittelt werden. In der Programmierung werden Vektoren in der Regel durch Arrays homogener Elemente dargestellt, die keine regulären Vektoroperationen ausführen können, d. h., wenn Arrays nicht addiert oder multipliziert werden können und keine Norm haben.

Bei der Arbeit mit Matrizen können Vektoren als Zeilenvektoren und Stringvektoren dargestellt werden. Außerdem verwenden Vektoren in der linearen Algebra die Konzepte der Kovarianz und Kontravarianz. Diese Konzepte machen beim Schreiben eines MQL5-Codes keinen Unterschied, da nur der Programmierer entscheidet, was jedes Objekt des Vektortyps ist. In der 3D-Grafik kann es sich zum Beispiel um einen Rotations-, Verschiebungs- oder Kompressionsvektor handeln.

Allgemein gesprochen ist eine Zahl aus Sicht der linearen Algebra auch ein Vektor, allerdings in einem eindimensionalen Vektorraum. Ein Vektor selbst kann als ein Spezialfall einer Matrix betrachtet werden.

Der Typ Matrix ist ein weiterer spezieller Datentyp in MQL5 zur Darstellung von Matrizen. Eine Matrix ist eigentlich ein zweidimensionales Array vom Typ double. Vektoren und Matrizen wurden in MQL5 eingeführt, um Operationen mit bestimmten Arten von Datensätzen zu erleichtern. Mit ihnen können Entwickler die Möglichkeiten der linearen Algebra in einer einfachen und mathematikähnlichen Form nutzen. Matrizen können verwendet werden, um Systeme von linearen Gleichungen oder Differentialgleichungen kompakt zu schreiben. Die Anzahl der Matrixzeilen entspricht der Anzahl der Gleichungen, während die Anzahl der Spalten gleich der Anzahl der Unbekannten ist. Folglich können lineare Gleichungssysteme durch Matrixoperationen gelöst werden.

Die folgenden algebraischen Operationen sind für die Matrizen definiert:

  • Addition von Matrizen gleicher Größe.
  • Multiplikation von Matrizen geeigneter Größe: die Anzahl der Spalten der linken Matrix muss gleich der Anzahl der Zeilen der rechten Matrix sein.
  • Matrixmultiplikation mit einem Spaltenvektor; Multiplikation eines Zeilenvektors mit einer Matrix nach der Matrixmultiplikationsregel. In diesem Sinne ist der Vektor ein Spezialfall einer Matrix.
  • Matrixmultiplikation mit einer Zahl, d. h. mit einem Skalar.

In der Mathematik gibt es viele verschiedene Matrixtypen. Zum Beispiel die Identitätsmatrix, symmetrische, schiefsymmetrische, obere und untere Dreiecksmatrizen und andere Typen. Verschiedene Normalformen spielen eine wichtige Rolle in der Matrixtheorie. Sie stellen eine bestimmte kanonische Form einer Matrix dar, die durch bestimmte Umformungen erhalten werden kann. In der Praxis werden Normalformen verwendet, die zusätzliche Eigenschaften haben, wie z. B. Stabilität.

Die Verwendung von Vektoren und Matrizen, oder besser gesagt, von speziellen Methoden der entsprechenden Typen, ermöglicht die Erstellung eines einfacheren, kürzeren und klareren Codes, der der mathematischen Notation nahe kommt. Mit diesen Methoden müssen Sie keine verschachtelten Schleifen erstellen oder auf die korrekte Indizierung von Arrays in Berechnungen achten. Daher erhöht die Verwendung dieser Methoden die Zuverlässigkeit und Geschwindigkeit bei der Entwicklung komplexer Programme.

 

Liste der Matrix- und Vektormethoden

Die Typen matrix und vector enthalten Methoden, die den Bibliotheksmethoden von NumPy entsprechen. Mit diesen Methoden können Sie Algorithmen und Codes mit minimalem Aufwand von Python nach MQL5 übersetzen. Viele Datenverarbeitungsaufgaben, mathematische Gleichungen, neuronale Netze und Aufgaben des maschinellen Lernens können mit vorgefertigten Python-Methoden und -Bibliotheken gelöst werden.

Methode von Matrix/Vektor

Analoge Methode in NumPy

Beschreibung

void matrix.Eye(const int rows, const int cols, const int ndiag=0)

eye

Konstruktion einer quadratischen Matrix mit Einsen auf der Hauptdiagonalen und Null an den anderen Stellen.

void matrix.Identity(const int rows)

identity

Konstruktion einer quadratischen Matrix mit Einsen auf der Hauptdiagonalen.

void matrix.Ones(const int rows, const int cols)

ones

Konstruktion einer neuen Matrix mit gegebenen Zeilen und Spalten, die mit Einsen gefüllt sind.

void matrix.Zeros(const int rows, const int cols)

zeros

Konstruktion einer neuen Matrix mit gegebenen Zeilen und Spalten, die mit Nullen gefüllt sind.

void matrix.Full(const int rows, const int cols, const scalar value)

full

Konstruktion einer neuen Matrix mit gegebenen Zeilen und Spalten, gefüllt mit einem Einzelwert.

void matrix.Copy(const matrix a)

copy

Konstruktion einer Kopie der gegebenen Matrix.

void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

frombuffer

Konstruktion einer Matrix, die aus einem 1-dimensionalen Array erstellt wurde.

void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0)

fromfile

Konstruktion einer Matrix aus Daten in einer Text- oder Binärdatei.

void vector.FromString(const string source, const string sep=" ")

fromstring

Konstruktion eines Vektors, der aus Textdaten in einer Zeichenkette initialisiert wird.

void vector.Arange(const scalar start, const scalar stop, const scalar step=1)

arange

Konstruktion gleichmäßig verteilter Werte innerhalb eines gegebenen Intervalls

void matrix.Diag(const vector v, const int ndiag=0)

diag

Eine Diagonale extrahieren oder eine Diagonalmatrix konstruieren.

void matrix.Tri(const int rows, const int cols, const int ndiag=0)

tri

Konstruktion einer Matrix mit Einsen auf und unterhalb der gegebenen Diagonalen und Nullen an anderen Stellen

void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0)

tril

Rückgabe der Kopie einer Matrix, bei der die Elemente oberhalb der k-ten Diagonale auf Null gesetzt sind.

void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0)

triu

Rückgabe der Kopie einer Matrix, bei der die Elemente unterhalb der k-ten Diagonale durch Nullen ersetzt sind.

void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false)

vander

Erzeugen einer Vandermonde-Matrix

vector matrix.Row(const unsigned nrow)

 

Rückgabe eines Zeilenvektors

vector matrix.Col(const unsigned ncol)

 

Rückgabe eines Spaltenvektors

unsigned matrix.Rows()

 

Rückgabe der Anzahl der Zeilen einer Matrix.

unsigned matrix.Cols()

 

Rückgabe der Anzahl der Spalten einer Matrix.

void matrix.Init()

 

Initialisieren einer Matrix.

matrix matrix.Transpose()

Transponieren

Umkehrung oder Permutation der Achsen einer Matrix; gibt die geänderte Matrix zurück.

matrix matrix.Dot(const matrix b)

dot

Punktprodukt von zwei Matrizen.

matrix matrix.Inner(const matrix b)

inner

Inneres Produkt von zwei Matrizen.

matrix matrix.Outer(const matrix b)

outer

Äußeres Produkt von zwei Matrizen.

matrix matrix.MatMul(const matrix b)

matmul

Matrixprodukt von zwei Matrizen.

matrix matrix.MatrixPower(const int power)

matrix_power

Erhöhen einer quadratischen Matrix auf die (ganzzahlige) Potenz n.

matrix matrix.Kron(const matrix b)

kron

Rückgabe des Kronecker-Produkts von zwei Matrizen.

bool matrix.Cholesky(matrix& L)

cholesky

Rückgabe der Cholesky-Zerlegung.

bool matrix.QR(matrix& Q, matrix& R)

qr

Berechnen der qr-Faktorisierung einer Matrix.

bool matrix.SVD(matrix& U, matrix& V, vector& singular_values)

svd

Zerlegung in Singulärwerte.

bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values)

eig

Berechnung der Eigenwerte und der rechten Eigenvektoren einer Quadratmatrix.

bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values)

eigh

Rückgabe der Eigenwerte und Eigenvektoren einer hermiteschen Matrix.

bool matrix.EigVals(vector& eigen_values)

eigvals

Berechnung der Eigenwerte einer allgemeinen Matrix.

bool matrix.EigValsH(vector& eigen_values)

eigvalsh

Berechnung der Eigenwerte einer hermiteschen Matrix.

bool matrix.LU(matrix& L, matrix& U)

 

LU-Zerlegung einer Matrix als Produkt aus einer unteren Dreiecksmatrix und einer oberen Dreiecksmatrix.

bool matrix.LUP(matrix& L, matrix& U, matrix& P)

 

LUP-Zerlegung mit partieller Pivotisierung, d. h. LU-Zerlegung nur mit Zeilenpermutationen: PA=LU.

double matrix.Norm(const norm)

norm

Rückgabe der Matrix- oder Vektornorm.

double matrix.Cond(const norm)

cond

Berechnen der Zustandszahl einer Matrix.

vector matrix.Spectrum()

 

Berechnung des Spektrums einer Matrix als die Menge ihrer Eigenwerte aus dem Produkt AT*A.

double matrix.Det()

det

Berechnen der Determinante einer Matrix.

int matrix.Rank()

matrix_rank

Rückgabe des Rangs einer Matrix unter Verwendung der Gaußschen Methode.

int matrix.SLogDet(int& sign)

slogdet

Berechnung von Vorzeichen und Logarithmus der Determinante eines Arrays.

double matrix.Trace()

trace

Rückgabe der Summe entlang der Diagonalen der Matrix.

vector matrix.Solve(const vector b)

solve

Lösen einer linearen Matrixgleichung oder eines Systems linearer algebraischer Gleichungen.

vector matrix.LstSq(const vector b)

lstsq

Rückgabe der Lösung der kleinsten Quadrate von linearen algebraischen Gleichungen (für nicht quadratische oder entartete Matrizen).

matrix matrix.Inv()

inv

Berechnen der (multiplikativen) Inversen einer Matrix.

matrix matrix.PInv()

pinv

Berechnung der Pseudoinverse einer Matrix nach der Moore-Penrose-Methode.

int matrix.Compare(const matrix matrix_c, const double epsilon)

int matrix.Compare(const matrix matrix_c, const int digits)

int vector.Compare(const vector vector_c, const double epsilon)

int vector.Compare(const vector vector_c, const int digits)

 

Vergleich der Elemente von zwei Matrizen/Vektoren mit der angegebenen Genauigkeit.

double matrix.Flat(const ulong index)

bool matrix.Flat(const ulong index,const double value)

flat

Ermöglicht die Adressierung eines Matrixelements über einen Index anstelle von zwei.

double vector.ArgMax()

double matrix.ArgMax()

vector matrix.ArgMax(const int axis)

argmax

Rückgabe des Index des größten Wertes.

double vector.ArgMin()

double matrix.ArgMin()

vector matrix.ArgMin(const int axis)

argmin

Rückgabe des Index des kleinsten Wertes.

double vector.Max()

double matrix.Max()

vector matrix.Max(const int axis)

max

Rückgabe des größten Wertes einer Matrix/Vektors.

double vector.Mean()

double matrix.Mean()

vector matrix.Mean(const int axis)

mean

Berechnung des arithmetischen Mittels der Elementwerte.

double vector.Min()

double matrix.Min()

vector matrix.Min(const int axis)

min

Rückgabe des kleinsten Wertes einer Matrix/Vektors.

double vector.Sum()

double matrix.Sum()

vector matrix.Sum(const int axis)

sum

Rückgabe der Summe der Matrix-/Vektorelemente, die auch für die angegebene Achse (Achsen) durchgeführt werden kann.

void vector.Clip(const double min_value,const double max_value)

void matrix.Clip(const double min_value,const double max_value)

clip

Limit der Elemente einer Matrix/eines Vektors in einen angegebenen Bereich gültiger Werte.

vector vector.CumProd()

vector matrix.CumProd()

matrix matrix.CumProd(const int axis)

cumprod

Rückgabe des kumulativen Produkts von Matrix-/Vektorelementen, einschließlich der Elemente entlang der angegebenen Achse.

vector vector.CumSum()

vector matrix.CumSum()

matrix matrix.CumSum(const int axis)

cumsum

Rückgabe der kumulativen Summe der Matrix-/Vektorelemente, einschließlich derjenigen entlang der angegebenen Achse.

double vector.Prod(const double initial=1)

double matrix.Prod(const double initial=1)

vector matrix.Prod(const int axis,const double initial=1)

prod

Rückgabe des Produkts der Matrix-/Vektorelemente, das auch für die angegebene Achse durchgeführt werden kann.

void matrix.Reshape(const ulong rows, const ulong cols)

reshape

Ändern der Form einer Matrix, ohne ihre Daten zu ändern.

void matrix.Resize(const ulong rows,const ulong cols)

resize

Rückgabe einer neuen Matrix mit geänderter Form und Größe.

bool matrix.SwapRows(const ulong row1, const ulong row2)

 

Vertauschen der Zeilen in einer Matrix.

bool matrix.SwapCols(const ulong col1, const ulong col2)

 

Vertauschen der Spalten in einer Matrix.

double vector.Ptp()

double matrix.Ptp()

vector matrix.Ptp(const int axis)

ptp

Rückgabe des Wertebereichs einer Matrix/eines Vektors oder der angegebenen Matrixachse, entspricht Max() - Min().

double vector.Percentile(const int percent)

double matrix.Percentile(const int percent)

vector matrix.Percentile(const int percent,const int axis)

percentile

Rückgabe des angegebenen Perzentils der Werte von Matrix-/Vektorelementen oder Elementen entlang der angegebenen Achse. Gültige Werte für den Parameter 'percent' liegen im Bereich [0, 100].

double vector.Quantile(const int percent)

double matrix.Quantile(const int percent)

vector matrix.Quantile(const int percent,const int axis)

quantil

Rückgabe des angegebenen Quantils der Werte von Matrix-/Vektorelementen oder Elementen entlang der angegebenen Achse zurück. Der Parameter 'percent' nimmt Werte im Bereich [0, 1] an.

double vector.Median()

double matrix.Median()

vector matrix.Median(const int axis)

median

Berechnung des Medians der Matrix-/Vektor-Elemente. Der Median ist der mittlere Wert, der die höchste Hälfte der Matrix-/Vektorelemente von der niedrigsten Hälfte der Elemente trennt.

double vector.Average()

double matrix.Average()

vector matrix.Average(const int axis)

average

Berechnung des arithmetische Mittels von Matrix-/Vektorwerten. Die Summe der Gewichte im Nenner darf nicht gleich 0 sein, aber einige Gewichte können 0 sein.

double vector.Std()

double matrix.Std()

vector matrix.Std(const int axis)

std

Rückgabe der Standardabweichung der Werte von Matrix-/Vektorelementen oder von Elementen entlang der angegebenen Achse.

double vector.Var()

double matrix.Var()

vector matrix.Var(const int axis)

var

Berechnung der Varianz der Werte von Matrix-/Vektorelementen.

double vector.CorrCoef(const vector& v)

matrix matrix.CorrCoef()

corrcoef

Berechnung des Pearson-Korrelationskoeffizientens (linearer Korrelationskoeffizient). Der Korrelationskoeffizient liegt im Bereich [-1, 1].

vector vector.Correlate(const vector& v,enum mode)

correlate

Berechnung der Kreuzkorrelation von zwei Vektoren. Der Parameter 'mode' bestimmt den Berechnungsmodus der linearen Faltung.

vector vector.Convolve(const vector& v, enum mode)

convolve

Rückgabe der diskreten, linearen Faltung zweier Vektoren. Der Parameter 'mode' bestimmt den Berechnungsmodus der linearen Faltung.

matrix matrix.Cov()

matrix vector.Cov(const vector& v); (resulting matrix 2 x 2)

cov

Berechnung der Kovarianzmatrix. Die Kovarianz von zwei Stichproben (zwei Zufallsvariablen) ist ein Maß für ihre lineare Abhängigkeit.