# 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 ...) # 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 expser(x,n) : # n terms to x^n / n! # print("expser(",x,",",n,") running") sum = 1.0 + x # 0,1 i # print("sum=",sum) for i in range(2,n+1) : # print("i=",i) nfac = factorial(i) # print("nfac=",nfac) npwr = power(x,i) # print("npwr=",npwr) sum = sum + npwr/nfac # end i # print("expcer sum=",sum) # print(" ") return sum # end expser def sinser(x,n) : # n terms to (-1)^n * x^(2n+1) / (2n+1)! # print("sinser(",x,",",n,") running") sum = 0.0 sgn = 1.0 for i in range(n) : j = 2*i+1 # print("sincer i=",i," j=",j) nfac = factorial(j) # print("nfac=",nfac) npwr = power(x,j) # print("npwr=",npwr) sum = sum + sgn*npwr/nfac sgn = -sgn # print("sincer sum=",sum) # end i # print("sincer sum=",sum) # print(" ") return sum # end sinser def cosser(x,n) : # n terms to (-1)^(n+1) * x^(2n) / (2n)! # print("cosser(",x,",",n,") running") sum = 0.0 sgn = 1.0 for i in range(n) : j = 2*i # print("cosser i=",i," j=",j) nfac = factorial(j) # print("nfac=",nfac) npwr = power(x,j) # print("npwr=",npwr) sum = sum + sgn*npwr/nfac sgn = -sgn # print("coscer sum=",sum) # end i # print("coscer sum=",sum) # print(" ") return sum # end cosser def sinhser(x,n) : # n terms to x^(2n+1) / (2n+1)! # print("sinhser(",x,",",n,") running") sum = 0.0 for i in range(n) : j = 2*i+1 # print("j=",j) nfac = factorial(j) # print("nfac=",nfac) npwr = power(x,j) # print("npwr=",npwr) sum = sum + npwr/nfac # print("sinhcer sum=",sum) # end i # print("sinhcer sum=",sum) # print(" ") return sum # end sinhser def coshser(x,n) : # n terms to x^(2n) / (2n)! # print("coshser(",x,",",n,") running") sum = 0.0 for i in range(n) : j = 2*i # print("j=",j) nfac = factorial(j) # print("nfac=",nfac) npwr = power(x,j) # print("npwr=",npwr) sum = sum + npwr/nfac # print("coshcer sum=",sum) # end i # print("coshcer sum=",sum) # print(" ") return sum # end coshser def logser(x,n) : # n terms to (-1)^n * y^n / n! # print("logser(",x,",",n,") running") sum = 0.0 sgn = 1.0 y = x-1.0 for i in range(1,n) : # print("i=",i," sgn=",sgn) nfac = factorial(i) # print("nfac=",nfac) npwr = power(y,i) # print("npwr=",npwr) sum = sum + sgn*npwr/nfac sgn = -sgn # print("logcer sum=",sum) # end i # print("logcer sum=",sum) # print(" ") return sum # end logser def logp1ser(x,n) : # n terms to (-1)^n * y^n / n! # print("logp1ser(",x,",",n,") running") sum = 0.0 sgn = 1.0 for i in range(1,n) : # print("i=",i," sgn=",sgn) nfac = factorial(i) # print("nfac=",nfac) npwr = power(x,i) # print("npwr=",npwr) sum = sum + sgn*npwr/nfac sgn = -sgn # print("logp1cer sum=",sum) # end i # print("logp1cer sum=",sum) # print(" ") return sum # end logp1ser def factorial(n) : fct = 1 for i in range(2,n+1) : fct = fct * i # end i return float(fct) # end factorial def power(x,n) : pwr = 1.0 for i in range(n) : pwr = pwr * x # end i return pwr # end power print("trig_series.py3 running") x = 2.0 n = 10 expv = expser(x,n) print("expser(",x,",",n,")=",expv) expa = math.exp(x) print("math.exp(",x,")=",expa) print("expser error=",abs(expv-expa)) print(" ") sinv = sinser(x,n) print("sinser(",x,",",n,")=",sinv) sina = math.sin(x) print("math.sin(",x,")=",sina) print("sinser error=",abs(sinv-sina)) print(" ") cosv = cosser(x,n) print("cosser(",x,",",n,")=",cosv) cosa = math.cos(x) print("math.cos(",x,")=",cosa) print("cosser error=",abs(cosv-cosa)) print(" ") sinhv = sinhser(x,n) print("sinhser(",x,",",n,")=",sinhv) sinha = math.sinh(x) print("math.sinh(",x,")=",sinha) print("sinhser error=",abs(sinhv-sinha)) print(" ") coshv = coshser(x,n) print("coshser(",x,",",n,")=",coshv) cosha = math.cosh(x) print("math.cosh(",x,")=",cosha) print("coshser error=",abs(coshv-cosha)) print(" ") logv = logser(x,n) print("logser(",x,",",n,")=",logv) loga = math.log(x) print("math.log(",x,")=",loga) print("logser error=",abs(logv-loga)) print(" ") x = 1.0 logp1v = logp1ser(x,n) print("logp1ser(",x,",",n,")=",logp1v) logp1a = math.log(x+1.0) print("math.log(",x,"+1)=",logp1a) print("logp1ser error=",abs(logp1v-logp1a)) print(" ") print("trig_series.py3 finished")