2de Bach. IR Wet.: Architectuur Academiejaar 2013-2014 1ste zittijd, januari 2014 Wiskunde: voortgezette analyse - examen Matlab 1. Een Costas array van orde n is een n × n matrix bestaande uit punten en blanco hokjes, zodanig dat aan de volgende twee eigenschappen voldaan is: (a) Er zijn n punten en n(n − 1) blanco hokjes, waarbij er juist 1 punt in elke rij en elke kolom staat. (b) Alle lijnstukken die we verkrijgen door twee willekeurige punten te verbinden, verschillen in lengte of in hellingsgraad. Met een Costas array associ¨eren we als volgt een reeks van getallen. Als er in de eerste kolom op rij k een punt staat, dan schrijven we als eerste getal in de reeks k. Als er in de tweede kolom op rij m een punt staat, dan schrijven we als tweede getal in de reeks m, . . . Zo krijgen we bijvoorbeeld. 1 3 4 · 2 · · · Vervolgens kunnen we nu van deze reeks getallen de difference square opstellen. Die bestaat uit de verschillen tussen de getallen die in de vorige reeks voorkwamen. Zo vormen we dan een n × n vierkant als volgt. Stel dat we op de eerste rij (1342) hebben staan, dan plaatsen we op de tweede rij als laatste element hoeveel je moet optellen bij of aftrekken van 2 om 4 te bekomen. We hebben dus 4 − 2 = 2. Op de tweede rij, als voorlaatste element plaatsen we dan 3 − 4 = −1 enzoverder. Op rij 3 doen we hetzelfde, maar in stappen van 2. Dus als laatste element van de derde rij bekomen we 3 − 2 = 1 en als voorlaatste element hebben we 1 − 4 = −3. Op rij 4 tot slot hebben we dan nog het element 1 − 2 = −1. We bekomen zo een driehoek van getallen. 1 3 4 −2 −1 −3 2 2 1 −1 In de driehoek daaronder doen we hetzelfde, maar in de omgekeerde richting, dus van links naar rechts. Hierbij schrijven we de getallen eerst in de laatste rij en gaan zo naar boven naar de tweede rij. Zo krijgen we het volgende vierkant. 1 1 3 2 3 4 2 −2 −1 2 −1 −3 1 1 −2 −1 We kunnen vervolgens alle getallen opschrijven modulo n + 1, bij een vierkant van orde 4 is dit dus modulo 5. Zo krijgen we het volgende vierkant, waarvan we zien dat er in elke rij verschillende getallen voorkomen. Namelijk alle getallen van 1 tot en met 4. Dit noemen we een rij-Latijns vierkant. 1 1 3 2 3 3 4 1 4 4 2 3 2 2 1 4 Schrijf nu een programma diffsquare(rij) dat van een gegeven reeks getallen geassocieerd aan een Costas array, de difference square opstelt. Doe dit eerst voor het bovenstaande voorbeeld en breidt dit vervolgens uit voor algemene waarden van n ∈ N\{0}. function [ M ] = diffsquare( rij ) n = length(rij); M = zeros(n); m = n-1; for i = 1:n M(1,i) = rij(i); for k = 1:n-1 for i = 1:m M(k+1,n-i+1) = rij(n-i+1-k)-rij(n-i+1); M(n-k+1,i) = rij(i+k)-rij(i); end m=m-1; end end In een volgende uitbreiding ga je dan er voor zorgen dat er geen negatieve getallen meer voorkomen in het vierkant en dit dus door modulo n + 1 te doen. Dit programma noem je modulo(). function [ M ] = modulo( matrix ) [n, n] = size(matrix) for i=1:n for j = 1:n k = matrix(i,j); M(i,j) = mod(k, n+1); end 2 end end Zie vervolgens de reeks van getallen als 4 co¨ordinaten in een assenstelsel, met als waarde voor x de positie binnen de reeks van getallen waar het getal staat, en als waarde voor y het getal dat zich op die positie bevindt. In het vorige voorbeeld (1342) hebben we dus de punten (1, 1), (2, 3), (3, 4) en (4, 2). Teken deze punten in een assenstelsel en verbindt al deze punten met elkaar met lijnstukken. Probeer dit programma ook algemeen op te stellen voor een willekeurig aantal punten. Dit programma noem je graph(). function [ ] = graph( rij ) n = length(rij); hold off; axis([0,n+1,0,n+1]); hold on; for i = 1:n plot(i,rij(i)); for j = i:n plot([i j],[rij(i) rij(j)]); end end end Probeer nu eens een ander voorbeeld te vinden van een Costas array, waarbij uit de corresponderende difference square een rij-Latijns vierkant volgt. Doe dit voor orde 3 en orde 4. (Hint: Je kan dus hier gewoon je programma van daarnet gebruiken om andere voorbeelden te vinden.) Bekijk nu het volgende voorbeeld. 3 We kunnen hier lijnstukken in terugvinden met dezelfde lengte en dezelfde hellingsgraad. Schrijf nu een programma costas() waarmee je kan nagaan of er in de Costas array rechten te vinden zijn met gelijke lengte en gelijke hellingsgraad en geef als output van dit programma weer hoeveel paren rechten je zo kan vinden. Voor het bovenstaande voorbeeld vinden we: >> costas([1,5,3,7,8,4,2,6]) ans = 12. function [ aantal ] = costas( rij ) n = length(rij); k=1; for i = 1:n for j = i+1:n x(k) = j-i; y(k) = rij(j) - rij(i); k = k+1; end end getal = n*(n-1)/2; l=1; for m = 1:getal for n = m+1:getal if (x(m) == x(n)) && (y(m) == y(n)) tabel(l,1) = m; tabel(l,2) = n; l = l + 1; end end end aantal = l-1; end Het examen duurt 2 uur. Vermeld in elk bestand dat je aanmaakt bovenaan je naam en voornaam. Geef een korte uitleg bovenaan je code. Wees zo effici¨ent mogelijk. De vraag staat op 10 punten. (Goed voor 5% van het totale eindresultaat). Veel succes! 4
© Copyright 2024 ExpyDoc