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

news2024/12/23 1:50:57

文章目录

  • 一、Jacobi 旋转法
  • 二、Jacobi 过关法
  • 三、Householder 方法
    • 1. 旋转变换
      • a. 旋转变换的选择
      • b. 旋转变换的顺序
    • 2. Householder矩阵(Householder Matrix)
      • a. H矩阵的定义
      • b. H变换的几何解释
      • c. H变换的应用场景
    • 3. H变换过程详解
      • a. 过程介绍
      • b. 细节解析
    • 4. H变换例题解析
  • 四、Python实现
    • 调试过程

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

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

一、Jacobi 旋转法

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

二、Jacobi 过关法

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

三、Householder 方法

  如果对任意向量 z z z,我们可以将其分解为与 u u u 平行的分量 a u au au 和与 u u u 正交的分量 b v bv bv,即 z = a u + b v z = au + bv z=au+bv,那么 Householder 变换会将 z z z 变换为 − a u + b v -au + bv au+bv。这个变换可以理解为镜面反射,它不改变向量在与 u u u 正交的平面上的投影,但将向量沿着 u u u 的方向反射。数学表达式为:

H z = a u + b v → − a u + b v Hz = au + bv \rightarrow -au + bv Hz=au+bvau+bv

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

1. 旋转变换

  在 Householder 方法中,通过一系列的正交相似变换,可以将实对称矩阵 (A) 转化为三对角矩阵。不同于 Jacobi 旋转法( a i j = a j i = 0 a_{ij}= a_{ji}=0 aij=aji=0),Householder 方法的旋转矩阵选择的角度使得 c i k = c k j = 0 c_{ik}= c_{kj}=0 cik=ckj=0

a. 旋转变换的选择

  对于实对称矩阵 A A A 中的元素 a i k a_{ik} aik ,选择适当的旋转角度 θ \theta θ ,可以使得 a i k a_{ik} aik 变为零。具体而言,选择 θ \theta θ 使得:
c i k = c k j = a i k cos ⁡ ( θ ) + a j k sin ⁡ ( θ ) = 0 c_{ik}= c_{kj}=a_{ik} \cos(\theta) + a_{jk} \sin(\theta) = 0 cik=ckj=aikcos(θ)+ajksin(θ)=0

  通过这样的选择,我们可以构造一个旋转矩阵 P i , j , k P_{i,j,k} Pi,j,k,该矩阵对应的正交相似变换可以将 c i k c_{ik} cik 变为零。这一过程实现了对实对称矩阵的正交相似变换,使得某些元素变为零,逐步实现了将矩阵转化为三对角形式。

在这里插入图片描述

b. 旋转变换的顺序

  在进行 Householder 变换时,旋转的顺序很重要。通常,可以选择按列进行变换。例如,对于 i = 2 , … , n − 1 i = 2, \ldots, n-1 i=2,,n1,可以依次选择 j = i + 1 , i + 2 , … , n j = i+1, i+2, \ldots, n j=i+1,i+2,,n,然后对每一对 ( i , j ) (i, j) (i,j) 进行正交相似变换,将 a i k a_{ik} aik 变为零。整个过程的迭代将会逐步将实对称矩阵 A A A 转化为三对角矩阵 C C C

2. Householder矩阵(Householder Matrix)

