本征能对四元离子矩阵进行光谱分解吗?我正在尝试从高斯辛群(四元Hermitian /自伴矩阵)生成矩阵,以试验特征值间隔(Wigner Surmise),但是在摆弄一会儿之后,我不确定如何做到这一点。 >
我是否需要使用四元数插件扩展MatrixBase
类以获得四元离子矩阵支持,然后将矩阵输入SelfAdjointEigenSolver
中?
我目前仅尝试使用Matrix<Quaternion<double>, Dynamic, Dynamic>
并将其直接输入SelfAdjointEigenSolver
中。这导致clang
吐出一堆错误,大多数错误似乎都缺少操作员的抱怨。
错误转储:
/usr/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h:434:11: error: invalid operands to binary expression
('Eigen::SelfAdjointEigenSolver<Eigen::Matrix<Eigen::Quaternion<double, 0>, -1, -1, 0, -1, -1> >::RealScalar'
(aka 'Eigen::Quaternion<double, 0>') and 'Eigen::SelfAdjointEigenSolver<Eigen::Matrix<Eigen::Quaternion<double, 0>, -1, -1, 0, -1,
-1> >::RealScalar')
if(scale==RealScalar(0)) scale = RealScalar(1);
...
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algobase.h:224:15: error: invalid operands to
binary expression ('const Eigen::Quaternion<double, 0>' and 'const Eigen::Quaternion<double, 0>')
if (__a < __b)
...
/usr/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h:361:128: error: invalid operands to binary expression
('const Eigen::Quaternion<double, 0>' and 'const Eigen::Quaternion<double, 0>')
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a / b; }
...
/usr/include/eigen3/Eigen/src/Core/TriangularMatrix.h:769:89: error: no matching conversion for functional-style cast from 'int' to
'Eigen::internal::triangular_dense_assignment_kernel<1, 0, 0,
Eigen::internal::evaluator<Eigen::TriangularView<Eigen::Matrix<Eigen::Quaternion<double, 0>, -1, -1, 0, -1, -1>, 1> >,
Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<Eigen::Quaternion<double, 0>,
Eigen::Quaternion<double, 0> >, const Eigen::Matrix<Eigen::Quaternion<double, 0>, -1, -1, 0, -1, -1>, const
Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<Eigen::Quaternion<double, 0> >, const
Eigen::Matrix<Eigen::Quaternion<double, 0>, -1, -1, 0, -1, -1> > > >, Eigen::internal::assign_op<Eigen::Quaternion<double, 0>,
Eigen::Quaternion<double, 0> >, 0>::Scalar' (aka 'Eigen::Quaternion<double, 0>')
if(Mode==UnitDiag && SetOpposite) m_functor.assignCoeff(m_dst.coeffRef(id,id), Scalar(1));
...
/usr/include/eigen3/Eigen/src/Eigenvalues/./Tridiagonalization.h:365:31: error: no viable overloaded '='
matA.col(i).coeffRef(i+1) = 1;
(and then a ton more)
我似乎无法从搜索中找到任何东西。我以前选择的线性代数库(Armadillo)从外观上没有四元数的支持。