从循环代码可以看出,向量b不参与运算,只是如果b中的一个元素等于零,那么跳过一
次运算。所以,在运算前找到向量b中所有零元素的位置,保存在变量indices,然后xo
urce2d(indices) = []; ysource2d(indices) = [],最后再进行运算,无需判断。
【 在 novicer (novicer) 的大作中提到: 】
: 标 题: Re: 请问这个程序为什么越来越慢?
: 发信站: 水木社区 (Sat Sep 11 16:02:25 2021), 站内
:
: 基本搞定了,还有个小问题。之前for循环里有一句判断语句,if b(ite)~=0,也就是:
: for ite1 = 1:size1*size2
: if b(ite)~=0
: sum_u2 = sum_u2 + sqrt(1+((x2d-xsource2d(ite1))./zin).^2 +((y2d-ysource2d(ite1))./zin).^2);
: end
: end
:
: 现在改为:
: b_temp = repmat(b,[size1,1 size2]);
: b_temp2 = permute(b_temp,[1 3 2]);
: ind=find(b_temp2~=0);
: [i1,i2,i3]=ind2sub(size(b_temp2),ind);
: 。。。
: sum_u2 = ... x2d_temp(i1,i2,i3) ...
: 出现错误提示:超出了程序允许的最大变量值。请问这是什么问题?非常感谢!
:
:
:
: 【 在 shaolimin 的大作中提到: 】
: : 那就对了,说明除去循环是成功的。你再检查一下其他语句。
: :
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 192.155.87.*]
--
FROM 112.32.133.*