Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态矩阵特征分解过程中的误差_C++_C++17_Eigen_Eigen3 - Fatal编程技术网

C++ 动态矩阵特征分解过程中的误差

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

我正在尝试Eigen提供的示例,它似乎有效。但是,当我试图改变矩阵类型以支持动态矩阵时,所有内容都会爆炸(下面的内容与示例中的内容完全相同,但矩阵/向量的类型除外):

#包括
#包括
使用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);
^^^^^