在Approximate Molecular Orbital Theory by Pople John A., Beveridge David L. 的182页出现了BINTGS函数,这个函数只有一个作用就是计算积分
用与AINTGS一样的分部积分法
与之对应的递推程序是
static double []b=new double[17];
public static void BINTGS120( double ρ, int k, double []b ) throws IOException, ParseException {
double expx=Math.exp(ρ);
double expmx=1/expx;
b[0]=(expx-expmx)/ρ;
for(int i=1 ;i<k+1;i++) {
b[i+1-1]=( i*b[i-1] +Math.pow((-1) , i )*expx-expmx ) /ρ;
System.out.println( b[i+1-1] +" ** "+i );
}
}
验算
BINTGS120( 2, 3, b )= -1.2450533100532868
wolframalpha
Integrate[ x**3*exp(-2*x),{x,-1,1}]=
-1.245053310053286421652052233131526434740664367854223633997768300
但这个方法在ρ很小时有精度损失
BINTGS120( 0.6, 13, b )= -0.08471914601714074
Wolframalpha
Integrate[ x**13*exp(-0.6*x),{x,-1,1}]=
-0.084304036045748143556492453678859949065231785751955121973510012...
因此BINTGS120程序仅在ρ较大的时候适用。