Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ml:lab1 [2013/02/26 10:24] esimon Page moved from pl:dydaktyka:ml:prv:lab1 to pl:dydaktyka:ml:lab1 |
pl:dydaktyka:ml:lab1 [2019/06/27 15:50] (aktualna) |
| |
| |
| |
====== Laboratorium 1 - Wprowadzenie do GNU Octave ====== | ====== Laboratorium 1 - Wprowadzenie do GNU Octave ====== |
Środowisko Octave jest wolnym odpowiednikiem pakietu MATLAB. | Środowisko Octave jest wolnym odpowiednikiem pakietu MATLAB. |
===== Instalacja i uruchamianie ===== | |
| |
| [[http://www.gnu.org/software/octave/doc/interpreter/index.html|Dokumentacja]] |
| ===== Instalacja i uruchamianie ===== |
| |
W przypadku większości systemów Linux, pakiet Octave można zainstalować bezpośrednio z repozytorium: <code>$ sudo apt-get install octave</code> | W przypadku większości systemów Linux, pakiet Octave można zainstalować bezpośrednio z repozytorium: <code>$ sudo apt-get install octave</code> |
| |
W języku Octave, nie prototypujemy zmiennych. Typy określane są automatycznie, tak jak w PHP, czy Bashu. | W języku Octave, nie prototypujemy zmiennych. Typy określane są automatycznie, tak jak w PHP, czy Bashu. |
<code octave>zmienna = 'moja zmienna'; | <code octave>zmienna = 'moja zmienna'; |
zmienna = 12.34; | zmienna = 12.34; |
zmienna = [2 3 4; 3 4 5];</code> | zmienna = [2 3 4; 3 4 5];</code> |
| |
\end{bmatrix}$$ | \end{bmatrix}$$ |
| |
W Octave zapiszemy ją jako:<code octave>M = [5 6 0; 6 0 1; 0 6 1]</code> | W Octave zapiszemy ją jako:<code octave>M = [5 6 0; 6 0 1; 0 6 1] </code> |
| |
Aby odwołać się do danego elementu macierzy, lub wektora używamy nawiasów okrągłych.\\ | Aby odwołać się do danego elementu macierzy, lub wektora używamy nawiasów okrągłych.\\ |
**Uwaga :!:** W Octave indeksowanie rozpoczyna się od 1 a nie jak w popularnych językach programowania od 0! Np. Aby pobrać/przypisać wartość elementu z pierwszego wiersza i drugiej kolumny macierzy M, piszemy: | **Uwaga :!:** W Octave indeksowanie rozpoczyna się od 1 a nie jak w popularnych językach programowania od 0! Np. Aby pobrać/przypisać wartość elementu z pierwszego wiersza i drugiej kolumny macierzy M, piszemy: |
<code octave>M(1,2)=7</code> | <code octave>M(1,2)=7 </code> |
| |
Jako wynik otrzymujemy: | Jako wynik otrzymujemy: |
<code octave> | <code octave> |
M(:,3) % zwróci [0;1;1] | M(:,3) % zwróci [0;1;1] |
M(2,:) % zwróci [6 0 1] | M(2,:) % zwróci [6 0 1] |
</code> | </code> |
| |
<code octave> | <code octave> |
M = [5 6 0; 6 0 1; 0 6 1]; | M = [5 6 0; 6 0 1; 0 6 1]; |
M([2 3],[1 2]) | M([2 3],[1 2]) |
</code> | </code> |
| |
zeros(2,10) | zeros(2,10) |
ones(1,10) | ones(1,10) |
range = [1:10] | range = [1:10] |
range = [1:0.3:10] | range = [1:0.3:10] |
range(5:10) | range(5:10) |
A = [0.5 0.5; 1 1]; | A = [0.5 0.5; 1 1]; |
B = [2 2; 2 2]; | B = [2 2; 2 2]; |
| |
A * B | A * B |
A .* B | A .* B |
function W = srednia(dane) | function W = srednia(dane) |
% funkcja obliczająca średnią elementów w wektorze | % funkcja obliczająca średnią elementów w wektorze |
W = sum(dane)/length(dane); | W = sum(dane)/length(dane); |
end | end |
</file> | </file> |
| |
Aby wywołać funkcje z przykładu powyżej wykonujemy polecenie: | Aby wywołać funkcje z przykładu powyżej wykonujemy polecenie: |
<code octave>Wynik = srednia([2 3 4 5 6 7 8]);</code> | <code octave>Wynik = srednia([2 3 4 5 6 7 8]); </code> |
| |
Jeśli funkcja ma zwracać więcej niż jeden argument, zapisujemy to w ten sposób: | Jeśli funkcja ma zwracać więcej niż jeden argument, zapisujemy to w ten sposób: |
% Funkcja zwraca indeksy znalezionej wartości, lub -1,-1 | % Funkcja zwraca indeksy znalezionej wartości, lub -1,-1 |
[rows,cols] = size(M); | [rows,cols] = size(M); |
IndexX = IndexY =-1; | IndexX = IndexY =-1; |
for i=1:rows, | for i=1:rows, |
for j=1:cols | for j=1:cols |
Aby pobrać wartości zwracane przez funkcję powyżej wpisujemy np.: | Aby pobrać wartości zwracane przez funkcję powyżej wpisujemy np.: |
<code octave> | <code octave> |
[X,Y] = myFind(M,6); | [X,Y] = myFind(M,6); |
</code> | </code> |
| |
**Plot2** | **Plot2** |
<code octave> | <code octave> |
x = [0:0.01:10]; | x = [0:0.01:10]; |
y = sin(x); | y = sin(x); |
plot(x,y); | plot(x,y); |
<code octave> | <code octave> |
t = 0:0.1:10*pi; | t = 0:0.1:10*pi; |
r = linspace (0, 1, numel (t)); | r = linspace (0, 1, numel (t)); |
z = linspace (0, 1, numel (t)); | z = linspace (0, 1, numel (t)); |
plot3 (r.*sin(t), r.*cos(t), z); | plot3 (r.*sin(t), r.*cos(t), z); |
[xx, yy] = meshgrid (tx, ty); | [xx, yy] = meshgrid (tx, ty); |
r = sqrt (xx .^ 2 + yy .^ 2) + eps; | r = sqrt (xx .^ 2 + yy .^ 2) + eps; |
tz = sin (r) ./ r; | tz = sin (r) ./ r; |
mesh (tx, ty, tz); | mesh (tx, ty, tz); |
</code> | </code> |
for j=1:y | for j=1:y |
M(i,j) = rand; | M(i,j) = rand; |
end | end |
end</code> | end</code> |
| |
$$\sigma = \sqrt{\frac{\sum\limits_{i=1}^{N} | $$\sigma = \sqrt{\frac{\sum\limits_{i=1}^{N} |
\left(x_{i} - \mu)^{2}} | \left(x_{i} - \mu)^{2}} |
N}$$ | {N-1}}$$ |
| |
Gdzie $\mu$ to średnia, a N to liczba wszystkich elementów. | Gdzie $\mu$ to średnia, a N to liczba wszystkich elementów w probie. |
| |
==== Odchylenie standardowe II==== | ==== Odchylenie standardowe II==== |
Dla funkcji napisanych w poprzednich dwóch zadaniach ([[#dlugosc_wektora|Długość wektora]] oraz [[#odchylenie_standardowe_i|Odchylenie Standardowe I]]) dopisz ich odpowiedniki wektorowe (lub z użyciem pętli) i przetestuj ich działanie na wygenerowanym losowo zbiorze $10^6$ liczb. | Dla funkcji napisanych w poprzednich dwóch zadaniach ([[#dlugosc_wektora|Długość wektora]] oraz [[#odchylenie_standardowe_i|Odchylenie Standardowe I]]) dopisz ich odpowiedniki wektorowe (lub z użyciem pętli) i przetestuj ich działanie na wygenerowanym losowo zbiorze $10^6$ liczb. |
| |
Aby wygenerować dane użyj:<code octave> data = rand(1,10^6);</code> | Aby wygenerować dane użyj:<code octave> data = rand(1,10^6); </code> |
| |
Porównaj czasy wykonywania funkcji: | Porównaj czasy wykonywania funkcji: |
timestart = time(); | timestart = time(); |
| |
%Wywolanie funkcji | %Wywolanie funkcji |
| |
timestop = time(); | timestop = time(); |
| |
printf('Czas wykonania to %d sekund.\n',(timestop-stimestart)); | printf('Czas wykonania to %d sekund.\n',(timestop-timestart)); |
</code> | </code> |
| |
<code octave>A = zeros(10,10) | <code octave>A = zeros(10,10) |
v = zeros(10, 1); | v = zeros(10, 1); |
| x = zeros(10, 1); |
for i = 1:10 | for i = 1:10 |
for j = 1:10 | for j = 1:10 |
v(i) = v(i) + A(i, j) * x(j); | x(i) = v(i) + A(i, j) * v(j); |
end | end |
end | end |
for i = 1:7 | for i = 1:7 |
for j = 1:7 | for j = 1:7 |
A(i, j) = log (X(i, j)); | A(i, j) = log (X(i, j)); |
B(i, j) = X(i, j) ^ 2; | B(i, j) = X(i, j) ^ 2; |
C(i, j) = X(i, j) + 1; | C(i, j) = X(i, j) + 1; |
Napisz funkcję która będzie wyznaczała wartości funkcji z obrazka poniżej. Wyrysuj wartości tej funkcji na wykresie w przedziale od -10 do 10 z krokiem 0.5. | Napisz funkcję która będzie wyznaczała wartości funkcji z obrazka poniżej. Wyrysuj wartości tej funkcji na wykresie w przedziale od -10 do 10 z krokiem 0.5. |
| |
{{:pl:dydaktyka:ml:prv:absfun.png|Wartość bezwzględna}} | {{:pl:dydaktyka:ml:absfun.png|Wartość bezwzględna}} |
| |