使用boost';s LU解算器,但避免计算矩阵逆? 我用Boost .提供的LU分解,用C++求解线性方程组。 static void boostLU(const boost::numeric::ublas::matrix<double> &A, const boost::numeric::ublas::matrix<double> &y) { boost::numeric::ublas::matrix<double> Afactorized = A; boost::numeric::ublas::matrix<double> Ainv = boost::numeric::ublas::identity_matrix<float>(A.size1()); boost::numeric::ublas::vector<double> x_boost(Afactorized.size1(), 1); boost::numeric::ublas::permutation_matrix<size_t> pm(Afactorized.size1()); boost::numeric::ublas::matrix<double> result = boost::numeric::ublas::identity_matrix<float>(A.size1()); int singular = boost::numeric::ublas::lu_factorize(Afactorized,pm); if (singular) { throw std::runtime_error("[LinearSolver<LU>::solve()] A is singular."); } result = y; boost::numeric::ublas::lu_substitute(Afactorized, pm, result); } 静态void boostLU(常量boost::numeric::ublas::matrix&A,常量boost::numeric::ublas::matrix&y) { boost::numeric::ublas::矩阵Afactorized=A; boost::numeric::ublas::matrix Ainv=boost::numeric::ublas::identity_matrix(A.size1()); boost::numeric::ublas::vector x_boost(Afactorized.size1(),1); boost::numeric::ublas::置换矩阵pm(Afactorized.size1()); boost::numeric::ublas::matrix result=boost::numeric::ublas::identity_matrix(A.size1()); int singular=boost::numeric::ublas::lu_factorize(一个工厂化的,pm); if(单数) { 抛出std::runtime_错误(“[LinearSolver::solve()]A是单数。”); } 结果=y; boost::numeric::ublas::lu_替换(工厂化、pm、结果); }

使用boost';s LU解算器,但避免计算矩阵逆? 我用Boost .提供的LU分解,用C++求解线性方程组。 static void boostLU(const boost::numeric::ublas::matrix<double> &A, const boost::numeric::ublas::matrix<double> &y) { boost::numeric::ublas::matrix<double> Afactorized = A; boost::numeric::ublas::matrix<double> Ainv = boost::numeric::ublas::identity_matrix<float>(A.size1()); boost::numeric::ublas::vector<double> x_boost(Afactorized.size1(), 1); boost::numeric::ublas::permutation_matrix<size_t> pm(Afactorized.size1()); boost::numeric::ublas::matrix<double> result = boost::numeric::ublas::identity_matrix<float>(A.size1()); int singular = boost::numeric::ublas::lu_factorize(Afactorized,pm); if (singular) { throw std::runtime_error("[LinearSolver<LU>::solve()] A is singular."); } result = y; boost::numeric::ublas::lu_substitute(Afactorized, pm, result); } 静态void boostLU(常量boost::numeric::ublas::matrix&A,常量boost::numeric::ublas::matrix&y) { boost::numeric::ublas::矩阵Afactorized=A; boost::numeric::ublas::matrix Ainv=boost::numeric::ublas::identity_matrix(A.size1()); boost::numeric::ublas::vector x_boost(Afactorized.size1(),1); boost::numeric::ublas::置换矩阵pm(Afactorized.size1()); boost::numeric::ublas::matrix result=boost::numeric::ublas::identity_matrix(A.size1()); int singular=boost::numeric::ublas::lu_factorize(一个工厂化的,pm); if(单数) { 抛出std::runtime_错误(“[LinearSolver::solve()]A是单数。”); } 结果=y; boost::numeric::ublas::lu_替换(工厂化、pm、结果); },c++,boost,decomposition,boost-ublas,C++,Boost,Decomposition,Boost Ublas,似乎lu_替代计算输入矩阵的逆矩阵,这是非常昂贵的计算(如前所述) 有什么方法可以避免使用boost功能吗?lu\u substitute不计算逆运算 查看源代码():lu\u substitute调用inplace\u solve,而inplace\u solve(定义如下:)执行inplace向前/向后替换。因此,一切都尽可能地高效 该实现似乎没有计算显式逆。

似乎lu_替代计算输入矩阵的逆矩阵,这是非常昂贵的计算(如前所述)


有什么方法可以避免使用boost功能吗?

lu\u substitute不计算逆运算


查看源代码():lu\u substitute调用inplace\u solve,而inplace\u solve(定义如下:)执行inplace向前/向后替换。因此,一切都尽可能地高效

该实现似乎没有计算显式逆。