Vektor-Matrix-Produkt mit Eigen
-
ich möchte ein Vektor-Matrix-Produkt mit Eigen berechnen
ich bekomme aber bei meinen Versuchen immer nur INVALID_MATRIX_PRODUCTin Wolframalpha: Vektor-Matrix-Produkt
#include <Eigen/Dense> int main() { Eigen::Matrix3d m; // ist eine rotations matrix Eigen::Vector3d v; // ist ein Point(x,y,z) //auto vector_matrix_product = v * m; return 0; }
kann mir jemand sagen wie ich mit Eigen das Vektor-Matrix-Produkt bekommen?
-
Willst du nicht eher "m * v"?
-
Das waere ja dann ein matrix vector produkt und nicht ein vector matrix produkt
Siehe "Vektor mal Matrix"
https://de.m.wikipedia.org/wiki/Matrizenmultiplikation
-
Ich glaube das ist die Lösung
Eigen möchten gerne einen Zeilen-Vektor vorgegeben bekommen und nicht einfach einen Vector3d#include <Eigen/Dense>
int main()
{
Eigen::Matrix3d m; // ist eine rotations matrix
Eigen::RowVector3d v; // ist ein Point(x,y,z)
Eigen::RowVector3d a = v * m;
return 0;
}
-
im meinem 1. Beispiele wäre das wohl dann
Eigen::Matrix3d m; Eigen::Vector3d v; Eigen::Vector3d vector_matrix_product = (v.transpose() * m).transpose();
-
Gast3 schrieb:
Eigen möchten gerne einen Zeilen-Vektor vorgegeben bekommen und nicht einfach einen Vector3d
Beachte, dass das davon abhängt, ob du den Vektor bei der Multiplikation auf der linken oder auf der rechten Seite stehen hast.
Ein Vektor ist eigentlich nichts anderes als eine - oder eine -Matrix für welche die üblichen Regeln für die Multiplizierbarkeit
zweier Matrizen gelten: Spaltenzahl der linken und Zeilenzahl der rechten Seite müssen übereinstimmen.Beachte auch dass Matrizenmultiplikation nicht kommutativ ist, und solche Transformationsmatrizen im Allgemeinen so definiert sind,
dass die Transformation so wie beschrieben durchgeführt wird, wenn man den Vektor auf der rechten Seite der Multiplikation stehen hat.
Bei deiner Rotationsmatrix wird das z.B. den Effekt haben, dass der Vektor in die entgegengesetzte Richtung rotiert wird, als du vielleicht
erwartest (Da in deinem Fall und für Rotationsmatrizen , also die inverse Rotation). Wenn du genau weisst,
weshalb du von links multiplizierst dann will ich nichts gesagt habenGast3 schrieb:
#include <Eigen/Dense> //auto vector_matrix_product = v * m;
Noch eine Anmerkung: Zwar kenne ich Eigen nicht, aber du solltest mal in der Doku recherchieren ob du hier tatsächlich
auto
verwenden kannst.
Oft verwenden solche Bibliotheken nämlich sog. Expression Templates und die Multiplikation könnte ein Proxy-Objekt zurückliefern, welches Referenzen
auf die (moglicherweise temporären) Operanden hält und das evtl. nicht dafür ausgelegt ist, außerhalb von temporären Ausdrücken instanziert zu werden.
-
Wenn du genau weisst,
weshalb du von links multiplizierst dann will ich nichts gesagt habenich weiss...
und danke für deine Anmerkung - ich prüf das mal
-