如何使用涉及的总和和组合来计算递归关系?

时间:2016-11-27 07:55:26

标签: matlab relation recurrence

我正在尝试使用MATLAB来解决问题。 递归关系是这样的:

f(1,r,N)=(0.5)^ N * NCr

picture

所以,这是我做的功能:

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大于2时,我根本没有得到结果,而是收到如下错误消息:

  

???使用==>时出错nchoosek 24岁   
第二个输入必须是非负整数。

     

==>中的错误fxprb at 6   
f=(0.5^g)*nchoosek(g,r);

     

==>中的错误fxprb 9点   
x=fxprb(n-1,i,g);

你可以帮帮我吗?

1 个答案:

答案 0 :(得分: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