Innhold:

Denne siden inneholder oppgaver ikke gitt til eksamen eller brukt i forelesninger.

Enklere oppgaver

Antidiag

Lag en funksjon antidiag som tar inn et antall rader n. Returner en kvadratisk tabell med enere i diagonalen fra nederste venstre til øverste høyre hjørne (antidiagonalen), ellers null.

Tabell med enere på antidiagonalen

 

Diagsum

Lag en funksjon diagsum som summerer alle elementene langs diagonalen i en tabell med nrader og n kolonner.

Hoveddiagonalen i en tabell med like mange rader og kolonner

 

Diagsum2

Lag en variant av diagsumdiagsum2 som summerer alle elementene langs diagonalen i en tabell med m rader og n kolonner, hvor antall rader og kolonner kan være forskjellige.

 

Erpositiv

Lag en funksjon erpositiv som returnerer sann om alle elementene i en tabell med m rader ogn kolonner er ≥ 0, ellers usann.

 

Floyds trekant

Skriv en funksjon floyd som tar inn et antall rader n og returnerer en tabell med n rader og nkolonner, på formen

1    
23   
456  
78910 
1112131415

Tabellen viser resultatet for n=5. Elementer med verdi 0 er ikke vist.

 

Test av tilfeldige tall

Skal vi bruke store mengder av tilfeldige tall i en beregning må vi være rimelig sikre på at funksjonen vi bruker til å trekke tall er av god nok kvalitet. Dersom vi skriver ut en lang rekke av tilfeldige tall må det ikke forekomme «mønstre» eller sekvenser som gjentar seg. Tilsvarende forventer vi at et stort antall terningkast fordeler seg nesten helt likt for hvert antall antall øyne.

En enkelt test på tilfeldighet er Un,Un+1- testen. Den går ut på å trekke et større antall par av tilfeldige tall og plotte dem som en «punktsky» i et 2-D plott.

Skriv et skript randtest som trekker en serie av punkter (X(i),Y(i)), i = 1,2,...,N. For å lage skyplott med små punkter i Matlab bør du legge til '.','MarkerSize',1 etter koordinatverdiene. Octave trenger ikke dette og her bruker du kun '.'.

Bestem hvor mange par som skal plottes ved å lagre en verdi i N før skriptet kjøres. Forsøk med økende verdier av N og observer hva som skjer.

 

Avanserte Oppgaver

Innlesing av tabell fra fil

Ved beregninger på realistiske systemer (skip, oljereservoar, etc.) oppstår ofte veldig store tabeller hvor nesten alle elementene er 0 (null) bortsett fra noen få verdier rundt hoveddiagonalen (skrålinja fra A(1,1) til A(N,N)). For å spare plass kan kun elementene som er forskjellig fra 0 lagres, sammen med informasjon om hvilken posisjon de har i tabellen. Denne oppgaven går ut på å lese inn en tabell lagret i et slikt skyline-format :

  • første element på fil holder størrelsen N på tabellen (antall rader og kolonner)
  • videre elementer inneholder for hver kolonne j = 1:N:
    • indeksen til første element i j ≠ 0
    • indeksen til siste element i j ≠ 0
    • listen av elementer i kolonnen som er ≠ 0
  • anta alle kolonner inneholder verdier ≠ 0


Skriv en funksjon rdskyline som tar inn et stinavn til en (binær) skyline-fil og returnerer en N×N-tabell med dataene i filen. Test funksjonen på datafilen skyline8.dat. Dersom funksjonen fungerer korrekt skal 8×8 tabellen

A =

  1   0   0   0   0   0   0   0
  0   2   0   0   0   0   0   0
  0  -1   1  -1   0   0   0   0
  0   0   0   4   0   0   0   0
  0   0   0  -1   5   0  -2   0
  0   0   0  -2  -1   6  -1   0
  0   0   0   0   0   0   7   0
  0   0   0   0   0   0   0   8

returneres. Funksjonen bør returnere etter enhver fil-innlesing hvor et færre antall elementer enn forventet returneres. Datafilen skyline8.dat inneholder verdiene

8  1 1 1  2 3 2 -1  3 3 1  3 6 -1 4 -1 -2  5 6 5 -1  6 6 6  5 7 -2 -1 7  8 8 8

Hint: Start med å åpne filen og lese inn størrelsen på tabellen. Lag deretter en N×N-tabell med 0 (null) og fyll inn elementene ≠ 0 fra fil.