• No results found

Vad˜ar MATLAB ? MATLAB

N/A
N/A
Protected

Academic year: 2022

Share "Vad˜ar MATLAB ? MATLAB"

Copied!
32
0
0

Loading.... (view fulltext now)

Full text

(1)

MATLAB

Vad ¨ ar MATLAB?

• En kalkylator f¨or linl¨ar algebra.

• Ett programspr˚ak liknande t.ex Java.

• Ett grafiskt verktyg.

(2)

ar anv¨ ands MATLAB?

N˚agra exempel:

• F¨or sm˚a ber¨akningar n¨ar en r¨aknedosa inte riktigt r¨acker till.

• F¨or litet st¨orre ber¨akningar.

• Vid utveckling av st¨orre program. Man kan skriva prototypprogram som man sedan

¨

overs¨atter till Java etc.

(3)

< M A T L A B >

Copyright 1984-1999 The MathWorks, Inc.

Version 5.3.0.10183 (R11) Jan 21 1999

To get started, type one of these: helpwin, helpdesk, or demo.

For product information, type tour or visit www.mathworks.com.

>> 2+4

ans =

6

3

(4)

ans =

32

ans =

20

>>

4

(5)

Aritmetiska operationer

I prioritetsordning 1. ^ upph¨ojt till 2. * multiplikation

/ h¨ogerdivision

\ v¨ansterdivision 3. + addition

- subtraktion

Alla operationer utf¨ors med flyttalsaritmetik.

Matematiska funktioner

abs(x), sign(x), sqrt(x), sin(x), besselj(n,x), ...

(6)

Datatyper

Grundl¨aggande datatyp ¨ar matriser med reella eller komplexa element. Variabler ”f¨ods” i det

¨

ogonblick man tilldelar dem ett v¨arde.

Ex.

>> a=1 a =

1

>> z=sqrt(-25) z =

0 + 5.0000i

Normalt visas bara fem v¨ardesiffror, men matlab r¨aknar alltid med ungef¨ar 15

v¨ardesiffror. F¨or att se dessa skriver man

>> format long

>> pi ans =

3.14159265358979

format short ˚aterst¨aller till visning av fem siffror.

(7)

Matriser och vektorer skrivs med hakparenteser och semikolon.

>> A=[1 2;3 4]

A =

1 2

3 4

Varje tilldelning skrivs ut p˚a sk¨armen, om inte raden avslutas med ;

S˚a h¨ar kommer man ˚at matriselement:

>> A(2,2) ans =

4

Elementen i en matris numreras kolumnvis:

>> A(3) ans =

2

(8)

Matriser allokeras dynamiskt. D¨arf¨or kan man skriva

>> A(3,3)=5 A =

1 2 0

3 4 0

0 0 5

Utrymme f¨or de nya elementen skapas.

Dynamisk allokering ¨ar tidskr¨avande. Stora matriser b¨or d¨arf¨or p˚a n˚agot s¨att initieras till r¨att storlek. Ex.

>> B=zeros(1000,200);

Detta skapar en matris av storleken 1000 × 200 med nollor.

En f¨oljd av heltal kan enkelt skapas med

”:”-notationen:

>> serie=3:8 serie =

3 4 5 6 7 8

(9)

Matrisoperationer

Genom ”:”-notationen kan man komma ˚at delar av en matris. Ex.

>> A(:,1) ans =

1 3 0

>> A(2:3,2:3) ans =

4 0

0 5

En matris transponeras med ’ :

>> A’

ans =

1 3 0

2 4 0

0 0 5

(10)

De aritmetiska operationerna ¨ar definierade enligt r¨aknereglerna fr˚an linj¨ar algebra.

V¨ansterdivision \ anv¨ands f¨or att l¨osa linj¨ara ekvationssystem

Ax = b F¨or att l¨osa

 1 2 3 4

 x =

 3.3 4.5

kan man skriva

>> A=[1 2;3 4];

