ROMAN SALAMON MATLAB PODSTAWY I ZASTOSOWANIA



Podobne dokumenty
ROMAN SALAMON MAREK S. MAKOWSKI MATLAB PODSTAWY I ZASTOSOWANIA

Wprowadzenie do środowiska

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Podstawowe operacje na macierzach

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

do MATLABa podstawowe operacje na macierzach WYKŁAD Piotr Ciskowski

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Metody i analiza danych

Matlab Składnia + podstawy programowania

Obliczenia w programie MATLAB

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

MATrix LABoratory. A C21 delta tvx444 omega_zero. hxx J23 aaa g4534 Fx_38

Wykorzystanie programów komputerowych do obliczeń matematycznych

MATLAB - laboratorium nr 1 wektory i macierze

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Algebra macierzy

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Ćwiczenie 3: Wprowadzenie do programu Matlab

1 Podstawy c++ w pigułce.

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Wstęp do Programowania Lista 1

Programowanie w języku Matlab

Wprowadzenie do Scilab: macierze

MATLAB - podstawy użytkowania

Liczby zespolone. x + 2 = 0.

Co to jest arkusz kalkulacyjny?

Elementy metod numerycznych - zajęcia 9

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

Wprowadzenie do Mathcada 1

Podstawy MATLABA, cd.

Edytor tekstu OpenOffice Writer Podstawy

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

Zanim zaczniemy GNU Octave

Zakłócenia w układach elektroenergetycznych LABORATORIUM

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz.3

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Metody Numeryczne. Laboratorium 1. Wstęp do programu Matlab

Matlab Składnia + podstawy programowania

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wprowadzenie do programu Mathcad 15 cz. 1

Instalacja Pakietu R

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Instalacja

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 3 AUTOMATYKA

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Obliczenia Symboliczne

Macierze. Rozdział Działania na macierzach

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Próbny egzamin z matematyki dla uczniów klas II LO i III Technikum. w roku szkolnym 2012/2013

FUNKCJE LICZBOWE. Na zbiorze X określona jest funkcja f : X Y gdy dowolnemu punktowi x X przyporządkowany jest punkt f(x) Y.

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

EXCEL Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Podstawowe operacje na macierzach, operacje we/wy

1 Programowanie w matlabie - skrypty i funkcje

7. Podstawy zarządzania szablonami

Makropolecenia w Excelu

WEKTORY I MACIERZE. Strona 1 z 11. Lekcja 7.

Programy wykorzystywane do obliczeń


JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Wprowadzenie do Scilab: macierze

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Wprowadzenie do systemu Scilab

JAVAScript w dokumentach HTML (1)

Instrukcja obsługi programu SWWS autorstwa Michała Krzemińskiego

PORÓWNANIE TREŚCI ZAWARTYCH W OBOWIĄZUJĄCYCH STANDARDACH EGZAMINACYJNYCH Z TREŚCIAMI NOWEJ PODSTAWY PROGRAMOWEJ

Funkcje wyszukiwania i adresu PODAJ.POZYCJĘ

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

W naukach technicznych większość rozpatrywanych wielkości możemy zapisać w jednej z trzech postaci: skalara, wektora oraz tensora.

Cw.12 JAVAScript w dokumentach HTML

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

AKADEMIA im. JANA DŁUGOSZA w CZĘSTOCHOWIE

1. Skopiować naswój komputer: (tymczasowy adres)

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Ćwiczenie 1 - Arkusze kalkulacyjne

Rys.1. Technika zestawiania części za pomocą polecenia WSTAWIAJĄCE (insert)

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

MATLAB tworzenie własnych funkcji

najlepszych trików Excelu

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Systemy liczbowe używane w technice komputerowej

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

OPERACJE NA MACIERZACH DODAWANIE I ODEJMOWANIE MACIERZY

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

ECDL/ICDL Przetwarzanie tekstów Moduł B3 Sylabus - wersja 5.0

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Pascal - wprowadzenie

Transkrypt:

1 ROMAN SALAMON MATLAB PODSTAWY I ZASTOSOWANIA SKRYPT DLA STUDENTÓW I ROKU KIERUNKU ELEKTRONIKA I TELEKOMUNIKACJA POLITECHNIKI GDAŃSKIEJ DO PRZEDMIOTU TECHNIKA OBLICZENIOWA I SYMULACYJNA POLITECHNIKA GDAŃSKA WYDZIAŁ ELEKTRONIKI, TELEKOMUNIKACJI I INFORMATYKI KATEDRA ELEKTRONIKI MORSKIEJ GDAŃSK 2008

2 Copyright Roman Salamon 2008 Katedra Systemów Elektroniki Morskiej Politechniki Gdańskiej Skrypt objęty jest prawem autorskim. Prawa autorskiego nie narusza korzystanie z jego wersji elektronicznej oraz jednokrotny wydruk części lub całości skryptu do użytku prywatnego przez studentów Wydziału Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej. Pozostałe formy wykorzystania skryptu wymagają pisemnej zgody autora. Autor będzie zobowiązany za przekazanie uwag dotyczących treści skryptu i dostrzeżonych błędów na adres: roman.salamon@eti.pg.gda.pl

3 SPIS TREŚCI 1. WPROWADZENIE...5 CZĘŚĆ I. PODSTAWY UŻYTKOWANIA PROGRAMU MATLAB...6 2. INFORMACJE WSTĘPNE...7 2.1. PRZYGOTOWANIE PROGRAMU MATLAB DO PRACY...7 2.2. CZĘSTO STOSOWANE POLECENIA... 10 3. PODSTAWOWY OBLICZEŃ NUMERYCZNYCH W PROGRAMIE MATLAB... 12 3.1. WARTOŚCI LICZBOWE... 12 3.1. Liczby rzeczywiste... 12 3.1.2. Liczby zespolone... 13 3.1.3. Zaokrąglenia liczb... 14 3.2. MACIERZE I WEKTORY... 15 3.2.1. Definiowanie macierzy i wektorów... 15 3.2.2. Podstawowe operacje macierzowe... 20 3.2.3. Macierze kwadratowe... 22 3.3. TABLICE... 24 3.3.1. Tablice numeryczne... 24 3.3.2. Łańcuchy... 25 3.4. FUNKCJE... 26 3.4.1. Funkcje standardowe... 26 3.4.2. Funkcje macierzowe... 28 3.4.3 Relacje i operacje logiczne... 31 3.4.4. Instrukcje warunkowe... 32 3.4.5. Definiowanie funkcji... 34 3.5.5. Pętle... 37 4. GRAFIKA... 44 4.1. GRAFIKA DWUWYMIAROWA... 44 4.1.1. Podstawowe funkcje graficzne... 44 4.1.2. Funkcje formatujące rysunek... 47 4.1.3. Tworzenie wielu rysunków... 48 4.1.4. Dobór parametrów rysunku bez użycia instrukcji graficznych... 51 4.2. GRAFIKA TRÓJWYMIAROWA... 54 4.2.1. Linie w przestrzeni trójwymiarowej... 54 4.2.2. Tworzenie obrazów funkcji dwóch zmiennych... 55 4.2.3. Dobór kolorów... 57 4.2.4. Ustawianie położenia układu współrzędnych... 60 4.2.5. Efekty oświetlania rysunków trójwymiarowych... 61 4.2.6. Inne metody formatowania rysunku... 62 4.2.7. Obrazy figur trójwymiarowych... 64 4.3. GRAFICZNY INTERFEJS UŻYTKOWNIKA... 65 4.3.1. Ogólna charakterystyka... 65 4.3.2. Projektowanie planszy GUI... 66 4.3.3. Podstawy programowania graficznego interfejsu użytkownika GUI... 69 4.3.4. Użycie przełącznika Toggle Button i okna edycyjnego Edit Text.... 72 4.3.5. Użycie przełącznika Radio Button i okna edycyjnego Edit Text.... 75 4.4.6. Użycie Popup Menu... 77

