Vector operations on eigenvectors of vectors

I have a 2D own array, where each element in the array is a 3-element eigenvector (for example, a velocity field above the surface).

I want to multiply each each element of a 2D array by a 3-element Eigen RowVector, effectively using a dot product.

    Eigen::Array<Eigen::Vector3d, Eigen::Dynamic, Eigen::Dynamic> velField(5, 5);
    Eigen::Vector3d n;
    // ... initialisation of n and velField not shown

    Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> result(5, 5);
    result = n.transpose() * velField;

This gives a compilation error YOU ARE MIXED DIFFERENT NUMBER TYPES. However, if I do not assign a result, we simply calculate it:

    n.transpose() * velField;

it compiles. What is the correct return type for the "result" - or how else can I fix it?

EDIT

The same problem can be observed in this simpler case (double multiplication):

Eigen::Array<Eigen::Vector3d, Eigen::Dynamic, Eigen::Dynamic> velField(5, 5);
// ... initialisation of velField not shown
Eigen::Array<Eigen::Vector3d, Eigen::Dynamic, Eigen::Dynamic> result(5, 5);
result = 3.0 * velField;

However, the same code works when used std::complex<double>instead Eigen::Vector3d:

Eigen::Array<std::complex<double>, Eigen::Dynamic, Eigen::Dynamic> velField(5, 5);
// ... initialisation of velField not shown
Eigen::Array<std::complex<double>, Eigen::Dynamic, Eigen::Dynamic> result(5, 5);
result = 3.0 * velField;

, std::complex, Eigen::Vector3d. * double.

+4
2

:

, _Scalar :

_Scalar: matrix_tparam_scalar Numeric type, e.g. float, double, int or std::complex<float>.
User defined sclar types are supported as well.

. " ". Eigen::NumTraits <Vector3d> . Vector3d, , Eigen::Matrix/Eigen::Array.


Update:

n.transpose() * velField; - . ( ++ 11):

auto result = n.transpose() * velField;

( result ). result, , .

+4

. velField , .. 1D- , .

+1

Source: https://habr.com/ru/post/1532751/


All Articles