对于非常大的数组(10k X 10k)或更多,我有两个for循环。显然,这个程序的一部分是一个巨大的瓶颈和非常耗时的任务。
共有4个阵列:vm(10000,1)、va(10000,1)、yr(10000,10000)和yi(10000,10000)
for i = 1: 10000
psum = 0;
for j = 1: 10000
psum = psum + vm(i)*vm(j)*(yr(i,j)*cos(va(i)-va(j)) + yi(i,j)*sin(va(i)-va(j)));
end
pcal(i) = psum;
end发布于 2016-09-07 06:01:36
你可以根据这些trigonometric identities重新表述你的方程。
sin(a-b) = sin a cos b - cos a sin b;
cos(a-b) = cos a cos b + sin a sin b;因此,预先计算正弦和余弦,并在loop或bsxfun.中使用它们。这是循环版本:
yr = rand(10000);
yi = rand(10000);
va = rand(1,10000);
vm = rand(1,10000);
sin_va = sin(va);
cos_va = cos(va);
for i = 1: 10000
pcal(i) = sum(vm(i)*vm.*(yr(i,:).*(cos_va(i) * cos_va + sin_va(i) * sin_va) + yi(i,:).*(sin_va(i) * cos_va - cos_va(i) * sin_va)));
endhttps://stackoverflow.com/questions/39339149
复制相似问题