Matematik med Matlab. Allmänt. Matlabs uppbyggnad. Att komma igång. sid. 1 av oktober 2000

Relevanta dokument
Lab 2, Funktioner, funktionsfiler och grafer.

Inledning till matematik med Matlab kompendium för M1 och TD

Lab 1, Funktioner, funktionsfiler och grafer.

1 Grundläggande operationer

Matematik med MATLAB

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

Introduktion till MATLAB

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Introduktion till Matlab

At=A' % ' transponerar en matris, dvs. kastar om rader och kolonner U' % Radvektorn U ger en kolonnvektor

Laboration: Grunderna i Matlab

Introduktion till Matlab

Laboration: Grunderna i MATLAB

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

Introduktion till Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Laboration: Vektorer och matriser

Linjär algebra med tillämpningar, lab 1

Introduktion till Matlab

TSBB14 Laboration: Intro till Matlab 1D

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

MATLAB övningar, del1 Inledande Matematik

Matriser och Inbyggda funktioner i Matlab

4 Numerisk integration och av differentialekvationer

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Matriser och vektorer i Matlab

MAPLE MIKAEL STENLUND

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Matriser och linjära ekvationssystem

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

Introduktion till Matlab

Introduktion till Matlab

MMA132: Laboration 2 Matriser i MATLAB

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

TAIU07 Matematiska beräkningar med Matlab

MAM283 Introduktion till Matlab

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Matriser och Inbyggda funktioner i Matlab

Linjär Algebra M/TD Läsvecka 2

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

Matriser och linjära ekvationssystem

Laboration 1: Linjär algebra

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

TMV166 Linjär algebra för M. Datorlaboration 2: Matrisalgebra och en mekanisk tillämpning

Newtons metod och arsenik på lekplatser

Matematik med MATLAB, F1, HT 2004

Beräkningsvetenskap föreläsning 2

Introduktion till Matlab

Matematik med MATLAB R

Kapitel 4. Programmet MATLAB

Introduktion till Matlab

Linjär algebra. 1 Inledning. 2 Matriser. Analys och Linjär Algebra, del B, K1/Kf1/Bt1. CTH/GU STUDIO 1 TMV036b /2013 Matematiska vetenskaper

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

Introduktion till Matlab

Instruktion för laboration 1

2 Matrisfaktorisering och lösning till ekvationssystem

Datorövning 1 Fördelningar

linjära ekvationssystem.

Du kan söka hjälp efter innehåll eller efter namn

Mer om funktioner och grafik i Matlab

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Datorövning 1: Introduktion till MATLAB

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Subtraktion. Räkneregler

MMA132: Laboration 1 Introduktion till MATLAB

Matriser och vektorer i Matlab

Linjära ekvationssystem

Funktioner och grafritning i Matlab

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

1.1 MATLABs kommandon för matriser

Mer om funktioner och grafik i Matlab

Matlabföreläsningen. Lite mer och lite mindre!

Linjär algebra med MATLAB

SF1672, Linjär Algebra med Matlab för F1 Lab0

Moment 5.5 Övningsuppgifter I 5.60a. 5.60b, 5.60.c, 61

Beräkningsverktyg HT07

Laborationstillfälle 1 Lite mer om Matlab och matematik

Introduktion till Matlab

6. Matriser Definition av matriser 62 6 MATRISER. En matris är ett rektangulärt schema av tal: a 11 a 12 a 13 a 1n a 21 a 22 a 23 a 2n A =

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

KPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Linjära ekvationssystem i Matlab

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Numeriska metoder, grundkurs II. Dagens program. Hur skriver man en funktion? Administrativt. Hur var det man gjorde?

MMA132: Laboration 1 & 2 Introduktion till MATLAB

KPP053, HT2016 MATLAB, Föreläsning 2. Vektorer Matriser Plotta i 2D Teckensträngar

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

NUMPROG, 2D1212, vt Föreläsning 1, Numme-delen. Linjära ekvationssystem Interpolation, Minstakvadratmetoden

Introduktion till Matlab

Moment Viktiga exempel Övningsuppgifter

GeoGebra i matematikundervisningen - Inspirationsdagar för gymnasielärare. Karlstads universitet april

15 september, Föreläsning 5. Tillämpad linjär algebra

Transkript:

CHALMERS LINDHOLMEN Institutionen för Matematik Joakim Becker, Thomas Wernstål Matematik med Matlab sid. 1 av 6 oktober 000 Dessa övningsstenciler i MATLAB bygger på delar av det kompendium med samma titel som använts vid Matematikutbildningen vid Maskinlinjen på Chalmers läsåret 1999/000 och som utarbetats av Carl-Henrik Fant vid Matematiska institutionen på Chalmers. Allmänt. MATLAB är ett interaktivt program med mycket kraftfulla numeriska rutiner. Namnet MATLAB står för matrix laboratory. Det var ursprungligen ett program för matrishantering, men har numera utvecklats så att det lätt kan användas för grafisk representation, för att lösa olika problem inom matematisk analys och som ett programmeringsspråk för måttligt stora program. Denna kurs är avsedd att ge en introduktion till den version av MATLAB som just nu är aktuell på studentdatorerna vid Chalmers Lindholmen. En uppföljande kurs i MATLAB kommer att gå i tredje läsperioden. Tillsammans avser kurserna att ge en tillräcklig grund för dig att på egen hand utveckla dina kunskaper om MATLAB. Under hela utbildningen är det tänkt att du skall använda MATLAB som räkneverktyg, dessutom används programmet av allt fler företag så den tid du nu ägnar åt att lära dig grunderna är väl använd. För att övningarna skall kunna ge bestående kunskap krävs att du arbetar aktivt och medvetet med dem. Det kommer säkert dessutom att finnas anledning att gå tillbaka till det du en gång gjort så jag rekommenderar att du gör anteckningar och sparar lämpliga programfiler. Det kan också vara bra att du, parallellt med att du läser de stenciler som delas ut under kursens gång, läser motsvarande avsnitt i boken Användarhandledning för MATLAB 5 av Pärt-Enander och Sjöberg. I görligaste mån hänvisas till denna nedan. (P-E,S.1 syftar på kapitel sektion 1 i nämnda bok.) Matlabs uppbyggnad. Till skillnad från din miniräknare som arbetar med enstaka tal så arbetar MATLAB med listor av tal vektorer, matriser, flerdimensionella matriser, samt två andra objekttyper celler och strukturer. I början, troligen under hela denna kurs, kommer vi enbart att behandla de två enklaste typerna av objekt vektorer och matriser. En lista av tal 1 1.1 1. 1.3 1.4 kan vi tänka på som en vektor eller en radmatris dvs en 1 5-matris. Det är också så vi kan tänka oss att den uppfattas av MATLAB men kompletterad med matristypen (1,5). En matris som ex.vis 4 1 3 4 5 6 7 8 0 3 5 lagras som listan 1 4 7 5 8 3 6 0 tillsammans med matristypen (3,3). Notera ordningen på elementen i listan. En av svårigheterna då man lär sig MATLAB är just att lära sig tänka i listor eller matriser i kalkyler där man normalt bara tänker på enstaka tal. Samtidigt är detta en av MATLAB s fördelar om man lär sig utnyttja den. Om du tidigare har hållit på med programmering så har du säkert använt dig av for-slingor i programmen. Många sådana kan ersättas av matrisräkning vilket gör programmen betydligt effektivare. De program som MATLAB använder finns i s.k. m-filer. En m-fil är (i allmänhet) en textfil som innehåller MATLAB kommandon. Att de kallas m-filer beror på att namnet på filen skall ha ändelsen.m. En del av dessa filer finns inbyggda i MATLAB och är därför dolda för användaren, detta gäller exempelvis sin.m (den vanliga sinus-funktionen), andra finns tillgängliga så att man kan titta på innehållet, detta gäller exempelvis de hyperboliska funktionerna sinh, cosh vars beräkningsprocedurer finns lagrade i m-filerna sinh.m resp. cosh.m. Även de program som man själv skriver skall lagras som m-filer. Längre fram skall vi se hur man kan titta på innehållet i dessa filer och vilka krav MATLAB ställer för att hitta dessa filer. Att komma igång. Start: (P-E,S.1) Hur MATLAB startas varierar mellan olika datorsystem. På det Windows system ni arbetar i (vid studentdatorerna) öppnas MATLAB enklast genom att vänsterklicka på fliken MATLAB 5.3, som finns att hitta under Programs I Matlab på Start menyn. Efter en liten stund poppar en liten bild upp en kort stund på skärmen därefter dyker ett terminalfönster upp med lite text om Matlab och en rad To get started, type... Under den raden finns den så kallade matlabprompten». Då den syns är det klart att börja räkna. 1