4 4.3.6. Użycie Listbox i Axes... 78 4.3.7. Zastosowanie suwaka Slider... 80 5. IMPORT I EKSPORT DANYCH... 83 5.1. WPROWADZENIE... 83 5.2. EKSPORT I IMPORT DANYCH W FORMACIE BINARNYM... 83 5.3. ZAPISYWANIE I CZYTANIE DANYCH W FORMACIE TEKSTOWYM... 84 5.4. EKSPORT I IMPORT PLIKÓW DŹWIĘKOWYCH... 85 CZĘŚĆ II. ZASTOSOWANIA PROGRAMU MATLAB... 86 6. METODY NUMERYCZNE W ZASTOSOWANIU DO FUNKCJI CIĄGŁYCH... 87 6.1. WIELOMIANY... 87 6.2. FUNKCJE WYMIERNE ZMIENNEJ ZESPOLONEJ... 88 6.3. MIEJSCA ZEROWE, MINIMA I MAKSIMA FUNKCJI... 91 6.4. CAŁKOWANIE NUMERYCZNE... 94 6.5. RÓWNANIA RÓŻNICZKOWE... 96 7. GENERACJA, ANALIZA I PRZETWARZANIE SYGNAŁÓW... 104 7.1. SYGNAŁY ANALOGOWE I DYSKRETNE... 104 7.2. GENERACJA SYGNAŁÓW IMPULSOWYCH... 105 7.3. DYSKRETNA REPREZENTACJA SYGNAŁÓW CIĄGŁYCH... 110 7.3.1. Sygnały deterministyczne... 110 7.3.2. Sygnały losowe... 113 7.4. DYSKRETNA TRANSFORMACJA FOURIERA... 117 7.4.1. Definicja i podstawowe własności... 117 8.4.2. Widmo dyskretne a widmo ciągłe... 119 7.4.3. Widma sygnałów o nieograniczonym czasie trwania... 123 7.5. FILTRACJA SYGNAŁÓW DYSKRETNYCH... 127 7.5.1. Filtracja w dziedzinie częstotliwości... 127 7.5.2. Filtracja w dziedzinie czasu... 129 7.6. SPLOT... 135 8. ANALIZA NUMERYCZNA OBWODÓW I UKŁADÓW ELEKTRYCZNYCH... 137 8.1. OBWODY PRĄDU STAŁEGO... 137 8.2. ANALIZA OBWODÓW RLC PRZY POBUDZENIU SINUSOIDALNYM... 141 8.2.1. Obwód RL... 141 8.2.2. Szeregowy obwód rezonansowy... 143 8.2.3. Sprzężone równoległe obwody rezonansowe... 144 8.3. ANALIZA OBWODÓW RLC PRZY DOWOLNYM POBUDZENIU... 148 8.3.1. Analiza numeryczna w dziedzinie częstotliwości... 148 8.3.2. Analiza numeryczna w dziedzinie czasu... 150 8.4. PROJEKTOWANIE FILTRÓW ANALOGOWYCH... 152 8.4.1. Podstawy teoretyczne... 152 8.4.2. Wybór rozwiązania konstrukcyjnego... 155 8.4.3. Wyznaczanie wartości elementów obwodów... 157 INDEKS INSTRUKCJI I FUNKCJI... 163

5 1. WPROWADZENIE Program MATLAB, zwany również często środowiskiem MATLAB, przeznaczony jest do obliczeń inżynierskich i naukowych oraz do wizualizacji ich wyników. W środowisku MATLAB obowiązuje język, w którym komunikujemy się z programem polecając mu wykonywanie określonych zadań. Jest to język wysokiego poziomu, co w praktyce oznacza, że w formie prostej instrukcji można wyrazić polecenie wykonania bardzo złożonego zadania. Cechą charakterystyczną języka MATLAB jest to, że podstawową formą danych jest w nim macierz rzeczywista bądź zespolona. Dane i wyniki obliczeń są przechowywane w przestrzeni roboczej i istnieją w niej dopóki nie zostaną usunięte przez użytkownika, bądź przez zamknięcie programu. Zmienne nie są deklarowane. Środowisko MATLAB jest otwarte w tym sensie, że użytkownik ma dostęp do jego funkcji, poleceń i bibliotek oraz może tworzyć własne pliki i funkcje. Program daje także możliwość współpracy z innymi programami, np. Excel, C, Fortran. Program MATLAB może być instalowany na praktycznie dowolnym komputerze. Zmiana platformy sprzętowej nie wiąże się z utratą własnego oprogramowania. Oprócz podstawowego programu MATLAB istnieją tzw. Toolboxy, które są zawierają specjalistyczne oprogramowanie z kilkunastu dziedzin nauki i techniki. Podstawowy pakiet MATLAB można także uzupełnić interaktywnym programem SIMULINK, który służy do modelowania i symulacji systemów dynamicznych, a w tym systemów elektronicznych, telekomunikacyjnych i systemów automatyki. Niniejszy skrypt został pomyślany jako pomoc dydaktyczna do przedmiotu Technika Obliczeniowa i Symulacyjna, prowadzonego na Wydziale Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej dla studentów drugiego semestru kierunku Elektronika i Telekomunikacja. Składa się on z dwóch części; w pierwszej omówione są podstawy użytkowania programu MATLAB, zaś w drugiej praktyczne przykłady zastosowania programu w elektronice i telekomunikacji. Pisząc ten skrypt autor zakładał, że Czytelnik po raz pierwszy spotyka się z programem MATLAB oraz że Jego wiedza i umiejętności odpowiadają programowi pierwszego semestru studiów. Jedynie w drugiej części skryptu występują przykłady dotyczące treści przekazywanych na drugim lub wyższych latach studiów. Materiał zawarty w skrypcie wystarcza do wykonania projektu i ćwiczeń laboratoryjnych z przedmiotu Technika Obliczeniowa i Symulacyjna w zakresie związanym z użytkowaniem programu MATLAB. Dążąc do zmniejszenia objętości skryptu ograniczono przede wszystkim liczbę omówionych funkcji i instrukcji, rezygnując z rzadziej używanych i bardziej skomplikowanych. Dużą część praktycznych zadań można wykonać bez używania tych pominiętych funkcji i instrukcji, aczkolwiek ich stosowanie ułatwia niewątpliwie programowanie. Ponadto opis omawianych instrukcji i funkcji często nie jest kompletny. Pominięto z zasady te możliwości zawarte w instrukcjach i funkcjach, które znajdują względnie rzadko praktyczne zastosowanie. Funkcjonowanie prawie każdej instrukcji zilustrowano przykładem, co powinno ułatwić jej pełne zrozumienie, zapamiętanie i dalsze stosowanie we własnych programach. Autor wyraża nadzieję, że skrypt ułatwi opanowanie przedmiotu i zachęci do głębszego poznania programu MATLAB, a w przyszłości do jego stosowania w czasie studiów i pracy zawodowej.

CZĘŚĆ I. PODSTAWY UŻYTKOWANIA PROGRAMU MATLAB 6

7 2. INFORMACJE WSTĘPNE 2.1. Przygotowanie programu MATLAB do pracy Na pulpicie monitora znajduje się ikona programu MATLAB, której przyciśnięcie lewym klawiszem myszy powoduje uruchomienie programu. Pojawia się najpierw na krótką chwilę logo programu MATLAB, a następnie okno programu. Okno to może zawierać różne wewnętrzne okna, w zależności od wcześniejszego ustawienia przez poprzedniego użytkownika. W naszej pracy z programem MATLAB używać będziemy dwóch okien, a mianowicie okna podstawowego okna Command Window oraz okna Workspace. W celu uaktywnienia tych okien wybieramy na górnym pasku View i na rozwiniętej liście zaznaczamy wyżej wymienione nazwy okien. Pożądany widok oka programu MATLAB zawiera po lewej stronie okna Workspace, a po prawej stronie okno Command Window. Przeciągając myszą prawe obramowanie pionowe lewego okna można mu nadać pożądaną szerokość około 1/3 szerokości prawego okna. Okno Command Window wykorzystujemy do wprowadzania wszystkich instrukcji, komend, danych itp. W oknie Workspace pojawiają się natomiast sukcesywnie informacje o wszystkich stałych i zmiennych używanych w pisanym przez nas programie. W kolumnie Name widoczne są użyte symbole stałych i zmiennych, a obok ich wymiar. Obserwując to okno unikamy niezamierzonego używania tych samych symboli w odniesieniu do innych zmiennych. Użyteczna jest również informacja o wymiarach zmiennych, która pozwala unikać błędów związanych z niezachowaniem reguł matematycznych obowiązujących w programie MATLAB. Widok obu okien pokazano na rys. 2.1. Rys. 2.1. Widok okien programu MATLAB przygotowanego do pracy.

