テイラー展開 しばっち 2008/02/05 23:17:12 (修正1回) └!数値微分の誤差と計算量-再帰呼び出しによ... 山中和義 2008/02/06 22:34:27 (修正1回)
テイラー展開 しばっち 2008/02/05 23:17:12 (修正1回) ツリーへ
テイラー展開 |
返事を書く ノートメニュー |
しばっち <dihjvcfsyu> 2008/02/05 23:17:12 ** この記事は1回修正されてます | |
PUBLIC NUMERIC H
LET H=1/128 LET X=0 LET N=5 PRINT DIFF(X,A) FOR A=1 TO N PRINT DIFF(X,A)/FAC(A);"* (X";SIGN$(X);") ^";A NEXT A END EXTERNAL FUNCTION F(X) LET F=1/(1+X) !'LET F=COS(X)^SIN(X) !'LET F=1/COS(X) !'LET F=TAN(X) !'LET F=EXP(SIN(X)) END FUNCTION EXTERNAL FUNCTION DIFF(X,M) IF M>0 THEN LET DIFF=(DIFF(X+H,M-1)-DIFF(X-H,M-1))/(2*H) EXIT FUNCTION END IF IF M=0 THEN LET DIFF=F(X) END FUNCTION EXTERNAL FUNCTION FAC(X) LET S=1 FOR I=2 TO X LET S=S*I NEXT I LET FAC=S END FUNCTION EXTERNAL FUNCTION SIGN$(X) IF X<0 THEN LET SIGN$=" + "& STR$(ABS(X)) ELSE LET SIGN$=" - "& STR$(ABS(X)) END FUNCTION 2変数版 PUBLIC NUMERIC H LET H=1/128 LET X=0 LET Y=0 LET M=5 PRINT F(X,Y) FOR N=1 TO M FOR B=0 TO N LET A=N-B PRINT DIFF(X,A,Y,B)/FAC(A)/FAC(B);"* (X";SIGN$(X);") ^";A;"* (Y";SIGN$(Y);") ^";B NEXT B NEXT N END EXTERNAL FUNCTION F(X,Y) LET F=EXP(X)*SIN(Y) END FUNCTION EXTERNAL FUNCTION DIFF(X,M,Y,N) IF M>0 THEN LET DIFF=(DIFF(X+H,M-1,Y,N)-DIFF(X-H,M-1,Y,N))/(2*H) EXIT FUNCTION END IF IF N>0 THEN LET DIFF=(DIFF(X,M,Y+H,N-1)-DIFF(X,M,Y-H,N-1))/(2*H) EXIT FUNCTION END IF IF M=0 OR N=0 THEN LET DIFF=F(X,Y) END FUNCTION EXTERNAL FUNCTION FAC(X) LET S=1 FOR I=2 TO X LET S=S*I NEXT I LET FAC=S END FUNCTION EXTERNAL FUNCTION SIGN$(X) IF X<0 THEN LET SIGN$=" + "& STR$(ABS(X)) ELSE LET SIGN$=" - "& STR$(ABS(X)) END FUNCTION |
└!数値微分の誤差と計算量-再帰呼び出しによ... 山中和義 2008/02/06 22:34:27 (修正1回) ツリーへ
Re: テイラー展開 |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/06 22:34:27 ** この記事は1回修正されてます | |
!数値微分の誤差と計算量 - 再帰呼び出しによるn階微分
OPTION BASE 0 LET ep=1e-8 !誤差 LET A=0 !X=0 ※マクローリン展開 LET N=9 !N次近似 DIM c(N) !係数 LET c(0)=DF(A,0) !f(a) !IF ABS(c(0))>ep THEN PRINT c(0) !0以外なら表示する PRINT c(0) FOR i=1 TO N LET c(i)=DF(A,i)/fact(i) !dfn(a)/n! !IF ABS(c(i))>ep THEN PRINT c(i);"* X ^";i !0以外なら表示する PRINT c(i);"* X ^";i PRINT 1/fact(i) !debug debug NEXT i END EXTERNAL FUNCTION F(X) !関数 !LET F=SIN(X) !LET F=COS(X) LET F=EXP(X) END FUNCTION EXTERNAL FUNCTION DF(x,n) !f(x)のn階微分 IF n>0 THEN !微分係数から求める !LET h=1/256 !LET DF=(DF(x+h,n-1)-DF(x,n-1))/h LET h=1/32 LET f1=DF(x+h,n-1)-DF(x-h,n-1) !中点法1次 LET DF=f1/(2*h) !※LET DF=DF((x+h,n-1)-DF(x-h,n-1))/(2*h) !3点近似 !LET h=1/16 !LET f1=DF(x+h,n-1)-DF(x-h,n-1) !中点法2次 !LET f2=DF(x+2*h,n-1)-DF(x-2*h,n-1) !LET DF=(2*f1/3-f2/12)/h !※LET DF=(DF(x-2*h,n-1)-8*DF(x-h,n-1)+8*DF(x+h,n-1)-DF(x+2*h,n-1))/(12*h) !5点近似 !LET h=1/16 !LET f1=DF(x+h,n-1)-DF(x-h,n-1) !中点法3次 !LET f2=DF(x+2*h,n-1)-DF(x-2*h,n-1) !LET f3=DF(x+3*h,n-1)-DF(x-3*h,n-1) !LET DF=(f1*3/4-f2*3/20+f3/60)/h !※LET DF=(DF(x+3*h,n-1)/60-DF(x+2*h,n-1)*3/20+DF(x+h,n-1)*3/4-DF(x-h,n-1)*3/4+DF(x-2*h,n-1)*3/20-DF(x-3*h,n-1)/60)/h !7点近似 !LET h=1/16 !LET f1=DF(x+h,n-1)-DF(x,n-1) !前進法2次 ※f0=DF(x,n-1)として計算すれば速くなる !LET f2=DF(x+2*h,n-1)-DF(x,n-1) !LET DF=(2*f1-f2/2)/h !LET h=1/8 !LET f1=DF(x+h,n-1)-DF(x,n-1) !前進法3次 ※同上 !LET f2=DF(x+2*h,n-1)-DF(x,n-1) !LET f3=DF(x+3*h,n-1)-DF(x,n-1) !LET DF=(3*f1-f2*3/2+f3/3)/h !LET h=1/16 !LET f1=DF(x-h,n-1)-DF(x,n-1) !後進法2次 ※同上 !LET f2=DF(x-2*h,n-1)-DF(x,n-1) !LET DF=-(2*f1-f2/2)/h !LET h=1/8 !LET f1=DF(x-h,n-1)-DF(x,n-1) !後進法3次 ※同上 !LET f2=DF(x-2*h,n-1)-DF(x,n-1) !LET f3=DF(x-3*h,n-1)-DF(x,n-1) !LET DF=-(3*f1-f2*3/2+f3/3)/h ELSE LET DF=F(x) END IF END FUNCTION |