広義積分の計算のプログラム

 投稿者:GAI  投稿日:2009年11月22日(日)23時33分53秒
  ∫0~∞(e^(-t)/(1-e^(-t))-e^(-t)/t)dt
の計算をするのは、どうやったらいいか教えてください。
 

Re: 広義積分の計算のプログラム

 投稿者:山中和義  投稿日:2009年11月23日(月)10時37分28秒
  > No.752[元記事へ]

GAIさんへのお返事です。

数値積分
 0.5772156649015328606… オイラーの定数γ

!半無限区間積分 ∫[0,∞]{EXP(-x)*f(x)}dx
DEF F(X)=1/(1-EXP(-X)) - 1/X
LET S=0
FOR I=1 TO 20
   READ X,W
   LET  S=S+W*F(X)
NEXT I
PRINT S
DATA   .0705398896919888, 1.6874680185111386E-01 !ガウス・ラゲール則の係数(分点、重み)
DATA   .3721268180016114, 2.9125436200606828E-01 !20次ラゲール多項式より
DATA   .9165821024832736, 2.6668610286700129E-01
DATA  1.7073065310283439, 1.6600245326950684E-01
DATA  2.7491992553094321, 7.4826064668792371E-02
DATA  4.0489253138508869, 2.4964417309283221E-02
DATA  5.6151749708616165, 6.2025508445722368E-03
DATA  7.4590174536710633, 1.1449623864769082E-03
DATA  9.5943928695810968, 1.5574177302781197E-04
DATA 12.0388025469643163, 1.5401440865224916E-05
DATA 14.8142934426307400, 1.0864863665179824E-06
DATA 17.9488955205193760, 5.3301209095567148E-08
DATA 21.4787882402850110, 1.7579811790505820E-09
DATA 25.4517027931869055, 3.7255024025123209E-11
DATA 29.9325546317006120, 4.7675292515781905E-13
DATA 35.0134342404790000, 3.3728442433624384E-15
DATA 40.8330570567285711, 1.1550143395003988E-17
DATA 47.6199940473465021, 1.5395221405823436E-20
DATA 55.8107957500638989, 5.2864427255691578E-24
DATA 66.5244165256157538, 1.6564566124990233E-28
END
 

Re: 広義積分の計算のプログラム

 投稿者:山中和義  投稿日:2009年11月25日(水)14時14分32秒
  > No.753[元記事へ]

二重指数関数型で数値積分してみました。
OPTION ARITHMETIC NATIVE

!2重指数関数型数値積分(Double Exponential formula)
! ∫[0,∞]f(x)dx 半無限領域(0,∞)の積分
!
! x=EXP(t-EXP(-t))とすると、dx/dt=EXP(t-EXP(-t))*(1+EXP(-t))
! 与式=∫[-∞,∞]{f(EXP(t-EXP(-t)))*EXP(t-EXP(-t))*(1+EXP(-t))}dt

DEF f(x)=EXP(-x)/(1-EXP(-x)) - EXP(-x)/x !∫[0,∞]f(x)dx = 0.5772156649015328606… オイラーの定数γ

LET N=36 !分割数
LET h=1/6

LET s=0
FOR j=-N/2 TO N/2
   LET t=j*h
   LET v=EXP(-t)
   LET x=EXP(t-v)
   LET s=s + f(x)*x*(1+v)
NEXT j
LET s=h*s

PRINT s !結果を表示する



!2重指数関数型数値積分(Double Exponential formula)
! ∫[0,∞]f(x)dx 半無限領域(0,∞)の積分
!
! x=EXP(PI*SINH(t))とすると、dx/dt=EXP(PI*SINH(t))*PI*COSH(t)
! 与式=PI*∫[-∞,∞]{f(EXP(PI*SINH(t)))*EXP(PI*SINH(t))*COSH(t)}dt

DEF g(x)=1/(1+x^6) !∫[0,∞]g(x)dx = PI/3

LET N=64 !分割数
LET h=1/8

LET s=0
FOR j=-N/2 TO N/2
   LET t=j*h
   LET x=EXP(PI*SINH(t))
   LET s=s + g(x)*x*COSH(t)
NEXT j
LET s=h*PI*s

PRINT s !結果を表示する

PRINT PI/3 !検算



!2重指数関数型数値積分(Double Exponential formula)
! ∫[-1,1]f(x)dx
!
! x=TANH(PI/2*SINH(t))とすると、dx/dt=PI/2*COSH(t)/COSH(PI/2*SINH(t))^2
! 与式=PI/2*∫[-∞,∞]{f(TANH(PI/2*SINH(t)))*COSH(t)/COSH(PI/2*SINH(t))^2}dt

DEF f2(x)=SQR(1-x^2)/(2-x) !∫[-1,1]f(x)dx = PI*(2-SQR(3))

LET N=64 !分割数
LET h=1/8

LET s=0
FOR j=-N/2 TO N/2
   LET t=j*h
   LET v=PI/2*SINH(t)
   LET s=s + f2(TANH(v))*COSH(t)/COSH(v)^2
NEXT j
LET s=h*PI/2*s

PRINT s !結果を表示する

PRINT PI*(2-SQR(3)) !検算


END
 

Re: 広義積分の計算のプログラム

 投稿者:GAI  投稿日:2009年11月26日(木)17時57分39秒
  > No.757[元記事へ]

山中和義さんへのお返事です。

2重指数関数型数値積分
というテクニックとても参考になります。
歴史を読んでいたら、伊理、森口、高澤によるIMT公式が発展の端緒であると書いてありました。
この中の森口(たぶん森口繁一氏のことか?)さんは、ずっと前にNHKコンピュータ講座をされていた方ではないかと思われますが、私が高校時代(もう30数年も前になりますが・・・)この番組をみてこの人の本質を的確に説明される話し方にとても魅力を抱いたことを思いだします。
よくもまあこんな置換構造を発見し、従来の方法では求めにくい積分値を計算機という道具を十二分に活用できる道筋を開くことができるものだと感心いたします。
まだまだ、われわれが知らない構造が隠れており、誰かがその秘密を暴くことで今までにないブレイクスルーの近道を提供できるのでしょうね。
つくづく研究者の知識と探究心の凄さに驚愕するばかりです。
 

戻る