8 Program MATLAB umożliwia dobranie kroju i wysokości czcionek do upodobań użytkownika. W razie takiej potrzeby wybieramy w pasku okna MATLAB etykietę File, a po rozwinięciu menu etykietę Preferences. W widocznym menu wybieramy najpierw General. Pokazuje się wtedy oddzielne okno, w którym można wybrać krój czcionki i jej wysokość, a także kolory czcionek, którymi będą pisane charakterystyczne elementy programu. Należy wybierać takie style czcionek, które zawierają polskie litery, co jest ważne w zapisie komentarzy (np. Ariel lub SansSerif 1 ). W oknach Command Window i Editor/Debugger najlepiej ustawić Use desktop font. Pozostałe ustawienia mają mniejsze znaczenie i nie należy ich zmieniać bez wyraźnej potrzeby. Wykorzystując okno Command Window można wykonywać proste obliczenia i wprowadzań komendy. Okno to jest jednak mało użyteczne do pisania większych programów. Do tego celu służą specjalne skrypty. Otwieranie takiego skryptu odbywa się przez przyciśnięcie ikony z białą, pustą kartką, umieszczone w lewym skraju paska w oknie programu MAT- LAB. Widok okna przedstawia rys.2.2. Rys. 2.2. Okno do pisania programu Po przyciśnięciu tej ikony pojawia się nowe okno o nazwie Untitled. W oknie tym będziemy wpisywać nasz program. Program ten po nadaniu mu nazwy będzie przechowywany w katalogu Work. W celach porządkowych, każdy użytkownik powinien utworzyć własny fol- 1 Popularny styl Times New Roman ma trudną do odróżnienia literę l i cyfrę 1, co może być przyczyną błędów w programie.

9 der w katalogu Work i w tym folderze umieszczać swoje skryptu. W tym celu należy wykonać kolejno następujące czynności: w pasku okna Untitled wybrać File z menu File wybrać Save As pojawia się okno, w którym na górnym pasku wybieramy ikonę Utwórz nowy folder w oknie pojawia się ramka, w której wpisujemy nazwę użytkownika i wciskamy Enter przyciskamy ikonę nowego folderu i wpisujemy w dolnej ramce nazwę naszego programu, która nie zawiera polskich liter w oknie nazwanym dotąd Untitled pojawia się tytuł C:\MATLAB\work\nazwa użytkownika\nazwa skryptu.m Sprawdzamy, czy ścieżka dostępu do naszego skryptu jest prawidłowa i dokonujemy ewentualnych poprawek opisaną wyżej metodą. Nazwa skryptu ma nadane automatycznie rozszerzenie.m. Nazwy skryptów z takim rozszerzeniem są traktowane w programie MA- TLAB jako zbiory instrukcji przeznaczonych do wykonania. W otwartym oknie o podanej wyżej nazwie tworzymy nasz program. Pracę rozpoczynamy od wpisania nagłówka, którym powinna być (dla porządku) nazwa naszego skryptu. Wpisujemy ją następująco: nazwa (bez kropki). Każdy tekst zwarty między apostrofami napisany jest kolorem czerwonym i jest widoczny po uruchomieniu naszego programu w oknie Command Window. Następnie wpisujemy kolejne instrukcje według zasad podanych w dalszej części skryptu. Po zakończeniu każdego etapu pracy można postępować w dwojaki sposób. Jeżeli chcemy zapisać skrypt bez sprawdzania jego poprawności wówczas, po ciśnięciu File, wybieramy w menu polecenie Save lub wciskamy ikonę Save. Jeżeli chcemy jednocześnie sprawdzić działanie naszego programu, wówczas wciskamy na pasku etykietę Debug i w widocznym menu wybieramy komendę Save and Run. Analogiczny efekt daje wciśnięcie klawisza F5. Nasz program zostanie zapisany i jednocześnie uruchomiony. Skutki uruchomienia programu i jego działanie omówimy w dalszej części skryptu. Po zapisaniu programu można zakończyć jego użytkowanie przez zamknięcie jego okna lub kontynuować pracę nad programem. Usilnie zaleca się okresowe zapisywanie programu, w celu uniknięcia jego utraty w wyniku niewłaściwych działań lub zawieszenia się wykonywania programu MATLAB. Zapisany i zamknięty skrypt można otworzyć w celu dalszej pracy nad nim lub w celu uruchomianie zawartego w nim programu. Należy w tym celu na pasku okna programu MA- TLAB przycisnąć ikonę Open File i z wybrać z katalogu Work folder z nazwą użytkownika, a w nim nazwę skryptu. Inny sposób otwarcia skryptu polega na wpisaniu w oknie Command Window polecenia 2 : >> open <nazwa skryptu> Jeżeli, przykładowo, nasz skrypt ma nazwę wykres, to odpowiednia komanda ma następujący zapis: >> open wykres Polecenie jest wykonywane tylko wtedy, gdy w Current Directory wpisana jest właściwa ścieżka dostępu do naszego skryptu. Zwykle wpisany jest jedynie katalog Work i wtedy należy 2 Symbole < > oznaczają tu i w dalszym tekście miejsce, w którym programista wpisuje ciągi znaków, których znaczenie wpisano między symbolami.

10 uzupełnić ścieżkę wciskając sąsiednią ikonę Browse for Folder i wybierając z niej nazwę folderu użytkownika. Po wykonaniu czynności opisanych w powyższej instrukcji można przystąpić do pisania programu. Aby jednak nasz program funkcjonował zgodnie z naszymi intencjami, konieczne jest poznanie podstawowych zasad obowiązujących w programie MATLAB. Przedstawimy je w następnym rozdziale. 2.2. Często stosowane polecenia Obsługa programu MATLAB wymaga znajomości pewnych podstawowych poleceń. Podamy i omówimy niżej najważniejsze z nich. Część poleceń będzie szerzej opisana w dalszej części skryptu. Tutaj sygnalizujemy ich istnienie i znaczenie w celu uniknięcia możliwych pomyłek np. w związku z poleceniami występującymi w poprzednim podrozdziale Polecenia dotyczące plików i rysunków open <nazwa pliku> Poleceni otwiera plik lub rysunek o wpisanej nazwie, jeżeli właściwa ścieżka dostępu podana jest w okienku CurrentDirectory. Jeżeli ścieżka dostępu do poszukiwanego pliku jest niewłaściwa, to można ją zamienić w okienku Current Directory lub podać w poleceniu open: open <work\student\wykres.m> Jeżeli plik o nazwie wykres.m znajduje się w podkatalogu student, to zostanie otwarty. Dotyczy to również rysunków o nazwach z rozszerzeniem.fig. W analogiczny sposób można otwierać pliki o innych rozszerzeniach. W zależności od rodzaju rozszerzenia otwierane są zmienne, rysunki itp. i umieszczane w odpowiednich oknach. save <nazwa pliku> Polecenie zapisuje na dysku wszystkie zmienne występujące w przestrzeni roboczej (widoczne w oknie Workspace) na dysku w pliku o podanej nazwie i rozszerzeniu.mat (szczegóły w rozdziale Eksport i import danych). saveas(h, nazwa ) To polecenie zapisuje rysunek o uchwycie h w pliku o podanej nazwie. Polecenie używane jest programach dotyczących grafiki. dir <nazwa katalogu> W oknie Command Window pojawia się lista plików znajdujących się w podanym katalogu lub nazwy podkatalogów. Jeżeli potrzebny plik znajduje się w pewnym podkatalogu to należy podać ścieżkę dostępu, np. dir <work\student> Do znalezienie ścieżki dostępu do poszukiwanej funkcji lub pliku z rozszerzeniem.m służy polecenie lub which <nazwa funkcji> which <nazwa pliku.m>

11 Program zwraca ścieżkę dostępu do danej funkcji, którą można wykorzystać do jej otwarcia. Niestety, w wypadku plików umieszczonych w podkatalogach katalogu Work, trzeba podać ścieżkę dostępu w Current Directory. what Powyższe polecenie powoduje pojawienie się wszystkich plików znajdujących się w bieżącym katalogu, do którego ścieżka podana jest w Current Directory. Niepotrzebne pliki i obiekty graficzne usuwamy poleceniem delete <nazwa pliku> Usunąć można pliki, do których dostęp podany jest w Current Directory. close Powyższe polecenie zamyka okno otwartego rysunku. Jeżeli chcemy zamknąć wszystkie rysunku, to dajemy polecenie close all Polecenia dotyczące przestrzeni roboczej clear Polecenie to usuwa z przestrzeni roboczej wszystkie zmienne. Polecenie uzupełnione o: clear x,y,z,... usuwa wymienione zmienne clear global usuwa zmienne globalne clear functions usuwa funkcje clear all usuwa zmienne lokalne, globalne i funkcje. Listę bieżących zmiennych występujący w przestrzeni roboczej otrzymujemy pisząc who Pełną informację o tych zmiennych daje polecenie whos Przypominamy, że lista zmiennych znajduje się również w oknie Workspace.

