2016-11-27 63 views
1

我正在嘗試使用MATLAB來解決問題。 的遞推關係是這樣的:如何使用總和和組合來編程遞歸關係?

F(1,R,N)=(0.5)^ N * NCR

picture

所以,這是該函數I製作:

function [ f ] = fxprb(n,r,g) 
%UNTITLED Summary of this function goes here 

if n==1 
    f=(0.5^g)*nchoosek(g,r) 
else 
    i=1:g-1 
    x=fxprb(n-1,i,g); 
    f=nchoosek(g,r)*sum(x.*((i/N)^r)*((1-i/N)^r)); 
end 

end 

我不知道如何編碼,我卡住了。 f(1,0,3)工作正常,但當n是大於二,我沒有得到的結果在所有的,而不是我得到這樣的錯誤消息:

???錯誤使用==>nchoosek at 24
第二個輸入必須是一個非負整數。

錯誤==> fxprb在==>
f=(0.5^g)*nchoosek(g,r);

錯誤在9
x=fxprb(n-1,i,g);

你能幫助我嗎?

+0

我把它'NCr'意味着二項式係數?還有'k == i == n'?和'g == N'?該函數有三個參數,而不是圖像中的兩個。而且,在代碼的最後一個字段中有一個指數「r」,圖像中有「N-r」,哪一個是正確的? ...坦率地說,流汗可能是這裏的問題之一...... –

回答

0

通過在遞歸調用中將參數i = 1:g-1轉換爲fxprb(),假設nchoosek()爲矢量輸入生成多個輸出。

它沒有。

所以,你只需要循環:

function f = fxprb(n,r,N) 

    if n==1 
     f = (0.5^N) * nchoosek(N,r); 

    else 

     f = 0; 
     for k = 1:N-1 
      f = f + fxprb(n-1,k,N) * (k/N)^r * (1 - k/N)^(N-r) ; 
     end 

     f = f * nchoosek(N,r); 

    end 

end 
+0

我非常愛你。你是我的救星。我一點也不誇張。 – min

+0

@min你會認爲你至少可以給你的救世主一個接受。 ;)http://stackoverflow.com/help/someone-answers – beaker