• No results found

Viktad anpassning till r¨ at linje

6.6 Mer om programmering och funktioner

6.6.2 Viktad anpassning till r¨ at linje

N¨asta uppgift blir att med utg˚angspunkt i samma schema designa och skriva en funktion som g¨or en viktad anpassning till en r¨at linje, y=a + bx.

Algoritm

Parametrarna a och b, samt os¨akerheten i dessa ges av:

a =

Pwix2i PwiyiPwixi Pwixiyi

∆ och b =

Pwi PwixiyiPwixiPwiyi

σa= s

Pwix2i

∆ σb =

sP wi

∆ d¨ar wi = 1

σi2 och ∆ =Xwi

Xwix2iXwixi

2

62 KAPITEL 6. PROGRAMMERING Gr¨anssnitt och syntax

Indata till funktionen ¨ar l¨ampligen tre vektorer, en med x-v¨arden, en med y-v¨arden och en med felen i y-v¨ardena. Vilka resultat vi vill f˚a ut ur funktionen kan variera en del. Vi kommer alltid att vilja se de anpassade v¨ardena f¨or parametrarna a och b, samt os¨akerheten i dessa.

Eventuellt vill vi ocks˚a f˚a en uppfattning om kvaliteten i anpassningen, det vill s¨aga chi-kvadratsumman per frihetsgrad och antalet frihetsgrader. Eftersom det, i motsats till lincorr ovan, inte ¨ar n¨odv¨andigt att r¨akna ut dessa senare tal f¨or att funktionen skall kunna k¨ora, s˚a l¨onar det sig att testa med nargout om dessa v¨arden verkligen ¨ar efterfr˚agade eller inte innan de ber¨aknas. Syntaxen f¨or funktionen blir d˚a: function [parA, sigmaA, parB, sigmaB, ChiSquared, Dof] =linfit(x, y, sigma).

Felkontroll

Ett m¨ojligt fel som m˚aste kollas ¨ar om de tre vektorerna som ¨ar argument till funktionen inte har samma l¨angd. Vidare b¨or man kontrollera att ∆ inte ¨ar noll s˚a att divisionerna ger ett odefinierat resultat. Om chi-kvadrat skall ber¨aknas m˚aste vi ocks˚a kontrollera att det finns minst tre m¨atta punkter, annars kommer divisionen n¨ar chi-kvadrat per frihetsgrad ber¨aknas att bli odefinierad, samt att inget av m¨atfelen felaktigt ¨ar angivet som 0, i vilket fall bidraget till chi-kvadratsumman fr˚an den punkten blir odefinierat.

Testa funktionen

Du kan testa den f¨ardiga funktionen p˚a datam¨angden x =[1.097 1.700 3.39 1.399 3.70 2.190 2.5 4.00];

x=x*0.001;

y =[0.429 0.668 1.328 0.547 1.445 0.856 0.973 1.557];

dy =[0.001429 0.001668 0.0020 0.0015 0.0020 0.0010 0.0020 0.0030];

Svaret skall bli: a = (1.9347 ± 1.540)10−3, b = (389.99 ± 0.665), N = 6, χ2/d.o.f. = 2.38 6.6.3 Viktad anpassning och plottning av r¨at linje.

H¨ar skall vi skriva en funktion som levererar en graf med data plottade med felstaplar och i samma graf den r¨ata linjen som ¨ar ett resultat av anpassningen till en r¨at linje, med parametrarna f¨or anpassningen utskrivna.

Algoritm

Anpassningen till en r¨at linje ¨ar inte n˚agot problem, vi l˚ater bara denna funktion i sin tur anropa linfit som vi skrev i f¨orra avsnittet. Det g¨aller sedan ”bara” att f˚a grafen att se snygg ut utan att g¨ora n˚agra antaganden i f¨orv¨ag om hur data ser ut. Det kan man

˚astadkomma genom att f¨orst plotta data, sedan flytta ut axlarna med 10% av det v¨arde som den automatiska skalningen ger f¨or att se till att alla punkter ligger v¨al inne i grafen.

D¨arefter drar vi den r¨ata linjen som definieras av anpassningen.

