61
Matlab Indhold Chapter 1 introduktion til matlab...................................7 definering........................................................ 7 Supressing the output, vis ikke svaret når man trykker enter......7 Variabel kommandoer:.............................................. 7 Format............................................................ 8 Antal decimaler................................................. 8 Mellemrum mellem input og resultat:.............................8 Fjern lange linjer i regnestykke................................8 Absolutværdi.................................................... 8 Tilfældige tal.................................................... 9 Mellem 0 og 1................................................... 9 Mellem 0 og N................................................... 9 Mellem N og N................................................... 9 Tilfældige reelle numre.........................................9 Tilfældige heltal/integers......................................9 Practice 1,2 dannelse af tilfældige tal...........................9 Generate a random:.............................................. 9 Characters and strings........................................... 10 Større end/mindre end..........................................11

UNIGULDuniguld.dk/wp-content/guld/DTU/Matlab/matlab-noter.docx · Web viewFx kan man sige var=’3’ og den vil printe 3, men uden at den har værdien 3, på denne måde kan man

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Matlab

IndholdChapter 1 introduktion til matlab7definering7Supressing the output, vis ikke svaret når man trykker enter7Variabel kommandoer:7Format8Antal decimaler8Mellemrum mellem input og resultat:8Fjern lange linjer i regnestykke8Absolutværdi8Tilfældige tal9Mellem 0 og 19Mellem 0 og N9Mellem N og N9Tilfældige reelle numre9Tilfældige heltal/integers9Practice 1,2 dannelse af tilfældige tal9Generate a random:9Characters and strings10Større end/mindre end11Logical operators, forhold i strings:11True/false med operatore11Læsning af statements:12Practice 1,3 brug af characters12Bogstaver på tal og omvendt13Practice 1.5 brug af char og double14Build-in numerical functions14Cos, sin, tan og radianer til grader14Rest funktioner14Positivt/negativt resultats-tjek15Kvadratrødder og logaritmer15Øvelser for kapitel 116Chapter 2 Vektor og matricer16Vektor og matricer16Creating a row vector16Hurtig/smart måde at danne vektorer i intervaller172 vektorer efter hinanden18Modifikation af vektor19Practice 2.120Dannelse af kolonne vektor20Dannelse af matrix variabler21Matricer med tilfældige tal21rand21Randi22Hjælpe matricer (zeros og ones)23Zeros23Ones23Kalde og modificere matricer23Kalde værdier ud:23All rows24Ændre værdier i matricer24Ændring af større dele i en matrice24Dimensioner25Size og length25Numel (antal elementer)26End26Dimensions skift26Reshape26Flip27Tomme vektorer27Practice 2.2283D matricer29Vektor og matricer som funktions argumenter29Absolutværdi29Sign om tal er +/-/029Min, max, sum og prod29Diff distance mellem elementer30Scalar and array operations on vectors30Gange og division på matricer30Array operations matricer ganget/plusset sammen30Practice 2.330Logical vectors (sandt/falsk)30Relation expressions with Vectors and matrices30Logical any/all31Find31Krydsprodukt og prikprodukt31Chapter 3 introduktion til programmering31Scripts31Practice 3.131Input og output I/O32Input32Practice 3.232Output32Printing vektorer og matrice33Simple plot, farver, og ikoner33Hold34Grid34Søjle og legned34Practice 3.436Hentning af data36Dannelse af funktion:36Funktioner med flere inputs37Chapter 4 Selection statements37If statements37Representing logical true and False38Practise 4,138The If-else statement39Practise 4,239Switch39Is function40Chapter 5 loop statements and vectorizing code40For løkke40Input I en for-løkke41Skiftende variabelværdi41Gemme data i en vektor41subplot (se side 153)42For-løkke i for-løkke42For-løkke for matricer43Nedsted med if statement44While-løkke44While med fildata45Input i while løkke45Udvide en vektor med input46”tælle” i et while loop46Practice 5,546Error-checking user input in a while loop47Forloop kontrollerer while47Heltal tjek47Loops med vektore og matricer47vectorizing sums and products48løbende Summen af elementer i vektor48Summen af hver kolonne i matrice49”checkcode”49Tidtagning49Chapter 6 MATLAB Programs (debugging)49Funktioner med flere outputs49eks: cirkel regning49Eks: remainder efter division50Debugging50Types of errors50Syntax errors50Runtime error50Logical errors50Breakpoints51Chapter 7 String Manipulation51Create string variables51Streng som vektor51operations on strings51Nyttige funktioner52

Chapter 1 introduktion til matlabdefinering

· Man definerer i Matlab ved:

· Variabelnavn=expression

· Definitionen holder til næste gang man gendefinerer variabelnavnet

· Man kan lægge noget til en definition og redefinere den originale

Supressing the output, vis ikke svaret når man trykker enter

Hvis man kommer et semikolon ”;” bag på et statement gengiver den det ikke under

Selvom den ikke viser svaret på ”res” er 7 husker den stadig res som værende lig med 7

Variabel kommandoer:

· who

· viser variabelnavne som er defineret

· whos

· viser flere detaljer om variable navnene

· clear

· fjerner alle variable navne

· clear(’variabelnavn’)

