% == 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