Beräkningsverktyg HT07 Föreläsning 1, Kapitel 1 6 1.Introduktion till MATLAB 2.Tal och matematiska funktioner 3.Datatyper och variabler 4.Vektorer och matriser 5.Grafik och plottar 6.Programmering
Introduktion till MATLAB Lättanvänt för numeriska beräkningar enklare än C++, FORTRAN och Java Inbyggda funktioner för många problem inom linjär algebra och analys eget programmerings språk med m filer För studenter används det i kurser i kvantmekanik, numerisk analys, elektromagnetisk vågutbredning, mattematik och flera projekt kurser
Kommandon i kommando fönstret m filer, för att samla kommandon Uppgift 1, m filer, ~3 min Öppna MATLAB och skapa en variabel >>A=11 öppna en m fil file => new => m file skapa en vektor i m filen, spara som test.m a = [1 2] kör sedan genom att skriva test pröva även >> whos >>workspace >>clear all
Komplexa tal e i >> exp(i*pi/4) ans = 0.7071 + 0.7071i >> i=14; >> exp(i*pi/4) ans = 5.9610e+04 >> clear i >> i ans = 0 + 1.0000i Både i och j är imaginära enheten
Värdesiffror och format >> format short (standard) >> 1/3 ans = 0.3333 >> format long >> 1/3 ans = 0.33333333333333 >> format long e >> 1/3 ans = 3.333333333333333e 01 ( =3.333333333333333*10 1 )
Matriser och vektorer Radvektor >> A = [1 2 3] A = 1 2 3 Kolonnvektor >> A = [1 ; 2 ; 3] A = 1 2 3
Matris >> A = [1 2 3 ; 4 5 6] A = 1 2 3 4 5 6 >> A(2,3) ans = 6
Viktigt med korrekt form Exempel >> A = [1 2 3 ; 4 5]??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.
Implicit tilldelning >> A = [1 : 7] A = 1 2 3 4 5 6 7 >> A = [1 : 2 : 7] A = 1 3 5 7
>> A = linspace(0, 1, 11)' A = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
>> A = logspace(0, 1, 11)' A = 1.0000 1.2589 1.5849 1.9953 2.5119 3.1623 3.9811 5.0119 6.3096 7.9433 10.0000
Delvektorer >> A = [4 : 9] A = 4 5 6 7 8 9 >> B = A(1 : 3) B = 4 5 6 >> C = A(1 : 2 : 5) C = 4 6 8
Användbara matrisfunktioner Transponat = ' >> [1 2 3]' ans = 1 2 3
>> ones(3) ans = 1 1 1 1 1 1 1 1 1 >> zeros(3) ans = 0 0 0 0 0 0 0 0 0 >> eye(3) ans = 1 0 0 0 1 0 0 0 1
Sätta ihop matriser >> A=[1 0;0 1] A = 1 0 0 1 >> B=[1 1;1 1] B = 1 1 1 1 >> C=[A B; B 2*A] C = 1 0 1 1 0 1 1 1 1 1 2 0 1 1 0 2
Elementvis operation >> C = [1 2 ]; >> C*C??? Error using ==> mtimes Inner matrix dimensions must agree. >> C.*C ans = 1 4 C*C=[1 2]*[1 2]=fel dimension C.*C=[1 2].*[1 2] = [1*1 2*2]=[1 4] C*C'=[1 2]*[1 2]' = 1*1 + 2*2= 5
Uppgift 2a, vektorer ~7 min Undersök vad operationerna har för effekt på vektorn och matrisen. A=[3 8 5 1]; B=[3 8; 5 1]; length max min sum mean std sort tips: använd snabbhjälpen skriv t.ex. >>help length
Uppgift 2b, använda hjälpen ~3 min Använd hjälpen för att ta reda på hur man sorterar en vektor i fallande ordning med sort help => MATLAB help => search
Uppgift 2b, använda hjälpen ~3 min Använd hjälpen för att ta reda på hur man sorterar en vektor i fallande ordning med sort help => MATLAB help => search Facit 2a facit: på sidan 62 i boken 2b facit: sort(a, 'descend')
Plottar x= pi:0.1:pi y=sin(x) plot(x,y,'linewidth',5...,'color','red') title('plot av sin(\theta)') ylabel('sin(\theta)') text( pi/4,sin( pi/4),... '\leftarrow sin(... \pi\div4)',... 'HorizontalAlignment','left') xlabel(' \pi \leq \Theta \leq \pi') axis([ pi pi 1 0.5])
Flera kurvor i samma figur x= pi:0.1:pi plot(x,sin(x)) hold on plot(x,cos(x),'color','red') pause hold off subplot(2,1,1) plot(x,sin(x)) subplot(2,1,2) plot(x,cos(x),'color','red')
3D plottar x = [ 2:0.2:2]; y = x; [X,Y] = meshgrid(x,y); Z = 1+X.*exp( X.^2 Y.^2); mesh(x,y,z) xlabel('x'), ylabel('y'), zlabel('z')
Uppgift 3, plotta en kurva ~7 min Plotta valfri kurva och undersök semilogx grid on/off clf figure legend prova även 3d plott och använd contour för att generera plotten. X,Y och Z matriser definieras som x = [ 2:0.2:2]; y = x; [X,Y] = meshgrid(x,y); Z = 1+X.*exp( X.^2 Y.^2);
Programmering i MATLAB Logiska uttryck < mindre än <= mindre än eller lika med == lika med > större än >= större än eller lika med ~= skilt från & OCH ELLER ~ INTE
IF satser if logiskt uttryck 1 satser elseif logiskt uttryck 2 satser else satser end Exempel if a > 0 & a < 5 b = 1; else b = 0; end
Switch sats switch tal case värde 1 satser case värde 2 satser otherwise satser end
Exempel switch mynt case {0.5,1} disp('femtiöring eller enkrona') case {5} disp('femkrona') case {10} disp('tiokrona') otherwise disp('imatade valörer måste vara 0.5, 1, 5 eller 10.') end
While loopar while logiskt uttryck satser end
Exempel s = summan av 1/k 2, k=1 inf. tol = 1e 6; summa = 0; i = 1; term = 1/i^2; while term > tol summa = summa + term; i = i+1; term = 1/i^2; end
For loopar for styrvariabel = styrmängd satser end Exempel: y = 0; for x = 1:2:5 y = y + x^2; end
Nästlade for loopar for styrvariabel 1= styrmängd 1 for styrvariabel 2= styrmängd 2 satser end end A= 1 2 3 2 3 4 summa = 0; for i = 1:2 for j = 1:3 summa = summa + A(i,j); end end
Uppgift 5, skriv ett program ~7 min Skriv en m fil som summerar de 100 första Fibonacci talen samt skriver ut alla som är mindre än eller lika med 100. De först Fibonacci talen är: 0,1,1,2,3,5,8,13,21,... Från och med det tredje talet är varje tal summan av sina två föregående f k+1 = f k + f k 1
Facit, ett sätt är: F(1) = 0; F(2)=1; for k=3:100 F(k) = F(k 1) + F(k 2); end n=0; for k=1:100 if F(k) <= 100 n=n+1 F2(n) = F(k) end end F2 sum(f) 0 1 1 2 3 5 8 13 21 34 55 89 5.7315e+20