本征没有匹配函数调用.dot()?
Eigen no matching function for call .dot()?
在我的代码中,我定义了一个模板 class,其中 operator()
定义如下:
template<class Integrator, int ORDER>
inline double operator() (FiniteElement<Integrator, ORDER,2,3>& currentfe_,
int i, int j, int iq, int ic = 0)
{
Real s = 0;
Eigen::Matrix<double,2,1> grad_phi_i;
Eigen::Matrix<double,2,1> grad_phi_j;
grad_phi_i(0) = ...
grad_phi_i(1) = ...
grad_phi_j(0) = ...
grad_phi_j(1) = ...
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
return s;
}
在哪里
currentfe_.metric()
是class的一个方法FiniteElement
返回一个Eigen::Matrix<double,2,2>
.
我得到的错误是:
error: no matching function for call to ‘Eigen::Matrix<double, 2, 1>::dot(Eigen::internal::scalar_product_traits<double, double>::ReturnType)’
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
我想不通为什么。
这是因为Matrix .dot()
方法仅适用于向量之间的标量积(参见documentation)。
Here 你可以看到矩阵和向量之间的乘法是用 *
执行的。
一个可能的解决方案是:
grad_phi_i*currentfe_.metric()*grad_phi_j.transpose()
在我的代码中,我定义了一个模板 class,其中 operator()
定义如下:
template<class Integrator, int ORDER>
inline double operator() (FiniteElement<Integrator, ORDER,2,3>& currentfe_,
int i, int j, int iq, int ic = 0)
{
Real s = 0;
Eigen::Matrix<double,2,1> grad_phi_i;
Eigen::Matrix<double,2,1> grad_phi_j;
grad_phi_i(0) = ...
grad_phi_i(1) = ...
grad_phi_j(0) = ...
grad_phi_j(1) = ...
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
return s;
}
在哪里
currentfe_.metric()
是class的一个方法FiniteElement
返回一个Eigen::Matrix<double,2,2>
.
我得到的错误是:
error: no matching function for call to ‘Eigen::Matrix<double, 2, 1>::dot(Eigen::internal::scalar_product_traits<double, double>::ReturnType)’
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
我想不通为什么。
这是因为Matrix .dot()
方法仅适用于向量之间的标量积(参见documentation)。
Here 你可以看到矩阵和向量之间的乘法是用 *
执行的。
一个可能的解决方案是:
grad_phi_i*currentfe_.metric()*grad_phi_j.transpose()