12 3. PODSTAWOWY OBLICZEŃ NUMERYCZNYCH W PROGRAMIE MATLAB 3.1. Wartości liczbowe 3.1. Liczby rzeczywiste Program MATLAB wykonuje obliczenia na liczbach 64-bitowych, skąd wynika, że minimalna liczba dodatnia ma wartość 1.7 10-307, zaś maksymalna liczba ma wartość 1.7 10 307. Przekroczenie w trakcie obliczeń maksymalnej wartości jest sygnalizowane jako Inf. Chociaż obliczenia wykonywane są z bardzo dużą dokładnością, to ich wyniki liczbowe pokazywane są w oknie Command Window za pomocą mniejszej liczby cyfr. I tak w podstawowym formacie short (domyślnym) liczby są zapisywane często przy użyciu pięciu cyfr i wykładnika potęgi 10. Oto charakterystyczne przykłady reprezentacji liczb w oknie Command Window. >> a=123 a = 123 >> a=123456 a = 123456 >> a=1234.5678 a = 1.2346e+003 Format ostatnio zapisanej liczba zawiera zaokrąglenie do pięciu cyfr znaczących wpisanej liczby oraz wykładnik potęgi 10. Liczba w tym zapisie jest równoważna: a=1.2346 10 +3 Należy podkreślić, że zaokrąglenie użyte jest wyłącznie przy prezentacji liczby w oknie Command Window, natomiast obliczenia, w których występuje ta liczba, są wykonywane z pełną dokładnością. Jeżeli krótki format liczby nie jest wystarczająco dokładny (co zdarza się bardzo rzad ko), to można zmienić go na długi: >> format long >> a=1234.5678 a = 1.234567800000000e+003 Podane wyżej instrukcje nadały zmiennej a określone wartości liczbowe. Wartości te są przechowywane w pamięci do czasu zamknięcia okna Command Window, lub usunięcia z pamięci wszystkich danych. Usuwamy je z pamięci komendą clear. Po wpisaniu tej komendy program reaguje następująco: >> clear >> a??? Undefined function or variable 'a'. Zauważmy, że po wpisaniu powyższych instrukcji, w oknie Workspace pojawia się litera a i obok jej wymiar 1x1. Wszystkie liczby mają taki wymiar, który oznacza w programie MATLAB macierz jednoelementową liczbę. Liczby mogą być zapisywane bezpośrednio w sposób pokazany wyżej, lub jako wynik operacji matematycznych. Oto kilka przykładów: >> a=1+2 a = 3

13 >> a=2*3 a = 6 >> a=2/3 a = 0.6667 >> a=2^3 a = 8 Liczby mogą być również wyrażone jako wartość funkcji: >> a=sin(2) a = 0.9093 >> a=log10(2) a = 0.3010 Zauważmy, że po wpisaniu wartości liczby, program MATLAB zwraca jej wartość w stosownym formacie. Bardzo często jest to niewygodne, zwłaszcza, gdy wyniki pośrednich obliczeń są liczne i nie interesują użytkownika. W celu uniknięcia tej niedogodności, instrukcję kończymy znakiem ;. Mamy wtedy: >> a=2^3; lecz wartość zmiennej a pozostaje w pamięci, co sprawdzamy pisząc >> a a = 8 3.1.2. Liczby zespolone Program MATLAB wykonuje obliczenia na liczbach rzeczywistych i zespolonych. Liczby zespolone zapisujemy w następujący sposób: >> a=2+i*3 a = 2.0000 + 3.0000i Podane wyżej sposoby zapisu liczb rzeczywistych odnoszą się w całości do liczb zespolonych. I tak przykładowo mamy: >> a=sin(2)+i*sin(3) 0.9093 + 0.1411i Liczbą zespolona może być zapisana w formie wykładniczej. Wyżej podaną liczbę a można mianowicie zapisać jako: >> a=abs(a)*exp(i*angle(a)) a = 0.9093 + 0.1411i Funkcja abs(a) zwraca wartość bezwzględną liczby zespolonej a, zaś funkcja angle wartość jej argumentu w radianach. Funkcja exp jest funkcją wykładniczą o podstawie e. Do zagadnienia funkcji w programie MATLAB powrócimy w dalszej części skryptu. Tutaj podamy jeszcze trzy funkcje związane z liczbami zespolonymi. Są to: funkcja real, zwracająca część rzeczywistą liczby zespolonej i funkcja imag, wyznaczająca część urojoną takiej liczby. oraz conj, która zmienia liczbę na sprzężoną. >> real(a)

14 ans = 0.9093 >> imag(a) ans = 0.1411 >> conj(a) 0.9093-0.1411i W wypadku, kiedy próbujemy wykonać operację, której wynikiem nie jest określona liczba, program MATLAB daje ostrzeżenie lub sygnalizuje błąd. Przykładem jest dzielenie liczby przez zero: >> 1/0 Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = Inf Wynikiem operacji jest nieskończoność zapisywana tu jako Inf. Inny przykład to dzielenie 0/0: >> 0/0 Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = NaN Skrót NaN (od ang. Not a Number) oznacza, że wynik nie ma formy liczbowej. Problemów takich można uniknąć wykorzystując w instrukcjach liczbę oznaczoną jako eps. Jest to bardzo mała liczba o wartości równej przedziałowi kwantyzacji liczb obwiązującemu w obliczeniach. Zastosowanie tej liczby ilustruje przykład wyznaczania wartości funkcji sinx/x w punkcie x=0. W punkcie tym występuje dzielenie 0/0, lecz funkcja jest ciągła i ma wartość 1. Zapiszmy zatem >> x=0; >> sin(x)/x Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = NaN >> x=0+eps; >> sin(x)/x ans = 1 W drugiej instrukcji do argumentu dodaliśmy eps, w wyniku czego otrzymaliśmy prawidłowy wynik. Wartość eps wynosi w tym wypadku >> eps ans = 2.2204e-016 3.1.3. Zaokrąglenia liczb Często w obliczeniach numerycznych pojawia się potrzeba zaokrąglenia wartości liczb do liczb całkowitych. Program MATLAB ma cztery funkcje, które dokonują zaokrągleń na cztery różne sposoby. I tak funkcja round zaokrągla liczbę do najbliższej liczby całkowitej: >> round(2.7) ans = 3

15 Funkcja floor zaokrągla liczbę do najbliższej liczby całkowitej, najbliższej minus nieskończoności. Funkcja ceil zaokrągla liczbę do najbliższej liczby całkowitej, najbliższej nieskończoności. >> floor(2.7) ans = 2 >> ceil (-2.7) ans = -2 Funkcja fix zaokrągla liczbę do najbliższej liczby całkowitej, najbliższej zeru. >> fix(2.7) ans = 2 Jakkolwiek wyniki zaokrąglenia przy użyciu różnych funkcji bywają jednakowe, to każda z nich może być przydatna. Każda z wymienionych funkcji może mieć argument zespolony, a wówczas sposób uśredniania odnosi się oddzielnie do części rzeczywistej i urojonej liczby. Przykładowo: >> floor(2.7-i*2.7) ans = 2.0000-3.0000i 3.2. Macierze i wektory Charakterystyczną cechą programu MATLAB jest traktowanie każdej zmiennej liczbowej jako macierzy lub wektora, który też jest szczególną formą macierzy. Zauważyliśmy to już, kiedy wymiar liczby zapisany został w oknie Workspace jako 1x1, czyli jako macierz jednoelementowa. Wynikają stąd w początkowym okresie posługiwania się programem pewne utrudnienia i ograniczenia, które związane są z rachunkiem macierzowym. MATLAB traktując każdą zamienną jako macierz akceptuje wyłącznie i konsekwentnie te operacje matematyczne, które odnoszą się do macierzy i spełniają odpowiednie kryteria. Omówimy te zagadnienia szczegółowo. 3.2.1. Definiowanie macierzy i wektorów Jak wiadomo, macierz składa się z elementów uszeregowanych w wierszach i kolumnach. Jeżeli chcemy wprowadzić do programu pewną macierz, to używamy do tego celu następującego zapisu: >> X=[1 2 3 4;5 6 7 8;9 10 11 12] X = 1 2 3 4 5 6 7 8 9 10 11 12 Zapisana w ten sposób macierz ma dwa wiersze i cztery kolumny, co znalazło odbicie w oknie Workspace, w kolumnie Space, jako 2x4. Zauważmy, że elementy macierzy oddzielone są spacjami, zaś wiersze średnikami. W ten sposób można definiować macierze o praktycznie dowolnej liczbie wierszy i kolumn. Elementami macierzy mogą być liczby rzeczywiste i zespolone.

