【问题标题】:How to implement conjugate matrix transpose function in matlab?matlab中如何实现共轭矩阵转置函数?
【发布时间】:2017-04-17 15:43:32
【问题描述】:

我是 matlab 新手,我的问题是我正在尝试实现共轭矩阵转置函数 ('),但我不知道如何仅更改虚数中的符号。我知道这可能是个愚蠢的问题,但感谢您提供任何提示和建议。

我尝试了类似的方法,但出现以下错误:

  • 错误:复杂矩阵类型作为索引值无效

  • 错误:赋值失败,或者'=矩阵'没有方法

    function [ result ] = transpose_matrix( a )
    
     [Row,Col] = size(a);
     result = zeros(Col, Row); 
     iY=1;
    
     for iRow=1:Row
      iX=iRow;
       for iCol=1:Col
        result(iX)=a(iY);
        iX=iX+Row;
        iY=iY+1;
       end
     end
      imag(result)=imag(result)*-1;
    end
    

【问题讨论】:

  • 你为什么要自己实现转置? b = a'; 为您提供共轭转置。 b = a.'; 为您提供非共轭转置。 b = conj(a); 为您提供复共轭而无需转置。您使用for 循环而不是内置操作实现的任何操作在 Matlab 中都非常慢。
  • 只是为了练习

标签: arrays matlab matrix transpose


【解决方案1】:

MATLAB 感到困惑,因为以下语句试图将 imag 视为变量,而 result 则作为索引,因为它位于赋值的左侧。

imag(result) = imag(result) * (-1);

另外,重要的是要注意imag 返回一个实数,它是虚部的大小。一旦你修改了imag的输出,你需要乘以sqrt(-1)来得到一个虚数

imag(a) * (-1) * 1i;

现在要仅修改result 的虚部,您只需将这个新的虚部与result 的实部相加即可。

result = real(result) + imag(result) * (-1) * 1i;

或者更简单地说:

result = real(result) - imag(result) * 1i;

潜在的替代方案

如果您可以使用普通的 transpose 函数,则可以将整个函数替换为以下内容:

result = transpose(a);
result = real(result) - imag(result) * 1i;

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多