Datatyper i MATLAB Tal Heltal kan lagras med eller utan tecken, i 1, 2, 4 och 8 bytes. Standard (om inte annat anges) är 4 bytes, int32. De andra formaten är int8,int16, int64, uint8, uint16, uint32, uint64, där u anger utan tecken. Formaten används för att ange lagring, x=uint16(2015) lagras i två bytes utan tecken, intmax( uint16 ) är 65535 = 2 16 1. Flyttal lagras som single (4 bytes) eller double (8 bytes), som är standard. För single är 24 bitar taldel (med en bit tecken) och 8 bitar exponent (med en bit ±), för double 52 bitar taldel (med en bit ±) och 12 bitar exponent (med en bit ±). Komplexa tal lagras som talpar. Standard är två flyttal (16 bytes) men de andra formaten för flyttal och heltal kan också användas. Vid utskrift är format short (4 decimaler) standard, om inte annat anges. Anger man format long så får man 15 decimaler, med format rat får man ett rationellt tal, förkortat så långt det går. Exempel: 1495/2015 ger 0.7419, med format rat får man 23/31 Yngve Sundblad Föreläsning 9 sid. 1 SF 1518/19 ht 2015 28 sept.
Datatyper i MATLAB Tecken och Strängar Strängar (texter) består av vektorer av tecken, som vardera lagras i 2 bytes. De första 128 tecknen är 7-bits ASCII, resten fram till 65535 beror datorns teckenkoder. Tecken och strängar anges omgivna av blippar (apostrofer, primtecken) ' ' och enstaka tecken nås som vektorkomponenter. Exempel: s='holly' ger Holly och c=s(5) ger y Tecken kan blandas med tal i aritmetiska operationer och behandlas då som motsvarande teckenkod, medan om de blandas som vektorkomponenter går tal till tecken. Omvandling mellan kan ske med char(s)och, t.ex., uint16(). Exempel: uint16( b )ger 98, b -32 ger 66, char(66)ger B, ab +5 ger [102 103], [ c 98] ger cb, char(1065) ger kyrilliska Щ (på Macintosh), char(20000) ger kinesiska 丠 (på Mac) Yngve Sundblad Föreläsning 9 sid. 2 SF 1518/19 ht 2015 28 sept.
Datatyper i MATLAB Logiska värden Logiska villkor har formen a op b, där op kan vara == (OBS!), ~=, >, <, >=,<= Villkoren, som främst används i if-satser och while-satser, har värdet true eller värdet false. Värdena är alltså true eller false men de skrivs ut 1 eller 0. Villkoren kan sättas samman med logiska operatorerna ~ (icke), & (både och, sanna bara om båda är sanna), (inkluderande eller, sann om minst en är sann), samt med funktionen xor (exkluderande eller, sann bara om precis en är sann) I själva verket tolkas 1 (och alla tal 0) som sann och 0 som falsk som argument till de logiska operatorerna. Exempel: x=2; y=-2; z=0; Används: v=(x>y)&(x^2==y^2) ger 1 if v v=(x>y) (x^2==y^2) ger 1 disp( x+y är 0 ) v=xor(x>y,x^2=y^2) ger 0 else v=false ger 0 disp( x+y~=0 ) v=y&z ger 0 end v=x&y ger 1 Yngve Sundblad Föreläsning 9 sid. 3 SF 1518/19 ht 2015 28 sept.
Datatyper i MATLAB Symboliska värden Senaste versionen av MATLAB kan utföra symbolisk matematik som derivering, integrering, ekvationslösning, substitution mm. Resultaten kan föras över till numeriska beräkningar. Man måste tala om för MATLAB att en variabel är symbolisk, står för sig själv, vilket man kan göra direkt med x=sym( x ) eller syms x,varefter man kan skriva t.ex. L=x^2*sin(x) eller indirekt med L=sym( x^2*sin(x) ), varefter x blir symbolisk. I bägge fallen blir också L symbolisk. Sedan kan man derivera: dl=diff(l) ger x^2*cos(x) + 2*x*sin(x), integrera: IL=int(L) ger 2*x*sin(x) - cos(x)*(x^2 2), integrera med gränser: ILn=int(L,pi/2,pi) ger (pi + 1)*(pi - 2) Man kan manipulera uttryck med bl.a. funktionerna expand(), factor(), simplify(), subs(,), eval(): ILe=expand(IL) ger 2*cos(x) - x^2*cos(x) + 2*x*sin(x) ILne=expand(ILn) ger pi^2 - pi 2 factor(ilne) ger [pi + 1, pi - 2] Yngve Sundblad Föreläsning 9 sid. 4 SF 1518/19 ht 2015 28 sept.
Datatyper i MATLAB Symboliska värden, forts. Förenkling: ratfun=( (x^3-8*x^2 + 22*x - 20)/(x - 2) ) rfsimp=simplify(ratfun) ger x^2-6*x + 10 Ekvationslösning: x12=solve(rfsimp) ger [3 1i, 3 + 1i] xpq=solve('a*x^2+b*x+c') ger -(b + (b^2-4*a*c)^(1/2))/(2*a) -(b - (b^2-4*a*c)^(1/2))/(2*a) texp=solve('p=p0*exp(k*t)','t') ger texp värdet log(p/p0)/k Substitution och evaluering: f=sym('exp(x) +3*(x+2)'); g=subs(f, x, y-2 ) ger 3*y + exp(y - 2) y=2; eval(g) ger 7 Överföring till numeriska funktioner: gn=matlabfunction(g) ger @(y)y.*3.0+exp(y-2.0), gn(2) ger 7 Yngve Sundblad Föreläsning 9 sid. 5 SF 1518/19 ht 2015 28 sept.
Datastrukturer i MATLAB Den dominerande datastrukturen är matrisen, där alla typer av data kan lagras. Ett tal ses som special fall, 1x1-matris. Vid inmatning till [ ] åtskiljer komma eller blank radelementen och semikolon eller radbyte raderna. Viktiga operatorer är ' som transponerar, : som anger intervall, + * / ^ som vanliga operationer.*./.^ som elementvis operationer, \ för ekvationslösning resp. minsta kvadratanpassning Man kan göra en struktur med namn på komponenter: strukt.a=1:3; strukt.b='bcdef' ; strukt.c=[11 13 17 19]; strukt ger a: [1 2 3] b: 'bcdef' c: [11 13 17 19] Vissa funktioner för numeriska metoder, t.ex. pchip(,), ger strukturer som resultat. Vid anropet får man veta vad komponenterna betyder. Det finns också att strukturera i tabell, se help table. Det är överkurs. Yngve Sundblad Föreläsning 9 sid. 6 SF 1518/19 ht 2015 28 sept.
Exempel på datalagring A=1; B=[1:10]; C=[1 2,3;4,5,6]; D=single(5); E=int8(10); F=5+3i; G=int8(5+3i); H= Holly ; K= MATLAB is fun ; L=sym( x^2-x ); M=[true,false,true]; N=eye(1000); P=sparse(N); För utförlig information i Workspace klicka på Observera att även tal ses som matriser (samma symbol). och välj Choose Columns Om man vet att en matris är gles (sparse) kan den lagras kompakt. Yngve Sundblad Föreläsning 9 sid. 7 SF 1518/19 ht 2015 28 sept.
Diagramhantering Vi har redan haft ett antal exempel på plottning med plot(, ). Parametrarna ska vara vektorer med parvis samma dimensioner. Man kan alltså, med flera uppsättningar parametrar, rita flera kurvor och punkter i samma diagram. Vill man se en i taget kan man göra pause och gå vidare med tangenttryckning. För fler kurvutmatningar efter varandra i samma diagram gör hold Man kan tillfoga texter som diagramrubrik och dess axlar med title( ), xlabel( ), ylabel( ). Med legend(,,, ) sätter man förklaring på kurvorna. Man kan sätta skalor på axlarna med axis(xmin,xmax,ymin,ymax) Lika skalor på axlarna får man med axis equal Text i diagrammets punkt (x,y) får man med text(x,y, ). gtext( ) ger möjlighet att klicka där man vill ha texten. Alla dessa kommandon ger man direkt efter plot-anropet. Yngve Sundblad Föreläsning 9 sid. 8 SF 1518/19 ht 2015 28 sept.
Diagramhantering, forts. Kurvor och punkter kan ges egenskaper i en tredje textparameter ( ur Holly Moore s bok): Exempel: x=0:pi/2:7*pi; y=5*cos(x); xv=0:pi/100:7*pi; yv=cos(xv); z=1:0.01:7*pi; u=log(z)/3; plot(x,y, pb',xv,yv,'--g',z,u,'-.r'); legend('extrema', cos(x)', ln(z)/3 ); title('kurvegenskapillustration'); xlabel('x- resp. z-axeln'); ylabel('funktionsvaerden ); axis ([0,20,-1.5,1.5]); Yngve Sundblad Föreläsning 9 sid. 9 SF 1518/19 ht 2015 28 sept.
Resulterande graf Yngve Sundblad Föreläsning 9 sid. 10 SF 1518/19 ht 2015 28 sept.
Andra typer av tvådimensionella diagram Polärt polar(r,v) plottar r=f(v) i polära koordinater. På nästa sida subplot(2,2,1);v=0:pi/100:2*pi;r=cos(4*v);polar(v,r) Semilog semilogx(x,y) plottar y=f(x) med logaritmisk x-axel, linjär y-axel subplot(2,2,2);x=0:0.5:100;y=1/x; semilogx(x,y) semilogy(x,y) plottar y=f(x) med linjär x-axel, logaritmisk y-axel. subplot(2,2,2);x=0:0.5:100;y=1/x; semilogx(x,y) Loglog loglog(x,y) plottar y=f(x) med logaritmiska x- och y-axlar. subplot(2,2,4);x=0.5:0.5:100;y=1./x; loglog(x,y) Observera linje med lutningen -1. I MATLAB finns också möjligheter att göra histogram, stolp-, paj- och 3D-diagram, intressanta men överkurs. Gör help hist, help bar, help pie, help bar3, help pie3 och help plot3 för information. Mer på föreläsning 13 med utblickar. Yngve Sundblad Föreläsning 9 sid. 11 SF 1518/19 ht 2015 28 sept.
De icke-linjära diagrammen Yngve Sundblad Föreläsning 9 sid. 12 SF 1518/19 ht 2015 28 sept.
In- och utmatning från terminal i MATLAB För inmatning finns n=input('?') som ställer frågan och väntar på ett tal. n=input('?,'s') väntar på en textsträng. [x y]=ginput(n) väntar på n klick på punkter i graffönstret. För utmatning finns disp() som skriver ut ett värde. fprintf(' ',v1,v2, vn) skriver ut värdena av v1 vn med formatkoderna i tabellerna till höger. I ' ' kan ingå annan text. Yngve Sundblad Föreläsning 9 sid. 13 SF 1518/19 ht 2015 28 sept.
In- och utmatning med filer i MATLAB Det finns möjligheter att spara och läsa in och spara på inte bara textfiler utan också, excelfiler, ljud, bilder och filmer. Här nöjer vi oss med möjligheten att spara innehållet i workspace: save( filnamn ) sparar detta innehåll i filnamn.mat Man kan välja att bara spara vissa variablers innehåll med save( filnamn, v1, v2, vn ) Innehållet återfår man till workspace med load( filnamn ) Exempel: A=ones(1000,1000); save( t ) A=17; size(a) ger [ 1 1] load( t ) size(a) ger [ 1000 1000] Yngve Sundblad Föreläsning 9 sid. 14 SF 1518/19 ht 2015 28 sept.