MATLAB - uppgifter i kombinatorik

Permalänk
Medlem

MATLAB - uppgifter i kombinatorik

Hej.

Jag vet inte om det är rätt ställe att fråga detta, men jag har två uppsättningar uppgifter i MATLAB att lösa. Hoppas någon kan hjälpa mig. Detta är första uppsättningen av problem, tror jag har lyckats med det första steget:

  1. Write a function valency(A) that takes an adjacency matrix and gives a list of the valency of each vertex.

  2. Write a function walksexact(A, k) that takes an adjaceny matrix A and a distance k and computes a matrix containing the number of walks from vi to vj in exactly k steps.

  3. Use walksexact to write a function walksmax(A, k) that computes the number of walks in at most k steps.

  4. Write a function eccentricities(A) that takes an adjacency matrix and computes a list of ecc(v) for all vertices.

  5. Write the functions radius(A) and diameter(A) which compute the radius and the diameter of the graph with adjacency matris A. It helps to use the function eccentricities.

  6. Write a function closedwalks(A, k) that takes an adjacency matrix and computes the number of closed walks of length k in the corresponding graph.

  7. Write a function connected(A) that returns one if the corresponding graph is connected, and zero otherwise.

Det första, valency(A), har jag skrivit såhär:

  • function v = valency(A);
    B = transpose(A);
    v = sum(B);
    end

Jag vet dock inte om det är rätt, själv tycker jag att det ser rätt ut när jag testar. Jag är riktig nybörjare på detta med MATLAB så all hjälp jag kan få är jag glad för!

Permalänk
Medlem

Nu kan jag inte MATLAB eller ens matematiken som nämns, men vad är det som gör att du känner dig osäker på om din valency(A)-funktion är rätt eller inte?

Du skriver ”själv tycker jag att det ser rätt ut när jag testar” – det är helt rätt approach! Oavsett programmeringsspråk är det bra att testa sina funktioner med ett gäng olika in-värden och kolla att du får rätt ut-värden tillbaka. Tänk på att testa olikartade fall! T ex om du testar en funktion som lägger ihop två heltal, testa då inte bara med positiva tal utan också 0 och negativa tal samt blandningar av dem etc. Försök hitta ”edge cases”. Din funktion är rätt tills motsatsen bevisats med ett exempel då den gör fel!

Permalänk
Skrivet av thejesus:
  1. Write a function valency(A) that takes an adjacency matrix and gives a list of the valency of each vertex.

Det första, valency(A), har jag skrivit såhär:

  • function v = valency(A);
    B = transpose(A);
    v = sum(B);
    end

Observera att transpose(A) kan förkortas till A'. Olika sätt att transponera matriser:

  • A' eller ctranspose(A): transponera och komplexkonjugera

  • A.' eller transpose(A): transponera utan att komplexkonjugera

En grannmatris har bara reella värden så alla metoder ger samma resultat.

Som jag uppfattar det räknar du ut hur många kanter som går från respektive nod (utvalens). Är det detta du försöker räkna ut? Man skulle även kunna räkna ut hur många kanter som går till respektive nod (invalens). I så fall skippar man transponeringen av matrisen.

Om grafen inte skulle vara riktad (så att matrisen alltså är symmetrisk) spelar det förstås ingen roll om du transponerar eller inte.

Permalänk
Medlem
Skrivet av lydell:

Nu kan jag inte MATLAB eller ens matematiken som nämns, men vad är det som gör att du känner dig osäker på om din valency(A)-funktion är rätt eller inte?

Osäkerheten är nog mest att jag är så ny på detta med MATLAB. Har bara använt det sedan i September och det lilla vi har gjort tidigare har varit att modifiera filer. Som att byta ut en differentialekvation mot en annan eller liknande. Bara enklare saker.

Skrivet av Kommenterande 2:

Observera att transpose(A) kan förkortas till A'.
...
Som jag uppfattar det räknar du ut hur många kanter som går från respektive nod (utvalens). Är det detta du försöker räkna ut?

Det är precis det jag ska göra. Menar du att jag kan skriva B = A' eller B = A.' i den andra raden?

Permalänk
Skrivet av thejesus:

Osäkerheten är nog mest att jag är så ny på detta med MATLAB. Har bara använt det sedan i September och det lilla vi har gjort tidigare har varit att modifiera filer. Som att byta ut en differentialekvation mot en annan eller liknande. Bara enklare saker.

Du får nog vara mer specifik med vad du behöver hjälp med för det är inte tänkt att någon annan ska göra dina hemläxor. Jag ger dig bara lite tips inför del 2 och 3 men du får själv klura ut matematiken. Det står säkert i läroboken hur du ska räkna ut svaret.

För att beräkna "x upphöjt till y" skriver du x ^ y. Matlab klarar "skalär upphöjt till skalär", "skalär upphöjt till matris" och "matris upphöjt till skalär".

Enkel for-loop (skriver ut femmans multiplikationstabell):

for i=1:10 5*i end

Skrivet av thejesus:

Menar du att jag kan skriva B = A' eller B = A.' i den andra raden?

Ja. Det vanliga är att man skriver den kortare varianten B = A'. Det går även bra att skriva B = transpose(A). Samma sak om A är en reell matris. Det blir en skillnad om A är komplex.