当前位置: 首页 > news >正文

3.2 埃尔米特转置

定义

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

  1. 第一种符号是AHA^HAH,这是国内教材通用的做法,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−i6−i2−8i2+i5+i4−i)H=(1+i2−i6+i5−i2+8i4+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 Falseelse:if e != f:return Falsereturn True

  比如以下矩阵就是一个埃尔米特阵:
(1−i2−i3+i2+i5+i3+i3−i3−i3−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,也就是:
AAH=AHA=IAA^H=A^HA=I AAH=AHA=I
  AAH=AHAAA^H=A^HAAAH=AHA这个定义就限制了必须为方阵。所以它的判断也比较简单:

   # 是否为酉矩阵def is_unitary(self):m = len(self.__vectors[0])n = len(self.__vectors)if m != n:return Falsex = 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 Falsefor i in range(n):for j in range(n):if i == j:if self.__vectors[i][j] != 1:return Falseelif self.__vectors[i][j] != 0:return Falsereturn True

  比如以下两个矩阵就是一个酉矩阵:
(0.5−0.5i−0.5+0.5i0.5i0.50.5+0.5i0.5+0.5i−0.5+0.5i0)(0.5−0.5i0.5−0.5i0.5i0.5−0.5−0.5i−0.5−0.5i0.5−0.5i0)=(100010001)\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.5i00.50.5i0.50.5i0.5i0.50.50.5i0.50.5i0.50.5i0=100010001

http://www.lryc.cn/news/170.html

相关文章:

  • Python爬虫之Scrapy框架系列(13)——实战ZH小说爬取数据入MySql数据库
  • MySQL篇02-三大范式,多表查询
  • vue-cli3创建Vue项目
  • Linux perf probe 的使用(三)
  • python GUI编程 多窗口跳转
  • nuxt 学习笔记
  • Python编程自动化办公案例(1)
  • 一站式 Elasticsearch 集群指标监控与运维管控平台
  • C# 调用Python
  • 51单片机最强模块化封装(3)
  • 【CSS 布局】水平垂直居中
  • 【C++】类和对象--类的6个默认成员函数
  • 常见面试题---------如何处理MQ消息丢失的问题?
  • 十四、Linux网络:高级IO
  • 带你走进API安全的知识海洋
  • 【Java】TCP的三次握手和四次挥手
  • JUC并发编程
  • 概率统计·假设检验【正态总体均值的假设检验、正态总体方差的假设检验】
  • 如何预测机组设备健康状态?你可能需要这套解决方案
  • C++类和对象:面向对象编程的核心。| 面向对象还编什么程啊,活该你是单身狗。
  • CUDA虚拟内存管理
  • 线程池小结
  • vue3状态管理模式 Pinia
  • python基于django的自媒体社区交流平台
  • Python中类和对象(2)
  • SpringMvc入门
  • 设计模式之单例模式(C++)
  • 贪心算法(基础)
  • 【九宫格坐标排列 Objective-C语言】
  • Tomcat简介