function [V]=cnln()

% Risikoaversion gamma
gamma=1;

% Anzahl der maximalen Iterationen
maxi=40;

% beta: Diskontfaktor der zukuenftigen Nutzenwerte
beta=0.9;

% Raster der Aufteilbarkeit des Kuchens
% abgelegt als Zeilenvektor k mit gleichverteilten Werten von 0 bis 1 in Spalten
k=0:0.1:1;

% Erfassung der Dimensionen von k
% Zeilenanzahl zk, Spaltenanzahl sk
[zk, sk]=size(k);

% Initialisierung der Matrix V
V=zeros((sk-1),(maxi+1));


% Definition der Schleife
n=sk;

for it=1:maxi
it;
Vit=zeros((sk-1),(sk-1))+NaN;

for i=2:n
for j=1:(i-1)
% Iteration des Gesamtnutzens mit Variation des Kuchenrests k(j)
Vit((i-1),j)=log(k(i)-k(j))+beta*V(j,it);
end;
end;

% spaltenweise abgelegte Maximalwerte des Gesamtnutzens V der sukzessiven Iterationen
V(:,it+1)=max(Vit,[],2);

end;


% Umdimensionieren wegen Betrachtung von k ohne k=0
hv=k(2:n);


% [maximale Nutzenwerte und deren Spaltenindizes in der letzten Iterationsmatrix]
krest=k(2:n)';
[krest, Index]=max(Vit,[],2);


figure(1)
plot(hv,V);
title('iterative Annaeherung an den optimalen Nutzenwert', "fontsize", 18);
xlabel('noch vorhandene Einheiten', "fontsize", 18);
ylabel('Nutzenwert', "fontsize", 18);
print -mono -deps -FHelvetica:18 cakeln1.eps


% Herleitung des optimalen Konsums fuer die noch vorhandenen Einheiten
optc=hv'-k(Index)';

figure(2)
plot(hv,optc, "linewidth", 4, (0:1),(0:1), "linewidth", 4);
axis([-0.1 1.1 -0.1 1.1]);
grid("on");
title('optimaler Konsum bei endlicher Angebotsmenge', "fontsize", 18);
xlabel('noch vorhandene Einheiten', "fontsize", 18);
ylabel('Konsum', "fontsize", 18);
text(0,0.95,'Risikoaversion gamma=1.0','Fontsize',14);
text(0.7,0.67,'45 Gradlinie','Fontsize',14);
text(0.3,0.16,'optimaler Konsum bei gegebener Kuchengroesse','Fontsize',14);
print -mono -deps -FHelvetica:18 cakeln2.eps

end;