Matematik med Matlab för MI1/MEI1 000/001 sid. av 6 Förberedelser: Som nämnts ovan finns alla matlabkommandon som m-filer. Du kommer också själv att skriva en del m-filer under kursens gång och senare. Dessa skall du samla i ett bibliotek F:\matlab. Börja därför med att starta filhanteraren Windows Explorer. Klicka på F: under My Computer i det vänstra delfönstret (Folders) och välj New I Folder under File på menyraden. Då skapas en ny mapp med addressen F:\new folder. Du kan nu ändra dess namn genom att klicka på detta bibliotek och välja Rename under File på menyraden. Ändra namnet på biblioteket till matlab. Stäng sedan Windows Explorer genom att antingen välja Close under File på menyraden eller som vanligt klicka på x i övre högra hörnet på fönstret. Byt nu i matlabfönstret arbetsbibliotek till F:\matlab. Detta kan du göra med kommandot cd (cd står för change directory ), dvs. skriv cd F:\matlab (eller bara cd matlab om du befinner dig i biblioteket F:) efter prompten» i MATLAB fönstret och tryck på vagnretur Return/Enter tangenten ( -). Det är viktigt att du i början av varje nytt arbetspass i MATLAB kontrollerar vilket bibliotek du befinner dig i. Detta kan du göra med kommandot pwd (vilket står för print working directory ). Byt sedan arbetsbibliotek till F:\matlab, om du inte redan befinner dig där. Om du glömmer bort att byta bibliotek så kommer MATLAB inte att kunna hitta de m-filer du sparat i annat bibliotek än det du befinner dig i. Du kan använda kommandot ls för att se vilka filer som finns i det bibliotek du befinner dig. Inmatning: (P-E,S.) MATLAB arbetar som redan nämnts med listor/matriser av tal. Ett enstaka tal kan vi uppfatta som en 1 1-matris. Tal, även komplexa, matas in precis som de skrivs, exempelvis 3+*i eller 5-*j. Notera * tecknet och att man inte har mellanslag inne i talet. Den imaginära enheten skrivs i eller j. Matriser skrivs in radvis. De inramas av [ och ]. Matriselementen separeras av mellanslag eller, tecken, raderna (utom den sista) separeras med ; tecken eller genom ett tryck på Return/Enter tangenten. All inmatning avslutas med att trycka på Return/Enter. Vill man att resultat inte skall skrivas ut på skärmen så avslutas kommandot med ;. Som exempel ger inmatningarna >>A=[1 3; 4 5 6 ;7 8 0] eller >>A=[1,,3;4,5,6;7,8,0] resultatet A = 1 3 4 5 6 7 8 0 I allmänhet tilldelar man det man matar in eller resultatet av en beräkning ett variabelnamn, matrisen ovan har namnet A, MATLAB kommer då att spara detta i vad man kallar arbetsutrymmet (workspace) och man kan använda det senare under samma arbetspass. Om inget annat namn ges så får senaste beräkningsresultatet eller inmatade matrisen automatiskt namnet ans. Kommandot who ger information om vilka variabler som finns i arbetsutrymmet. Spara och Rensa: (P-E,S.8) Kommandot clear tar bort alla variabler och kommandot clear A B x tar bort variablerna A, B och x. Då man avslutar MATLAB med quit eller exit så töms arbetsutrymmet. Om man vill spara variabler för framtiden så måste de sparas i en fil. Kommandona save tmp och save tmp A B sparar alla variabler respektive variablerna A och B i en binärfil tmp.mat. Denna placeras i aktuellt bibliotek. Kontrollera med kommandot pwd i MATLAB fönstret vilket detta är. Om det inte är det du vill så byt med hjälp av kommandot cd, innan du sparar med save. Med kommandot save utan filnamn sparas variablerna i en fil matlab.mat. De sparade variablerna i filen tmp.mat återfås med kommandot load tmp, variablerna i matlab.mat återfås med load. Dokumentering: Ett enkelt sätt att dokumentera vad man gör är att låta MATLAB skriva en dagbok. För att testa detta kan du göra följande: Ge kommandot diary on. Skriv ditt namn mellan -ar. I mitt fall Thomas Wernstål. Ge kommandot diary off. Välj nu Open under File på menyraden i matlabfönstret, och öppna filen diary (F:\matlab\diary). Innehållet i filen visas då i ett nytt fönster (i en s.k. editor). Där ser du då att allt som skrivits på skärmen efter diary on också skrivits till filen diary. Varje gång du ger kommandot diary on så fylls textfilen på, inget raderas eller

Matematik med Matlab för MI1/MEI1 000/001 sid. 3 av 6 skrivs över. Det är därför viktigt att stänga dagboken då man inte vill att kalkylerna skall dokumenteras. Du kan om du så önskar, m.h.a. editorn, också redigera texten i filen diary. Om du t.ex. ger kommandot diary ovning1 istället för bara diary så sparas allt som skrivs på skärmen i en fil med namn ovning1 istället. Detta kan vara praktiskt att känna till om du vill samla det du gör under kursens gång i olika filer, så att du senare vid behov lättare kan hitta det igen. Du kan också på samma sätt som ovan öppna (och redigera om så önskas) filen ovning1 i MATLAB editorn (alternativt kan du ge kommandot edit ovning1). Hjälp: (P-E,S.7) Man kan få information exempelvis om vad ett kommando utför dels via särskilda hjälpfönster, dels direkt i MATLAB fönstret. Hjälpfunktionerna kommer du åt genom att ge lämpligt kommando efter matlabpromptern eller genom att välja önskad hjälpfunktion under Help på menyraden i MATLAB fönstret. Kommandot helpwin startar ett hjälpfönster där man snabbt kan få information om alla kommandon. Då fönstret öppnas visas en lista över alla underbibliotek där MATLAB s programfiler finns lagrade. Genom att dubbelklicka på en sådan rubrik ex.vis matlab/elmat går man vidare i hjälpsystemet och får en lista över kommandon/program i det biblioteket. Dubbelklickar man på ett kommando i denna lista, ex.vis size så får man information om detta. Kommandot help kommando ex.vis help size ger samma information som den ovan beskrivna proceduren men nu direkt i MATLAB fönstret. Kommandot helpdesk startar en webläsare om man inte redan har en igång och laddar in en online manual. I denna kan man välja vad man vill titta på. Om man väljer matlab functions by index, klickar på bokstaven S och sedan på size så får man en mycket mer omfattande information om kommandot/funktionen size. Helpdesken innehåller allt man behöver kunna för att använda MATLAB. Kommandot demo ger en demonstration av MATLAB s olika kommandon, funktioner och tillämpningsområden. I ett separat fönster kan man med hjälp av menyer välja mellan ett stort antal demonstrationsexempel. Bra för den som på egen hand vill upptäcka MATLAB s möjligheter. Bra att veta: Man lämnar programmet med quit eller exit. Man kan avbryta beräkningar med kommandot Control-c. Man kan återfå tidigare givna kommandorader genom att trycka på piltangenten ". Om du skriver en eller flera bokstäver eller symboler och använder "-tangenten så återfår du den rad som börjar på detta sätt. Senare kommandon får man tillbaka genom att trycka på #. Man kan korrigera ett givet kommando genom att flytta markören med piltangenterna och! och sedan ta bort tecknen med Back-Space eller Delete-knappen. 1 Grundläggande operationer Syftet med denna övning är att träna på hur man skriver in matematiska uttryck i MATLAB och illustrera hur MATLAB kan användas som räknedosa. I vissa av övningsuppgifterna, i detta och efterkommande avsnitt, förekommer variablerna p 1 p ::: p 10. De avser siffrorna i ditt personnummer p 1 p p 3 p 4 p 5 p 6 ; p 7 p 8 p 9 p 10 (välj ett av era personnummer om ni är två som gör övningen tillsammans). Ett tips är också att spara arbetet med övningsuppgifterna i en dagbok. Detta gör du genom att ge t.ex. kommandot diary ovning1 innan du ger dig i kast med en övningsuppgift och avsluta med kommandot diary off när du är klar med uppgiften. 1.1 Aritmetiska operationer De vanliga aritmetiska operationerna mellan tal ser ut så här : + addition ; subtraktion * multiplikation = division ^ exponentiering (OBS! För att få denna symbol skriver man^följt av mellanslag!) 3

