Innhold:
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.
- LF: (antidiag.m)
Diagsum
Lag en funksjon diagsum
som summerer alle elementene langs diagonalen i en tabell med n
rader og n
kolonner.
- LF: (diagsum.m)
Diagsum2
Lag en variant av diagsum
, diagsum2
som summerer alle elementene langs diagonalen i en tabell med m
rader og n
kolonner, hvor antall rader og kolonner kan være forskjellige.
- LF: (diagsum2.m)
Erpositiv
Lag en funksjon erpositiv
som returnerer sann
om alle elementene i en tabell med m
rader ogn
kolonner er ≥ 0, ellers usann
.
- LF: (erpositiv.m)
Floyds trekant
Skriv en funksjon floyd
som tar inn et antall rader n
og returnerer en tabell med n
rader og n
kolonner, på formen
1 | ||||
2 | 3 | |||
4 | 5 | 6 | ||
7 | 8 | 9 | 10 | |
11 | 12 | 13 | 14 | 15 |
Tabellen viser resultatet for n=5
. Elementer med verdi 0
er ikke vist.
- LF: (floyd.m)
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
- indeksen til første element i
- 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.
- LF: (rdskyline.m)