下面的 JSL 代码使用了梯形法则。您必须输入积分范围(“xmin”和“xmax”)。将要积分的函数输入到名为“pdf”的变量中。梯形法则将积分范围划分为多个区间,并用梯形面积近似每个区间的曲线下面积。但是,您需要使用多少个区间呢?代码首先使用 1 个区间来近似面积,然后使用 2 个区间,依此类推。它会不断增加区间数,直到增量差小于“stop”为止。这样,您无需指定区间数,代码就会一直运行,直到收敛。
代码中的示例是 -10 到 10 之间的标准正态分布。代码将结果输出到日志窗口:它使用的区间数以及收敛到的答案。在这个例子中,它使用了 26 个区间,收敛到 1.00000000000001。正态曲线下的总面积为 1。我认为非常接近。
您可能还会对中点规则和辛普森规则感兴趣。详情请参阅维基百科。以下代码可以轻松修改以使用其他规则。
您还可以使用数据表进行数值积分。用于跨越积分范围的行数越多,近似值就越好。
代码如下:
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);