【发布时间】:2017-10-21 02:39:07
【问题描述】:
我在 matlab 中编码,由于 matlab 不适用于“for”循环,我需要避免它们,以便尽可能快地完成。这是我处理“for”的代码的一部分。
for i = 1:size(U,1)
for j=1:size(U,2)
v(i,j) = U(mod(i+1-1,size(U,1))+1,j) + U(i,mod(j+1-1,size(U,2))+1) ...
+ U(mod(i-1-1,size(U,1))+1,j) + U(i,mod(j-1-1,size(U,2))+1) - 4*U(i,j);
end
end
我的矩阵中有一个周期性边界条件,这就是我使用“mod”函数的原因。 这段代码其实和matlab中的“del2”函数类似,但是matlab版本不支持周期性边界条件。
【问题讨论】:
-
请解释一下你所说的 matlab 不能很好地与“for”循环配合使用
-
@BradDay 如果你使用太多的“for”循环,它会增加模拟的运行时间,如果你用 C++ 等其他语言编写相同的代码,它会更快。无论如何,我正在寻找一种替代循环结构,如“for”,就是这样......
-
嗯。我看不出没有迭代过程可以做到这一点,因为您需要查看拉普拉斯算子的 U(i,j) 的邻居。如果 matlab 执行代码太慢,我唯一可以建议的是尝试使用带有 parfor 的并行 for 循环
标签: matlab performance for-loop coding-efficiency