That's the kind of tricks I was looking for.

Putting it in pseudo-code form in the case of integrating from A to infinity:

Given f(x), A, SmallValue, RelTolerance, and DiffTolerance

InfVal=10^6

IntegralVal1 = Integral of f(x) from A to InfVal

Do

InfVal = 10 * InfVal

IntegralVal2 = Integral of f(x) from A to InfVal

if |IntegralVa2| < SmallValue then

RelativeErr = 0

DiffErr = IntegralVa2 - IntegralVal1

else

RelativeErr = (IntegralVal2 - IntegralVal1) / IntegralVal1

DiffErr = 0

end

IntegralVal1 = IntegralVal2

Until |RelativeErr| < RelTolerance OR |DiffErr| < DiffTolerance

Integral = IntegralVal1

Here is a perhaps more efficient version that uses integration by parts:

Given f(x), A, SmallValue, RelTolerance, and DiffTolerance

B = 10^6 // or any other different high value (10^3, 10^4, 10^5, 10^6, 10^7, etc

IntegralVal0 = Integral of f(x) from A to B // should calculate most of the final answer

InfVal= 10 * B

IntegralVal1 = Integral of f(x) from B to InfVal

Do

InfVal = 10 * InfVal

IntegralVal2 = Integral of f(x) from A to InfVal

if |IntegralVa2| < SmallValue then

RelativeErr = 0

DiffErr = IntegralVa2 - IntegralVal1

else

RelativeErr = (IntegralVal2 - IntegralVal1) / IntegralVal1

DiffErr = 0

end

IntegralVal1 = IntegralVal2

Until |RelativeErr| < RelTolerance OR |DiffErr| < DiffTolerance

Integral = IntegralVal0 + IntegralVal1

*Edited: 11 Nov 2011, 5:47 a.m. *