16 Szczególnym rodzajem macierzy są wektory wierszowe i kolumnowe. Wektor wierszowy zapisujemy jako: >> x=[1 2 3 4 5] x = 1 2 3 4 5 zaś wektor kolumnowy jako: >> x=[1;2;3] x = 1 2 3 Bardzo często zachodzi potrzeba zapisu wektora wierszowego, którego elementami są liczby tworzące ciąg rosnący lub malejący o stałej różnicy między sąsiednimi liczbami. Ciąg taki zapisujemy następująco: >> x=1:2:15 x = 1 3 5 7 9 11 13 15 Jeżeli w zapisie pominiemy drugą liczbę to domyślnie przyjmowana jest jej wartość jako 1, a mianowicie: >> x=0:9 x = 0 1 2 3 4 5 6 7 8 9 Ciąg malejący tworzy się następująco: >> x=2:-0.5:-3 x = Columns 1 through 6 2.0000 1.5000 1.0000 0.5000 0-0.5000 Columns 7 through 11-1.0000-1.5000-2.0000-2.5000-3.0000 Prostym zapisem można dokonać w macierzy zamiany wierzy na kolumny (utworzyć macierz transponowaną). W przypadku zamiany macierzy wierszowej na macierz kolumnową mamy przykładowo: >> x=(1:4)' x = 1 2 3 4 Zapis w nawiasach daje macierz wierszową, zaś apostrof zamienia wiersz na kolumnę. W przypadku transpozycji macierzy mamy: >> X=[1 2 3; 4 5 6] X = 1 2 3 4 5 6 >> Y=X Y = 1 4 2 5 3 6

17 Jeżeli elementami macierzy są liczby zespolone, to przy zamianie wierszy w kolumny (lub na odwrót) liczby zamieniają się na sprzężone: >> X=[1+i*2 2-i*3 3+i*4; 4-i*5 5+i*6 6-i*7] X = 1.0000 + 2.0000i 2.0000-3.0000i 3.0000 + 4.0000i 4.0000-5.0000i 5.0000 + 6.0000i 6.0000-7.0000i >> Y=X' Y = 1.0000-2.0000i 4.0000 + 5.0000i 2.0000 + 3.0000i 5.0000-6.0000i 3.0000-4.0000i 6.0000 + 7.0000i Jeżeli chcemy dokonać transpozycji macierzy bez zmiany znaków części urojonych, wówczas stosujemy zapis Y=X. (apostrof poprzedzamy kropką). Każdy element macierzy jest opisany przez podanie numeru jego wiersza i kolumny. Przykładowo, jeżeli chcemy zapisać wartość elementu macierzy Y zaznaczonej wyżej pogrubioną czcionką, wówczas piszemy: >> y=y(3,2) y = 6.0000 + 7.0000i gdyż zaznaczony element leży w trzecim wierszu i drugiej kolumnie. Wykorzystując tę zasadę możemy zmienić wartość określonego elementu macierzy. Jeżeli w macierzy Y w miejsce y chcemy wstawić np. 5, to piszemy: >> Y(3,2)=5; >> Y Y = 1.0000-2.0000i 4.0000 + 5.0000i 2.0000 + 3.0000i 5.0000-6.0000i 3.0000-4.0000i 5.0000 W napisanym programie często chcemy wprowadzać pewne zmiany w przed kolejnym jego uruchomieniem. Jeżeli zmiana taka polega na zmianie wartości liczbowej wówczas posługujemy się instrukcją input. Sposób jej wykorzystania ilustrują dwa przykłady. Jeżeli chamy wprowadzić lub zmienić wartość stałej a, wtedy piszemy: >> a=input('nowa wartość=') nowa wartość=2 a = 2 Jeżeli w programie wystąpi instrukcja zapisana w pierwszym wierszu, wówczas w oknie Command Window pojawi się ciąg znaków ujętych w apostrofy (tu nowa wartość= ). Program czeka, aż użytkownik wpisze potrzebną wartość stałej a. Po wpisaniu tej wartość program zwraca jej wartość. W analogiczny sposób można zmienić wartość dowolnego elementu macierzy. Jeżeli w zdefiniowanej wyżej macierzy Y chcemy zmienić wartość elementu w drugim wierszu i pierwszej kolumnie, to piszemy: >> Y(2,1)=input( Y(2,1)= ) >> Y(2,1)= 0 Y = 1.0000-2.0000i 4.0000 + 5.0000i 0 5.0000-6.0000i 3.0000-4.0000i 5.0000

18 Program MATLAB zwraca wybrany wektor z macierzy, gdy użyjemy dwukropka. Weźmy jako przykład następującą macierz: A = 1 2 3 4 5 6 7 8 9 10 11 12 Zaznaczony grubą czcionką wektor otrzymujemy dzięki następującemu zapisowi: >> a=a(:,3) a = 3 7 11 Jak widać dwukropek oznacza tu wszystkie wiersze Jeżeli chcemy utworzyć wektor tylko z dwóch wierszy w znajdujących się w trzeciej kolumnie, to piszemy: >> a=a(2:3,3) a = 7 11 W powyższym zapisie dwukropek oznacza do. Dzięki podanemu niżej zapisowi tworzymy macierz z pożądanych wierzy i kolumn. >> B=A(2:3,1:3) B= 5 6 7 9 10 11 Program MATLAB generuje kilka prostych i użytecznych macierzy, a mianowicie macierz zerową, jedynkową i jednostkową: >> A=zeros(3,5) A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> A=ones(4,3) A = 1 1 1 1 1 1 1 1 1 1 1 1 >> A=eye(3,4) A = 1 0 0 0 0 1 0 0 0 0 1 0 Ostatnia z podanych macierzy jest szczególnie użyteczna jako macierz kwadratowa. Ponadto program MATLAB generuje macierze zawierające wartości losowe o rozkładzie jednostajnym i normalnym, bardzo użyteczne w obliczeniach inżynierskich. Macierz o rozkładzie jednostajnym zawiera liczby z przedziału <0,1>, a jej przykładowa postać jest następująca: >> A=rand(2,5)

19 A = 0.9501 0.6068 0.8913 0.4565 0.8214 0.2311 0.4860 0.7621 0.0185 0.4447 Liczby zawarte w macierzy o rozkładzie normalnym mają wartość średnią zmierzającą do zera i odchylenie standardowe zmierzające do jedności. >> A=randn(2,5) A = -0.4326 0.1253-1.1465 1.1892 0.3273-1.6656 0.2877 1.1909-0.0376 0.1746 Szczegóły dotyczące praktycznego wykorzystania tych macierzy podamy w dalszej części skryptu. Na zakończenie omawiania sposobów definiowania macierzy pokażemy jeszcze jedną użyteczną metodę. Polega ona na sklejaniu macierzy o tej samie liczbie wierszy lub kolumn. Metodę te pokazują następujące przykłady: >> A=zeros(3,4) A = 0 0 0 0 0 0 0 0 0 0 0 0 >> B=ones(3,3) B = 1 1 1 1 1 1 1 1 1 >> C=[A B A] C = 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 Ze zdefiniowanych macierzy A i B utworzona została macierz C o liczbie wierszy równej liczbie wierszy macierzy A i B i zwiększonej liczbie kolumn. Jeżeli macierze mają jednakową liczbę kolumn, to można z nich utworzyć macierz o zwiększonej liczbie wierszy: >> C=[A(:,1:3);B;A(:,1:3)] C = 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 W macierzy A zmniejszyliśmy liczbę kolumn do trzech stosując wcześniej podany zapis. Należy zwrócić uwagę, że macierze w instrukcji zostały rozdzielone średnikiem. Dogodnym narzędziem wprowadzania zmian istniejącej macierzy jest Array Editor. Jest to okno, w którym edytowana jest macierz i w którym można zmieniać wartości elementów macierzy, liczbę wierszy i kolumn oraz wpisywać w nie nowe wartości. Okno to otwiera instrukcja openvar( A )

