Math 连分式、级数与Ramanujan定理

Math 连分式、级数与Ramanujan定理,math,octave,scientific-computing,Math,Octave,Scientific Computing,基于网络上有趣的演示,我试图通过编程来证明这一点 我使用了八度音阶,但在计算中遇到了很大的误差。我的错在哪里 代码如下: function [ref, reali, err] = rama(n) a(1) = 1; for i=2:n a(i) = (2*i+1)*a(i-1); endfor b = 1./a; S = sum(b); p = '1'; for k = n:-1:1 s = int2str(k); p = ['1+' s

基于网络上有趣的演示,我试图通过编程来证明这一点

我使用了八度音阶,但在计算中遇到了很大的误差。我的错在哪里

代码如下:

function [ref, reali, err] = rama(n)
  a(1) = 1;
  for i=2:n
    a(i) = (2*i+1)*a(i-1);
  endfor
  b = 1./a;
  S = sum(b);

  p = '1';
  for k = n:-1:1
    s = int2str(k);
    p = ['1+' s '/( ' p ' )'];
  endfor
  P = str2num(p);
  P ^=(-1);

  ref = S + P;
  reali = sqrt(pi*exp(1)*0.5);
  err = abs(reali - ref);
endfunction

我认为,当涉及递归分数的基本情况时,您做出了一个相当不合理的假设,即在您决定停止时,最后一个“1+recurse”步骤等于“1+0”(此外,截断最后一个递归部分不会对您的解产生太大影响)

事实上,被截断的位(通过反复试验)被证明是“1+π”,而不是“1+0”,并且事实证明,将其截断会传播一个大的错误,一路返回,对结果影响很大

修改计算中的基本情况以解释缺少的π,可以使近似值更加精确

  for k = n:-1:2
    s = int2str(k);
    p = ['1+' s '/( ' p ' )'];
  endfor
  p = ['1+1/( ' p ' + ' num2str(pi) ' )'];

我认为,当涉及递归分数的基本情况时,您做出了一个相当不合理的假设,即在您决定停止时,最后一个“1+recurse”步骤等于“1+0”(此外,截断最后一个递归部分不会对您的解产生太大影响)

事实上,被截断的位(通过反复试验)被证明是“1+π”,而不是“1+0”,并且事实证明,将其截断会传播一个大的错误,一路返回,对结果影响很大

修改计算中的基本情况以解释缺少的π,可以使近似值更加精确

  for k = n:-1:2
    s = int2str(k);
    p = ['1+' s '/( ' p ' )'];
  endfor
  p = ['1+1/( ' p ' + ' num2str(pi) ' )'];

S
应该约为1.41069(将第二个红色方程式放入Wolfram Alpha:)。收敛正确吗?
S
应该是1.41069左右(将第二个红色方程放入Wolfram Alpha:)。这是否正确?非常感谢。我尝试了更多,并意识到3.52比pi更精确。使用此值,错误变为0。00027361@Milo有趣。我记得以前读到过有。我只是想当然地认为这几乎肯定就是其中之一非常感谢你。我尝试了更多,并意识到3.52比pi更精确。使用此值,错误变为0。00027361@Milo有趣。我记得以前读到过有。我只是想当然地认为这几乎肯定就是其中之一P