gpt4 book ai didi

c++ - Eigen 没有匹配函数调用.dot()?

转载 作者:行者123 更新时间:2023-11-28 01:54:51 31 4
gpt4 key购买 nike

在我的代码中,我用 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()

是类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() 方法仅适用于 vector 之间的标量积(参见 documentation )。 Here您可以看到矩阵和 vector 之间的乘法是使用 * 执行的。

一个可能的解决方案是:

grad_phi_i*currentfe_.metric()*grad_phi_j.transpose()

关于c++ - Eigen 没有匹配函数调用.dot()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41567780/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com