Talet skrivs pi medan talet e skrivs exp(1) Några exempel: Skriver vi >> 100*pi (utan ; före avslutande RETURN) blir svaret ans = 314.1593 Här står ans för det senaste svaret (ans är förkortning för answer). Skriver vi nu >> ans+exp(1) (utan ; före avslutande RETURN) blir svaret ans = 316.8775 Matematik med Matlab för MI1/MEI1 000/001 sid. 4 av 6 MATLAB tillämpar den vanliga prioriteringsordningen mellan de aritmetiska operationerna : >> 8^1/3 ger svaret.6667, medan >> 8^(1/3) ger svaret. Man får allmän hjälp om dessa begrepp i helpwin genom att gå till biblioteket matlab/ops och i helpdesk genom att välja functions by subject och sedan Operators and Special Characters. Du kan även läsa mer i P-E,S.4. Uppgift 1: Beräkna med hjälp av MATLAB värdet på + 3 7 p e;1 1. Variabler. (Det rätta svaret skall vara 0:9995) Variabler kan ges namn innehållande bokstäver (dock ej å,ä och ö) och siffror. Första tecknet måste vara en bokstav. Man bör inte använda namn på inbyggda funktioner eller MATLAB kommandon som variabelnamn. Programmet skiljer på stora och små bokstäver. Tecknet = används för att tilldela variabler värden. >>x=pi/3 ger variabeln x värdet =3. Man kan ge instruktioner på samma rad om man skiljer dem åt med komma (eller semikolon). T.ex. >>x=pi/4, X=x-pi ger x värdet =4 och X värdet ;3=4. Observera att MATLAB hela tiden skriver ut närmevärden. Som vi sett ovan tilldelas variabeln ans resultatet av den senast gjorda beräkning om ingen annan tilldelning görs. Om man vill ta reda på värdet på en variabel, t.ex. x, så skriver vi helt enkelt >>x Tilldelningstecknet = fungerar som vi sett på följande sätt. Först beräknas det som står på höger sida om = och sedan tilldelas variabeln på vänster sida om = motsvarande värde. Med x som ovan angivet, ger därför instruktionen >>x=x+1 resultatet x = 1:7854. Observera att MATLAB inte ser på detta kommando som en ekvation som skall lösas. Vi skall återkomma längre fram till hur man kan lösa ekvationer i MATLAB. Som nämnts tidigare så skrivs inte resultatet av ett kommando ut om vi lägger till ett semikolon efter kommandot. Resultatet registreras dock av MATLAB på samma sätt som tidigare. T.ex ger >>Y1=; >>Rest=Y1+1 att variabeln med namnet Rest får värdet 3. Uppgift : Försök på förhand lista ut värdet på variabeln y om följande beräkningar utförs i MATLAB. >>x=; y=x^(); x=y-1; y=x*y; När du tror dig veta svaret så kontrollera om du har rätt. Om du gissade fel så gå tillbaka och undersök steg för steg och försök hitta var du tänkte fel. 4

1.3 Elementära funktioner Matematik med Matlab för MI1/MEI1 000/001 sid. 5 av 6 MATLAB har alla de vanliga elementära grundfunktionerna, alltså exponential- och logaritmfunktionerna, de trigonometriska funktionerna och deras inverser, absolutbelopp, kvadratrot, och flera andra. Här följer en lista på några av MATLAB s funktioner: exp, log (= ln), log10 (= 10-logaritmen), sin, cos, tan, atan (= arctan), asin, abs, sqrt sinh, cosh, tanh Observera att man alltid måste ha () runt variabeln som i sin(pi/3). T.ex beräknas p ln( e) genom att skriva >>y=log(sqrt(exp(1))) Det finns ytterligare funktioner t.ex. sign, round, floor, ceil Man får en fullständig lista i helpwin under matlab/elfun. Läs även mer i P-E,S.4. p Uppgift 3: Använd MATLAB för att beräkna x = sin 3 y = ln 0 + 1 z = e och x y=z. (Notera att man inte kan skriva e^x för exponentialfunktionen) 1.4 Felmeddelanden I likhet med många andra program är MATLAB inte speciellt förlåtande, i det avseendet att programmet är känsligt för felaktiga instruktioner av användaren. Använder man funktioner eller kommandon som inte finns inbyggda i MATLAB och inte heller finns definierade på annat sätt, så kommer programmet att ge felmeddelande. Samma sak händer om man använder en variabel som inte tidigare givits ett värde eller glömmer ett tecken i ett uttryck. Det är lätt hänt att man råkar stava fel eller att det smyger in sig en stor bokstav där det skall vara en liten. Här några exempel. >>plutten??? Undefined function or variable plutten. MATLAB vet inte vad plutten är. Du måste först ge plutten ett värde, exempelvis >>plutten=0; Nu går det bra att skriva >>plutten utan att råka ut för några protester. Ännu ett exempel: >>x=sin??? Error using ==> sin Incorrect number of inputs. Man måste naturligtvis ge något argument som sinus-funktionen kan räkna ut. >>x=sin(plutten) går t.ex. bra. Här ett exempel där man felaktigt använder stora bokstäver: >>X=SIN()??? Undefined variable or capitalized internal function SIN; Caps Lock may be on. En vanlig orsak till att man av misstag får stora bokstäver är att man råkat trycka på knappen Caps Lock. Tryck ner den igen i så fall! Uppgift 4: Skriv in följande felaktiga rad i MATLAB: >>sin Reproducera sedan det felaktiga kommandot med ". Redigera sedan om uttrycket genom att flytta markören med och! så att kommandot blir rätt. 1.5 Formatering av utskrift och närmevärden Man kan kontrollera antalet decimaler som skrivs ut och formen på utskriften med hjälp av kommandot format. De vanligaste varianterna är format short ger fem signifikanta siffror format long ger femton signifikanta siffror format short e ger fem signifikanta siffror i flyttalsnotering format long e ger femton signifikanta siffror i flyttalsnotering En fullständig lista av de olika utskriftsformaten finner man under format i matlab/general. 5

