Inledande matematik för I1 MVE011 läsperiod 1 010 Matlab vecka övningsuppgifter Linjära ekvationssystem Matlab har många kraftfulla redskap för att hantera matriser och därmed också linjära ekvationssystem. Här arbetar vi med två av dem, backslash och rref. Låt oss säga att vi skall lösa systemet A Vi skriver in koefficientmatrisen: a = [1 3 ; -1 ] och högerledet: b = [5 ; 0] = b där A 1 3 = 1 och 5 b = 0 b är en kolonnvektor, därför krävs semikolon. Den som vill vara lite annorlunda skriver: b = [5 0] och uppnår samma sak. Om b hade haft fler element skulle det faktiskt löna sig. Nu kan man lösa A a\b = b genom att skriva: Alternativt kan man använda kommandot rref som radreducerar en matris. Då använder vi förstås den utökade matrisen, eller totalmatrisen. Och den får vi enkelt genom att skriva: totmat = [a b] Genom att fortsätta med rref(totmat) utför matlab det slitsamma arbetet med att radreducera vår matris och efter radreducering är det ju lätt att genomskåda lösningen till systemet. Man kan tycka att backslash går mer rakt på sak om man bara intresserar sig för systemets lösning, men om man inte säkert vet att systemet har en entydig lösning kan rref ge en klarare bild av läget; rref besväras heller inte av symboliska variabler bland elementen. 1
Uppgifter 1. Uppgift 8 i boken, sid 48. (Determinanten behöver inte beräknas.). Uppgift 9 i boken, sid 48. 3. Lös systemet + 3y = b a y = för alla värden på konstanterna a och b. Gränsvärden Beräkning av gränsvärden i Matlab är relativt okomplicerat. Läs i boken i början av kapitel 6, sid 145 151. För att beräkna eempelvis syms kvot = sin(3*)/(tan(*) it (kvot,0) sin 3 0 tan kan man skriva: Nollan efter kvot behövs strängt taget inte eftersom matlab förmodar att gränsen är 0. Men det blir tydligare på det sättet. Uppgifter 4 6. Uppgift 1, och 4 i boken, sid 178. 7. v + v 8 4 v 16
8. + 3 9. 0 3 1+ c 1 där c är en konstant. M-filer och programmering M-filer är ett av de viktigaste begreppen i Matlab och ett man definitivt vill ta till sig om man skall kunna använda programmet på något annat sätt än som en förvuen miniräknare. I boken beskrivs m-filer på sidorna 106 10 men det finns också en utmärkt framställning i häftet Introduktion till Matlab som ni fått ut tidigare. Betrakta följande problem. Vi vill beräkna summan k = 1+ + 3 + + 10. Vi kan naturligtvis göra detta genom att beräkna varje term för sig och sedan summera. Men det verkar onödigt slitsamt; det borde finnas ett sätt att få matlab att utföra arbetet. Lösningen blir att skriva en så kallad repetitionssats där ett kommando eller en rad kommandon utförs ett visst antal gånger. I matlab finns två sådana: for och while, där for utför något ett bestämt antal gånger, while tills något villkor är uppfyllt. Här skall vi använda for. Syntaen ser ut så här: for k=startvärde:slutvärde satser Varibeln k kan vi förstås döpa till vad vi vill. Inne bland satserna används k, i första varvet med värdet startvärde i sista med värdet slutvärde. k räknas upp med 1 om inget annat sägs. För att beräkna summan ovan behöver vi en variabel som i varje varv håller reda på delsummorna och den variabeln måste först, innan repetitionssatsen börjar, sättas till 0. Vi skriver därför accsum = 0; for k = 1:10 accsum = accsum + k^; 10 k = 1 3
Nu ligger det efterfrågade värdet i variabeln accsum. Koden ovan fungerar i och för sig i kommandofönstret men så snart man arbetar med aningen komplicerade kommandon som repetitionssatser eller över huvud taget med flera kommandon efter varandra, är det en god idé att använda sig av m-filer. Man skriver helt enkelt ett litet program, det vill säga en rad kommandon som utförs alla på en gång då programmet anropas. M-filer komponeras lämpligen i matlabs editor. Låt oss utvidga problemet ovan och beräkna n k = 1 k m för olika positiva heltalsvärden på m och n. Vi skriver en funktionsfil som har n och m som in-parametrar. Funktionens värde, eller dess utparameter, är den summa vi skall beräkna. function y=min_summa(n,m) % min_summa beräknar en summa av k-potenser där m är eponenten, från k=1 till n som är % det största k-värdet. accsum = 0; for k=1:n accsum = accsum + k^m; y = accsum; Det är en god idé att skriva kommentarer till sitt program för att lättare kunna minnas vad det egentligen åstadkommer. Genom att inleda en rad med ett procenttecken får man Matlab att förstå att det rör sig om en kommentar och ingen kod som skall eekveras. Uppgift 10. Skriv en m-fil som beräknar n i= 0 i + 1 Pröva olika värden på n och wait for it gör en intelligent iakttagelse. 4
Ytterligare ett viktigt kommando i matlab (och i så gott som alla programmeringsspråk) är if som gör det möjligt att eekvera ett kommando bara när ett visst villkor är uppfyllt. If kombineras ibland med else om något annat kommando skall eekveras när villkoret inte är uppfyllt. Här är ett eempel på en funktionsfil som imiterar absolutbeloppet (som ju naturligtvis redan finns i matlab). function y = min_abs() if >0 else y = ; y = -; Uppgift 11. Skriv en funktionsfil som konverterar ett komplet tal z = a + ibfrån rektangulär till polär form, z som element. Funktionens värde är lämpligen en vektor med r och θ som element. Det är förstås inte tillåtet att använda matlabs egna funktioner för komplea tal. i = re θ. Funktionen kan ha två in-parametrar, a och b, eller en vektor med a och b Den här uppgiften är inte alldeles enkel och det är inte säkert att den hinns med under övningspasset. Men fundera på var problemen ligger; sedan kommer vi att på en föreläsning i veckan diskutera hur de kan lösas. 5