如何在Matlab中向量化依赖的For循环

时间:2016-07-03 20:03:10

标签: performance matlab profiling vectorization nested-loops

我想知道是否有人可以帮助我对我的代码部分进行矢量化。这里,bin_pdf是二项式系数函数。 pb和pd是标量参数。谢谢!

    for t=0:min(T,r)
        for n=0:r-t
            pp = (bin_pdf(n,pb,r-t) * bin_pdf(t,pd,min(T,r)));
            pt = pt + t/r * pp;
            pn = pn + n/r * pp;
            pc = pc + (r-t-n)/r * pp;
        end
    end

其中

function p = bin_pdf(x,rho,n) 
if (x > n) || (n < 0) 
    p = 0; 
else 
    p = Choosenk(n,x) * rho^x * (1-rho)^(n-x); 
end

function C=Choosenk(n,k) 
if k>n/2 
    k=n-k; 
end; 
C=1; 
for i=0:k-1 
     C=C*(n-i)/(k-i); 
end 
end 

1 个答案:

答案 0 :(得分:0)

这是矢量化的Choosenk。如果你不在其他地方调用它,你可以将它集成到bin_pdf中。

function C=Choosenk(n,k) 
if k>n/2 
    k=n-k; 
end; 
C=prod((n-k+1:n)./(1:k));
end