>> b=[3.3;4.5];

>> x=A\b x =

-2.1000 2.7000

(11)

Andra matrisoperationer

>> size(A) ans =

2 2

ger antalet rader och kolumner i A.

>> length(x)

ger l¨angden av x, eller den st¨orsta dimensionen om x hade varit en matris.

Fler exempel

>> eig(A), det(A), rank(A), cond(A), ...

>> norm(A), LU(A), expm(A), ...

(12)

Att skapa matriser

Nya matriser kan skapas p˚a flera olika s¨att. Ex:

>> ones(m,n)

ger en m × n-matris med ettor.

>> eye(n)

ger enhetsmatrisen av ordning n.

Vektorer kan skapas med linspace.

>> x=linspace(a,b,n)

ger en radvektor med n j¨amnt f¨ordelade tal i intervallet [a, b].

Funktioner kan operera p˚a vektorer och matriser:

>> y=sin(linspace(0,2*pi,125))

ger en vektor y inneh˚allande sinus av 125 j¨amnt f¨ordelade vinklar i intervallet [0, 2π].

(13)

Programmering i MATLAB

MATLAB-kommandon kan lagras i en

kommandofil, med suffixet .m De flesta satser i t.ex C++ eller Java har motsvarigheter i

MATLAB.

Kommandofilen k¨ors genom att man skriver dess namn p˚a kommandoraden.

>> mittprog

k¨or filen mittprog.m.

Variabler som anv¨ands i en kommandofil finns kvar i den globala arbetsarean efter att

programmet har k¨orts.

(14)

if-satsen

% Om alla element i f¨orsta kolonn

% i A ¨ar noll, ta bort kolonnen if abs(A(:,1)) < eps

A = A(1:end,2:end);

end

if-satsen kan kombineras med else och elseif enligt

if ...

...

elseif ...

...

else ...

end

(15)

Relationsoperatorer

Relationsoperatorerna i matlab ¨ar:

skrivs¨att betydelse

== =

~= 6=

< <

<=

> >

>=

Dessa operatorer j¨amf¨or element och returnerar 0 eller 1 beroende p˚a om j¨amf¨orelsen ¨ar sann eller falsk.

(16)

Repetitionssatser

I matlab finns for- och while-konstruktioner, for k=1:10 % Varning f¨or i och j

...

end eller

for k=1:2:9 % k antar v¨ardena 1, 3,

% 5, 7, 9 ...

end

eller helt enkelt for k=v

...

end

om v ¨ar en radvektor inneh˚allande de v¨arden k skall anta.

(17)

for-slingan kan avslutas med break for k=1:1000

if errorval break end

end

while fungerar som:

% s˚a l¨ange a<=b och c ¨ar skilt fr˚an d while (a<=b & c~=d)

...

end

(18)

Funktioner

Funktionesfiler kan definieras. En enkel funktionsfil kan se ut som

function y =minfunk(x)

% MINFUNK ber¨aknar ’minfunk’ av

% elementen i x.

y = sin(2*x)+cos(2*x);

Variabler som av¨ands i funktioner ¨ar lokala, dvs de ”lever” inte utanf¨or funktionen.

Motsatsen g¨aller ocks˚a.

L˚anga rader

L˚anga rader kan brytas med ...:

sum1 = sum1 + 0.5*(a + b)*...

linspace(a,b,n) + c*d/(k + l + m);

(19)

Glesa matriser

Antag att vi vill arbeta med en tridiagonal matris A av storleken 1000 × 1000 element.

Lagring av alla dessa element skulle kr¨ava 1000 × 1000 × 8 byte = 8 Mb, men bara ungef¨ar 300 av dessa ¨ar nollskilda.

MATLAB:s glesa format sparse g¨or det m¨ojligt att bara lagra de nollskilda elementen i A.

N˚agra anv¨andbara kommandon:

>> spalloc(m,n,nzmax)

