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]: >> x = [0 1 1 2 3 5] x = 0 1 1 2 3 5 › För att ändra (eller lägga till) ett element i x: >> x(7)=8 x = 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) ans = 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 ]) ans = 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 2 3 › Ta bort sista värdet ur x: >> x(length(x)) = [] ans = 0 1 1 5 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 x = 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 1 2 › Ange matrisen π΄ = 5 6 9 10 >> A = [1 2 3 4 ; 5 6 7 3 5 7 8 4 6 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] 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 ans = 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 3 2 3 6 6 15 3 18 12 >> A.*B ans = 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 ans = 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 3 3 >> A*B ans = 27 27 33 33 Några inbyggda funktioner för matriser och vektorer length(x) max(x) min(x) mean(x) sum(x) dot(x,y) cross(x,y) size(A) inv(A) %ger %ger %ger %ger %ger %ger %ger %ger %ger längden av vektorn x största elementet i vektorn x minsta elementet i vektorn x medelvärdet av elementen i x summan elementen i vektorn x skalärprodukten xβy vektorprodukten x×y storleken n×m av matrisen A 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)='?' s = 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.