function [F] =integ(f,z,w,A)
%Integroi numeerisesti
%f kompleksifunktio
%D määrittelyalue
%z alkuarvopiste
%w alkuarvo

[N,M]=size(f);
s=1/N;
F=0*f;     %vastausfunktio
G=F;         %apufunktio
valmis=F;
lkm=F;

F(z(1),z(2))=w;
valmis(z(1),z(2))=1;
uusvalmis=valmis;
t=[1:8]';
dz=(1+(sqrt(2)-1)*(1-cos((t-1)*pi))/2).*exp((t-1)*pi*1i/4); %viivaelementti
S=[real(dz),imag(dz)];%siirtymä
testi=1;
while any(testi==1)
[n,m]=find(uusvalmis==1);
J=length(n);
for j=1:J
    pp=[n(j),m(j)];
    p=sub2ind(size(f),pp(1),pp(2));
    P=round(ones(8,1)*pp+S);
    idx=sub2ind(size(f),P(:,1),P(:,2));
    G(idx)=(ones(8,1)*f(p)+f(idx)).*dz*s/2+ones(8,1)*F(p).*A(idx).*(1-valmis(idx));
    lkm(idx)=lkm(idx)+1;
    uusvalmis(idx)=1;
end
lkm=max(1,lkm);
F=F+G*(1-valmis)./lkm;
valmis=min(1,valmis+uusvalmis);
uusvalmis(:,[1,end])=0;
uusvalmis([1,end],:)=0;
G=0*f;
mean(mean(valmis))
testi=round(A-valmis);
lkm=0*f;
end
end

