有什么方法可以在 matlab 中对这段代码进行向量化以提高计算量吗?

问题描述 投票:0回答:0

如何在matlab中对这样的代码进行向量化?由于计算时间较长,是否可以避免其中一个循环? delta_E 是 LxL 矩阵,alpha_i 是 Lx1 矩阵,i_beta 是 1xL 矩阵,V 是 LxL 矩阵。可以请详细解释吗?

test=input('Write: ');
pom=num2cell(test);
[L,nr_beta, step,W]=deal(pom{:});
L
nr_beta
step
W
R= -1+rand(1,L).*2;
x=[10^-2 10^4];
t=logspace(log10(x(1)),log10(x(end)),100).';
num=numel(t);
real_r2=zeros(numel(t),1);
H=diag(-1*ones(1, L-1),1) + diag(-1*ones(1, L-1),-1)+diag(R.*(W*0.5));
[V, H_eig]=eig(H,'nobalance');

E=diag(H_eig);

我最感兴趣的是这部分代码:

i=pos;
n_j=zeros(num,L);
alpha_i = V(i, :).';
i_beta = V(i, :);
delta_E = E - E.';
multi_i=alpha_i .* i_beta;
delete(gcp('nocreate'));
parpool('Threads');
parfor j=1:L
    multi=multi_i.*V(j, :) .*V(j, :).';
    for b=1:num
        n_j(b, j) = sum(exp(-1i.* t(b).* delta_E) .* multi, 'all');
    end   
end

我尝试了 bsxfun 函数,但在矩阵大小方面遇到了一些问题。我还在循环上使用 parfor 循环,并以 b 作为迭代器。

matlab boost vectorization
© www.soinside.com 2019 - 2024. All rights reserved.