ゼータ関数の組合せ的公式のプログラムの依頼

 投稿者:GAI  投稿日:2012年 7月25日(水)11時25分15秒
  ゼータ関数ζ(n)=1+2^(-n)+3^(-n)+4^(-n)+5^(-n)+…
のn:偶数での値は
フーリエ展開などを利用して、ベルヌーイ数B(n)等を用いて
ζ(2)=π^2/6
ζ(4)=π^4/90
ζ(6)=π^6/945
ζ(8)=π^8/9450

一般に
ζ(2n)=(2*π)^(2n)*|B(2n)|/(2*(2n)!)  <B(n):n番目のベルヌーイ数>
という式で表されることが公式集で紹介されています。

ここで、この値を組合せ的手法を用いて算出する方法が存在するのを知り、この
アルゴリズムをプログラミングして頂きたいのです。

その公式が

ζ(2k)={π^(2k)*k}Σ(n1+n2+n3+…+nm=2k :n1,n2,…,nmは偶数)(-1)^(k+m)/[{(n1+1)!*(n2+1)!*(n3+1)!*…*(nm+1)!}*m]

というものです。

<具体例>
ζ(6)
なら6を偶数で分けてΣの中の項が
     6=6 ・・・・・・・→1/(7!*1)=1/5040
                          及び(-1)^(k+m)=(-1)^(3+1)=1

       =4+2,2+4・・・・・→1/(5!*3!*2),1/(3!*5!*2)から1/1440+1/1440=1/720
                          及び(-1)^(k+m)=(-1)^(3+2)=-1

       =2+2+2・・・・・・→1/(3!*3!*3!*3)=1/648
                          及び(-1)^(k+m)=(-1)^(3+3)=1
から
ζ(6)=π^6*3*(1/5040-1/720+1/648)
     =π^6*3*(1/2835)
     =π^6/945
と算出される。

一般的にζ(2n)を計算させるプログラムがほしいのですが、よろしくお願いいたします。


    
 

Re: ゼータ関数の組合せ的公式のプログラムの依頼

 投稿者:山中和義  投稿日:2012年 7月25日(水)13時50分37秒
  > No.1925[元記事へ]

GAIさんへのお返事です。

> ゼータ関数ζ(n)=1+2^(-n)+3^(-n)+4^(-n)+5^(-n)+…
> のn:偶数での値は

> ζ(2k)={π^(2k)*k}Σ(n1+n2+n3+…+nm=2k :n1,n2,…,nmは偶数)(-1)^(k+m)/[{(n1+1)!*(n2+1)!*(n3+1)!*…*(nm+1)!}*m]
>
> というものです。

自然数Kを自然数の和に分割するプログラムを考えればよいかと思います。



!ゼータ関数
!ζ(2K)=π^(2K)*K*Σ[n[1]+n[2]+ … +n[p]=2K、n[p]:偶数](-1)^(K+p)/( (n[1]+1)!*(n[2]+1)!* … *(n[p]+1)!*p )

OPTION ARITHMETIC RATIONAL !有理数モード

!----- ↓↓↓ -----
LET K=3 !K=1,2,3,4,…

PUBLIC NUMERIC T !Σ部分
LET T=0

DIM M(K) !Σn[p]=2K
MAT M=ZER
!----- ↑↑↑ -----

PUBLIC NUMERIC C !解の数
LET C=0
CALL search(1,0,M,K)


!----- ↓↓↓ -----
PRINT "ζ(";STR$(2*K);")=π^";STR$(2*K);" * ";
PRINT "(";K*T;")"
!----- ↑↑↑ -----

END


!自然数Nを分割する(並びの順序は区別する)
EXTERNAL SUB search(p,s,M(),N) !バックトラック法で検索する
OPTION ARITHMETIC RATIONAL !有理数モード

FOR i=1 TO N-s !※sは、0から(p-1)番目までの和
   LET M(p)=i !p番目を設定する

   IF s+i=N THEN !条件を満たせば
      LET C=C+1 !結果を表示する
      PRINT "No.";C
      MAT PRINT M; !debug

      !----- ↓↓↓ -----
      LET W=p !Σ部分の計算
      FOR j=1 TO p
         LET W=W*FACT(2*M(j)+1)
      NEXT j
      LET W=(-1)^(N+p)/W
      PRINT W !debug

      LET T=T+W
      !----- ↑↑↑ -----
   ELSE
      CALL search(p+1,s+i,M,N) !次へ
   END IF

   LET M(p)=0 !元に戻す
NEXT i
END SUB

 

戻る