20 Można je także otworzyć zaznaczając w oknie Workspace odpowiednią macierz (wektor) i przyciskając ikonę Open. Obok ikony Open na pasku okna Workspace znajduje się ikona Delete, której przyciśnięcie usuwa zaznaczoną macierz (wektor). 3.2.2. Podstawowe operacje macierzowe Konsekwencją traktowania zmiennych w programie MATLAB jako macierzy jest akceptowanie tylko takich operacji na zmiennych, które są zgodne z zasadami rachunku macierzowego. Przypomnimy dlatego pokrótce podstawowe operacje na macierzach i zilustrujemy je prostymi przykładami. Zdefiniujemy najpierw dwie macierze, którymi będziemy się posługiwali w przykładach: >> A=[1 4-2; 3-5 6] A = 1 4-2 3-5 6 >> B=[2 4-4; 6 7-3] B = 2 4-4 6 7-3 Suma macierzy A i B jest równa: >> C=A+B C = 3 8-6 9 2 3 Sumować można wyłącznie macierze posiadające jednakowy wymiar, czyli tę samą liczbę wierszy i kolumn. Sumowanie polega na następujących operacjach: C(m,n)=A(m,n)+B(m,n) dla m=1:m, n=1:n gdzie M jest liczbą wierszy macierzy A i B, a N liczbą kolumn tych macierzy. Jeżeli macierze mają różny wymiar, wtedy program MATLAB nie wykonuje źle zapisanej operacji i podaje tego przyczynę. Przykładowo zapiszemy: >> C=B(:,1:2) C = 1 4 6 7 >> D=A+C??? Error using ==> + Matrix dimensions must agree. Program wykrył błąd w zapisie sumy i wskazał na jego przyczynę: Wymiary macierzy muszą być zgodne. Macierz C ma bowiem tylko dwie kolumny, zaś macierz A trzy. Odejmowanie macierzy B od macierzy A o tych samych wymiarach daje macierz C, o następujących elementach: >> C=A-B C = -1 0 2-3 -12 9 Mnożenie macierzy A(m,n) o wymiarach MxN przez macierz B(n,k) o wymiarach NxK daje macierz C(m,k) o następujących elementach:

21 C(m,k) N n1 A(m,n)B(n,k) dla m=1:m i k=1:k; Zdefiniowane wyżej macierze A i B nie mogą być mnożone, bo liczba kolumn macierzy A nie jest równa liczbie wierszy macierzy B. Rzeczywiści mamy: B. >> C=A*B??? Error using ==> * Inner matrix dimensions must agree. Możliwe jest natomiast wykonanie mnożenia macierzy A przez macierz transponowaną >> B' ans = 2 6 4 7-4 -3 >> C=A*B' C = 26 40-38 -35 Użyteczną operacją w obliczeniach jest mnożenie wektora kolumnowego przez wektor wierszowy. Mamy bowiem wtedy: N C(m,k) n 1 A(m, 1)B( 1,k) A(m, 1)B( 1,k) dla m=1:m i k=1:k; Każdy element macierzy C jest iloczynem odpowiedniego elementu wektora kolumnowego i wierszowego. Przykładowo: >> a=[1 2 3]' a = 1 2 3 >> b=[4 5 6 7 8] b = 4 5 6 7 8 >> C=a*b C = 4 5 6 7 8 8 10 12 14 16 12 15 18 21 24 Wykorzystując wektory jednostkowe można generować macierze o jednakowych wierszach lub kolumnach. Czwartą operację na macierzach, a mianowicie ich dzielenie omówimy w następnym punkcie poświęconym macierzom kwadratowym. Przypomnijmy, że na ogół operacja mnożenia macierzy nie jest przestawna, czyli A B B A, nawet jeżeli w obu wypadkach mnożenie jest wykonywalne. Ilustruje to następujący prosty przykład: >> A=[1 2; 4 5] A = 1 2 4 5 >> B=[3 4; 6 5]

22 B = 3 4 6 5 >> C=A*B C = 15 14 42 41 >> D=B*A D = 19 26 26 37 Jak widać, przestawienie kolejności macierzy daje różna wyniki, gdyż C D. 3.2.3. Macierze kwadratowe Największe znaczenie w obliczeniach inżynierskich mają macierze kwadratowe, czyli macierze o tej samej liczbie wierszy i kolumn. Z macierzy kwadratowej można utworzyć macierz odwrotną, która wykorzystuje się do m.in. do rozwiązywania układów równań liniowych. Pomijając procedurę wyznaczania macierzy odwrotnej, którą stosuje program MA- TLAB, przedstawimy jej podstawowe właściwości i zastosowania w rachunku macierzowym. Macierz odwrotną do macierzy A oznaczmy jako A -1, a wtedy związek między oby macierzami można zapisać jako: A A -1 =1 lub A -1 A=1 gdzie 1 oznacza macierz jednostkową. Jeżeli mamy równanie macierzowe: A x=b, gdzie x jest wektorem niewiadomych, a b wektorem danych, to mnożąc obustronnie powyższe równanie przez A -1 otrzymujemy: A -1 A x=a -1 b Wykorzystując podaną wyżej zależność między macierzą i macierzą do niej odwrotną mamy: 1 x=a -1 b, a stąd ostatecznie: x=a -1 b. Program MATLAB wyznacza macierz odwrotną do macierzy A, gdy zapiszemy następującą instrukcję: lub >> inv(a) >> A^-1 Sposób wykorzystania macierzy odwrotnej pokażemy na przykładzie rozwiązania podanego niżej układu czterech równań liniowych. 2x 4x 3x 2x 1 1 1 1 3x 4x 3x 2x 2 2 2 2 4x 8x 4x 3x 3 3 3 3 5x 2x 2x 5x 4 4 4 4 28 4 7 13 Układ ten zapisany w formie macierzowej ma następującą postać:

23 2 4 3 2 3 4 3 2 4 8 4 3 5 x 2 x 2 x 5 x 1 2 3 4 28 4 7 13 Poniżej przedstawiono program służący do rozwiązania tego układu równań. >> A=[2-3 4 5;4 4-8 2;3-3 -4 2;2-2 3-5]; >> b=[28-4 -7-13]'; >> x=inv(a)*b >> x1=x(1) x1 = 1.0000 >> x2=x(2) x2 = 2.0000 >> x3=x(3) x3 = 3.0000 >> x4=x(4) x4 = 4.0000 Należy zwrócić uwagę na apostrof przy zapisie wektora b, który zamienia wektor wierszowy na kolumnowy. W przedstawionym programie nie jest potrzebna użytkownikowi jawna postać macierzy odwrotnej. Podamy ją jednak dla porządku w celu ewentualnego sprawdzenia poprawności obliczeń. >> inv(a) ans = 0.1200 0.1400-0.0400 0.1600 0.0428 0.1303-0.2097 0.0110 0.1048 0.0131-0.1269 0.0593 0.0938 0.0117-0.0083-0.1048 Instrukcja x=inv(a)*b jest równoważna lewostronnemu dzieleniu macierzy, które zapisuje się jako: >> x=a\b x = 1.0000 2.0000 3.0000 4.0000 co jest łatwiejsze do zapamiętania. Prawostronne dzielnie macierzy definiowane jest jako: >> B/A=B*inv(A) przy czym B musi mieć taką samą liczbę kolumn, jaką liczbę wierzy ma macierz inv(a). Operacja ta jest rzadko stosowana w praktyce. W niektórych obliczeniach potrzeby jest wyznacznik macierzy. Dla podanej wyżej macierzy A, program MATLAB wyznacza go następująco: >> det(a) ans = 1450

24 3.3. Tablice Program MATLAB operuje nie tylko na macierzach, lecz również na tablicach (ang. arrays). Tablicą (dwuwymiarową) jest uporządkowany w wiersze i kolumny zbiór liczb lub znaków. W tym sensie macierz jest specyficzną tablicą numeryczną, której dotyczą operacje macierzowe. Specyficzną formą tablic zawierających znaki (ang. charakter arrays) są również łańcuchy (ang. strings). W skrypcie zajmiemy się wyłącznie tablicami numerycznymi i łańcuchami, które mają duże znaczenie z punktu widzenia obliczeń inżynierskich. 3.3.1. Tablice numeryczne Jedno i dwuwymiarowe tablice numeryczne definiowane są identycznie jak wektory i macierze. Różnice pojawiają się wtedy, gdy chcemy wykonać na nich określone operacje. Charakterystyczną cechą tablic jest to, że operacje na nich wykonywane są na ich elementach metodą element po elemencie. Domyślnie każda tablica numeryczna traktowania jest w programie MATLAB jako macierz. Jeżeli chcemy wykonać na niej operacje odnoszące się do tablic, musimy to wyróżnić specjalnym operatorem. Potrzeba taka nie zachodzi tylko w przypadku dodawania i odejmowania, gdyż operacje te są jednakowe dla tablic i macierzy. Omówimy teraz pokrótce podstawowe operacje na tablicach. Mnożenie tablic A i B zapisujemy jako: >> C=A.*B Znak mnożenia został poprzedzony kropką, co sygnalizuje, że A i B są tablicami i mnożenie ma być wykonane w sposób dla nich właściwy. Mnożenie tablic polega na następujących operacjach: C(m,n)=A(m,n) B(m,n) dla m=1:m i n=1:n. Oto prosty przykład: >> A=[ 1 2 3; 3 2 1; 4 5 6] A = 1 2 3 3 2 1 4 5 6 >> B=[2 3 4; 4 3 2; 1 2 3] B = 2 3 4 4 3 2 1 2 3 >> C=A.*B C = 2 6 12 12 6 2 4 10 18 W analogiczny sposób zapisujemy operację dzielenia tablic: C(m,n)=A(m,n)/B(m,n) dla m=1:m i n=1:m. W programie MATLAB odpowiednia instrukcja ma następującą postać: >> C=A./B C = 0.5000 0.6667 0.7500 0.7500 0.6667 0.5000 4.0000 2.5000 2.0000 Operację potęgowania tablicy zapisujemy jako:

