新しく発言する  EXIT  インデックスへ
テイラー展開

  テイラー展開 しばっち 2008/02/05 23:17:12  (修正1回)
  !数値微分の誤差と計算量-再帰呼び出しによ... 山中和義 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


 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。