a. H矩阵的定义

  设 u u u为单位向量,即 ∥ u ∥ = 1 \|u\| = 1 u=1。定义 Householder 矩阵 H = I − 2 u u T H = I - 2uu^T H=I2uuT,其中 I I I 为单位矩阵。这个矩阵具有以下性质:

  • 对称性: H T = H H^T = H HT=H,即 Householder 矩阵是对称的。
  • 正交性: H T H = I H^T H = I HTH=I,即 Householder 矩阵是正交矩阵。
  • 保范性: 对于任意非零向量 x x x y y y,如果 ∥ x ∥ 2 = ∥ y ∥ 2 \|x\|^2 = \|y\|^2 x2=y2,则存在 Householder 矩阵 H H H,使得 H x = y Hx = y Hx=y
    • 考虑 Householder 矩阵对向量 u u u 的作用: H u = ( I − 2 u u T ) u = − u Hu = (I - 2uu^T)u = -u Hu=(I2uuT)u=u。这说明 Householder 矩阵将向量 u u u 反射到其负向量上
    • 对于任何与 u u u 正交的向量 v v v,有 H v = ( I − 2 u u T ) v = v Hv = (I - 2uu^T)v = v Hv=(I2uuT)v=v,即 Householder 矩阵保持与 u u u 正交的向量不变。
    • 因此对任意向量 z z z,设 z = a u + b v z = au + bv z=au+bv,那么 Householder 变换会将 z z z 变换为 − a u + b v -au + bv au+bv,数学表达式为:
      H z = a ( H u ) + b ( H v ) → − a u + b v Hz = a(Hu) + b(Hv) \rightarrow -au + bv Hz=a(Hu)+b(Hv)au+bv

b. H变换的几何解释

  可以将 Householder 变换视为镜面反射。考虑 u u u 为反射面上的单位法向量。对于任意 z z z,Householder 变换将 z z z 的投影反射到 − u -u u方向,同时保持投影在反射面上。

c. H变换的应用场景

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

3. H变换过程详解

a. 过程介绍

  对于矩阵 A A A 的某一列向量 a = ( a 1 , a 2 , … , a n ) T \mathbf{a} = (a_1, a_2, \ldots, a_n)^T a=(a1,a2,,an)T,如果我们想将向量的后 n − ( r + 1 ) n - (r+1) n(r+1)个分量化为零,即将 a \mathbf{a} a 变为 c = ( a 1 , a 2 , … , a r , − sign ( a r + 1 ) s , 0 , … , 0 ) T \mathbf{c} = (a_1, a_2, \ldots, a_r, -\text{sign}(a_{r+1})s, 0, \ldots, 0)^T c=(a1,a2,,ar,sign(ar+1)s,0,,0)T,其中 s = ∥ a ∥ 2 s = \|a\|_2 s=a2 (从 r + 1 r+1 r+1计算到 n n n)且 a r + 1 ≠ 0 a_{r+1} \neq 0 ar+1=0,则可以引入 Householder 矩阵 H H H,使得 H a = c Ha=c Ha=c。Householder 矩阵的计算方式如下:
w = a − sign ( a r + 1 ) s e r + 1 \mathbf{w} = \mathbf{a} - \text{sign}(a_{r+1})s\mathbf{e}_{r+1} w=asign(ar+1)ser+1
  其中, e r + 1 \mathbf{e}_{r+1} er+1 是单位向量 ( 0 , 0 , … , 0 , 1 , 0 , … , 0 ) T (0, 0, \ldots, 0, 1, 0, \ldots, 0)^T (0,0,,0,1,0,,0)T,具体位置在第 r + 1 r+1 r+1 个。

在这里插入图片描述

b. 细节解析

  • Householder 矩阵的构造:
    • 通过 Householder 变换,构造 Householder 矩阵 H H H,将某一列 a j a_j aj r + 1 r+1 r+1 n n n 个分量化为零。

  • 计算过程的稳定性:

    • a a a r + 1 r+1 r+1 n n n 个分量的符号设定为 − sign ( a r + 1 ) -\text{sign}(a_{r+1}) sign(ar+1),以增强计算的稳定性。
  • 计算相似三对角矩阵:

    • A A A 逐列进行正交相似变换,得到 A 1 , A 2 , … , A n − 1 A_1, A_2, \ldots, A_{n-1} A1,A2,,An1
    • 最终得到相似三对角矩阵 G = A n = H n − 2 ⋅ … ⋅ H 2 ⋅ H 1 ⋅ A G = A_n = H_{n-2} \cdot \ldots \cdot H_2 \cdot H_1 \cdot A G=An=Hn2H2H1A
  • 实际计算中的优化:

    • 实际计算中,无需形成所有的 Householder 矩阵,也无需进行矩阵乘法运算,可以直接在原矩阵上进行计算。
      在这里插入图片描述