Allokerar en gles m × n matris med plats f¨or nzmax nollskilda element.

>> sparse(A)

ger den glesa representationen av A.

(20)

Ex.

>> u=[1 2 4];v=[2 3 5];a=[2.2 3 3i];

>> sparse(u,v,a)

ans =

(1,2) 2.2000

(2,3) 3.0000

(4,5) 0 + 3.0000i

skapar en gles matris. Elementet p˚a plats ui, vi

¨

ar ai.

e = ones(n,1);

A = spdiags([e -2*e e], -1:1, n, n);

skapar den glesa representationen av den

klassiska andra ordningens differensoperatorn i N punkter (Moment i senare delen av kursen)

>> full(A)

ger den fulla ”representationen” av A.

(21)

Effektiv programmering

I st¨allet f¨or for

I m˚anga fall ¨ar det l¨ampligt att ers¨atta for-satser med vektoroperationer.

Ex: Antag att vi har en vektorf med v¨arden f = (f1, f2, f3, . . . , fn)

Vi vill ber¨akna f1 + 2f2 + . . . + 2fn−1 + fn. F¨oljande tv˚a s¨att ¨ar i princip ekvivalenta:

% metod 1:

tmp = f(1);

for k = 2:n-1

tmp = tmp + 2*f(k);

end

sum = tmp + f(n);

(22)

Den andra metoden baseras p˚a observationen att summan kan skrivas som en skal¨arprodukt mellan tv˚a vektorer.

sum = (1, 2, 2, . . . , 2, 1)









f1

f2

... fn−1

fn









% metod 2:

sum = [1 2*ones(1,n-2) 1]*f’;

% observera ’-tecknet

I de flesta fall ¨ar operationer av den andra typen att f¨oredra, d˚a de exekveras mycket fortare ¨an for-slingor.

(23)

.-notation

matlab:s s˚a kallade punktnotation ¨ar mycket anv¨andbar. Punktnotation f˚ar operatorer att verka p˚a matriser och vektorer elementvis. Ex:

prod1 = A^2 %matrisprodukten A*A prod2 = A.^2 %ger matrisen {aij^2}

Ex: Antag att vi har ett antal punkter p˚a x-axeln lagrade i vektorn x. Dessutom har vi koordinaterna f¨or e n punkt (x0, y0). Ber¨akna avst˚anden mellan (x0, y0) och alla punkterna i x.

%Pythagoras sats:

dist = sqrt((x-x0).^2+y0^2);

Resultatet av operationen ¨ar en vektor avst inneh˚allande de intressanta avst˚anden. ¨Aven punktnotation u tf¨ors mycket snabbare ¨an en motsvarande for-konstruktion.

(24)

Ett sl˚ aende exempel

Betrakta f¨oljande funktion som ber¨aknar sinus av en vektor p˚a tre olika s¨att

function [x,y,z]=sinvec(v)

for k=1:length(v) x(k)=sin(v(k));

end

y=zeros(size(v));

for k=1:length(v) y(k)=sin(v(k));

end

z=sin(v);

(25)

Med profile-verktyget, kan man m¨ata prestanda f¨or funktionsfiler. Ett anrop av sinvec med en vektor av l¨angd 20 000 gav f¨oljande resultat:

100% of the total time was spent on lines:

[4 9 5 10 12 7]

3: for k=1:length(v) 86.27s, 94% 4: x(k)=sin(v(k));

0.68s, 1% 5: end 6:

0.20s, 0% 7: y=zeros(size(v));

8: for k=1:length(v) 3.47s, 4% 9: y(k)=sin(v(k));

0.44s, 0% 10: end 11:

0.27s, 0% 12: z=sin(v);

(26)

Hur man skriver effektiva program

• Skriv p˚a h¨og abstraktionsniv˚a

Behandla matriser som ”vilka variabler som helst”

Anv¨and .- och :-anrop.

• Anv¨and sparse formatet f¨or att lagra glesa matriser.

