KPP053, HT2016 MATLAB, Föreläsning 2 Vektorer Matriser Plotta i 2D Teckensträngar
Vektorer För att skapa vektorn x = [ 0 1 1 2 3 5]: 0 1 1 2 3 5 För att ändra (eller lägga till) ett element i x: >> x(7)=8 0 1 1 2 3 5 8
Vektorer För att ”hämta” ett element i x: >> x(7) ans = 8 För att ”hämta” 3:e till 6:e elementet i x: >> x(3:7) 1 2 3 5 8
Vektorer För att ”hämta” vartannat element från 3 till 7: >> x(3:2:7) ans = 1 3 8 För att ”hämta” (t.ex) det 3:e, 4:e och 7:e elementet ges en vektor: >> x([ 3 4 7 ]) 1 2 8
Att ta bort element ur en vektor Ta bort ett specifikt element [ ]: >> x(7) = [] %ersätter x(7) med en tom vektor x = 0 1 1 2 3 5 Ta bort sista värdet ur x: >> x(length(x)) = [] ans = 0 1 1 2 3
Vektorer med konstant stegavstånd: För att skapa vektorn x = [ 0 1 2 3 4 5 6 7 ]: >> x = 0:7 x = 0 1 2 3 4 5 6 7 För att skapa vektorn x = [ 0,0 0,5 1,0 1,5 2,0 2,5 3,0 ] >> x = 0:0.5:3 0 0.50 1.00 1.50 2.00 2.50 3.00
linspace(a,b) och linspace(a,b,n) Skapar en vektor med n element där första elementet är a och sista elementet är b. För linspace(a,b) blir n = 100.
Matriser Ange matrisen 𝐴= 1 2 5 6 9 10 3 4 5 6 7 8 >> A = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12 ] % semikolon indikerar radbyte A = 1 2 3 4 5 6 7 8 9 10 11 12 Man kan även slå en ny rad direkt i kommandofönstret (eller i en .m-fil): >> A = [ 1 2 3 4 5 6 7 8 9 10 11 12]
Delmatriser Ett enstaka element ur A kan hämtas med A(j,k) där j är elementets rad och k är elementets kolumn. Vill man hämta flera element ur A kan man i stället använda ange interval. (samma A som tidigare) >> A(2:3,3:4) %ger 3e till 4e kolumnen av rad 2-3 ans = 7 8 11 12
Delmatriser (fortsättning) Det går naturligtvis också att ange ett heltal och en intervall. (samma A som tidigare) >> A(3,3:4) %ger 3e till 4e kolumnen av rad 3 ans = 11 12 Anges ett kolon utan heltal får man hela raden eller hela kolumnen i stället för ett intervall. >> A(3,:) %ger alla kolumner av rad 3 9 10 11 12
Sammansättning av matriser och vektorer Sammansatta matriser och vektorer kan fås genom att ange en vektor/matris vars element i sin tur är vektorer/matriser. Ex: >> x1 = [ 1 2 3 4 ]; x2 = [ 5 6 7 8 ]; >> x = [ x1 x2 ] x = 1 2 3 4 5 6 7 8 >> A = [ x1 ; x2 ] A = 1 2 3 4 5 6 7 8
Funktioner som genererar specifika matriser zeros(n) %ger en n×n matris av nollor zeros(m,n) %ger en m×n matris av nollor ones(n) %ger en n×n matris av ettor ones(m,n) %ger en m×n matris av ettor eye(n) %ger en n×n identitetsmatris
Funktioner som genererar slumpmatriser: rand(n) eller rand(m,n) genererar en matris av jämt fördelade slumpvärden mellan 0 och 1. randn(n) eller randn(m,n) genererar en matris av normalfördelade slumptal. randi(imax,n) eller randi(imax,m,n)generer en slumpmatris av jämt fördelade heltal mellan 0 och imax.
Vanliga räkneoperationer med matriser. En skalär kan adderas till eller subtraheras från en matris (eller vektor). En matris (eller vektor) kan multipliceras med eller divideras med en skalär: Två matris (eller vektorer) av samma storlek kan subtraheras eller adderas med varandra. I alla dessa fall används standartecknet för respektive operation.
Elementvis räkneoperationer med matriser. Varje element i en matris multipliceras med motsvarande element ur en annan matris. Exempel: >> A = [ 2 3 5; 1 9 4 ] A = 2 3 5 1 9 4 >> B = [3 2 3; 3 2 3] B = 3 2 3 >> A.*B ans = 6 6 15 3 18 12
Elementvis räkneoperationer med matriser (forts.) Varje element i en matris divideras med motsvarande element ur en annan matris. Exempel (samma A och B som tidigare): >> A./B ans = 2/3 3/2 5/3 1/3 9/2 4/3 Varje element i en matris kan upphöjas till någon lämplig exponent. >> A.^3 8 27 125 1 729 64
Matrismultiplikation (matrisprodukt) Om multiplikationstecken används utan punkt genom får vi matrisprodukten (förutsätt att antalet rader i A matchar antalet kolumner i B) >> B = B' %B' transponerar B. B = 3 3 2 2 >> A*B ans = 27 27 33 33
Några inbyggda funktioner för matriser och vektorer length(x) %ger längden av vektorn x max(x) %ger största elementet i vektorn x min(x) %ger minsta elementet i vektorn x mean(x) %ger medelvärdet av elementen i x sum(x) %ger summan elementen i vektorn x dot(x,y) %ger skalärprodukten x∙y cross(x,y) %ger vektorprodukten x×y size(A) %ger storleken n×m av matrisen A inv(A) %ger inversmatrisen för A Fler funktioner finns på sidan 68 i kursboken.
Ekvationssystem (igen) A\b ger en vektor x så att 𝐴×𝑥=𝑏. b/A ger en vektor x så att 𝑥×𝐴=𝑏.
Tillämpning av vektorer: Plotta en trigonometrisk funktion x = linspace(-pi,pi); y = sin(x); %varje element i y blir %sinusvärdet för motsvarande %element i x plot(x,y); Grafen för y = sin(x) öppnas i nytt fönster:
Tillämpning av vektorer: Plotta grafen x3 - 2x2 + 4x - 10 x = linspace(-10,10); %godtyckligt intervall % punkt framför * och ^ ger elmentvis operation y = x.^3 – 2.*x.^2 + 4.*x – 10 plot(x,y); OBS: Detta kan även göras genom att definiera en anonym funktion (då behövs ej punkterna): f = @(x) x^3 – 2*x^2 + 4*x – 10; y = f(x);
Teckensträngar En teckensträng är en vektor där de lagrade värdena motsvarar tecken. Skapas i en tilldelningssats med enkla citattecken ex: --> s = 'Hello world!' s = Hello world! Som med en vanlig vektor kan man ändra (eller radera) ett enstaka element: --> s(12)='?' Hello world?
Teckensträngar (forts.) Som med en vanlig vektor kan man ändra (eller radera) ett enstaka (eller flera) element ur en teckensträng: --> s1 = s(1:5) s1 = Hello --> s2 = s(length(s)) s2 = ? eller sätta ihop två strängar: --> s = [s1 s2] s = Hello?
Teckensträngar (forts.) Funktionen num2str() kan användas för att konvertera nummer till teckensträngar. >> tau = num2str(2*pi) %Detta konverterar det numeriska tau = %värdet 2*pi till teckensträngen 6.2832 %’6.2832’ Det går även att specificera hur många värdesiffror som skall ingå. >> tau = num2str(2*pi,8) %resulterar i 7 värdesiffror tau = %eftersom en plats i teckensträngen 6.2831853 %tas upp av decimalkommat Funktionen är användbar när nummer behöver infogas i textsträngar.