特征样条模块断言

时间:2015-12-03 10:06:59

标签: eigen spline assertion

我在Eigen中使用样条模块,当我将Spline<double, 1>的类型设置为成员变量时,Assertion失败了。 这是一个例子,

#include "Eigen/eigen"
#include "unsupported/Eigen/splines"
using namespace Eigen;
class Spline1d
{
   Spline<double, 1> spl1d;
public:
   ~Spline1d() {};
   Spline1d() {};
   Spline1d(const MatrixXd &input) {
      spl1d = SplineFitting<Spline<double, 1> >::Interpolate(input.row(1), 1, input.row(0));
   }
};
int main()
{
   MatrixXd vals(2, 5);
   vals << 1.0, 2.0, 3.0, 4.0, 5.0,
          1.0, 2.0, 3.0, 4.0, 5.0;

   // Spline1d spl(vals);                  // case 1
   Spline<double, 1> spl1d =       // case 2
         SplineFitting<Spline<double, 1>>::Interpolate(vals.row(1), 1, vals.row(0));
   return 0;
}

评论case 1,使用case 2,效果很好。

但使用case 2发表评论case 1,它失败了,而且是运行时错误。 这是命令行中的错误消息,

Assertion failed: v == T(Value), file d:\onedrive\documents\codes\library\eigen\
src/Core/util/XprHelper.h, line 53

1 个答案:

答案 0 :(得分:0)

案例2不是赋值,而是构造函数。

将您的案例1更改为

Spline1d(const MatrixXd &input)
 : spl1d(SplineFitting<Spline<double, 1> >::Interpolate(input.row(1), 1, input.row(0))){
}

它将构建。