25 >> C=A.^3 C = 1 8 27 27 8 1 64 125 216 Ze względu na sposób wykonywania operacji na tablicach nie są wykonywane niektóre operacje odnoszące się do macierzy. Przykładowo porównajmy dwie operacje, w których występuje wcześniej zdefiniowana macierz A: >> B=[1 2 3]' B = 1 2 3 >> C=A*B C = 14 10 32 >> C=A.*B??? Error using ==>.* Matrix dimensions must agree. Pierwsza operacja odnosi się do macierzy i jest poprawna. Druga operacje dotyczy tablic i jest błędna, gdyż obie tablice muszą mieć jednakowy wymiar. Podane wyżej przykłady dotyczyły tablic kwadratowych. Obowiązują one również dla tablic prostokątnych, a w tym jednowymiarowych, odpowiadających wektorom. Pokazuje to następujący przykład: >> a=1:10 a = 1 2 3 4 5 6 7 8 9 10 >> b=a.^2 b = 1 4 9 16 25 36 49 64 81 100 Zauważmy, że operacja potęgowania jest równoważna mnożeniu. Jeżeli zapiszemy: >> b=a^2??? Error using ==> ^ Matrix must be square. program MATLAB zgłosi błąd i wskaże na jego przyczynę, która wynika z reguł mnożenia macierzy (przy mnożeniu a a=a 2 macierz a musi być prostokątna). W programie MATLAB można posługiwać się tablicami wielowymiarowymi (ang. multidimesional arrays). Sposób definiowania takich tablic i posługiwania się nimi pokażemy w dalszej części skryptu. 3.3.2. Łańcuchy Łańcuchy wykorzystywane są w prostych obliczeniach inżynierskich głównie do opisywania danych i rysunków. Łańcuch znaków tworzymy ujmując je w apostrofy. Program MATLAB sygnalizuje pojawienie się początku łańcucha standardowo kolorem niebieskim, a jego zakończenie zmianą koloru na czerwony. Łańcuchy wyróżniają się zatem wyraźnie w pisanym przez użytkownika programie. Każdy znak łańcucha traktowany jest jako element tablicy, co umożliwia wykonywanie na nich określonych operacji. Kilka prostych operacji ilustruje poniższy przykład.

26 >> a='dom' a = dom >> a(3) ans = m >> a(2)='y' a = dym W pierwszym wierszu poleceń zdefiniowany został łańcuch, w drugim wywołano trzecim element tego łańcuch, a w trzecim zmieniono znak o na znak y. Łańcuchy można rozszerzać analogicznie jak macierze. Ilustruje to poniższy przykład >> b='ek' b = ek >> c=[a b] c = dymek Rozdzielnie łańcuchów znakiem średnika powoduje utworzenie tablicy pod warunkiem, że oba łańcuch mają jednakową liczbę znaków: >> d='ogień' d = ogień >> e=[c;d] e = dymek ogień 3.4. Funkcje Program MATLAB dysponuje wielką liczbą funkcji, z których niewielka część jest znana z ogólnej matematyki, a pozostała została zdefiniowana w programie w celu rozwiązywania rozmaitych problemów numerycznych i tworzenia grafiki. Nawet pobieżna prezentacja funkcji występujących w programie MATLAB zdecydowanie przekracza ramy tego skryptu. Ograniczymy się zatem do podania ogólnych zasad posługiwania się funkcjami i omówimy najczęściej stosowane. Dla potrzeb tego skryptu wygodnie jest podzielić funkcje na kilka charakterystycznych typów i omówić je oddzielnie. 3.4.1. Funkcje standardowe Do tej klasy funkcji zaliczymy ogólnie znane funkcje matematyczne. Są to funkcje potęgowe, wykładnicze, logarytmiczne i trygonometryczne. Zapis tych funkcji nie różni się od stosowanego w matematyce. Program MATLAB wyznacza wartości tych funkcji dla dyskretnych wartości argumentu, którym jest wektor lub macierz. Ogólny zapis standardowych funkcji ma następującą postać: >> Y=f(X) gdzie X jest macierzą argumentów, Y macierzą wartości funkcji, a w miejsce symbolu f wpisuje się nazwę funkcji. Przykładowo wartości funkcji sinus wyznacza się następująca instrukcja:

27 >> y=sin(x) Praktyczny sposób wykorzystanie tej instrukcji pokazuje następujący przykład: >> x=2*pi*(0:0.1:1) x = Columns 1 through 7 0 0.6283 1.2566 1.8850 2.5133 3.1416 3.7699 Columns 8 through 11 4.3982 5.0265 5.6549 6.2832 >> y=sin(x) y = Columns 1 through 7 0 0.5878 0.9511 0.9511 0.5878 0.0000-0.5878 Columns 8 through 11-0.9511-0.9511-0.5878-0.0000 Powyższy program wyznacza wartości funkcji sinus w przedziale <0,2> w punktach stanowiących kolejne elementy wektora x. Wartości te podano w celach edukacyjnych; w praktyce należy po pierwszej instrukcji wstawić średnik, dzięki czemu unikniemy niepotrzebnego wypisywania wartości argumentu. Posługując się funkcjami standardowymi i operatorami można tworzyć własne funkcje. Pozostając przy zdefiniowanej wyżej funkcji sinusoidalnej można przykładowo utworzyć niestandardową funkcję sin 2 (x) i wyznaczyć jej wartości. W tym celu zapisujemy następujące instrukcje: >> x=2*pi*(0:0.1:1); >> y=sin(x).^2 y = Columns 1 through 7 0 0.3455 0.9045 0.9045 0.3455 0.0000 0.3455 Columns 8 through 11 0.9045 0.9045 0.3455 0.0000 Kropka przed znakiem potęgi jest niezbędna, gdyż powoduje, że potęgowanie dotyczy każdego elementu wektora sinx. Przy braku kropki program zgłasza błąd. W zmieszczonej niżej tablicy podano najczęściej używane funkcje standardowe. Symbol funkcji matematyczny MATLAB sin sin cos cos tg tan arcsin asin arccos acos artg atan log log10 ln log sqrt e(.) exp sinh sinh cosh cosh tgh tanh (.) a (.)^a

28 Argumenty funkcji w programie MATLAB mają szersze dziedziny niż podawane w matematyce elementarnej, gdyż program operuje na liczbach zespolonych. Przykładowo: lub >> log10(-2) ans = 0.3010 + 1.3644i >> sin(2+i*3) ans = 9.1545-4.1689i Jak już wspomniano, dziedziną funkcji standardowych są nie tylko wektory, lecz także macierze. Jeżeli w argumencie funkcji występuje macierz, wówczas program zwraca wartości funkcji dla każdego elementu macierzy i zapisuje je w formie macierzy. Położenie każdej wartości funkcji w tej nowej macierzy jest takie same jak argumentu w macierzy stanowiącej dziedzinę funkcji. Oto prosty przykład funkcji sinus, której argumentem jest macierz: >> X=[0 pi/2 pi 3*pi/2 2*pi; 0 pi/4 pi/2 3*pi/4 pi] X = 0 1.5708 3.1416 4.7124 6.2832 0 0.7854 1.5708 2.3562 3.1416 >> Y=sin(X) Y = 0 1.0000 0.0000-1.0000-0.0000 0 0.7071 1.0000 0.7071 0.0000 3.4.2. Funkcje macierzowe Programie MATLAB dysponuje bardzo dużą liczbą funkcji, których dziedziną są macierze i wektory. Omówimy tutaj część tych funkcji, które są najczęściej używane w obliczeniach inżynierskich. Niektóre z tych funkcji już poznaliśmy wcześniej i przypomnimy je w celu podkreślenia, że dotyczą one macierzy jako argumentów. det(a) inv(a) abs(a) real(a) zwraca wyznacznik macierzy prostokątnej wyznacza macierz odwrotną do macierzy prostokątnej zwraca macierz zawierającą wartości bezwzględne elementów macierzy A zwraca macierz zawierającą wartości rzeczywiste elementów macierzy A imag(a) zwraca macierz zawierającą wartości urojone elementów macierzy A angle(a) zwraca macierz zawierającą wartości argumentów elementów macierzy A conj(a) zwraca macierz, której elementy są sprzężone względem elementów macierzy A round(a), floor(a), ceil(a), fix(a) zwracają macierze, której elementami są liczby zaokrąglone według reguł opisanych dla liczb Omówione niżej funkcje wykorzystuje się m.in. do analizy przebiegu funkcji jedno i dwuwymiarowych zapisywanych numerycznie w formie wektorów lub macierzy. Funkcja sum dokonuje sumowania liczb oddzielnie w każdej kolumnie macierzy i tworzy wektor wierszowy, w którym elementami są wyniki sumowania w odpowiednich kolumnach. Ilustruje to następujący przykład: >> A=[ 1 2 3; -1 3 4; -5 0 1] A =

