以下のJSLコードは台形則を使用しています。積分範囲("xmin"と"xmax")を入力する必要があります。積分したい関数を"pdf"という変数に入力します。台形則は積分範囲を複数の区間に分割し、各区間の曲線下の面積を台形の面積で近似します。では、いくつの区間を使用するのでしょうか?このコードは、1つの区間、次に2つの区間、というように、面積を近似します。増分差が"stop"より小さくなるまで、区間の数を増やし続けます。こうすることで、区間の数を指定する必要がなくなり、収束するまでコードが処理を続けます。
コード内の例は、-10から10までの標準正規分布です。コードはログウィンドウに結果(使用した区間の数と収束した解)を出力します。この例では、26区間を使用し、1.000000000000001に収束します。正規曲線の下の面積の合計は1です。かなり近い値だと思います。
中点ルールとシンプソンルールにもご興味があるかもしれません。詳しくはWikipediaをご覧ください。以下のコードは簡単に変更でき、これらのルールも利用できます。
データテーブルを使って数値積分を行うこともできます。積分範囲を網羅する行数が多いほど、近似値は高くなります。
コードは以下の通りです。
Clear Globals();
xmin=-10;
xmax=10;
stop=0.0000000000001;
pdf=function( {x} , 1/(sqrt(2*pi()))*exp(-x^2/2) );
intervals=1;
last=0;
new=0;
flag=0;
while(flag==0,
intervals=intervals+1;
increment=(xmax-xmin)/intervals;
total=0;
for(i=1, i<=intervals, i++,
if(i==1, x=xmin);
if(i>1, x=x+increment);
total=total + ((pdf(x)+pdf(x+increment))/2)*increment;
);
last=new;
new=total;
diff=abs(last-new);
if(diff<=stop, flag=1);
);
show(intervals);
show(total);