function [x,t]=taylor(pw,pwt,pwx,x0,t0,h,n)
#otwarty Taylor rz dwa  dla dx/dt=pw(x,t) x(t0)=x0 dla
#t(k+1)=t0+k*h k<n z t0+n*h=T
#x(k) przybliza rozwiazanie dla t(k) k<n
#input:
#pw - uchwyt do funkcji postaci function y=pw(x,t) zwracajacej 
#     dla x wektora pionowego wym m i skalara t - wektor wymiaru m
#pwt - uchwyt do funkcji z pochodna po czasie pw - zwraca wektor wymiaru m
#pwt - uchwyt do funkcji z pochodna po przestrzeni  pw - zwraca macierz mxm
#x0 - wektor pionowy wymiaru m (warunek poczatkowy)
#t0 - czas poczatkowy
#h  - krok czasowy
#n -  ilosc obliczonych krokow
#Output:
#x - macierz m x n - w k-tym wierszu przyblizenie rozwiazania dla t(k)
#t- wektor dlugosci n - t(k)=t0+(k-1)h 
 m=length(x0); #wymiar w jakim jest rownanie
 t=zeros(n,1);
 x=zeros(n,m)';
 x(:,1)=x0;
 t(1)=t0;
 for k=2:n,
  ff=pw(x(:,k-1),t(k-1));
  x(:,k)= x(:,k-1)+h*ff;
  x(:,k)+=h*(0.5*h*(pwt(x(:,k-1),t(k-1)) + pwx(x(:,k-1),t(k-1))*ff));
  t(k)=t(k-1)+h;
 endfor
 x=x';
endfunction
