我正在尝试创建一个复杂坐标矩阵,以便它包含我指定的实数和虚数的所有组合。例如:
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
当我使实数和虚数向量变大时,此循环需要相当长的时间。有没有更快的方法来创建这样的矩阵?
答案 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