Prova med att skriva ut 10 i de olika utskriftsformaten, t.ex. >> format long >> 10*pi ans = 31.4159653589793 (Läs mer i P-E,S.6) Matematik med Matlab för MI1/MEI1 000/001 sid. 6 av 6 MATLAB räknar enbart med närmevärden. Här några uppgifter för att illustrera det. Uppgift 5: Tilldela c värdet p 7 p 8 p 9 p 10 =1000 (siffrorna p 1 :::kommer från ditt personnummer. Se ovan). a. Beräkna talet q =sin(e) ; sin(e)=cos(e) dels med hjälp av MATLAB och dels m.h.a. räknedosa (om du har en sådan). Ger någon av dem rätt svar? (Beräkna för hand med hjälp av lämplig formel) b. Sätt x =1+(10c) ;n och y = (10 c) n (x ; 1) Då är det exakta värdet av y lika med 1, men MATLAB kommer att för stora heltal n ge andra värden. Finn det minsta heltal för vilket y =0. Vilket värde får y för n-värdet dessförinnan? Enklaste sättet att utföra upprepade beräkningar av denna typ är att skriva allt på en rad som körs gång efter gång med hjälp av pil-tangenten. Gör så här: Skriv först n=0 och sedan på en ny rad n = n+1, x=1+(10*c)^(-n), y=(10*c)^n*(x-1) Då du återkallar denna rad med pilupp-tangenten första gången har n värdet 1 och får nytt värde varefter x och y beräknas med detta n-värde. Med hjälp av pilupp-tangenten kan du upprepa så många gånger du vill, denna metod brukar jag kalla en mekanisk snurra. 1.6 Extra uppgift för den flitige Antag att man är intresserad av att hitta lösningar till en ekvation av typen f (x) =0, där f (x) är en reellvärd och deriverbar funktion av en reell variabel. Ett sätt är då att använda sig av den s.k. Newton Raphsons metod (Se lämplig gymnasie-litteratur). Detta innebär att man bildar en följd av tal x 0 x 1 x ::: x n :::genom att först sätta ett värde till x 0 och sedan beräkna de övriga talen m.h.a. formeln x n+1 = x n ; f (x n )=f 0 (x n ). Om derivatans värde f 0 (x) är 6= 0ien omgivning av en rot och om startvärdet x 0 ligger tillräckligt nära, så kan man visa att följden konvergerar (närmar sig) mot. Exempel: Antag att vi vill hitta lösningar på ekvationen cos x = x. Sätter vi f (x) = x ; cos x så söker vi alltså x sådana att f (x) =0. Vi har f 0 (x) = 1+sinx så talföljden i Newton Raphsons metod genereras i detta fall av formeln x n+1 = x n ; (x n ; cos x n )=(1 + sin x n ). Med startvärdet x 0 = 1 får vi x 1 = x 0 ; (x 0 ; cos x 0 )=(1 + sin x 0 ) = 1 ; (1 ; cos 1)=(1+sin1)=0:7504::: och sedan x = x 1 ; (x 1 ; cos x 1 )=(1 + sin x 1 )=0:7391:::, osv... Ett enkelt sätt att skapa talföljden ovan är m.h.a. en s.k. mekanisk snurra (se uppgift.5b ovan). Skriv >>x=1 >>x=x-(x-cos(x))/(1+sin(x)) Fortsätt sedan att reproducera >>x=x-(x-cos(x))/(1+sin(x)) m.h.a. pilupp-tangenten. Man ser snart att talen ändras allt mindre och mindre och närmar sig ett fixt värde som är ca. 0:7391. Detta är ett närmevärde till en lösning på ekvationen. Skissa i samma figur grafen till funktionen cos x och linjen y = x, och avgör om du tycker det känns rimligt att de skär varandra vid x 0:7391. Pröva vad som händer för andra startvärden på x 0. Finns det fler rötter? Uppgift 6: Hitta på en egen ekvation som du vill lösa m.h.a. Newton Raphsons metod och lös den som i exemplet ovan. (anm. Det finns i MATLAB inbyggda kommandon som ger nollställen till funktioner (se t.ex. fzero och roots)) 6

Radmatriser och kurvritning Matematik med Matlab för MI1/MEI1 000/001 sid. 7 av 6 I denna övning skall vi se hur man på ett enkelt sätt kan generera radmatriser och hur dessa kan användas till att rita funktionsgrafer..1 Operationer med radmatriser För att utnyttja MATLAB effektivt skall nästan alla variabler man använder vara radmatriser eller större matriser. Detta innebär en viss komplikation. Multiplikationen x*y betyder matrismultiplikation. Om x och y är enstaka tal så är det den vanliga produkten. Är x och y matriser så finns inte produkten såvida inte typerna stämmer överens. Vi kan som nämnts ovan föreställa oss en matris lagrad som en lång lista av tal tillsammans med uppgift om matrisens typ. Ofta vill vi beräkna elementvisa (punkt-visa) produkter av tal i sådana listor. Den produkten skrivs.* alltså med en punkt framför *-tecknet. Med x = [1,,3] är x.*x= [1,4,9]. På samma sätt skrivs division x./y och potenser x.^y. Man kan även använda de elementära funktionerna på matriser. Allmän hjälp om detta område får du i helpwin under matlab/elmat och matlab/ops. Exempel (med utskrift i format short): >>x=[1 3]; y=[4 5 6]; ger x+y 5 7 9 x.*y 4 10 18 x./y 0.500 0.4000 0.5000 x.^y 1 3 79 exp(x).7183 7.3891 0.0855 Viktiga specialkommandon är ones och zeros. De användes för att generera matriser bestående av enbart ettor respektive nollor. T.ex. ger kommandot ones(1,3) eller ones(size(x)) svaret 111om x är en radmatris av längden 3. Andra exempel: >>x=[1 3 4]; z=ones(size(x))./x ger svaret >>z = 1.0000 0.5000 0.3333 0.500 >>x+ones(size(x)) ger svaret 3 4 5 >>*ones(size(x)) ger svaret Det näst sista svaret hade man också kunnat få genom att skriva x+1. z kan man erhålla med z = 1./x. (Läs mer i P-E,S 3.5-6) Uppgift 1: Skriv in radmatriserna x =[p 1 p p 3 ] och y =[p 4 p 5 p 6 ]. Beräkna x+y, x-y, x.*y, x.^y, x./y, x.\y, x.*sin(y). Skriv upp vad MATLAB svarar på x y. Hur tolkar du svaret? Kom ihåg detta svar och orsaken. Du kommer säkert att få det fler gånger.. Generering av aritmetiska följder a a + h a +h b med hjälp av kommandot Om a, h och b är givna tal kan man bilda radmatrisen x = x=a:h:b. >>x=-5::5 ger x = -5-3 -1 1 3 5 Analogt ger kommandot >>x=-pi:0.1:pi; radmatrisen x=[-3.1416-3.0416 -.9416....9584 3.0584], vilket är en matris av längden 63. Kolla genom att mata in x enligt ovan och sedan skriva >>length(x) Låt också datorn skriva matrisen x på skärmen genom att skriva >>x (utan semi-kolon) 7

Matematik med Matlab för MI1/MEI1 000/001 sid. 8 av 6 Vill man ha steglängden h = 1 räcker det att skriva >>x=a:b t.ex. >>x=0:10 x = 0 1 3 4 5 6 7 8 9 10 Om b < a så kan man ha h < 0. Ytterligare information får du under matlab/ops. Läs den informationen, kolon-operatorn är en mycket viktig ingrediens i Matlab. (Läs mer i P-E,S 4.3) Uppgift : Låt n vara ett givet positivt heltal. Generera radmatriserna m=[-1,-,...,-n] och x=[^(-1),^(-),..., ^(-n)]. Använd sedan kommandot sum(x) för att beräkna den geometriska summan Vilket är det första n-värde för vilket s>0:999999? s = ;1 + ; + + ;n.3 Logiska operationer Om A och B är matriser av samma typ så kan de jämföras elementvis. Exempelvis ger A == B en matris av samma typ som A och B med 0 på de platser där elementen är olika och 1 på de platser där elementen är lika. Titta i matlab/ops för att läsa mer om detta. (Läs mer i P-E,S 3.8-10) Uppgift 3: Använd kommandot rand (rand = random = slump) för att generera en radmatris R, med 10 element. Titta efter i helpwin under matlab/elmat hur rand fungerar. a. Vad väntar du att kommandot R >= 0.5 skall ge för resultat? Ge kommandot och jämför. Sätt namn på den radmatrisen med R5 = ans. b. Vad är sum(r5)? Förklara! c. Sätt V = find(r < 0.4). Vad är V? R(V)? Förklara!.4 Kurvritning Om x = [x(1),...,x(n)] och y = [y(1),...,y(n)] är två radmatriser av samma längd så kommer ritkommandot plot(x,y) att rita en kurva som sammanbinder de n stycken punkterna (x(1),y(1)),..., (x(n),y(n)). Omx eller y innehåller flera rader så kommer flera grafer att ritas i samma figur. Om man inte ger ett särskilt kommando kommer MATLAB att välja koordinataxlarna så att samtliga punkter syns. (Detta kallas auto-scaling.) Man kan dirigera på vilket sätt kurvan ritas genom att ge order om särskild linjetyp. Man kan också rita ut punkterna utan att sammanbinda dem genom att bestämma vilken punkttyp som skall användas. Här några exempel: >>x=-3:0.5:3;y=sin(x); >>plot(x,y) >>plot(x,y, : ) (Prickad sammanbunden kurva.) >>plot(x,y,. ) (Punkterna utritade som små prickar.) >>plot(x,y, o ) (Punkterna utritade som små cirklar.) Allmän hjälp för tvådimensionell grafik ges i matlab/graphd. (Läs mer i P-E,S 13.1) Uppgift 4: Skriv in A=1::11, B=rand(1,6) och C=rand(6,3). Testa kurvritning med plot(a,b), plot(b), plot(a,c) samt plot(b,c, * ). 8

