寻找一种更有效的方式编写我的MATLAB代码

亨利

我已经在MATLAB中编写了以下内容

for i = 1:3

   alpha11(i) = b+a.*randn(1,1);
   alpha22(i) = b+a.*randn(1,1);
   alpha12(i) = b+a.*randn(1,1);
   alpha21(i) = b+a.*randn(1,1);

AoD11(i) = randi([-180/6 +180/6],1,1);
AoA11(i) = randi([-180/6 +180/6 ],1,1);
AoD22(i) = randi([-180/6 +180/6],1,1);
AoA22(i) = randi([-180/6 +180/6 ],1,1);


AoD21(i) = randi([-180 +180],1,1);
AoA21(i) = randi([-180 +180 ],1,1);
AoD12(i) = randi([-180 +180],1,1);
AoA12(i) = randi([-180 +180 ],1,1);


 ctet11(i)= ((2*pi)/lambda)*d*sin(AoD11(i));
 ctet22(i)= ((2*pi)/lambda)*d*sin(AoD22(i));
 ctet12(i)= ((2*pi)/lambda)*d*sin(AoD12(i));
 ctet21(i)= ((2*pi)/lambda)*d*sin(AoD21(i));

 f_t11_ula{i}=transpose((1/sqrt(M))*[ 1 exp(j*ctet11(i)) exp(j*2*ctet11(i)) exp(j*3*ctet11(i))  ]);
 f_t22_ula{i}=transpose((1/sqrt(M))*[ 1 exp(j*ctet22(i)) exp(j*2*ctet22(i)) exp(j*3*ctet22(i))  ]);
 f_t12_ula{i}=transpose((1/sqrt(M))*[ 1 exp(j*ctet12(i)) exp(j*2*ctet12(i)) exp(j*3*ctet12(i))  ]);
 f_t21_ula{i}=transpose((1/sqrt(M))*[ 1 exp(j*ctet21(i)) exp(j*2*ctet21(i)) exp(j*3*ctet21(i))  ]);


 cter11(i)= ((2*pi)/lambda)*d*sin(AoA11(i));
 cter22(i)= ((2*pi)/lambda)*d*sin(AoA22(i));
 cter12(i)= ((2*pi)/lambda)*d*sin(AoA12(i));
 cter21(i)= ((2*pi)/lambda)*d*sin(AoA21(i));

 f_r11_ula{i}=transpose((1/sqrt(O))*[ 1 exp(j*cter11(i)) exp(j*2*cter11(i)) exp(j*3*cter11(i))  ]); 
 f_r22_ula{i}=transpose((1/sqrt(O))*[ 1 exp(j*cter22(i)) exp(j*2*cter22(i)) exp(j*3*cter22(i))]); 
 f_r12_ula{i}=transpose((1/sqrt(O))*[ 1 exp(j*cter12(i)) exp(j*2*cter12(i)) exp(j*3*cter12(i))  ]); 
 f_r21_ula{i}=transpose((1/sqrt(O))*[ 1 exp(j*cter21(i)) exp(j*2*cter21(i)) exp(j*3*cter21(i))]); 



 channel11{i}=  alpha11(i) * f_r11_ula{i}* conj(transpose(f_t11_ula{i})) ;
 channel22{i}= alpha22(i) * f_r22_ula{i}* conj(transpose(f_t22_ula{i})) ;
 channel12{i}= alpha12(i) * f_r12_ula{i}* conj(transpose(f_t12_ula{i})) ;
 channel21{i}= alpha21(i) * f_r21_ula{i}* conj(transpose(f_t21_ula{i})) ;

end 

我在这里写这个问题是为了询问如何压缩此代码,因为您看到它的编写不是很好,而且我基本上有很多重复。我不知道怎么用几个命令写它们。每个命令重复四次,并分别以11、12、21、22索引。

PS如果有人要运行代码,则需要以下变量

a = 1;
b = 0; 
M=4;
O = 4; 
lambda=0.15;
d=lambda/2;

期待提出建议。

泰迪的地方

正如@David所提到的,可以使用3D数组来完成。这消除了许多代码重复。

这是一个如何完成的示例:

sz=[2,2,3];
alpha=b+a.*randn(sz);
AoD = randi([-180/6 +180/6],sz);
AoA = randi([-180 +180],sz);
mask = logical(repmat(eye(2),1,1,3));
[AoA(mask), AoD(~mask)] = deal(AoD(~mask),AoA(mask));
ctet = 2*pi/lambda * d * sin(AoD);
f_t = reshape(arrayfun(@(x) exp(1j*(0:3)'*ctet(x))/sqrt(M),1:12,'UniformOutput',0),sz);
cter = (2*pi)/lambda*d*sin(AoA);
f_r = reshape(arrayfun(@(x) exp(1j*(0:3)'*cter(x))/sqrt(O),1:12,'UniformOutput',0),sz);
channel = reshape(arrayfun(@(x) alpha(x) * f_r{x} * conj(transpose(f_t{x})), 1:12, 'UniformOutput',0),sz);

请注意,对于问题中提到的每个变量,可以使用相应的3D索引访问相同的值。例如,使用上面的代码,以前的值AoA11(1)现在在AoA(1,1,1)中。同样,存储在中的矩阵channel11{1}现在位于中channel{1,1,1}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

调用函数时出现NameError(寻找一种更简洁的代码编写方式)

R组合,寻找比基本R更快,更有效的方式(打包,代码,并行cpu)

寻找更有效的方式在python中编写If语句

一种更有效的方式来清洁字符串列并添加新列

如何以更有效和Pythonic的方式编写以下代码?

寻找一种有效的迭代方法

寻找一种更有效的方法来根据数据框列中的字典创建新列

Laravel精通语法-哪一种更有效

需要一种缩短代码并使之更有效的方法

PySpark-一种计算常见元素的更有效方法

从C ++中的输入收集数据时,有没有一种更有效的方式来处理变量?

一种更简化,更有效的拆分列表方式

需要一种更有效的方式将JDBC结果集转换为JSON数组

Neo4j是否有一种更有效的方式来编写多个where-contains?

需要一种更有效的ID比较方法

是否有一种更有效的方式以某种方式将项目列表映射到成对列表?

寻找一种更短,更有效的方式来添加(可能)重复到字符串末尾的内容

需要一种更有效的方式来合并文本文件

寻找一种比COUNTIFS和MINIFS更有效的方法来比较多行

一种更有效的方法来对netstat命令的结果进行排序

寻找一种更有效的方式来初始化字典

有没有一种更有效的方式编写jQuery代码,该代码将在另一个元素悬停时更改一个元素的比例?

寻找一种更有效的方式编写此jquery菜单

如何在python中打印形状?寻找一种不同的、更有效的方式

寻找一种更有效的方法来使用 STL 函数检查字符串是否为回文

如何在Javascript中编写一种有效的方式来处理匹配模式?

寻找一种更有效的方法来创建 4 向链表

我的代码有效,但需要一种优雅的方式从列表中生成子列表

如何以更有效的方式编写此代码?