前提・実現したいこと
xT * A * x + B * x
(xTはxの転置を意味しています.)
のような二次関数を計算したいです.
A: 行列(Eigen::MatrixXd)
B: 横ベクトル(Eigen::RowVectorXd)
x: 縦ベクトル(Eigen::VectorXd)
発生している問題・エラーメッセージ
まず,数式通りに
cpp
1double sum; 2sum = xT * A * x + B * x;
としたのですが,
cannot convert ‘const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, const Eigen::Product<Eigen::Product<Eigen::Matrix<double, 1, 2>, Eigen::Matrix<double, 2, 2>, 0>, Eigen::Matrix<double, 2, 1>, 0>, const Eigen::Product<Eigen::Matrix<double, 1, 2>, Eigen::Matrix<double, 2, 1>, 0> >’ to ‘double’ in assignment
というエラーが出ました.ここで,
cpp
1double sum; 2sum = xT * A * x; 3sum += B * x;
としたところ,エラーが消えました.
該当のソースコード
実際のコードも参考のため,載せておきます.
#include <iostream> #include <Eigen/Core> using namespace Eigen; using namespace std; int main() { Vector2d x(2); RowVector2d xT(2); x << 0, 1; xT = x.transpose(); Matrix2d A(2,2); A << 1.0, 1.0, 1.0, 2.0; RowVector2d B(2); B << -6.0, 4.0; double sum; sum = xT * A * x + B * x; /* sum = xT * A * x; sum += B * x; */ cout << sum << endl; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。