.5 Funktionskurvor Matematik med Matlab för MI1/MEI1 000/001 sid. 9 av 6 Av exemplen ovan framgår det redan hur man kan rita funktionskurvor. Säg att vi vill rita funktionen f (x), på intervallet a x b. Man börjar då med att välja en lämplig steglängd h och bildar sedan radmatrisen x=a:h:b. Därefter låter man MATLAB beräkna funktionsvärden samt ger dessa ett namn. Man får funktionskurvan uppritad med kommandot plot(x,funktionsnamn). Ett exempel gör detta klarare: >> x=-*pi:0.1:*pi; >> f=sin(3*x)+cos(5*x);plot(x,f) Här ritas funktionen f (x) =sin3x + cos 5x på intervallet [; ]. På samma sätt ritar man funktionen g(x) =x sin x på samma intervall med hjälp av kommandot >>g=x.*sin(x.*x);plot(x,g) Uppgift 5: Rita ovanstående figurer. Vid kurvritning bör man tänka på att det blir bättre graf om man har fler punkter, men bara upp till en viss gräns. Radmatriserna bör inte ha fler än ca 400 element. Däröver blir det bara slöseri med beräkningstid och minnesutrymme. I synnerhet om bilden skall skrivas ut på papper så är detta mycket viktigt..6 Flera kurvor i samma figur Antag att vi vill rita funktionerna f och g ovan i samma figur. Vi kan då ge kommandot plot(x,f -,x,g, -. ) eller bara plot(x,f,x,g) Det finns också en annan möjlighet. Antag att vi först ritar funktionen f med hjälp av kommandot >>plot(x,f) Man kan sedan ge kommandot >>hold on Då kommer de gamla kurvorna att behållas när nya kurvor ritas. Till exempel >>plot(x,g) När man inte längre vill behålla gamla kurvor ger man kommandot >>hold off Kommandot hold ensamt innebär att man skiftar från hold on-läge till hold off-läge, (om man tidigare gett kommandot hold on ) eller från hold off-läge till hold-on-läge. Läs vidare i matlab/graphd. (Läs mer i P-E,S 13.3).7 Dimensionering av koordinataxlarna Normalt väljer MATLAB ett koordinatsystem så att alla punkter som skall ritas syns på skärmen. Man kan styra valet av koordinataxlar med hjälp av kommandot axis. För att ta reda på hur axis fungerar kan du läsa hjälptexten i matlab/graphd. (Läs mer i P-E,S 13.3) Uppgift 6: Ett bekvämt sätt att ge ett plotkommando där det är lätt att ändra är att på en enda rad skriva enligt följande exempel. >> a=0; b=1; h=(b-a)/400; x = a:h:b; y = sin(1./x); plot(x,y) Med vänster och höger piltangenterna kan du flytta markören till den plats du vill ändra. Backspace och del raderar, pröva vad de tar bort. a. Rita en figur i vilken de tre kurvorna y =sin(x)=x y =sin(1=x) och y =1 förekommer samtidigt. Den sista får du med y = ones(size(x)). Använd zoom för att titta närmare på kurvorna. b. Rita kurvan som ges av y =1; x om x 0 och y =0annars på intervallet ; x. Skriv in y=(1-x.^).*(x>=0). Rita nu kurvan y =1; x om 0 x 1 och 0 annars..8 Teckensträngar Elementen i en matris kan även vara teckensträngar, dvs följder av tecken placerade mellan två symboler, (s.k. fnuttar). >> A=[ så här kan ; det se ut ] ger (om man gör ett mellanslag så att de två raderna har lika många 9

Matematik med Matlab för MI1/MEI1 000/001 sid. 10 av 6 element) A = så här kan det se ut Detta använder man bland annat då man vill ha text i en graf. Till exempel lägger man in en titelrad med kommandot title. Med text eller gtext kan man lägga in funktionsuttrycket inplacerat på lämplig plats. Man kan även använda figurfönstrets menyer för att t. ex. lägga till text till en graf. (Läs mer i P-E,S 13.3) Uppgift 7: Lägg in en titelrad med era namn på den sista bilden. Lägg också in funktionsuttrycken inplacerade på lämpliga platser..9 Olika sätt att hantera egna funktioner. En svårighet då man ritar kurvor y = f (x) med Matlab är att man måste komma ihåg att räkna om y varje gång man ändrar x. Ett sätt att lösa denna komplikation är att skriva en funktionsfil för funktionen. Vi väntar till lite senare i kursen med att förklara hur funktionsfiler fungerar. Man kan dock skapa en funktion som man skall använda tillfälligt med hjälp av inline som i följande exempel där allt skrivs i Matlab-fönstret: fun=inline( 3*x*.(x+1)./(x.^+1), x ); Nu finns funktionen fun lagrad i arbetsutrymmet och om vi vill se beräkningsformeln så skriver vi: formula(fun) och får svaret 3*x.*(x+1)./(x.^+1). Man kan utelämna punkterna i definitionen för att låta Matlab sätta dit dem efteråt. fun=inline( 3*x*(x+1)/(x^+1), x ); formula(fun) ger nu 3*x*(x+1)/(x^+1)y. Denna funktion kan inte användas om x är en matris. För att punktera operationerna skriver vi: fun=vectorize(inline( 3*x*(x+1)/(x^+1), x )); varefter formula(fun) ger svaret 3*x.*(x+1)./(x.^+1). Nu kan du kontrollera att filen finns i det aktuella biblioteket med kommandot what. Testa sedan filen med >> fun(1) och >> fun([1,,3]) Fungerade detta så kan du rita grafen med >> fplot( fun,[-1,1]) Dessa tre steg är ett bra sätt att kontrollera en sådan här funktonsfil fungerar (fplot står för funktionsplot). Se även help fplot. Vi väntar till lite senare i kursen med att förklara hur funktionsfiler fungerar. Uppgift 8: Man brukar definiera stegfunktionen som steg(x) = 0 om x < 0 och steg(x) = 1 om x 0. Skapa en funktion steg m.h.a inline. Testa den som ovan..10 Använd matrisoperationer för effektivitet! Vi avslutar med ett exempel på en summa. Antag att vi vill beräkna de 1 000 000 första termerna i summan 1 ;1:1 + ;1:1 +3 ;1:1 +. Med en for-slinga kan vi beräkna summan med följande rad, där vi också låter MATLAB ta tiden, >>tic,s=0;for n=1:1000000,s=s+1/n^1.1;end,s,toc där tic startar tidtagningen och toc avslutar den. Om vi använder matrisoperationer kan vi istället skriva (varför?) >>tic,n=1:1000000;s=(1./n.^1.1)*ones(size(n)),toc Här betyder att vi transponerar matrisen. Uppgift 9: Vad blir resultatet? Vilken operation tar längst tid? 10

