3.2 埃尔米特转置

news2024/11/26 12:25:00

定义

  对于复矩阵,转置又不一样,常见的操作是共轭转置,也叫埃尔米特转置Hermitian transpose。埃尔米特转置就是对矩阵先共轭,再转置,一般来说用三种符号表示埃尔米特转置:

  1. 第一种符号是 A H A^H AH,这是国内教材通用的做法,H是埃尔米特名字首字母;
  2. 第二种符号是 A ∗ A^* A,这是国外教材喜欢用,这个符号在国内教材表示伴随矩阵,如以下文档:
    在这里插入图片描述
  3. 第三种符号是匕首符号 A † A^{\dagger} A,但是有时候也用来表示矩阵的加号逆。

  求埃尔米特转置的代码比较简单,python就一行代码:

    # 埃尔米特转置
    def hermitian_transpose(self):
        return Matrix([[e.conjugate() for e in v] for v in self.__vectors]).transpose_matrix()

  测试了一个矩阵:
( 1 − i 6 − i 2 − 8 i 2 + i 5 + i 4 − i ) H = ( 1 + i 2 − i 6 + i 5 − i 2 + 8 i 4 + i ) \begin{pmatrix}1-i & 6-i & 2-8i\\ 2+i & 5+i & 4-i\\ \end{pmatrix}^H= \begin{pmatrix}1+i & 2-i\\ 6+i & 5-i\\ 2+8i & 4+i\\ \end{pmatrix} (1i2+i6i5+i28i4i)H= 1+i6+i2+8i2i5i4+i

埃尔米特阵

  如果一个矩阵,埃尔米特转置后还是它自己,这样的矩阵就是埃尔米特阵。毫无疑问,矩阵必须得是一个方阵。所以它的判断方式也很简单,首先判断是否为方阵,再以对角线为对称轴判断就完事了,但是要注意数据类型,把复数和其他类型区分开来,所以代码会稍微长一点:

# 是否埃尔米特阵
    def is_hermitian(self):
        m = len(self.__vectors[0])
        n = len(self.__vectors)
        if m != n:
            return False
        # 遍历每一行对角线以上的元素
        for i in range(m):
            for j in range(i+1, n):
                e = self.__vectors[j][i]
                f = self.__vectors[i][j]

                if isinstance(e, complex):
                    if e != f.conjugate():
                        return False
                else:
                    if e != f:
                        return False
        return True

  比如以下矩阵就是一个埃尔米特阵:
( 1 − i 2 − i 3 + i 2 + i 5 + i 3 + i 3 − i 3 − i 3 − i ) \begin{pmatrix}1-i & 2-i & 3+i\\ 2+i & 5+i & 3+i\\ 3-i & 3-i & 3-i\\ \end{pmatrix} 1i2+i3i2i5+i3i3+i3+i3i

酉矩阵

  一个方阵的逆矩阵恰好是自己的埃尔米特转置,这样的矩阵被称为酉矩阵unitary matrix,也就是:
A A H = A H A = I AA^H=A^HA=I AAH=AHA=I
   A A H = A H A AA^H=A^HA AAH=AHA这个定义就限制了必须为方阵。所以它的判断也比较简单:

   # 是否为酉矩阵
    def is_unitary(self):
        m = len(self.__vectors[0])
        n = len(self.__vectors)
        if m != n:
            return False
        x = self * self.hermitian_transpose()
        return x.is_identity()
    
    # 是否为单位矩阵
    def is_identity(self):
        m = len(self.__vectors[0])
        n = len(self.__vectors)
        if m != n:
            return False
        for i in range(n):
            for j in range(n):
                if i == j:
                    if self.__vectors[i][j] != 1:
                        return False
                elif self.__vectors[i][j] != 0:
                        return False
        return True

  比如以下两个矩阵就是一个酉矩阵:
( 0.5 − 0.5 i − 0.5 + 0.5 i 0.5 i 0.5 0.5 + 0.5 i 0.5 + 0.5 i − 0.5 + 0.5 i 0 ) ( 0.5 − 0.5 i 0.5 − 0.5 i 0.5 i 0.5 − 0.5 − 0.5 i − 0.5 − 0.5 i 0.5 − 0.5 i 0 ) = ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}0.5 & -0.5i & -0.5+0.5i\\ 0.5i & 0.5 & 0.5+0.5i\\ 0.5+0.5i & -0.5+0.5i & 0\\ \end{pmatrix}\begin{pmatrix}0.5 & -0.5i & 0.5-0.5i\\ 0.5i & 0.5 & -0.5-0.5i\\ -0.5-0.5i & 0.5-0.5i & 0\\ \end{pmatrix}\\=\begin{pmatrix}1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{pmatrix} 0.50.5i0.5+0.5i0.5i0.50.5+0.5i0.5+0.5i0.5+0.5i0 0.50.5i0.50.5i0.5i0.50.50.5i0.50.5i0.50.5i0 = 100010001

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

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

相关文章

热门盘点 | 10款评分最高的项目管理工具

项目管理软件可以让项目经理及时掌握项目进展可把复杂的任务分解简单帮助项目经理及时了解整个团队进展随着现代项目需求日趋复杂和个性选一个好的项目管理软件还是很有必要的① PingCode国内研发项目管理软件PingCode,它是国内软件研发项目榜单中评分最高的项目管理…

达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)一:failover功能:基于守护进程和监视器两个内在工具实现守护进程监视器:数据守护和读写分离集群共享存储集群二:负载均衡:基于jd…

在线支付系列【22】微信支付实战篇之集成服务商API

