• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何使用总和和组合来编程递归关系?

matlab 来源:min 8次浏览

我正在尝试使用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);

你能帮助我吗?


===========解决方案如下:

通过在递归调用中将参数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)