· fjerner ét bestemt variabel

FormatAntal decimaler

Hvis man skriver ”formal long” før et regnestykke får man et utal af decimaler.

Hvis man skriver ”format short” får man 4 decimaler

Mellemrum mellem input og resultat:

Med ”format loose” bliver distancen mellem input og resultat lang

Med ”format compact” bliver distancen kort

Fjern lange linjer i regnestykke

Man kan fortsætte et regnestykke på linjen under ved brug af ”mellemrum og …”

Absolutværdi

For at få absolutværdien, hvis man fx regner volumener bruger man ”abs()” her får man kun en positiv værdi

Tilfældige talMellem 0 og 1

Hvis man vil generere et tilfældigt tal mellem 0 og 1 kan man skrive ”rand”

Mellem 0 og N

For at generere et tilfældigt tal mellem 0 og N kan man gange N på rand:

Mellem N og N

For at genererer et tal mellem 2 numre, skal man definere intervallet:

Denne genererer et tilfældigt tal mellem 3 og 5

Derefter skriver man ”rand(high-low)+low

Tilfældige reelle numre

For at danne tilfældige reelle numre bruger man ”randn” denne giver både positive og negative værdier

Tilfældige heltal/integers

For at generere tilfældige heltals numre kan man gøre det på forskellige måder.

· ”round(randi*N)”

· Denne giver et tilfældigt tal fra 0 til N, hvor tallet automatisk rundes af til nærmeste heltal

· ”randi”

· Randi giver også et heltal, men er lettere at bruge, denne kan bruges på måderne

· Randi(N) giver et tilfældigt heltal mellem 1 og N

· Randi([low,high]) giver et tal mellem minimum og maksimum.

Practice 1,2 dannelse af tilfældige talGenerate a random:

1. nummer mellem 0,1

a.

2. nummer mellem 0,100

a.

3. nummer mellem 20,35

a.

4. heltal mellem 1 til 100

a.

5. heltal mellem 20 til 35

a.

Characters and strings

Man kan få Matlab til at definerer ting, uden at give det betydning.

Fx kan man sige var=’3’ og den vil printe 3, men uden at den har værdien 3, på denne måde kan man også indsætte ord/sætninger:

Når man definerer ord/sætninger vil disse have en værdi i forhold til deres ASCII værdi (computerens taster har hver sin værdi) den vil dog printe ordet/sætningen som den står medmindre man lægger til/trækker fra sætningen så får man det som tal.

Større end/mindre end

Operator

Betydning

>

Større end

<

Mindre end

>=

Større eller lig med

<=

Mindre eller lig med

==

Lig med

~=

Ikke lig med

Hvis man indsætter et ”sandt statement” fx 3<5 vil man få ”true” som præsenteres af tallet 1

Hvis man indsætter et ”falskt statement” fx 3>5 vil man få ”false” som præsenteres af tallet 0

Logical operators, forhold i strings:

Operator

Betydning

||

or(eller)

&&

And(og)

~

Not(ikke)

Xor

Kun 1 er rigtig

True/false med operatore

· ”~”

· Når man bruger denne får man det omvendte af hvad man indtastede.

· Fx: ~(3<5) er forkert, da (3<5) er rigtigt

· ”|| or”

· Når man bruger or, bliver resultatet rigtigt, hvis 1 or begge statements er rigtige, og kun falsk hvis begge statements er falske

· (3<5)||(3<4)=rigtig, da begge er rigtige

· (3<5)||(3>4)=rigtig, da 1 er rigtig

· (3>5)||(3>4)=forkert, da begge er falske

· ”&& and”

· Når man bruger and, skal begge statements være sande før resultatet bliver sandt, hvis begge eller 1 resultater er falsk bliver det hele falskt:

· (3<5)||(3<4)=rigtig, da begge er rigtige

· (3<5)||(3>4)=forkert, da 1 er rigtig og 1 er forkert

· (3>5)||(3>4)=forkert, da begge er falske

· ”xor”

· ”xor” giver kun rigtigt, hvis én af statementsne er sande, men giver forkert hvis 2 er sande, eller 2 er falske:

· Xor(3<5,3>4)=rigtig, da 1 er sand

· Xor(3<5,3<4)=falsk da begge er sande

Læsning af statements:

Et statement bliver altid læst fra venstre højre. Men Matlab læser kun 1 del af gangen.

Derfor vil sætningen: 3

Derfor vil sætningen altid blive sand samlet, lige meget hvilket x værdi man indsætter.

Hvis man vil have Matlab skal læse det som man ønsker, skal man skrive:

Hvis man vil have Matlab skal læse det som man ønsker, skal man skrive:

3

Så vil x blive betydelig, da man nu sammenligner x med værdierne.

Practice 1,3 brug af characters

1. 3==5+2

a. 3=7

i. falsk

2. ’b’<’a’+1

a. 98<97+1

i. falsk

3. 10>5+2

a. 10>7

i. sandt

4. (10>5)+2

a. Først tager den 10>5, hvilket er sandt, derfor =1

b. Derefter tager den 1+2=3

5. ’c’==’d’-1&&2<4

a. 99=100-1&&2<4

i. Sandt, da begge er rigtige

