Skip to content
Snippets Groups Projects
adaptivKvadratur.py 1.05 KiB
Newer Older
import cmath

# sinus
def integrate(a, b, omega, n, epsilon):
    m = (a+b)/2
    h = b-a
    # e^(-i*t*n*omega) faktorerna
    ae = cmath.exp(-a*omega*n*1j)
    me = cmath.exp(-m*omega*n*1j)
    be = cmath.exp(-b*omega*n*1j)
    aeh4 = cmath.exp(-(a+h/4)*omega*n*1j)
    beh4 = cmath.exp(-(b-h/4)*omega*n*1j)
    I1 = h/3*(cmath.sin(a)*ae+4*cmath.sin(m)*me+cmath.sin(b)*be)
    I2 = h/6*(cmath.sin(a)*ae+4*cmath.sin(a+h/4)*aeh4+2*cmath.sin(m)*me+4*cmath.sin(b-h/4)*beh4+cmath.sin(b)*be)
    I3 = I2+(I2-I1)/15
    if abs((I3-I2)/I2) > epsilon:
        I1 = integrate(a, m, omega, n, epsilon/2)
        I2 = integrate(m, b, omega, n, epsilon/2)
        I3 = I1 + I2
        pass
    return I3

filename = 'sinusKoefficenter'
# välj antal datapunkter
numDataPoints = 20;
# välj period
T = 2*cmath.pi
# väl undre och övre integration
a = 0
b = T + a
# välj tolerans och omega
epsilon = 0.1
omega = 2*cmath.pi/T

file=open(filename,'w')

for i in range(numDataPoints):
    file.write(str(i)+';'+str(integrate(a, b, omega, i, epsilon))+'\n')
    pass
file.close()
print('done')