4. H变换例题解析

  给定矩阵:
A = [ 1 2 1 2 2 2 − 1 1 1 − 1 1 1 2 1 1 1 ] A = \begin{bmatrix} 1 & 2 & 1 & 2 \\ 2 & 2 & -1 & 1 \\ 1 & -1 & 1 & 1 \\ 2 & 1 & 1 & 1 \end{bmatrix} A= 1212221111112111
在这里插入图片描述
在这里插入图片描述

最终的三对角矩阵 A 2 A_2 A2

  • A 2 A_2 A2的形式为
    A 2 = [ 1 − 3 0 0 − 3 2.3333 − 0.4714 0 0 − 0.4714 1.1667 − 1.5003 0 0 − 1.5003 0.5002 ] A_2 = \begin{bmatrix} 1 & -3 & 0 & 0 \\ -3 & 2.3333 & -0.4714 & 0 \\ 0 & -0.4714 & 1.1667 & -1.5003 \\ 0 & 0 & -1.5003 & 0.5002 \end{bmatrix} A2= 130032.33330.4714000.47141.16671.5003001.50030.5002

  这样,通过选择 r = 1 r=1 r=1 r = 2 r=2 r=2 进行两次 Householder 变换,矩阵 A A A 被成功地化为三对角形式 A 2 A_2 A2

四、Python实现

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:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vcomp140.dll是什么意思?vcomp140.dll缺失怎么修复的五个方法

在电脑使用过程中,我们常常会遇到一些错误提示,其中之一就是“由于找不到vcomp140.dll无法继续执行代码”。这个错误提示通常出现在运行某些程序时,给使用者带来了很大的困扰。那么,为什么会出现这个错误呢?又该如何解…

函数指针和指针函数的讲解

文章目录 指针函数函数指针函数指针的定义与指针函数的声明的区别函数指针的定义指针函数的声明 typedef在函数指针方面的使用typedef和using 给函数指针的类型取别名typedef和using 给函数的类型取别名 指针函数 指针函数: 也叫指针型函数,本质上就是一…

线上CPU飙高问题排查!

https://v.douyin.com/iRTqH5ug/ linux top命令 top 命令是 Linux 下一个强大的实用程序,提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息,以及有关系统性能和资源利用情况的信息。 以下是 top 命令提供的关键信息的简要概述…

整体迁移SVN仓库到新的windows服务器

一、背景 公司原有的SVN服务器年代比较久远经常出现重启情况,需要把SVN仓库重新迁移到新的服务器上,在网上也搜到过拷贝Repositories文件直接在新服务器覆盖的迁移方案,但考虑到原有的操作系统和现有的操作系统版本不一致,SVN版本…

【开源】基于JAVA的超市账单管理系统

项目编号: S 032 ,文末获取源码。 \color{red}{项目编号:S032,文末获取源码。} 项目编号:S032,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP,IT管理者必须手动选出可用的 ip,这太耗时了…

每天五分钟计算机视觉:AlexNet网络的结构特点

本文重点 在前面的一篇文章中,我们对AlexNet网络模型的参数进行了详细的介绍,本文对其网络模型的特点进行总结。 特点 1、AlexNet的网络结构比LeNet5更深,模型包括5个卷积层和3个全连接层。参数总量大概为249MB。 2、Alex使用了ReLu激活函…

【vSphere 8 自签名 VMCA 证书】企业 CA 签名证书替换 vSphere VMCA CA 证书Ⅱ—— 创建和添加证书模板