Matematik med Matlab för MI1/MEI1 000/001 sid. 11 av 6 3 MATLAB som matrishanterande räknedosa. Detta avsnitt förutsätter att läsaren är bekant med den linjära algebrans mest grundläggande begrepp (t.ex. matrismultiplikation, system av linjära ekvationer och determinant ). Hjälp till detta kapitel hittar du i helpwin under matlab/ops, matlab/elmat och matlab/matfun. Läs mera i P-E,S kap 3, 4 och 7. 3.1 Grundläggande matrisoperationer (P-E,S 3.1-) Man matar in matriser radvis med mellanslag eller kommatecken mellan radelementen och med semi-kolon eller tryck på return/enter-tangenten mellan raderna. Så till exempel ger inmatningen >>A=[1 3; 4 5 6; 7 8 0], x=[-1;0;] resultatet A = 1 3 x = ;1 4 5 6 7 8 0 0 Addition, subtraktion och multiplikation av matriser betecknas med +, - resp. *. Exempel: >>b= A*x b = 5 8 ;7 Uppgift 1: Definiera matriserna 1 ; 6 A = B = E = 7 ;3 5 4 ;1 ;3 3 5 4 ;3 ; 4 4 0 C = 4 1 3 4 5 6 7 8 9 3 5 D = 4 0 ;, a. Beräkna A + B, ;A, A och 3A ; 5B. b. Beräkna A + C. c. Beräkna AC. d. Beräkna AB. e. Jämför DE och ED. f. Beräkna C^ och C.^. 3. Transponering och inversmatris (P-E,S 3.3-4, 7.1) Symbolen för transponering är. Transponering av en radvektor ger till exempel kolonnvektor: >> x=[-1 0 ] ger alltså resultatet x = ;1 0 Man får inversen av A med kommandot inv(a). 11

Med A enligt ovan får man: >> C=inv(A) C = ;1:7778 0:8889 ;0:1111 Matematik med Matlab för MI1/MEI1 000/001 sid. 1 av 6 1:5556 ;0:7778 0: ;0:1111 0: ;0:1111 Kommandot norm(v) ger absolutbeloppet av en vektor v och cross(u,v) ger kryssprodukten. Uppgift : Låt A C D och E vara matriserna ur uppgift 1. a. Beräkna skalärprodukten mellan vektorerna D och E t med hjälp av matrisoperationer. Beräkna även kryssprodukten. b. Beräkna norm(d) och sqrt(d*d ). Förklara. c. Beräkna A t (transponatet av A). Jämför med A. d. Inför en tredje rad i A genom att sätta den lika med E t. Låt A vara den nya matrisen. e. Beräkna A ;1. f. Jämför (A t ) ;1 och (A ;1 ) t. g. Beräkna (AC) t och C t A t. Förklara. 3.3 Rader, kolonner och enskilda matriselement. Nya matriser av gamla. (P-E,S 4.1-3) Om M är en given matris betecknar M(r,:) den r:te raden i M, M(:,k) är den k:te kolonnen och M(r,k) är elementet på plats (r,k). Kommandot [m,n]=size(m) ger typen av matrisen M. Om u och v är två vektorer med heltalskomponenter så betecknar M(u,v) den undermatris av M som består av de rader vars index ges av vektorn u och vars kolonner är kolonnerna i M med index givna av vektorn v. Låt oss exemplifiera: >> M=[11:15;1:5;31:35] M = 11 1 13 14 15 1 3 4 5 31 3 33 34 35 >> M(1,:) ans = 11 1 13 14 15 >> M(:,1) ans = 11 1 31 >> M(3,4) ans = 34 >> N=M([ 3],[1 3 5]) N = 1 3 5 31 33 35 Man kan ändra enstaka element eller hela rader och kolonner genom att direkt tilldela dem nya värden. Exempel: >> M(3,4)=134 M = 11 1 13 14 15 1 3 4 5 31 3 33 134 35 >> M(:,5)=[1:3] 1

M = 11 1 13 14 1 1 3 4 Matematik med Matlab för MI1/MEI1 000/001 sid. 13 av 6 31 3 33 134 3 Man kan ändra storlek på en matris med direkta tilldelningskommandon. Matrisen utökas eventuellt med tillägg av extra nollor. Exempel: >> N(4,:)=ones(1,3) N = 1 3 5 31 33 35 0 0 0 1 1 1 Man kan även bygga matriser med andra matriser som block. Exempel: >> P=[[M;(-1).^(1:5)] N] P = 11 1 13 14 1 1 3 5 1 3 4 31 33 35 31 3 33 134 3 0 0 0 ;1 1 ;1 1 ;1 1 1 1 Man kan också göra om formen på en m n-matris med reshape(m,r,k), under förutsättning att r k = m n. M(:) gör om M till en kolonnmatris. Ordningen på elementen i listan M ändras inte av dessa kommandon. Uppgift 3: Genomför beräkningarna i ovanstående exempel och kontrollera att du och jag får samma resultat. Har jag skrivit rätt? Är något oklart? 3.4 Speciella matriser Det finns ett antal kommandon som är avsedda för att bygga upp nya matriser. Här följer ett urval: zeros(n) n n-matris med bara nollor zeros(n,m) n m-matris med bara nollor eye(n) enhetsmatris av typ n n eye(n,m) n m-matris med ettor i diagonalen och nollor för övrigt ones(n) n n-matris med bara ettor ones(n,m) n m-matris med bara ettor rand(n) n n-matris vars element är tal mellan 0 och 1, slumpmässigt utvalda. rand(n,m) n m-matris vars element är tal mellan 0 och 1, slumpmässigt utvalda. Ytterligare några användbara kommandon för att bygga upp nya matriser är tril(a) ger den undre triangulärmatrisen i den givna matrisen A triu(a) ger den övre triangulärmatrisen i A diag(v) ger, om V är en rad- eller kolonnmatris, en matris med V på diagonalen och 0 på övriga platser. diag(a) ger, om A är en matris, en kolonnvektor med diagonaleelementen i A som element. Det finns även ett antal speciella matriser som den nyfikne läsaren kan inspektera, dessa hittar du i helpwin under matlab/elmat Specilized matrices. (Läs mer i P-E,S 4.1) Uppgift 4: Stora matriser byggda av mindre block. a. Skriv in följande: M= ones(3,3); N=zeros(,3); P=[,,]; Q=eye(4); R=rand(4,); X=[M,[N;P];Q,R] b. Skapa följande 100100 matris. Ledning: help diag. S = 6 4 ;1 0 0 ;1 ;1 0 0 0 ;1 ;1 0............... 0. 0 ;1 ;1 0 0 ;1. 3 7 5 13

