|
> 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
|
|