Получение ошибки при использовании функции atan2 () на двух собственных матрицах - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в Eigen и пытаюсь использовать функцию atan2 () во 2-м и 3-м столбцах inputMatrix. Функция atan2 подчеркнута красным, что говорит мне, что "class Eigen :: Matrix не имеет члена" atan2 "", я получаю другую ошибку, если попробую: atan2 (Z) -или-

atan2(A.array(), B.array()) 

Опять же, будучи новичком в Eigen, я понимаю, что мне нужно использовать .array в матрице для выполнения операций, но я чувствую, что сделал это ниже. Подскажите, пожалуйста, что я делаю не так.

Eigen::MatrixXd sampleFunction(Eigen::MatrixXd inputMatrix)
{
    Eigen::MatrixXd Z, A, B, V;

    A = inputMatrix.col(1);
    B = inputMatrix.col(2);

    Z = (A.array(), B.array());
    V = Z.atan2();

    return V;
}

1 Ответ

0 голосов
/ 06 августа 2020

Чтобы уточнить, есть две разные функции тригонометрии c для загара.

  • atan2() вычисляет все четыре квадранта.

  • atan() только вычисляет один и четыре квадранта.

Теперь eigen поддерживает только atan(). Которая вычисляет ар c тангенс.

Вот почему вы получаете ошибку "class Eigen::Matrix has no member "atan2"".

Однако, используя заголовочный файл #include <cmath> или #include <valarray>, вы можете использовать функцию atan2(). valarray также включает atan2().

Например, используя файл заголовка #include <valarray>

#include <iostream> 
#include <valarray>



int main()
{

    double y[] = { 2.0, 1.6, -3.8, 2.3 };
    double x[] = { 3.0, -2.4, 2.0, -1.8 };


    std::valarray<double> ycoords(y, 4);
    std::valarray<double> xcoords(x, 4);

    //Results go to valarray
    std::valarray<double> res = atan2(ycoords, xcoords);

    // print results of atan2() function 
    std::cout << "results:";
    for (size_t i = 0; i < res.size(); ++i)
        std::cout << ' ' << res[i];
    std::cout << ' ';

    return 0;
}
...