function [a0,a,b,t,z,f,s,F] =ammufourier(P,N)
%Tekee pistejoukosta murtoviivafunktion z(t) ja etsii tälle Fourier-kertoimet ja
%Fourier-sarjan f(x), sekä Fourier-sarjan osasummat s
%
%Kutsu funktiota vaikkapa komennolla
%
%[a0,a,b,x,y,f,s,F] =ammufourier(5,20);
%
%Videon suppenemisesta (katso 5 kertaa, 1 kuva sekunnissa) voit katsoa vaikkapa komennolla
%
%figure('units','normalized','outerposition',[0 0 1 1])
%movie(F,5,1)

figure, hold on
axis([-pi,pi,-1,1])
P=5;
eval(['title(''Ammu ' num2str(P) ' pistettä'')']);
for k=1:P
g(k,:)=ginput(1);
plot(g(k,1),g(k,2),'k*')
end

x=g(:,1);y=g(:,2);
[x,j]=sort(x);y=y(j);
[x,j,~] = unique(x);y=y(j);
x=[-pi,x',pi]';ka=(y(1)+y(end))/2; y=[ka,y',ka]';
t=linspace(-pi,pi,1000);
z=interp1(x,y,t);

a0=2*mean(z);
for k=1:N
a(k)=2*mean(z.*cos(k*t));
b(k)=2*mean(z.*sin(k*t));
end

figure, hold on
plot(1:N,a)
plot(1:N,b,'r')
title('Fourier-kertoimet')
legend('a_k','b_k')
xlabel('k')

for k=1:N
Sin(k,:)=sin(k*t);
Cos(k,:)=cos(k*t);
end
f=mean(z)+a*Cos+b*Sin;
error=f-z;
figure, hold on
plot(t,z,'k')
plot(t,f)
plot(t,error,'r:')
legend('murtoviiva','sarja','virhe')
plot(g(:,1),g(:,2),'k*')
figure('units','normalized','outerposition',[0 0 1 1])

for k=1:N
s(k,:)=mean(z)+a(1:k)*Cos(1:k,:)+b(1:k)*Sin(1:k,:);
hold on
plot(t,z,'k')
plot(t,s(k,:));
F(k)=getframe;
clf
end
close
end

