Wojskowa Akademia Techniczna
im. Jarosława Dąbrowskiego
Wydział Elektroniki
Temat zajęć: Matlab - Ćwiczenia podstawowe
Ćwiczenie wykonał: Jan Dułowicz
Grupa: E3X2N1
Data: 26.10.2013 r.
Celem poprzedniego labolatoria było przedstawienie podstawowych funkcji programu MatLab. Na niniejszym sprawozdaniu znajduję się zobrazowanie wyników wpisanych w edytorze programu ukazanych w „Command Window”.
Program MatLab jest środowiskiem uniwersalnym, poznawa na przeprowadzenie zarówno prostych jak i bardzo złożonych obliczeń matematycznych.Posiada on wielką bazę danych, w której znajduję się wiele podręczników przydatnych jako pomoce dydaktyczne w opanowaniu programu oraz rozszerzeniu wiedzy na jego temat.
Uwagi:
- W oknie Command Window nie pokazują się komentarze oznaczone zielonym kolorem, ukazane w mojej pracy. Wprowadziłem je, żeby praca była czytelniejsza.
- Funkcja `clear all' usuwa wszystkie zmienne, tak więc odczyt funkcji od numeru 1 do 7 jest niemożliwy.
- Wnioski także nie występują w Command Window i zostały wpisane tłustym drukiem.Są one istotną analizą wyników przedstawionych w programie.
Treść przedstawiona w Command Window
% 9. Wartość NaN i Inf
Wynik_1 =
NaN
Wynik_2 =
NaN
Wynik_3 =
Inf
Wniosek 1: NaN (Not a Number jest generowana przy próbie wykonania działań typu 0/0 lub Inf-Inf),
Inf (Inifinity - nieskończoność - jest generowana przez dzielenie liczby różnej od 0 przez zero,
lub przez działanie na wartościach, które wykraczają po za największą możliwą
wartość rzeczywistą)
% 10. Formaty wyświetlania
Format_short =
0.6667
Format_long =
0.666666666666667
Format_long_e =
6.666666666666666e-01
Format_rat =
2/3
Wniosek 2: Format_short - Jest to format stałoprzecinkowy, który w przypadku liczby niewymiernej wyświetla jej wynik przybliżony do czterech miejsc po przecinku.
Format_long - Jest to format stałoprzecinkowy, który w przypadku liczny niewymiernej wyświetla jej wynik przybliżony do maksymalnie czternastu miejsc po przecinku.
Format_long_e - Jest to format zmiennoprzecinkowy, który stosuje notację wykładniczą (e-01 oznacza *10^-1).
Format_rat - Liczby w tym formacie są zapisywane za pomocą ułamka dziesiętnego.
% 11. Liczby zespolone
Liczba_zesp_1 =
5 + 7i
Liczba_zesp_2 =
3 + 2i
Liczba_zesp_3 =
4 + 1i
Wniosek 3: W przypadku działań na liczbach zespolonych (w tym przypadku sumy) program wyświetla wynik w postaci zespolonej. Uwaga - na postać wyniku ma wpływ aktualny format wyświetlania liczb.
% 13. Definicja wektora.
A =
1 4 8 1
B =
1 4 8 1
C =
1 4 8 1
Wniosek 4: Użycie przecinków w zapisie wektora nie wpływa na jego wynik kocowy w Command Window.
% 14. Tworzenie macierzy pustej
A =
[]
Wniosek 5: Definicją macierzy pustej w środowisku MatLab jest nawias kwadratowy.
% 15. Generowanie wektora o strukturze min:krok:max
A =
0 2 4 6 8 10
Wniosek 6: Przypadku generowania wektora występuje pewne objaśnienie. Mianowicie w przypadku wektora o postaci A=[0:2:10] - 0 jest wartością minimalną, liczbe 2 dodaje się do następnego elementu wektora, a wartość 10 jest wartością maksymalną.
% 16. Generowanie wektora o strukturze min:max
A =
Columns 1 through 10
0 1 2 3 4 5 6 7 8 9
Column 11
10
Wniosek 7: Struktura tego wektora różni się od wektora o strukturze `min:krok:max' tym, że wartość `krok' nie jest podana i program domyślnie dodaje liczbe 1 do następnego elementu wektora.
% 17. Generowanie macierzy ciąg dalszy
A =
1 2 3 4 5 6 7 8 9 10
1 3 5 7 9 11 13 15 17 19
Wniosek 8: W przypadku komendy o postaci A=[1:10;1:2:20] program rozróżnia dwa wektory, które oddzielone są od siebie poprzez średnik. Zatem wynikiem komendy będą dwa wektory - jeden o postaci `min:max', a drugi o postaci `min:krok”max'. Uwaga: W przypadku drugiego wektora wartość minimalna jest równa 1, krok 2, a maksimum 20. Analogicznie ostatnim elementem będzie wartość 19, ponieważ
% 18. Generowanie macierzy na podstawie innych macierzy
A =
1 4 1
2 0 1
B =
3 1
4 1
C =
1 2 2 0 1
2 4 7 1 0
D =
1 4 1 3 1
2 0 1 4 1
1 2 2 0 1
2 4 7 1 0
Wniosek 9: Wygenerowana macierz jest połączeniem macierzy A, B oraz C. W dwóch pierwszych wierszach macierzy D są umieszczone macierz A oraz B, a w trzecim i czwartym wierszu macierz C.
% 19. Generowanie macierzy - technika mieszana
A =
1 2 3
4 5 6
B =
1 2 3 1
4 5 6 2
1 2 3 4
Wniosek 10: W tym przypadku macierz B jest zasadniczo połączeniem 3 różnych macierzy.
Zapis: B=[A, [1;2]; 1:4] oznacza, że - od pierwszego do drugiego wiersza oraz od pierwszej do trzeciej kolumny pojawia się macierz A. Następnie macierz [1;2] jest dopisana w czwartej kolumnie. Ostatnim elementem jest wektor typu `min:max' o postaci [1:4] wpisany do trzeciego wiersza.
% 20. Tworzenie macierzy jednostkowej
A =
1 2 3
4 5 6
7 8 9
ans =
1 0 0
0 1 0
0 0 1
Wniosek 11: Macierz jednostkowa po swojej przekątnej, zaczynającej się od lewego górnego elementu same jedynki, a reszta elementów to zera. Komenda eye(size(A)) tworzy macierz jednostkową na podstawie macierzy A (rozmiar macierzy jednostkowej i macierzy A jest taki sam)
% 21. Macierze złożone z samych jedynek i zer
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
ans =
1 1 1
1 1 1
ans =
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
ans =
0 0 0
0 0 0
Wniosek 12: Komenda ones(5) tworzy macierz 5 X 5 złożoną z samych jedynek. W przypadku komendy
ones(2,3) liczba 2 oznacza ilość wierszy macierzy, a liczba 3 ilość kolumn. Jeśli występuje przy komendzie jedynie jedna wartość liczbowa to oznacza ona zarówno liczbe kolumn jak i wierszy.
Macierze złożone z samych zer tworzy się podobnie jak macierze złożone z samych jedynek z tą różnicą, że stosuje się komende zeros (np. Komenda zeros(5) tworzy macierz 5 X 5 złożona z samych zer.)
% 22. Generacja liczb pseudolosowych
a =
664/815 717/785 408/1465
1298/1433 1493/2361 1324/2421
751/5914 694/7115 338/353
b =
687/712 6271/6461 614/1265
589/3737 581/607 1142/1427
c =
454/2215 1123/797 1129/935
399/3214 1797/1268 1839/2564
1229/825 139/207 895/549
d =
2223/4547 511/703 983/3345
507/490 291/959 681/865
Wniosek 13: Komenda a=rand(3) tworzy macierz 3 X 3 z liczb pseudolosowych (liczby losowe z zakresu od 0 do 1) zapisanych za pomocą formatu `Format_rat”. Podobnie jak w przypadku tworzenia macierzy złożonych z jedynek wartość liczbowa oznacza rozmiar macierzy (np. b=rand(2,3) tworzy macierz liczb pseudolosowych o dwóch wierszach i trzech kolumnach). Są to macierze o rozkładzie liczb równomiernym. Komenda c=randn działa podobnie z tym, że tworzy macierze o rozkładzie liczb nie równomiernym
% 23. Dostęp do elementów macierzy
A =
1 2 3
4 5 6
7 8 9
Wynik_1 =
6
Wynik_2 =
1 2
4 5
Wynik_3 =
4 5
Wynik_4 =
4 5 6
Wynik_5 =
1 2 3
7 8 9
Wniosek 14: W przypadku macierzy A=[1 2 3; 4 5 6; 7 8 9] istnieje możliwość dostępu do jej poszczególnych elementów za pomocą poszczególnych komend. Komenda `Wynik_1=A(2,3)' wyświetla wartość liczbową macierzy A występującą w jej drugim wierszu i trzeciej kolumnie. Komenda Wynik_2=A(1:2,1:2) tworzy podmacierz macierzy A złożoną od pierwszej do drugiej wartości pierwszego wiersza oraz z dwóch pierwszych wartości drugiego wiersza macierzy A.
Wynik_3=A(2,1:2) oznacza wyświetlenie dwóch pierwszych wartości z drugiego wiersza macierzy A.
Komenda `Wynik_4=A(2,:)' wyświetla zawartośc całego drugiego wiersza macierzy A.
Komenda `Wynik_5=A([1 3],:)' Wyświetla cały pierwszy i trzeci wiersz macierzy A.
% 24. Wyświetlanie macierzy
1 2 3
4 5 6
7 8 9
Dowoly napis
Wniosek 15: `Komenda disp(A) disp('Dowolny napis')' wyświetla macierz A (została ona zdefiniowana w poprzednim przykładzie dlatego jest taka sama) oraz możliwość dowolnego komentarza do niej (np. jeśli zamiast wpisania `Dowolny napis' wpisać Macierz A - ta nazwa zostałaby wyświetlona pod macierzą A.
% 25. Rozmiar macierzy
A =
1 2 3
4 5 6
liczba_wierszy =
2
Liczba_kolumn =
3
Wniosek 16: Pragnąc wyświetlić opis ile powyższa macierz A ma wierszy i kolumn należy użyć komendy [Liczba_wierszy, Liczba_kolumn]=size(A). W tym przypadku zasadniczo funkcja `size(A)' sprawdza rozmiar danej macierzy, ale żeby zapis był bardziej klarowny należy przypisać nazwy do wyników ( czyli zamiast `size(A)' użyć `[Liczba_wierszy, Liczba_kolumn]=size(A)'.
% 26. Długość wektora
A =
1 2 3 4 5 6 7 8 9
Dlugosc_wektora =
9
Wniosek 17: Aby otrzymać długość wyżej podanego wektora A należy użyć funkcji `Dlugosc_wektora=length(A)'. Podobnie jak w przypadku poprzedniego przykładu pierwszy człon funkcji pełni funkcje estetyczną (czyli zasadniczą funkcją jest `length(A)').
% 27. Suma i różnica macierzy
A =
1 2 3
4 5 6
B =
7 8 9
3 5 1
C =
8 10 12
7 10 7
D =
-6 -6 -6
1 0 5
Wniosek 18: W powyższym przykładzie macierz C jest sumą macierzy A i B, a macierz D różnicą macierzy A i B.
Dodawanie macierzy w środowisku MatLab można otrzymać poprzez komende (w tym przypadku) C=A+B.
Odejmowanie wygląda tak samo, różni się tylko znakiem. Pomimo tego, że funkcja jest prosta w zastosowaniu należy pamiętać, że dodawanie i odejmowanie macierzy nie może się odbyć jeśli ilość wierszy lub kolumn macierzy dodawanych różni się od siebie.
% 28. Mnożenie macierzy (NIE JEST PRZEMIENNE)
A =
1 2 3
4 5 6
B =
1 2
4 5
6 2
Iloczyn_AB =
27 18
60 45
Iloczyn_BA =
9 12 15
24 33 42
14 22 30
Wniosek 19: Mnożenie w środowisku MatLab w zapisie funkcji różni się od dodawania jedynie znakiem. Należy zaznaczyć, iż można mnożyć macierze o różnych rozmiarach, ale mnożenie macierzy nie jest przemienne i działanie (przykładowo) C=A*B będzie miało inne rozwiązanie niż C=B*A.
% 29. Transpozycja macierzy
A =
1 2 3
4 5 6
A_T =
1 4
2 5
3 6
Wniosek 20: Transpozycja jest w istocie zamianą wierszy macierzy na kolumny. W środowisku MatLab komenda A_T=A' oznacza transpozycje macierzy A. Można zauważyć, że A' to zapis macierzy A w formie transpozycji.
% 30. Mnożenie tablicowe (ELEMENT PO ELEMENCIE)
A =
1 2
4 5
B =
3 4
2 3
Mnozenie_tablicowe =
3 8
8 15
Wniosek 21: Mnożenie tablicowe można zastosować, jeśli rozmiary macierzy mnożonych są takie same, gdyż mnoży ono elementy o tych samych pozycjach (wiersz oraz kolumna elementu). Uzyskać je można poprzez komendę `A.*B'
% 31. Dzielenie tablicowe (ELEMENT PO ELEMENCIE)
A =
6 4
8 2
B =
3 2
4 1
Dzielenie_tablicowe =
2 2
2 2
Wniosek 22: Dzielenie talicowe odbywa się na takich samych zasadach jak mnożenie tablicowe, jednak z innym znakiem.
% 32. Potęgowanie tablicowe
A =
6 4
8 2
Potega =
36 16
64 4
Wniosek 23: Podobnie jak w przypadku mnożenia tablicowego potęgowanie tablicowe wymaga takich samych rozmiarów macierzy. Komenda `Potega=A.^2' powoduje ukazanie macierzy, która jest złożona z Macierzy A, której każdy element został poddany działaniu (do potęgi drugiej). W przypadku zastosowania komendy `Potega=A.^3' powstanie macierz złożona z macierzy A, której każdy elementy został pomnożony trzykrotnie przez samego siemie.
% 33. Definiowanie łańcucha
a =
LAŃCUCH
% 34. Tworzenie macierzy, której wierszami są łańcuchy
b =
Pierwszy wiersz macierzy
Drugi wiersz macierzy
Trzeci wiersz macierzy
LAŃCUCH
%35. Puste znaki i łączenie łąńcuchów
asa sas
L1 =
Łańcuch pierwszy
L2 =
Łańcuch drugi
L3 =
Łańcuch trzeci
Lancuch_caly =
Łańcuch pierwszy Łańcuch drugi Łańcuch trzeci
Wniosek 24: Komenda `disp(['asa' blanks(30) 'sas'])' tworzy dwa napisy oddalone od siebie o wartość `blanks'. Oznacza to, że wartość 30 w tym przypadku wyznacza ilość pustych znaków między nimi.
Komenda Lancuch_caly=[L1 L2 L3] przywołuje poprzednio zapisane łańcuchy jako całość ukazaną w jednym wierszu.
% 36. Wydobywanie kodów ASCI znaków łańcucha
Znaki_ASCI =
68 111 109
Wniosek 25: Dzięki programowi MatLab można zapisać wyrazy za pomocą kodów ASCI. W tym przypadku zakodowany został wyraz `Dom'. Kodowanie ASCI można osiągnąć poprzez funkcje `Znaki_ASCI=abs'
Uwaga: Należy pamiętać, że wielkość liter ma wpływ na wartość kodu dla danej liczby. Kod ASCI nie pokazuje polskich znaków.
% 37. Generowanie komunikatów
A =
19667/1000
opis =
Zmienna A = 19.667
Wniosek 26: W programie MatLab można stosować opisy. Jest to przydatne w tym przypadku, żeby przedstawić wartość liczbową bardziej estetycznie. Jeśli chcemy, żeby program wyświetlił liczbę A o wartości 19.667 to zostanie ona przedstawiona w formacie `Format_rat' (chyba, że wcześniej został zastosowany inny format). Komenda aktywująca opis ma postać `opis=['Zmienna A = ', num2str(A)]'
% 38. Wprowadzanie danych
Wprowadź wartość zmiennej A:
Wniosek 27: W środowisku MatLab można przypisać wartość do każdej zmiennej. Jest to wydajne, ponieważ program wczytuje i zapamiętuje wartość każdej wprowadzanej liczby i w każdej chwili można przywołać pożądaną wartość. Po użyciu komendy `A=input('Wprowadź wartość zmiennej A: ')' program poprosi nas o podanie wartości, jaką chcemy przypisać do liczby.