綾小路龍之介の素人思考

[数値計算] 数値積分(ガウス積分)

use Math::Trig;
$a     = 1;
$x_max = 5;
$x_min = 0;
$I_r=(1*2**-1)*sqrt(pi()*$a**-1);
$f[$x] = exp(-$a*$x**2);
$x_div = 20000000;  #精度向上因子
$i_max = ($x_max-$x_min)*$x_div;
for($i = 0 ; $i < $i_max ; $i++ ){
  $dx    = 1/$x_div;
  $x     = $i*$dx;
  $y     = exp(-$a*$x**2);
  $I    += $y*$dx;
  $dI    = $I_r-$I;
  last if($dI<=0);
  print "$x\t$y\t$I\t$dI\n" if ($i%($i_max/10)==0);
 # sleep(1);
}
print "$x\t$y\t$I\t$dI\n";
print "$I_r\n" ;
exit;
C:\>perl gaus.pl
0       1       5e-008  0.886226875452758
0.5     0.778800783071405       0.461281050882873       0.424945874569885
1       0.367879441171442       0.74682416700966        0.139402758443098
1.5     0.105399224561864       0.856188421260223       0.0300385041925354
2       0.0183156388887342      0.882081416220737       0.00414550923202095
2.5     0.00193045413622771     0.885866298666317       0.000360626786440998
3       0.00012340980408668     0.886207373263146       1.95521896119155e-005
3.5     4.78511739212901e-006   0.88622629189962        6.33553137507903e-007
3.92599695      2.02312551357165e-007   0.886226925452761       -3.10862446895044e-015
0.886226925452758
C:\>
C:\WINDOWS\デスクトップ>perl gauss.pl
5e-008  0.886226875452758
0.0500000500009228      0.836226875451835
0.100000050002361       0.786226875450397
0.150000050003798       0.73622687544896
0.200000050005236       0.686226875447522
0.250000050006674       0.636226875446084
0.300000049980356       0.586226875472402
0.350000049954038       0.53622687549872
0.400000049927721       0.486226875525037
0.450000049901403       0.436226875551355
0.500000049875085       0.386226875577673
0.550000049904278       0.33622687554848
0.600000049933472       0.286226875519286
0.650000049962665       0.236226875490093
0.700000049991858       0.1862268754609
0.750000050021052       0.136226875431706
0.800000050050245       0.0862268754025128
0.850000050079438       0.0362268753733195
0.8862269       1       0.88622695010059        -2.46478322196708e-008
0.886226925452758
C:\WINDOWS\デスクトップ>
C:\WINDOWS\デスクトップ>perl -le "$a=1; $x=1; for(0..10){ $x=$_; $y += exp(-$a*$x**2); print$y};"

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-11-12T07:19:39+09:00
  2. Modified: 2007-11-12T04:42:25+09:00
  3. Generated: 2017-09-26T23:09:18+09:00