Linjär algebra med tillämpningar, lab 1

Linjär algebra med tillämpningar, lab 1
Per Jönsson
Fakulteten för Teknik och Samhälle, 2013
Innehåll
Uppgifterna i denna laboration täcker kapitel 1-3 i läroboken. Läs igenom motsvarande kapitel.
Sitt vid datorn och kör bokens exempel. Viktiga begrepp som tas upp på labben är:
• samla kommandon i M-filer
• arbeta i olika kataloger
• aritmetiska operationer
• matematiska funktioner, anonyma funktioner
• variabler och tilldelningssatser
• inläsning och utskrift till skärmen
• inläsning och utskrift till fil
• utskriftsformat
Instuderingsuppgifter
Följande instuderingsuppgifter till boken skall vara skriftligen besvarade vid labtillfället.
Instuderingsuppgifter
1. Vad är en M-fil?
2. Hur kör man en M-fil?
3. Hur tolkar Matlab text som skrivs efter %-tecknet?
4. Vilket kommando ger man för att ändra arbetskatalog till C:\lab1?
5. Vad menas med att ett tal är på exponentform? Skriv 8.01 × 104 och 2.05 × 10−2 på
exponentform.
6. Vid en beräkning har Matlab skrivit ut talet 2.2026e+004. Hur tolkar du detta? Skriv
talet med hjälp av tiopotenser.
7. Vad står Inf och NaN för?
8. Vilka är kommandona för att få de trigonometriska funktionerna i grader istället för
radianer?
1
9. Hur inför och använder man anonyma funktioner? Ge ett exempel på en anonym funktion.
10. Vad är en variabel?
11. Vad är en tilldelningssats?
12. Vilken effekt har ett semikolon ; i slutet av en kommandorad?
13. Vad skriver man för att se vilka variabler som är definierade?
14. Hur raderar man alla variabler från datorns minne?
15. Hur skriver (sparar) man variabler till en fil?
16. Hur läser man variabler från en fil?
Datoruppgifter grundläggande del
1. Linjära ekvationssystem är användbara i många
temet

 x + 2y + z
2x + 5y − 3z

3x + 4y − 7z
sammanhang. Det linjära ekvationssys= 1
= 4
= 0
löses genom att lagra koefficienterna framför x, y och z i en matris A (vi kan använda
vilket namn som helst på matrisen) där semikolon separerar de olika raderna
A = [1 2 1 ; 2 5 -3 ; 3 4 -7]
Sedan lagrar man högerledet i en matris b
b = [1 ; 4 ; 0]
Lösningen fås genom att skriva (notera att snedstrecket lutar åt vänster!)
x = A\b
och Matlab svarar
x =
-2.4500
1.7500
-0.0500
Lösningen är lagrad i en variabel x. För att få lösningen på rationell form ger vi kommandona
format rat
x
2
vilket ger
x =
-49/20
7/4
-1/20
För att ställa tillbaka utskrifterna till decimaltal ger vi kommandot
format short
Lös ekvationssystemet


2x − 2y + 2z = 1
x − 2y + z = 2