29 1 2 3-1 3 4-5 0 1 >> a=sum(a) a = -5 5 8 Jeżeli argumentem funkcji sum jest wektor, to zwraca ona sumę elementów tego wektora. Tak więc sumę wszystkich elementów macierzy A wyznaczamy jako: >> as=sum(a) as = 8 lub bezpośrednio jako: >> as=sum(sum(a)) as = 8 Bardzo użyteczną funkcją jest cumsum, która jest w obliczeniach numerycznych odpowiednikiem całki t y (t) x( )d. 0 Funkcja ta wyznacza macierz, w której wierszach znajdują się bieżące sumy wyznaczane oddzielnie w każdej kolumnie według następującego wzoru: m B (m,n) A(m,n). n1 Dla rozpatrywanej macierzy A mamy więc: >> B=cumsum(A) B = 1 2 3 0 5 7-5 5 8 Odpowiednikiem różniczkowania w obliczeniach numerycznych jest funkcja diff. Realizuje ona następującą operację: m C(m,n) n 1 A(m 1,n) A(m,n) Dla macierzy A funkcja diff buduje macierz: >> C=diff(A) C = -2 1 1-4 -3-3 Jak widać liczba wierszy w macierzy C jest o jeden mniejsza od liczby wierszy macierzy A. Funkcja max zwraca wektor wierszowy, w którym znajdują się maksymalne wartości występujące w odpowiednich kolumnach. Pokazuje to następujący przykład: >> a=max(a) a = 1 3 4

30 Jeżeli argument jest wektorem, to funkcja max wyznacza maksymalną wartość tego wektora: >> amax=max(a) amax = 4 Zauważmy, że w tym przykładzie liczba 4 jest wartością maksymalną występującą w macierzy A. W celu wyznaczenia wartości maksymalnej macierzy można użyć krótszej instrukcji: >> amax=max(max(a)) amax = 4 Funkcja min zwraca wektor wierszowy, w którym znajdują się minimalne wartości występujące w odpowiednich kolumnach. Oto przykład: >> a=min(a) a = -5 0 1 >> amin=min(a) amin = -5 Funkcja mean zwraca wektor wierszowy, w którym znajdują się średnie wartości licz występujących w odpowiednich kolumnach. Dla rozpatrywanej to macierzy mamy: >> a=mean(a) a = -1.6667 1.6667 2.6667 >> amean=mean(a) amean = 0.8889 Ostatnia liczba jest średnią wartością elementów macierzy A. Funkcja std zwraca wektor wierszowy, w którym znajdują się odchylenia standardowe wartości w odpowiednich kolumnach. >> a=std(a) a = 3.0551 1.5275 1.5275 Funkcja var wyznacza wariancję według podanych wyżej reguł: >> a=var(a) a = 9.3333 2.3333 2.3333 Jak widać, wariancja jest równa kwadratowi odchylenia standardowego. W wypadku ostatnich funkcji nie podano odchylenia standardowego i wariancji wyznaczonego z wektorów, gdyż nie są te wielkości równe i odpowiednim wielkościom dla całej macierzy. Funkcji mean, std i var używa się głównie do analizy procesów stochastycznych. Bardzo użyteczną funkcją jest funkcja size, która zwraca liczbę wierszy i kolumn macierzy: >> [M,N]=size(A) M = 3 N = 3

31 Na pierwszy rzut oka wydaje się ona zbędna, jednakże w bardziej złożonych programach wykorzystuje się ją bardzo często. Wymiary macierzy bywają bowiem zmienne, gdyż mogą być uzależnione od podawanych przez użytkownika parametrów. 3.4.3 Relacje i operacje logiczne Operacje logiczne polegają w ogólności na sprawdzaniu, czy zapisana relacja między macierzami jest prawdziwa. Wynikiem sprawdzenia jest decyzja binarna: prawda oznaczona cyfrą 1 lub fałsz, oznaczony cyfrą 0. Najczęściej używanymi relacjami są równość i nierówności. Najprostszy przykład dotyczy macierzy jednoelementowych, czyli liczb. Zapiszmy następującą relację >> p=3>2 p = 1 >> p=2>3 p = 0 Pierwszą instrukcję należy rozumieć następująco: Sprawdź, czy prawdą jest, że 3 jest większe od 2. Jeżeli jest to prawda to wstaw p=1, w przeciwnym wypadku wstaw p=0. Ponieważ pierwsza nierówność jest prawdziwa, program zwrócił wartość p=1. Druga nierówność jest fałszywa i stąd p=0. Ogólny zapis operacji logicznych dla macierzy ma następującą postać: >> C=A==B lub >> C=eq(A,B) A równe B >>C=A~=B lub >> C=ne(A,B) A nie równe B >> C=A<B lub >> C=lt(A,B) A mniejsze od B >> C=A<=B lub >> C=le(A,B) A mniejsze lub równe B >> C=A>B lub >> C=gt(A,B) A większe od B >> C=A>=B lub >> C=ge(A,B) A większe lub równe B W powyższych relacjach A i B są macierzami o takich samych wymiarach. Sprawdzanie poprawności zapisanych relacji odnosi się do wszystkich elementów macierzy o tym samym numerze wiersza i kolumny. W miejscach elementów dla których relacja jest prawdziwa w macierzy C figurują cyfry 1, a w pozostałych cyfry 0. Ilustrują to następujące przykłady dotyczące wcześniej zdefiniowanych macierzy A i B. A = 1 2 3-1 3 4-5 0 1 B = 3 2 1-6 3 0 0 0 1 >> C1=A==B C1 = 0 1 0 0 1 0 0 1 1 >> C2=A>B C2= 0 0 1

32 1 0 1 0 0 0 >> C3=A>=B C3 = 0 1 1 1 1 1 0 1 1 Jeżeli chcemy znać wartości elementów macierzy A lub B, dla których zapisana relacja jest prawdziwa możemy użyć mnożenia tablicowego (wyraz po wyrazie). Przykładowo relację równości spełniają w obu macierzach następujące elementy: >> D=A.*C1 D = 0 2 0 0 3 0 0 0 1 Opis rzadziej używanych operatorów logicznych (np. and lub or) można znaleźć w Help programu MATLAB. Wszystkie podane wyżej relacje dotyczą również wektorów o tej samej liczbie elementów. Można je wykorzystywać m.in. do analizy przebiegu funkcji, rozwiązywania równań nieliniowych itp. Przydatną funkcją, w której występują relacje jest funkcja find. Zwraca ona numery wierszy i kolumn w których dana relacja jest prawdziwa. Ilustruje to następujący przykład: >> [m,n]=find(d>1) m = 1 2 n = 2 2 Elementy macierzy D o wartościach większych od 1 to D(1,2) i D(2,2). 3.4.4. Instrukcje warunkowe Instrukcje warunkowe służą do uzależnienia wykonania instrukcji od spełnienia określonych relacji logicznych. Najprostsza struktura instrukcji warunkowej jest następująca: if <relacja logiczna> <instrukcja> end Instrukcja jest wykonywana tylko wtedy, gdy zapisana wyżej relacja logiczna jest praw dziwa. W przeciwnym wypadku program przechodzi do instrukcji znajdującej się za end. Oto prosty przykład: >> w=2; >> if w==2 y=2*w end y = 4 Ponieważ w =2, to program wykonał instrukcję y=2w i podał jej wynik. Inny przykład: >> w=2;