INLÄMNINGSUPPGIFT 1 (MATLAB) Linjär algebra och analys

1
INLÄMNINGSUPPGIFT 1 (MATLAB)
Linjär algebra och analys
Kurskod: HF1006/HF1008
Skolår: 2014/15
Due date: Data elektro: 14 okt 2014
tid:8:15-10:00
Medicinsk teknik 13 okt tid 10:15 -12:00
[email protected]
www.sth.kth.se/armin
Individuellt arbete. Använd MATLAB för att lösa dina uppgifter. I nedanstående
uppgifter a, b, c och d är de sista fyra siffrorna i ditt personnummer. Har du t ex pn.
751332 2348 så är a=2 , b=3, c=4 och d=8 som du substituerar i dina uppgifter och
därefter löser dem.
5 labbövningar är schemalagda i första delen ( dvs LinAlg-delen).
Första 3 labbövningar är lärarledda lektioner i Matlab.
De sista två labbövningarna (av 5 i del 1) är avsedda för redovisning av inlupp1.
REDOVISNING.
i) Under kursens gång gör du nedanstående uppgifter 1-13, skriver kommentarer till dina
lösningar, sparar varje uppgift som separat m-fil (script) och redovisar under sista två
(av totalt fem) labbövningar i Lin Alg delen.
ii) Hinner du inte redovisa dina (korrekta) lösningar i tid måste du göra även uppgift 14.
När du gjort färdigt uppgifterna 2-14 bokar du via email en tid för redovisning hos din
klasslärare ( för LinAlg delen).
iii) Du redovisar (med hjälp av din laptop) dina uppgifter genom att förklara dina
lösningar och visa att dina Matlab-koder fungerar. Du behöver inte lämna in någon
pappersversion av lösningen.
iv) Skicka via e-mail m-filerna (med ditt namn och uppgift i filnamn) till din klasslärare
genast efter redovisning
Uppgift 1. ( Denna uppgift ska du göra innan första labbövningen)
A) Ladda ner MATLAB från webbsidan KTH Program Distribution:
http://www.kth.se/student/support/kth-it/mjukvarudistribution/progdist
B)
Starta Matlab och läs Help> Exemples >Getting Started
C) Allmänt: Observera även att kommandot help följt av funktionsnamn ger hjälptext. T.ex
help sqrt
ger hjälpinformation om funktionen sqrt (kvadratroten ur).
Uppgift 2. Testa och förklara hur nedanstående kommandon fungerar.
Gör följande:
1. Öppna File , new, script.
2. Skriv och exekvera kommandona genom att klicka på ► run .
1
2
Tips. Exekvera ofta , efter några kommandon, så att du tidigt upptäcker eventuella fel.
3. Skriv förklaringar efter tecken %. Spara script som Uppgift2 )
4. Slutligen, när allt fungerar, klicka på knappen PUBLISH , ►Publish för att få ett snyggt html- arbetsblad
med kommandon och svar. ( Du kan välja mellan html, doc och pdf-fil i " Edit publishing options " som fins i i
menyn under ►Publish..) ” Publish” finns också som kommando (funktionsanrop).
%% A) ENKLA BERÄKNINGAR
% Anmärkning: Två procenttecken i början av raden definierar ett nytt
avsnitt ("section" )
% Detta är användbart om man vill presentera (" publicera ") arbetet
% eller om man vill exekvera endast ett avsnitt .
clc
% Förklaring: clc= Clear Command Window ,
rensar kommandofönstret
clear
% Förklaring: clear raderar alla variabler
format compact
% tätare utskrift , om man vill
p=5
% p tilldelas värdet 5
q=3
r1=p+q
a=1, b=2 % ( använd a och b från personnummer)
m1=sin(a)+cos( b^3)
m2=log(3)
% ln3
m3=log10(11)
% lg(11)
m4 = sqrt(a+b +23.8)
m5=abs(3*a-57)
s=' Jag studerar '
% s tilldelas text
' Jag studerar '
t= ' på KTH '
v= [s,t]
%% B) VEKTORER (LISTOR) OCH MATRISER (TABELLER)
L=[24 23 45 32 34 21 33]
% definierar en vektor (en numerisk lista)
L(3)
L(3) + 2*L(5)
A=[1 2 3 4; 22 33 44 55; 121 122 123 124]
A(2,3)
A(3,1)
v=5:0.5:8
% Förklaring:
v=a:h:b
skapar vektorn a, a+h,
a+2h, a+3h, ….b
w=7:0.5:10
z=sin(w) % Anmärkning: sin(w) tillämpas elementvis
% Notera att z blir en vektor om w är det.
f=v.*w
% Förklaring Operator
.* står för elementvis multiplikation
: Varje element i x multipliceras med motsvarande element i y. För plus
och minus behövs ej operator för elementvis addition och subtraktion.
g=v.*v
k=v.^2
m=w.^3
n=2*v+3*w
p=cos(v)
%%
C) NÅGRA ENKLA PLOT-exempel
x=0:0.1:4*pi ;
% Om vi avslutar ett kommando med semikolon då exekveras kommandot
% men resultat visas inte på skärmen.
y=sin(x);
figure(1)
% plottar grafen i fönstret figure(1)
plot(x, y)
title('sin(x)')
xlabel('x i radianer');
2
3
ylabel('Funktionens värde');
%%
figure(2)
% plottar grafen i fönstret figure(2)
t=0:0.1:6.28;
z=cos(t);
plot(t , z )
grid on
% rutnät
title('cos(x)')
%% Flera grafer i samma koordinatsystem
figure(3)
% För att plotta flera grafer i samma koordinatsystem ( samma fönster)
% använder vi kommandot "hold on"
x=-2:0.1:2;
y=2*x;
z=sin(x);
plot(x,y)
hold on
plot(x,z)
hold off
%% Ett exempel på
clc
clear
en parametrizerad
kurva
t=0:0.01:2*pi;
x=4*cos(t);
y=3*sin(t);
figure(4)
plot(x,y)
grid on
axis equal %Förklara.
title('Ellipsen med halvaxlarna 4 och 3')
%% Ett exempel på "stem plot"
x = 0:0.1:4;
y = sin(x.^2).*exp(-x);
figure(5)
stem(x,y)
xlabel('Tid')
ylabel('Signal')
Spara script som Uppgift2 (Matlab automatiskt lägger till m som "efternamn").
Dvs, ”Uppgift2.m” blir namnet istället för ”Uppgift2” där ”efternamnet” anger att filtypen
är en Matlabfil, ett s.k. script.
Uppgift 3. Öppna en ny m-fil (File , new, script )
A) Ange ett eget exempel med for … end slinga (loop).
B) Ange ett eget exempel med if…end satsen.
C Ange ett eget exempel med kommandot while.
C) Ange ett eget exempel med kommandot rand.
D) Ange ett eget exempel med kommandot randi.
E) Ange ett eget exempel med kommandot rem
3
4
k + 10
.
2
+1
k =3
Tips. Läs Matlab-hjälp om ovanstående kommandon.
Spara som Uppgift4
22
F) Använd for...end slinga för att beräkna summan
∑k
Uppgift 4.
Öppna en ny m fil (File, new, script ) och skapa lista med N=50+a slumpvalda heltal som
ligger mellan 100+a och 159+b med hjälp av följande kommandon:
clc % (Clear Command Window)
clear
a=1 % du ska ange a-värdet från ditt personnummer
b=2 % du ska ange b-värdet från ditt personnummer
N=50+a
R=randi([100+a, 159+b],1,N) % N slumpvalda heltal mellan 100+a och 159+b.
A) Beräkna summan av alla tal R(i) som uppfyller 120 < R(i ) ≤ 140 .
B) Beräkna summan av alla tal i R som är delbara med 12.
C) Hur många sådana tal (delbara med 12) finns i R?
Tips. Kommandot rem(x, 12) ger resten då heltal x delas med 12.
D) Exekvera och förklara följande plot -kommandot :
hist( R,5)
Anmärkning: Om vi skriver frekv=hist(R,5) så ritas inget histogram; i stället får vi en vektor
"frekv" med frekvenser (för de 5 delintervall av intervallet [Rmin, Rmax] )
Spara script som Uppgift5
Uppgift 5. Symboliska beräkningar.
Med Matlab kan vi utföra symboliska beräkningar inom bl. a. algebra och analys, lösa linjära
ekvationssystem , lösa vissa ickelinjära system samt lösa några typer av
differentialekvationssystem.
Viktig: För att kunna utföra symboliska beräkningar måste vi först deklarera alla ingående
symboliska variabler, (t ex variabler x1 x2 x3 ...) med kommandot syms x1 x2 x3 ...
A) Testa följande exempel:
Exempel 6A
%%
clc
clear
format compact % tätare utskrift
syms x y z
% vi deklarerar att x, y och z är symboliska variabler
f= (x+y+z)*x
% f blir också en symbolisk variabel eftersom den definieras
% med hjälp av x, y och z
f=expand(f)
% utvecklar dvs " expanderar" f
f1=subs(f,x,10) % substituerar x=10 i f
f2=subs(f,[x,y,z],[10,3,-1]) % substituerar x=10 , y=3 och z=-1 i f
%%
syms x
g=(x^2+x)/x
g1=simplify(g)
h=sin(x)
h1=diff(h,x)
% definierar g som funktion av x
% förenklar g
% deriverar h
4
5
h2=int(h,x)
% beräknar
h3=int(h,x,0,pi)
% beräknar
%%
figure(1)
ezplot(h,[-10,10]) % ezplot (Easy to use function plotter) ritar grafen
% till symboliska funktionen h i intervallet [-10,10]
%%
figure(2)
F=x^2+y^2
ezsurf(F, [-1,1],[-2,2]) % Grafen till ytan F=x^2+y^2 där -1<=x<=1 och 2<=y<=2
title('F=x^2+y^2')
xlabel('x-axeln')
ylabel('y-axeln ')
zlabel('F värden')
B) Låt f ( x ) = x sin x . Beräkna f ' ( x ) ,
∫
π
f ( x )dx och
∫ f ( x )dx
samt plotta grafen till f (x )
0
för − 4 ≤ x ≤ 4 .
Uppgift 6. Ekvationer. Linjära och några (enklare) icke linjära ekvationer kan man lösa
med kommandot solve. Alla ingående variabler måste deklareras som symboliska
(t ex syms x y a b)
Testa följande exempel
clc
clear
format compact % tätare utskrift
syms x p q r
ekv1=p*x+q==r
sol1=solve(ekv1,x) % löser ekv1 och ger namn sol1 till lösningen
%Eler, Matlab2010:
ekv1= ’p*x+q=r’
sol1=solve(ekv1,x)
%%
syms x
ekv2=x^2+x+1==0
sol2=solve(ekv2,x)
% en andragradsekvation har 2 lösningar
%%
syms x
ekv2=x^3+1==0
sol3=solve(ekv2,x) % en tredjegradsekvation har 3 lösningar
%%
% Vi har fått tre lösningar som ligger i listan (vektor) sol3.
% Lösningarna kan vi plocka på följande sätt:
x1=sol3(1), x2=sol3(2), x3 = sol3(3)
% Med hjälp av double kan vi få det numeriska värdet av ett tal, t. ex
x2n=double(x2) %ger nummeriska värdet av x2
5
6
Uppgift 7. Ekvationssystem. Kommandot solve kan användas för att lösa linjära och några (
enklare) icke linjära ekvationssystem.
[y1,...,yN] = solve(ekvationer, variabler)
Syntax:
A) Gör följande exempel:
%%
clc
clear
format compact % tätare utskrift
syms x y z
ekv1=x+y+2*z==3
ekv2= 2*x+y+z==4
ekv3=2*x+y+3*z==4
% ett linjärt ekv. system med exakt en lösning
[X,Y,Z]=solve(ekv1,ekv2,ekv3,x,y,z)% löser systemet
S=[X,Y,Z] % lösningen
%%
syms x y
ekv1=x+2*y==5
ekv2= x+2*y==3
%Det är uppenbart att systemet saknar lösning
[X,Y]=solve(ekv1,ekv2,x,y)
S=[X,Y] lösningen
%%
syms x y
ekv1=x+2*y==5
ekv2= x+2*y==5
% ett linjärt ekv. system med oändligt många lösningar
[X,Y]=solve(ekv1,ekv2,x,y)
S=[X,Y] %
%%
% Ett icke linjärt ekv system med två lösningar
syms x y
ekv1=x^2+y==5
ekv2= x^2-y==3
% ett ICKE linjärt ekv. system
[X,Y]=solve(ekv1,ekv2,x,y)% löser systemet
S=[X,Y] % två lösningar: Varje par (X(k), Y(k) med samma index är en
lösning
B) Lös följande linjära ekvationssystem
⎧x + y + z = 6
⎧x + y = 2
⎪
⎪
i) ⎨ x + 2 y + 2 z = 9 ii) ⎨2 x + 2 y = 4 iii)
⎪x + y + 2z = 7
⎪3x + 3 y = 6
⎩
⎩
⎧x + y + z = 3
⎪
⎨x + 2 y + 2z = 5
⎪2 x + 3 y + 3 z = 2
⎩
C) Bestäm skärningen mellan planen x + y + z = 3 och x + 2 y + 2 z = 4
D) Bestäm skärningen mellan planen x + y + z = 3 och linjen ( x, y , z ) = ( 2,4,6) + t (1,1,1) .
Tips. Beskriv linjen med tre skalära ekvationer. lös därefter system med 4 ekvationer (planets
ekvation plus tre linjens ekvationer) .
Uppgift 8. I nedanstående el-krets gäller: V1 =24 volt, V2= 12 volt, R1 =10 ohm, R2=15 ohm
och R3= 20 ohm.
A) Bestäm tre oberoende ekvationer för strömmarna i1, i2 och i3. Tips: Använd Kirchhoffs
lagar.
B) (Matlab) Lös systemet i A, dvs bestäm strömmarna i1, i2 och i3.
6
7
i1
R1
V1
i2
A
B
R2
i3
R3
V2
Uppgift 9.
.
och
Öppna File , new, script ( dvs en ny m-fil) och definiera ( skapa) ovanstående matriser A
och B.
i) Beräkna
A(3,2) +B(1,4) , A+B, AB, BA , AT (transponat till A) , A3 +B4,
det(A) , det(A+B) och (A+B)-1 om A+B är inverterbar.
ii) Bestäm X ur matrisekvationen AX = C–BX , ( välj själv en C matris) Tips. Bestäm
först (papper och penna) ett uttryck för X och därefter beräkna X med Matlab.
Tips: I Matlab skrivs matrisinvers inv(A) och transponat A'.
Uppgift 10. Låt A=(1,2,2), B=(a+2,4,3), C=(a+3,7,3), D=(a+2,4,4) vara fyra punkter i R3.
→
→
→
a) Bestäm vektorerna u = AB , v = AC och w = AD
D
b) Beräkna vinkeln mellan u och v
w
( i både radianer och grader)
C
c) Beräkna arean av triangeln ABC
v
d) Beräkna volymen av pyramiden ABCD
A
Tips.
Skalärprodukten mellan u och v beräknas med dot(u,v),
vektorprodukten mellan u och v beräknas med cross(u,v),
längden av en vektor w beräknas med norm(w).
Uppgift 11.
Definition 1. (Linjär avbildning)
7
u
B
8
En funktion T från Rn (n-dimensionella vektorer) till Rm (m-dimensionella vektorer) säges
vara en linjär avbildning ( linjär funktion eller linjär transformation) om följande två villkor
är uppfyllda
Villkor 1.
T( u + v ) = T( u ) + T( v )
Villkor 2.
T(k u ) = kT( u )
för varje skalär k och alla
.
T ex. rotationen kring origo, spegling i en linje, spegling i ett plan i R3,projektionen av en
vektor på en linje, projektionen av en vektor på ett plan i R3 är linjära avbildningar.
En linjär avbildning från Rn till Rm kan definieras med hjälp av en m × n matris A genom:
r
r
y = Ax .
Exempel:
⎡1 1 ⎤
⎡1 1⎤
r
r
r
r
Låt A= ⎢2 2⎥ . Då är y = Ax dvs y = ⎢2 2⎥ x en linjär avbildning som avbildar
⎢
⎥
⎢
⎥
⎢⎣3 1⎥⎦
⎢⎣ 3 1⎥⎦
r
r
tvådimensionella vektorer x på tredimensionella vektorer y .
⎡1 1 ⎤
⎡3⎤
1
⎡
⎤
r ⎡1 ⎤
r ⎢
Exempelsvis vektorn x = ⎢ ⎥ avbildas på y = 2 2⎥ ⎢ ⎥ = ⎢6⎥
⎢
⎥ 2
⎢ ⎥
⎣ 2⎦
⎢⎣ 3 1⎥⎦ ⎣ ⎦ ⎢⎣5⎥⎦
→
Anmärkning: Eftersom en punkt P tillhörande ortvektor OP har samma koordinater, istället
att säga vektorn (x1, x2,...xn) kan vi säga punkten (x1, x2,...xn).
⎡cos v − sin v ⎤
r
r
Din uppgift. Låt A = ⎢
. Avbildningen y = Ax beskriver rotationen vinkeln v
⎥
⎣ sin v cos v ⎦
3π
.
kring origo. Låt v =
4
A) Bestäm bilderna av punkterna P=(1, 1), Q= (3, a+6), R=(5,3) , (beteckna bilderna med K,
L och M).
B) Rita trianglarna PQR och KLM i samma koordinatsystem.
Uppgift 12.
Definition (Egenvektor och egenvärde)
Låt A vara en kvadratisk matris dvs en matris av typ n × n .
r
Om det finns en nollskild vektor v och en skalär λ så att
r
r
Av = λ v
då kallas
(**)
matrisens egenvektor och talet λ kallas matrisens egenvärde.
r
r
Anmärkning 1. En egenvektor v parallell med sin bild Av (enligt (**) )
r
Anmärkning 2. Nollvektorn 0 godkänns alltså INTE som egenvektor till en kvadratisk
matris A. Däremot talet 0 kan vara ett egenvärde till A. Detta ät fallet om för någon
r
vektor v gäller
r
r
r r
Av = 0 ⋅ v dvs Av = 0
8
9
Anmärkning 3. (Matlab) Egenvärden till en kvadratisk matris A kan vi bestämma med
hjälp av kommandot d=eig(A).
Element i (vektorn) d är matrisens egenvärde.
Egenvektorer kan man få med hjälp av
[V,D] = eig(A)
Kolonner i matrisen i V är matrisens (normerade) egenvektorer, elementen på diagonalen i D
är matrisens egenvärden.
.
Din uppgift. Bestäm egenvärden och motsvarande egenvektorer till
⎡ 0 1 0⎤
⎡0 1 ⎤
ii ) B = ⎢ − 1 2 0⎥ .
i) A = ⎢
⎥.
⎢
⎥
1
0
⎣
⎦
⎣⎢ 1 2 2⎦⎥
iii)Vad är den geometriska tolkningen av de linjer som egenvektorerna bildar i uppgift (i)?
Uppgift 13. Utskriftsformat. Läs hjälpavsnitt i Matlab om fprintf och därefter förklara
följande utskriftsformat:
clc
clear
%% Några exempel med fprintf
R =23.456789876
A=R^2*pi
fprintf('Arean är lika med %20.2f \n',A)
% ovanstående kommandot blandar text och tal i utskriften.
%Skriver ut A med 2 decimaler och totalt 20 platser
% \n betyder att utskrift forsätter i en ny rad
%%
fprintf('Arean är lika med %14.8E \n',A)
%%
fprintf('Om radien R är lika med %8.3f så är cirkelns area lika med %8.3f
\n',R,A)
%%
fprintf(' Radien R= %10.3E. Arean= %10.3E \n',R,A)
%% Komplexa tal och fprintf
z = 2.3000 - 3.4000i;
fprintf( 'z= %s \n' , num2str(z) ) % omvandlar z till textvariabel (string)
Uppgift 14. Extra uppgift. ( Endast för de som inte redovisar i tid uppgifter 1-13)
Kommandot randi([imin, imax],m,n) genererar en matris av typ m × n med slumpvis valda
tal som ligger mellan imin och imax.
A) Skapa en matris med följande kommandon
a=1, b=2
% använd dina parametrar a och b
A=randi([100+a, 200+b],23,44)
B) Bestäm summan av alla tal A(j,k) som uppfyller 130 < A(j,k) < 180.
C) Hur många sådana tal finns?
9