如何使用总和和组合来编程递归关系?
我正在尝试使用MATLAB来解决问题。 的递推关系是这样的:如何使用总和和组合来编程递归关系?
F(1,R,N)=(0.5)^ N * NCR
所以,这是该函数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);
你能帮助我吗?
回答:
通过在递归调用中将参数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
以上是 如何使用总和和组合来编程递归关系? 的全部内容, 来源链接: utcz.com/qa/260966.html