代码之家  ›  专栏  ›  技术社区  ›  ehsan

函数级数

  •  0
  • ehsan  · 技术社区  · 8 年前

    我在解一系列函数时遇到了问题。

    我应该如何解F(k)*F(k-1)这样的级数?

    实际上,我想在Matlab中求解以下级数

    " image of the function "

    它只依赖于K变量。

    我尝试将函数定义为bellow并将其保存为。m文件(为了测试,我通过忽略B简化了它)

     function out = teta(x) 
        if x==9./5
            out=(25./(36*1));
        else
            out=(10./(9.*1.*x.*(x-1))).*(x-9./5).*teta(x-9./5);
        end
    

    并在主文件中写入:

    sum(teta(18/5:9/5:72/5))
    

    因为我想要一个级数的和,从k=18/5到72/5

    当我运行它时,会出现以下错误:

    输入参数不足。

    teta错误(第2行)

    如果x==9/5.

    内存不足。可能的原因是程序中的无限递归。 teta错误(第5行)

    out=(10./(9*1.*x.*(x-1))).*(x-9./5).*teta(x-9./5);

    那么我错在哪里,以及“我应该如何解决这类级数?”

    1 回复  |  直到 8 年前
        1
  •  1
  •   am304    8 年前

    首先,您不应该对浮点双精度数字进行相等性测试,而是将差异与较小的阈值进行比较。

    不使用矢量化方法(如果您愿意,可以随意进行矢量化),以下方法有效:

    function out = teta(x) 
    
        if abs(x-9/5)<1e-3
            out=25/36;
        else
            out=(10/(9*x*(x-1)))*(x-9/5)*teta(x-9/5);
        end
    

    然后按如下方式使用:

    kk = 18/5:9/5:72/5;
    teta_vec = zeros(size(kk));
    for k=1:length(kk)
        teta_vec(k) = teta(kk(k));
    end
    

    这给了我:

    >> sum(teta_vec)
    ans =  0.17714