2016-07-03 4 views
1

누구든지 내 코드의이 부분을 벡터화하는 데 도움이 될지 궁금합니다. 여기서, bin_pdf는 이항 계수 함수이다. pb 및 pd는 스칼라 매개 변수입니다. 고맙습니다!Matlab에서 종속 For 루프를 벡터화하는 방법

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이다

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 

. 만약 당신이 그것을 어딘가에 호출하지 않으면 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

해당 번호가 없습니다. 원하는 것을 선택할 수 있습니다. 감사! –

관련 문제