Matlab 代码优化(嵌套循环)

Matlab 代码优化(嵌套循环),matlab,for-loop,optimization,Matlab,For Loop,Optimization,我正在运行一个matlab代码,其中我必须运行嵌套for循环。我已经做了预分配。我认为矢量化在我的情况下是不可能的。此外,我不熟悉编写mex文件。你会建议我在速度方面优化我的代码吗?您可以在下面找到代码。随着tuple_rs和tuple_cs值的增加,大约需要3-4秒 for i=1:tuple_rs mu=target.x{tID,tm-N+1}; % Track at T(k-S+1) sig=target.c{tID,tm-N+1}; for

我正在运行一个matlab代码,其中我必须运行嵌套for循环。我已经做了预分配。我认为矢量化在我的情况下是不可能的。此外,我不熟悉编写mex文件。你会建议我在速度方面优化我的代码吗?您可以在下面找到代码。随着tuple_rs和tuple_cs值的增加,大约需要3-4秒

for i=1:tuple_rs
mu=target.x{tID,tm-N+1};                    % Track at T(k-S+1)
sig=target.c{tID,tm-N+1};
    for n=1:tuple_cs
        if a(i,n)~=0                           % Non-Dummy Measurement
           v=bh{tm-N+n+1}(a(i,n),:)';          % Measurement
           mu = ml.FCV * mu;
           sig = ml.FCV * sig * ml.FCV'+ ml.Q;
           S = ml.H*sig*ml.H'+ml.Rsd;
           innv = mu(1:2) - v(1:2);
           eucdis=sqrt(innv * innv');          % Euclidean Distance
           % Eliminate measurements outside of the gate
           if eucdis > target.Kn_Thresh/2
              phi_n(tID,i)=10^-900; phi_o(tID,i)=1; 
              continue;
           end
           Sm=S(1:2,1:2); iv=v(1:2)-mu(1:2);
           lhood=(2*pi)^-1*det(Sm)^-0.5*exp(-0.5*(iv)'*(Sm\iv));% Cost
           Msd=target.Sp_Thresh - cf{tm-N+n+1}(a(i,n)); % Norm. Fs
           phi_o(tID,i)=phi_o(tID,i)*vol;      % Dummy Track
           phi_n(tID,i)=phi_n(tID,i)*PD*lhood*PM(n)*(Msd/SumSd(n)); % Nondummy T
           z_mu=[mu(1);mu(2);mu(3);mu(4)];     % Predicted Measurement
           S = ml.H*sig*ml.H'+ml.R;
           gain = (sig * ml.H')/S;             % Gain
           sig = sig - gain*ml.H*sig;          % Covariance estimation
           mu = mu + gain*(v-z_mu);            % Mean estimation
        else phi_n(tID,i)= phi_n(tID,i)*(1-PD)*PL(n); % Dummy Measurement
          phi_o(tID,i)=phi_o(tID,i)*1;
          mu = ml.FCV * mu;
          sig = ml.FCV * sig * ml.FCV'+ ml.Q;
       end
   end
end

使用
profile
识别慢行。我做到了。问题是每一条线花费的时间差不多。正如我所说,for循环的主体并不昂贵,但随着迭代次数的增加,它会以指数形式变慢。请尝试尽可能多地删除
struct
s和
cell
s的使用,它们有时可能效率低下。同时检查循环内部是否有任何东西在增长(使用更多内存)
10^-900
是怎么回事?