You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Övning 1<strong>Matlab</strong> <strong>som</strong> <strong>avancerad</strong> <strong>räknedosa</strong>1.1 Räkna ut följandea) 7 · 3 + 9 − 7/2b) e 3πc) sin(2π)d) ln 10e) ln(e 7 )f) 3 5 + 10 2g) |3 + 5i|1.2 LåtVad blir dåa) A + Bb) B + Ac) B + Bd) B + B + Be) 3Bf) 7.5A + 9.2B1.3 LåtVad blir dåa) ABb) BB Tc) B T Bd) BA Te) ABA Tf) BAA =A =[ ] 2 3, B =7 5[ ] 6 2.1 9⎡ ⎤[ ] 6 2 93 2 7, B = ⎣8 7 6⎦ .5 2 65 2 31
Övningar i Matematisk Modellering 21.4 Låta) Plocka ut C 13 .b) Plocka ut C 21 .c) Plocka ut rad 3 ur C.d) Plocka ut kolonn 2 ur C.1.5 Verifiera sambandet e iπ = −1.⎡3 2⎤7C = ⎣9 8 6⎦ .3 1 91.6 Det finns många funktioner <strong>som</strong> opererar på matriser och vektorer. Några exempelär mean, max, min, sum. Använd dessa för att beräkna medel, största och minstavärde samt summan av v oma) v = [ 1 7 9 −2 ] .b) v = 1 : 10 (Vad betyder denna notation?)c) v = −7 : 5d) v = 3 : 5 : 32e) v = 5 : −2 : 11.7 Låt x = 1 : 0.1 : 2. Beräkna f(x) oma) f(x) = 2x + 3b) f(x) = 2sin(πx)c) f(x) = 2e −3xd) f(x) = 2x 2 + 7x + 3e) f(x) = cos(πx) sin(3x)f) f(x) = √ 2x1.8 Låt x = [ 0 1 4 10 ] och y = [ 2 3 0 4 ] . Prova att mata in följande i <strong>Matlab</strong>och försök förstå vad <strong>som</strong> händer.a) plot(x,y)b) plot(x,y,’*’)c) plot(x,y,’-’)d) plot(x,y,’r.’)e) plot(x,y,’mp’)1.9 Plotta funktionerna i övning 1.7.1.10 Låta) Summera elementen i rad 2.⎡ ⎤1 7 9 8A = ⎢6 2 3 1⎥⎣5 2 6 1⎦ .7 7 1 2
3 1: <strong>Matlab</strong> <strong>som</strong> <strong>avancerad</strong> <strong>räknedosa</strong>b) Summera elementen i kolonn 3.c) Summera element 2 till 4 i rad 4.1.11 <strong>Matlab</strong> innehåller många funktioner för numerisk linjär algebra, t ex eig, det, inv.Låt⎡⎤3 2 7 −8A = ⎢6 5 2 6⎥⎣9 8 7 2 ⎦ .8 2 1 0a) Beräkna det(A).b) Beräkna A −1 och verifiera att AA −1 = A −1 A = I.c) Beräkna egenvärden och egenvektorer till A.d) Diagonalisera A, dvs hitta S och D så att D = S −1 AS.
Svar 41.1a)>> 7*3+9-7/2ans =26.5000b)>> exp(3*pi)ans =1.2392e+04c)>> sin(2*pi)ans =-2.4493e-16d)>> log(10)ans =2.3026e)>> log(exp(7))ans =7f)>> 3^5+10^2ans =343
5 Svar Övning 1g)>> abs(3+5*i)ans =5.83101.2a)>> A+Bans =b)>> B+Aans =c)>> B+Bans =d)8 58 148 58 1412 42 18>> B+B+Bans =18 63 27
Svar 6e)>> 3*Bans =18 63 27f)>> 7.5*A+9.2*Bans =70.2000 40.900061.7000 120.30001.3a)>> A*Bans =69 34 6076 36 75b)>> B*B’ans =121 116 61116 149 7261 72 38
7 Svar Övning 1c)>> B’*Bans =d)125 78 11778 57 66117 66 126>> B*A’ans =e)85 8880 9040 47>> A*B*A’ans =f)695 773825 902>> B*A??? Error using ==> mtimesInner matrix dimensions must agree.1.4a)>> C(1,3)ans =7
Svar 8b)>> C(2,1)ans =c)9>> C(3,:)ans =d)>> C(:,2)ans =3 1 92811.10a)>> sum(A(2,:))ans =12b)>> sum(A(:,3))ans =19
9 Svar Övning 1c)>> sum(A(4,2:4))ans =10
Svar 122.1>> A=[1 -2 1;2 -6 6;-3 5 1]A =1 -2 12 -6 6-3 5 1>> b = [1;2;3]b =123>> x = inv(A)*bx =10.00006.00003.00002.2 Ett förslag ärs = 0;for k=1:100;s=s+k;enddisp(s)Om man lägger in ovanstående rader i en textfil summa_ovn.m så kan man exekveraden i matlab med>> summa_ovn5050När man skriver summa_ovn i matlabs kommandofönster så exekveras varje rad itextfilen summa_ovn.m precis <strong>som</strong> om man kört de direkt i kommandofönster. Enbieffekt av detta är att variabler <strong>som</strong> t ex ’k’ i exemplet ovan sätts. Vi kanske hellrehade velat att dessa variabler var lokala. I så fall ska man kanske implementeraen summeringsfunktion i stället.En annan variant är att utnyttja matlabs möjlighet att arbeta på hela vektorer.Det finns en funktion sum <strong>som</strong> om den får en vektor <strong>som</strong> inargument, returnerarsumman av elementen i vektorn. Ett skript <strong>som</strong> beräknar och skriver ut summanav talen 1 till 100 blir då>> sum(1:100)ans =5050
13 Svar Övning 22.3 En funktion <strong>som</strong> beräknar summan är följande.function s = minsumma(m,n);% function s = minsumma(m,n)% beräknar summan av talen m, m+1, ..., n-1, ns = sum(m:n);De kommentarsrader <strong>som</strong> följer efter funktionsdefinitionen skrivs ut om manskriver help minsumma. Man kan lägga in mer kontroll och felmeddelanden genommatlabfunktionen error. Då kan det se ut så härfunction s = minsumma(m,n);% function s = minsumma(m,n)% beräknar summan av talen m, m+1, ..., n-1, nif narginn,error(’I funktionen minsumma måste n>=m’);ends = sum(m:n);2.4function y=sin2(x);y=(sin(x))^2;function y=cos2(x);y=(cos(x))^2;>>sin2(7)+cos2(7)ans =1.00002.5 Ett exempel ärfunction d=storst(a,b);% function d=storst(a,b) - returnerar det tal d <strong>som</strong>
Svar 14% är störst av talen a och b.if (a>=b)d=a;elsed=b;end2.6 En variant är följande matlabskriptsteg = 2 * pi/100;t = 0:steg:(2*pi);x = cos(t).^3;y = sin(t).^3;plot(x,y);l=0;for ii = 1:(length(t)-1)l = l + sqrt( (x(ii+1)-x(ii))^2 + (y(ii+1)-y(ii))^2 );enddisp([’Längden är ungefär: ’ num2str(l)]);Efter<strong>som</strong> matlab är bra på att hantera hela vektorer skulle man kunna göra densista delen utan for-loop, t ex med skriptetsteg = 2 * pi/100;t = 0:steg:(2*pi);x = cos(t).^3;y = sin(t).^3;plot(x,y);l = sum( sqrt( diff(x).^2 + diff(y).^2) );2.7 Här kommer en lösning <strong>som</strong> använder while.function y = mysqrt(x,yinit,precision);% function y = mysqrt(x,yinit,precision);% calculates the square root of xy0 = yinit;y1 = (y0+x/y0)/2;while abs(y1-y0)>precision,y0 = y1;y1 = (y0+x/y0)/2;
15 Svar Övning 2endy = y1;
Övning 3Mer om funktioner och grafik3.1 Rita den parametriska kurvan (x, y, z) = (t cos(2πt), t sin(2πt), t) genom följandekommandon i <strong>Matlab</strong>:>> t=0:.01:10;>> x=t.*cos(2*pi*t);>> y=t.*sin(2*pi*t);>> z=t;>> plot3(x,y,z)Rita på motsvarande sätt följande kurvor:a) (x, y, z) = (t cos(2πt), t sin(2πt), t 2 )b) (x, y, z) = ( √ t(cos(t) + cos(40t)), √ t(sin(t) + sin(40t)), t)c) (x, y, z) = (3 + t, 2.3 + 3t, −2 − 2t)3.2 Prova att skriva in följande rader i <strong>Matlab</strong>:>> [x,y]=meshgrid(-10:0.5:10);>> z=sin(sqrt(x.^2+y.^2))./(sqrt(x.^2+y.^2));>> surf(x,y,z)Prova sedan att ändra på parametrarna för meshgrid enligt följande: (Tänk påatt du måste generera om z med de nya x och y, samt rita ytan med surf igenefter att du anropat meshgrid).a) >> [x,y]=meshgrid(-10:10);b) >> [x,y]=meshgrid(-5:0.1:5);c) >> [x,y]=meshgrid(-3:0.5:3,-7:.3:7);3.3 Skriv in följande i <strong>Matlab</strong>:>> th = 0:(2*pi/100):2*pi;>> r = 0:.2:5;>> [thg, rg] = meshgrid(th,r);>> x=rg.*cos(thg);>> y=rg.*sin(thg);>> z=cos(5*thg) + 6*exp(-rg.^2);Prova sedan följande och försök förstå vad <strong>som</strong> händer. Använd help för att sehur de olika funktionerna nedan fungerar.a) >> surf(x,y,z)17
Övningar i Matematisk Modellering 18b) >> mesh(x,y,z)c) >> contour(x,y,z)d) >> surf(x,y,z,’EdgeColor’,’none’)e) >> surf(x,y,z,’FaceColor’,’blue’)3.4 Prova följande rader i <strong>Matlab</strong>. Försök och förstå vad <strong>som</strong> händer vid varje kommando.Prova gärna att skriva >> help light etc.>> L = 40*membrane(1,25);>> surf(L)>> light(’Position’,[40 100 20])>> light(’Position’,[.5 -1 .4])>> shading interp>> lighting phong3.5 Om man roterar kurvan y = x 3 för 0 ≤ x ≤ 1 ett varv kring x-axeln får man enstrut. Illustrera denna strut i en 3D plot i matlab.3.6 Skriv en matlabfunktion (med n <strong>som</strong> inparameter) <strong>som</strong> beräknars n =n∑k=11k 2 .Vad konvergerar s n mot? Med andra ord vad ärlimn→∞n∑k=11k 2 ?3.7 Konstruera en matlabfunktion <strong>som</strong> returnerar det n’te värdet f n i Fibonacciföljden,<strong>som</strong> definieras avf 0 = 0, f 1 = 1, f n = f n−1 + f n−23.8 Skriv en funktion <strong>som</strong> beräknar siffersumman för ett heltal.3.9 Konstruera en matlabfunktion <strong>som</strong> simulerar n tärningskast med k tärningar och<strong>som</strong> beräknar summan av de k tärningarnas värde för dessa n tärningskast. Plottasedan ett histogram över dessa summor för några olika n och k. Tips: skrivhelp hist för att se hur man plottar histogram.
Svar 203.8% calculates the n’th fibonacci numbern = round(n);if n
Övningar i Matematisk Modellering 224.5 Skriv en funktion <strong>som</strong> räknar ut derivatan av en funktion i en punkt numeriskt.Den ska alltså anropas på följande sätt:>>fprim=derivera(funk,x0)där funk är en sträng <strong>som</strong> innehåller namnet på funktionen och x0 är punktenman vill derivera funktionen i.4.6 Om man vill använda data från <strong>Matlab</strong> i t ex ett java-program så kan det varasmidigt att kunna skriva till en enkel textfil. Följande kommandon öppnar en fil,skriver lite grann i den och stänger filen igen. Prova.fid = fopen(’minfil.txt’,’w’);fprintf(fid,’sin(1) = %6.2f \n’,sin(1));fprintf(fid,’slut’);fclose(fid);Vad betyder 6.2? Vad betyder \n?4.7 Kommandot rem(x,y) beräknar resten då x divideras med y.a) Skriv en funktion ej_delbar(y) <strong>som</strong> returnerar en vektor med alla tal mellan1 och 100 <strong>som</strong> inte jämnt delbara med y.b) Skriv ett skript <strong>som</strong> räknar ut alla primtal mellan 1 och 100 och skriver demtill en textfil.
23 Svar Övning 44.1 Följande rader skriver ut de sökta raderna:for i=1:100disp([’Detta är rad ’ num2str(i)])end4.3 Följande är två varianter <strong>som</strong> utför beräkningen,Alternativ 1:function berakna(fnamn, tal)svar = feval(fnamn, tal);disp([fnamn ’(’ num2str(tal) ’) = ’ num2str(svar)])Alternativ 2:function berakna(fnamn, tal)straeng = [fnamn ’(’ num2str(tal) ’)’];svar = eval(straeng);disp([straeng ’ = ’ num2str(svar)])4.4function isp=primtal(a)if a>1,isp=true;testtal=[2 3:2:sqrt(a)];i=1;while isp & (i
Svar 244.7a)function z = ej_delbar(y)% Returnerar alla tal mellan 1 och 100 <strong>som</strong> ej är delbara med ytal = [1:100];rester = rem(tal,y);z = tal(rester ~= 0);b) Följande skript skriver alla primtal mellan 1 och hundra till filenminaprimtal.txt.fid = fopen(’minaprimtal.txt’,’w’);tal = [2:100];while length(tal) > 0,fprintf(fid,’%3d\n’,tal(1));rester = rem(tal,tal(1));tal = tal(rester ~= 0);endfclose(fid);
Svar 265.1function sb=baklanges(s)sb=s(end:-1:1);5.2funktion minplot(funktionsnamn);x = 0:0.1:10;y = feval(funktionsnamn,x);plot(x,y);Sedan kan man använda den nya funktionen för att plotta funktioner.minplot(’sin’);minplot(’cos’);minplot(’sqrt’);minplot(’atan’);5.3alfabet = ’abcdefghijklmnopqrstuvwxyz’;m = alfabet(ceil(rand(10,5)*26))ms=sortrows(m)5.4function mr=rovarsprak(m)kons=’bcdfghjklmnpqrstvwxz’;mr=[];for j=1:length(m),if isempty(find(kons==m(j)))mr=[mr m(j)];elsemr=[mr m(j) ’o’ m(j)];endend5.5function B=nytransponat(A)B=A(end:-1:1,:)’;B=B(end:-1:1,:);
27 Svar Övning 55.6function x=hexadectilldec(h)hexa=’0123456789ABCDEF’;x=0;nn=length(h);for j=nn:-1:1,koeff=find(hexa==h(j))-1;x=x+koeff*16^(nn-j);end