Wektory i macierze
- zmienne: skalary, wektory, macierze
- operacje wektorowe (wektoryzacja), operacje wykonywane na elementach macierzy bez konieczności używania pętli
s = 5 % skalar v1 = [5, 88, 3, 11] % wektor "wierszowy" v2 = [3; 7; 4] % wektor "kolumnowy" m = [9 6 3; 5 7 2] % macierz whos
s = 5
v1 =
5 88 3 11
v2 =
3
7
4
m =
9 6 3
5 7 2
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
ans 1x5 5 char
m 2x3 48 double
s 1x1 8 double
v1 1x4 32 double
v2 3x1 24 double
Total is 19 elements using 117 bytes
Tworzenie wektorów
- operator
: N:Mwartości odNdoMz krokiem 1N:K:Mwartości odNdoMz krokiemK- funkcja
linspace(N, M, K)- wektor zawierającyKrównoodległych punktów na odcinku odNdoM
v1 = 1:4 v2 = 1:0.5:4 v3 = linspace(1, 2, 5)
v1 =
1 2 3 4
v2 =
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000
v3 =
1.0000 1.2500 1.5000 1.7500 2.0000
Ćwiczenie: za pomocą operatora : wygeneruj wektor [9 7 5 3 1]
Dostęp do elementów wektora
- elementy indeksowane od
1za pomocą operatora() - indeksowanie liniowe
v(i)lub macierzowev(i,j)
v = -5:5 a = v(1) b = v(2) c = v(1:3) % indeksowanie zakresem ind = 1:2:10 d = v(ind) % indeksowanie innym wektorem zawierającym indeksy
v = -5 -4 -3 -2 -1 0 1 2 3 4 5 a = -5 b = -4 c = -5 -4 -3 ind = 1 3 5 7 9 d = -5 -3 -1 1 3
endoznacza indeks ostatniego elementu1:endindeksy wszystkich elementów(:)wszystkie elementy (uwaga: wektor wierszowy będzie wypisany jako kolumnowy)
v(end) ; % ostatni element v(1:end); v(:) ; % wszystkie elementy
Ćwiczenie stwórz wektor x zawierający 100 kolejnych wartości z przedziału od $-\pi$ do $\pi$ a następnie wypisz jego elementy w losowej kolejności. Do przetasowania kolejności elementów wykorzystaj funkcję randperm.
% modyfikowanie elementów v(1) = 42; v
v = 42 -4 -3 -2 -1 0 1 2 3 4 5
% modyfikowanie zakresu wartości
v([1 3 end]) = 222
v(4:7) = 333
v(1:3) = [ -100 -200 -300]
v(:) = v(end:-1:1)
v = 222 -4 222 -2 -1 0 1 2 3 4 222 v = 222 -4 222 333 333 333 333 2 3 4 222 v = -100 -200 -300 333 333 333 333 2 3 4 222 v = 222 4 3 2 333 333 333 333 -300 -200 -100
Ćwiczenie: Utwórz wektor zawierający 100 liczb zgodnie z sekwencją [1 -2 3 -4 5 ... 99 -100]
- wstawienie elementu poza zakresem spowoduje rozszerzenie wektora
- brakujące elementy wypełnione zerami
- rozszerzenie nieefektywne - zalecane jest wstępne alokowanie wektora/macierzy o docelowym rozmiarze
# referencja do elementu poza zakresem v = [1 2 3] v(10) = 5; v
v = 1 2 3 v = 1 2 3 0 0 0 0 0 0 5
v1 = zeros([1, 10]); v1(1:3) = 1:3; v1(10) = 5
v1 = 1 2 3 0 0 0 0 0 0 5
Usuwanie elementów wektora
w = 1:12 w(1) = [] % usuwanie wybranego elementu w([3 6]) = [] % usuwanie zakresu elementów w(6:end) = []
w =
1 2 3 4 5 6 7 8 9 10 11 12
w =
2 3 4 5 6 7 8 9 10 11 12
w =
2 3 5 6 8 9 10 11 12
w =
2 3 5 6 8
Transpozycja
- operator
'realizuje transpozycję wektora (macierzy)
v = 1:5; v2 = v' v2(2) = 42; v2
v2 =
1
2
3
4
5
v2 =
1
42
3
4
5
Łączenie wektorów
[A B]łączenie poziome (rozszerzanie wiersza)[A; B]łączenie pionowe (rozszerzenie kolumny)
v1 = 1:3; v2 = 101:103; a = [v1 v2 ] % sklejanie wierszy b = [v1' v2']
a =
1 2 3 101 102 103
b =
1 101
2 102
3 103
c = [v1 ; v2 ] % rozszerzenie kolumn d = [v1'; v2']
c =
1 2 3
101 102 103
d =
1
2
3
101
102
103
Ćwiczenie: utwórz wektor zawierający elementy ułożone wg. schematu
[1 2 3 ... 99 100 100 99 ... 3 2 1]
Macierze
- macierze również mozna tworzyć za pomoca operatora
: - ilość elementów w wierszach musi być jednakowa
m1 = [1 2 3; 4 5 6] m2 = [5:8 ; 10:13]
m1 =
1 2 3
4 5 6
m2 =
5 6 7 8
10 11 12 13
Funkcje tworzące macierze
rand(n,m)losowe wartość z przedziału $[0, 1]$zeros(n,m)macierz zerowaones(n,m)macierz zawierająca jedynkieye(n,m)macierz jednostkowa (jedynki na diagonali)
a = rand(3) b = rand(3, 2)
a = 0.98035 0.74939 0.90313 0.19552 0.26712 0.95655 0.84169 0.11774 0.16030 b = 0.27733 0.69148 0.52666 0.17304 0.49385 0.34990
c = zeros(5) d = ones(2,5)
c = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d = 1 1 1 1 1 1 1 1 1 1
e = eye(4)
e = Diagonal Matrix 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Ćwiczenie utwórz macierz o wymiarach 100×100, która posiada wartości 1 w pierwszej i czwartej ćwiartce oraz wartości 0 w pozostałych miejscach, zgodnie z poniższym przykładem macierzy 4×4
1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 1
Indeksowanie macierzy
- indeksowanie 2 wymiarów macierzy
(N,M)od1doend - indeksowanie liniowe
(N)od1doendpo elementach kolejnych kolumn
m = [1, 2, 3; 4, 5, 6] a = m(1,2) b = m(1:2, 1:2) c = m(:, 1) % cała kolumna d = m(end, :) % cały wiersz
m = 1 2 3 4 5 6 a = 2 b = 1 2 4 5 c = 1 4 d = 4 5 6
% indeksowanie liniowe a = m(1) b = m(end) c = m(1:end)
a = 1 b = 6 c = 1 4 2 5 3 6
Rozmiary wektorów i macierzy
length(w)ilość elementów wektora lub najdłuższy wymiar macierzysize(m)zwraca ilość wierszy i kolumnnumel(m)ilość elementów
w = 1:100; a = length(w) b = size(w) c = numel(w)
a = 100
b =
1 100
c = 100
m = rand(13, 100); a = length(m) b = size(m) c = numel(m)
a = 100
b =
13 100
c = 1300
Ćwiczene napisz funkcję suma, która wyznaczy sumę wszystkich elementów macierzy podanej w argumencie. Ćwiczenie wykonaj z użyciem instrukcji pętli, iterując po wszystkich elementach macierzy.
W jaki sposób osiągnąć to samo za pomocą wunkcji sum?
Zadanie 4
Zaimplementuj funkcję o nazwie sito, która korzystając z algorytmu sita Eratostenesa utworzy wektor zawierający serię liczb pierwszych od 2 do N, gdzie wartość N jest jedynym argumentem funkcji. W przypadku braku podania argumentu domyślnie będzie użyta wartość N=100.
- Utwórz ciąg liczb od 2 do $n$
- Dla kolejnych $i$ od 2 do $\sqrt{n}$ wykreśl z ciągu liczb wszystkie wielokrotności $i$, czyli $i, 2i, 3i, \ldots$
- Zwróć liczby, które nie zostały wykreślone
Wynik funkcji sito powinien być identyczny do wyniku funkcji Matlaba primes