6. ’c’==’d’-1||2>4

a. Sandt, da 1 er sand og 1 er falsk

7. xor(’c’==’d’-1,2>4)

a. sand da 1 er rigtig

8. xor(’c’==’d’-1,2<4)

a. falsk, da begge er rigtige

9. 10>5>2

a. Falsk, da 10>5=1

b. 1>2=0

i. Samlet giver denne derfor falsk

Bogstaver på tal og omvendt

Hvis man har et bogstav, kan man få dets værdi ud ved brug af:

”Double(’a’)”, hvilket giver værdien 97

Man kan også få et tals bogstav ved brug af:

”char(97)”, hvilket giver a

Man kan også tage flere på en gang:

”double(’abcd)”, hvilket giver 97 98 99 199

Practice 1.5 brug af char og double

1. find talværdien for ’x’

a.

2. find bogstavet for 107

a.

Build-in numerical functions

“help elfun” giver muligheder for alt I denne sektion

Cos, sin, tan og radianer til grader

Cosinus, sinus og tangent bliver regnet i radianer i Matlab. For at få bruger man acos

Hvis man vil have det i grader skal man bruge sind(for normal sinus) og asind for

Rest funktioner

Hvis man fx siger , bliver svaret 2 med en rest på 3.

Dette kan i Matlab skrives som:

”rem(13,5)”, hvilket giver resten 3

Hvis man gerne vil gå fra grader til radianer bruger man:

”deg2rad(N)”

Hvis man gerne vil gå fra radianer til grader bruger man:

”rad2deg(N)”

Positivt/negativt resultats-tjek

Hvis man vil vide om et tal er positivt eller negativt kan man bruge:

”sign(N)”

Hvis N er positivt bliver svaret 1

Hvis N er negativt bliver svaret -1

Hvis N er 0 bliver svaret 0

Kvadratrødder og logaritmerKvadratrødder

Hvis man vil tage kvadratroden af noget, skriver man:

”sqrt(N)”

Hvis man vil tage den n’te rod skriver man:

”nthroot(N,rod)”

Eks. 3 rod af 64:

Nthroot(64,3)=4

Logaritmer

Hvis man skal tage logaritmer af tal kan det gøres på forskellige måder:

1. ”log(N)”

a. Denne tager den naturlige logaritme

2. ”log2(N)”

a. Tager 2 tals logaritmen af N

3. ”log10(N)”

a. Tager 10-tals logaritmen af N

Derudover har Matlab funktionen ”exp(n)”, som tager Eulers tal i n’te

Øvelser for kapitel 1

1.

2.

I den først vises udregningen, modsat den nederste

Se matlab for flere

Chapter 2 Vektor og matricer Vektor og matricer

En matrice er bygget op af flere vektorer. Matricens dimension beskrives som ”r x c”, hvor r er antal rækker og c er antal kolonner.

Da en vektor kun består af 1 række har den dimensionen 1xN, hvor N er antal pladser i rækken

Creating a row vector

Man kan skrive vektorer på flere måder, begge disse måder giver samme vektorer:

1. v=[1 2 3 4]

2. v=[1,2,3,4]

disse opstillinger giver følgende 1x4 rækkevektor:

1

2

3

4

Hurtig/smart måde at danne vektorer i intervaller

Man kan danne vektorer af bestemte former med ”:”

Fx kan en vektor fra 2 til 6 blive dannet som:

Dette resulterer i:

2

3

4

5

6

Derudover kan man tage det i intervaller ved at bruge formen:

X=startpunkt

Y=distance mellem tal, kan både være positivt og negativt

Z=slutpunkt

Eks:

Nv=1:2:9:

1

3

5

7

9

Dog hvis man indsætter et slutpunkt som ikke går op i y-tabellen vil man få en vektor som rammer så tæt som muligt:

Nv=1:2:6

Her kan man ikke ramme 6 så vektoren bliver som følgende:

1

3

5

Linspace

Hvis man danner en vektor med ”linspace” kan man hoppe et step over, linspace skrives som

Linspace(x,y,n)

X=start

Y=stop

N er antal værdier I vektoren som skal være med, hvis man udelader n får man 100 værdier mellem x og y

Ekslinspace(3,15,5)

Denne giver en vektor som starter i 3, går til 15, og indeholder 5 værdier:

3

6

9

12

15

Logspace

Logspace virker på samme måde som linspace, her bliver de indsatte tal dog opløftet i 10’de potens.

Hvis n bliver udeladt vil man få 50 tal mellem x og y:

Eks:

Logspace(1,4,4)

10

100

1000

10000

2 vektorer efter hinanden

Man kan lægge to vektorer sammen på følgende måde:

Jeg sætter her to vektorer (nv og ls) efter hinanden

[nv ls].

Modifikation af vektor

Elementerne i en vektor er nummereret i rækkefølge, hvert element er kaldet et index eller subscript.

Nummereringen starter fra 1 og følger vektoren til N:

Nr.

1

2

3

4

5

6

7

8

9

10

Vektor

1

3

5

7

9

3

6

9

12

15

Man kan få fat i bestemte elementer ved at skrive vektorens navn efterfulgt af (element nr.)

Fx