• Unders¨ok funktioner med profile-verktyget.

• Skriv hj¨alptext till dina funktioner.

• Kommentera dina program.

• Kommentera dina program.

Oavsett hur smart en algoritm var n¨ar den en g˚ang skrevs blir den v¨ardel¨os n¨ar ingen l¨angre minns vad den var till f¨or eller hur den

fungerade. (”en g˚ang”=f¨orra veckan).

(27)

Grafik

>> plot(v)

ritar v¨ardena i vektorn v som funktion av index.

>> plot(x,y)

Ritar y som funktion av x. x och y m˚aste vara lika l˚anga.

>> mesh(A)

ritar v¨ardena i matrisen A som h¨ojden ovanf¨or en rektangel.

>> surf(A)

ritar matrisen A som en ytgraf.

mesh och surf kan ocks˚a anv¨andas med argument som specificerar nodernas x- och y-koordinater.

(28)

>> hold on

G¨or att man kan rita flera kurvor i samma ritomr˚ade utan att de gamla raderas.

>> axis([xmin xmax ymin ymax])

S¨atter om axelskalorna s˚a att de l¨oper mellan xmin och xmax samt ymin och ymax.

>> title(’Min graf’); xlabel(’x-axel’);

>> ylabel(’y-axel’)

anger titel och namn p˚a axlarna.

>> legend(’Kurva 1’,’Kurva 2’)

L¨agger in en liten ruta med f¨orklarande text till kurvorna i ett ritomr˚ade.

(29)

>> print -dps min_graf.ps

skapar en PostScript-fil inneh˚allande aktuell figur. Filen kan skrivas ut som vanligt:

$ lp -d pr2446 min_graf.ps

>> figure

skapar en ny figur.

>> figure(n)

g¨or figur nr. n till aktuell figur.

>> clf

t¨ommer grafikf¨onstret

(30)

Interaktivt arbete med MATLAB

N˚agra sm˚a tips

Piltangent upp˚at ˚aterkallar tidigare kommando.

pl ˚Aterkallar senaste kommandot vars namn b¨orjade med ”pl”.

format Minskar mellanrummet compact mellan svarsraderna.

ctrl-c Avbryter exekveringen av ett kommando eller en .m-fil, men stoppar inte matlab.

(31)

>> clear

raderar alla variabler.

>> who

visar alla definierade variabler.

>> whos

visar alla definierade samt deras storlekar.

>> help kommando

ger hj¨alptext f¨or kommando.

>> lookfor ord

Ger en lista ¨ovre alla kommandon d¨ar ord f¨orekommer i beskrivningen.

Kom ih˚ag att allt som g¨ors i en kommandofil p˚averkar den globala arbetsarean.

(32)

Enstaka programrader testas enkelt genom

kopiering och klistring mellan terminalf¨onstren.

Utvecklingsmilj¨ o

Det finns ett editerings/fels¨okningsverktyg som kan startas genom att man skriver

>> edit minfunk

Verktyget g¨or det m¨ojligt att f¨olja

exekveringsg˚angen, s¨atta brytpunkter, kolla v¨ardet p˚a variabler osv.

References

Related documents

Vektorer används ofta för att spara serier av värden, t.ex. en serie

Vill man att funktionen skall klara elementvisa kalkyler (som i de flesta fall i denna kurs) måste man använda ”punk- terade operationer” (dvs. Om en viss anonym funktion saknar

Öppet vattenområde där bro får uppföras med en segelfri höjd på minst 2 meter inom en farledsbredd av minst 3 meter.. Öppet vattenområde där bro, bryggor och

ningar av dcn lokala faunan kan vara av stort intresse och ge lika stor tillfredsstallelse sonl att aka land och rikc runt pa jakt cftcr raritctcr till den privata

Liksom de övriga är den uppförd av kalksten samt putsad med undantag för omfattningar av huggen

[r]

[r]

[r]