−3x + 2y + z = 1
för hand och visa uträkningen på labben. Lös sedan systemet med Matlab och
omvandla lösningen till rationell form. Kontrollera att det blev rätt. Ställ sedan tillbaka
så att tal visas i decimalform.
2. (a) Aktivera editorn i Matlab eller Octave och skriv in kommandona i exempel 1.5 i
läroboken. Var noga så att det inskrivna blir exakt som det står i exemplet. Text efter
%-tecknet behöver inte skrivas in. Spara M-filen som summa.m. Kör M-filen genom att
skriva summa i kommandofönstret.
(b) Gå in i editorn igen och ändra så att summan s = 1 + 2 + . . . + 100 beräknas.
Observera att du måste spara ändringen i M-filen genom att på nytt klicka på disketten
i verktygsfältet. Kör M-filen genom att skriva summa i kommandofönstret. Kontrollera
att den beräknade summan blev rätt. Skriv ner och visa hur du beräknar summan
för hand. Titta här om du glömt hur man beräknar summan
http://www.matteboken.se/lektioner/matte-1/tal/aritmetiska-talfoljder
3. Skriv följande matematiska uttryck i Matlab .
(a) 2.6 × 1018
√
(b) e−2 tan( 5)
(c) ln(6)
(d) sin2 (π/2)
(e) sin((π/2)2 )
(f) 51/3
(g) log10 (8)
(h) e−|
(i) sin(45o )
(j) arcsin(1/2)
√
6−11/5|
4. Använd prioritetsreglerna i avsnitt 2.2 för att bestämma vilka värden man får från följande uttryck. Skriv ner och förklara hur du räknade ut värdena. Du skall inte köra
Matlab eller Octave utan skriva ned och förklara hur man tolkar uttrycken.
Du skall visa upp det handräknade svaret! Du inser genom denna övning att det
är viktigt att använda parenteser vi beräkningar på dator. Misstag med parenteser är
en av de viktigaste misstagen vid programmering.
(a) 4/2*3
(b) 5/4/5*6
(c) (5/4)/(5*2)
(d) 9^1/2
(e) 9^(1/2)
(f) 2*3/2^2
3
5. I många tillämpningar behöver man bestämma vinkeln θ mellan vektorn (x, y) och xaxeln. Rita in vektorerna nedan i ett koordinatsystem. Bestäm sedan vinkeln i grader med hjälp av miniräknare. Kontrollmät med gradskiva. Du skall visa upp dina
räkningar på labben. Har du glömt hur man gör beräkningen studera då kapitel 10 i
Överbryggningskurs i matematik del I som ligger på it’slearning. Kontrollera dina värden genom att använda kommandot atan2(y,x). Vinkeln från atan2 ges i radianer.
Omvandla vinkeln till grader. Obs, obs, när du använder atan2 skall y-koordinaten
skrivas in före x-koordinaten.
(a) (x, y) = (−1, 1)
(b) (x, y) = (
√
3 1
2 , 2)
(c) (x, y) = (3, 7)
(x,y)
θ
Figur 1: Vektor med komponenter (x, y).
6. Vinklar kan mätas i radianer, grader och gon (nygrader). Ett varv motsvaras av 400
gon. Inom lantmäteriet och även byggsektorn använder man gon och i kursen Markbyggnad/mätningsteknik kommer du att arbeta vidare med detta vinkelbegrepp. Använd
anonyma funktioner och definiera sinus- och cosinusfunktioner där argumenten ges i
gon. Du kan lämpligen kalla dina funktioner sing och cosg. Testa dina funktioner och
verifiera att sinusvärdet och cosinusvärdet för 100 gon blir 1 respektive 0.
sin(x)
. Verifiera numeriskt att f (x) → 1
7. Använd anonyma funktioner och definiera f (x) =
x
då x → 0 genom att beräkna funktionsvärdet för x = 0.1, 0.01, 0.001, 0.0001, 0.00001.
8. Beskriv med ord hur Matlab eller Octave uppfattar kommandot
x = 2*x
Om talet 2 ligger lagrat i x förekommandot, vilket värde ligger lagrat i x efter kommandot?
9. Skriv följande M-fil
x = input(’ Ange ett värde på x
y = sqrt(x);
disp(’ Roten av x-värdet är ’)
disp(y)
’)
Spara den som test.m. Kör M-filen genom att skriva test vid kommandopromptern.
Skriv sedan in ett värde på x. Vad händer om man skriver in ett negativt värde?
4
10. Vi har 10 observationer enligt nedan
x
x
1.0184
−1.2344
−1.5804
0.2888
−0.0787
−0.4293
−0.6817
0.0558
−1.0246
−0.3679
Skriv ett program som ber dig mata in datavärdena med hjälp av kommandot input
och som lagrar värdena i en vektor med namn x. Vidare skall ditt program beräkna
medelvärde, median och standardavvikelse av de inmatade data. Resultat skall skrivas ut
snyggt och prydligt med förklarande text och med användande av kommandot fprintf.
Medelvärde, median och standardavvikelse skall skrivas ut med två decimaler.
11. I Matlab och Octave måste kunna spara arbetsdata till fil. På samma sätt måste man
enkelt kunna läsa in data som ligger lagrade på fil. Detta görs med kommandona load
and save.
Mata in talen x = 2 och y = 5. Använd kommandot save och spara x och y i en binär fil
med namnet variabler.mat. Radera variablerna genom att använda kommandot clear
all. Läs in x och y med kommandot load och kontrollera att du fick tillbaka dina
ursprungliga variabler.
Datoruppgifter fördjupningsdel
1. Att kunna beräkna kvoten resten vid heltalsdivision är användbart i många praktiska
sammanhang.
Betrakta heltalsdivisionen 16
5 . Kvoten är 3 och fås i Matlab genom floor(16/5). Resten
vid divisionen är 1 och fås som mod(16,5). Betrakta heltalsdivisionen 138
7 . Kvoten är
19 och fås i Matlab genom floor(138/7). Resten vid divisionen är 5 och fås som
mod(138,7) ( se vidare exempel 2.3 (e) i Matlabboken). Använd kvot och rest för att
lösa nedanstående uppgift
Murstenar till ett bygge kommer på lastpallar med lastbil. En lastbil tar 20 pallar och
varje pall innehåller 1440 stenar. Till bygget behövs 130 000 stenar. Hur många fulla
lastbilar, överblivna pallar och lösa stenar motsvarar detta? Skriv ner din lösning
2. I filen tempvekt.mat, vilken kan laddas ner från kursens it’slearningsida, finns vektorn
Tvekt med uppmätta temperaturvärden under 23 år för en väderstation i Skåne. Överför
filen tempvekt.mat från it’slearning och lagra den i lämplig katalog. Läs sedan vektorn
Tvekt från filen tempvekt.mat med hjälp av kommandot load.
Kontrollera att inläsningen blev korrekt genom att ge kommandot whos. Du skall nu se
att där finns en vektor med det angivna namnet.
(a) Rita ett histogram med 20 klasser över data. Är data normalfördelad? Varför eller
varför inte?
(b) Beräkna och skriv ut årsmedeltemperaturen med hjälp av kommandot fprintf.
Bestäm själv hur många decimaler som det kan vara lämpligt att ha med i utskriften.
5