C++ 计算阵列的特征值/向量,而不是特征值为3的矩阵

C++ 计算阵列的特征值/向量,而不是特征值为3的矩阵,c++,eigen,eigen3,C++,Eigen,Eigen3,我想计算数组的特征值/向量,而不是矩阵 我尝试了EigenSolver,但这会导致编译错误 我可以将数组复制到矩阵中。但这是对记忆的浪费 下面的代码给出了分段错误 测试1: #include <Eigen/Eigen> using namespace Eigen; int main() { ArrayXf A = ArrayXf::Ones(3,3); EigenSolver<MatrixXf> es(A); } #包括 使用名称空间特征; int ma

我想计算数组的特征值/向量,而不是矩阵

我尝试了
EigenSolver
,但这会导致编译错误

我可以将数组复制到矩阵中。但这是对记忆的浪费

下面的代码给出了分段错误

测试1:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A);
}
#包括
使用名称空间特征;
int main(){
ArrayXf A=ArrayXf::one(3,3);
特征值(A);
}
结果:

<...>/Eigen/src/Core/util/XprHelper.h:130: 
Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) 
[with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)
<...>/XprHelper.h:130: Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) [with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)
/Eigen/src/Core/util/XprHelper.h:130:
特征::内部::变量如果动态::变量如果动态(T)
[带T=long int;int-Value=1]:断言'v==T(Value)'失败。
中止(堆芯转储)
我还尝试了
特征解算器(A.matrix())
。但这也不行

测试2:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A.matrix());
}
#包括
使用名称空间特征;
int main(){
ArrayXf A=ArrayXf::one(3,3);
特征解算器(A.矩阵());
}
结果:

<...>/Eigen/src/Core/util/XprHelper.h:130: 
Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) 
[with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)
<...>/XprHelper.h:130: Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) [with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)
/XprHelper.h:130:Eigen::internal::variable_if_dynamic::variable_if_dynamic(T)[带T=long int;int-Value=1]:断言'v==T(Value)'失败。
中止(堆芯转储)

问题在于
ArrayXf
是1D数组,而您需要的是2D数组:
ArrayXf


一些历史:在引入数组之前,我们提出了VectorXf/MatrixXf名称,数组没有自然名称来区分1D和2D,因此单X和双XX…

我学习向量计算或线性代数已经有一段时间了,但是IIRC,向量的特征值没有多大意义。@erip:我只是将示例中的矩阵更改为数组类型。看我是否理解正确,用数学术语来说,你仍然想计算矩阵的特征值/向量,只是矩阵碰巧被存储为
ArrayXf
,对吗?谢谢。在test1中,将
ArrayXf
替换为
ArrayXf
。当
Ones(3,3)
没有导致编译错误/运行时断言错误时,我认为这很好。。。