Vektor(5)

=9

Man kan også bede om værdier i perioder

Fx

Vektor(4:6)

=7 9 3

Ændring af vektorelementer

Man kan ændre vektorelementer, ved at kalde på vektorens element og sætte det = noget nyt:

Vektor(2)=5

Vektoren kommer nu til at se således ud:

Nr.

1

2

3

4

5

6

7

8

9

10

Vektor

1

5

5

7

9

3

6

9

12

15

Man kan også lægge tal til vektorer på samme måde:

Vektor(11)=20:

Nr.

1

2

3

4

5

6

7

8

9

10

11

Vektor

1

5

5

7

9

3

6

9

12

15

20

Hvis der et hul mellem elementet af vektoren fx hvis jeg havde indsat et 12 element, vil matlab udfylde tomrummet med et 0, element 11 ville derfor blive 0

Practice 2.1

1. Pvec=3:2:10

a. Dette vil danne en vektor fra 3 til 10 med 2 mellemrum:

3

5

7

9

2. prec(2)=15

a. dette vil omdanne vit 2. element til 15:

3

15

7

9

3. prevec(7)=33

a. dette vil indsætte et 7. element og danne 0 på 5. og 6. element:

3

5

7

9

0

0

33

4. pvec([2:47])

a. intet sker

5. linspace(5,11,3)

a. danner en vektor fra 5 til 11 med 3 elementer

5

8

11

6. logspace(2,4,3)

a. denne danner en vektor fra 10^2 til 10^4 med 3 elementer:

100

1000

10000

Dannelse af kolonne vektor

For at danne en kolonne vektor bruger man ”;” mellem elementerne:

C=[1;2;3;4] danner vektoren:

1

2

3

4

Det er i sig selv ikke nogle kolonnefunktioner til at danne kolonnevektorer.

Man kan dog danne en rækkevektor med funktionerne og Transponerer denne ved brug af ”’”

Eks

r=1:3

c=r’

dette giver kolonne vektoren:

1

2

3

Dannelse af matrix variabler

Man kan danne en matrice ved at skrive 2 rækkevektorer adskilt af en ”;”

Ex

Mat=[4 3 1; 2 5 6]

4

3

1

2

5

6

Der skal altid være samme antal elementer i hver række og hver kolonne for at det virker

Matricer med tilfældige talrand

Man kan danne matricer med tilfældige numre med rand funktionen.

Man skriver rand(N)

Og derefter får man en matrice på størrelsen NxN med tilfældige tal, mellem 0 og 1

Tilfældige vektor

man kan specificere hvordan matricen skal se ud, fx kan man danne en vektor med 3 rækker som følgende:

rand(1,3)

0,7

0,4

0,3

Randi

Man kan danne matricer med tilfældige heltal med randi.

Funktionen virker af formen

Randi([x,y],n)

Hvor x er startværdi

Y er slutværdi

N danner størrelsen af matricen, altså nxn

Eks

Randi([5,10],2)

8

10

9

5

Man kan også hvis man danner en funktion af formen

Randi([x,y],c,r)

c er antal rækker

r er antal søjler

eks

randi([10,30],2,3)

21

10

13

19

17

26

Hjælpe matricer (zeros og ones)Zeros

Zeros er en funktion, som danner en matrice af nxn form udfyldt af nuller, dette kan være smart at danne en 0 matrice som man kan indsætte data i

Zeros(n)

Ones

Som modsvar kan man danne matricer fulde af 1-taller med ”ones”, her kan man selv bestemme dimensionen af matricen:

Ones(r,c)

Kalde og modificere matricer

[x y]=min(vec)

[x y]=max(vec)

Giver værdi og elementnr.

Kalde værdier ud:

Hvis vi har matricen

2

3

4

3

4

5

Kan jeg kalde værdier på samme måde som med vektorer:

matrice(2,3)

=5

Man kan ligeledes kalde elementer ud i rækkefølge:

Matrice(4)

=3

All rows

Hvis man bruger et ”:” betyder dette Alle rækker

Fx kan jeg kalde alle tal ud i første række:

Matrice(1,:)

=2 3 4

Jeg kan ligeledes få alle elementer ud i 2. kolonne

Matrice(:, 2)

=3;4

Ændre værdier i matricer

Hvis jeg vil ændre værdier i min matrice kan jeg gøre det på samme måde som ved en vektor:

Matrice(1,2)=11

2

11

4

3

4

5

Jeg kan også ændre alle værdier i en matrice med funktionen:

Matrice(2,:)=5:7

Her ændre jeg alle værdier i 2. række til at være tal fra 5 til 7

2

11

4

5

6

7

Ændring af større dele i en matrice

Man kan ændre større sektioner i en matrice på samme måde

Fx:

11

16

46

18

84

64

13

48

32

84

59

21

59

78

15

Jeg vil nu ændre det grønne område til at blive 3-taller:

Matrice(2:3,3:5)=3

11

16

46

18

84

64

13

3

3

3

59

21

3

3

3

DimensionerSize og length

Man kan finde dimensionerne af en matrice ved brug af funktionerne ”length” og ”size”

Eks.

Først danner jeg en matrice:

2

4

6

7

1

4

7

8

