c++ - lu_factorize 损坏数据(行列式)
问题描述
伙计们。当我试图计算行列式时,我的矩阵有时会遇到问题。在这张图片中,您可以看到 (2, 2) 成员的问题。 这是非常罕见的情况。我的功能:
double_t Determinant(const ublas::matrix<double_t> & matrix)
{
// boost::numeric::ublas
ublas::matrix<double_t> mLu(matrix);
ublas::permutation_matrix<std::size_t> pivots(matrix.size1());
std::cout << "BEFORE FACTORIZE" << std::endl;
PrintMatrix(mLu); // just printing the matrix
if (ublas::lu_factorize(mLu, pivots)) // there are some problems here
{
return 0.0;
}
std::cout << std::endl << "AFTER FACTORIZE" << std::endl;
PrintMatrix(mLu); // just printing the matrix
double_t det = 1.0;
for (std::size_t i = 0; i < pivots.size(); ++i)
{
det *= (pivots(i) != i ? -1. : 1.) * mLu(i, i);
}
return det;
}
如何解决?谢谢。
解决方案
推荐阅读
- mkusertrackingmode - Restart MKUserTrackingMode.FollowWithHeading
- python - Django:理解超级保存功能的问题
- python - cv2.counterArea 在 OpenCV 4.0 中不再起作用
- python - Django如何建立家庭关系
- angular - 切换表单时,Angular 反应式表单控件的禁用状态未正确应用于 DOM?
- flutter - 如何在 Flutter 中调用 Stream Builder 中的导航器?
- bash - BASH - 将数组字符串转换为数组
- python - Postgres对大型数据库中已经排序的数据进行排序
- r - 使用正则表达式从分隔数组中提取每个第 n 个字符
- sql - 对行编号并在特定条件下将计数器重置为 1