• No results found

Milj¨ on i Matlab

2.3.1 St¨ada upp kommandof¨onstret: tyst input, forts¨attningsrader

N¨ar man b¨orjar komma ig˚ang litet med att anv¨anda MATLAB tycker man ofta att kom-mandof¨onstret blir litet ostrukturerat, alla kommandon man ger upprepas slaviskt, vissa v¨arden ges utan decimaler, andra med en l˚ang rad nollor p˚a slutet. Det finns ett antal kommandon som hj¨alper en att skr¨addarsy vad vi ser i kommandof¨onstret.

F¨or att st¨anga av ekot, det vill s¨aga f¨or att f˚a MATLAB att avst˚a fr˚an att rapportera resultatet av varje kommando vi skriver in r¨acker det med att avsluta raden med semikolon.

Egentligen ¨ar det inte raden, utan kommandot som avslutas med semikolon. Distinktionen ¨ar viktig, eftersom anv¨andandet av semikolon g¨or det m¨ojligt att skriva mer ¨an ett kommando p˚a varje rad. Denna finess b¨or anv¨andas med omd¨ome, driver man det f¨or l˚angt kan det bli n¨astan om¨ojligt att se vad man gjort, men r¨att anv¨ant kan det ist¨allet g¨ora det l¨attare att f¨olja med:

 laskeblask = 10; korv = 12; kaffe = 4;

 Kalle = 2*korv + 4*kaffe Kalle =

40

ser mycket b¨attre ut ¨an f¨orra g˚angen vi r¨aknade ut Kalles utgifter.

Man b¨or f¨ors¨oka undvika alltf¨or l˚anga kommandon, men ibland kan man beh¨ova skriva kommandon som inte f˚ar plats p˚a en rad, som till exempel:

Y = ((3.5*(laskeblask+korv)-kaffe)+sin(pi-2.75*Kalle)/korv∧2 +(45-kaffe)∧3 Om vi beh¨over dela upp ett kommando p˚a fler rader kan vi g¨ora det: F¨or att tala om f¨or MATLAB att kommandot inte ¨ar slut n¨ar raden ¨ar slut, vilket ¨ar vad MATLAB normalt antar, s˚a m˚aste den rad som har en forts¨attning avslutas med tre punkter omedelbart f¨oljda av return:

 Y = ((3.5*(laskeblask+korv)-kaffe)+...

sin(pi-2.75*Kalle)/korv∧2+(45-kaffe)∧ 3))

¨

ar allts˚a ett kommando ¨aven om det str¨acker sig ¨over mer ¨an en rad.

2.3.2 Format och avrundning

I exemplen vi sett s˚a h¨ar l˚angt har MATLAB genomg˚aende skrivit ut heltal utan decimaler och decimaltal med fyra decimaler. Det senare g¨aller s˚av¨al i de fall d¨ar vi har definierat en variabel genom att skriva in bara en decimal som t ex 0.5, som i de fall d˚a MATLAB visar ett tal med o¨andligt l˚ang decimalutveckling som pi eller 1/3. N¨ar vi kommer till mycket stora eller mycket sm˚a tal sl˚ar MATLAB om till att anv¨anda ”scientific notation”, d¨ar tal representeras som ett decimaltal multiplicerat med en l¨amplig tiopotens. I denna notation skrivs till exempel 1.602·10−19 som 1.602e-19.

Hur MATLAB skall formattera de tal som visas kan p˚averkas genom kommandot format.

F¨or att se vilka alternativ som finns kan vi g˚a till help f¨onstret och s¨oka p˚a

2.3. MILJ ¨ON I MATLAB 13

?/MATLAB/Functions – Categorical List/Desktop Tools and Development En-vironment/Command Window and History/Format

Eller enklare genom att bara skriva

 help format

L¨agg s¨arskilt m¨arke till kommandot format compact som tar bort alla dessa blanka rader som MATLAB spottar ur sig.

2.3.3 Matlabs “Workspace”

