% == SVD case ==
% laat commentaar zien
echo on
% pauzeer, om plaatjes weer te kunnen geven
setpause = 1;

% zie approx.m

% 1) Voorbeeld 1
[X, Y] = meshgrid(-5:1:5);
A = (Y .* X.^2 - X.^2 - Y.^2 + 175);
mesh(A);
if ( setpause ); pause; end
close all hidden

% of als grijswaarde
colormap(gray(256));
image(A);
if ( setpause ); pause; end
close all hidden

% berekenen van SVD met 2 benaderingen van A, die de grootste en twee
% grooste eigenwaardes meenemen

[U, S, V] = svd(A);

A1 = approx(A,1);
mesh(A1);
if ( setpause ); pause; end
close all hidden

A2 = approx(A,2);
mesh(A2);
if ( setpause ); pause; end
close all hidden

% Verschillen tussen A en A1, A2
B1 = A - A1;
B2 = A - A2;

mesh(B1);
if ( setpause ); pause; end
close all hidden

mesh(B2);
if ( setpause ); pause; end
close all hidden

% zie foutperc.m
% fout tussen A en A1
fout = foutperc(A,A1)
% fout tussen A en A2
fout = foutperc(A,A2)

% 2)
% plaatje opgeslagen in meisje.jpg (http://nies.liacs.nl:1860) (rechter
% plaatje)

A = imread('meisje.jpg', 'jpg');
image(A);
colormap(gray(256));
if ( setpause ); pause; end
close all hidden

% naar floats om te kunnen berekenen
A = double(A);

for i=0:8
    k = 2 ^ i;
    T = approx(A,k);
    fout = foutperc(A,T);
    image(T);
    colormap(gray(256));
    title( sprintf('K waarden %d - fout %.3f%%', k, fout) );
    if ( setpause ); pause; end
    close all hidden
end

% fout percentage tabel
% zoek de waardes 10,5,3,1 percent
% dit is pittig zwaar, en duurt enkele minuten om uit te voeren
for i=1:256
    fouttabel(i,1) = i-1;
    T = approx(A, (i-1));
    fout = foutperc(A,T);
    fouttabel(i,2) = fout;
    if (fout < 1)
        break;
    end
    [i, fout]
end
% 
% fouttabel

% zie spaceperc.m
% let op het percentage matrixposities nodig om een mxn matrix met k
% eigenwaarden te benaderen. Je moet het percentage nog wel
% vermenigvuldigen met het verschil in datatype per matrix element.

for i=1:256
    ruimtetabel(i,1) = i-1;
    spacesave = spaceperc(A,i);
    ruimtetabel(i,2) = spacesave;
    [i, spacesave]
end

ruimtetabel

plot(ruimtetabel(:,1), ruimtetabel(:,2),'.')
grid on
title( 'k waarde, percent matrix ruimte');
% Dit is netjes linear
if ( setpause ); pause; end
close all hidden

% 3)
load spine;
image(X);
% mooie colormap, zie ook de handleiding
colormap(bone);
if ( setpause ); pause; end
close all hidden

A = double(X);
% door de bovenstaande molen te halen levert op dat
% fouttabel
% 10% = 9
%  5% = 20
%  1% = 92

% mooie manier om de fout en ruimte percentages weer te geven
hold on
plot(fouttabel(:,1), fouttabel(:,2),'r.')
plot(ruimtetabel(:,1), ruimtetabel(:,2),'g.')
legend('show')
legend('fout','ruimte')
xlabel('k waarde')
ylabel('percent')
hold off
grid on
axis([0,50,0,40])
title( 'Plaatje analyse');
if ( setpause ); pause; end
close all hidden

