【发布时间】:2015-07-29 11:55:49
【问题描述】:
运行我的代码会出现以下编译错误:
无法在初始化中将 '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 转换为双变量。
【问题讨论】:
-
我不熟悉 Eigen - 但是你正在做一个向量乘以一个矩阵,所以结果将是另一个向量,所以将向量转换为双精度是没有意义的.您能否提供一些示例输入和输出来显示您要计算的内容?
-
@MattMcNabb 不,我将向量中的单个元素(即
(vectorB(i)-vectorB2(i)))乘以单个元素矩阵,所以根据我的说法,返回类型应该是double。就像我提到的,k[i]是一个单元素矩阵。 -
通常,两个向量相减得到另一个向量。为什么你期望它给出一个元素?另外:单元素矩阵与标量不同,您的最后一条评论表明您将这两者视为可互换的。 (IDK 是否 Eigen 具有从单元素矩阵进行的隐式转换,但如果是,则必须仅在编译时已知矩阵大小时才有效)
-
要获得好的答案,您需要发布MCVE。你应该可以把它减少到 10 行左右,因为这是一个编译器错误。
-
vectorB(i) 是数据类型 Eigen::VectorXd 的 vectorB 的单个元素。对于向量B2(i) 也是如此。这基本上在一个循环中运行,它使用变量 i 访问 vectorB 和 vectorB2 的各个元素。