4.4. Mera om grafiken i MATLAB



Relevanta dokument
Funktioner och grafritning i Matlab

ATT RITA GRAFER MED KOMMANDOT "PLOT"

Mer om funktioner och grafik i Matlab

Introduktion till Matlab

Mer om funktioner och grafik i Matlab

3.3. Symboliska matematikprogram

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

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

MMA132: Laboration 1 Introduktion till MATLAB

KPP053, HT2016 MATLAB, Föreläsning 3. Plotter och diagram Läsa och skriva data till fil

Introduktion till MATLAB

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

TAIU07 Matematiska beräkningar med Matlab

CTH/GU LABORATION 1 MVE /2013 Matematiska vetenskaper. Mer om grafritning

Introduktion till Gnuplot

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

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

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

TAIU07 Matematiska beräkningar med Matlab

15 februari 2016 Sida 1 / 32

TSBB14 Laboration: Intro till Matlab 1D

Matlabövning 1 Funktioner och grafer i Matlab

TANA17 Matematiska beräkningar med Matlab

( ) i xy-planet. Vi skapar ( ) med alla x koordinater och en ( ) med alla y koordinater. Sedan plottar vi punkterna med kommandot. , x 2, x 3.

Matlabövning 1 Funktioner och grafer i Matlab

9-1 Koordinatsystem och funktioner. Namn:

Grafik och Egna funktioner i Matlab

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Laborationstillfälle 1 Lite mer om Matlab och matematik

Lösningar till linjära problem med MATLAB

Var försiktig med elektricitet, laserstrålar, kemikalier osv. Ytterkläder får av säkerhetsskäl inte förvaras vid laborationsuppställningarna.

Newtons metod. 1 Inledning. CTH/GU LABORATION 3 MVE /2014 Matematiska vetenskaper

TAIU07 Matematiska beräkningar med Matlab

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

Laboration: Grunderna i MATLAB

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik

Ickelinjära ekvationer

Inlämningsuppgift 4 NUM131

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Problemet löd: Är det möjligt att på en sfär färga varje punkt på ett sådant sätt att:

Kort introduktion till Casio fx-9750 GII. Knappsats

9.3. Egenvärdesproblem

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

Grafritning och Matriser

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Omtentamen i DV & TDV

Funktioner och grafritning i Matlab

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

Newtons metod och arsenik på lekplatser

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

f(a + h) = f(a) + f (a)h + f (θ) 2 h2, θ [a, a + h]. = f(a+h) f(a)

Laboration i Fourieroptik

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

Beräkningsverktyg HT07

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Parametriserade kurvor

Linjärisering, Jacobimatris och Newtons metod.

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Matematisk Modellering

Mer om funktioner och grafik i Matlab

Datorlaborationer i matematiska metoder E1, del C, vt 2002

Textsträngar från/till skärm eller fil

Mer om linjära ekvationssystem

MATLAB övningar, del1 Inledande Matematik

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

Matriser och Inbyggda funktioner i Matlab

LABORATIONSHÄFTE NUMERISKA METODER GRUNDKURS 1, 2D1210 LÄSÅRET 03/04. Laboration 3 3. Torsionssvängningar i en drivaxel

Vektorgeometri för gymnasister

4.3. Programmering i MATLAB

Lab 1, Funktioner, funktionsfiler och grafer.

Introduktion till Matlab

Introduktion till Matlab 1

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

2. För vilka värden på parametrarna α och β har det linjära systemet. som satisfierar differensekvationen

1.1 MATLABs kommandon för matriser

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

Matematik 2 Digitala övningar med TI-82 Stats, TI-84 Plus och TI-Nspire CAS

Studiehandledning till. MMA121 Matematisk grundkurs. Version

Quiz name: FV4 Date: 10/03/2015 Question with Most Correct Answers: #2 Total Questions: 11 Question with Fewest Correct Answers: #3

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Linjär algebra med tillämpningar, lab 1

Lab 2, Funktioner, funktionsfiler och grafer.

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

Introduktion till Matlab

Lathund algebra och funktioner åk 9

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

Laboration: Grunderna i Matlab

Fria matteboken: Matematik 2b och 2c

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

MATLAB. Vad är MATLAB? En kalkylator för linlär algebra. Ett programspråk liknande t.ex Java. Ett grafiskt verktyg.

Introduktion till Python Teoridel

Introduktion till Matlab

Lennart Carleson. KTH och Uppsala universitet

2 februari 2016 Sida 1 / 23

MATLAB handbok Introduktion

Matriser och Inbyggda funktioner i Matlab

Approximation av funktioner

Transkript:

4.4. Mera om grafiken i MATLAB Larry Smarr, ledare för NCSA (National Center for Supercomputing Applications i University of Illinois, brukar i sina föredrag betona betydelsen av visualisering inom den moderna forskningen, för att göra det lättare att tolka resultaten. Genom visualisering, säger han, kan man förvandla berg av beräknade tal till en animationsfilm om simulerad verklighet. Vi skall inte här gå in på animation, men bara konstatera, att en grafisk framställning ofta kan säga mer än tusen siffror. Man skall givetvis inte överbetona bildens betydelse, eftersom de flesta bilder måste åtföljas av en förklarande text. I ett tidigare avsnitt berörde vi i korthet hur man använder grafik i MATLAB. Här skall vi skall se på litet fler exempel. I MATLAB användes kommandot plot när man vill rita grafer. Den allmänna formen av detta kommando är plot (x1, y1, str1, x2, y2, str2,...), där str1 och str2 är teckensträngar, som används för att ange färg och stil för varje kurva, som ingår i grafen. Programmet känner till följande stilar och färger: Punkttyper: punkt (.), asterisk (*), bokstaven x (x), bokstaven o (o), plustecken (+) Linjetyper: heldragen linje (-), streckad linje (- -), streckprickad linje (-.), prickad linje (:) Färger: gul (y), grön (g), lila (magenta) (m), blå (b), cyanblå (c), vit (w), röd (r), svart (k) Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 1

Dessa stilar och färger kan kombineras med varandra. Sålunda ger t.ex. strängen r+ en kurva ritad med röda plustecken, och g- en grön heldragen linje. I Matlab är det lätt att rita flera kurvor i samma graf, vilket vi redan sett. Här är ytterligare ett exempel på några trigonometriska funktioner: >> t = 0:pi/50:2*pi; >> y1 = sin(t)+1.5*sin(3*t); >> y2 = sin(t)+0.75*sin(t/2); >> plot(t,y1, r.,t,y2, g- ) Kurvorna har beräknats för 100 punkter inom intervallet [0, 2π]. I äldre versioner av MATLAB (t.ex. version 4) var det inte så enkelt att skriva ut bilden eller överföra den till ett annat program, eftersom kurvorna ritades på en svart bakgrund. I de nya versionerna av MATLAB ritas kurvorna på en ljus bakgrund, och grafikfönstret är mera avancerat. Man kan sålunda editera många av bildens egenskaper, såsom axlarna och kurvorna. Dessutom går det också att exportera bilden till olika format (t.ex. postscript och jpeg), och skicka bilden till en laserskrivare. I svartvitt ser bilden ut på följande sätt: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 2

Vi skall också studera några andra MATLAB-kommandon, som kan användas vid tvådimensionell grafik. Med kommandot plot kan man också behandla komplexa matriser, som framgår av exemplet nedan. Arkimedes spiral (ca 225 f.kr.) uttrycks i polära koordinater som r = aθ, där a är en konstant. Vi konstruerar med MATLAB först en vektor θ, och sedan en vektor r, som båda har 100 element: >> theta=linspace(0,10*pi); >> r=theta/(5*pi); Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 3

De polära koordinaterna r och θ transformeras därpå till kartesiska koordinater x och y med MATLABkommandot pol2cart (x = r cos θ, y = r sin θ), varefter den komplexa vektorn z = x + iy kan ritas med ett vanligt plot-kommando: >> [x,y]=pol2cart(theta,r); >> z=x+i*y; >> plot(z) Diagrammet visar en spiral: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 4

I fysiken anger man ofta data med felgränser. MATLAB har ett kommando errorbar, som gör det möjligt att sätta ut sådana felgränser. Som ett exempel skall vi rita kurvan y = e x2 jämte felgränser (som antas vara 15 %): >> x=linspace(-3,3,50); >> y=exp(-x.^2); >> delta=0.15*y; >> errorbar(x,y,delta); Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 5

I MATLAB är det också möjligt att rita diagram i andra koordinatsystem än kartesiska. Som ett exempel skall vi upprita funktionen f(x) = e x + e 2x i ett vanligt kartesiskt koordinatsystem, samt i ett halvlogaritmiskt koordinatsystem (y-axeln logaritmisk). >> x=linspace(0,6,50); >> y=exp(-x)+exp(-2*x); >> subplot(1,2,1); plot(x,y); >> subplot(1,2,2); semilogy(x,y); Här har subplot-kommandot använts för att generera två grafer sida vid sida. Resultatet ser ut så här: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 6

Vi skall också studera ett annat exempel på användningen av kommandot subplot med fyra grafer i samma bild. Först ritas funktionen f(x) = x cos x inom intervallet [ 5, 5], och därpå dess derivata f (x) = cos x x sin x. Derivatan approximeras dessutom med differenskvoterna f(x i+1 ) f(x i ) x 2 x, 1 i = 1, 2,..., n 1. Differenserna uträknas med MATLAB-funktionen diff(x), som beräknar skillnaderna mellan närliggande element i en vektor x = [x 1 x 2... x n ], och lagrar dem i en annan vektor: [x 2 x 1 x 3 x 2... x n x n 1 ]. MATLAB-instruktionerna ser ut på följande sätt: >> x=linspace(-5,5,1000); >> y1=x.*cos(x); >> y2=cos(x)-x.*sin(x); >> y3=diff(y1)./(x(2)-x(1)); >> y4=y2(1:999)-y3; >> subplot(2,2,1); plot(x,y1); title ( Funktionen ) >> subplot(2,2,2); plot(x,y2); title ( Derivatan ) >> subplot(2,2,3); plot(x(1:999),y3) ; title ( Approximativ derivata ) >> subplot(2,2,4); plot(x(1:999),y4) ; title ( Deriv. - Approx. deriv. ) Observera att differensvektorn y2 innehåller endast 999 element. Bilden ser ut på följande sätt: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 7

Man kan också rita diagram i polära koordinater med kommandot polar. I exemplet nedan visas hur man kan rita en ros-funktion uttryckt i polära koordinater med hjälp av detta kommando, samt efter transformation till kartesiska koordinater med ett vanligt plot-kommando. >> t = linspace(0,2*pi,100); >> r = cos(2*t); >> subplot(1,2,1) Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 8

>> p = polar(t,r); >> subplot(1,2,2) >> [x,y] = pol2cart(t,r); >> plot(x,y); Om vi tillägger kommandot axis( equal ) (eller förändrar bildens egenskaper på motsvarande sätt) får vi en snyggare graf i det senare fallet. Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 9

Vi skall nu studera närmare några av möjligheterna att upprita funktioner i tre dimensioner, som finns i MATLAB. MATLAB har en inbyggd funktion med två variabler av formen f(x, y) = 3(1 x) 2 e x2 (y+1) 2 10( x 5 x3 y 5 )e x2 y 2 1 3 e (x+1)2 y 2. Denna funktion, som har tre lokala maxima och minima, beräknas av peaks.m, som generar en 49 49 matris med värden av funktionen för olika värdepar (x, y). Om vi ritar denna funktion i ett diagram med kommandot plot(peaks), så får vi en graf med 49 kurvor: Denna graf visar kurvytan sedd längs x-axeln. Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 10

En dylik tvådimensionell funktion är dock lättare att studera i tre dimensioner, där den tredje dimensionen (höjden ovanför x, y-planet) anges av funktionsvärdet f(x, y) i varje punkt (x, y). För detta ändamål kan man använda funktionen mesh. Om vi använder kommandot mesh(peaks), så får vi följande graf: Ibland brukar man också rita en konturgraf av en tvådimensionell funktion. Detta betyder att man ritar konturlinjer, som sammanbinder punkter i x, y-planet, där funktionsvärdena är lika. För att rita konturlinjer används i MATLAB funktionen contour. En konturgraf av funktionen peaks ritas med 20 konturlinjer, om man ger kommandot contour(peaks,20). Resultatet ser ut så här: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 11

Ett ganska intressant exempel på en tvådimensionell funktion är sin r/r, även kallad sinc-funktionen, där r = x 2 + y 2 (dvs avståndet från (x, y) till origo). För att kunna använda mesh-funktionen i MATLAB, måste man först konstruera två matriser, X och Y utgående från två koordinatvektorer x och y. Raderna i X är kopior av vektorn x, och kolumnerna i Y är kopior av vektorn y. Vi antar att funktionen beräknas för x-värden och y-värden inom intervallet [ 8, 8]. Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 12

>> x=-8:.5:8; >> y = x; >> [X,Y] = meshgrid(x,y); >> R = sqrt(x.^2 + Y.^2) + eps; >> Z = sin(r)./r; >> mesh(z) Konstanten eps är här ett mycket litet tal (2.2204 10 16 ) som har adderats för att divisionen sin r/r skall fungera även då r = 0. Grafen av funktionen liknar en sombrerohatt: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 13

Istället för kommandot mesh(z), kan man också använda surfc(x,y,z), som ritar en ytgraf (i färg) samt konturer under ytan: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 14

4.5. Mera om programmering i MATLAB Vi har tidigare beskrivit hur man behandlar elementära funktioner i MATLAB. Om man t.ex. vill tabulera en funktion inom ett givet intervall, så kan börja med att konstruera en funktionsvektor y, vars element svarar mot elementen i en argumentvektor x (zeros nollställer vektorn y): n = 21; x = linspace(-1,1,n); y = zeros(1,n); for k=1:n y(k) = cos(pi*(x(k))); end Eftersom de flesta av de inbyggda funktionerna, såsom cos tillåter vektorer som argument, så kan man ersätta slingan i programmet med ett enkelt kommando: n = 21; x = linspace(-1,1,n); y = cos(pi*x); Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 15

Detta brukar kallas för vektorisering, och är ett mycket viktigt begrepp nuförtiden, t.ex. när man programmerar superdatorer. Fördelarna är flera: - Snabbhet. Många funktionsanrop utförs snabbare, om funktionerna endast anropas en gång. - Tydlighet. Det är lättare att förstå en vektoriserad programkod, än en skalär kod. - Inlärning. För att kunna programmera superdatorer, måste man lära sig tänka vektoriellt. Detta tankesätt understöds av MATLAB. Vektoriseringen av en slinga kan vara mycket effektiv i Matlab. Vi kan t.ex. skriva ett enkelt testprogram (novtest.m) som räknar ut 200000 värden av cosinusfunktionen: t=cputime; for i=1:200000 y(i)=cos(pi*i/1000); end cpu = cputime-t och räknar ut den använda cpu-tiden (i sekunder) med Matlabkommandot cputime. Det motsvarande vektoriserade programmet (vtest.m) skulle kunna se ut så här: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 16

t=cputime; x = 0:200000; y = cos(pi*x/1000); cpu = cputime-t När programmen kördes, blev resultatet: >> novtest cpu = 1.7000 >> vtest cpu = 0.1100 (olika datorer och olika versioner av Matlab ger förstås olika resultat). Matlab har ett antal kommandon, som underlättar vektorisering. Ett av dem är find, som används för att söka upp index för de element i en matris, som är olika noll. Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 17

Som en tillämpning skall vi behandla ett problem, där man vill göra en lista över alla element i en matris som t.ex. är större än 0. Detta kan man göra med en slinga som ser ut så här: k=0; for j=1:n for i=1:n if(a(i,j)>0), k=k+1; c(k)=i+n*(j-1); end end end Vi antar, att a är en kvadratmatris med n rader, och att c är en vektor, där de positiva elementens ordningsnummer lagras. Eftersom matrisen a genomgås kolumnvis, kommer c att innehålla ordningsnumren för elementen, då man tänker sig matrisens kolumner placerade efter varandra. Samma beräkning kan å andra sidan utföras betydligt enklare med Matlabkommandot b=find(a>0). Vektorn b kommer att innehålla samma element som vektorn c i den föregående beräkningen, och find kommandot löser också problemet betydligt snabbare. Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 18

Som ett annat exempel på ett vektoriserat program skall vi se hur man kan använda MATLAB för att bestämma koefficienterna α 1,..., α 4 i funktionen f(x) = α 1 sin(x) + α 2 sin(2x) + α 3 sin(3x) + α 4 sin(4x) då man vet att f(1) = 2, f(2) = 0, f(3) = 1 och f(4) = 5. Dessa villkor leder till ett ekvationssystem med fyra obekanta: α 1 sin(1) + α 2 sin(2) + α 3 sin( 3) + α 4 sin( 4) = 2 α 1 sin(2) + α 2 sin(4) + α 3 sin( 6) + α 4 sin( 8) = 0 α 1 sin(3) + α 2 sin(6) + α 3 sin( 9) + α 4 sin(12) = 1 α 1 sin(4) + α 2 sin(8) + α 3 sin(12) + α 4 sin(16) = 5. (1) I matrisform kan ekvationssystemet skrivas sin(1) sin(2) sin(3) sin(4) α 1 2 sin(2) sin(4) sin(6) sin(8) α 2 sin(3) sin(6) sin(9) sin(12) α 3 = 0 1. sin(4) sin(8) sin(12) sin(16) α 4 5 Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 19

Ekvationssystemet kan lösas med MATLAB programmet X = [1 2 3 4 ; 2 4 6 8 ; 3 6 9 12 ; 4 8 12 16]; Z = sin(x); f = [-2; 0; 1; 5] alpha = Z\f Observera, att man får en matris innehållande sinus funktionens värden, då man anropar sin med en matris som argument. Ekvationsssystemet löses med \- operatorn, som vi använt tidigare. Lösningen blir enligt MATLAB alpha = -0.2914-8.8454-18.8706-11.8279 Funktionen f(x) och dess värden i punkterna x = 1, 2, 3, 4 kan ritas med följande MATLAB kommandon: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 20

x1=[1;2;3;4];x2=linspace(0,5,100); y2=alpha(1)*sin(x2)+alpha(2)*sin(2.*x2)+alpha(3)*sin(3.*x2)+alpha(4)*sin(4.*x2); plot(x1,f, ro,x2,y2, b- ) Resultatet ser ut så här: Introduktion till vetenskapliga beräkningar I, Tom Sundius 2009 21