Jeg kan nu finde længden af matricen med length:

Length(matrice)

=4

Jeg kan også finde begge dimensioner med size:

Size(matrice)

=2 4

Jeg kan også finde dimensionen på én gang, og gemme disse data.

[r, c]=size(matrice)

r=2

c=

4

Numel (antal elementer)

Man kan finde antal elementer i en matrice med ”numel” funktionen.

Fx for min matrice:

Numel(matrice)

=8

End

Man kan bruge ”end” til at finde det sidste element i en vektor/matrice

Dimensions skift

Man kan bruge forskellige funktioner til at skifte dimensionerne i en matrice:

Reshape

Med reshape kan man ændre en 3x4 matrice til en 2x6 matrice:

1

2

3

4

5

6

7

8

9

10

11

12

Jeg kan nu bruge reshape til at ændre dimensionen til en 2x6:

Reshape(matrie,2,6)

Her tager den kolonnemæssige og køre den igennem:

1

9

6

3

11

8

5

2

10

7

4

12

Flip

Med flip-lr/up kan man dreje matricens værdier:

1

2

3

4

5

6

7

8

9

10

11

12

Med ”fliplr” vender man rækkerne om:

Fliplr(matrice)

4

3

2

1

8

7

6

5

12

11

10

9

Med ”flipud” vender man kolonnerne:

Flipud(matrice)

9

10

11

12

5

6

7

8

14

2

3

4

Da 2. række er i midten bliver denne ikke roteret.

Tomme vektorer

Man kan danne tomme vektorer ved at danne en vektor uden noget i:

Vektor=[]

Man kan fjerne elementer i matricer ved brug af disse:

1

2

3

4

Vektor(4)=[]

1

2

3

Practice 2.2

1. mat=([1:3; 44 9 2; 5:-1:3])

1

2

3

44

9

2

5

4

3

2. mat(3,2)

a. =4

3. mat(2,:)

a. 44 9 2

4. size(mat)

3x3

5. mat(:,4)=[8;11;33]

1

2

3

8

44

9

2

11

5

4

3

33

6. numel(mat)

=12

7. v=mat(3,:)

v=5 4 3 33

8. v(v(2))

=33

9. v(1)=[]

a. 4 3 33

10. reshape(mat,2,6)

1

5

9

3

3

11

44

2

4

2

8

33

3D matricer

Se side 52

Vektor og matricer som funktions argumenterAbsolutværdi

Hvis man vil finde absolutværdien af et tal/vektor bruger man ”abs”

Sign om tal er +/-/0

Hvis man vil vide om tal er positivt negative eller 0 bruger man sign(vektor)

Min, max, sum og prod

For at finde mindste værdien i en matrice bruger man ”min(matrice)”

For at finde den største værdi bruger man ”max(matrice)”

Hvis man vil have summen af alle elementer i en vektor bruger man ”sum(vektor)”

Hvis man vil have alle elementer ganget sammen bruger man ”prod(matrice)”

Hvis man vil have den kumulerede sum/prod bruger man ”cumprod/cumsum”

Eks på cumsum:

Vektor:

1

2

3

4

5

Cumsum(vektor)

1

(1+2)

(1+2+3)

(1+2+3+4)

(1+2+3+4+5)

Diff distance mellem elementer

Hvis man danner en vektor og gerne vil vide hvad distancen mellem elementerne er, kan man bruge diff funktionen

Scalar and array operations on vectorsGange og division på matricer

Når man danner en matrice kan man gange og dividerer på selve udtrykket, og derefter vil det indordne sig i matricen

Array operations matricer ganget/plusset sammen

Når man lægger matricer sammen er det vigtigt at de har samme antal af elementer og dimensioner

Når man ganger/dividerer, opløfter er det vigtigt at skrive det med et punktum foran tegnet

Practice 2.3

Til disse danner jeg vektoren, vec=[3 6 9 12]

1. create a vector variable and subtract 3 from every element in it

a. vec-3

2. create a matrix variable and divide every element with 3

a. vec/3

3. create a matrix variable and square every element

a. vec.^2

Logical vectors (sandt/falsk)Relation expressions with Vectors and matrices

Man kan teste om udtryk er sande og falske, og så i vektorer.

Dette virker på samme måde sim med almindelige tal:

Vektor=[5 9 3 4 6 11]

Jeg kan nu teste denne:

Vektor>5

=0 1 0 0 1 1

Altså 1 for sandt og 0 for falsk

Logical any/all

“any” returnerer logisk sand, giver 1, hvis bare nogle af statementsne er sande og 0 hvis ingen er sande

”all” giver 1 hvis alle statements er sande og 0 hvis bare ét element er falsk

Find

Find bruges til at vise hvilke elementer, som er sande:

Vektor=[5 9 3 4 6 11]

Find(vektor>5)

=2 5 6

Altså de element pladser som opfylder kravet

Krydsprodukt og prikprodukt

Krydsprodukt skrives som ”cross(matrice)”

Prikprodukt skrives som ”dot(matrice)”

Chapter 3 introduktion til programmeringScripts Practice 3.1

Skriv et script til at beregne omkredsen af en cirkel:

Input og output I/OInput

