2016-07-03 5 views
1

Мне было интересно, сможет ли кто-нибудь помочь мне векторизовать эту часть моего кода. Здесь bin_pdf - функция биномиального коэффициента. pb и pd - скалярные параметры. Спасибо!Как векторизовать зависимые петли в Matlab

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 
+0

Какова форма pp, pt, pn и pc? Являются ли они скалярами, векторами или массивами? И какая из величин - ваш выход, когда вы закончите с двойной петлей? – chipaudette

+0

@chipaudette Я добавляю содержимое bin_pdf ниже. pp, pt, pn и pc являются скалярными. Мне нужны окончательные результаты из них после всех итераций. –

+0

Разве вы не можете использовать ['binopdf'] (http://es.mathworks.com/help/stats/binopdf.html)? –

ответ

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 
+0

Спасибо! любой совет для остальной части кода? –

+0

Я могу попробовать. не могли бы вы представить несколько примеров данных в своем вопросе? – Finn

+0

для них нет конкретных чисел. Вы можете выбрать все, что хотите. Благодаря! –

Смежные вопросы