有道无术,术尚可求,有术无道,止于术。 文章目录前言1. 环境搭建2. 特约商户进件3. 统一下单总结前言 在上篇文档中,我们做好了接入前准备工作,接下来使用开源框架集成服务商相关API。 一个简单的支付系统完成支付流程…

火爆全网的ChatGPT使用教程

最近,大家有没有被ChatGPT所刷屏呢?记得之前元宇宙刚出来的时候,也是极其火爆,虽说这二者是不同的性质,但是都是代表着当下互联网发展之迅速。 一、什么是ChatGPT 百度百科中给出的解释:ChatGPT&#xff0…

【Explain详解与索引优化最佳实践】

摘要 explain命令是查看MySQL查询优化器如何执行查询的主要方法,可以很好的分析SQL语句的执行情况。每当遇到执行慢(在业务角度)的SQL,都可以使用explain检查SQL的执行情况,并根据explain的结果相应的去调优SQL等。 …

LabVIEW中加载.NET 2.0,3.0和3.5程序集

LabVIEW中加载.NET 2.0,3.0和3.5程序集已使用.NETFramework 2.0,3.0或3.5创建了.NET程序集,但是当尝试在构造函数节点中加载这些程序集时,却收到LabVIEW消息显示: 所选文件不是.NET程序集,所属类型库或自动化可执行文件。所以想确认是否可以在…

多线程环境下的伪共享

今天和大家聊一聊伪共享 1.什么是伪共享? 缓存一致性协议在计算机中针对的最小单元:缓存行,每个缓存行的大小是64字节,一串连续的64字节数据都会存储到缓存行中。 假设数据A和数据B在同一缓存行中,CPU1修改了数据A&am…

你每天所做的工作,让你产生了成就感吗?

我们是为了什么而工作?金钱?理想?生活? 似乎这一切都没有标准答案,你自己问你自己,问问你自己,每天踏入公司,坐到工位面前,你最真实的感受是什么? “成就感…

OpenHarmony 3.2 Beta多媒体系列——视频录制

一、简介媒体子系统为开发者提供了媒体相关的很多功能,本文针对其中的视频录制功能做个详细的介绍。首先,我将通过媒体子系统提供的视频录制Test代码作为切入点,给大家梳理一下整个录制的流程。二、目录foundation/multimedia/camera_framewo…

今天面了个字节拿 38K 出来的测试,让我见识到了基础的天花板

前言 人人都有大厂梦,对于软件测试人员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金&#…

webpack新手入门

前言: 如何配置webpack呢? webpack概念有哪些呢? 怎么快速理解并使用webpack呢? 文章目录一. 什么是webpack二. 安装webpack三. webpack的五个核心概念四. webpack配置五. loader加载器1. css处理2. 处理文件(图片&…

内网渗透(十二)之内网信息收集-内网端口扫描和发现

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

FOXCONN的第一天 记录 转型的前奏

2023年春,我来到美丽富饶的威海小城,开始了我的foxconn之旅,刚毕业那阵来过之后,再一次参与这个价值10个亿的项目,首先要致敬郭老板,好久不见。然后致敬一下曾经的工友们,再次致敬一下逝去的SAP…

2023年全国数据治理DAMA-CDGA/CDGP考试报名到弘博创新

弘博创新是DAMA中国授权的数据治理人才培养基地,贴合市场需求定制教学体系,采用行业资深名师授课,理论与实践案例相结合,快速全面提升个人/企业数据治理专业知识与实践经验,通过考试还能获得数据专业领域证书。 DAMA认…

分布式高级篇4 —— 商城业务(2)

一、订单服务1、订单基本概念2、订单基本构成3、订单状态4、订单流程5、配置拦截器拦截订单请求6、订单确认页模型抽取7、订单确认页vo封装8、Feign 远程调用请求头丢失问题\*\*\*\*\* 惨痛教训9、Feign 异步调用请求头丢失问题10、查看库存状态11、模拟计算运费12、接口幂等性…

智能优化算法——粒子群优化算法(PSO)(小白也能看懂)

前言: 暑假期间,因科研需要,经常在论文中看到各种优化算法,所以自己学习了一些智能优化的算法,做了一些相关的纸质性笔记,寒假一看感觉又有点遗忘了,并且笔记不方便随时查看,所以希…

受ChatGPT影响,唐磊数字签名照经和合国际提升100倍

如果有人问二十年前什么最火,相信很多人会说唐磊的《丁香花》,如果有人问去年什么最火,很多人会把目光投向袁树雄的《早安隆回》。这也充分说明一个问题,世间的万事万物,都不会永远火爆下去,总有一天会被新…

网络安全实验室4.注入关

4.注入关 1.最简单的SQL注入 url:http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php 查看源代码,登录名为admin 最简单的SQL注入,登录名写入一个常规的注入语句: admin’ or ‘1’1 密码随便填,验证…

社区人员管理系统项目测试

项目测试: 目录 项目测试: 项目分析 项目介绍 1.对项目进行冒烟测试 2.测试 2.1注册功能测试 2.1.1需求分析: 2.1.2 编写测试用例 2.2登录功能测试 2.2.1需求分析: 2.2.2 编写测试用例 2.3针对用户管理功能进项测试: 2.3.1需求…

如何预测机组设备健康状态?你可能需要这套解决方案

1. 应用场景随机振动[注1]会发生在工业物联网的各个场景中,包括产线机组设备的运行、运输设备的移动、试验仪器的运行等等。通过分析采集到的振动信号可以预估设备的疲劳年限、及时知晓设备已发生的异常以及预测未来仪器可能发生的异常等等。本篇教程会提供给有该方…