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};"