Vi har nu sett hur variabler som vi definierar, till exempel laskeblask i avsnitt 2.2.3, ”lever kvar”. L˚angt efter det att vi definierat dem kan vi anv¨anda dem i nya uttryck, och vi kan se vilka v¨arden de har genom att skriva deras namn i kommandof¨onstret. Det st¨alle d¨ar dessa variabler lever ¨ar en del av datorminnet som MATLAB reserverar f¨or variabler och som kallas ”workspace”. Under l˚anga MATLAB sessioner kan MATLABs workspace bli ganska t¨atbefolkad, man kan l¨att samla p˚a sig en stor m¨angd variabler. Som vi snart kommer att se kan ett variabelnamn beteckna inte bara tal, utan vektorer och matriser med hundratals element. F¨or att vi l¨attare skall kunna ha ¨oversikt och kontroll ¨over de variabler som lever i workspace finns speciella kommandon och verktyg. Det kanske tydligaste ¨ar ytterligare ett f¨onster som kallas just ”workspace”. F¨or att ¨oppna det g˚ar vi in i ”Desktop” menyn och sedan

“Desktop Layou” och bockar f¨or ”Workspace” (det g¨or du genom att klicka p˚a ”Workspace”

i menyn). N¨ar du gjort det ¨oppnas detta f¨onster som en pann˚a i MATLABs desktop. I detta f¨onster ser du alla variabler som ¨ar definierade i den p˚ag˚aende MATLAB sessionen.

Varje rad inneh˚aller tre kolumner, den f¨orsta anger variabelns namn, n¨asta dess aktuella v¨arden. Slutligen visas vilken klass variabeln tillh¨or. I workspace-f¨onstret kan vi manipulera inneh˚allet i variablerna, och ocks˚a arbeta med workspace sj¨alvt. Det ¨ar till exempel m¨ojligt att spara hela inneh˚allet i workspace till h˚arddisken f¨or att sedan l¨asa in det till workspace igen n¨ar vi startar n¨asta MATLAB session. Detta ¨ar ett s¨att att inte beh¨ova skiva in alla data (som t ex priset p˚a en l¨askeblask och en varmkorv) varje g˚ang vi vill g¨ora en viss typ av ber¨akningar.

Vi kan ocks˚a studera variablerna n¨armare genom att dubbelklicka p˚a namnet f¨or en av dem i workspace-f¨onstret. G¨or vi det ¨oppnas ett f¨onster med v¨ardet p˚a variabeln. F¨or tal ¨ar detta f¨onster inte s¨arskilt intressant, men om vi g¨or f¨or en en matris kommer vi att f˚a se en snygg representation av matrisen d¨ar vi kan g˚a in och ¨andra enstaka element. Vi ˚aterkommer till de mer avancerade anv¨andningarna av workspace-f¨onstret senare (n¨ar du har tittat klart p˚a det h¨ar f¨onstret st¨anger du det - precis som alla andra f¨onster i Windows - genom att klicka p˚a X i ¨ovre h¨ogra h¨ornet),

Ett alternativt s¨att att se vad som finns i workspace ¨ar att i kommandof¨onstret ge kommandot whos.

Vi kan nu ocks˚a f¨orst˚a litet b¨attre vad clear kommandot g¨or: genom att skriva clear Kalle tar vi helt enkelt bort variabeln Kalle fr˚an MATLABs workspace, vilket g¨or att MAT-LAB helt gl¨ommer bort att Kalle existerat. Du kan prova detta genom att skriva clear xxx i kommandof¨onstret f¨or n˚agon av de variabler som syns i workspace-f¨onstret och se vad som h¨ander.

2.3.4 ”Play it again Sam”- att upprepa kommandon

I ”Kalle Ankas Julafton” finns en film som visar en husvagnstur med Kalle Anka, Musse Pigg och L˚angben. I en av scenerna sitter L˚angben och ¨ater en majskolv. N¨ar han g¨or det f¨or han munnen ¨over majskolven, varvid det h¨ors ett konstigt knattrande ljud. N¨ar han kommit till slutet av majskolven h¨ors ett pling, varvid han flyttar huvudet till andra sidan av majskolven

och proceduren b¨orjar om. N¨ar mina barn ser det h¨ar skrattar dom, men dom har ingen aning om vad det hela anspelar p˚a: f¨orr i tiden fanns det skrivmaskiner!

