本文主要是介绍MATLAB之并行算法学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MATLAB的加速
1.在占用时间较长的代码上进行算法的优化
2.打开MATLAB并行池使用parfor等运算
3.将循环转化为矩阵
0526更新
本来在做CUDA的矩阵乘法,在设计参数的时候突然想到matlab这边可以把一个循环转化成矩阵。也就是3的思想。
波束形成的主要部分:
data = hilbert(data);
R1 = data'*data;
for i = 1:length(theta)a_s = exp(-jay*2*pi*[0:N-1]*f0*d/c*sin(theta(i)*pi/180));beam_single(i) =a_s *R1 *a_s';
end
主要数据有以下几个
data: length * 8;
R = data’ * data :8 * 8;
对于每一个角度:a = 1*8;
for循环是为了遍历所有的角度。为了取消这个循环,需要把a中引入[-90:90]。
则矩阵a:181 * 8;
a_s = exp(-jay*2*pi*sin(theta'*pi/180)*[0:N-1]*f0*d/c);
beam_temp = a * R * a’;
= (181 * 8) * (8 * 8) * (8 * 181) = (181 * 181)
而beam应该是一个1*181的矩阵。
经过画图分析可以知道beam应为beam_temp的对角线。
matlab取对角线函数diag();
修改后的代码:
data = hilbert(data);
R1 = data'*data;
a_s = exp(-jay*2*pi*sin(theta'*pi/180)*[0:N-1]*f0*d/c);
beam_temp =a_s *R1 *a_s';
beam = diag(beam_temp)’;
测试
修改前:7.537s
修改后:4.081s
这篇关于MATLAB之并行算法学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!