Matematik med Matlab för MI1/MEI1 000/001 sid. 14 av 6 3.5 Ekvationssytem. (P-E,S 7.3, 7.7) Om A är en icke-singulär (d.v.s. inverterbar) kvadratisk matris, kan man entydigt lösa systemet AX = b för varje matris b som har lika många rader som A. Lösningen ges av X = A ;1 b. Analogt om b har lika många kolonner som A så ges lösningen till XA = b av X = ba ;1. Observera att dessa formler aldrig används till numerisk beräkning av lösningen. För både inverterbara och icke-inverterbara matriser kan lösningen till AX = b erhållas med hjälp av Gausseliminering i ekvationssystemet tills koefficientmatrisen är triangulär. Ofta väljer man att presentera räkningarna utan att ta med de obekanta. Man bildar då systemets totalmatris eller utökad koefficientmatris som består av koefficientmatrisen följd av högerledet, ofta separerade med ett lodrätt streck för att förtydliga att det handlar om en totalmatris till ett ekvationssystem. På denna matris gör man sedan radoperationer tills koefficientmatrisen är triangulär, därefter kan man enkelt lösa ut de obekanta ev. på parameterform, eller se att systemet saknar lösning. I Matlab erhålls trianguleringen genom att man bildar systemets totalmatris A1 = [A b] och sedan beräknar T = rref(a1),(rref är förkortning av row reduced echelon form. Ur denna kan man bestämma X. Även ekvationen XA = b kan lösas med hjälp av rref, men då måste ekvationen först transponeras, (XA) 0 = b 0, som är samma som A 0 X 0 = b 0. Det vanligaste sättet att beräkna en lösning till ekvationssystemet AX = b i Matlab ges av X=A\b. Om matrisen A är kvadratisk så erhålls en lösning genom Gausselimination. Även om systemet saknar lösning eller har parameterlösning så får man ett svar dock tillsammans med en varning. Om matrisen är inverterbar så erhålls samma lösning som med matrisinversen ovan, (beräkningsrutinen är dock en annan så det är inte säkert att man får exakt samma numeriska resultat). Om A inte är kvadratisk så är X=A\b en lösning till AX = b med minstakvadratmetoden. Det innebär att även om systemet saknar lösning så får man alltså ett svar. Analogt ger kommandot Y=c/A lösningen till systemet Y A = c för varje matris c som har lika många kolonner som A. Kommentarerna ovan gäller även denna operation. T.ex., med A = 1 3 4 5 6 7 8 0 och b = 5 8 ;7 ger X = A\b X = ;1 0 Vidare ger rref([a b]) matrisen 1 0 0 ;1 0 1 0 0 0 0 1 ur vilken vi direkt kan utläsa samma lösning som ovan. Låter vi A = 1 3 ; 4 1 3 ; och b = 4 5 så ger T = rref([a b]) T = 1:0000 0 1:500 0 0 1:0000 0:8750 0 0 0 0 1:0000 Den sista raden ger oss ekvationen 0=1vilket visar att ekvationssystemet AX = b saknar lösning. 14

Matematik med Matlab för MI1/MEI1 000/001 sid. 15 av 6 Däremot ger X = A\b X = 1:0e +15 4:1 :9555 ;3:3777 Här ges emellertid en varning som säger oss att detta kanske är fel. Om vi ändrar högerledet till b = 4 5 ;1 så ger T = rref([a b]) T = 1:0000 0 1:500 0:7500 0 1:0000 0:8750 1:650 0 0 0 0 Ur denna matris kan vi se att systemet har parameterlösning. Nu ger X = A\b X = ;0:5000 0:7500 1:0000 Även nu ges en varning som säger oss att detta kanske är fel. Exempel: Vi bestämmer minstakvadrat-lösningen till systemet x 1 +x = 1 3x 1 +4x = 3 5x 1 +6x = 5 Vi kallar systemets matris för W. I matrisbeteckningar blir systemet alltså W*X=b. Så här löser vi det: >> W=[1 ; 3 4; 5 6]; b=[1; 3; 5]; X= W\b X = 1 0 Vi undersöker om detta är en lösning till ekvationssystemet genom att ge kommandot: >> W*X ans = 1 3 5 Notera att detta system är entydigt lösbart men det vet vi inte utan att triangulera det. Om vi ändrar högerledet till b=[1;0;0] så är systemet W*x=b inte längre lösbart. MATLAB ger då minstakvadratlösningen: >> b=[1 0 0] ; X=W\b X = ;1:3333 1:0833 Vi ser att detta inte är lösning till den givna ekvationen: >> W*X ans = 0:8333 0:3333 ;0:1667 OBS! Om A och c är radmatriser av samma längd och Y är en lösning till ekvationen YA = c så är Y ett tal och c en multipel av A. Omc X inte är X en multipel av A så ger Y=c/A minstakvadratlösningen Y som minimerar jc ; YAj. I detta fall är Y = (a i c i )= a i. Jag nämner detta här för att belysa ett annat problem: Antag att vi vill beräkna den elementvisa divisionen x./sin(x) men råkar glömma punkten. Matlab ger då ingen varning utan beräknar 15

Matematik med Matlab för MI1/MEI1 000/001 sid. 16 av 6 X (x i sin(x i ))= X sin (x i ). Vi kan sedan få fullständigt obegripliga felmeddelanden eller helt felaktiga resultat. Uppgift 5: I denna uppgift skall du undersöka några olika ekvationssystem och jämföra lösningarna som erhålls med de olika metoderna som beskrivs ovan. Matriserna C D och E är samma som i uppgift 1, matrisen A är den du fick i uppgift d. a. Lös ekvationssystemen AX = E och Y A = D med hjälp av rref (transponera först ekvationen Y A = D). b. Jämför med resultatet som ges av matlabs operationer A\E och D/A. c. Vilken lösning till ekvationssystemet CX = E ger X = inv(c)*e? Vilken lösning till ekvationssystemet CX = E ger X = C\E? d. Bilda totalmatrisen C1 till ekvationssystemet ovan, dvs C1 = [C,E]. Låt Matlab beräkna trappstegsmatrisen till C1 med hjälp av kommandot rref(c1). Vad kan du nu säga om lösningen till ekvationssystemet. i. Lös CX = F med hjälp av rref([c,f]). Vad ger X = C\F? Ser du något samband mellan h ;1 5 e. Låt F = lösningarna? f. Skriv x=-5:.1:5;y=x+.5*sin(x+1);plot(x,y, + ). Bestäm ekvationen för den räta linje y = kx + m som enligt minsta kvadratmetoden bäst ansluter till de mätdata du just plottat. Rita in mätdata och den räta linjen i samma figur. Beräkna även medelfelet. Ledning: Sätt först upp ekvationssystemet kx i + m = y i i =1 :::n. Koefficientmatrisen kan man bilda genom A=[x,ones(size(x)) ] och systemet kan skrivas Au = y t där u =[ m k ]. Medelfelet fås som norm(y -A*u)/sqrt(n) där n=length(x) är antalet mätdata. Ett betydligt enklare sätt att bestämma u är dock att använda kommandot polyfit. 16

Matematik med Matlab för MI1/MEI1 000/001 sid. 17 av 6 4 Att skapa egna kommandon och att programera i MATLAB. Denna vecka skall delar av ert arbete redovisas för oss lärare, i en s.k. inlämningsuppgift. Bland annat ingår uppgifterna i detta avsnitt i denna inlämningsuppgift. Glöm därför inte att spara arbetet med uppgifterna i en dagbok. Utförlig information om hela inlämningsuppgiften och hur den skall redovisas finns på separat stencil som ni som vanligt kan hämta från kursens (inofficiella) hemsida: http://www.chl.chalmers.se/twernst/matlab. Detta redovisningsmoment i MATLABkursen är obligatoriskt och skall vara slutfört senast fredagen den 13:de oktober. Som tidigare förekommer parametrarna p 1 p ::: p 10 i vissa uppgifter. Dessa syftar som vanligt på siffrorna i era personnummer p 1 p p 3 p 4 p 5 p 6 ; p 7 p 8 p 9 p 10. Några råd innan du skall skriva m-filer Innan du första gången skriver en m-fil bör du ha skapat ett eget matlab bibliotek (F:\matlab). Om så inte är fallet, läs hur man gör i delavsnittet Att komma igång i början av detta övningskompendium. För att skriva och spara egna m-filer behövs en lämplig texteditor. Förslagsvis använder ni MATLAB s egen editor. I så fall väljer ni New (för att skapa en ny fil) eller Open (för att öppna en redan befintlig fil) under File på menyraden i matlabfönstret. Glöm inte att spara dina filer innan du kör dem. Det är viktigt eftersom MATLAB inte läser från skrivbufferten. MATLAB letar efter filer i tur och ordning i: - Det bibliotek du jobbar i för tillfället - Ditt eget matlab-bibliotek - MATLAB s programbibliotek. Observera att om det finns två MATLAB-filer med samma namn kommer MATLAB att använda den fil som hittas först. Kommandot path ger lista över bibliotek där MATLAB söker efter filer. Man får en lista över alla m-filer i aktuellt bibliotek genom att i matlabfönstret ge kommandot what. Vill man byta bibliotek kan man skriva cd följt av bibliotekets namn (inklusive sökväg). Det finns ett omfattande programbibliotek. Undersök t.ex. innehållet i några av de bibliotek som är angivna i pathlistan. Programbibliotekets filer kan man fritt kopiera över till sitt eget matlab-bibliotek för inspektion och ev. modifikation. 4.1 Script-filer En av de viktigaste finesserna med MATLAB är att man kan utvidga arsenalen av kommandon med sina egna program. Detta kan ske på två sätt, antingen i form av s.k. script-filer eller i form av funktionsfiler. Båda filtyperna kallas m-filer eftersom deras namn alltid slutar med.m. En script-fil (kan även kallas kommando-fil) består av en uppsättning vanliga MATLAB-kommandon medan funktionsfiler fungerar som egendefinierade kommandon. Scriptfiler används huvudsakligen då det är opraktiskt att skriva direkt i Matlab-fönstret, till exempel om man skall skriva in en lång rad av kommandon, stora matriser och liknande, eller om man vill ha kvar de kommandon som skrivs in för senare bruk. Följande fil är skriven för att rita funktionen sin N x på intervallet [a b] för olika värden på a b och N. Till en början sätts a = ;4 b =4 och N =. Så här ser filen ut: a=-4*pi;b=4*pi;n=; Steg=(b-a)/1000; x=a:steg:b; y=sin(x).^n; plot(x,y); Skriv in filen ovan i någon editor (t.ex. MATLAB s egen) och spara den under namnet sinusn:m. Kontrollera att filen finns i ditt aktuella bibliotek med kommandot what. Kör sedan filen med följande kommando: >>sinusn; Du kan nu gå tillbaks till editeringsfönstret och ändra, t.ex. värdena på a b och N. Spara sedan filen och kör den på nytt. Skriv gärna också något medvetet fel i filen och se vilket felmeddelande du får. En viktig observation är att alla variabler som förekommer i en script-fil är globala, dvs. de är tillgängliga utanför filen. Testa detta genom att nu ge kommandot >>Steg 17

Matematik med Matlab för MI1/MEI1 000/001 sid. 18 av 6 Uppgift 6:Börja med att tilldela variabeln n värdet 10 i matlabfönstret. Öppna sedan din editor och skapa en fil med namnet summan:m. Skriv MATLAB-instruktioner i filen som gör följande: Tilldelar variabeln p värdet (p 6 +)=7. Genererar vektorn v =(1 3 ::: n). Skapar vektorn x =(1=1 p 1= p 1=3 p ::: 1=n p ). Beräknar talet s =1=1 p +1= p +1=3 p + ::: +1=n p Provkör filen och undersök sedan värdet på variabeln s. Pröva därefter ett större värde på n och kör filen igen. Vad händer med värdet på s då n växer mot oändligheten. Ändra nu i filen så att p istället får värdet (11 ; p 6 )=7. Spara sedan filen på nytt och pröva som tidigare värdet på s, för olika värden på n. Vad händer nu då n växer mot oändligheten. 4. Funktionsfiler Funktionsfiler består också av en samling vanliga MATLAB-kommandon, men skiljer sig mot sript-filer på några väsentliga punkter. Namnet på en funktionsfil skall vara funktionsnamn.m, inget annat även om det fungerar. Det första ordet i en funktionsfil skall vara function. Det följs sedan av en beskrivning av funktionens utvariabler (output), funktionsnamn och funktionens invariabler (input). Låt oss skriva en enkel funktion. Den skall heta myfunk, ha en invariabel och en utvariabel. Filen skall alltså heta myfunk:m och den första raden skall se ut så här: function y=myfunk(x) Därefter kommer beräkningsdelen av funktionen: taeljaren=x.*sin(x); naemnaren=1+sin(x).*sin(x); Alla beräkningsinstruktioner bör avslutas med ; för att undvika att mellan-kalkyler visas på skärmen. Sist i filen anges utvariabelns värde: y=taeljaren./naemnaren; Skriv in ovanstående kommandorader i editorn och spara under namnet myfunk:m. Prova sedan funktionen genom att i matlabfönstret ge följande kommandon: >>u=0:0.01:pi;v=myfunk(u);plot(u,v); Observera att varken invariabler eller utvariabler måste ha samma namn som de har i funktionsdefinitionen (dvs. första raden i filen myfunk.m). Till skillnad mot situationen med script-filer är alla variabler som använd inuti en funktion lokala, dvs. de är inte åtkomliga utifrån. Kontrollera detta genom att ge kommandot >>taeljaren De enda variabler som kan användas utifrån är de som förekommer i funktionens utvariabler. Observera också att om man givit en variabel ett visst värde i matlab-fönstret, så kommer detta värde inte att påverkas även om man använder samma variabelnamn innuti en funktion. Prova detta genom att först tilldela variabeln taeljaren värdet 3 i matlabfönstret innan du (som ovan) prövar funktionen myfunk. Kontrollera sedan att värdet på variabeln taeljaren inte har ändrats, trots att funktionen myfunk lokalt använt sig av variabelnamnet. En funktionsfil behöver inte ha en in-variabel och en ut-variabel, som i ovanstående exempel. Den kan helt sakna invariabler/utvariabler eller ha flera invariabler/utvariabler. En in-variabel kan vara ett tal, matris eller ett annat objekt. Om funktionen skall ha flera utvariabler så skall detta anges i deklarationen (första raden) genom att man räknar upp dem inom hakparanteser [ ]. Så här skulle första raden kunna se ut i en funktionsfil för en funktion med namnet exempel, som har fyra in-variabler och tre ut-variabler: function [ut1,ut,ut3]=exempel(in1,in,in3,in4) Uppgift 7: Sätt p = p 1 + p + p 3 + p 4 + p 5 + p 6. Skriv en funktionsfil där funktionen beräknar px sin x för x som anges i grader (istället för radianer). Testa sedan funktionen i matlabfönstret (om p =0och funktionen heter sing så skall alltså kommandot >>y=sing(30) ge resultatet y=300, om man har gjort rätt vill säga). 18

Matematik med Matlab för MI1/MEI1 000/001 sid. 19 av 6 4.3 Kommentarer i m-filer Man kan skriva egna kommentarer var som helst i en m-fil, bara man låter kommentaren inledas med tecknet %. MAT- LAB ignorerar då resten av raden. Om man sätter in sådana kommentarer överst i en script-fil eller omedelbart efter funktionsdeklarationen i en funktionsfil, så kommer dessa kommentarer att skrivas ut om man ger kommandot help följt av filnamnet (exklusive.m ). Här ges två exempel där filerna sinusn och myfunk kompletteras med kommentarer. sinusn.m: % sinusn % Denna scriptfil är till för att rita grafen av % y=sin(x)^n på intervallet (a,b). % a=-4*pi;b=4*pi;n=; % Val av intervallets ändpunkter och exponenten N Steg=(b-a)/1000; % Val av steglängd x=a:steg:b; y=sin(x).^n; % OBS! elementvis exponentiering plot(x,y); myfunk.m: function y=myfunk(x) % myfunk % myfunk(x)=x*sin(x)/(1+sin(x)^()) taeljaren=x.*sin(x); naemnaren=1+sin(x).*sin(x); % använder.* eftersom input x t.ex. kan vara en radvektor y=naemnare./taeljare; % obs!./ Skriv in kommentarerna i respektive m-fil och provkör på nytt, för att se om allt blivit rätt. Testa också kommandona >>help sinusn och >>help myfunk Viktigt! Det är klokt att ta för vana att sätta in kommentarer och hjälp-information i sina m-filer. Man glömmer lättare än vad man tror. Dessutom är det ofta hopplöst svårt att begripa vad okommenterade program egentligen gör, till och med om man själv skrivit dem. Uppgift 8: Lägg in kommentarer i din script-fil från uppg.1 och i din funktionsfil från uppg.. Testa sedan filerna på nytt och kontrollera att help-kommandot på de båda filerna ger den information du vill. 4.4 Villkor och val I detta delavsnitt, och de följande, beskrivs några kommandon som är praktiska vid programering i MATLAB. Vi börjar med ett enkelt exempel. Betrakta följande script-fil: if a>0 log(a) end Skriv in den i editorn och spara den med namnet logaritm.m. Ge sedan kommandot: >>a=3;logaritm Som resultat får vi då värdet på log(3). Pröva nu kommandot: >>a=-;logaritm Detta ger inget resultat. Innebörden i det som är skrivet i filen logaritm.m är att kommandot log(a) bara utförs om vill- 19