Loading [MathJax]/jax/output/CommonHTML/autoload/mtable.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(五):Householder方法【理论到程序】

【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(五):Householder方法【理论到程序】

作者头像
Qomolangma
发布于 2024-07-30 02:44:12
发布于 2024-07-30 02:44:12
26840
代码可运行
举报
文章被收录于专栏:深度学习深度学习
运行总次数:0
代码可运行

  矩阵的特征值(eigenvalue)和特征向量(eigenvector)在很多应用中都具有重要的数学和物理意义。Householder 矩阵和变换提供了一种有效的方式,通过反射变换将一个向量映射到一个标准的方向,这对于一些数值计算问题具有重要的意义。

  本文将详细介绍Householder方法的基本原理和步骤,并给出其Python实现。

一、Jacobi 旋转法

  Jacobi 旋转法的每一次迭代中,需要选择一个非对角元素最大的位置,然后构造相应的旋转矩阵,进行相似变换,使得矩阵逐渐对角化。

二、Jacobi 过关法

  Jacobi 过关法(Jacobi’s threshold method)是 Jacobi 旋转法的一种改进版本,其主要目的是减少计算工作和提高运行速度。该方法通过动态调整阈值,并根据阈值对非对角元素进行选择性的旋转变换,以逐步对角化对称矩阵。

三、Householder 方法

  如果对任意向量

,我们可以将其分解为与

平行的分量

和与

正交的分量

,即

,那么 Householder 变换会将

变换为

。这个变换可以理解为镜面反射,它不改变向量在与

正交的平面上的投影,但将向量沿着

的方向反射。数学表达式为:

  这个性质使得 Householder 变换在一些数值计算的应用中非常有用,例如 QR 分解等。

1. 旋转变换

  在 Householder 方法中,通过一系列的正交相似变换,可以将实对称矩阵 (A) 转化为三对角矩阵。不同于 Jacobi 旋转法(

),Householder 方法的旋转矩阵选择的角度使得

a. 旋转变换的选择

  对于实对称矩阵

中的元素

,选择适当的旋转角度

,可以使得

变为零。具体而言,选择

使得:

  通过这样的选择,我们可以构造一个旋转矩阵

,该矩阵对应的正交相似变换可以将

变为零。这一过程实现了对实对称矩阵的正交相似变换,使得某些元素变为零,逐步实现了将矩阵转化为三对角形式。

b. 旋转变换的顺序

  在进行 Householder 变换时,旋转的顺序很重要。通常,可以选择按列进行变换。例如,对于

,可以依次选择

,然后对每一对

进行正交相似变换,将

变为零。整个过程的迭代将会逐步将实对称矩阵

转化为三对角矩阵

2. Householder矩阵(Householder Matrix)

a. H矩阵的定义

  设

为单位向量,即

。定义 Householder 矩阵

,其中

为单位矩阵。这个矩阵具有以下性质:

  • 对称性:

,即 Householder 矩阵是对称的。

  • 正交性:

,即 Householder 矩阵是正交矩阵。

  • 保范性: 对于任意非零向量

,如果

,则存在 Householder 矩阵

,使得

  • 考虑 Householder 矩阵对向量

的作用:

。这说明 Householder 矩阵将向量

反射到其负向量上

  • 对于任何与

正交的向量

,有

,即 Householder 矩阵保持与

正交的向量不变。

  • 因此对任意向量

,设

,那么 Householder 变换会将

变换为

,数学表达式为:

b. H变换的几何解释

  可以将 Householder 变换视为镜面反射。考虑

为反射面上的单位法向量。对于任意

,Householder 变换将

的投影反射到

方向,同时保持投影在反射面上。

c. H变换的应用场景
  1. 矩阵三对角化: 在计算线性代数中,Householder 变换常用于将矩阵化为三对角形式,以便更容易进行特征值计算等操作。
  2. QR 分解: Householder 变换是计算 QR 分解的基本工具,用于将矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。

3. H变换过程详解

a. 过程介绍

  对于矩阵

的某一列向量

,如果我们想将向量的后

个分量化为零,即将

变为

,其中

(从

计算到

)且

,则可以引入 Householder 矩阵

