Bill Allombert on Sun, 21 Oct 2018 22:20:01 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: References for Numerical Integration |
On Sun, Oct 21, 2018 at 08:35:04PM +0300, kevin lucas wrote: > PARI obviously has some very powerful tools for numerical integration. I > have, however, keenly felt the absence of a text treating this area in more > detail than the manual. > I was recently trying to compute > intnum(x=0,oo, (sin(x)^4)/(x)^2) > I only get about 3 digits (the integral evaluates to log(2)). Hello Kevin, Do you mean Pi/4 ? > There's probably a neat way to get more digits in this particular instance. The documentation ??intnum explain: <http://pari.math.u-bordeaux.fr/dochtml/html-stable/Sums__products__integrals_and_similar_functions.html#intnum> The last two codes are reserved for oscillating functions. Let k > 0 real, and g(x) a non-oscillating function tending slowly to 0 (e.g. like a negative power of x), then * alpha = k * I assumes that the function behaves like cos(kx)g(x). * alpha = -k* I assumes that the function behaves like sin(kx)g(x). Here it is critical to give the exact value of k. If the oscillating part is not a pure sine or cosine, one must expand it into a Fourier series, use the above codings, and sum the resulting contributions. Otherwise you will get nonsense. Note that cos(kx), and similarly sin(kx), means that very function, and not a translated version such as cos(kx+a). and later see 'Oscillating functions.' Here we have g(x)=1/x^2 and sin(x)^4 = (3-4*cos(2*x)+cos(4*x))/8 a formula you can find by doing ? lindep([sin(x)^4,1,cos(2*x),cos(4*x)]) %9 = [-8,3,-4,1]~ To avoid the division by 0, we split the integral at 1 and do: A=intnum(x=0,1,sin(x)^4/x^2); B=intnum(x=1,oo,1/x^2); C=intnum(x=1,[oo,2*I],cos(2*x)/x^2); D=intnum(x=1,[oo,4*I],cos(4*x)/x^2); A+(3*B-4*C+D)/8 %5 = 0.78539816339744830961566084581987572104 ? Pi/4 %6 = 0.78539816339744830961566084581987572105 Cheers, Bill