Hvis man vil have programmet til at spørge om en variable bruger man funktionen ”input(’text’)”

Hvis det er en sætning skal der ,’s’ bagpå

Practice 3.2

Dan et script som spørg om en længde, derefter om enheden på denne længde

OutputDisp

Bruges til at displaye et resultat

Eks:

Disp(’hello world’)

=hello world

fprintf

I et fprint f kan man bede den om at hente data fra tidligere:

Skrivelse

Betydning

%d

Heltal

%f

Reelle tal

%c

Et bogstav

%s

Linjer

Hvis man vil have noget ned på næste linje kommer man ”\n” ind der hvor linjen skal halveres

Printing vektorer og matrice

Hvis man kommer en \n ind i fprintf sammen med en vektor vil det danne en søjle vektor:

Hvis man udelader ”\n” vil det danne en rækkevektor:

Hvis man vil vise en matrice, skal man indsætte %d for antal søjler man vil have:

Dig vil ”disp” her være bedre, da denne bare viser matricen som man har skrevet dden.

Simple plot, farver, og ikoner

Man kan danne plots med ”plot” funktionen

Man giver akserne navne med ”xlabel” og ”yabel”

Indsæt

Farve

b

Blå

g

Grøn

r

Rød

c

Cyan

m

Mangenta

y

Gul

k

Sort

w

Hvid

Af ikoner kan man vælge

Indput

Betydning

Prik

o

Cirkel

X

X

+

Plus

*

Stjerne

S

Firkant

D

Diamant

V

Vedad trekant

^

Opad trekant

<

Venstre trekant

>

Højre trekant

P

pentagram

h

Hexagram

Linje typer

Indput

Type

:

Prik

-.

Dash dot

--

Dashed

(none)

Ingen linje

-

Solid

Hold

Man kan bruge hold til hvis man vil lave flere plots/grafer i ét vindue

Hold on (start)

Hold off (slut)

Grid

Danner et gitter I funktionen

Søjle og legned

Man kan bruge ”bar” til at danne søjlediagrammer:

Legend kan bruges til at danne ”skemaer” mm:

Practice 3.4

Dan et plot med tid og temperatur

Hentning af data

Hvis man skal indhente et datasæt skal man skrive datasættets navn efterfulgt af -ascii

Dannelse af funktion:

Når man skal danne en funktion skal det følge formen:

Funktioner med flere inputs

Hvis man vil danne en funktion med flere inputs skal man skrive gøre det med komma i (input arguments)

Chapter 4 Selection statementsIf statements

If statementet bestemmer om en gruppe, eller enkelt funktion går igennem, formen for If statements er:

If condition

Action

End

”condition” er et statement som er logisk sand eller falskt

”action” er ét statement eller en gruppe statements som vil gå igennem hvis de er sande

Når man køre If statementet igennem vil ”action” kun blive gennemført, hvis det er sandt.

Denne evaluerer nummeret, hvis nummeret er over 0, vil tallet blive omdannet til et 0

Man kan også bruge input funktionen til at spørge brugeren om et nummer:

Representing logical true and False

Med logical true, bliver alt som ikke er et 0 sande statements.

Practise 4,1

Dan en if statement som printer ”Hey, you got overtime!”, hvis værdien er over 40, test funktionen med tal under, over og lig med 40

Test:

The If-else statement

Man bruger ”ifelse” til at lade scriptet gå igennem flere if statements, så hvis det første ikke opfyldes, bliver der gået videre til det næste statement. (et eksempel på dette kan ses ovenover i eksempel 4,1)

Practise 4,2

Bed brugeren om en vinkel

Bed brugeren om d for grader og r for radius, print svaret:

Switch

Switch statementet kan bruges i stedet for if-else/elseif

Her opstiller man nogle ”cases” som man vælger imellem

EKS

Is function

Det er flere funktioner som kan teste statements.

Eksempler på dette er

”isequal”-tester om 2 statements(fx matricer) har samme størrelse

”isletter”-tester om input er et bogstav

Outputs for disse funktioner er 1 for true og 0 for false

Chapter 5 loop statements and vectorizing codeFor løkke

For-løkken bruges når man ved hvor mange gange et loop skal kører

Formen for en for-løkke:

for loopvar = range

action

end

%eksempel på for-løkke

for II=1:5

fprintf('%d\n',II)

end

(%d er print heltal)

Input I en for-løkke

Man kan ligeledes bruge input funktionen i en for-løkke, ved ”inputnavn = input(’inputtekst’)

Skiftende variabelværdi

Man kan bruge for-løkker, hvis man vil have en sum, som er under konstant forandring.

EKS på dette:denne for-løkke lægger inputværdierne sammen, og gemmer værdien i ”runsum”

n=randi([3 10]);

%jeg deffinerer nu startværdien, for variablen som gemmer data

runsum=0

for i=1:n

inputnr = input('enter a number:')

runsum = runsum+inputnr;

end

fprintf('the sum is %.2f\n',runsum)

(%.2f, betyder at resultatet har 2 decimaler efter 0)

Gemme data i en vektor

Hvis man skal gemme data i en vektor, kan det være smart at danne en ”zeros”-vektor først med størrelsen af det ønskede resultat, for at optimerer hastigheden som programmet kører i.

