You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求复数域内给定矩阵的特征值特征向量及SVD算法所需计算代码

复数域内矩阵的特征值与特征向量计算方法
  • 特征值计算:求解特征方程 det(A - λI) = 0,方程的所有根(含重根)即为复数域内的全部特征值。
  • 特征向量计算:对每个特征值λ,求解线性方程组 (A - λI)x = 0,方程组的非零解空间对应λ的特征子空间,子空间内所有非零向量都是该特征值对应的特征向量。
对称矩阵特征值与特征向量的Python实现(适配SVD需求)

针对对称矩阵,QR迭代法是稳定且高效的特征值/特征向量计算方案,以下是可直接复用的实现代码:

import numpy as np

def symmetric_eigen(A):
    # 校验输入是否为对称矩阵
    if not np.allclose(A, A.T):
        raise ValueError("输入矩阵必须是对称矩阵")
    
    n = A.shape[0]
    # 累积正交变换矩阵,最终列向量为特征向量
    Q_accum = np.eye(n)
    current_A = np.copy(A)
    
    # QR迭代收敛到对角矩阵
    for _ in range(1000):
        Q, R = np.linalg.qr(current_A)
        current_A = R @ Q
        Q_accum = Q_accum @ Q
        
        # 判断收敛:非对角元素足够小
        off_diag_max = np.abs(current_A - np.diag(np.diag(current_A))).max()
        if off_diag_max < 1e-10:
            break
    
    # 提取特征值与特征向量,并按特征值降序排列
    eigenvalues = np.diag(current_A)
    eigenvectors = Q_accum
    sort_idx = eigenvalues.argsort()[::-1]
    
    return eigenvalues[sort_idx], eigenvectors[:, sort_idx]

# 测试示例
if __name__ == "__main__":
    # 构造对称测试矩阵
    test_A = np.array([[4, 1, 1],
                       [1, 3, 0],
                       [1, 0, 2]])
    vals, vecs = symmetric_eigen(test_A)
    print("特征值:", vals)
    print("特征向量:\n", vecs)
    
    # 验证结果正确性
    print("\n验证通过:", np.allclose(test_A @ vecs, vecs @ np.diag(vals)))

代码说明

  • 利用对称矩阵QR迭代的收敛特性:迭代后矩阵会收敛为对角矩阵,对角元素即为特征值,累积的正交矩阵列向量对应特征向量。
  • 加入输入校验,避免非对称矩阵导致的计算错误。
  • 通过非对角元素的最大值判断收敛,平衡计算精度与效率。
  • 最终对特征值/特征向量降序排列,适配SVD分解中奇异值从大到小的常规输出要求。
SVD中对称矩阵特征值的应用逻辑

在实矩阵的SVD分解 A = UΣV^T 中,可通过对称矩阵的特征值计算推导核心分量:

  • 计算对称矩阵 A^T A 的特征值,其平方根即为Σ的对角元素(奇异值)。
  • A^T A 的特征向量构成V矩阵。
  • U矩阵可通过 U = A V Σ^{-1} 计算(A满秩时有效)。

内容的提问来源于stack exchange,提问作者Danilo Giovannico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:10:28