![](/profiles/wavemetrics/themes/wavemetrics/logo.png)
Sine integral (two routines)
![](/sites/default/files/styles/thumbnail/public/images-imported/picture-57.jpg?itok=ZgHSB5cP)
cdejoseph
#pragma rtGlobals=1 // Use modern global access method. // Calculate the sine integral based on formulas from Abramowitz and Stegun. // See equations 5.2.14 and 5.2.38 and 5.2.39. Si(x)=Integral from 0 to x of sin(x')/x'. // Peak relative error is approximately 5e-7. This routine is approximately 10x faster // than the higher precision routine below. // Tested using IgorPro 6.02 in a Windows XP box. // Version 11-30-07-01 C. DeJoseph, Jr. function Si(xin) variable xin variable x2,ff,gg,c8,c9,tt,t,i variable p2=1.57079632679489 variable term1,term2 x2=xin*xin if(x2>=3.8) term1=38.102495+x2*(335.677320+x2*(265.187033+x2*(38.027264+x2))) term2=xin*(157.105423+x2*(570.236280+x2*(322.624911+x2*(40.021433+x2)))) ff=term1/term2 term1=21.821899+x2*(352.018498+x2*(302.757865+x2*(42.242855+x2))) term2=x2*(449.690326+x2*(1114.978885+x2*(482.485984+x2*(48.196927+x2)))) gg=term1/term2 return p2*sign(xin)-ff*cos(xin)-gg*sin(xin) else c8=1. c9=1. tt=xin t=0 i=1 do t=t+tt/(c8*c9) tt=-tt*x2 c8=2.*i+1. c9=c9*c8*2.*i i+=1 while(i<7) return t endif end // High precision version of the sine integral based on direct numerical integration // of the sinc function. Si(x)=Integral from 0 to x of sin(x')/x'. The integration uses // gaussian quadrature. Peak relative error is approximately 2e-15 and speed is // about 10% of the lower precision routine above. // Tested using IgorPro 6.02 in a Windows XP box. // Version 11-30-07-01 C. DeJoseph, Jr. function Si_hp(xin) variable xin return integrate1D(specialsinc, 0., xin,2) end function specialsinc(xin) variable xin return sinc(xin) end
![](/sites/default/files/forum.png)
Forum
![](/sites/default/files/support.png)
Support
![](/sites/default/files/gallery.png)
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More