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