【问题标题】:Create matrix of complex coordinates in MATLAB without loop在没有循环的MATLAB中创建复坐标矩阵
【发布时间】:2016-09-09 08:48:25
【问题描述】:

我正在尝试创建一个复坐标矩阵,以便它包含我指定的实数和虚数的所有组合。例如:

    Re = 0:0.5:1; % Real numbers
    Im = 0:0.5:1; % Imaginary numbers

    C = zeros(length(Re),length(Im)); % Pre-allocate matrix
    for i = 1:length(Re)
        for j = 1:length(Im)
            C(i,j) = complex(Re(i),Im(j)); % Real part + Imaginary part
        end
    end

结果是:

    Re =
       0    0.5000    1.0000

    Im =
       0    0.5000    1.0000

    C =
      0.0000 + 0.0000i   0.0000 + 0.5000i   0.0000 + 1.0000i
      0.5000 + 0.0000i   0.5000 + 0.5000i   0.5000 + 1.0000i
      1.0000 + 0.0000i   1.0000 + 0.5000i   1.0000 + 1.0000i

当我使实部和虚部向量更大时,这个循环需要相当长的时间。有没有更快的方法来创建这样的矩阵?

【问题讨论】:

    标签: matlab optimization matrix


    【解决方案1】:

    您可以将bsxfun@plus 句柄一起使用:

    >> re = 0:0.5:1;
    >> im = 0:0.5:1;
    >> bsxfun(@plus,re(:),im(:).'*1i)
    
    ans =
    
       0.0000 + 0.0000i   0.0000 + 0.5000i   0.0000 + 1.0000i
       0.5000 + 0.0000i   0.5000 + 0.5000i   0.5000 + 1.0000i
       1.0000 + 0.0000i   1.0000 + 0.5000i   1.0000 + 1.0000i
    

    【讨论】:

    • 谢谢,我试了一下 10,000x10,000 矩阵,我的代码用了 12.9 秒,而你的用了 1.2 秒。
    【解决方案2】:

    不确定这是否更快,但假设它们的长度相同:

    Reals = [0:0.5:1]; % Real numbers
    Imags = [0:0.5:1]; % Imaginary numbers
    
    C = Reals * eye(length(Reals)) + eye(length(Imags)) * Imags.' * i
    

    【讨论】:

    • 我尝试运行代码,但它说矩阵尺寸不一致。
    • 我编辑在撇号前添加一个句点;如果这不起作用,请分别创建前半部分和后半部分并检查它们是否具有相同的尺寸。如果没有,您应该能够向后工作以查看导致尺寸问题的原因。请记住,左右矩阵乘法会有所不同,所以不要更改顺序
    • 前半部分(实半部分)是水平向量,后半部分是垂直向量,所以不会相加。它们应该如何组合成一个长宽都有的矩阵?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多