使用Eigen的LLT求解对称正定矩阵时编译报错如何解决
问题原因
你使用了针对稠密矩阵设计的Eigen::LLT求解器处理稀疏矩阵,该求解器内部依赖的lpNorm等API未在稀疏矩阵的块结构中实现,因此触发编译报错。
正确调用方法
步骤1:引入对应头文件
稀疏矩阵的LLT求解器实现在SparseCholesky模块中,需要先引入对应头文件:
#include <Eigen/SparseCholesky>
步骤2:替换求解器类型
使用专门适配稀疏矩阵的Eigen::SimplicialLLT替代原有Eigen::LLT,修正后的代码如下:
Eigen::SparseMatrix<float> bijection(vert_count, vert_count); // 此处需为bijection填充有效值,确保矩阵为对称正定矩阵 // 初始化稀疏LLT求解器 Eigen::SimplicialLLT<Eigen::SparseMatrix<float>> llt_mat(bijection); // 若需求解线性方程组 Ax = b,调用solve接口即可 // Eigen::VectorXf x = llt_mat.solve(b);
注意事项
- 输入矩阵必须为对称正定矩阵,否则求解结果会不符合预期
- 填充矩阵时仅需填充下三角或上三角区域即可,
SimplicialLLT默认读取矩阵的下三角部分进行计算,无需重复填充对称元素
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

