# test_trig_series.py3 power series for a few functions # just a few of the many possible series and equivalent expressions # sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... reduce 0 <= x <= 2pi # cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! ... reduce -pi <= x <= pi # tan(x) = sin(x)/cos(x) # csc(x) = 1/sin(x) cosecant # sec(x) = 1/cos(x) secant # cot(x) = 1/tan(x) cotangent # sinh(x) = (e^x - e^-x)/2 = x + x^3/3! + x^5/5! + x^7/7! ... # cosh(x) = (e^x + e^-x)/2 = 1 + x^2/2! + x^4/4! + x^6/6! ... # asin(x) = x + x^3/6 + 3*x^5/40 + 15*x^7/336 ... # acos(x) = pi/2 - (x + x^3/6 + 3*x^4/40 + 15*x^7/336 ...) # atan(x) = x - x^3/3 + x^5/5 - x^7/7 + x^9/9 ... # pi = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 ...) # tanh(x) = sinh(x)/cosh(x) # exp(x) = 1 + x + x^2/2! + x^3/3! + x4/4! ... # e = 1 + 1 + 1/2! + 1/3! + 1/4! ... # log(x) = (x-1)/x + ((x-1)/x))^2/2 + ((x-1/x))^3/3 ... import math def fac(n) : fct = 1 for i in range(2,n+1) : fct = fct * i # end i return float(fct) # end fac def pwr(x,n) : pwr = 1.0 for i in range(n) : pwr = pwr * x # end i return pwr # end pwr print("test_trig_series.py3 running") x = 0.5 # sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... reduce 0 <= x <= 2pi sinx = x - pwr(x,3)/fac(3) + pwr(x,5)/fac(5) - pwr(x,7)/fac(7) + pwr(x,9)/fac(9) print("sin(0.5)=",math.sin(0.5)," ser=",sinx) print(" ") # cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! ... reduce -pi <= x <= pi cosx = 1.0 - pwr(x,2)/fac(2) + pwr(x,4)/fac(4) - pwr(x,6)/fac(6) + pwr(x,8)/fac(8) print("cos(0.5)=",math.cos(0.5)," ser=",cosx) print(" ") # tan(x) = sin(x)/cos(x) tanx = sinx/cosx print("tan(0.5)=",math.tan(0.5)," ser=",tanx) print(" ") # sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + x^9/9! ... reduce 0 <= x <= 2pi sinhx = x + pwr(x,3)/fac(3) + pwr(x,5)/fac(5) + pwr(x,7)/fac(7) + pwr(x,9)/fac(9) print("sinh(0.5)=",math.sinh(0.5)," ser=",sinhx) print(" ") # cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! ... coshx = 1.0 + pwr(x,2)/fac(2) + pwr(x,4)/fac(4) + pwr(x,6)/fac(6) + pwr(x,8)/fac(8) print("cosh(0.5)=",math.cosh(0.5)," ser=",coshx) print(" ") # asin(x) = x + x^3/6 + 3*x^5/40 + 15*x^7/336 ... asinx = x + pwr(x,3)/6.0 + 3.0*pwr(x,5)/40.0 + 15.0*pwr(x,7)/336.0 print("asin(0.5)=",math.asin(0.5)," ser=",asinx) print(" ") # acos(x) = pi/2 - (x + x^3/6 + 3*x^5/40 + 15*x^7/336 ...) acosx = math.pi/2.0 - (x + pwr(x,3)/6.0 + 3.0*pwr(x,5)/40.0 + 15.0*pwr(x,7)/336.0) print("acos(0.5)=",math.acos(0.5)," ser=",acosx) print(" ") # atan(x) = x - x^3/3 + x^5/5 - x^7/7 + x^9/9 ... atanx = x - pwr(x,3)/3.0 + pwr(x,5)/5.0 - pwr(x,7)/7.0 + pwr(x,9)/9.0 print("atan(0.5)=",math.atan(0.5)," ser=",atanx) print(" ") # pi = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 ...) # at least 51 pi4ser = 1.0 - 1.0/3.0 + 1.0/5.0 - 1.0/7.0 + 1.0/9.0 - 1.0/11.0 + 1.0/13.0 - 1.0/15.0 + 1.0/17.0 - 1.0/19.0 + 1.0/21.0 - 1.0/23.0 + 1.0/25.0 - 1.0/27.0 + 1.0/29.0 - 1.0/31.0 + 1.0/33.0 - 1.0/35.0 + 1.0/37.0 - 1.0/39.0 + 1.0/41.0 - 1.0/43.0 + 1.0/45.0 - 1.0/47.0 + 1.0/49.0 - 1.0/51.0 + 1.0/53.0 - 1.0/55.0 piser = 4.0 * pi4ser print("math.pi/4=",(math.pi/4.0)," ser=",pi4ser) print(" ") print("math.pi=",(math.pi)," ser=",piser) print(" ") # tanh(x) = sinh(x)/cosh(x) tanhx = sinhx/coshx print("math.tanh(x)=",math.tanh(x)," ser=",tanhx) print(" ") # exp(x) = 1 + x + x^2/2! + x^3/3! + x^4/4! + x^5/5! ... expx = 1.0 + x + pwr(x,2)/fac(2) + pwr(x,3)/fac(3) + pwr(x,4)/fac(4) + pwr(x,5)/fac(5) print("math.exp(0.5)=",math.exp(0.5)," ser=",expx) print(" ") # e = 1 + 1 + 1/2! + 1/3! + 1/4! * 1/5! ... eser = 1.0 + 1.0 + 1.0/fac(2) + 1.0/fac(3) + 1.0/fac(4) + 1.0/fac(5) print("math.e=",math.e," ser=",eser) print(" ") # log(x) = (x-1)/x + ((x-1)/x))^2/2 + ((x-1/x))^3/3 + ((x-1/x))^4/4 ... xt = (x-1)/x logx = xt + pwr(xt,2)/2.0 + pwr(xt,3)/3.0 + pwr(xt,4)/4.0 print("math.log(0.5)=",math.log(0.5)," ser=",logx) print(" ") print("test_trig_series.py3 finished")