CGAL和求解器

        几个CGAL包必须解决稠密或稀疏矩阵的线性系统、线性整数规划和二次规划。这个包为此提供了概念和模型。

        对于线性系统,我们通常使用Eigen库提供模型。 Eigen类Eigen_matrix和Eigen_vector的封装器也在需要时提供。为其他求解器开发等效模型很简单,例如在英特尔数学内核库(MKL)中发现的那些。

        对于混合整数规划(有约束或无约束),我们使用SCIP和GLPK库提供模型。

        对于线性和二次规划,CGAL 库提供了内置的 CGAL 线性与二次规划求解器,我们还提供了一个使用 OSQP 库的模型。 

1、矩阵对角化

        概念 DiagonalizeTraits 定义了一个接口,用于对称矩阵的特征向量和特征值的对角化和计算。 T 是数字类型,dim 是矩阵和向量的维数(默认设置为 3)。我们提供了使用 Eigen 库的模型 Eigen_diagonalize_traits

 typedef CGAL::Eigen_diagonalize_traits           Diagonalize_traits;
Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix
(covariance,eigenvalues,eigenvectors))

2、奇异值分解

        概念 SvdTraits 定义了一个接口,用于通过奇异值分解以最小二乘法解决线性系统。 字段类型为 double。我们提供了使用 Eigen 库的模型 Eigen_svd。

typedef CGAL::Eigen_svd Svd;
Svd::solve(M, B) 

3、稀疏解算器

        我们定义了稀疏线性代数的3个概念:

        SparseLinearAlgebraTraits_d

        SparseLinearAlgebraWithFactorTraits_d

        NormalEquationSparseLinearAlgebraTraits_d

        Eigen库中的稀疏求解器接口通过Eigen_solver_traits类作为这3个概念的模型。该求解器traits类可用于迭代或直接、对称或通用的稀疏求解器。要使用的特定求解器必须作为模板参数给出。

        每个使用稀疏求解器的万达包都指定了所需的矩阵和求解器类型

typedef CGAL::Eigen_sparse_matrix::EigenType EigenMatrix;

typedef CGAL::Eigen_solver_traits< Eigen::BiCGSTAB > Iterative_general_solver;

typedef CGAL::Eigen_solver_traits< Eigen::ConjugateGradient > Iterative_symmetric_solver;

typedef CGAL::Eigen_solver_traits< Eigen::SimplicialCholesky > Direct_symmetric_solver;

4、混合整数程序求解器

        字段类型为 double。我们提供了两个此概念模型:CGAL::GLPK_mixed_integer_program_traits 使用 GLPK 和 CGAL::SCIP_mixed_integer_program_traits 使用 SCIP。


typedef CGAL::SCIP_mixed_integer_program_traits                        MIP_Solver;


typedef CGAL::GLPK_mixed_integer_program_traits                        MIP_Solver;

typedef typename MIP_Solver::Variable                        Variable;
typedef typename MIP_Solver::Linear_objective        Linear_objective;
typedef typename MIP_Solver::Linear_constraint        Linear_constraint;

5、二次程序求解器

        概念 QuadraticProgram Traits 为二次规划 (QP) 定义了一个接口,而类似的概念 LinearProgram Traits 为线性规划 (LP) 定义了一个接口。模型CGAL::OSQP_quadratic_program_traits 提供了一种使用稠密或稀疏接口求解凸二次规划的方法。

6、其他

        矩阵对角化(Matrix Diagonalization)是线性代数中的一个重要概念,它涉及到将一个矩阵分解为一个对角矩阵和一个上三角矩阵的乘积。这种分解方式对于解决一些线性代数问题,如求解线性方程组、计算矩阵的逆和行列式等,是非常有用的。

        具体来说,对于一个给定的矩阵A,如果存在一个可逆矩阵P和对角矩阵D,使得P^(-1)AP=D,则称矩阵A是可对角化的。对角化矩阵的过程可以通过求解特征值和特征向量来实现。

        在实际应用中,对角化矩阵对于理解和解决许多问题都非常有用。例如,在控制理论中,对角化矩阵可以帮助我们理解系统的稳定性和性能;在量子力学中,对角化矩阵可以用于描述系统的状态和演化;在机器学习中,对角化矩阵可以用于降维和特征提取等任务。

        需要注意的是,不是所有的矩阵都可以对角化。对于不可对角化的矩阵,我们可以通过其他方法来求解相关问题,如使用Jordan分解或SVD分解等。

CGAL 5.6 - CGAL and Solvers: User Manual

你可能感兴趣的:(CGAL,算法,矩阵)