,使得

。Householder 矩阵的计算方式如下:

  其中,

是单位向量

,具体位置在第

个。

b. 细节解析
  • Householder 矩阵的构造:
    • 通过 Householder 变换,构造 Householder 矩阵

    ,将某一列

    个分量化为零。

  • 计算过程的稳定性:

    n

    个分量的符号设定为

    sign(ar+1)

    ,以增强计算的稳定性。

  • 计算相似三对角矩阵:
    A

    逐列进行正交相似变换,得到

    A1,A2,,An1

    • 最终得到相似三对角矩阵
    G=An=Hn2H2H1A

  • 实际计算中的优化:
    • 实际计算中,无需形成所有的 Householder 矩阵,也无需进行矩阵乘法运算,可以直接在原矩阵上进行计算。

4. H变换例题解析

  给定矩阵:

最终的三对角矩阵

的形式为

  这样,通过选择

进行两次 Householder 变换,矩阵

被成功地化为三对角形式

四、Python实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np


def householder_matrix(v):
    """
    给定向量 v,返回 Householder 变换矩阵 H
    """
    v = np.array(v, dtype=float)
    if np.linalg.norm(v) == 0:
        raise ValueError("无效的输入向量,它应该是非零的。")

    v = v / np.linalg.norm(v)
    H = np.eye(len(v)) - 2 * np.outer(v, v)
    return H


def householder_reduction(A):
    """
    对矩阵 A 执行 Householder 变换,将其化为三对角形式。
    """
    m, n = A.shape
    if m != n:
        raise ValueError("输入矩阵 A 必须是方阵。")

    Q = np.eye(m)  # 初始化正交矩阵 Q

    for k in range(n - 2):
        x = A[k + 1:, k]
        e1 = np.zeros_like(x)
        e1[0] = 1.0
        v = np.sign(x[0]) * np.linalg.norm(x) * e1 + x
        v = v / np.linalg.norm(v)

        H = np.eye(m)
        H[k + 1:, k + 1:] -= 2.0 * np.outer(v, v)
        Q = np.dot(Q, H)
        A = np.dot(H, np.dot(A, H))

    return Q, A


# 示例矩阵
A = np.array([[1, 2, 1, 2],
              [2, 2, -1, 1],
              [1, -1, 1, 1],
              [2, 1, 1, 1]], dtype=float)

# Householder 变换
Q, tridiagonal_A = householder_reduction(A)
np.set_printoptions(precision=4, suppress=True)
print("正交矩阵 Q:")
print(Q)
print("\n三对角矩阵:")
print(tridiagonal_A)

调试过程

  • 第一次:
  • 第二次:
  • final:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
4 条评论
热度
最新
好赞好赞学习了
好赞好赞学习了
11点赞举报
谢谢 哈哈
谢谢 哈哈
回复回复点赞举报
深度体验啊,写得很好!
深度体验啊,写得很好!
11点赞举报
写了一些简单的使用,还有很多深层次的玩法可以去玩玩
写了一些简单的使用,还有很多深层次的玩法可以去玩玩
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):Jacobi 过关法(Jacobi 旋转法的改进)【理论到程序】
  Jacobi 旋转法的每一次迭代中,需要选择一个非对角元素最大的位置,然后构造相应的旋转矩阵,进行相似变换,使得矩阵逐渐对角化。
Qomolangma
2024/07/30
1340
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):Jacobi 过关法(Jacobi 旋转法的改进)【理论到程序】
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(三):Jacobi 旋转法【理论到程序】
  Jacobi 旋转法的每一次迭代中,需要选择一个非对角元素最大的位置,然后构造相应的旋转矩阵,进行相似变换,使得矩阵逐渐对角化。
Qomolangma
2024/07/30
2890
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(三):Jacobi 旋转法【理论到程序】
数值计算方法 Chapter7. 计算矩阵的特征值和特征向量
显然,对于任意一个向量 ,我们总可以将其用 阶矩阵的一组正交基进行表示,即:
codename_cys
2022/06/20
2.1K0
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(一):乘幂法【理论到程序】
  乘幂法(Power Iteration)是一种用于估计矩阵的最大特征值及其对应特征向量的迭代算法,基于以下的数学原理:
