Examen eerste zittijd (IR. Arch.) academiejaar 2013

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