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