c++ - 特征稀疏求解器为同一线性系统提供截然不同的解决方案
问题描述
我正在尝试使用特征尽快解决稀疏线性系统。
文档为您提供了 4 个稀疏求解器(但实际上它更像这三个):
SimplicialLLT
#include<Eigen/SparseCholesky> Direct LLt factorization SPD Fill-in reducing LGPL
SimplicialLDLT is often preferable
SimplicialLDLT
#include<Eigen/SparseCholesky> Direct LDLt factorization SPD Fill-in reducing LGPL
Recommended for very sparse and not too large problems (e.g., 2D Poisson eq.)
SparseLU
#include<Eigen/SparseLU> LU factorization Square Fill-in reducing, Leverage fast dense algebra MPL2
optimized for small and large problems with irregular patterns
当我使用最后一个求解器时,即我这样做:
Eigen::SparseLU<Eigen::SparseMatrix<Scalar>> solver(bijection);
Assert(solver.info() == Eigen::Success, "Matrix is degenerate.");
solver.compute(bijection);
Assert(solver.info() == Eigen::Success, "Matrix is degenerate.");
Eigen::VectorXf vertices_u = solver.solve(u);
Assert(solver.info() == Eigen::Success, "Matrix is degenerate.");
Eigen::VectorXf vertices_v = solver.solve(v);
Assert(solver.info() == Eigen::Success, "Matrix is degenerate.");
我得到了正确的结果,其图形如下所示:
如果我使用 simplicialLDLT,即如果我更改求解器行而不是其他任何内容:
Eigen::SimplicialLDLT<Eigen::SparseMatrix<Scalar>> solver(bijection);
我得到了这个堕落的怪物:
基本上,这两个求解器为完全相同的稀疏系统返回了截然不同的结果。这怎么可能?
没有任何错误检查返回 false,因此在两个版本中,矩阵都被认为是好的。
解决方案
推荐阅读
- javascript - url-loader configuration in webpack is loading the images from different path in React JS project
- laravel-5.6 - 无法覆盖模型 laravel 5.6 中的引导方法
- json - Angular 4 在 HTML 页面中使用 ndFor 和 Ngif 显示 Json 数组值
- angular - Angular5 - 测试一个调用内部http服务的函数
- html - 填充窗口的剩余高度
- python - 在python中读取许多pdf文件
- android - Annotation 参数必须是编译时间常数
- ios - 在 Arkit 应用程序中设置 3D 文本的方向
- r - facet_wrap:标记(颜色边框,线条和标题)一个特定的情节
- eclipse - 与无法与旧代码比较的存储库问题同步