from pylab import *
from numpy import *
L=2.
c=empty(10)
def Fourier(f,a,b,N,n):  #funkcia pocita nty Forierov koeficient funkcie f na intervale a,b
						#rozdelenim intervalu na N kuskov
	delta=(b-a)/N		#sirka jedneho obdlznicka
	s=0.
	for i in range(N):
		x=a+i*delta;
		s=s+(2./L)*f(x)*sin(n*pi*x/L)*delta   #prispevok k integralu od jednho obdlznicka
	return (s)	
def fun(x):  #unkcia, ktorej fourie rozvoj sa hlada
	return x*x*(L-x)		
for i in range(10):   # tu sa vypocita prvych 10 Forie koeficientov
	c[i]=Fourier(fun,0.,L,10000,i+1)
	print c[i]
xx=empty(1000)    #1000 bodov nezavisle premennej pre kreslanie grafov
orig=empty(1000)    #1000 hodnot originalnej funkcie, ktorerj Foure obraz sa hlada pre kreslenia grafu
fou=empty(1000)		#1000 hodnot pribliznehop furierovho obrazu pre kreslenie grafu
for i in range(1000):
	xx[i]=i*L/1000.    # postupne v cykle hodnoty nezavisle premennej
	orig[i]=fun(xx[i])  # vypocet hodnot originalnej fukcie pre kreslenie grafu
	s=0.
	for j in range(3):     #pre pribklizny Fourie obraz sa pouziju len tri fourierove koeficienty
		s=s+c[j]*sin((j+1)*pi*xx[i]/L)  #pozor, Python cisloue polia od nuly, ale prvy koeficient ma vo vzorci 1
	fou[i]=s
plot(xx,orig)		#nakresli originalnu funkcie	
plot(xx,fou)		#Nakresli priblicny Fourerov obraz
show()
	