Om det anges i den kallande rutinen s˚a skall linplot skriva ut parametrarna fr˚an anpass-ningen. F¨or att skriva ut parametrarna formaterar vi med formatet %0.3g f¨or att det skall se snyggt ut oberoende av vilket resultatet av anpassningen blir. Vi vill sedan att texten skall hamna p˚a ett vettigt st¨alle och v¨aljer d¨arf¨or att b¨orja skriva 5% av grafens totala bredd in fr˚an v¨ansterkanten och ¨oversta raden 5% fr˚an toppen. Om riktningskoefficienten fr˚an anpassningen ¨ar negativ kommer datapunkter att ligga i det ¨ovre v¨anstra h¨ornet, vi v¨aljer d˚a ist¨allet att i horisontell ledd b¨orja att skriva i mitten av grafen. (Ett alternativ till denna algoritm kan vara att l¨agga till extra 20% i h¨ojdled n¨ar vi skalar om vertikalt och anv¨anda

6.6. MER OM PROGRAMMERING OCH FUNKTIONER 63 denna area till att placera in texten.) Vi b¨or d¨aremot undvika att anv¨anda kommandon som p˚averkar var grafen plottas, som figure(#) och subplot, det ¨ar b¨attre att det kallande programmet g¨or s˚adana val, eftersom ¨onskem˚alen kan vara vitt skilda f¨or olika till¨ampningar.

Gr¨anssnitt och syntax

Gr¨anssnittet f¨or den h¨ar funktionen ¨ar detsamma som f¨or linfit, de parametrar som skall skickas vidare till linfit, vektorerna x, y och sigma m˚aste ges som argument i anropet till linplot. En lyx-variant av funktionen skulle kunna ha som tillval att man ¨aven ger en str¨ang som anger hur grafen skall plottas av plot-kommandot, som till exempel ’-or’, men i f¨orsta omg˚angen bryr vi oss inte om det. D¨aremot m˚aste vi skicka med tre textstr¨angar som ger text-str¨angar f¨or titel, x-etikett och y-etikett. Om vi vill kunna v¨alja om parameterv¨arden skrivs ut i plotten eller inte s˚a m˚aste vi s¨atta in flaggor f¨or detta i argumenten till funktionsanropen, parflag som ¨ar 1 om vi vill att parameterv¨ardena skall skrivas in och 0 annars, chiflag styr p˚a samma s¨att om chi-kvadrat och frihetsgrader skall skrivas ut (kom ih˚ag att variabler inte skall ha samma namn som funktioner, vi kan allts˚a inte anv¨anda title och xlabel som namn p˚a variablerna). Utdata fr˚an linplot ¨ar de samma som f¨or linfit, allts˚a i f¨orsta hand v¨ardet p˚a parametrarna och os¨akerheten i dessa, samt som tillval chi-kvadratsumman och antalet frihetsgrader. Vi kan dessutom t¨anka oss att linplot ibland kommer att kallas utan att den kallande rutinen anv¨ander utdata alls, i de fall det intressanta bara ¨ar att f˚a en graf. Syntaxen f¨or funktionen blir d˚a : function [parA, sigmaA, parB, sigmaB, ChiSquared, Dof]

=linfit(x, y, sigma, titel, labelx, labely, parflag, chiflag)

Eftersom linplot skall kalla linfit m˚aste vi ocks˚a fundera ¨over gr¨anssnittet mellan dessa b¨agge funktioner. I princip ¨ar det ju inget som hindrar linplot fr˚an att kalla linfit med alla sex utdata parametrarna i anropet. Men om linplot inte ¨ar kallad med parametrarna ChiSquared och Dof, och om chiflag ¨ar noll s˚a beh¨over man ju inte ber¨akna chi-kvadratsumman i linfit. Att ¨and˚a kalla linfit med alla sex utdata parametrar betyder d˚a att programmet spenderar tid p˚a att ber¨akna saker som aldrig kommer att anv¨andas, vilket ¨ar sl¨oseri. Vi m˚aste allts˚a i linplot testa om s˚a ¨ar fallet eller inte och bara anropa linfit med alla sex utdata parametrar om det ¨ar n¨odv¨andigt, annars anv¨ander vi [parA, sigmaA, parB, SigmaB]

Felkontroll

Det fel vi beh¨over testa f¨or ¨ar om vektorerna x, y och sigma har samma l¨angd, i annat fall kraschar errorbar-kommandot. Man kan tycka att vi inte beh¨over testa f¨or det i linplot eftersom linfit testar f¨or det. Men man skall f¨ors¨oka att skriva varje funktion s˚a komplett och sluten som m¨ojligt. Det kan ju h¨anda att vi i framtiden vill anv¨anda linplot s˚a att den kallas av n˚agon annan funktion ¨an linfit, i en s˚adan situation kan det vara om¨ojligt att minnas att vi m˚aste kolla om den nya funktionen g¨or den n¨odv¨andiga testen.

64 KAPITEL 6. PROGRAMMERING Testa funktionen

Om funktionen fungerar b¨or kodsnutten nedan clear all;

x =[1.097 1.700 3.39 1.399 3.70 2.190 2.5 4.00];

x=x*0.001;

y =[0.429 0.668 1.328 0.547 1.445 0.856 0.973 1.557];

dy =[0.001429 0.001668 0.0020 0.0015 0.0020 0.0010 0.0020 0.0030];

dy=dy*10;

clf

[parA, sigmaA, parB, sigmaB, chi, N] = linplot . . . (x, y, dy,’Resistor 1’,’Str¨om (A)’,’Sp¨anning (V)’,1,1)

skapa en graf som ser ut som:

testa ocks˚a att texten dyker upp p˚a r¨att st¨alle n¨ar riktningskoefficienten ¨ar negativ, och att vi kan sl˚a av och p˚a utskrift av parameterv¨arden med flaggorna som det ¨ar t¨ankt.

6.7. OVNINGSUPPGIFTER¨ 65

6.7 Ovningsuppgifter ¨

1. Skapa en vektor med tio element som best˚ar av likformigt f¨ordelade slumptal (minns sektion 5.3.2) som antar heltalsv¨arden fr˚an 1 till 6.

2. Skriv ett program som med hj¨alp av en for-slinga genererar utskriften:

Hej - nu ar X:

1.200

Hej - nu ar X:

2.400

Hej - nu ar X:

3.600

3. Skriv en funktion som returnerar ett slumptal mellan 1 och 100. Talet skall vara ett heltal, dvs inga decimaler skall finnas med. F¨orsta raden i filen kan se ut s˚a h¨ar:

function y = slumptal()

4. Skriv en programsnutt som anv¨ander en while-slinga f¨or att r¨akna hur m˚anga g˚anger du kallat slumptalsgeneratorn innan slumptalet blir st¨orre ¨an 0.75.

5. Skriv ett program som genererar en slumpm¨assig tipsrad. Anta att sannolikheten f¨or 1, x och 2 alla ¨ar 1/3, och l˚at programmet skriva ut tipsraden (en tipsrad best˚ar av tretton stycken tecken). Ett exempel p˚a en k¨orning kan se ut s˚a h¨ar:

>> tipsrad 2

x 2 1 2 1 2 x 2 1 x 2 2

6. En metod f¨or att approximera kvadratroten av ett tal ¨ar Newtons metod som ger

√x ≈ yk med yk+1 = 12yk+yx

k

 och y1 = 1. Skriv en funktion y=Newton(x) som anv¨ander denna metod f¨or att ber¨akna kavdratroten ur ett godtyckligt positivt tal.

Kadratroten skall anges korrekt avrundad med tre decimalsiffrors noggrannhet.

Ledning: eftersom vi inte har n˚agot facit m˚aste vi i funktionen sj¨alva avg¨ora n¨ar serien har konvergerat tillr¨ackligt f¨or att vi skall ha den s¨okta noggrannheten. Detta kan vi t.ex. g¨ora genom att kontrollera att |yk− yk−1| < 0.0001

Vi m˚aste dessutom hitta p˚a ett trick f¨or att runda av korrekt, de rutiner vi har till hands rundar ju bara av heltal. Detta kan vi komma runt genom att transformera v˚art decimaltal till ett l¨ampligt heltal som vi sedan rundar av och d¨arefter transformerar tillbaks till ett decimaltal.

66 KAPITEL 6. PROGRAMMERING 7. Skriv ett program som ber¨aknar en approximation till e, basen f¨or den naturliga

loga-ritmen, fr˚an summan.

e =

X

k=0

1 k!

8. Skriv tv˚a funktionsfiler, medel och standavv, som ber¨aknar medelv¨arde och stan-dardavvikelse f¨or en vektor. Kontrollera att de ger samma resultat som mean och std!

Kapitel 7

N¨ ar det blir fel

N¨astan inga program blir helt r¨att fr˚an b¨orjan. N¨ar det uppst˚ar fel i enklare program kan man ofta hitta orsaken bara genom att g˚a igenom programmet en g˚ang till med vetskap om vad som gick fel. Men i takt med att programmen blir st¨orre och mer komplicerade blir denna procedur mer och mer besv¨arlig och tidskr¨avande.

Ett fel i ett datorprogram kallas p˚a engelska ”bug”. Detta uttryck s¨ags h¨arstamma fr˚an datorernas barndom. Vid ett tillf¨alle hade ett team som jobbade med en av de f¨orsta stora ber¨akningsmaskinerna (r¨orbestyckad) l¨ange f¨ors¨okt att ta reda p˚a vad sOctaveom gick fel i ett program. Till slut uppt¨ackte man att orsaken inte l˚ag i programmet utan att en d¨od insekt inuti maskinen hade orsakat en kortslutning. Denna historia m˚a vara sann eller inte, men ett fel i ett datorprogram heter p˚a engelska ”bug”, och processen att hitta och korrigera fel heter debugging. P˚a svenska s¨ager man oftast bugg och debugga, men ibland kan man m¨ota termen ”avlusa”.

I n¨astan alla programmeringsmilj¨oer finns det speciella verktyg att anv¨anda f¨or att leta efter fel i sina program, s˚a kallade debuggers. Gemensamt f¨or de flesta ¨ar att man med hj¨alp av verktyget kan k¨ora sitt program rad f¨or rad och vid valfri tidpunkt stanna upp och inspektera v¨ardet p˚a de variabler som finns i programmet. Man kan ocks˚a k¨ora programmet tills v¨ardet p˚a en viss variabel ¨andras. Med hj¨alp av s˚adana verktyg kan man n¨asta alltid hitta ˚atminstone de fel i ett program som orsakas av att man t¨ankt fel n¨ar man skrivit programmet.

Att anv¨anda en debugger kr¨aver en hel del tr¨aning f¨or att det skall bli effektivt. I den h¨ar kursen ser vi detta som ¨overkurs. I st¨allet ger vi h¨ar n˚agra enkla tips om hur man med hj¨alp av de felmeddelanden vi kan se i kommandof¨onstret kan komma en bra bit p˚a v¨agen f¨or att avhj¨alpa de vanligaste nyb¨orjarfelen.

• A = Inf

A har ber¨aknats p˚a ett s¨att som “ger o¨andligheten”, ett fel som n¨astan alltid uppst˚ar f¨or att man f¨ors¨oker dividera med noll.

• B = NaN

B ¨ar “not a number”, resultatet av en operation som inte ¨ar definierad, som t.ex. 0/0 eller cos(8/0),

• error: ’x’ undefined near line n column m error: called from:

error: Z:\slash...\slash funk.m at line n column m

Detta fel uppst˚ar n¨ar vi f¨ors¨oker anv¨anda en variabel som inte ¨ar initialiserad. En variabel m˚aste definieras antingen genom tilldelning (x = konstant) eller ber¨akning (x

= 3*y). F¨ors¨oker vi anv¨anda en variabel innan den definierats f˚ar vi felmeddelandet 67

68 KAPITEL 7. N ¨AR DET BLIR FEL ovan. Octave kan inte riktigt avg¨ora om vi f¨ors¨oker anv¨anda en icke-definierad variabel eller en icke-definierad funktion. Att det st˚ar “function” i felmeddelandet skall man allts˚a inte ta f¨or bokstavligt.

• error: operator * : nonconformant arguments (op1 is nxm, op2 is mxn) error: called from:

error Z:\slash...\slash funk.m

Detta fel uppst˚ar n¨ar vi f¨ors¨oker multiplicera tv˚a matriser som inte har korrekta di-mensioner med varandra, dvs. antalet kolumner i den v¨anstra matrisen ¨ar inte lika med antalet rader i den h¨ogra.

• error: for A^b, A must be square

Igen ser vi i hyfsad klartext var felet ligger. H¨ar vill man g¨ora endera av tv˚a saker.

Antingen att ta skal¨arprodukten av x med sig sj¨alv, i vilket fall vi m˚aste komma ih˚ag att transponera en av vektorerna. Men ofta uppkommer det h¨ar felet n¨ar vi gl¨omt att ta med punkten i den elementvisa operationen. Ofta ¨ar det ist¨allet x.∧2 vi vill ber¨akna.

• Syntax error parse error:

syntax error

>>> 3+/ 3

^

Syntax error kan vi f˚a p˚a m˚anga andra s¨att, varje g˚ang vi inte f¨oljer Octaves spr˚akliga regler, dvs reglerna f¨or hur vi skall formera v˚ara rader s˚a kommer vi att f˚a ett syntaxfel.

• error: invalid call to cos. Correct usage is:

-- Mapping Function: cos(X)

Detta felmeddelande ¨ar ocks˚a l¨att att f¨orst˚a. Vi har f¨ormodligen gl¨omt att Octave anv¨ander decimalpunkt och inte decimalkomma, s˚a n¨ar vi skriver till exempel cos(2,4) tolkas det som tv˚a tal, och eftersom cosinusfunktionen bara accepterar ett argument s˚a f˚ar vi ett fel.

Kapitel 8

2D-Grafik

I det h¨ar passet kommer vi att koncentrera oss p˚a att skapa grafik: histogram, plottar och annat som kan anv¨andas f¨or att ˚ask˚adligg¨ora experimentella resultat. Vi skall f¨ors¨oka avst˚a fr˚an frestelsen att komma med pekpinnar om hur grafik skall utformas f¨or att vara bra, utan i st¨allet koncentrera oss p˚a att g˚a igenom tekniken, s˚a att vi kan ˚astadkomma grafik som ser ut som vi vill.

Efter att ha g˚att igenom det h¨ar passet skall du sj¨alv kunna producera en plot som den ovan och ocks˚a kunna b˚ade skriva ut den och kopiera in den i ett dokument f¨or att bifogas i en lab-rapport.

69

70 KAPITEL 8. 2D-GRAFIK

8.1 Kurvor i tv˚ a dimensioner

Att skapa enklare tv˚a-dimensionella plottar i Octave ¨ar relativt enkelt. En skillnad mellan Octave och en del andra grafikprogram ¨ar att vi inte kan instruera Octave att till exempel rita kurvan y=sin(x). Ist¨allet m˚aste vi ge Octave en upps¨attning punkter med en x-koordinat och en y-koordinat. Octave ritar sedan upp en kurva som f¨orbinder punkterna. Vill vi rita upp y = sin(x) m˚aste vi d¨arf¨or f¨orst sj¨alva skapa en x-vektor och sen en y-vektor1 d¨ar y=sin(x) och instruera Octave att rita en kurva mellan de punkter som beskrivs av dessa vektorerna. L˚at oss b¨orja med n˚agot enkelt som att rita grafen f¨or y = 2x + 3.

>x = [1 8];

> y = 2*x + 3;

> plot (x,y)

8.1.1 Att v¨axla mellan f¨onster, och st¨ada i f¨onster.

N¨ar vi trycker p˚a return efter att ha givit plot kommandot ¨oppnas ett nytt f¨onster, Octaves grafikf¨onster, d¨ar plotten visas. N¨ar vi jobbar med grafik kommer vi att vilja pendla mellan m˚anga f¨onster. Ofta kommer vi att utf¨ora samma lunk mellan editorns f¨onster d¨ar vi just

¨

andrat n˚agon detalj i en m-fil till kommandof¨onstret f¨or att k¨ora filen till grafikf¨onstret f¨or att se hur det blev. Det finns flera metoder f¨or att snabbt v¨axla mellan f¨onster, vilken som passar b¨ast just f¨or stunden beror litet p˚a exakt vad man h˚aller p˚a med och hur man f¨oredrar att jobba.

• Det kanske enklaste s¨attet ¨ar att helt enkelt l¨agga f¨onstren bredvid varandra, eller i alla fall se till inget f¨onster ligger helt bakom de andra. Genom att klicka och dra p˚a kanten av ett f¨onster kan du flytta det vart du vill p˚a datorns skrivbord, och genom att klicka och dra i ett aktivt f¨onsters nedre h¨ogra h¨orn kan du ¨andra dess storlek. Om du l¨agger upp de f¨onster du jobbar i s˚a att det alltid sticker fram n˚agon bit av f¨onstret

¨

aven n¨ar det ¨ar de andra f¨onstren som ¨ar aktiva s˚a kan du enkelt byta f¨onster bara genom att klicka med musen i det f¨onster du vill skall bli det aktiva.

• I windows finns det en funktion f¨or att bl¨addra mellan alla f¨onster som ¨ar ¨oppna p˚a datorns skrivbord. H˚all ”alt”-tangenten nedtryckt och tryck p˚a TAB tangenten. Varje g˚ang du trycker ned TAB bl¨addras ett nytt f¨onster fram som aktivt, vilket f¨onster som g¨ors aktivt visas i en liten ruta.

Vill du st¨ada upp i grafikf¨onstret skriver du (i kommandof¨onstret) clf (CLear Figure window), vill du st¨ada upp i kommandof¨onstret ger du kommandot clc (CLear Command window).

Du kan st¨anga grafikf¨onstret genom att ge kommandot close.

8.1.2 plot-kommandot

L˚at oss prova att plotta en litet mer komplicerad kurva, y = x2. Pr¨ova

> clear all;

> x = [1 4];

> y = x.∧2;

> plot(x,y)

Resultatet blir inte direkt vad vi v¨antat oss, men egentligen ¨ar det inte s˚a m¨arkligt: plot kommandot ser ju bara de punkter vi vill rita en graf mellan och har ingen aning om huru-vida de tv˚a punkterna (1,1) och (4,16) ¨ar tv˚a punkter p˚a kurvan y=x2, eller om de ligger p˚a

1Eftersom det Octave anv¨ander i plottandet ¨ar punkter, vars x- och y-koordinater kommer fr˚an vektorerna x och y s˚a m˚aste vektorerna ha samma antal element.

8.1. KURVOR I TV˚A DIMENSIONER 71 kurvan y = 5x-4. Mer information m˚aste allts˚a till, pr¨ova att l¨agga till punkten ( x,y)

= (2,4). Inte heller s¨arskilt imponerande. F¨or att kurvan skall bli j¨amn och fin och f¨olja det funktionssamband vi ¨onskar m˚aste vi ge Octaves plot-kommando vektorer d¨ar punkterna ligger ganska t¨att. Det g¨ors enklast om vi anv¨ander oss av Octaves vektorfunktioner. Antag till exempel att vi vill plotta y=x2mellan 0 och 4.5. Vi kan d˚a antingen anv¨anda kolonoper-atorn f¨or att skaffa oss en x-vektor d¨ar elementen har v¨arden fr˚an 0 till 4.5 med vilket avst˚and vi vill, till exempel 0.1: x = 0:0.1:4.5; (n¨ar vektorerna f˚ar s˚a h¨ar m˚anga element vill man g¨arna st¨anga av ekot genom att ge semikolon efter kommandot). Alternativt kan vi anv¨anda linspace f¨or att skapa 50 punkter mellan 0 och 4.5: x = linspace(0,4.5,50); ger oss ocks˚a en anv¨andbar x-vektor. N¨ar x-vektorn ¨ar klar skapar vi en y-vektor med y = x.∧2 och plottar resultatet.

Prova nu att plotta n˚agra andra funktioner som polynom och sin(x) f¨or att se att resultatet blir som du f¨orv¨antar dig.

8.1.3 Styra utseendet p˚a grafiken

Det mesta av den tid man spenderar p˚a att g¨ora grafer tenderar att l¨aggas p˚a att f˚a lay-outen att bli vad man har t¨ankt sig. Eftersom korrekt och tydlig lay-out ¨ar ett viktigt verktyg f¨or att ˚astadkomma grafik av h¨og kvalitet kan det vara v¨art besv¨aret att redan fr˚an b¨orjan f¨ors¨oka l¨ara sig de kommandon som kr¨avs f¨or att man skall kunna styra programmet dit man vill.

Linjef¨arg, linjetyp och mark¨orer

Kommandot plot kan ges med tre argument: plot(x,y,S). Argumentet S ¨ar en textstr¨ang som anger hur linjen som ritas skall formateras. Det finns tre typer av information att styra, f¨argen p˚a linjen, hur linjen dras (heldragen, prickad mm), och slutligen mark¨or, eller vilken symbol som skall ritas ut i de punkter som anges av vektorerna. Skriver du help plot kan du bland annat hitta f¨oljande lista p˚a vilka m¨ojligheterna ¨ar:

Linjef¨arg Mark¨or

1/r red * star

2/g green s square 3/b blue v triangle 4/m magenta o circle

5/c cyan + plus

y yellow . dot

k black p pentagram

Man kan i plot kommandot anv¨anda en godtycklig kombination av dessa (men bara ett val f¨or varje kategori!). Prova med litet olika kombinationer f¨or att se hur det fungerar, en gul kurva med heldragen linje mellan sm˚a cirklar ges t.ex av plot(x,y,’yo-’). M¨ark att om man ger formatkommandot f¨or linjef¨arg och mark¨or men inte n˚agon kod f¨or linjetyp som

Man kan i plot kommandot anv¨anda en godtycklig kombination av dessa (men bara ett val f¨or varje kategori!). Prova med litet olika kombinationer f¨or att se hur det fungerar, en gul kurva med heldragen linje mellan sm˚a cirklar ges t.ex av plot(x,y,’yo-’). M¨ark att om man ger formatkommandot f¨or linjef¨arg och mark¨or men inte n˚agon kod f¨or linjetyp som