function [y,t]=rungekuttaImplicit(f,ta,ya,te,N,M) 
 h=(te-ta)/N;
 h6=h/6;
 t = ta:h:te; % Gitter anlegen
 y=zeros(length(ya),N+1);
 y(:,1) = ya; % Startwert schreiben

 for i=1:N % durchlaufe Gitterpunkte
    %setze Startwerte fuer Iterationsverfahren
    k1=zeros(length(ya),1);
    k2=zeros(length(ya),1);
    %starte Iterationsverfahren
    for j=1:M
      k1alt=k1;  % alte Werte merken fuer Iteration
      k2alt=k2;
      k1=f(t(i),y(:,i)+h6*(k1alt-k2alt));
      k2=f(t(i)+h/2,y(:,i)+h6*(k1alt+2*k2alt));
    end
    k3=f(t(i)+h,y(:,i)+h6*(k1+5*k2));
    y(:,i+1)=y(:,i)+h6*(k1+4*k2+k3);
 end
end 