2016-05-28 12 views
0

Hinweis: Ich verwende die Standardbibliothek für C++ und speichere Matrizen als mehrdimensionale Vektoren (siehe Beispiel unten).Wie soll ich zwei Matrizen in C++ multiplizieren?

Ich habe Probleme, die richtige Funktion zu finden, um zwei Matrizen in C++ zu multiplizieren. Um zu klären, was ich versuche zu tun:

A = | a1 a2 | B = | b1 | 
    | a3 a4 |  | b2 | 

Result = | (a1 * b1 + a2 * b2) | 
     | (a3 * b1 + a4 * b2) | 

Offensichtlich konnte ich tun dies einen einfachen Algorithmus, aber ich versuche zu finden, wenn es eine Funktion ist, dies zu tun.

Mein spezielles Beispiel in C++:

#include <vector> 

std::vector<std::vector<double>> A; 
A.push_back({ 0.96, 0.56 }); 
A.push_back({ 0.01, 0.41 }); 

std::vector<std::vector<double>> B; 
B.push_back({ 1.331749 }); 
B.push_back({ 1.0440705 }); 

Result = (A * B); 

Wo "Ergebnis" wäre:

| 1.8631586 | 
| 0.4413864 | 

Wie soll ich gehen über die oben tun?

+1

Um genauer zu sein, versuchen Sie, einen Vektor mit einer Matrix zu multiplizieren, die als Vektor von Vektoren dargestellt wird. 'std :: vector' ist nicht speziell für diese Art von Dingen gedacht. Versuchen Sie etwas, das z.B. die Eigen-Bibliothek. –

+1

Sie multiplizieren nicht zwei Vektoren, Sie multiplizieren zwei Matrizen. Die Standardvektorbibliothek für C++ hat nichts mit mathematischen Matrizen zu tun. (Ich weiß, dass ein Vektor in der Mathematik als eindimensionale Matrix betrachtet wird, aber dieses Konzept trifft hier nicht zu.) –

Antwort

1

Nein, in der C++ - Bibliothek gibt es keine Funktionen zur Vektormultiplikation. Es gibt einige Bausteine ​​wie std::for_each, std::copy und std::transform, mit denen diese implementiert werden können. Es liegt jedoch an Ihnen, den vollständigen Algorithmus selbst zu implementieren.

Es kann einige Bibliotheken irgendwo auf den Intertubes geben, die diese Algorithmen implementieren. Sie können Ihr Glück bei Google versuchen.

+0

Blas? Gemv hat mehrere vorgefertigte Optionen wie mkl und acml. – tim18

1

Ich glaube nicht, dass es eine Funktion gibt, um Vektoren wie Matrizen zu multiplizieren, aber es wäre nicht so schwierig, alleine zu implementieren. Ich würde vorschlagen, eine Matrix-Klasse zu erstellen. Damit könnten Sie den Operator * überladen. Dies würde aussehen wie die folgende:

class Matrix 
{ 
private: 
    // Whatever implementation you choose. 
    // This would probably be done with a vector of vectors. 
public: 
    Matrix& operator*(const Matrix&) const; 
    // Public interface 
} 

Dies würde ermöglichen es Ihnen, für die Multiplikation zweier Matrizen einen einfachen Algorithmus zu entwickeln.

Verwandte Themen