Qomolangma
2024/07/30
4300
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(一):乘幂法【理论到程序】
Jacobi方法求矩阵特征值的算例及代码
Jacobi方法用于求实对称阵的全部特征值、特征向量。对于实对称阵 A,必有正交阵 Q ,使 QT A Q = Λ 其中Λ是对角阵,其主对角线元素λii是A的特征值,正交阵Q的第i列是A的第i个特征值
fem178
2018/04/08
4K0
Jacobi方法求矩阵特征值的算例及代码
矩阵分析笔记(七)特征值与特征向量
设\mathscr{A}是数域\mathbb{F}上的n维线性空间V的线性变换,若存在\alpha \neq 0, \lambda \in \mathbb{F},使
mathor
2020/10/23
1.8K0
矩阵分析笔记(七)特征值与特征向量
特征值和特征向量
$$ \begin{array} \mathbf{I A} \mathbf{x}=\mathbf{I} \cdot \lambda \mathbf{x} \\ \mathbf{A} \mathbf{x}=(\lambda I) \mathbf{x} \end{array} $$
为为为什么
2022/09/30
1K0
变换(Transform)(1)-向量、矩阵、坐标系与基本变换
如果要将右侧坐标系变为左侧那种,我们只需要做一些旋转操作,将右侧坐标系顺时针旋转180度,再将整个坐标系水平翻转即可。我们可以通过一定的旋转操作将两个坐标系重合,那么我们就称它们具有相同的旋向性(handedness)。
Zero Two
2024/07/21
5720
【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】
  矩阵的范数是定义在矩阵空间上的实值函数,用于度量矩阵的大小或度量。对于一个矩阵
Qomolangma
2024/07/30
1670
【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】
矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)
推荐文章:https://cloud.tencent.com/developer/article/2470928?shareByChannel=link
算法一只狗
2024/12/08
2710
矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)
深度学习笔记系列(二):特征值,特征向量与SVD奇异值分解
本文是深度学习笔记系列文章,本次文章将介绍线性代数里比较重要的概念:特征值,特征向量以及SVD奇异值分解。
linhw
2020/03/27
2.6K0
奇异值分解(Singular Value Decomposition,SVD)
Am×n=UΣVTUUT=ImVVT=InΣ=diag(σ1,σ2,...,σp)σ1≥σ2≥...≥σp≥0p=min⁡(m,n)A_{m \times n} = U \Sigma V^T\\ UU^T=I_m\\ VV^T=I_n\\ \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p) \\ \sigma_1\ge \sigma_2 \ge...\ge\sigma_p \ge0\\ p=\min(m,n)Am×n​=UΣVTUUT=Im​VVT=In​Σ=diag(σ1​,σ2​,...,σp​)σ1​≥σ2​≥...≥σp​≥0p=min(m,n)
Michael阿明
2020/07/13
1.5K0
数值计算方法 Chapter5. 解线性方程组的直接法
Gauss-Jordan消元法和上述Gauss消元法本质上是一样的,不过Gauss消元法是将一般矩阵转换成三角矩阵,而Gauss-Jordan消元法是将一般矩阵转换成对角矩阵。
codename_cys
2022/05/30
1.1K0
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):乘幂法的加速(带有原点移位的乘幂法)【理论到程序】
  乘幂法(Power Iteration)是一种用于寻找矩阵的最大特征值及其对应特征向量的迭代算法。它通过迭代计算矩阵与向量的乘积,并规范化得到新的向量,最终收敛到矩阵的最大特征值和对应的特征向量。然而,对于某些矩阵,乘幂法的收敛速度可能相对较慢。为了加速乘幂法的收敛,一种常见的做法是通过平移(Shift)矩阵的方式。
Qomolangma
2024/07/30
2180
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):乘幂法的加速(带有原点移位的乘幂法)【理论到程序】
【数值计算方法(黄明游)】函数插值与曲线拟合(一):Lagrange插值【理论到程序】
  插值、拟合和投影都是常用的近似表达方式,用于对数据或函数进行估计、预测或表示。