Eksempel på dette:Her danner jeg en vektor, som består af inputs:n=randi([4 8]);

numvec = zeros(1,n);

for iv=1:n

inputnum = input('enter a number');

numvec(iv) = inputnum;

end

fprintf('The vector is: \n')

disp(numvec)

subplot (se side 153)

Man kan danne et subplot, som er en matrix af plots.

Man skal indtaste 3 argumenter i funktionen:

Subplot(r,c,n)

R og c er dimensionerne i plott

For-løkke i for-løkke

Man kan lave for-løkker i for-løkker, hvis processor skal ske flere gange, et eksempel på dette kun være:

%printer linjer med stjerner

rows = 3;

colums = 5;

%dobbelt løkke:

for i =1:rows;

for j =1:colums

fprintf('*')

end

%denne del giver bare en ny linje efter hver af de indre for-løkker

fprintf('\n')

end

*****

*****

*****

eksempel 2:

her vil jeg have stjernerne printet som en trekant

%printer en trekant af stjerner:

rows = 3;

for i =1:rows

for j=1:i

fprintf('*')

end

fprintf('\n')

end

*

**

***

Eks 3

Vis loop variablerne

for i=1:3

for j=1:2

fprintf('i=%d, j=%d\n',i,j)

end

fprintf('\n')

end

giver:

i=1, j=1

i=1, j=2

i=2, j=1

i=2, j=2

i=3, j=1

i=3, j=2

For-løkke for matricer

Her danner jeg en multiplikationstabel

%% matrice

%function = multtable(rows,columns)

outmat = zeros(rows,comumns)

for i=1:rows

for j=1:columns

outmat(i,j) = i*j;

end

end

end

funktionen starter i række 1 og ganger elementerne fra i med 1, derefter i med 2 ovs til slut

Nedsted med if statement

Man kan smide et if statement ind i en nested for-løkke

Her bruger for-løkken kun de positive værdier fra et datasæt:

%% load.datasaet.dat

[r c] = size(datasaet);

for 1:r

runsum=0

for col=1:c

if datasaet(row,col)>=0

runsum=runsum+dataval(row,col);

end

end

fprintf('the sum for rol %d is %d\n',row,runsum)

end

While-løkke

Man bruger en while-løkke når man ikke ved hvor mange gange funktionen skal køre

Formen er:

While condition

Action

End

Løkken løber så længe condition er sand

Eks:

i=0

fac=1

high=5

while fac<=high

i=i+1

fac=fac*i

end

facgt=fac;

%sidste linje er fordi det er en funktion med variablen facgt

end

Man kan også sætte en range på i stedet for conditon:eks:

While x>=0 && x<=100

Her virker &&+ de andre statements på samme måde som vist tidligere

While med fildata

Hvis man har et datasæt og kun skal bruge værdier over en hvis grænse, kan man gemme de ønskede date igennem et while loop:

%dette er hvis man har data hvor man kun ønsker værdier af en hvis

%størrelse:

%først loades data:

%load experd.dat

%nu sættes startkrav

i=1;

%data findes indtil det rammer -99

while experd(i)~=-99

newvec(i)=experd(i);

i=i+1;

end

Input i while løkke

Man kan bede om inputs i et whileløkke, som fortsætter så længe inputsne matcher kravene:

%beder brugeren om data indtilæ de indtaster noget under 0

inputnum = input('Enter a positive number:');

while inputnum >= 0

fprintf('you entered a %d.\n\n',inputnum)

inputnum=input('enter a positive number:');

end

%hvis man ikke indtaster et positivt tal printer den slutbeskeden

fprintf('OK!\n')

Hvis jeg gerne vil danne en vektor ud fra input kan jeg gøre dette:

x = zeros(1,100);

i=0;

while 1

i = i+1;

x(i)=input('giv tal');

if x(i) > 40

break

end

end

Udvide en vektor med input

Her gemmes data i en udvidende vektor

numvec = [];

inputnum = input('Enter a positive number: ');

while inputnum >=0

numvec = [numvec inputnum];

inputnum = input('Enter a positive number: ');

end

”tælle” i et while loop

Nogle gange kan det være godt at vide hvor mange gange et while løkke har kørt, et eksempel på dette:

Her bliver det talt hvor mange gange et positivt tal er indtastet, altså hvor mange tal er indtasted intil man indtaster et negativt:

counter = 0;

inputnum = input('Enter a positive number: ');

while inputnum >=0

fprintf('You entered a %d. \n\n',inputnum)

counter = counter+1;

inputnum = input('Enter a positive number: ');

end

fprintf('Thanks, you entered %d positive numbers. \n',counter)

Practice 5,5

numvec = [];

inputnum = input('Enter a negative number: ');

while inputnum <=0

numvec = [numvec inputnum];

inputnum = input('Enter a negative number: ');

end

gen = mean(numvec);

fprintf('the average of inputs was %d',gen)

Error-checking user input in a while loop

Hvis brugeren indtaster et ”forkert” input, skal programmet vende talbage og give brugeren endnu en mulighed for at indtaste det rigtige:

inputnum = input('enter a positive number: ');

while inputnum < 0

