计算 Eigenvalue/vector 的数组而不是具有 Eigen 3 的矩阵
Compute Eigenvalue/vector of an Array instead of Matrix with Eigen 3
我想计算数组而不是矩阵的 eigenvalue/vector。
我试过 EigenSolver<ArrayXf>
但出现编译错误。
我可以将数组复制到矩阵。但那是浪费内存。
以下代码给出了分段错误。
测试 1:
#include <Eigen/Eigen>
using namespace Eigen;
int main() {
ArrayXf A = ArrayXf::Ones(3,3);
EigenSolver<MatrixXf> es(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)
我也试过EigenSolver<MatrixXf> es(A.matrix())
。但这也行不通。
测试 2:
#include <Eigen/Eigen>
using namespace Eigen;
int main() {
ArrayXf A = ArrayXf::Ones(3,3);
EigenSolver<MatrixXf> es(A.matrix());
}
结果:
<...>/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)
问题是 ArrayXf
是一个一维数组,而你想要一个二维数组:ArrayXXf
.
一些历史:我们在引入 Array 之前想出了 VectorXf/MatrixXf 名称,其中没有自然名称来区分 1D 和 2D,因此单个 X 与双 XX...
我想计算数组而不是矩阵的 eigenvalue/vector。
我试过 EigenSolver<ArrayXf>
但出现编译错误。
我可以将数组复制到矩阵。但那是浪费内存。
以下代码给出了分段错误。
测试 1:
#include <Eigen/Eigen>
using namespace Eigen;
int main() {
ArrayXf A = ArrayXf::Ones(3,3);
EigenSolver<MatrixXf> es(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)
我也试过EigenSolver<MatrixXf> es(A.matrix())
。但这也行不通。
测试 2:
#include <Eigen/Eigen>
using namespace Eigen;
int main() {
ArrayXf A = ArrayXf::Ones(3,3);
EigenSolver<MatrixXf> es(A.matrix());
}
结果:
<...>/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)
问题是 ArrayXf
是一个一维数组,而你想要一个二维数组:ArrayXXf
.
一些历史:我们在引入 Array 之前想出了 VectorXf/MatrixXf 名称,其中没有自然名称来区分 1D 和 2D,因此单个 X 与双 XX...