首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matlab中双for循环的矢量化求和

matlab中双for循环的矢量化求和
EN

Stack Overflow用户
提问于 2016-09-06 08:39:59
回答 3查看 139关注 0票数 1

对于非常大的数组(10k X 10k)或更多,我有两个for循环。显然,这个程序的一部分是一个巨大的瓶颈和非常耗时的任务。

共有4个阵列:vm(10000,1)va(10000,1)yr(10000,10000)yi(10000,10000)

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-09-07 06:01:36

你可以根据这些trigonometric identities重新表述你的方程。

代码语言:javascript
运行
复制
sin(a-b) = sin a cos b - cos a sin b;
cos(a-b) = cos a cos b + sin a sin b;

因此,预先计算正弦和余弦,并在loop或bsxfun.中使用它们。这是循环版本:

代码语言:javascript
运行
复制
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)));
end
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39339149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档