inputnum = input('Invalid! Enter a positive number: ');

end

fprintf('Thanks, you entered a %.1f \n',inputnum)

Forloop kontrollerer while

Man kan få en forløkke til at bestemme hvor mange gange et whileløkke skal kører:

n=3

fprintf('enter %d positive numbers\n\n',n)

for i=1:n

inputnum=input('enter positive number: ');

while inputnum < 0

inputnum = input('Invalid! enter positive number: ');

end

fprintf('thanks you entered a %.1f \n',inputnum)

end

denne kører 3 gange

Heltal tjek

Man kan tjekke om et input er et heltal med ”int32(num)” dette afrunder til nærmeste heltal.

Loops med vektore og matricer

Normalt når man vil ændre elementerne i en vektor bruger man for loops:for i:length(vec)

%do something with vec(i)

end

hvis man i en matrice vil ændre på elementerne bruger man ”size” til at opdele i rækker og kolonner:

her er aktionen ønsket for hver række:

[r, c] = size(mat)

for row = 1:r

for col = 1:c

%do something with mat(row,col)

end

end

her er aktionen ønsket for hver kolonne

[r, c] = size(mat)

for col = 1:c

for row = 1:r

%do something with mat(row,col)

end

end

vectorizing sums and products

%hvis jeg har vektoren

v=[3 7 2 11]

%jeg vil nu gøre denne 3 gange større:

for i =1:length(v)

v(i) = v(i)*3;

end

v

%hurtigere måde

v=v*3

Hvis jeg vil finde resultatet af n! (1*2*3…*N)

function runprod = myfact(n);

%returns n!

runprod = 1;

for i=1:n

runprod=runprod*i;

end

end

denne funktion tager tallet ”n” og finder n!

løbende Summen af elementer i vektor

Hvis man vil have summen af elementerne i en vektor løbende kan man bruge cumsum/cumprod (se vektor og matricer”

Summen af hver kolonne i matrice

Hvis man vil have summen af hver kolonne i en matrice kan man bruge:

function outsum = matcolsum(mat)

%finder summen af hver kolonne i en matrice

[row, col]=size(mat);

%prelocate the vector to the number of columns

outsum = zeros(1,col);

%every column is being summed so the outher loop has to be over the columns

for i=1:col

%initialize the running sum to 0 for every column

runsum = 0;

for j =1:row

runsum = runsum+mat(j,i);

end

outsum(i) = runsum;

end

end

”checkcode”

Funktionen ”checkcode” bruges til at give hints om hvor man kan forbedre sin kode

Tidtagning

Hvis man vide hvor lang tid ens kode er til at køre, kan man bruge ”tic” og ”toc”

”tic” skrives før koden og ”toc” skrives efter

Chapter 6 MATLAB Programs (debugging)Funktioner med flere outputs

Funktioner med flere outputs ligner funktioner med 1 output, i at de følger formen:

function[output arguments] = functionname[input arguments]

eks: cirkel regning

function[area, circum] = areacirc(radius)

%giver arealet og omkredsen ud fra radius

area = pi*radius.*radius;

circum = 2*pi*radius;

end

man kalder denne funktion ved:

[a, c]=areacirc(N)

denne funktion giver 2 variabler efter brug.

Eks: remainder efter division

function [hours, minutes, secs] = breaktime(totalseconds)

%nedbryder det indsatte tal i T,min og sekunder

hours = floor(totalseconds/3600);

remsecs = rem(totalseconds, 3600);

minutes=floor(remsecs/60);

secs=rem(remsecs,60);

end

call:

[h, m, s] = breaktime(N)

DebuggingTypes of errors

Der er flere fejltyper, men de kan alle kategoriseres i følgende:

Syntax errors

Runtime errors

Logical errors

Syntax errors

Syntaks fejl omhandler sprog, stavefejl i variabler, komma eller quotation marks

Runtime error

Disse kan fx være hvis man dividerer med 0, i matlab giver dette dog konstanten ”inf”

En anden runtime er hvis man kalder et element i en vektor som ikke findes

Logical errors

Logical errors giver ingen fejlmeldinger og er derfor svære at finde

Dette kan fx være at dividerer i steder for at gange, hvilket giver et resultat som ikke går imod programmet, men derimod fucker med slutresultatet.

Breakpoints

Man kan sætte breakpoints i siden af editor, hvilket får programmet til at stoppe undervejs når man trykker ”run”, dette giver en muligheden for at kunne gå ind og tjekke outputs og mellemregninger.

Chapter 7 String ManipulationCreate string variables

Strings er alt som star mellem ‘ og ‘, fx:

’Hello world’’

En substring er en del af stringen, her ville ’there’ være en substring

Man kan ligeledes bede brugeren om input i streng format:

strvar = input('enter a string: ','s')

Streng som vektor

Når man opsætter en streng, kan man bruge vektor kommandoer på denne, på samme måde som man ville på enhver anden vektor:

str = 'cat'

man kan fx finde:

length(str)=3

str(1)=c

str(2:3)=at

operations on strings

Nyttige funktioner

Floor

Round towards minus infinity

Ceil

Round towards plus infinity

Rem

Remainder after division

Length

Længden af en vektor