C++ 动态矩阵特征分解过程中的误差
我正在尝试Eigen提供的示例,它似乎有效。但是,当我试图改变矩阵类型以支持动态矩阵时,所有内容都会爆炸(下面的内容与示例中的内容完全相同,但矩阵/向量的类型除外):C++ 动态矩阵特征分解过程中的误差,c++,c++17,eigen,eigen3,C++,C++17,Eigen,Eigen3,我正在尝试Eigen提供的示例,它似乎有效。但是,当我试图改变矩阵类型以支持动态矩阵时,所有内容都会爆炸(下面的内容与示例中的内容完全相同,但矩阵/向量的类型除外): #包括 #包括 使用Matrix2D=特征::矩阵; 使用向量=特征::矩阵; int main(){ 矩阵2da(3,3); 载体b(3); A这是使用auto危险的地方之一 您链接到的示例有: Vector3f x = A.colPivHouseholderQr().solve(b); ^^^^^^^^ 你有: auto x
#包括
#包括
使用Matrix2D=特征::矩阵;
使用向量=特征::矩阵;
int main(){
矩阵2da(3,3);
载体b(3);
A这是使用auto
危险的地方之一
您链接到的示例有:
Vector3f x = A.colPivHouseholderQr().solve(b);
^^^^^^^^
你有:
auto x = A.colPivHouseholderQr().solve(b);
^^^^^
在这种情况下,这是一个非常显著的区别,因为solve()的返回类型
不是Vector3f
。它是某种中间不可表达的类型-我们正在构建一个表达式模板以供以后使用。但是,该表达式模板保留了一组中间引用,如果您不立即解析它们,这些引用就会挂起
从:
简而言之:不要将auto
关键字与Eigen的表达式一起使用,除非您100%确定自己在做什么。特别是,不要将auto关键字用作矩阵
类型的替换
哎呀,我今天忙得不可开交,一点也没想。谢谢你的帮助。
Vector3f x = A.colPivHouseholderQr().solve(b);
^^^^^^^^
auto x = A.colPivHouseholderQr().solve(b);
^^^^^