Qomolangma
2024/07/30
2060
【数值计算方法(黄明游)】函数插值与曲线拟合(一):Lagrange插值【理论到程序】
统计学习方法 十到十六章笔记
隐马尔可夫模型包含观测,状态和相应的转移,具体的记号不在给出。只给出其性质:其中i是状态而o是观测:
Sarlren
2023/03/16
1.1K0
统计学习方法 十到十六章笔记
我的机器学习线性代数篇观点向量矩阵行列式矩阵的初等变换向量组线性方程组特征值和特征向量几个特殊矩阵QR 分解(正交三角分解)奇异值分解向量的导数
前言: 线代知识点多,有点抽象,写的时候尽量把这些知识点串起来,如果不行,那就两串。其包含的几大对象为:向量,行列式,矩阵,方程组。 观点 核心问题是求多元方程组的解,核心知识:内积、秩、矩阵求逆,应用:求解线性回归、最小二乘法用QR分解,奇异值分解SVD,主成分分析(PCA)运用可对角化矩阵 向量 基础 向量:是指具有n个互相独立的性质(维度)的对象的表示,向量常 使用字母+箭头的形式进行表示,也可以使用几何坐标来表示向量。 单位向量:向量的模、模为一的向量为单位向量 内积又叫数量积
DC童生
2018/04/27
1.8K0
我的机器学习线性代数篇观点向量矩阵行列式矩阵的初等变换向量组线性方程组特征值和特征向量几个特殊矩阵QR 分解(正交三角分解)奇异值分解向量的导数
线性代数整理(三)行列式特征值和特征向量
比方说在二维平面中,这里有三组二维向量,每组都有两个向量,那么每组向量的面积就可以表示它们的不同。当然这里说面积是针对二维平面来说的,在三维空间中,就是体积;在更高维度中,可能就是一个体,但这个体比较抽象
算法之名
2021/03/04
2.8K0
矩阵分析复习题
设\alpha为线性空间V(\mathbb{F})中非零向量,若\mathbb{F}中数k_1与k_2不相等,试证:k_1\alpha\neq k_2\alpha
mathor
2021/04/02
1.7K0
SLAM知识点整理
SLAM的全称——Simultaneous Localization and Mapping(同时定位与地图的构建)。它有三层含义,第一是进行机器人的姿态估计,第二是构建地图,第三是同时进行这两个事情。SLAM是一个鸡生蛋、蛋生鸡的问题,机器人构建地图的时候需要知道自己目前所在的位置(定位),同时在定位到自己的位置之后要进行下一步——走,需要看周围的地图。
算法之名
2022/03/24
1.2K0
SLAM知识点整理
推荐阅读
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):Jacobi 过关法(Jacobi 旋转法的改进)【理论到程序】
1340
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(三):Jacobi 旋转法【理论到程序】
2890
数值计算方法 Chapter7. 计算矩阵的特征值和特征向量
2.1K0
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(一):乘幂法【理论到程序】
4300
Jacobi方法求矩阵特征值的算例及代码
4K0
矩阵分析笔记(七)特征值与特征向量
1.8K0
特征值和特征向量
1K0
变换(Transform)(1)-向量、矩阵、坐标系与基本变换
5720
【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】
1670
矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)
2710
深度学习笔记系列(二):特征值,特征向量与SVD奇异值分解
2.6K0
奇异值分解(Singular Value Decomposition,SVD)
1.5K0
数值计算方法 Chapter5. 解线性方程组的直接法
1.1K0
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):乘幂法的加速(带有原点移位的乘幂法)【理论到程序】
2180
【数值计算方法(黄明游)】函数插值与曲线拟合(一):Lagrange插值【理论到程序】
2060
统计学习方法 十到十六章笔记
1.1K0
我的机器学习线性代数篇观点向量矩阵行列式矩阵的初等变换向量组线性方程组特征值和特征向量几个特殊矩阵QR 分解(正交三角分解)奇异值分解向量的导数
1.8K0
线性代数整理(三)行列式特征值和特征向量
2.8K0
矩阵分析复习题
1.7K0
SLAM知识点整理
1.2K0
相关推荐
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):Jacobi 过关法(Jacobi 旋转法的改进)【理论到程序】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验