%
aa = [1 2 3];
%
aa = [1 2 3]
%
aa = [1 … 2 3]
%
aa = [10:%-2:0]
Zadanie. Stwórz wektor o wartościach 1, 0.9, 0.8 … -0.9
%obracanie wektora lub macierzy
aa = [1:3 ; 11:13]; % znak „ ; ” mówi złączeniu elementów „w pionie”
(albo po prostu przejściu do następnego wiersza).
aa' % transponowanie
Zadanie. Stwórz macierz o zawartości:
1 2.1
4 2.0
..
40 0.8
%operacje „z kropką” na macierzach
aa .* 10 %tzw. operatory z kropką i skalarem, czyli na każdym elemencie będzie dokonywana operacja oddzielnie.
aa ./ [1 2 10]
aa + [10 ; 100] % wektor po prawej stronie jest transponowany, operacje będą wykonywane „kolumna po kolumnie”.
aa .^ 0.5 %wszystkie elementy podnieś do potęgi 0.5
Zadanie. W poniższej macierzy pomnóż wiersze kolejno przez 1, 100, 10 za pomocą jednego polecenia.
Macierz wejściowa: Wynik:
1 2 3
4 5 6
7 8 9
1 2 3
400 500 600
70 80 90
Zadanie. W poniższej macierzy pomnóż kolumny kolejno przez 1, 0.1, 10 za pomocą jednego polecenia.
Macierz wejściowa: Wynik:
1 2 3
4 5 6
7 8 9
1 0.2 30
4 0.5 60
7 0.8 90
%logiczne operacje na macierzach aa > 1 & aa ~= 11
Zadanie. Stwórz wektor o wartościach 11, 12 .. 20 i wskaż czy kolejne elementy w tym wektorze są jednocześnie większe niż 15 i mniejsze lub równe 18. Wynik powinien wynosić 0, 0, 0, 0, 0, 1, 1, 1, 0, 0.
%mnożenie
aa * [1 10 100]' %podczas mnożenie wektorów lub macierzy za pomocą operatora „*” następuje zwyczajne mnożenie macierzowe (tzw. „wiersze przez kolumny”).
Zadanie. Sprawdź wynik mnożenia poniżej macierzy prze poniższy wektor transponowany („pionowy”)
Macierz
1 2.1
3 2.2
..
41 6.1
wektor transponowany 1
1000
%odwracanie macierzy [1 2;3 4]^-1
Zadanie. Za pomocą odwracania macierzy wylicz wartość układu równań
3⋅x1+1⋅x2=31;−x1+x2=−9
, czyli [xx12]
=[
−1 13 1]
−1∗[
−319] , powinno wyjść
x1=10 ; x2=1
.
%indeksowanie elementów macierzy 2d
%pierwszy element ma numer 1, a ostatni „end”
aa(:, 2:end-1) % wszystkie wiersze ( : ), kolumny od drugiej do przedostatniej
Zadanie. Dla poniższej macierzy pokaż wartości wszystkich kolumn
zaczynając, a wierszas zaczynając od przedostatniego i kończąc na
pierwszym
Macierz wejściowa: Wynik:
1 2 3
4 5 6
7 8 9
4 5 6
1 2 3
%indeksowanie macierzy pojedynczym wektorem
aa(1:4) %w przypadku macierzy i indeksowania wektorem elementy są liczone kolumnami, odradza się jawne indeksowanie w ten sposób.
aa(aa > 10)
find(aa > 10) %indeksy elementów niezerowych bb=aa; bb(aa>10) = 9; bb
Zadanie. W poniższej macierzy powiększ wartości pomiędzy 2 i 5 o 10.
Macierz wejściowa: Wynik:
1 2 3
4 5 6
7 8 9
1 2 13
14 5 6
7 8 9
% wybrane operacje "agregacji" na macierzach aa = [1:3;11:13]
min(aa) %wyszukanie minimalnej wartosci dla kazdej kolumny [~, i] = min(aa) %pobierz DRUGI parametr funkcji min, czyli index minimalnego elementu
max(aa) %
mean(aa, 2) %wyszukanie sredniej w kazdym wierszu
sum(aa, 1) %wyliczenie sumy elementow w kazdej kolumnie sum(aa)
Zadanie. Proszę stworzyć macierz widoczną poniżej, następnie w każdej kolumnie osobno pomniejszyć wartości o średnią wartość w tej kolumnie.
Macierz wejściowa: Wynik:
1 2 3
4 5 4
7 8 5
-3 -3 -1
0 0 0
3 3 1
size(aa, 1) %rozmiar "pierwszego wymiaru"
length([10:0.1:30]) %dlugosc wektora
%inne operacje doc clear
clear bb; %kasowanie zmiennej (dosc wolna operacja) clear ; % kasowanie wszystkich zmiennych
rand(2, 3); %macierz 2x3 z wartosciami losowymi z przedzialu (0; 1) sort(rand(1,10) );
randperm(5); %losowa permutacja liczb 1:n, na przykład 2, 3, 5, 1, 4 Zadanie. Stwórz ręcznie macierz widoczną poniżej, następnie pobierz wielkość macierzy poniżej, następnie stwórz macierz o tej samej wartości wypełnioną wartościami losowymi z przedziału [-1;+1].
Macierz wejściowa: Przykładowy wynik:
1 2 3
4 5 4
-0.393 0.421 0.831 0.315 -0.790 -0.013
%petle
aa = [1:3;11:13]; bb = 1; cc = 0;
while (bb <= size(aa, 2)) tmp = cc + aa(1, bb);
cc = tmp;
bb = bb + 1;
end;
tmp % zmienna nie jest usuwana po wyjsciu z petli cc
bb
clear bb cc;
%petla for
aa = [1:3;11:13]; suma = 0;
for i = 1:size(aa, 2) suma = suma + aa(1, i);
end;
suma
clear suma i
%pętla for, do zmiennej wyznaczonej (tutaj i) bedzie w kolejnych
iteracjach podstawiac kolejne kolumny a nie wartosci.
%Szczegoly widoczne sa w przykladach ponizej
mac = [1 2 3; 4 5 6]; wek_pion = [11 12 13]’; wek_poz = [11 12 13];
for i = mac
i %petla wykona się 3 razy, zmienna i bedzie zawierala w kolejnych iteracjach pionowe wektory [1; 4], [2; 5], [3; 6]
end;
for i = wek_pion
i %petla wykona się 1 raz, zmienna i bedzie zawierala pionowy wektor [11; 12; 13]
end;
for i = wek_poz
i %petla wykona się 3 razy, zmienna i bedzie zawierala w kolejnych iteracjach wartosci 11, 12, 13
end;
Zadanie. Proszę stworzyć macierz o rozmiarze 4x3 wypełnioną losowymi wartościami całkowitymi z przedziału [0; 5], a następnie proszę za pomocą podwójnej pętli przeiterować każdy wiersz osobno od strony lewej po prawą i sprawić, by kolumny od drugiej do ostatniej były powiększone o wartość po ich lewej stronie (suma z kumulacją). Przydatne funkcje to rand, round, ceil, floor. Na przykład:
Macierz 4x3 wypełniona
początkowymi losowymi wartościami: Macierz po dokonaniu obróbki:
1 3 1 3 0 2 2 2 3 0 1 2
1 4 5 3 3 5 2 4 7 0 1 3
%blok warunkowy for i=1:9
if i <= 3 i
elseif (i <= 7) i+10
else i+100 end;
end; clear i
Zadanie. Proszę stworzyć macierz o rozmiarze 3x4 wypełnioną losowymi wartościami całkowitymi z przedziału [0; 5], a następnie proszę za pomocą podwójnej pętli i polecenia if wyzerować wartości większe niż 3. Na
przykład:
Macierz 3x4 wypełniona
początkowymi losowymi wartościami: Macierz po dokonaniu obróbki:
2 3 0 0 4 3 4 1 4 2 3 1
2 3 0 0 0 3 0 1 0 2 3 1
%dynamiczna zmiana rozmiaru macierzy (bardzo wolna metoda) bb = [];
bb = [bb 1:3]
bb(10) = 10;
bb(end+1) = 11; %dodanie wartosci bb = [bb; 101:111]
bb = 1:10;
bb(bb > 3 & bb < 8) = []; %nietypowy sposób usuwania elementów bb = {} %zmienna typu ‘komorkowego’
bb{1} = 1; bb{2} = [1:4]; bb{3}='napis';
%kazdy element jest innej wielkosci i typu
%
bb{2}(3)
%wykresy plot(-10:10) plot(-10:10, '.-r')
plot(-10:10, [101:121], ':k', 'linewidth', 10)
xlabel('wymiar x'); ylabel('wym y'); title('tytul');
xlabel('\alpha_{\Gamma}^{123}','Interpreter','Tex');
clf; %czyszczenie wykresu hold on;
plot(1:11, ':r'); plot(3:13, '--b'); plot(5:15, 'sk');
hold off;
legend('a1','b2', 'c3');
doc plot
xlim([0 10]); ylim([-10 10]); %ograniczeni zakresu wyswietlania wykresu
%wykresy 3d
mac = [1 2 3; 3 2 1; 2 2 2];
mesh(mac) meshc(mac) surf(mac)
Zadanie. Proszę wyświetlić na jednym wykresie funkcje: abs(sin(x)) i atan(x) dla x mieszczącego się w przedziale (-pi; pi). Należy odpowiednio opisać osie OX i OY oraz dodać opis (legendę) dla obu funkcji oraz tytuł dla całego wykresu.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%
% odczyt obrazka
img_uint8 = imread('rzeczka.jpg'); %dane formatu uint8 – bardzo kiepsko
obsługiwanego przez Matlaba/Octave
% wyświetlenie obrazka imshow(img_uint8);
% zapis obrazka
imwrite(img_uint8, ‘wynik.png’);
% proszę popatrzeć na typ danych img_uint8(3:4, end-3:end, :)
% konwersja na wygodny dla Matlaba/Octave typ danych img_dbl = double(img_uint8);
img_uint8 = uint8(img_dbl); %konwersja w drugą stronę
img_dbl(3:4, end-3:end, :) % proszę popatrzeć na typ danych
%wyświetlanie obrazów dla typu danych double
imshow(img_dbl); % błąd, Octave przyjmuje dla typu double użyteczny zakres wartości [0; 1] zamiast [0; 255]
imshow(img_dbl/255); %poprawnie
%zmiana zawartości pojedynczego piksela
img_dbl(end, 1, 1) = 0; img_dbl(end, 1, 2) = 255; img_dbl(end, 1, 3) = 0;
%zmiana koloru piksela w lewym dolnym rogu na zielony
%podział wykresu na kilka części
clf; % wyczyszczenie i przygotowanie miejsca na wykres
subplot(2, 2, 1); % podział wykresu na 2x2 części, skupienie się na pierwszej ćwiartce
imshow(img_dbl(:, :, 1)/255); % wyświetlenie czerwonej składowej obrazka
subplot(2, 2, 2);
imshow(img_dbl(:, :, 2)/255); % wyświetlenie zielonej składowej obrazka subplot(2, 2, 3);
imshow(img_dbl(:, :, 3)/255);% wyświetlenie niebieskiej składowej obrazka
Zadania. związane z obróbką poniższego obrazu do wykonania
1. Proszę stworzyć macierz zawierającą obrazek „rzeczka.jpg”, następnie zmienić kolor kolumn pikseli od 10 do 50 na żółte, później wyświetlić tak powstały obrazek.
2. Proszę stworzyć macierz zawierającą po lewej stronie obrazek
„rzeczka.jpg”, a po prawej jego lustrzane odbicie. Proszę nie używać subplot i flip.
3. Proszę stworzyć negatyw obrazka „rzeczka”, powinien on wyglądać tak, jak poniżej. Negatyw polega na zamianie wartości 0,1..255 na 255,254..0.
Figure 1: rzeczka.jpg