和の公式 しばっち 2008/02/10 17:36:38 └!ベルヌーイ多項式からΣi^kを求める 山中和義 2008/02/12 15:00:46 └!ベルヌーイ数からΣi^kを求める 山中和義 2008/02/12 16:26:21 └!ライプニッツの方法からΣi^kを求める 山中和義 2008/02/12 22:29:13 (修正1回)
和の公式 しばっち 2008/02/10 17:36:38 ツリーへ
和の公式 |
返事を書く ノートメニュー |
しばっち <dihjvcfsyu> 2008/02/10 17:36:38 | |
ΣX^Nを求める
PUBLIC NUMERIC MAXLEVEL LET MAXLEVEL=20 DIM Y(MAXLEVEL+1),X(MAXLEVEL+1) FOR I=1 TO MAXLEVEL PRINT "ΣX^";STR$(I);"="; CALL SUM(X,I) CALL DISPLAY(X,I+1) NEXT I END EXTERNAL SUB SUM(X(),N) !'Σ(X^M)=A*N+B*N^2+C*N^3+...+D*N^(M+1) !' 1 !'1^1*A+1^2*B+1^3*C=Σ(N^2)=1^2 !' N=1 !' 2 !'2^1*A+2^2*B+2^3*C=Σ(N^2)=1^2+2^2 !' N=1 !' 3 !'3^1*A+3^2*B+3^3*C=Σ(N^2)=1^2+2^2+3^2 !' N=1 DIM A(N+1,N+1),B(N+1) FOR I=1 TO N+1 FOR J=1 TO N+1 LET A(I,J)=I^J NEXT J LET B(I)=SUMN(N,I) NEXT I MAT A=INV(A) MAT X=A*B END SUB EXTERNAL FUNCTION SUMN(M,X) FOR I=1 TO X LET S=S+I^M NEXT I LET SUMN=S END FUNCTION EXTERNAL SUB DISPLAY(A(),N) IF N>1 THEN IF A(N)<0 THEN PRINT "-"; IF ABS(A(N))<>1 THEN PRINT STR$(ABS(A(N)));"*X^";STR$(N); ELSE PRINT "X^";STR$(N); END IF END IF FOR I=N-1 TO 2 STEP -1 IF A(I)<>0 THEN IF A(I)<0 THEN PRINT "-"; ELSE PRINT "+"; IF ABS(A(I))<>1 THEN PRINT STR$(ABS(A(I)));"*X^";STR$(I); ELSEIF ABS(A(I))=1 THEN PRINT "X^";STR$(I); END IF END IF NEXT I IF A(1)<>0 THEN IF N>1 THEN IF A(1)<0 THEN PRINT "-"; ELSE PRINT "+"; END IF IF ABS(A(1))<>1 THEN PRINT STR$(ABS(A(1)));"*X"; ELSEIF ABS(A(1))=1 THEN PRINT "X"; END IF END IF END SUB |
└!ベルヌーイ多項式からΣi^kを求める 山中和義 2008/02/12 15:00:46 ツリーへ
Re: 和の公式 |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/12 15:00:46 | |
!ベルヌーイ多項式からΣi^kを求める
OPTION ARITHMETIC rational OPTION BASE 0 !ベルヌーイ数 Bk ※2項係数の2重級数で表現する ! k m !Bk=Σ1/(m+1)Σ(-1)^j*mCj*j^k ! m=0 j=0 ! k k !Bk=Σ(-1)^j*j^kΣmCj/(m+1) ! j=0 m=j FUNCTION B(k) !ベルヌーイ数 LET Bk=0 FOR m=0 TO k LET s=0 FOR j=0 TO m LET s=s+(-1)^j*comb(m,j)*j^k NEXT j LET Bk=Bk+s/(m+1) NEXT m LET B=Bk END FUNCTION !ベルヌーイ多項式 Bn(x) ! n !Bn(x)=ΣnCk*Bk*x^(n-k) Bkはベルヌーイ数 ! k=0 SUB BernoulliB(n,Bn()) FOR k=0 TO n LET Bn(n-k)=comb(n,k)*B(k) NEXT k END SUB !多項式の計算 !1変数Xの多項式(N次)のCi*X^iの係数を、配列C(i)=Ciで表す。 !演算関連 FUNCTION poly_val(n,a(),v) !多項式を計算する(数値代入) a(α) LET k=a(n) FOR i=n-1 TO 0 STEP -1 !Hornerの方法 LET k=k*v+a(i) !(…(((AnX+An-1)X+An-2)X+An-3)X+…+A1)X+A0 NEXT i LET poly_val=k END FUNCTION SUB poly_integral(n,a(), s()) !積分 FOR i=n+1 TO 1 STEP -1 LET s(i)=a(i-1)/i NEXT i LET s(0)=0 END SUB !------------------------------ ここまでがサブルーチン !1^k+2^k+…+n^k=Σi^k=Wk(n)とすると !Wk(n)=k∫Wk-1(x)dx + Bk(1)*n ただし、Bk(x)はベルヌーイ多項式 !W0(n)=0*∫W?(x)dx + B0(1)*n=n !W1(n)=1*∫W0(x)dx + B1(1)*n=1/2*n^2 + 1/2*n !W2(n)=2*∫W1(x)dx + B2(1)*n=2*(1/6*n^3+1/4*n^2) + 1/6*n !W3(n)=3*∫W2(x)dx + B3(1)*n=3*(1/12*n^4+1/6*n^3+1/12*n^2) + 0*n ! : LET maxlevel=20 DIM n(maxlevel+1) !nの定義 LET n(1)=1 DIM w(maxlevel+1) !wの定義 FOR p=0 TO maxlevel CALL poly_integral(maxlevel,w, w) !p∫W0(x)dx MAT w=p*w DIM Bn(maxlevel) !ベルヌーイ多項式の係数 CALL BernoulliB(p,Bn) DIM T1(maxlevel+1) MAT T1=poly_val(maxlevel,Bn,1)*n !Bk(1)*n MAT w=w+T1 PRINT "Σi^";p MAT PRINT w !係数のみ表示する c0+c1*n+c2*n^2+ … + cn*n^n NEXT p END |
└!ベルヌーイ数からΣi^kを求める 山中和義 2008/02/12 16:26:21 ツリーへ
Re: !ベルヌーイ多項式からΣi^kを求める |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/12 16:26:21 | |
!ベルヌーイ数からΣi^kを求める
OPTION ARITHMETIC rational OPTION BASE 0 !ベルヌーイ数 Bk ※2項係数の2重級数で表現する ! k m !Bk=Σ1/(m+1)Σ(-1)^j*mCj*j^k ! m=0 j=0 ! k k !Bk=Σ(-1)^j*j^kΣmCj/(m+1) ! j=0 m=j FUNCTION B(k) !ベルヌーイ数 LET Bk=0 FOR m=0 TO k LET s=0 FOR j=0 TO m LET s=s+(-1)^j*comb(m,j)*j^k NEXT j LET Bk=Bk+s/(m+1) NEXT m LET B=Bk END FUNCTION !------------------------------ ここまでがサブルーチン LET maxlevel=20 DIM w(maxlevel+1) !wの定義 !n-1 m !Σj^m=1/(m+1)Σm+1Ck*Bk*n^(m+1-k) ただし、Bkはベルヌーイ数 !j=0 k=0 FOR p=0 TO maxlevel MAT w=ZER PRINT "Σ[i=0,n] i^";p;"=" FOR k=0 TO p LET w(p+1-k)=comb(p+1,k)*B(k)/(p+1) !Σ[j=0,n-1] NEXT k LET w(p)=w(p)+1 !+n^mで補正して、Σ[j=0,n] MAT PRINT w !係数のみ表示する c0+c1*n+c2*n^2+ … + cn*n^n NEXT p END |
└!ライプニッツの方法からΣi^kを求める 山中和義 2008/02/12 22:29:13 (修正1回) ツリーへ
Re: !ベルヌーイ数からΣi^kを求める |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/12 22:29:13 ** この記事は1回修正されてます | |
!ライプニッツの方法からΣi^kを求める
!参考 http://www004.upp.so-net.ne.jp/s_honma/sum/sum.htm !an=nC0*a0 + nC1*b1 + nC2*c2 + nC3*d3 + … !Σi^2の場合 !(0) 1 5 14 30 55 91 140 204 285 385 … a0,a1,a2,a3,… ak=Σi^k ! 0 (1) 4 9 16 25 36 49 64 81 100 … b0,b1,b2,b3,… 階差数列 ! 0 0 (3) 5 7 9 11 13 15 17 19 … c0,c1,c2,c3,… 階差数列 ! 0 0 0 (2) 2 2 2 2 2 2 2 … d0,d1,d2,d3,… 階差数列 ! 0 0 0 0 (0) 0 0 0 0 0 0 … e0,e1,e2,e3,… 階差数列 ! : ! : !Sn=nC0*0+nC1*1+nC2*3+nC3*2 ※nC4*e4以降は0 ! =1*0+n*1+n(n-1)/2!*3+n(n-1)(n-2)/3!*2 OPTION ARITHMETIC rational !有理数で計算する OPTION BASE 0 LET maxlevel=30 !最高次数 !※多項式の計算 !1変数Xの多項式(N次)のCi*X^iの係数を、配列C(i)=Ciで表す。 SUB poly_mul(n,a(),b(), x()) !乗算x=a*b DIM xx(100) MAT xx=ZER(2*n) FOR i=n TO 0 STEP -1 FOR j=n TO 0 STEP -1 LET xx(i+j)=xx(i+j)+a(i)*b(j) !分配する NEXT j NEXT i MAT x=xx !copy it END SUB !その他 DIM c1(100) MAT c1=ZER(maxlevel) LET c1(0)=1 !定数1 SUB xxx(n,k, w()) !変数nの多項式 n*(n-1)*(n-2)*…*(n-k+1)/k! ※nCk DIM T1(100) MAT T1=ZER(n) LET T1(1)=1 !n-0 MAT w=ZER LET w(0)=1 !1 IF k>0 THEN FOR p=1 TO k CALL poly_mul(n,w,T1, w) !1*(n-0)*(n-1)*…*(n-k+1) MAT T1=T1-c1 !n-p NEXT p MAT w=(1/fact(k))*w !/k! ELSEIF k=0 THEN EXIT SUB ELSE PRINT "未定義です。";k STOP END IF END SUB !------------------------------ ここまでがサブルーチン LET k=2 !Σ[i=1,n]i^k DIM a(maxlevel,maxlevel) LET s=0 FOR i=1 TO maxlevel !a0=0 LET s=s+i^k !ai LET a(0,i)=s NEXT i FOR i=1 TO maxlevel !階差数列 bn,cn,dn,… FOR J=i TO maxlevel LET a(i,J)=a(i-1,J)-a(i-1,J-1) NEXT J NEXT i MAT PRINT a DIM w(maxlevel*2) CALL xxx(maxlevel,q, w) !nC0 MAT w=a(0,0)*w !*a0 LET q=1 DO WHILE a(q,q)>0 !対角線の成分 DIM T2(maxlevel*2) CALL xxx(maxlevel,q, T2) !nCk MAT T2=a(q,q)*T2 !*b1,*c2,*d3,… MAT w=w+T2 LET q=q+1 !次へ LOOP MAT PRINT w !係数のみ表示する c0+c1*n+c2*n^2+ … + cn*n^n END |