N¨ar f¨orfattaren var ung var skrivmaskiner n˚anting ganska h¨aftigt. Med ganska mycket m¨oda kunde man f˚a ett brev eller ett dokument att se j¨atteproffsigt ut. Kruxet var bara att skrivmaskiner var fullkomligt skoningsl¨osa - skrev man fel var det bara att riva ut pappret och b¨orja om (p˚a hemma-niv˚a kunde man f¨orst˚as backa och kryssa ¨over med ett antal ”XXXX”, men det f¨ortog ganska mycket av effekten). Det fanns speciella suddgummin f¨or skrivmaskier, stenh˚arda skivor som antingen rev s¨onder pappret i sm˚abitar eller smetade ut skriften ¨over hela pappret. S˚a sm˚aningom kom ”TipEx”, en vit f¨arg man kunde m˚ala ¨over sina misstag med, och sedan skriva ny text ovanp˚a. Det blev med ens m¨ojligt att hyfsa till dokument om man gjorde n˚agot enstaka fel, men riktigt proffssnyggt blev det inte, och man kunde inte heller ¨andra hela stycken mitt i ett f¨ardigt dokument.

De av oss som har upplevt denna period kan till fullo uppskatta vad ankomsten av sm˚a billiga datorer betytt f¨or ordbehandlingen: ¨andringar blir triviala, felstavningar korrigeras enkelt (ibland till och med automatiskt), man kan ˚ateranv¨anda gamla dokument, byta ut stycken helt godtyckligt - aldrig tidigare har s˚a mycket text kunnat produceras med s˚a liten m¨oda!

Det vore naturligtvis sk¨ont att kunna f˚a en ”r¨aknebehandlare” som har alla dessa f¨oretr¨aden.

Har man v¨al skrivit in

Y = ((3.5*(a+b)-c)+sin(phi-2.75*D)/epsil∧2+(455-abba∧)/ (cos(4+pi)-2.75) bara f¨or att komma p˚a att det borde ha varit

Y = ((3.5*(a+b)-c)+sin(phi-2.75*B)/epsil∧2+ (455-abba∧3)/(cos(4+pi)-2.75) s˚a kan man bli litet tr¨ott, och ¨onska sig att MATLAB bar sig ˚at som en ordbehandlare. Om man sedan kommer tillbaks en vecka senare f¨or att r¨akna om n˚agot p˚a en lab-rapport man f˚att

˚ater p˚a s˚a ¨onskar man verkligen att man kunde trolla tillbaks vad man gjorde f¨orra veckan.

MATLAB, och andra moderna ber¨akningsprogram, svarar upp till dessa f¨orv¨antningar. Dels finns det ett sk ”historie-f¨onster” d¨ar man kan ˚aterkalla sina tidigare kommandon och redi-gera dessa innan man exekverar dem igen. Dessutom kan man spara hela sekvenser av kommandon i s˚a kallade ”M-filer” som man sedan kan ˚aterkalla, eventuellt redigera, och k¨ora igen.

2.3.5 Att ˚aterkalla kommandon

Det enklaste s¨attet att f˚a chansen att g¨ora om n˚agot vi gjort nyligen ¨ar att trycka p˚a upp-pilen p˚a tangentbordet. N¨ar vi g¨or det visas det senast utf¨orda kommandot i kommandof¨onstret.

Trycker vi p˚a pilen en g˚ang till kommer kommandot innan dess och s˚a vidare. N¨ar vi knappat oss fram till det kommando vi vill g¨ora om s˚a ¨ar det bara att trycka p˚a return s˚a utf¨ors kommandot en g˚ang till. Oftast s˚a ˚aterkallar man ju ett kommando f¨or att man gjort n˚agot sm¨arre fel som man vill korrigera, vilket ¨ar l¨att gjort. N¨ar man bl¨addrat fram det kommando man vill g¨ora om kan man flytta sig in i raden genom att trycka p˚a v¨anster-pil. N¨ar man g¨or det r¨or sig pekaren in ¨over raden, n¨ar den st˚ar till h¨oger om det man vill ¨andra kan man radera ut delar av kommandot genom att trycka p˚a delete-knappen. N¨ar man suddat det som ¨ar fel ¨ar det bara att skriva in vad som skall st˚a i st¨allet. N¨ar man ¨ar n¨ojd ¨ar det sedan bara att trycka p˚a return. Oavsett om pekaren st˚ar mitt i raden s˚a kommer MATLAB att utf¨ora kommandot som st˚ar p˚a hela raden.

Man kan ocks˚a ta sig in i raden genom att bara flytta pekaren till n˚agot st¨alle i raden genom att klicka. Prova genom att t ex skriva

 y = sin (2 * pi)

och sedan till exempel ¨andra 2 till 3 eller sin till cos.

2.4. M-FILER 15