
Sine integral (two routines)
#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

Forum

Support

Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More