【问题标题】:Matlab : (.)^*T operation for complex numbersMatlab : (.)​​^*T 复数运算
【发布时间】:2016-11-26 07:03:36
【问题描述】:

这里提出的问题的答案Why is complex conjugate transpose the default in Matlab

表示对于复数,我们可以使用' 符号来表示用于实数的转置操作。在数学上,对实数值进行的转置操作用符号 (.)^T 表示。对于复数的转置,等效符号为(.)^H。它的完成方式是——首先我们取复数的共轭,然后取它的转置。这是操作(.)^H

我想实现复数的操作(.)^{*T} = (.)^H。我为此使用了符号撇号。错的地方请指正。

我想确认我的概念实现是否正确,或者没有使用 Matlab。例如,对于实值向量A_r,我想将其乘以它的转置multiply_r = A_r*A_r'

对复值向量 A_c 复制相同的操作,此操作将变为 multiply_c = A_c * A_c'

A_r =[1,2,3]; %real valued vector
B_r = A_r'; %transpose of real valued vector
multiply_r =A_r*B_r;

A_c = [1 + sqrt(-1)*1, 2+sqrt(-1)*2, 3+sqrt(-1)*3]; %complex valued vector
B_c = A_c'; %transpose of complex valued vector
multiply_c = A_c*B_c;

这样好吗?

更新:我正在尝试对这个复值数组进行正常转置,使其排列为 3 行 1 列而不是 1 行 3 列。使用运算符.' 我得到了奇怪的值,因为数组的大小现在增加了!!正确的方法是什么?

h = [ -5.1053 + 3.6797i  1.3327 + 5.7339i  4.1302 -10.7521i].'

h =

  -5.1053 + 3.6797i
   1.3327 + 5.7339i
   4.1302          
        0 -10.7521i

【问题讨论】:

  • 看起来很不错。但这取决于你想做什么。如果您想要转置复数(没有共轭),请使用.'。如果你想共轭转置使用'
  • @Luis Mendo:我想做相当于 $(.)^{*T} = (.)^H$ 的操作。那我应该用什么?这是共轭转置吗?
  • 顺便说一句,你不需要写 sqrt(-1) 你在 Matlab 中有 ij 符号。

标签: matlab matrix transpose complex-numbers


【解决方案1】:

如您所述,Matlab 定义了矩阵“转置”((.)^T)和“共轭转置”((.)^H)。
对于实值转置,您有transpose,可以表示为运算符.'(注意' 之前的'.'):

aT = transpose(a);
isequal( aT, a.' );  % transpose() and .' are the same

对于复共轭转置,您有ctranspose,可以表示为运算符'(注意' 之前有no .):

aH = ctranspose(a);
isequal( aH, a' );  % ctranspose and ' are the same

您可以使用conj进行验证:

isequal( a', conj(a).' );

【讨论】:

  • 您能看到我的问题中的更新吗?在特定情况下使用运算符时,我遇到了一种奇怪的情况
  • @SKM 使用逗号分隔值
  • 这些值是程序在运行时使用公式生成的,我不能用逗号。有没有一种方法,一旦等式计算出这些值,我就可以用逗号吗?
  • @SKM 你能消除空格吗?
  • 我通过将向量初始化为行顺序来解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
相关资源
最近更新 更多