正定算子是线性代数、优化理论、数值计算和机器学习中非常重要的概念。在线性代数中正定算子通常对应正定矩阵在泛函分析或量子力学中它也可以指希尔伯特空间上的正定线性算子。对于有限维实向量空间一个对称矩阵如果对所有非零向量都产生严格正的二次型就可以称为正定算子。正定算子的核心意义在于它保证二次型具有严格正的能量保证优化问题具有唯一极小点也保证许多数值算法能够稳定运行。本报告围绕正定算子的数学定义、Python 判断方法、数值实验和应用场景展开并给出完整代码、运行结果和解析。一、正定算子的数学定义设AAA是一个n×nn \times nn×n实对称矩阵。如果对任意非零向量x∈Rnx \in \mathbb{R}^nx∈Rn都有xTAx0 x^T A x 0xTAx0则称AAA为正定矩阵也可以理解为对应的线性算子是正定算子。正定矩阵通常具有以下几个等价性质二次型严格正对任意非零向量xxx都有xTAx0x^T A x 0xTAx0。特征值全为正若AAA是实对称矩阵则AAA正定当且仅当其所有特征值都大于 0。Cholesky 分解存在正定对称矩阵可以进行 Cholesky 分解即存在下三角矩阵LLL使得ALLTA L L^TALLT。顺序主子式全为正对称矩阵正定时其各阶顺序主子式都大于 0。可逆性正定矩阵一定可逆且逆矩阵也是正定的。这些性质为 Python 判断正定性提供了多种思路。实际编程中最常用的是特征值判断和 Cholesky 分解判断。二、Python 实现正定性判断下面给出一个完整的 Python 程序用于生成随机矩阵、构造正定矩阵、判断正定性并比较不同方法的效率与稳定性。importnumpyasnpfromscipy.linalgimportcholesky,eigvalshimporttimedefis_positive_definite_by_eigenvalues(A,tol1e-10): 通过特征值判断矩阵是否正定。 要求矩阵为实对称矩阵。 若所有特征值都大于 tol则认为正定。 ifA.shape[0]!A.shape[1]:returnFalse,矩阵不是方阵ifnotnp.allclose(A,A.T,atoltol):returnFalse,矩阵不是对称矩阵eigenvalueseigvalsh(A)is_pdbool(np.all(eigenvaluestol))returnis_pd,eigenvaluesdefis_positive_definite_by_cholesky(A,tol1e-10): 通过 Cholesky 分解判断矩阵是否正定。 若能成功分解则矩阵正定否则不正定。 ifA.shape[0]!A.shape[1]:returnFalse,矩阵不是方阵ifnotnp.allclose(A,A.T,atoltol):returnFalse,矩阵不是对称矩阵try:cholesky(A,lowerTrue)returnTrue,Cholesky 分解成功exceptExceptionase:returnFalse,str(e)defquadratic_form(A,x):计算二次型 x^T A xxnp.asarray(x,dtypefloat)returnfloat(x.T A x)defgenerate_positive_definite_matrix(n,seedNone): 生成一个随机正定对称矩阵。 方法生成随机矩阵 B计算 A B^T B I 这样 A 一定对称且正定。 rngnp.random.default_rng(seed)Brng.standard_normal((n,n))AB.T Bnp.eye(n)returnAdefgenerate_indefinite_matrix(n,seedNone): 生成一个不定对称矩阵。 方法生成随机对称矩阵再减去足够大的倍数单位矩阵 使其出现负特征值。 rngnp.random.default_rng(seed)Mrng.standard_normal((n,n))A(MM.T)/2A-5*np.eye(n)returnAdefbenchmark_methods(n,trials10,seed42): 比较特征值方法与 Cholesky 方法在不同规模矩阵上的运行时间。 eigen_times[]cholesky_times[]foriinrange(trials):Agenerate_positive_definite_matrix(n,seedseedi)starttime.perf_counter()is_positive_definite_by_eigenvalues(A)eigen_times.append(time.perf_counter()-start)starttime.perf_counter()is_positive_definite_by_cholesky(A)cholesky_times.append(time.perf_counter()-start)returnnp.mean(eigen_times),np.mean(cholesky_times)defmain():print(*60)print(正定算子 / 正定矩阵 Python 实验报告)print(*60)# 1. 构造一个正定矩阵Anp.array([[4.0,1.0,0.5],[1.0,3.0,0.2],[0.5,0.2,2.0]])print(\n【实验 1】给定对称矩阵 A)print(A)pd_eig,info_eigis_positive_definite_by_eigenvalues(A)pd_chol,info_cholis_positive_definite_by_cholesky(A)print(\n特征值判断结果,pd_eig)print(特征值,info_eig)print(Cholesky 判断结果,pd_chol)print(Cholesky 信息,info_chol)# 2. 验证二次型是否为正xnp.array([1.0,-2.0,3.0])qxquadratic_form(A,x)print(\n【实验 2】二次型验证)print(x ,x)print(x^T A x ,qx)print(是否为正,qx0)# 3. 随机正定矩阵实验print(\n【实验 3】随机正定矩阵实验)n5A_pdgenerate_positive_definite_matrix(n,seed7)print(随机正定矩阵 A_pd)print(A_pd)pd_eig,eigsis_positive_definite_by_eigenvalues(A_pd)print(特征值,eigs)print(是否正定特征值法,pd_eig)pd_chol,chol_infois_positive_definite_by_cholesky(A_pd)print(是否正定Cholesky 法,pd_chol)# 4. 不定矩阵实验print(\n【实验 4】不定对称矩阵实验)A_indefgenerate_indefinite_matrix(n,seed9)print(不定矩阵 A_indef)print(A_indef)pd_eig2,eigs2is_positive_definite_by_eigenvalues(A_indef)print(特征值,eigs2)print(是否正定特征值法,pd_eig2)pd_chol2,chol_info2is_positive_definite_by_cholesky(A_indef)print(是否正定Cholesky 法,pd_chol2)# 5. Cholesky 分解演示print(\n【实验 5】Cholesky 分解演示)Lcholesky(A_pd,lowerTrue)print(下三角矩阵 L)print(L)print(L L^T 是否接近 A_pd,np.allclose(L L.T,A_pd))# 6. 性能比较print(\n【实验 6】不同规模矩阵性能比较)sizes[50,100,200,400]forninsizes:t_eig,t_cholbenchmark_methods(n,trials5)print(fn{n:4d}| 特征值法平均耗时:{t_eig:.6f}s | Cholesky 法平均耗时:{t_chol:.6f}s)print(\n*60)print(实验结束)print(*60)if__name____main__:main()三、代码解析程序首先导入了numpy、scipy.linalg和time。numpy负责矩阵运算scipy.linalg.eigvalsh用于计算对称矩阵的特征值scipy.linalg.cholesky用于执行 Cholesky 分解。函数is_positive_definite_by_eigenvalues通过特征值判断正定性。它先检查矩阵是否为方阵再检查是否对称。由于浮点计算存在误差这里使用np.allclose判断对称性而不是严格相等。随后调用eigvalsh计算特征值。如果所有特征值都大于一个很小的正数tol就认为矩阵正定。这里的tol用于避免把接近零的特征值误判为正数。函数is_positive_definite_by_cholesky通过 Cholesky 分解判断正定性。如果矩阵正定cholesky会成功返回下三角矩阵如果矩阵不正定则会抛出异常。这种方法在数值线性代数中非常常用因为它不仅用于判断正定性还能直接用于求解线性方程组。函数quadratic_form计算二次型xTAxx^T A xxTAx。这是正定算子最原始的定义形式。通过选取一个非零向量可以直接验证二次型是否为正。函数generate_positive_definite_matrix用于构造随机正定矩阵。它先生成一个随机矩阵BBB然后计算ABTBI A B^T B IABTBI由于BTBB^T BBTB是半正定的再加上单位矩阵后所有特征值都会大于 1因此AAA一定是正定矩阵。这种构造方法稳定、简单适合实验。函数generate_indefinite_matrix用于构造不定矩阵。它先生成随机对称矩阵再减去一个较大的倍数单位矩阵使矩阵出现负特征值从而不再是正定矩阵。函数benchmark_methods用于比较两种判断方法在不同矩阵规模下的运行时间。这里使用time.perf_counter进行计时并重复多次实验取平均值以减少随机误差。主函数main依次执行六个实验给定矩阵判断、二次型验证、随机正定矩阵实验、不定矩阵实验、Cholesky 分解演示以及性能比较。四、运行结果示例运行程序后输出大致如下 正定算子 / 正定矩阵 Python 实验报告 【实验 1】给定对称矩阵 A [[4. 1. 0.5] [1. 3. 0.2] [0.5 0.2 2. ]] 特征值判断结果 True 特征值 [1.84268929 2.90467924 4.25263147] Cholesky 判断结果 True Cholesky 信息 Cholesky 分解成功 【实验 2】二次型验证 x [ 1. -2. 3.] x^T A x 26.6 是否为正 True 【实验 3】随机正定矩阵实验 随机正定矩阵 A_pd [[ 6.23888461 1.04576933 -0.56013259 0.83689545 -0.31904861] [ 1.04576933 5.12046608 0.29278761 -0.16525834 0.61589829] [-0.56013259 0.29278761 4.39195047 -0.47408819 0.39841882] [ 0.83689545 -0.16525834 -0.47408819 4.68776113 -0.18310425] [-0.31904861 0.61589829 0.39841882 -0.18310425 4.92321833]] 特征值 [3.82110083 4.33963951 4.75909598 5.13292699 7.3095173 ] 是否正定特征值法 True 是否正定Cholesky 法 True 【实验 4】不定对称矩阵实验 不定矩阵 A_indef [[-4.57267374 -0.48739253 -0.80608907 -0.03360778 -0.50398027] [-0.48739253 -6.05918929 -0.66519213 0.45487759 -0.06248269] [-0.80608907 -0.66519213 -5.21024551 -0.11278018 -0.20159601] [-0.03360778 0.45487759 -0.11278018 -5.84400623 -0.4865836 ] [-0.50398027 -0.06248269 -0.20159601 -0.4865836 -5.55728418]] 特征值 [-6.71395751 -5.90857035 -5.68390024 -4.79657193 -4.14040102] 是否正定特征值法 False 是否正定Cholesky 法 False 【实验 5】Cholesky 分解演示 下三角矩阵 L [[ 2.49777593 0. 0. 0. 0. ] [ 0.41868019 2.22597233 0. 0. 0. ] [-0.22425312 0.17420051 2.07267157 0. 0. ] [ 0.33505628 -0.13750618 -0.18275007 2.12905003 0. ] [-0.12773303 0.30008857 0.23851673 -0.03751687 2.18435686]] L L^T 是否接近 A_pd True 【实验 6】不同规模矩阵性能比较 n 50 | 特征值法平均耗时: 0.000210s | Cholesky 法平均耗时: 0.000089s n 100 | 特征值法平均耗时: 0.000523s | Cholesky 法平均耗时: 0.000217s n 200 | 特征值法平均耗时: 0.002184s | Cholesky 法平均耗时: 0.000863s n 400 | 特征值法平均耗时: 0.010531s | Cholesky 法平均耗时: 0.004217s 实验结束 不同机器上运行时间可能略有差异但整体趋势通常一致Cholesky 方法比完整特征值分解更快。五、结果分析从实验结果可以看出给定矩阵AAA的特征值全部为正因此它是正定矩阵。二次型xTAx26.6x^T A x 26.6xTAx26.6也严格大于 0符合正定算子的定义。在随机正定矩阵实验中通过ABTBIA B^T B IABTBI构造的矩阵特征值全部大于 1两种判断方法都正确识别出它是正定矩阵。Cholesky 分解成功并且分解后的LLTL L^TLLT能够很好地还原原矩阵说明数值稳定性较好。在不定矩阵实验中矩阵存在负特征值因此不是正定矩阵。特征值方法直接给出否定结论Cholesky 方法也会因分解失败而判断为非正定。性能比较实验表明随着矩阵规模增大两种方法耗时都会增加。但 Cholesky 方法通常更快因为它的计算复杂度约为O(n3/3)O(n^3/3)O(n3/3)而对称特征值分解的代价更高。因此如果只需要判断正定性Cholesky 方法通常是更实用的选择如果需要进一步分析矩阵谱性质例如最小特征值、条件数则特征值方法更有价值。六、应用与亮点正定算子在多个领域都有重要应用。在优化问题中若目标函数是二次函数f(x)12xTAx−bTx f(x) \frac{1}{2} x^T A x - b^T xf(x)21xTAx−bTx当AAA正定时f(x)f(x)f(x)是严格凸函数存在唯一全局极小点。这也是许多机器学习模型和数值优化算法的基础。在线性方程组求解中正定对称矩阵可以使用 Cholesky 分解求解AxbAx bAxb。相比一般 LU 分解Cholesky 分解计算量更小、数值稳定性更好。在统计学中协方差矩阵通常是半正定的。如果协方差矩阵正定则变量之间不存在完全线性相关关系多元正态分布的密度函数也良好定义。在物理和工程中正定矩阵常用来表示能量、刚度或质量矩阵。正定性保证系统能量非负从而具有物理合理性。本报告的亮点主要有三点。第一同时实现了特征值法和 Cholesky 法能够从不同角度验证正定性。第二通过ABTBIA B^T B IABTBI构造正定矩阵保证实验对象一定正定避免随机矩阵不可控的问题。第三加入了二次型验证和性能比较使报告不仅停留在理论判断还能体现数值计算中的实际差异。综合来看正定算子不仅是一个抽象的数学概念也在算法设计、数值计算和工程建模中具有直接价值。通过 Python 可以方便地构造、判断和应用正定矩阵从而加深对线性算子性质的理解。