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)

 

Vergleich zweier Matrizen.