在MATLAB中创建复杂坐标矩阵,无需循环

时间:2016-09-08 22:59:11

标签: matlab optimization matrix

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

    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

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

2 个答案:

答案 0 :(得分:5)

您可以将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

答案 1 :(得分:0)

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

Reals = [0:0.5:1]; % Real numbers
Imags = [0:0.5:1]; % Imaginary numbers

C = Reals * eye(length(Reals)) + eye(length(Imags)) * Imags.' * i