| 1 | % == SVD case ==
|
---|
| 2 | % laat commentaar zien
|
---|
| 3 | echo on
|
---|
| 4 | % pauzeer, om plaatjes weer te kunnen geven
|
---|
| 5 | setpause = 1;
|
---|
| 6 |
|
---|
| 7 | % zie approx.m
|
---|
| 8 |
|
---|
| 9 | % 1) Voorbeeld 1
|
---|
| 10 | [X, Y] = meshgrid(-5:1:5);
|
---|
| 11 | A = (Y .* X.^2 - X.^2 - Y.^2 + 175);
|
---|
| 12 | mesh(A);
|
---|
| 13 | if ( setpause ); pause; end
|
---|
| 14 | close all hidden
|
---|
| 15 |
|
---|
| 16 | % of als grijswaarde
|
---|
| 17 | colormap(gray(256));
|
---|
| 18 | image(A);
|
---|
| 19 | if ( setpause ); pause; end
|
---|
| 20 | close all hidden
|
---|
| 21 |
|
---|
| 22 | % berekenen van SVD met 2 benaderingen van A, die de grootste en twee
|
---|
| 23 | % grooste eigenwaardes meenemen
|
---|
| 24 |
|
---|
| 25 | [U, S, V] = svd(A);
|
---|
| 26 |
|
---|
| 27 | A1 = approx(A,1);
|
---|
| 28 | mesh(A1);
|
---|
| 29 | if ( setpause ); pause; end
|
---|
| 30 | close all hidden
|
---|
| 31 |
|
---|
| 32 | A2 = approx(A,2);
|
---|
| 33 | mesh(A2);
|
---|
| 34 | if ( setpause ); pause; end
|
---|
| 35 | close all hidden
|
---|
| 36 |
|
---|
| 37 | % Verschillen tussen A en A1, A2
|
---|
| 38 | B1 = A - A1;
|
---|
| 39 | B2 = A - A2;
|
---|
| 40 |
|
---|
| 41 | mesh(B1);
|
---|
| 42 | if ( setpause ); pause; end
|
---|
| 43 | close all hidden
|
---|
| 44 |
|
---|
| 45 | mesh(B2);
|
---|
| 46 | if ( setpause ); pause; end
|
---|
| 47 | close all hidden
|
---|
| 48 |
|
---|
| 49 | % zie foutperc.m
|
---|
| 50 | % fout tussen A en A1
|
---|
| 51 | fout = foutperc(A,A1)
|
---|
| 52 | % fout tussen A en A2
|
---|
| 53 | fout = foutperc(A,A2)
|
---|
| 54 |
|
---|
| 55 | % 2)
|
---|
| 56 | % plaatje opgeslagen in meisje.jpg (http://nies.liacs.nl:1860) (rechter
|
---|
| 57 | % plaatje)
|
---|
| 58 |
|
---|
| 59 | A = imread('meisje.jpg', 'jpg');
|
---|
| 60 | image(A);
|
---|
| 61 | colormap(gray(256));
|
---|
| 62 | if ( setpause ); pause; end
|
---|
| 63 | close all hidden
|
---|
| 64 |
|
---|
| 65 | % naar floats om te kunnen berekenen
|
---|
| 66 | A = double(A);
|
---|
| 67 |
|
---|
| 68 | for i=0:8
|
---|
| 69 | k = 2 ^ i;
|
---|
| 70 | T = approx(A,k);
|
---|
| 71 | fout = foutperc(A,T);
|
---|
| 72 | image(T);
|
---|
| 73 | colormap(gray(256));
|
---|
| 74 | title( sprintf('K waarden %d - fout %.3f%%', k, fout) );
|
---|
| 75 | if ( setpause ); pause; end
|
---|
| 76 | close all hidden
|
---|
| 77 | end
|
---|
| 78 |
|
---|
| 79 | % fout percentage tabel
|
---|
| 80 | % zoek de waardes 10,5,3,1 percent
|
---|
| 81 | % dit is pittig zwaar, en duurt enkele minuten om uit te voeren
|
---|
| 82 | for i=1:256
|
---|
| 83 | fouttabel(i,1) = i-1;
|
---|
| 84 | T = approx(A, (i-1));
|
---|
| 85 | fout = foutperc(A,T);
|
---|
| 86 | fouttabel(i,2) = fout;
|
---|
| 87 | if (fout < 1)
|
---|
| 88 | break;
|
---|
| 89 | end
|
---|
| 90 | [i, fout]
|
---|
| 91 | end
|
---|
| 92 | %
|
---|
| 93 | % fouttabel
|
---|
| 94 |
|
---|
| 95 | % zie spaceperc.m
|
---|
| 96 | % let op het percentage matrixposities nodig om een mxn matrix met k
|
---|
| 97 | % eigenwaarden te benaderen. Je moet het percentage nog wel
|
---|
| 98 | % vermenigvuldigen met het verschil in datatype per matrix element.
|
---|
| 99 |
|
---|
| 100 | for i=1:256
|
---|
| 101 | ruimtetabel(i,1) = i-1;
|
---|
| 102 | spacesave = spaceperc(A,i);
|
---|
| 103 | ruimtetabel(i,2) = spacesave;
|
---|
| 104 | [i, spacesave]
|
---|
| 105 | end
|
---|
| 106 |
|
---|
| 107 | ruimtetabel
|
---|
| 108 |
|
---|
| 109 | plot(ruimtetabel(:,1), ruimtetabel(:,2),'.')
|
---|
| 110 | grid on
|
---|
| 111 | title( 'k waarde, percent matrix ruimte');
|
---|
| 112 | % Dit is netjes linear
|
---|
| 113 | if ( setpause ); pause; end
|
---|
| 114 | close all hidden
|
---|
| 115 |
|
---|
| 116 | % 3)
|
---|
| 117 | load spine;
|
---|
| 118 | image(X);
|
---|
| 119 | % mooie colormap, zie ook de handleiding
|
---|
| 120 | colormap(bone);
|
---|
| 121 | if ( setpause ); pause; end
|
---|
| 122 | close all hidden
|
---|
| 123 |
|
---|
| 124 | A = double(X);
|
---|
| 125 | % door de bovenstaande molen te halen levert op dat
|
---|
| 126 | % fouttabel
|
---|
| 127 | % 10% = 9
|
---|
| 128 | % 5% = 20
|
---|
| 129 | % 1% = 92
|
---|
| 130 |
|
---|
| 131 | % mooie manier om de fout en ruimte percentages weer te geven
|
---|
| 132 | hold on
|
---|
| 133 | plot(fouttabel(:,1), fouttabel(:,2),'r.')
|
---|
| 134 | plot(ruimtetabel(:,1), ruimtetabel(:,2),'g.')
|
---|
| 135 | legend('show')
|
---|
| 136 | legend('fout','ruimte')
|
---|
| 137 | xlabel('k waarde')
|
---|
| 138 | ylabel('percent')
|
---|
| 139 | hold off
|
---|
| 140 | grid on
|
---|
| 141 | axis([0,50,0,40])
|
---|
| 142 | title( 'Plaatje analyse');
|
---|
| 143 | if ( setpause ); pause; end
|
---|
| 144 | close all hidden
|
---|
| 145 |
|
---|