我正在尝试使用MATLAB来解决问题。 递归关系是这样的:
f(1,r,N)=(0.5)^ N * NCr
所以,这是我做的功能:
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);
答案 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