TAIU07 Föreläsning 2
• Index.
• Vektorer och Elementvisa operationer. Summor och Medelvärden.
• Grafik i två eller tre dimensioner. Ytor.
20 januari 2016 Sida 1 / 26
Matriselement och Index
För att manipulera enskiljda element i en matris anger man dess
index.
Exempel Antag att vi har en 2 × 3 matris A. Elementet a23 skrivs ut till
skärmen genom:
>> A = [ 1 2 3 ; 2 3 4 ];
>> disp( A(2,3) )
Man kan ändra elementet a12 genom att skriva
>> A(1,2)=5;
20 januari 2016 Sida 2 / 26
Exempel Fibonacci talföljden definieras som F1 = F2 = 1 och
Fn = Fn−1 + Fn−2 för n = 3, 4, . . .
Bilda en vektor F som innehåller de första 5 st Fibonacci talen.
>>
>>
>>
>>
F=[1 1];
F(3)=F(2)+F(1);
F(4)=F(3)+F(2);
F(5)=F(4)+F(3)
F =
1
1
2
% n=3
% n=4
% n=5
3
5
Kommentar Detta är inte särskilt effektivt. Vektorn F utökas med ett element
vid varje beräkning. Enklare med en for-loop.
20 januari 2016 Sida 3 / 26
Exempel Vi kan titta på flera index samtidigt i en vektor. I Matlab
>> x = [ 1 2 3 4 5 6 ];
>> y = x( [1 5 2 ] )
y =
1
5
2
Vi får alltså en vektor y = (x1 , x5 , x2). Detta är ofta användbart.
20 januari 2016 Sida 4 / 26
För att skriva ut en hel rad används : notation
>> disp( A(2,:) )
Hela rader eller kolumner kan även ingå i tilldelningssatser. Skriv
>>
>>
[n,m]=size(A);
A(2,:) = ones(1,m);
så byts hela raden ut mot ettor. Dimensionerna måste stämma.
Exempel Addera första raden i en matris till den tredje raden.
20 januari 2016 Sida 5 / 26
Exempel Låt A vara en matris. Vi vill byta plats på raderna med index 2 och 3.
I Matlab
>> A = [ 1 3 -2 ; 0 2 3 ; 4 -1 5]
A =
1
3
-2
0
2
3
4
-1
5
>> A([2 3],:) = A([3 2],:)
A =
1
3
-2
4
-1
5
0
2
3
20 januari 2016 Sida 6 / 26
Räkna med matriser eller vektorer
Exempel Vi skapar två matriser A och B och beräknar en matris produkt
>>
>>
>>
>>
A = rand(5,3);
B = ones(4,5);
C = B*A;
[n,m]=size(C)
ger n = 4 och m = 3.
Hur räkneoperationer mellan matriser och vektorer definieras
ingår i Linjär algebran.
20 januari 2016 Sida 7 / 26
Elementvisa räkneoperationer
Ofta vill man utföra beräkningar elementvis. Använd då +, -, .*,
./, och .^
Exempel kommandona
>> x = 0:0.1:1;
>> y = (1+exp(x))./(1+x.^2);
skapar en vektor y ∈ R11 med exempelvis x(3)=0.2000 och
y(3)=2.1360.
1 + e0.2
≈ 2.1360.
2
1 + 0.2
Standardfunktioner som sin, cos, etc utförs elementvis!
20 januari 2016 Sida 8 / 26
Operationer på Vektorer
För att hitta största eller minsta element i en vektor finns
funktionerna max och min. Exempelvis gäller att om
>> [m,k]=max( x );
så sätts m till det största elementet i vektorn x och x(k) = m.
Skriver man istället
>> m=max( x );
så hittas endast det största värdet.
I Matlab skriver vi
>> x = [ 4 2 -2 7 1 ];
>> [m,k]=max( x );
ger m = 7 och k = 4 då x(4) = 7.
20 januari 2016 Sida 9 / 26
Exempel Betrakta funktionen f (x) = 2e−x/7 − 7 sin(4x) på intervallet
0 ≤ x ≤ π. Vid vilket x-värde antar funktionen sitt minimum?
20 januari 2016 Sida 10 / 26
Funktionen sum beräknar summan av elementen i en vektor.
Exempel Summan
S=
100
X
k=1
k
,
2
1+k
beräknas i Matlab med
>> N = 100; k = 1:N;
>> S = sum( k./(1+k.^2) )
S =
4.5156
Kommentar Vi väljer variabel namn, dvs k och S, som stämmer överens med
den matematiska formuleringen av uppgiften.
20 januari 2016 Sida 11 / 26
Exempel Vi vet att
x3 x5 x7
arctan(x) = x − + − + . . .
3
5
7
√
och att arctan( 2 − 1) = π/8.
Tag med de första N = 100 termerna i summan och utnyttja detta för att
beräkna en approximation av π.
20 januari 2016 Sida 12 / 26
Funktionen mean beräknar medelvärdet av elementen i en vektor.
Exempel I statistik definieras standard avvikelsen som
n
n
X
X
1
1
2
2
(xi − m) ,
m=
xi .
S =
n−1
n
i=1
i=1
Skapa en vektor med n = 100 likformigt fördelade slumptal på intervallet [0, 1]
och beräkna dess standardavvikelse.
Kommentar Standardavvikelsen kan även beräknas med funktionen std.
20 januari 2016 Sida 13 / 26
Grafik i 2D
För att rita kurvor i 2D finns kommandot plot. Skriver vi
>> plot( x , y )
så skapas en figur och punkterna (x1, y1), (x2, y2), . . . , (xn, yn)
sammanbinds med räta linjer.
Exempel Skriv
>> x = [ 1 2 4 5];
>> y = [ 3 2 2 4];
>> plot( x , y );
Punkterna (xk , yk ) sammanbinds med räta linjer. Linjetyp kan anges:
>> plot( x , y , ’r--’ );
ger röd streckad linje. Se help plot.
20 januari 2016 Sida 14 / 26
Exempel Rita en graf över funktionen y = arctan(x) på intervallet −2 < x < 2.
I Matlab skriver vi:
>> x = -2:0.5:2;
>> y = atan(x);
>> plot( x,y,’b-’,x,y,’r+’);
Kommentar När vi skall skriva flera kommandon som tillsammans för att
löser en uppgift är det praktiskt att använda Matlabs editor. Skapa en fil med de
kommandon du behöver och kopiera dem till kommandofönstret för att se
resultatet.
20 januari 2016 Sida 15 / 26
1.5
1.5
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
−1.5
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
−1.5
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
För att få en “jämnare” kurva måste vi välja fler punkter (xk , yk ).
Till vänster samma kurva med med x=-2:0.01:2.
20 januari 2016 Sida 16 / 26
Efter att en graf ritats upp kan vi lägga till en titel och namnge
koordinataxlarna med hjälp av title, xlabel och ylabel.
Exempel Efter att grafen f (x) = arctan(x) har ritats upp skriver vi
>> xlabel(’x’)
>> ylabel(’y=arctan(x)’)
>> title(’Funktionskurvan y=f(x)’)
För att det skall se bra ut i tryck måste man ofta anpassa textstorleken. Exempel
>> xlabel(’x’,’FontSize’,14)
Kommentar Tecknet ’ betyder start, respektive slut, på en textsträng.
Texthantering återkommer senare.
20 januari 2016 Sida 17 / 26
Exempel Rita en graf över funktionen y = cos(x)/(1 + x2) på intervallet
0 < x < 1.
I Matlab skriver vi:
>> x = 0:0.05:1;
>> y = cos(x)./(1+x.^2);
>> plot(x,y);
Observera att elementvis ./ och .^ måste användas. Vi kan namnge
koordinataxlarna med
>> xlabel(’x’);
>> ylabel(’y’);
20 januari 2016 Sida 18 / 26
Exempel Vi vill studera funktionen f (x) = 2 + ex(1 − cos(2x + 1)) − x3 på
intervallet [−1, 1].
Rita därför funktionskurvan samt markera tydligt var funktionen har sitt
minimum.
5
4.5
4
3.5
y
3
2.5
2
1.5
1
0.5
0
−1
−0.8
−0.6
−0.4
−0.2
0
x
0.2
0.4
0.6
0.8
1
Vilka MATLAB kommandon behövs?
20 januari 2016 Sida 19 / 26
För att rensa grafik fönstret används clf. Vill man rita flera
kurvor i samma fönster används hold on. Avsluta med hold
off.
Exempel Rita två funktionskurvor i samma figur med
>>
>>
>>
>>
>>
clf
plot( x , cos(x) ,’r’ )
hold on
plot( x , sin(x).^2 , ’b--’ )
hold off
Kommentar Plottning i MATLAB är svårt. Läs hjälptexten för plot, axis,
och print.
20 januari 2016 Sida 20 / 26
Utskrifter
Vill man skriva ut en figur skall kommandot print användas.
Man väljer då ett format och ett filnamn.
Exempel Skriver man
>> print -depsc bild.eps
Skrivs bilden ut i formatet postscript till en fil med namnet bild.eps.
Skriver man istället
>> print -djpeg bild.jpg
så fås en bild i jpeg format. See help print.
20 januari 2016 Sida 21 / 26
Funktionsytor i 3D
En funktion z = f (x, y) beskriver en yta i R3. För att rita upp ytan behöver vi
ett antal punkter (x, y, f (x)). Punkterna måsta vara lagrade som tre matriser X,
Y och Z där
Z(i,j) = f( X(i,j) , Y(i,j) );
För att rita upp ytan behöver vi göra följande:
1. Välj lämpliga x- och y-koordinater och lagra dem i två vektorer x och y.
2. Skapa utgående ifrån x och y två matriser X och Y.
3. Beräkna Z matrisen som skall innehålla funktionsvärden zij = f (xi, yj).
4. Rita upp ytan.
De kommandon vi behöver är meshgrid och antigen mesh eller
surf. Läs hjälp texten.
20 januari 2016 Sida 22 / 26
Exempel Skriv de MATLAB kommandon som behövs för att rita upp
Rosenbrock funktionen
f (x, y) = (1 − x)2 + 100(y − x2)2,
som ofta används som exempel på en funktion som är besvärlig att arbeta med
inom optimeringsläran. Vi är intresserade av området −2 < x < 2 och
−1 < y < 3.
Välj först x- och y-koordinater:
>> n=100;
>> x=-2+4*(0:n-1)/(n-1);
>> y=-1+4*(0:n-1)/(n-1);
Skapa matriser som innehåller alla punkter på rätt format:
>> [X,Y]=meshgrid(x,y);
20 januari 2016 Sida 23 / 26
Vi måste nu beräkna funktionens värden i punkterna
>> Z=(1-X).^2+100*(Y-X.^2).^2;
där .∧ anger att exponenten beräknas elementvis. Vi ritar slutligen upp ytan
med kommmandot
>> mesh(X,Y,Z)
3000
2500
2000
1500
1000
500
0
3
2
2
1
1
0
0
−1
−1
−2
20 januari 2016 Sida 24 / 26
Exempel Rita upp en triangel med hörn i punkterna (0, 1)T , (2, 2)T och (3, 0)T .
20 januari 2016 Sida 25 / 26
Sammanfattning
Vi kan nu
• använda Matlab för att räkna med matriser och vektorer.
• beräkna summor, medelvärden och hitta max eller min i en vektor.
• visualisera funktionskurvor i 2D med plot.
•
Nu skall vi tillämpa detta på första laborationsuppgiften!
20 januari 2016 Sida 26 / 26