运行我的代码会出现以下编译错误:
无法在初始化时将'const ScalarMultipleReturnType {aka const Eigen :: CwiseUnaryOp,const Eigen :: Matrix>}'转换为'double' double tempSum = deltaT *(vectorB(i)-vectorB2(i))* k [i];
在以下行:
double tempSum = deltaT*(vectorB(i)-vectorB2(i))*k[i];
truncError = truncError + tempSum;
我已将变量vectorB和vectorB2定义为:Eigen::VectorXd vectorB;
并分别为两个向量初始化为vectorB = Eigen::VectorXd::Zero(size);
。
k定义为:std::vector<Eigen::MatrixXd> k(size);
deltaT的类型为double
每个尽管k是矩阵的向量,但每个矩阵只有一个值。例如:k [0]是单个双精度值。
有人可以帮助我进行类型转换吗?我认为这就是造成这个问题的原因。我希望将表达式double tempSum = deltaT*(vectorB(i)-vectorB2(i))*k[i]
的RHS转换为双变量。
答案 0 :(得分:0)
所以我尝试创建一个临时矩阵,即Eigen::MatrixXd temp = k[i];
,因为我知道k [i]是一个单元素矩阵,我在表达式double tempSum = deltaT*(vectorB(i)-vectorB2(i))*temp(0,0);
中使用它并且它可以正常工作。不过,这是一个非常粗略的解决方案,也是一个非常专业的解决方案