k=20; N=150; x_steps=N; u_steps=N; x_max=25; u_max=7;
x=0:(x_max/x_steps):x_max; u=0:(u_max/u_steps):u_max;
V=zeros(k+1,x_steps+1); v=zeros(k+1,x_steps+1);
vopt=zeros(k+1,1);
%výpoeet hodnotovej funkcie a optimálnej spätnej vazby
V(:,:)=-inf;
V(k+1,1)=0; %prípustné je len x_k=0
for i=k:-1:1
 for j=1:(x_steps+1)
  for m=1:(u_steps+1)
    F=1.2*x(j)-u(m);
    if (F>=0) & (F<=x_max)
      F=round(F*x_steps/x_max)+1;
     if log(u(m))+V(i+1,F)>V(i,j)
% log() je prirodzený logaritmus
     V(i,j)=log(u(m))+V(i+1,F);
     v(i,j)=m;
     end
    end
  end
 end
end
%výpoeet optimálneho riadenia
j=round(3*(x_steps/x_max))+1; xopt(1)=x(j); for i=1:k
vopt(i)=u(v(i,j));
F=1.2*x(j)-u(v(i,j));
xopt(i+1)=F;
j=round(F*x_steps/x_max)+1;
end
plot(xopt)