目录 3. 使用 Microsoft 证书颁发机构创建 VMCA 证书模板3.1 打开 Certificate Template Console3.2 复制模板修改 Compatibility 选项卡修改 General 选项卡修改 Extensions 选项卡确认新模板 4. 将新模板添加到证书模板4.1 打开 Certificate Console4.2 创建证书模板 关联博文…

高端大气简历模板(精选8篇)

想要让简历在众多求职者中脱颖而出,吸引HR的眼球吗,可以看看这8篇精选的高端大气简历模板!本文为大家提供了多种行业、职位的简历案例,助大家打造一份令人惊艳的简历,轻松斩获心仪职位! 高端大气简历模板下…

【FPGA图像处理实战】- 图像基础知识

视频图像处理是FPGA主要应用方向之一,很多FPGA从事或准备进入这一领域,我们现在开始发布新的FPGA实战专栏——FPGA图像处理。 FPGA处理视频图像处理的主要优势是流水线和并行处理运算,特别是现在视频分辨率越来越大,从720p到1080…

机械臂运动规划、抓取末端执行器、抓取开源项目

运动规划 1.1已有抓取点 假设抓取点已检测到。这些方法设计了从机器人手到目标物体抓取点的路径。这里运动表示是关键问题。虽然存在从机器人手到目标抓握点的无限数量的轨迹,但是由于机器人臂的限制,许多区域无法到达。因此,需要对轨迹进行…

代码浅析DLIO(四)---位姿更新

0. 简介 我们刚刚了解过DLIO的整个流程,我们发现相比于Point-LIO而言,这个方法更适合我们去学习理解,同时官方给出的结果来看DLIO的结果明显好于现在的主流方法,当然指的一提的是,这个DLIO是必须需要六轴IMU的&#x…

面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路

面试系列: 面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路 面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题 文章目录 一、前言二、常见面试问题回答思路问…

webGIS使用JS,高德API完成简单的智慧校园项目基础

代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

react之@路径解析配置和联想配置

react之路径解析配置和联想配置 一、介绍二、路径解析配置三、联想路径配置 一、介绍 1.路径解析配置&#xff08;webpack&#xff09;&#xff0c;把 / 解析为 src/2.路径联想配置&#xff08;VsCode&#xff09;&#xff0c;VsCode 在输入 / 时&#xff0c;自动联想出来对应…

ARM64版本的chrome浏览器安装

这一快比较玄学&#xff0c;花个半个小时左右才能安装好&#xff0c;也不知道是个什么情况。 sudo snap install chromium只需要以上这个命令&#xff0c;当然&#xff0c;也可以自己去找安装包进行安装&#xff0c;但是测试后发现并没有那么好装&#xff0c;主要是两个部分 一…

Halcon参考手册目标检测和实例分割知识总结

1.1 目标检测原理介 目标检测&#xff1a;我们希望找到图像中的不同实例并将它们分配给某一个类别。实例可以部分重叠&#xff0c;但仍然可以区分为不同的实例。如图(1)所示&#xff0c;在输入图像中找到三个实例并将其分配给某一个类别。 图(1)目标检测示例 实例分割是目标检…

打造个性化github主页 一

文章目录 概述创建仓库静态美化GitHub 统计信息卡仓库 GitHub 额外图钉仓库 热门语言卡仓库 GitHub 资料奖杯仓库 GitHub 活动统计图仓库 打字特效添加中文网站统计仓库 总结 概述 github作为全球最大的代码托管平台&#xff0c;作为程序员都多多少少&#xff0c;都使用过他。…

基于SpringBoot的公益慈善平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 基于SpringBoot的公益…

【上海大学数字逻辑实验报告】三、组合电路(二)

一、实验目的 掌握8421码到余3码的转换。掌握2421码到格雷码的转换。进一步熟悉组合电路的分析和设计方法。学会使用Quartus II设计8421码到余3码的转换电路逻辑图。学会使用Quartus II设计2421码到格雷码的转换电路逻辑图。 二、实验原理 8421码是最常用的BCD码&#xff0c…