47
Z. Rudnicki: MATLAB - KOMPENDIUM 1 M M A A T T L L A A B B - - K K o o m m p p e e n n d d i i u u m m Materialy pomocnicze do zajęć z “Informatyki” Wydzial Inżynierii Mechanicznej i Robotyki AGH w Krakowie Opracowal: dr inż. Zbigniew Rudnicki Wersja nr.3, 12.III.2012 Spis Treści 1. WPROWADZENIE ......................................................................................................................................... 3 1.1. CEL ZAJĘĆ I UKLAD MATERIALU..................................................................................................................... 3 1.2. CO TO JEST MATLAB.................................................................................................................................... 3 1.3. DLACZEGO WARTO POZNAĆ MATLABA?...................................................................................................... 3 1.4. CZY JEST DARMOWA WERSJA MATLABA? ...................................................................................................... 4 1.5. CO TO JEST "ŚRODOWISKO PROGRAMOWANIA" CZYLI IDE ............................................................................ 5 1.6. ŚRODOWISKO PROGRAMOWANIA MATLABA................................................................................................ 5 1.7. TRYBY UŻYTKOWANIA MATLABA.................................................................................................................. 5 1.8. LAGODNY START. DZIALANIA W OKNIE KOMEND. ......................................................................................... 6 2. PODSTAWOWE ELEMENTY JĘZYKA MATLAB................................................................................... 7 2.1. WYRAŻENIA SKALARNE I ICH SKLADNIKI ....................................................................................................... 8 2.1.1. Skalarne stale liczbowe - postacie zapisu liczb.................................................................................... 8 2.1.2. Typy wartości ....................................................................................................................................... 8 2.1.3. Formaty wyświetlanych liczb ............................................................................................................... 8 2.1.4. Zmienne................................................................................................................................................ 9 2.1.5. Operatory dzialań arytmetycznych na skalarach................................................................................. 9 2.1.6. Ważniejsze funkcje elementarne MATLAB’a ....................................................................................... 9 2.1.7. Ćwiczenia - obliczenia kalkulatorowe ............................................................................................... 10 2.1.8. Ćwiczenie - obliczenia z użyciem zmiennych ..................................................................................... 10 2.1.9. Relacje i wyrażenia logiczne.............................................................................................................. 10 2.1.10. Lańcuchy i wyrażenia znakowe.......................................................................................................... 11 2.2. SLOWA KLUCZOWE ...................................................................................................................................... 12 2.3. PISANIE I URUCHAMIANIE PROGRAMÓW....................................................................................................... 12 2.4. PODSTAWOWE POLECENIA ........................................................................................................................... 13 2.4.1. Instrukcja przypisania........................................................................................................................ 13 2.4.2. Ćwiczenia – pierwsze programy ........................................................................................................ 14 2.4.3. Wprowadzanie danych z klawiatury .................................................................................................. 14 2.4.4. Ćwiczenia – wprowadzanie danych z klawiatury............................................................................... 15 2.4.5. Wyświetlanie wyników ....................................................................................................................... 15 2.4.6. Instrukcja IF ...................................................................................................................................... 16 2.4.7. Ćwiczenia z IF ................................................................................................................................... 16 2.4.8. Instrukcja wyboru SWITCH ............................................................................................................... 17 2.4.9. Pętla FOR .......................................................................................................................................... 17 2.4.10. Ćwiczenia z FOR ............................................................................................................................... 18 2.4.11. Pętla WHILE ...................................................................................................................................... 18 2.4.12. Instrukcja BREAK.............................................................................................................................. 19 2.5. OPERACJE NA PLIKACH................................................................................................................................. 19 2.5.1. Zapisywanie i odczytywanie zmiennych z przestrzeni roboczej ......................................................... 19 2.5.2. Otwieranie i zamykanie plików .......................................................................................................... 19 2.5.3. Wyprowadzanie wyników do pliku ..................................................................................................... 20 2.5.4. Wczytywanie danych z pliku............................................................................................................... 21 2.6. DEFINIOWANIE I STOSOWANIE FUNKCJI UŻYTKOWNIKA ............................................................................... 22 2.6.1. Ćwiczenia – funkcje użytkownika....................................................................................................... 24 3. GRAFIKA UCHWYTÓW I BUDOWA INTERFEJSU GRAFICZNEGO .............................................. 25 3.1. HIERARCHIA, TYPY, UCHWYTY I CECHY OBIEKTÓW GRAFICZNYCH.............................................................. 25 3.2. WYKRESY .................................................................................................................................................... 26 3.3. TWORZENIE I MODYFIKOWANIE OKNA GRAFICZNEGO (FIGURE) ................................................................... 28 3.4. UICONTROLS - KONTROLKI ...................................................................................................................... 28 3.4.1. Ćwiczenia z kontrolkami .................................................................................................................... 29 3.5. GUIDE – ŚRODOWISKO TYPU RAD ............................................................................................................. 31 4. MACIERZE I PODSTAWY DZIALAŃ NA MACIERZACH .................................................................. 33 4.1. DEKLAROWANIE TABLIC .............................................................................................................................. 33

Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

1

MMMAAATTTLLLAAABBB --- KKKooommmpppeeennndddiiiuuummmMateriały pomocnicze do zajęć z “Informatyki”

Wydział Inżynierii Mechanicznej i Robotyki AGH w KrakowieOpracował: dr inż. Zbigniew Rudnicki

Wersja nr.3, 12.III.2012

Spis Treści

1. WPROWADZENIE ......................................................................................................................................... 3

1.1. CEL ZAJĘĆ I UKŁAD MATERIAŁU..................................................................................................................... 31.2. CO TO JEST MATLAB.................................................................................................................................... 31.3. DLACZEGO WARTO POZNAĆ MATLABA?...................................................................................................... 31.4. CZY JEST DARMOWA WERSJA MATLABA? ...................................................................................................... 41.5. CO TO JEST "ŚRODOWISKO PROGRAMOWANIA" CZYLI IDE ............................................................................ 51.6. ŚRODOWISKO PROGRAMOWANIA MATLABA................................................................................................ 51.7. TRYBY UŻYTKOWANIA MATLABA.................................................................................................................. 51.8. ŁAGODNY START. DZIAŁANIA W OKNIE KOMEND. ......................................................................................... 6

2. PODSTAWOWE ELEMENTY JĘZYKA MATLAB................................................................................... 7

2.1. WYRAŻENIA SKALARNE I ICH SKŁADNIKI ....................................................................................................... 82.1.1. Skalarne stałe liczbowe - postacie zapisu liczb.................................................................................... 82.1.2. Typy wartości....................................................................................................................................... 82.1.3. Formaty wyświetlanych liczb............................................................................................................... 8

2.1.4. Zmienne................................................................................................................................................ 92.1.5. Operatory działań arytmetycznych na skalarach................................................................................. 92.1.6. Ważniejsze funkcje elementarne MATLAB’a ....................................................................................... 9

2.1.7. Ćwiczenia - obliczenia kalkulatorowe ............................................................................................... 102.1.8. Ćwiczenie - obliczenia z użyciem zmiennych ..................................................................................... 102.1.9. Relacje i wyrażenia logiczne.............................................................................................................. 102.1.10. Łańcuchy i wyrażenia znakowe.......................................................................................................... 11

2.2. SŁOWA KLUCZOWE ...................................................................................................................................... 122.3. PISANIE I URUCHAMIANIE PROGRAMÓW....................................................................................................... 122.4. PODSTAWOWE POLECENIA ........................................................................................................................... 132.4.1. Instrukcja przypisania........................................................................................................................ 132.4.2. Ćwiczenia – pierwsze programy ........................................................................................................ 142.4.3. Wprowadzanie danych z klawiatury .................................................................................................. 142.4.4. Ćwiczenia – wprowadzanie danych z klawiatury............................................................................... 15

2.4.5. Wyświetlanie wyników ....................................................................................................................... 152.4.6. Instrukcja IF ...................................................................................................................................... 162.4.7. Ćwiczenia z IF ................................................................................................................................... 16

2.4.8. Instrukcja wyboru SWITCH............................................................................................................... 172.4.9. Pętla FOR .......................................................................................................................................... 172.4.10. Ćwiczenia z FOR ............................................................................................................................... 182.4.11. Pętla WHILE...................................................................................................................................... 18

2.4.12. Instrukcja BREAK.............................................................................................................................. 192.5. OPERACJE NA PLIKACH................................................................................................................................. 192.5.1. Zapisywanie i odczytywanie zmiennych z przestrzeni roboczej ......................................................... 19

2.5.2. Otwieranie i zamykanie plików.......................................................................................................... 192.5.3. Wyprowadzanie wyników do pliku..................................................................................................... 202.5.4. Wczytywanie danych z pliku............................................................................................................... 212.6. DEFINIOWANIE I STOSOWANIE FUNKCJI UŻYTKOWNIKA ............................................................................... 222.6.1. Ćwiczenia – funkcje użytkownika....................................................................................................... 24

3. GRAFIKA UCHWYTÓW I BUDOWA INTERFEJSU GRAFICZNEGO.............................................. 25

3.1. HIERARCHIA, TYPY, UCHWYTY I CECHY OBIEKTÓW GRAFICZNYCH.............................................................. 253.2. WYKRESY .................................................................................................................................................... 263.3. TWORZENIE I MODYFIKOWANIE OKNA GRAFICZNEGO (FIGURE) ................................................................... 283.4. UICONTROLS - KONTROLKI...................................................................................................................... 283.4.1. Ćwiczenia z kontrolkami .................................................................................................................... 29

3.5. GUIDE – ŚRODOWISKO TYPU RAD ............................................................................................................. 31

4. MACIERZE I PODSTAWY DZIAŁAŃ NA MACIERZACH .................................................................. 33

4.1. DEKLAROWANIE TABLIC .............................................................................................................................. 33

Page 2: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

2

4.2. OZNACZENIA I SPOSOBY WPROWADZANIA.................................................................................................... 344.2.1. Wektor (ciąg) generowany jako postęp arytmetyczny ........................................................................ 344.2.2. Wprowadzanie wektorów i macierzy.................................................................................................. 354.2.3. Rola dwukropka w wybieraniu elementów macierzy.......................................................................... 35

4.2.4. Generowanie macierzy....................................................................................................................... 364.2.5. Wczytywanie macierzy z pliku ............................................................................................................ 364.3. DZIAŁANIA NA MACIERZACH ........................................................................................................................ 374.4. WYKRESY TRÓJWYMIAROWE ....................................................................................................................... 38

5. PRZYKŁADOWE ZASTOSOWANIA MATLABA................................................................................... 40

5.1. UKŁAD RÓWNAŃ LINIOWYCH. ...................................................................................................................... 405.1.1. Ćwiczenia z macierzami i układami równań liniowych ..................................................................... 41

5.2. PIERWIASTKI WIELOMIANU........................................................................................................................... 425.2.1. Ćwiczenia – pierwiastki wielomianu.................................................................................................. 425.3. ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH ................................................................................................. 435.3.1. Metoda bisekcji .................................................................................................................................. 435.3.2. Metoda stycznych ............................................................................................................................... 435.3.3. Metoda siecznych ............................................................................................................................... 445.3.4. Ćwiczenia – programy rozwiązywania równań ................................................................................. 45

5.4. INTERPOLACJA.............................................................................................................................................. 455.4.1. Ćwiczenia - interpolacja .................................................................................................................... 455.5. APROKSYMACJA ........................................................................................................................................... 455.5.1. Ćwiczenia - aproksymacja ................................................................................................................. 455.6. ANALIZA OBRAZÓW...................................................................................................................................... 465.7. LITERATURA................................................................................................................................................. 46

Page 3: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

3

1. Wprowadzenie

1.1. Cel zajęć i układ materiałuNa zajęciach z Matlab’a mamy dwa główne cele:

1. poznać podstawowe idee konstruowania algorytmów i programowania komputerów,2. nauczyć się podstaw użytkowania potężnego pakietu oprogramowania jakim jest Matlab

i zapoznać się z niektórymi, wybranymi jego możliwościami.

Dla pierwszego celu istotny jest wybór języka programowania - jaki język programowania wybraćdla początkujących, którzy nie mają zostać programistami ale będą absolwentami wydziału mechanicz-nego renomowanej uczelni technicznej.

Język BASIC jest najłatwiejszy dla początkujących – bo do tego celu został opracowany, jednak niejest używany profesjonalnie a jego następca Visual Basic jest już znacznie trudniejszy. Profesjonalniprogramiści najczęściej korzystają z języka C i jego dialektów obiektowych i „okienkowych”, którejednak dla początkujących są zbyt trudne. Kompromisem między Basic’em a C wydał się Matlab,zawierający zapożyczenia z obu tych języków i dla początkujących łatwy a dla zaawansowanych potężnyi wszechstronny oraz bardzo popularny na uczelniach Świata.

Jednakże, zalety Matlaba zaczyna być widać dopiero przy grafice i operowaniu na macierzach – costanowi trudniejszy materiał, dlatego omówiono go w dalszych rozdziałach. W początkowychrozdziałach przedstawione są takie cechy języka Matlab, które są analogiczne jak w Basic’u, Pascal’u,Fortranie, Algolu – a więc językach tradycyjnych. Jednakże tworząc na przykład najprostszy wykresmusimy „zahaczyć” o obszerną dziedzinę grafiki oraz macierzy. W takich przypadkach trzeba zajrzeć dotych dalszych rozdziałów gdzie są obszerniejsze omówienia tych dziedzin.

1.2. Co to jest MATLABMATLAB (nazwa pochodzi od angielskiego: MATrix LABoratory) to rozwijany od roku 1984

pakiet oprogramowania matematycznego firmy MathWorks Inc. zawierający:• język i środowisko (narzędzia) programowania oraz• obszerny zestaw tematycznych bibliotek podprogramów (toolbox’ów)• i wiele tysięcy stron (na CD) podręczników oraz przykładowych programów (demos)

1.3. Dlaczego warto poznać MATLABa?Bo stanowi potężne i rozpowszechnione na Świecie narzędzie do obliczeń naukowo-technicznych i

inżynierskich a zarazem - w podstawowym zakresie – jest łatwy w obsłudze i nadaje się do naukiprogramowania.

Posiada bogaty zestaw funkcji matematycznych i funkcji do prezentacji wyników w postaciróżnorodnych wykresów a także animacji. Specjalistyczne „toolbox’y” czynią go narzędziemdostosowanym do prawie każdej dziedziny, a przystępnie (choć po angielsku) objaśnione przykładypozwalają poznawać metody matematyczne w praktyce.

W Matlabie można też stosować programowanie obiektowe i tworzyć programy "okienkowe" zgraficznym interfejsem użytkownika. Możliwa jest także współpraca programów Matlaba zprogramami w językach C oraz Fortran – dzięki interfejsowi programowania aplikacji API (ApplicationProgramming Interface).

Opracowany w Matlabie Simulink to biblioteka modułów symulacyjnych z których budować możnaukłady przetwarzania sygnałów i modelować układy dynamiczne podobnie jak niegdyś na maszynachanalogowych.

Oprócz oryginalnego, komercyjnego Matlab’a istnieje i rozwija się szereg legalnie darmowychpakietów oprogramowania wzorowanych na Matlabie, o czym wspomniano nieco dalej.

Spis wybranej literatury w języku polskim zamieszczono na końcu tego opracowania, w kolejnościod podręczników najbardziej podstawowych do zaawansowanych. Najkrótsze i wystarczające dlanaszych potrzeb wprowadzenie do Matlaba stanowi książka z serii „Ćwiczenia z...” :

Matlab. Przykłady i zadania. Autorzy: A.Kamińska, B.Pańczyk, Wyd.: Mikom, Stron 152.

Page 4: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

4

1.4. Czy jest darmowa wersja Matlaba?Matlab jest drogim programem (osobno płaci się za toolbox'y) ale w Internecie dostępnych jest

kilka legalnie darmowych systemów wzorujących się na Matlabie. Są to m.in.:• FreeMat - http://freemat.sourceforge.net (wersja 3.5 ok. 11 MB):

Rys. 1.1. Okna programu Freemat

• Scilab - http://www.scilab.org/ - częściowo spolszczony z toolbox’ami (ok.120 MB):

Rys. 1.2. Okna programu Scilab

• Octave - http://sourceforge.net/projects/octave także on-line: http://www.mathcloud.se• Euler - http://euler.rene-grothmann.de• Maxima - http://maxima.sourceforge.net

Page 5: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

5

W SciLabie edytor nosi nazwę SciNotes, toolbox’y nazywają się ATOMS a biblioteka modułówsymulacyjnych podobna do Simulink’a nazywa się Xcos, komentarze zaczynają od „//” a stałesystemowe od „%”.

1.5. Co to jest "Środowisko programowania" czyli IDEProgramista potrzebuje narzędzi takich jak: edytor do pisania i poprawiania programów, translator

(kompilator lub interpretator) do ich tłumaczenia na kod procesora i uruchamiania, debugger (dowykrywania błędów) oraz system pomocy (help).

Narzędzia te mogą być połączone w jednym programie nazywanym " zintegrowanym środowiskiemprogramowania" lub IDE od angielskiego: Integrated Development Environment.

1.6. Środowisko programowania MATLABaPo uruchomieniu Matlaba jego standardowy wygląd może być następujący:

Rys. 1.3. Podstawowy ekran Matlab’a

Dodatkowo można otworzyć okno edytora przeznaczonego do pisania programów (z menu File-New lubz paska narzędzi) a także okno systemu pomocy (z menu Help).

1.7. Tryby użytkowania Matlaba

Można rozróżnić cztery tryby wykorzystywania Matlaba:

1) Tryb bezpośredni, czyli wpisywanie wyrażeń i poleceń w oknie komend IDE Matlaba.W trybie tym pojedyncza sesja polega na wpisaniu w oknie komend linii zawierającej jedną lub kilkakomend (poleceń, instrukcji) oddzielonych przecinkami lub średnikami. Zakończenie tej linii klawiszemENTER spowoduje natychmiastowe wykonanie zawartych w niej komend lub wyświetlenie komunikatuo błędzie.

Tryb bezpośredni jest używany raczej jako pomocniczy - głównie przy uczeniu się i testowaniudziałania poszczególnych funkcji lub wartości zmiennych.

2) Tryb pośredni, programowy - to tworzenie programów za pośrednictwem edytora. EdytorMatlaba można uruchomić z menu File-New lub przez kliknięcie ikony "kartki". Po wpisaniu programuw edytorze należy zapisać go do pliku. Nazwy plików podlegają takim samym regułom jak nazwy

Page 6: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

6

zmiennych (pierwszym znakiem musi być litera). Standardowo plik otrzyma rozszerzenie nazwy ".m"i będzie zapisany w folderze ustawionym jako bieżący. Program uruchamiamy albo z edytora (RUN)albo z okna komend przez wpisanie nazwy pliku bez rozszerzenia nazwy (.m). Programy można też pisaćw innym prostym edytorze tekstowym jak "Notatnik" w Ms Windows).

3) Tryb graficzny. Matlab posiada również środki do opracowywania programów posiadającychgraficzny interfejs użytkownika i wykorzystujących elementy okien dialogowych znane z MsWindows. Programy wprawdzie nadal są częściowo tworzone w edytorze jednak częściowo mogą byćgenerowane w sposób półautomatyczny z wykorzystaniem narzędzia typu RAD (Rapid ApplicationDevelopment) nazywającego się GUIDE. Polega to na wstawianiu elementów dialogu (suwaków, póledycyjnych i t.p.) na formatki graficzne (figure) i modyfikowaniu ich cech

4) Tryb symulacyjny. Rozszerzeniem Matlaba jest SIMULINK - pozwalający zestawiaćz różnorodnych bloków funkcjonalnych modele "analogowe" układów dynamicznych mające postaćschematów funkcjonalnych (blokowych) a następnie zadawać przebiegi wielkości wejściowychi obserwować przebiegi wielkości wyjściowych. SIMULINK pozwala więc badać modele w sposóbzbliżony jak na maszynach analogowych. Jest on wprawdzie dodatkowym elementem Matlaba, jednakpracę z Simulinkiem można uznać za tryb czwarty.

W Simulinku istnieje biblioteka modułów mechanicznych SimMechanics pozwalająca budowaćfunkcjonujące modele układów mechanicznych. Dokumentacja SimMechanics jest na stronie:http://www.mathworks.com/help/toolbox/physmod/mech/ natomiast filmy demonstrujące używanie sąna: http://www.mathworks.com/products/simmechanics/demos.html

1.8. Łagodny start. Działania w oknie komend.

Jak wspomniano, okno komend służy do wpisywania poleceń i wyświetlania wyznaczonych przezMatlaba wyników. W jednej linii okna komend można wpisać jedno lub kilka poleceń oddzielanychprzecinkami lub średnikami.

Po zakończeniu linii klawiszem ENTER polecenia będą wykonane pod warunkiem, że mająbudowę zgodną z regułami składni języka Matlab oraz, że użytym (w tej linii) zmiennym nadanowcześniej wartości. W przeciwnym przypadku wyświetlany jest komunikat o błędzie.

Wyniki wykonanych poleceń - ale tylko tych które nie zakończono średnikiem [;] - są wyświetlanew oknie komend. Na końcu linii nie musi występować przecinek ani średnik. Bardzo długie poleceniamożna zapisać w kilku liniach ale wtedy linię trzeba zakończyć trzema kropkami [...] jeśli dalszy ciągpolecenia będziemy pisać w następnej linii.

W pierwszych spotkaniach z Matlabem możemy wypróbować jego najprostsze możliwościw działaniach podobnych jak na kalkulatorze.

Po uruchomieniu Matlaba w oknie komend widać znak gotowości do przyjmowania poleceń :>>

Wpisanie 2+3 daje od razu wynik:>> 2+3

ans =

5

>>

Nie wstawiliśmy wyniku do żadnej zmiennej dlatego MATLAB użył zmiennej „ans”

Możemy wyniki obliczeń podstawiać do zmiennych np.:>> a = 43+3*9

a =

70

>>

Jednak ta łatwość jest nieco pozorna. Pamiętajmy, że:

wszystko co wpisujemy w Matlabie musi być zgodne z regułami jego języka

Już przy najprostszych obliczeniach kalkulatorowych - czyli wpisywaniu wyrażeń matematycznychw oknie komend - obowiązuje szereg reguł które poznamy w dalszych rozdziałach. Reguły dotyczą takżem.in. typów instrukcji jakie możemy wpisywać i szczegółów ich budowy.

Page 7: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

7

Przykładowo: chcemy obliczyć 3sinus2 30 stopni i wstawić do zmiennej x. Wiemy że sinus 30stopni wynosi 0,5 (stosunek najkrótszego do najdłuższego boku w ekierce nierównoramiennej), a więcwynik powinien być równy 0,75. Czy dobre będą zapisy 3sin230, 3SIN2(30), 3sin2(30) ?

Oczywiście NIE! bo:

(1) argumenty każdej funkcji muszą być w nawiasach,

(2) dla funkcji trygonometrycznych - argument musi być w radianach, a nie stopniach

(3) nazwy funkcji standardowych (z bibliotek Matlab'a) piszemy małymi literami

(4) separatorem części ułamkowej w liczbach jest kropka a nie przecinek, ....

(5) nie wolno pomijać znaku mnożenia [*]

(6) do kwadratu mamy podnosić obliczoną wartość sinusa z 30 stopni a nie nazwę

A więc musimy napisać tak:>> x = 3*(sin(pi/6))^2

x =

0.75

lub tak:>> x = 3*sin(pi/6)^2

x =

0.75

Komenda zakończona średnikiem wykona się lecz nie będzie wyświetlony jej wynik:>> y=sin(pi/2);

>>

Wpisanie samej nazwy zmiennej (w dowolnym momencie) wyświetli jej aktualną wartość:>> y

y =

1

>>

Bardzo pożyteczna jest możliwość przywoływania poprzednio wpisywanych komendz możliwością ich poprawiania - czyli wykorzystywania "historii". W tym celu można naciśnięciemklawisza "strzałki w górę" [�] przywoływać komendę ostatnio wpisaną lub szereg wcześniejszych.Można też wyszukiwać poprzednio uruchamiane komendy w oknie "History" i albo je uruchamiać(podwójnym kliknięciem) albo kopiować do okna komend lub edytora, modyfikować i uruchamiać.

Okno komend można wyczyścić komendą clc, natomiast pamięć zmiennych wymazuje komendaclear. Inne przydatne polecenia to m.in.: help, help nazwa_polecenia, who, whos, format.

Można także przeszukiwać dokumentację według interesujących nas słów, poleceniem: lookforsłowo. Początkujący (znający język angielski) może skorzystać z wprowadzenia poleceniem intro.

2. Podstawowe elementy języka Matlab

Niezależnie od trybu w jakim używamy Matlaba – musimy znać jego język programowania -noszący ta samą nazwę co cały pakiet.

MATLAB jest językiem programowania wysokiego poziomu, posiadającym m.in. różnorodnestruktury danych, instrukcje sterujące wykonywaniem programów oraz wprowadzaniemi wyprowadzaniem danych, bogaty zbiór funkcji a także możliwości programowania obiektowego.

Tak jak w każdym języku programowania – w Matlabie treść programu tworzą głównie instrukcjezwane też komendami lub poleceniami a także deklaracje - zazwyczaj pomijane w prostszychprogramach.

Podstawowymi składnikami instrukcji są:

• słowa kluczowe np.: for, end, if, else, while,• stałe i zmienne (w tym także złożone struktury danych),• wyrażenia zawierające m.in. wywołania funkcji.

Page 8: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

8

Omawianie zaczniemy od najprostszych elementów języka aby stopniowo dojść do objaśnieńnajważniejszych instrukcji i przykładów programów.

W tej części opracowania w zasadzie nie ma mowy o macierzach i operowaniu na nich. Tematy tejako nieco trudniejsze omówiono w dalszych rozdziałach niniejszego opisu

2.1. Wyrażenia skalarne i ich składnikiWyrażenia - podobnie jak w innych językach - mogą zawierać:

• stałe (liczby)• zmienne (nazwy zmiennych)• operatory działań• nawiasy• funkcjeJednak inaczej niż w innych językach - wyrażenia te dotyczą tablic (macierzy), które w

szczególności mogą być skalarami (o wartościach będących pojedynczymi liczbami). Poszczególnymskładnikom wyrażeń skalarnych poświęcono kolejne podrozdziały. Macierzami zajmiemy się niecodalej.

2.1.1. Skalarne stałe liczbowe - postacie zapisu liczb

Podobnie jak w większości języków programowania zapis liczb w MATLABie może zawierać:• początkowy znak plus (na ogół pomijany) lub minus• kropkę dziesiętną (NIE PRZECINEK!) poprzedzającą część ułamkową np.: -97.6397• może być stosowana tzw. notacja naukowa w której e oznacza "dziesięć do potęgi ..."

np.: -1.60210e-23 oznacza: -1.60210 razy 10 do potęgi -23• w zapisie liczb urojonych i zespolonych stosuje się symbol jednostki urojonej "i" zawsze

poprzedzony liczbą np.: 1i; 5.7- 3.149j; 2+3e5i

2.1.2. Typy wartości

Matlab nie wymaga deklarowania typów zmiennych przed ich użyciem (co jest koniecznew większości języków programowania np. w Pascal'u lub C) ponieważ nadaje zmiennej typ zgodnyz wprowadzaną wartością i potrafi zmieniać zarówno typ jak i rozmiary macierzy wstawianych dozmiennych – co jest niemożliwe w wielu innych językach.

Stałe i zmienne liczbowe mają domyślnie typ double a łańcuchy znaków (teksty) typ char.Sprawdzić typ zmiennej można funkcją class(zmienna) a typy wszystkich zdefiniowanych

zmiennych – poleceniem whos.W wyrażeniach logicznych wartość ZEROWA jest równoznaczna z FAŁSZEM a wartości różne od

zera traktowane są jako PRAWDA

Możliwe jest dokonywanie różnych konwersji typów m.in.:� num2str(liczba) - przekształca liczbę na ciąg znaków� str2num(tekst) - przekształca tekst (ciąg cyfr) na liczbę� uint8(liczba), uint16(liczba), uint32(liczba) - konwertują do całkowitych bez znaku� int8(liczba), int16(liczba), int32(liczba) - konwertują do całkowitych ze znakiem

Typ „double” czyli liczb „rzeczywistych podwójnej precyzji” jest jedynym typem w obrębie któregomożna wykonywać działania arytmetyczne. Zakres liczb typu double sięga od -realmax do +realmax,gdzie realmax =1.7977 e+308

Najmniejszy ułamek ma wartość: realmin=2.2251 e-308Precyzja: Liczby są pamiętane z dokładnością ok. 15-16 cyfr znaczących.Wartość typu double zajmuje 8 bajtów (64 bity) w pamięci

2.1.3. Formaty wyświetlanych liczb

Postać prezentowania liczb na ekranie można zmieniać przy pomocy dyrektywy:format parametr

gdzie parametr może m.in. być m.in. jednym ze słów:� short� short e� long

Page 9: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

9

Na przykład:

Liczba w domyślnymformacie short:

Po zmianie na formatshort e:

Po zmianie na format long:

» 2.5ans =

2.5000

» format short e» 2.5ans =2.5000e+000

» format long» 2.5ans =

2.50000000000000

Objaśnienie innych wartości parametru uzyskamy po wpisaniu help format

2.1.4. Zmienne

Wszystkie zmienne w MATLABie sa traktowane jak macierze. Wektory i skalary są uważane zaszczególne przypadki macierzy. Nazwy zmiennych można tworzyć według następujących reguł:

• muszą rozpoczynać się od litery, a dalej mogą mieć tylko• litery angielskie, nie wolno używać polskich liter np.: ą, ć, ę, ł, ń, ....• oraz cyfry i znaki podkreślenia np.: Moment_sily9

Dobre i złe nazwy zmienych

DOBRE: ZŁE:

Moc2

MomentGn1

moment_gn_1

clearSILA_Px1

2Moc

Moment-1

moment_gnący1

SIŁA_Px1

Liczbę znaków rozpoznawanych w nazwie zmiennej można sprawdzić przy pomocy funkcjinamelengthmax.

MATLAB rozróżnia duże i małe litery. Polecenia standardowe należy pisać małymi literami adla nazw własnych programów i zmiennych można używać małych i dużych liter

Niektóre komendy dla zmiennych:� who - wyświetla wykaz zmiennych� whos - wyświetla dokładne informacje o zmiennych� save - zapisuje pamięć zmiennych (workspace) do pliku matlab.mat� load - wczytuje pamięć zmiennych (workspace) z pliku matlab.mat� clear zmienna - usuwa zmienną z pamięci� clear - usuwa wszystkie zmienne z pamięci

2.1.5. Operatory działań arytmetycznych na skalarach

Pamiętajmy, że operatory dotyczą nie tylko skalarów ale ogólnie macierzy, jednak na razieponiżej rozpatrzymy tylko działania w zastosowaniu do skalarów.

Operator Objaśnienie+ dodawanie

- odejmowanie lub zmiana znaku

* mnożenie

/ dzielenie

^ potęgowanie

W przypadku macierzy rozróżnia się kilka typów operacji mnożenia, dzielenia i potęgowania, oczym napisano w dalszych rozdziałach.

2.1.6. Ważniejsze funkcje elementarne MATLAB’a

Nazwa funkcji Objaśnieniesqrt(x) pierwiastek z xabs(x) wartość bezwzględna xexp(x) e do xlog(x) logarytm naturalny z xlog2(x) logarytm o podstawie 2

Page 10: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

100

log10(x) logarytm o podst 10sign(x) znak xmod(x) reszta z dzieleniasin(x), cos(x), tan(x), cot(x) funkcje trygonometrycznesinh(x), cosh(x), tanh(x), coth(x) funkcje hiperboliczneasin(x), acos(x), atan(x), acot(x) f. odwrotne do trygonometrycznychround(x) zaokrągla do najbliższej całkowitejceil(x) zaokrąglenie w górę (dosłownie: sufit)fix(x) zaokrągla w stronę zerafloor(x) zaokrągla w dół (dosłownie: podłoga)imag(x) część urojona liczby zespolonejreal(x) część rzeczywista liczby zespolonejgcd(x) największy wspólny podzielniklcm(x) najmniejsza wspólna wielokrotność

Wykaz funkcji elementarnych można uzyskać wpisując: help elfun

2.1.7. Ćwiczenia - obliczenia kalkulatorowe

Sprawdź w Matlabie poprawność obliczeń:

5,06

sin =

π255,370

22

86,721087,3 35

=−

−⋅oblicz:

3107,7

Zastosuj tzw. „notację naukową” zapisu liczb w obliczaniu: =++⋅

00005,0128000000

76,91078,1 1114

2.1.8. Ćwiczenie - obliczenia z użyciem zmiennych

Oblicz wartość zmiennej: xxxy

5

6

4

22 −

−−

=

dla x = 8,167 oraz x = –8,167 (Powinno być: 0,748 i 0,924)

2.1.9. Relacje i wyrażenia logiczne

Wyrażenia logiczne umożliwiają sprawdzanie prawdziwości określonych zależności dla konkret-nych danych liczbowych. Najprostszymi wyrażeniami logicznymi są relacje. Relacja to dwa wyrażeniaarytmetyczne połączone operatorem relacji. Używane w Matlabie operatory relacji podaje Tabela 2.1.

Tabela 2.1. Operatory relacji

Operator Znaczenie< mniejsze<= mniejsze lub równe> większe>= większe lub równe== równe~= nierówne (w FreeMat jest: != )

Przykłady relacji:x>5, b*b-4*a*c>=0, 5==x^2+y, 2*(m-3*h)^2<=sqrt(u^2+5*h), x+a>x

Wartości logiczne tych relacji Matlab może wyznaczyć dopiero gdy:a) będą znane wartości liczbowe wszystkich występujących w nich zmiennych,b) zostaną obliczone wartości liczbowe wyrażeń arytmetycznych.

Sprawdź w oknie komend wybrane relacje, nadając wcześniej wartości występującym w nich zmiennym.

W Matlabie nie ma osobnego typu dla stałych i zmiennych logicznych ponieważ ich rolę pełnią sta-łe, zmienne i wyrażenia arytmetyczne. Wartość liczbowa zero jest bowiem traktowana jako wartość lo-giczna "fałsz" natomiast wartości liczbowe różne od zera są utożsamiane z wartością logiczną "praw-da". Także odwrotnie - wszystkie prawdziwe relacje i wyrażenia logiczne mają wartość liczbową 1 afałszywe mają wartość zero.

Page 11: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

111

Na przykład:>> 2>3

ans = 0

>> 3>2

ans = 1

Tabela 2.2. Operatory logiczne i równoważne im funkcje

Operator Funkcja ZnaczenieA & B and(A,B) A i B

A | B or(A,B) A lub B

~ A not(A) nie A

Złożone wyrażenia logiczne można tworzyć przy pomocy relacji i operatorów oraz funkcjilogicznych. Operatory logiczne Matlaba i odpowiadające im funkcje podaje Tabela 2.2, przy czym A i Breprezentują wyrażenia logiczne.

Wyrażenia logiczne znajdują zastosowanie głównie w instrukcjach warunkowych IF. Przykłademzastosowania instrukcji IF może być zamieszczony poniżej fragment programu rozwiązywania równaniakwadratowego:

. . . . . . . . . . .

if b*b-4*a*c <0

'Brak pierwiastkow rzeczywistych'

else

x1=(-b-sqrt(b*b-4*a*c))/(2*a);

x2=(-b+sqrt(b*b-4*a*c))/(2*a);

x1, x2

end

Inne przykłady podano przy opisywaniu instrukcji IF.

2.1.10. Łańcuchy i wyrażenia znakowe

Matlab umożliwia dokonywanie pewnych operacji na tekstach. Jak już wspomniano, stała tekstowato łańcuch znaków (ang.: string of characters) ujęty w apostrofy np.:

' x1=', ' x2=', 'Ala ma kota'

W rzeczywistości łańcuch znaków jest tablicą znaków (ang.: array of characters) a dokładniejwektorem, którego elementami są znaki drukarskie. W FreeMat typ ten określony jest jako string.Długość tego wektora jest równa liczbie składowych znaków, łącznie ze spacjami.

Do określenia rozmiarów macierzy (lub wektora) służy funkcja size(..). Inne wybrane funkcje dooperowania na tekstach pokazuje Tabela 2.3.

Tabela 2.3. Wybrane funkcje do operowania na tekstach

Funkcja Działaniez=char(n) zamienia wartość kodową n na odpowiedni znak zn=double('z') wyznacza kod znaku zdeblank(S) usuwa spacje i znaki niedrukowane z końca łańcucha Seval(S) wykonuje polecenie zapisane w łańcuchu Sischar(x) sprawdza czy x jest tablicą znaków (1 oznacza tak)lower(S) zamienia w łańcuchu S duże litery na małeS=num2str(x,p) zamienia wartość wyrażenia x na łańcuch znaków S, opcjonalnie uwzględniając p

miejsc dziesiętnych po kropcex=str2double(S) zamienia łańcuch znaków S reprezentujący liczbę na liczbę typu doubleS=strcat(S1,S2,..) skleja łańcuchy S1, S2, ... w jeden łańcuch Sv=strfind(S,S1) podaje pozycje w łańcuchu S na jakich znalazł wystąpienia krótszego łańcucha S1strjust(S,j) wyrównuje S do: prawej (j=’right’), lewej (j=’left’) lub środka (j=’center’)strrep(S,S1,S2) w łańcuchu S zastępuje każdy podłańcuch S1 przez podłańcuch S2strtrim(S) usuwa początkowe i końcowe spacje z łańcucha SS=strvcat(S1,

S2, ..)tworzy macierz w której łańcuchy S1, S2, .. są wierszami, uzupełniając krótszełańcuchy spacjami na końcu do jednakowej długości

upper(S) zamienia w łańcuchu S małe litery na duże

Page 12: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

122

Wartości tekstowe (łańcuchy znaków) można przypisywać zmiennym, np.:

S1='Ala ma kota'; S2='i chomika';

Oprócz operacji realizowanych przez funkcje (patrz Tabela 2.3) możliwe jest sklejanie łańcuchówreprezentowanych przez stałe, zmienne oraz funkcje. Należy w tym celu umieścić elementyprzewidziane do sklejenia we wspólnym nawiasie prostokątnym, oddzielając je przecinkami lubspacjami, np.:

S=[S1,'i psa',S2]

S =

Ala ma kotai psai chomika

Jak widać zabrakło odstępów przez spójnikami ”i” więc korygujemy wyrażenie tekstoweprzypisane zmiennej S:

S=[S1,' i psa ',S2]

S =

Ala ma kota i psa i chomika

Sklejanie łańcuchów może być przydatne m.in. przy wykorzystywaniu funkcji disp. Ponieważfunkcja disp może mieć jako argument albo wyrażenie numeryczne albo tekstowe więc w przykładziedotyczącym rozwiązywania równania kwadratowego podano taką linię poleceń wyświetlających wyniki:

disp('x1='); disp(x1); disp('x2='); disp(x2);

Zamiast tej linii z czterema instrukcjami disp, można użyć jednej instrukcji disp wyświetlającejjeden łańcych znaków otrzymany przez sklejenie objaśnień z obliczonymi wartościami wyników x1, x2,jednak wyniki te trzeba najpierw przekonwertować z typu liczbowego do typu znakowego, przy użyciufunkcji num2str(...) :

disp(['x1=',num2str(x1),' x2=',num2str(x2)]);

Sklejanie łańcuchów znaków nazywane jest także katenacją lub konkatenacją, a zamiastnawiasów prostokątnych można do tego celu stosować funkcję strcat(...).

Informacje o łańcuchach znaków oraz o funkcjach do operowania na nich można wyświetlić woknie komend poleceniami: help strings oraz help strfun.

2.2. Słowa kluczoweTabela 2.4. Podstawowe słowa kluczowe Matlaba to:

break – przerwijcase – przypadekcatch – przechwyćcontinue – kontynuujelse - w przeciwnym przypadkuelseif - - ‘’ -

end - koniecfor - dlafunction - funkcjaglobal - globalneif - jeśliotherwise - w pozostałych przy-

padkach

persistent – trwałyreturn – wróćswitch - przełącztry - próbujwhile - podczas

2.3. Pisanie i uruchamianie programów

W programach pisanych w języku Matlab wykorzystuje się zarówno podstawowe instrukcje(podobne do instrukcji w językach BASIC czy Pascal) jak i bardzo bogaty repertuar różnorodnychfunkcji należących albo do samego Matlaba albo do jego rozszerzeń czyli kilkudziesięciu tematycznych"toolbox-ów" wyposażonych w obszerne podręczniki (zawarte w plikach typu PDF).

Zanim przystąpisz do pisania pierwszych programów� Utwórz swój folder w którym będziesz gromadzić te programy� Po otwarciu Matlaba kliknij przycisk [...] (patrz rys. poniżej) i ustaw ten swój folder jako bieżący� Otwórz okno edytora z menu File-New lub wciśnięcie ikony z symbolem pustej kartki� Pamiętaj aby po napisaniu programu i po każdej jego modyfikacji zapisać program do pliku -

zniknie wówczas gwiazdka obok nazwy pliku, którą edytor wyświetla gdy zmodyfikowany plik niezostał zapisany - a dopiero potem uruchamiać.

Page 13: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

133

Rys. 2.1. Edytor Matlaba i bieżący folder dla programów

Edytor Matlaba automatycznie nadaje zapisywanym plikom programów rozszerzenia nazw ".m"dlatego nazywane są one "m-plikami". W edytorze można mieć otwartych kilka programów i wybieraćje przy pomocy "zakładek" u dołu okna edytora.

Aby uruchomić napisany program wystarczy wpisać w oknie komend jego nazwę (tzn. nazwę plikubez rozszerzenia ".m") lub w oknie edytora kliknąć przycisk opisany "RUN", widoczny na powyższymrysunku. Przy kolejnych uruchomieniach zamiast ponownie wpisywać nazwę można przywołać ją "zhistorii" naciskając klawisz strzałki w górę.

Istnieją dwa rodzaje m-plików:� skrypty czyli procedury nie wymagające parametrów, wywoływane przez wpisanie nazwy pliku

(bez rozszerzenia ".m") w oknie komend (działają one na zmiennych tworzonych w tzw. przestrzeniroboczej Matlab’a)

� funkcje zwracające wartości (w postaci skalara lub wektora) i zazwyczaj wymagające podaniaparametrów czyli argumentów funkcji; wywołania ich są najczęściej używane w wyrażeniachstanowiących fragmenty instrukcji innych m-plików (zmienne używane w funkcji są lokalne tzn.niedostepne poza ciałem funkcji).

Dowolne objaśnienia czyli komentarze można umieszczać w m-plikach rozpoczynając od znakuprocentu [%] . W programie SciLab zamiast “%” musi być: ”//”.

Aby uruchomić napisany program w Matlabie trzeba:1. ustawić jako bieżący folder - Current Directory (u góry) - ten dysk i folder w którym m-plik

został zapisany, korzystając z przycisku [...],2. wpisać nazwę m-pliku bez rozszerzenia „.m” ale pamietajmy, że:

Matlab rozróżnia duże i małe litery

2.4. Podstawowe poleceniaPodstawowe instrukcje i funkcje Matlaba odpowiadają sześciu podstawowym typom operacji

(omówionym w opracowaniu o algorytmach), a mianowicie: (1) wprowadzaniu i (2) wyprowadzaniudanych, (3) nadawaniu wartości zmiennym przez przypisanie, (4) instrukcji warunkowej i dwu rodzajompętli (5 i 6). Omówiono je kolejno w tym podrozdziale. Przedstawiono też instrukcję SWITCHpozwalającą wybierać jedną z wielu możliwości, oraz instrukcje obsługi plików pozwalającewprowadzać dane i wyprowadzać wyniki.

Do wprowadzania danych i wyprowadzania wyników w Matlabie podobnie jak w językach Pascali C nie są używane instrukcje lecz funkcje (pełniące role instrukcji).

2.4.1. Instrukcja przypisania

Instrukcja przypisania zwana też instrukcją podstawiania jest jedną z najczęściej używanych instrukcji.Pozwala ona nadawać zmiennym wartości i realizować obliczenia.

Page 14: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

144

Instrukcja przypisania ma postać:zmienna = wyrażenie

Jej sens jest następujący: „oblicz wartość wyrażenia i przypisz ją zmiennej”.

Przykłady: a23 =7.45e6; Obciazenie = 3500; Alfa = -0.456Sila_Rozc = Obciazenie*sin(Alfa); k = k+1;

Należy pamiętać, że znak [=] nie jest znakiem równości lecz znakiem przypisania, który należyrozumieć jako „przypisz” lub „podstaw”, dlatego instrukcja k = k+1 ma następujący sens: „zwiększ o1 dotychczasową wartość zmiennej k i uzyskany wynik przypisz zmiennej k jako jej nową wartość”.

Zauważmy, że wyrażenie zawsze występuje po stronie prawej (a nie odwrotnie) i najpierwobliczana jest jego wartość a dopiero potem wartość ta jest nadawana zmiennej zapisanej po lewejstronie. Aby obliczenia były wykonalne, wszystkie zmienne występujące w wyrażeniu muszą już miećokreślone wcześniej wartości.

Oprócz obliczeń, instrukcja przypisania jest używana do nadawania wartości początkowych orazmodyfikowania wartości zmiennych sterujących działaniem programu jak liczniki czy indeksy.

Nie należy natomiast używać instrukcji przypisania do wprowadzania danych, gdyż dane te byłybywówczas fragmentem programu a ich zmiana wymagałaby dokonania zmian w programie. Byłoby tosprzeczne z regułą, że każdy program powinien działać dla wielu różnych danych, bez koniecznościzmieniania poleceń tego programu.

2.4.2. Ćwiczenia – pierwsze programy

1) Napisz w edytorze Matlaba (albo FreeMat’a czy SciLab’a ...) program (skrypt) obliczania trzeciejpotęgi podanej liczby, zapisz do pliku i uruchom.

% program 1

a = input('dana liczba=')x=a^3

disp('szescian tej liczby='),disp(x)

Uruchom ten program.Aby pozbyć się wyświetlania "echa" działania każdej instrukcji trzeba instrukcje kończyć średnikiem [;].Linie komentarzy umieszczone na początku pliku (przed instrukcjami) wyświetlą się jako jego opis gdywpiszemy: "help nazwa_pliku", a dodatkowo program po uruchomieniu też powinien się przedstawić.Tak więc ulepszona wersja programu może wyglądać tak:

% Program oblicza sześcian podanej liczby

disp('Obliczanie sześcianu danej liczby:');

a = input;('dana liczba=')

x=a^3;

disp(['szescian tej liczby=', num2str(x)]);

- gdzie w funkcji disp zastosowano sklejanie łańcuchów tekstowych przez umieszczenie ich w nawiasachklamrowych. Popraw program i zapisz do pliku. Następnie wpisz: help pr1 a następnie jeszcze razuruchom program.

2) Napisz (w edytorze Matlaba) program który oblicza i wyświetla wartość naprężenia według wzorów:

min

maxmax

A

F=σ gdzie: 2

minmin RA π= , natomiast: maxF oraz minA są dane.

Wartości mają być wyświetlone wraz z objaśnieniami.

2.4.3. Wprowadzanie danych z klawiatury

Programy przetwarzające dane muszą pobierać je z klawiatury lub innego urządzenia wejściowegolub z pliku, tak aby program, bez potrzeby modyfikowania, mógł działać wielokrotnie, dla różnychzestawów danych. Pobieranie danych z urządzenia wejściowego lub z pliku i przypisywanie ichokreślonym zmiennym nazywa się wczytywaniem danych.

Do wczytywania danych z klawiatury najdogodniejsza jest w Matlabie funkcja input(..). Funkcjętą można używać w dwu postaciach. Postać pierwsza:

zmienna = input('żądanie danych')

Page 15: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

155

spowoduje wyświetlenie w oknie komend tekstu żądania danych i oczekiwanie na to aby użytkownikwprowadził z klawiatury wartość liczbową, która ma być przypisana zmiennej. Matlab umożliwiawpisanie zamiast liczby wyrażenia.

Funkcja input w drugiej postaci:zmienna = input('żądanie danych','s')

także wyświetli żądanie danych, ale tym razem oczekuje na wpisanie przez użytkownika łańcuchaznakowego (ang.: string of characters), który przypisze zmiennej.

2.4.4. Ćwiczenia – wprowadzanie danych z klawiatury

Poprzednie programy ulepsz wprowadzając do nich polecenia wprowadzania danych z klawiatury.

2.4.5. Wyświetlanie wyników

Najprostszy - podany już - sposób wyświetlania wyników, polega na nie umieszczaniu średników[;] po poleceniach, których wynik ma być wyświetlony. Poleceniami tymi mogą być instrukcjeprzypisania ale także same nazwy zmiennych, albo wyrażenia. Drugi sposób polega na wykorzystaniufunkcji:

disp(wyrażenie)

przy czym dopuszczalne jest użycie wyrażenia albo o wartości liczbowej albo tekstowej. Przykładyużycia tej funkcji podano już przy omawianiu wyrażeń tekstowych.

Kolejnym, bardziej zaawansowanym (chociaż i bardziej skomplikowanym) sposobem jestwykorzystanie funkcji fprintf(..) – identycznej jak w języku C. Funkcja ta pozwala wyprowadzaćsformatowane wyniki wraz z objaśnieniami na ekran lub do pliku dyskowego, przy czym ten drugiwariant będzie omówiony nieco dalej.

W systemach Freemat i Scilab analogiczną funkcją jest printf.

Dla wyświetlania wyników na ekranie używana jest następująca postać funkcji fprintf:

fprintf('format', lista_wyrażeń)

Lista_wyrażeń zawiera pooddzielane przecinkami zmienne lub wyrażenia, których wartościmają być wyświetlone. Sposób wyświetlania poszczególnych wartości opisany jest przez 'format'.Tam także umieszcza się teksty objaśnień które mają być wyświetlone. Przykładowo instrukcja:

fprintf('\nLiczba skladników=%3d Suma=%7.2f',N,Suma)

może wyświetlić napis:

Liczba skladników= 23 Suma= 784.32

Objaśnienie: [\n] to rozkaz przejścia do nowej linii, kolejne znaki będą przekopiowane do wypro-wadzanego napisu, aż do znaku [%]. Przy każdym napotkaniu znaku [%] nastąpi wyprowadzaniewartości kolejnego wyrażenia z listy, w sposób opisany przez liczbę umieszczoną po znaku [%]i zakończoną literą (w naszym przykładzie d lub f).

Dokładniej: 'format' – to łańcuch znaków ujętych w apostrofy, który może zawierać:

a) znaki sterujące - złożone z litery poprzedzonej „backslashem” [\]:\a alarm – sygnał dźwiekowy,\b backspace – cofnięcie o znak,\f form feed – przejście do nowej strony,\n new line – przejście do nowej linii,\r carriage return – skok na poczatek linii,\t horizontal tab – tabulator poziomy,\v vertical tab – tabulator pionowy,\xN hexadecimal number N – liczba szesnastkowa,\N octal number N – liczba ósemkowa;

b) opisy formatów, które zaczynają się od znaku %- po znaku % jest liczba określająca długośc pola,- następnie (dla liczb rzeczywistych) jest kropka i liczba

Page 16: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

166

określająca precyzję - liczbę miejsc po kropce w wyświetlanej wartości,- format kończy litera okreslająca typ wyświetlanych wartości, tzw. kod konwersji, najczęściej stosowane kody to: d – dla liczb całkowitych – np.: %5d e – dla wyświetlania liczb rzeczywistych w postaci wykładniczej, f – dla wyświetlania liczb rzeczywistych w postaci stałoprzecinkowej, g – dla wyświetlania liczb rzeczywistych w formacie e lub f w zależności od tego, który z nich będzie odpowiedniejszy dla danej wartości, s – dla wyprowadzania wartości wyrażeń tekstowych (string).

c) pozostałe znaki ze spacjami włącznie są traktowane jak tekst który ma zostać wyświetlony i będziew miejscach opisów formatów uzupełniany wartościami poszczególnych wyrażeń zlisty_wyrażeń.

W przypadku gdyby w tekście konieczne było wyświetlenie znaków: apostrof ['], procent [%] orazbackslash [\] wówczas należy w formacie wpisać dwa takie znaki [''], [%%], [\\].

2.4.6. Instrukcja IF

W wielu przypadkach musimy w programie umieścić kilka alternatywnych sekwencji operacji awybranie jednej z nich uzależnić od spełnienia określonego warunku. Służy do tego instrukcjawarunkowa nazywana instrukcją IF od występującego w niej słowa kluczowego (IF oznacza „jeżeli”).

Instrukcja IF (w najprostszych wariantach) może mieć jedną z postaci:% postać 1:if warunek

instr1

end

instr3

% postać 2:if warunek

instr1

else

instr2

end

instr3

warunek – może być wyrażeniem logicznym lub wyrażeniem algebraicznym,instr1, instr2, instr3 – to bloki zawierające jedną lub więcej instrukcji.

Działanie instrukcji IF jest następujące: jeżeli warunek jest spełniony (czyli wartość liczbowawyrażenia logicznego lub algebraicznego jest różna od zera) to zostanie wykonany blok instrukcjiinstr1, w przeciwnym przypadku (tzn. gdy warunek ma wartość liczbową zero) – w postaci 1wykonane będą instrukcje bloku instr3 a w postaci 2 – bloki instrukcji instr2 oraz instr3.

Przykład 1: Dla danej wartości x obliczyć ywedług wzoru:

>+

≤≤−

−<−

=

11

11

11

2

2

xdlax

xdlax

xdlax

y

clear

x = input('x=');

if x<-1

y = 1-x2

else

if x>1

y = 1+x2

else

y = x

end

end

Pamiętajmy, że jeśli mamy w programie uwzględnić dwa warianty działań to wystarcza do tegojedna instrukcja IF, natomiast przy trzech lub większej liczbie wariantów trzeba będzie użyć kilkuinstrukcji IF odpowiednio zagnieżdżonych, co pokazano na przykładzie powyżej. W przykładzie tym niema instrukcji wyświetlających wyniki a zamiast tego pominięto średniki po instrukcjach przypisującychwartość zmiennej y, co spowoduje wyświetlenie wartości tej zmiennej.

2.4.7. Ćwiczenia z IF

a) Napisz program, który pyta o temperaturę za oknem i zależnie od wartości odpowiada jednym zkomunikatów: „mróz”, „zimno”, „ciepło”, „gorąco”.

b) Napisz program, który pyta o liczbę i po jej wprowadzeniu bada czy jest parzysta oraz czy jestpodzielna przez 3, a następnie wyprowadza odpowiednie komunikaty. Podpowiedź: wykorzystajfunkcję mod(x,n) zwracającą resztę z dzielenia x przez n;

Page 17: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

177

c) Napisz program „ekspercki” pomagający stwierdzić przyczynę nie świecenia lampy (żarówka,bezpieczniki, kabel, ...), to znaczy wydający polecenia, zadający pytania oraz udzielający rad.

2.4.8. Instrukcja wyboru SWITCH

Instrukcja SWITCH (czyli „przełącznik”) ma postać:switch w

case w1

instr1

case w2

instr2. . . . . .

otherwise

instrN

end

gdzie: w - zmienna lub wyrażenie, które musi mieć wartość skalarną lub znakową,instr1, instr2, ... , instrN – to bloki instrukcji,w1, w2, ... – wartości zapisane w postaci stałych

Pozwala ona wybrać i wykonać jeden z wielu bloków instrukcji.

Instrukcja wyznacza wartość wyrażenia „w” umieszczonego po słowie „switch” a następniewykonuje ten blok instrukcji, przed którym zapisano po słowie „case” stałą równą wartości wyrażenia„w”. Jeśli żadna ze stałych „w1, w2, ...” nie jest równa wartości wyrażenia „w”, to zostanie wykonanyblok instrukcji zapisany po słowie kluczowym otherwise.

Przykład 2: clear; disp('Kalkulator cztero-działaniowy:')

x=input('x='); y=input('y=');

zn=input('wpisz znak działania:', 's');

switch zn

case '+'

wynik=x+y

case '-'

wynik=x-y

case '*'

wynik=x*y

case '/'

if y==0

disp('Błąd: Dzielenie przez zero!')

else

wynik=x/y

end

otherwise

disp('Nierozpoznane działanie!')

end

Zauważmy, że instrukcja SWITCH nie może na ogół zastąpić instukcji IF gdyż nie można przy jejpomocy testować prawdziwości nierówności czy dowolnych wyrażeń logicznych a jedynie możnasprawdzić czy spełniona jest jedna z równości: w==w1, w==w2, ...

Nie można więc użyć instrukcji SWITCH dla realizacji podanego uprzednio zadania – wyznaczaniawartości funkcji określonej w trzech przedziałach oddzielnymi wzorami. Dla rozgałęziania programu napodstawie nierówności i innych wyrażeń logicznych pozostaje więc używanie jednej lub wieluzagnieżdżonych instrukcji IF.

2.4.9. Pętla FOR

Pętla for ... end jest stosowana jest gdy z danych wynika ile razy zachodzić będą cyklicznepowtórzenia instrukcji zawartych wewnątrz pętli czyli zapisanych między for a end. Pętla ta ma postać:

for zmienna = pocz : krok : konc blok instrukcji

end

Pozwala więc ona powtarzać wykonywanie bloku instrukcji określoną liczbę razy przy czymdodatkowo zmienna kontrolna w tej pętli przyjmuje kolejno wartości od pocz do konc z przyrostem (lub

Page 18: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

188

ubytkiem) krok. Jeśli krok jest równy 1 to można go pominąć w zapisie.

Przykład 3:Chcemy otrzymać kwadraty liczb parzystychod 2 do 10 i podstawić je do kolejnychelementów wektora p:

for i = 1:5 p(i) = (2*i)^2

end

p

Matlab jest zoptymalizowany dla obliczeń macierzowych, dlatego nie jest zalecane używane pętliFOR działających na pojedynczych elementach macierzy. Tak więc powyższy program można zapisaćinaczej – definiując „i” jako wektor:

Przykład 3a: Wektor p - kwadratów liczb parzystych od 2 do 10.Potęgowanie tablicowe [.^] (jest opisane w rozdziale 4)

i = 1:5

p = (2*i).^2

Przykład 4: Tabela i wykresfunkcji sinus kwadrat.W pętli FOR zmienia się kątalfa a do wektora Xwstawiane są wartości kąta wradianach.Poszczególne pary wartościzapamiętywane są wkolejnych elementachwektorów X oraz Y

% tabela i wykres funkcji sinus kwadratclear; clc

k=0; % zerujemy licznik elementów tabeli

fprinf('\n x sin(x)'); % nagłowek tabeli

for x=0 : 5 : 360 k=k+1;

X(k)= alfa*pi/180; Y(k)=sin(X(k))^2;

fprinf('\n %5.1f %7.4f',alfa,Y(k));

end

plot(X,Y); grid on; % to wykres i siatka

title('Funkcja sinus'); % tytuł wykresu

xlabel('x'); ylabel('x'); % etykiety osi

Przykład 5. Program z podwójną pętlą:for w=1:3

for k=1:4

M(w,k)=w+k;

end

endM

Wygeneruje macierz o trzech wierszachi czterech kolumnach:

M =

2 3 4 5

3 4 5 6

4 5 6 7

2.4.10. Ćwiczenia z FOR

a) Napisz program z pętlą FOR...END, który wyświetla na ekranie pierwiastki z kolejnych liczbnieparzystych od 1 do 9

b) Napisz program z pętlą FOR...END, który dla ciągu wartości ϕ od 3,6 do 13 co 0,4 oblicza wartościwyrażenia: ββββ = (ϕϕϕϕ - 0,5)/(1,1+sin ϕϕϕϕ)

2.4.11. Pętla WHILE

Pętla programowa while ... end ma postać następującą:

while wyrażenie

instrukcje. . . . .

end

Po słowie kluczowym while musi wystąpić wyrażenie logiczne lub algebraiczne.

Pętla typu while powtarza instrukcje zapisane między while i end tak długo jak długowyrażenie jest różne od zera lub w sensie logicznym jest prawdziwe.

Instrukcję while stosuje się gdy liczba powtórzeń pętli nie jest z góry określona lecz powtórzeniamają zachodzić aż do wystąpienia pewnego zdarzenia, na przykład naciśnięcia określonego klawisza lubwystąpienia znacznika końca pliku dyskowego.

Oto przykład zastosowania pętli while objaśniony poniżej.

Przykład 6: clear;

p='T';

Page 19: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

199

while p=='T'

disp('Obliczanie wartości dowolnej funkcji f(x)');

x=input('Podaj wartość x:');

funkcja=input('Wpisz wyrażenie zależne od x','s');

y=eval(funkcja);

fprintf('\n x=%10.4f f(x)= %10.4f\n',x,y);

p=input('Czy nowe obliczenie? (T/N):', 's');

p=upper(p);

end

Powyższy program rozpoczyna się od wyczyszczenia pamięci zmiennych (clear). Aby instrukcjewewnątrz pętli while mogły być po raz pierwszy wykonane musi być spełniony warunek podany posłowie while, to znaczy zmienna p musi zawierać znak 'T', (dokładniej: wartością zmiennej p ma byćznak 'T') a więc przed pętlą musimy zmiennej p nadać taką wartość. Wewnątrz pętli mamy instrukcjewyświetlające informacje o tym co program będzie robił a następnie, przy pomocy funkcji inputprogram wprowadza z klawiatury wartość x oraz łańcuch tekstowy z wyrażeniem które należy obliczyć(np.: sqrt(x) – dla obliczenia pierwiastka z x). Funkcja eval pozwoli wykonać obliczenia wedługwprowadzonego z klawiatury wzoru i przypisać wynik zmiennej y.

Kolejna instrukcja input wyświetla pytanie 'Czy nowe obliczenie? (T/N):' żądającnaciśnięcia klawisza T (tak) lub N (nie). Ponieważ wprowadzony do zmiennej p znak może być dużą lubmałą literą więc dla umożliwienia porównania go - po powrocie na poczatek pętli - ze znakiem 'T'dokonano konwersji na duże litery, przy pomocy funkcji upper.

2.4.12. Instrukcja BREAK

W przypadku gdy zachodzi konieczność wyskoczenia z pętli przed wykonaniem wszystkich cyklimożna użyć instrukcji break.

2.5. Operacje na plikachMatlab może korzystać z wielu różnych typów danych zawartych w plikach: tekstowych,

binarnych, graficznych oraz audio i video. Potrafi m.in. wczytywać dane z arkuszy kalkulacyjnychExcel’a i Lotus’a, filmy w formacie AVI oraz obrazy zapisywane w wielu różnych formatach plikówgraficznych. Wykaz typów plików obsługiwanych przez Matlaba oraz jego funkcji do tegoprzeznaczonych można uzyskać wpisując „help fileformats”.

W przypadku prostych programow obliczeniowych wystarczy nam znajomość kilku funkcjiumożliwiających (a) zapisywanie i odczytywanie zmiennych z przestrzeni roboczej i (b) obsługiwanieplików tekstowych. Większość funkcji służących do tych celów zostało do Matlaba zapożyczonychz języka C.

2.5.1. Zapisywanie i odczytywanie zmiennych z przestrzeni roboczej

Zmienne – a w tym i macierze – używane w plikach skryptowych oraz poleceniach pisanych woknie komend, są przechowywane w tak zwanej przestrzeni roboczej Matlaba (Matlab workspace).Zmienne te można wyświetlić komendą whos lub wymazać komendą clear. Zmienne te można takżezapisać do pliku na przykład komendą:

save plik lista_zmiennych

na przykład: save wyniki x y

Jeśli pominiemy listę zmiennych to zapisane będą wszystkie.Jeśli nie podamy rozszerzenia nazwy pliku to powstanie plik binarny z rozszerzeniem .mat. Natomiastgdy damy rozszerzenie .txt to powstanie plik tekstowy.

Aby wczytać tak zapisane zmienne z pliku *.mat trzeba użyć komendy:load plik

a w przypadku pliku tekstowego:load plik.txt

w tym drugim przypadku wczytane dane utworzą macierz o nazwie plik

2.5.2. Otwieranie i zamykanie plików

Przed rozpoczęciem wyprowadzania informacji do pliku lub wczytywania z pliku należy ten plik

Page 20: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

200

otworzyć przy pomocy funkcji fopen, a gdy plik jeszcze nie istnieje to funkcja fopen może najpierwgo utworzyć. Polecenie otwarcia pliku może mieć następującą postać:

[id, kom] = fopen(nazwa_pliku,tryb)

Jako pierwszy parametr funkcji fopen musimy podać łańcuch znaków określajacy nazwę_pliku,wraz z ewentualną ścieżką dostępu. Drugi parametr, także będący łańcuchem znaków, określa trybdostępu do pliku i jego typ. Tryby dostępu do plików przedstawia Tabela 2.5.

Funkcja fopen zwraca dwuelementowy wektor [id, kom]. Jako pierwszy element otrzymamyidentyfikator id pliku, na który będziemy musieli powoływać się we wszystkich następnych poleceniachdotyczących tego pliku. Jeśli otwieralibyśmy kilka plików to oczywiście powinniśmy zastosować różnenazwy zmiennych dla ich identyfikatorów (np.: id1, id2, ...).

Identyfikator id po prawidłowym otwarciu pliku otrzyma wartość całkowitą dodatnią, natomiastw przypadku niemożności otwarcia pliku otrzyma wartość minus jeden. Dodatkowo, jako drugi elementwektora zwracanego przez funkcję fopen otrzymamy w tym drugim przypadku komunikat (kom) oprzyczynie błędu. Przykładowo – dysk docelowy może być zabezpieczony przed zapisem.

Tak więc, jeśli chcemy być informowani o występowaniu błędów otwarcia plików, to po poleceniuotwarcia pliku powinniśmy napisać:

if id<0

disp(kom);

end

Tabela 2.5. Tryby dostępu do pliku tekstowego

Para-metr

Tryb dostępu do pliku tekstowego

'rt' otwarcie do odczytu (read) - domyślne gdy pominiemy ten parametr

'wt' usunięcie zawartości istniejacego pliku lub utworzenie nowego (gdy plik z tą nazwą nie ist-nieje) i otwarcie go do zapisu (write)

'at' otwarcie w celu dopisywania na końcu istniejącej zawartości (append)

'rt+' otwarcie do odczytu i zapisu

'wt+' wymazanie istniejacego pliku lub utworzenie nowego i otwarcie do odczytu i zapisu

'at+' otwarcie w celu czytania lub dopisywania elementów na końcu (append)

Po otwarciu pliku można w programie umieścić wiele poleceń wprowadzania lub wyprowadzaniainformacji, odwołujących się do tego pliku poprzez jego identyfikator. Po zakończeniu tych operacji,plik na którym operujemy musimy zamknąć przy pomocy funkcji fclose(id).

W przypadku gdyby program – z powodu błędu - przerwał działanie przez wykonaniem fclose,najlepiej w oknie komend wpisać wówczas polecenie fclose('all') zamykające wszystkie otwartepliki. Jest to istotne bo plik niezamknięty nie daje się również usunąć. Polecenie takie warto równieżumieszczać na początku lub na końcu programu.

2.5.3. Wyprowadzanie wyników do pliku

Po otwarciu pliku w trybie umożliwiającym zapis (patrz Tabela 2.5) można rozpocząćwyprowadzanie informacji do tego pliku. Użyjemy do tego tą samą funkcję fprintf, którąużywaliśmy do wyprowadzania informacji na ekran, ale tym razem pierwszym jej parametrem musi byćidentyfikator pliku (id) utworzony wcześniej funkcją fopen. Tak więc ogólna postać wywołania funkcjifprintf będzie następująca:

fprintf(id,'format', lista_wyrażeń)

gdzie: id - identyfikator pliku omówiony w p.2.5.1'format' - argument funkcji fprintf omówiony w 2.4.5

lista_wyrażeń - argument funkcji fprintf omówiony w 2.4.5

Program napisany z zastosowaniem omówionych funkcji obsługi plików przedstawiono poniżejjako „Przykład 7”. Program ten generuje do pliku tekstowego tabelkę wartości kąta orazodpowiadających im wartości funkcji sinus i cosinus. Oznajmia o tym komentarz zawarty w pierwszejlinii programu. W linii drugiej funkcja fopen tworzy i otwiera folderze bieżącym (patrz Błąd! Nie

Page 21: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

211

można odnaleźć źródła odsyłacza.) plik o nazwie 'wyniki1.txt' bo taką nazwę pliku podaje jej pierwszyparametr.

% Przykład 7% Program zapisuje do pliku wartości kąta x oraz jego funkcji sin(x), cos(x)[id, kom] = fopen('wyniki1.txt','wt'), % Tworzy plik wynikówfprintf(id,'%s\n', ' kąt x [stopnie] sin(x) cos(x)' ); % Nagłówek tabelkifor xs = 0 : 5 : 90

x = xs*pi/180; % kąt xs zamieniony na radianyy1=sin(x); y2=cos(x);fprintf(id,' %3d', xs);fprintf(id,' %15.4f %12.4f\n', y1,y2);

endfclose(id);

Drugi parametr 'wt' określa typ dostępu:'w' = zapis (ang. write), 't' – plik typu tekstowego

Funkcja fopen zwraca dwie wartości, które w tym przypadku zostaną podstawione do zmiennych[id, kom] gdzie: id = identyfikator pliku, kom = komunikat o ewentualnej przyczynie niemożliwościotwarcia pliku.

W linii trzeciej wyprowadzono przy pomocy funkcji fprintf nagłówek tabelki do pliku tekstowegoo identyfikatorze podanym jako pierwszy parametr tej funkcji (w naszym przypadku: id), przy czymprzypomnijmy sobie, że:

%s - to format dla wyprowadzania tekstu podanego jako drugiparametr,

\n - polecenie przejścia do nowej linii.

Linia czwarta rozpoczyna pętlę for, w której będą powtarzane operacje obliczania i wyprowadzaniado pliku poszczególnych wierszy tabeli, a słowo end zaznacza koniec tej pętli. Ponieważ argumentyfunkcji trygonometrycznych muszą być podawane w radianach (w Matlabie ale także w innych językachprogramowania), więc kolejna linia programu dokonuje takiej zamiany, a w następnej linii dokonuje sięwyznaczenie wartości interesujących nas funkcji. Kolejne dwie linie to wywołania funkcji fprintf w celu„wydrukowania” do pliku wiersza tabeli, przy czym przypominam, że:

%3d - określa 3 miejsca dla liczby całkowitej (o czym świadczy literad)

%12.4f - to format dla liczb rzeczywistych, a w nim 12 miejsczadeklarowano dla całej liczby (i poprzedzających ją spacji) a wtych 12-tu zarezerwowano 4 miejsca po kropce dla częściułamkowej

\n - oznacza rozkaz zmiany linii na wydruku wyprowadzanym dopliku

fclose(id) - zamyka plik o identyfikatorze id

Po zakończeniu działania programu, łatwo sprawdzić – na przykład przy pomocy „Notatnika”systemu Ms Windows – że to co program wygenerował do pliku 'wyniki1.txt' ma następującą postać:

kąt x [stopnie] sin(x) cos(x)

0 0.0000 1.0000

5 0.0872 0.9962

10 0.1736 0.9848

15 0.2588 0.9659

20 0.3420 0.9397

. . . . . . . . . . .

Jak widać spacje w łańcuchu formatu są istotne bo przenoszą się na wydruk.

2.5.4. Wczytywanie danych z pliku

Wyniki różnorodnych pomiarów - dokonywanych w praktyce inżynierskiej - przechowywane są zreguły w plikach dyskowych. Musimy więc umieć napisać program, który wczytuje dane z pliku, w celudalszego ich przetwarzania.

Page 22: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

222

Przed wczytywaniem danych z pliku – tak samo jak przed wyprowadzaniem - trzeba najpierw plikz danymi otworzyć i przypisać mu identyfikator przy pomocy tej samej co poprzednio funkcjifopen:

[id kom] = fopen(nazwa_ pliku)

Jak widać w tym przypadku pominięto drugi argument funkcji, co jest równoznacznez zastosowaniem domyślnego trybu otwarcia pliku czyli „do odczytu”.

Licząc się z możliwością wystąpienia błędu przy otwieraniu pliku, warto następnie wpisaćpolecenia wyświetlające ewentualny komunikat o przyczynie błędu:

if id<0

disp(kom)

end

Teraz można już realizować wczytywanie. Jedną z funkcji do tego przeznaczonych jest funkcjafscanf, której wywołanie ma następującą składnię:

[macierz liczba_el] = fscanf(id,'format', [Lk Lw])

gdzie: id - to identyfikator pliku nadany przy otwarciu funkcja fopen

'format' - łańcuch opisu formatu dla wczytywanych danych, przy czym można niepodawać długości pól

[Lk Lw] - rozmiary_macierzy

macierz - wczytana macierz

liczba_el - liczba wczytanych elementów

Jak widać funkcja fscanf pozwala wczytać od razu całą macierz danych.Jeśli nie podamy rozmiarów [Lk Lw] to otrzymamy macierz jednokolumnową. Jeśli natomiast nie

wiemy ile jest elementów ale wiemy, że chcemy otrzymać dwie kolumny to podamy rozmiar [2 inf],(przy czym inf to nieskończoność).

Przykład 8:x = 0:.1:1; % generuje wektor wierszowy

y = [x; exp(x)]; % skleja dwa wektory wierszowe w macierz y

fid = fopen('exp.txt', 'w'); % otwiera plik do zapisu

fprintf(fid, '%6.2f %12.8f\n', y); %wyprowadza do pliku macierz y

fclose(fid); % zamyka plik

type exp.txt % wyświetli treść pliku

% ======= a teraz wczytywanie z pliku:fid = fopen('exp.txt'); % otwiera plik

A = fscanf(fid, '%g %g', [2 inf]); % wczytuje do macierzy A

fclose(fid); % zamyka plik

% ===== Potrzebna jest jeszcze transpozycja macierzy bo kolumny wczytały się do wierszyA = A';

Po zakończeniu wczytywania trzeba zamknąć plik używając funkcji: fclose(id).Jak widać jest to nieco skomplikowane dlatego prościej jest użyć czasem omówionego wcześniej

polecenia save.

2.6. Definiowanie i stosowanie funkcji użytkownikaZaletą Matlaba jest ogromne bogactwo gotowych funkcji z wszelakich niemal dziedzin zastosowań

komputerów, jednak w razie potrzeby użytkownik może pisać własne funkcje i używać je identycznie jakfunkcje Matlab'a. Własne funkcje pisze się na przykład gdy:

1. chcemy aby program składał się z bloków funkcjonalnych o ściśle określonym działaniu – co czyniprogram lepiej zrozumiałym i jest szczególnie zalecane w przypadku długich programów

2. funkcja będzie przynajmniej kilkukrotnie wykorzystywana w danym programie

3. tworzymy program z interfejsem graficznym gdzie elementom sterującym przypisane są zdarzenia azdarzeniom określone funkcje które musimy napisać.

Definicja funkcji w Matlabie musi rozpoczynać się od linii o następującej strukturze:

Page 23: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

233

function wektor_zmiennych_wynikowych = nazwa_funkcji(parametry_wejściowe)

Na przykład: function [y1, y2, y3] = fun1(x1, x2, x3, x4)

Dla wymuszenia wyjścia z funkcji można użyć słowa kluczowego return.Należy pamiętać, że zmienne używane wewnątrz funkcji są lokalne to znaczy niedostępne po wyjściuz funkcji. Dzięki temu nie istnieje ryzyko kolizji ze zmiennymi w innych funkcjach.

W przypadku gdy chcemy aby jakieś zmienne z wnętrza funkcji stały się dostępne w innychfunkcjach lub przestrzeni roboczej, wówczas należy w obu tych miejscach zastosować deklarację:

global lista_zmiennych.Zmienne na tej liście_zmiennych powinny być oddzielane odstępami.

Istnieje także w Matlabie kilka innych sposobów definiowania funkcji. Jednym z nich jestzastosowanie instrukcji inline. Instrukcja inline pozwala na przypisanie zmiennej łańcuchaodpowiadającego wyrażeniu matematycznemu. Zmienną tą możemy dalej używać jak odpowiadającą jejfunkcję.

Przykład:>>f1=inline('1+sin(x) ');>>f1(pi/6)

ans =

1.5000

Przykład 9. Funkcja "silnia"% Funkcja silnia wyznacza wartosc n!

function [wynik]= silnia(n)

wynik=1;

for i=1:n

wynik=wynik*i;

end

return

Po zapisaniu tej funkcji do pliku, który musi w tym przypadku mieć nazwę silnia.m możnawywoływać funkcję z konkretnymi wartościami argumentu n:

>> silnia(5)

ans =

120

>> silnia(9)

ans =

362880

Przykład 10. Funkcja "pierwiastek z sumy kwadratów"W przypadku gdy w wyrażeniach powtarzają się pewne działania lecz dotyczą one różnych danych,

może być opłacalne napisanie własnej funkcji. Na przykład jeśli dla danego x mamy obliczyć wyrażenie:

i być może następne wyrażenia w których występuje pierwiastek z sumy kwadratówto można zdefiniować funkcję:

function c = pwsk(a,b)

% oblicza pierwiastek z sumy kwadratów dwu danych liczb

c = sqrt(a^2+b^2)

Trzeba zapisać ją do pliku o nazwie pwsk.m a następnie można wykorzystać ją na przykład wtakim programie:

x=1

while x ~= 0

x = input('x=');

p = (1 – pwsk(3,x))/(pwsk(2*x^2, 4)

disp(['p=',num2str(p)]);end

Page 24: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

244

Przykład 11. Funkcja z instrukcją IF (rozwiązywanie równania kwadratowego)Podany wcześniej przykład skryptu (procedury) do rozwiązywania równania kwadratowego

pokazano poniżej przerobiony na funkcję:function [x1, x2] = prkw(a, b, c)% ta funkcja oblicza pierwiastki x1, x2% rownania: a*x^2 + b*x + c = 0delta = b*b-4*a*c;if delta<0% dla delta<0 podstawimy NaN = "nieokreslone"

x1=NaN; x2=NaNelse

x1=(-b-sqrt(delta))/(2*a);x2=(-b+sqrt(delta))/(2*a);

endFunkcję należy zapisać do pliku o takiej samej nazwie jak nazwa funkcji, a więc: prkw.m. Rola tej

funkcji jest taka sama jak funkcji standardowych (na przykład sinus) to znaczy nie zawiera ona instrukcjiwejścia/wyjścia bo wprowadzenie do niej danych nastepuje przez parametry (a,b,c) a wynik zostaje jakto się mówi "zwrócony" przy pomocy nazwy funkcji (prkw) pełniącej rolę parametru wyjściowego.Ponieważ w Matlabie macierze pełnią rolę zmiennych więc i tutaj wynik może być macierzą a wszczególności wektorem lub skalarem.

Funkcja może być wywołana samodzielnie (z konkretnymi parametrami) ale najczęściej opłaca sięją napisać gdy będzie używana jako cegiełka większego programu.

Przykłady bezpośredniego użycia zdefiniowanej przed chwilą funkcji o nazwie prkw:>> [x1, x2]=prkw(1,1,1)x1 = NaN

x2 = NaN

W tym przypadku brak było pierwiastków rzeczywistych.

>> [x1, x2]=prkw(-1,1,1)x1 = 1.6180

x2 = -0.6180

2.6.1. Ćwiczenia – funkcje użytkownika

Napisz funkcję do obliczania odległości między dwoma punktami A i B na płaszczyźnie, jeślidane są współrzędne tych punktów: xa, ya, xb, yb.Zastosuj tę funkcję do obliczenia długości łamanej złożonej z trzech punktów o danychwspółrzędnych: x1, y1; x2, y2; x3, y3.Uogólnij zadanie dla N punktów stosując odpowiednią pętlę.

Page 25: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

255

3. Grafika uchwytów i budowa interfejsu graficznego

3.1. Hierarchia, typy, uchwyty i cechy obiektów graficznych

Rys. 3.1. Podstawowe typy obiektów graficznych w MatlabieWykresy i obiekty graficzne w Matlabie tworzą strukturę hierarchiczną pokazaną na rysunku

poniżej. Struktura ta wraz z regułami jej dotyczącymi nazywa się GRAFIKĄ UCHWYTÓW HandleGraphics. Znajomość jej podstaw jest przydatna przy programowym generowaniu wykresów w Matlabieoraz budowaniu programów z interfejsem graficznym.

Formatowanie i modyfikowanie wykresów jest także możliwe w trybie edycji (po wciśnięciuw oknie wykresu przycisku ze strzałką i korzystaniu z menu kontekstowego lub górnego) przy pomocymyszki.

Najistotniejsze zasady dotyczące obiektów graficznych są następujące:1. Wszelkie obiekty graficzne powstają w oknach graficznych nazywanych FIGURE. Okien takich

może być wiele. Okno powstaje samoczynnie przy wykonywaniu poleceń graficznych lub może byćutworzone poleceniem figure albo zmienna = figure.

2. Przy tworzeniu zarówno okna jak każdego obiektu powstaje jego unikalny identyfikator zwanyuchwytem (handle) . Jest to wielocyfrowy numer, który należy zapamiętać w zmiennej jeśli chcemysię nim posługiwać, natomiast gdy nie posługujemy się uchwytem to operacje dotyczą zawsze"aktywnego" (bieżącego) elementu graficznego czyli tego który był przed chwilą utworzony alboostatnio kliknięty. Na przykład komendy: grid on, ylabel(‘sin(x)’) - włączą siatkę i utworzą opis osiY na ostatnio utworzonym wykresie.

3. Jeśli nie wstawimy uchwytu do zmiennej przy tworzeniu obiektu to możemy jeszcze korzystać zfunkcji: gcf - uchwyt bieżącego okna (get current figure), gca - uchwyt bieżącego układu współrzędnych (get current axes), gco - uchwyt bieżącego obiektu (get current object),

4. Wszystkie funkcje tworzące obiekty graficzne mają podobną składnię:

uchwyt = obiekt('Cecha', Wartość, 'Cecha', Wartość, ...)

przykłady:>>F1=figure('Position',[5 40 790 300], 'Name', 'TESTOWANIE');

5. Każdy obiekt ma określone własności, które można sprawdzać i pobierać ich wartości przy pomocyfunkcji get oraz modyfikować (ustawiać) przy pomocy funkcji set:

>> get(F1,'Color')

ans =

0.8000 0.8000 0.8000

>>set(F1,'Color', [0.9, 0.7, 0.95], 'MenuBar', 'none');

6. Każda własność ma swoją wartość domyślną, która będzie zastosowana jeśli użytkownik nie podainnej, na przykład kolor okna graficznego domyślnie będzie szary: [0.8 0.8 0.8].

Page 26: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

266

7. Użytkownik może określać własności albo przy tworzeniu obiektu (patrz punkt 4), albo późniejkorzystając z funkcji set oraz uchwytu obiektu – jak w p.5:set(uchwyt_obiektu, 'Nazwa_cechy', wartość, 'Nazwa_cechy', wartość, . . .)

8. Obiekty graficzne podlegają hierarchii określającej który obiekt jest dla danego nadrzędny (parent =rodzic) a który podrzędny (child = dziecko, potomek).

3.2. WykresyWykresy – tak jak i inne obiekty graficzne są wyświetlane w oknach graficznych (Figure). jeśli

żadne okno "Figure" nie było otwarte to przy tworzeniu wykresu automatycznie zostanie utworzonenowe okno. Jeśli jednak były już otwarte jakieś okna to wykres powstanie w aktywnym (ostatniootwartym lub używanym) oknie, które czasem może być zasłonięte oknem komend lub edytora.

Tabela 3.1. Wybrane funkcje dla wykresówPolecenie lub funkcja Matlab'a Opis

h = figure Nowe okno graficzne o uchwycie zapamiętanym w zmiennej h.

figure(h) Uaktywnia okno o uchwycie h jeśli takie istnieje a jeśli nie istniejeto tworzy nowe okno.

plot(x,y) Dla danych wektorów x,y rysuje wykres liniowy

plot(y) Wykres liniowy wartości y, a na osi x są ich numery

plot(x1,y1, x2,y2, ...) Kilka wykresów w jednym oknie z domyślnymi typami linii

plot(x1,y1,s1, x2,y2,s2, ...) Kilka wykresów, gdzie: s1, s2 to opisane dalej łańcuchy znakówokreślające typ linii, kolor linii oraz rodzaj znacznika punktów

bar(x, y, s) Wykres słupkowy y(x), s = stosunek szerokości słupka do odstępumiędzy słupkami

bar(y) Wykres słupkowy wartości y a na osi x są ich numery

grid on Włącza siatkę wykresu (grid off – wyłącza)

title('Tytuł wykresu') Definiuje tytuł wykresu

xlabel('opis_x'); ylabel('opis_y') Definiują opisy osi x i y

text(x, y, 'napis') Dodaje napis w układzie współrzędnych

legend(s1, s2, s3, ...) Legenda: s1, s2, ... to opisy do poszczególnych wykresów

ezplot('wyrażenie',[xmin, xmax]) Wykres wyrażenia z jedną zmienną w podanym zakresie

ezpolar('wyrażenie') Wykres biegunowy w zakresie 0 do 2π, np.: ezpolar('1+cos(t)')

hold on Pozwala dodawać kolejne wykresy w tym samym układzie

axis([xmin xmax ymin ymax]) Ustawia zakresy dla osi x oraz y

axis equal Jednakowe skale na obu osiach

polar(kąt, promień, typ_linii) Wykres biegunowy

loglog(x, y, s) Wykres o skalach logarytmicznych na obu osiach

semilogx(x, y, s) Wykres o skali logarytmicznej na osi x, s = typ linii

semilogy(x, y, s) Wykres o skali logarytmicznej na osi x

plot3(x, y, z, s) Wykres liniowy w trzech wymiarach

mesh(x, y, z) Wykres - siatka 3D

surf(x, y, z) Wykres - powierzchnia 3D

subplot(Lw, Lk, nr)

przykład (cztery funkcje):

subplot(2, 2, 1); plot(x,y1(x))

subplot(2, 2, 2); plot(x,y2(x))

subplot(2, 2, 3); plot(x,y3(x))

subplot(2, 2, 4); plot(x,y4(x))

Powoduje podzielenie okna graficznego na kilka okienekpodrzędnych (tablicę okien), przy czym:

Lw = liczba wierszy, Lk = liczba kolumn,

nr = numer uaktywnianego okienka

Przykładowo gdy będą 4 okienka czyli Lw=2, Lk=2 to muszą być 4instrukcje subplot tak jak pokazano z lewej.

Page 27: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

277

Przykład wykresu liniowego:Rys. 3.2. Wykresy XY

% przykład 12

x=0 : 0.2 : 2*pi;

plot(x,sin(x));grid on

title('Przykład wykresu:');

xlabel('x');

ylabel('sin(x), cos(x)');

% a teraz drugi wykres

hold on % w tym samym układzieP=plot(x,cos(x), ':m');

set(P,'Linewidth',3);

legend('sinus','cosinus');

Wciśnięcie przycisku ze strzałką umożliwia wybieranie (myszką) i modyfikowanie elementów wykresu.

Rys. 3.3. Wykressłupkowy

% Przykład 13% Wykres% słupkowy:

x=0 : 0.2 : 2*pi; bar(x,sin(x)); grid on

Tabela 3.2. Opis znaków definiujących parametry wykresu liniowego (typu PLOT)

Znak Rodzaj linii Znak Znacznik punktu wykresu- ciągła + +-- kreskowana * *: kropkowana . kropka-. kreska-kropka o o

x xZnak Kolor linii s kwadraty yellow – żółty d rombm magenta – karmazynowy p gwiazdka pięcioramiennac cyan – turkusowy h gwiazdka sześcioramiennar red – czerwony v trójkąt z wierzchołkiem w dółg green – zielony ^ trójkąt z wierzchołkiem w góręb blue – niebieski < trójkąt z wierzchołkiem w lewow white – biały > trójkąt z wierzchołkiem w prawok black – czarny

Własności elementów wykresu można także zmieniać przy pomocy myszki już po wyświetleniuwykresu, korzystając z menu i paska narzędzi okna graficznego. A więc tak naprawdę niezbędna staje sięwiedza o „grafice uchwytów” dopiero przy budowaniu programów z interfejsem graficznym,polegającym na korzystaniu z sterujących elementów dialogowych UICONTROLS jak przyciski,suwaki, listy rozwijalne i inne, które krótko nazywać będziemy „kontrolkami”.

Page 28: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

288

3.3. Tworzenie i modyfikowanie okna graficznego (figure)Przy tworzeniu wykresu samoczynnie powstaje okno graficzne, jeśli jednak będziemy budować

interfejs graficzny programu lub chcemy aby kolejny wykres powstał w nowym oknie to musimy jeutworzyć komendą:

figure lub zmienna = figure;

Ta druga postać komendy tworzy i wyświetla okno oraz zapamiętuje jego identyfikator czyliuchwyt (handle) w zmiennej. Przykład:

F1 = figure;

Uchwyt F1 może być potem wykorzystywany zarówno do aktywacji tego okna (aby stało się„bieżącym”):

figure(F1)

- czyli wybrania w przypadku gdy otwartych jest kilka innych, jak i do zmieniania – komendami -jego cech np.:

set(F1,'Position',[5 40 790 300], 'Color', [0.5 0.5 0.9])

- ustali położenie i rozmiary okna na ekranie oraz jego kolor (niebieski).

Okno graficzne FIGURE - tak jak i pozostałe obiekty - ma wiele cech, niestety zbyt dużo aby jezapamiętać, ale trzeba znać przynajmniej niektóre często stosowane jak:

� Name - nazwa, która pokaże się w pasku tytułowym formatki i dobrze ją zmienić na nazwęnaszego tworzonego programu,

� Position - [Xp, Yp, Dx, Dy] - położenie lewego dolnego rogu Xp, Yp, oraz rozmiary Dx,Dy,domyślnie w pikselach ale można zadać inne jednostki zmieniając cechę Units;

� Color - kolor tła o składowych [red green blue] określany trzema liczbami z zakresu 0 do 1,

� MenuBar - który jeśli ma wartość 'figure' jest menu standardowym, a gdy 'none' to brak menu.

Przykład:set(F1,'Position',[5 40 790 300], 'Name', 'TESTOWANIE'...

, 'Color', [0.9, 0.7, 0.95], 'MenuBar', 'none');

Polecenie get(F1) pozwoli sprawdzić wartości cech okna F1, natomiast help figure wyświetliogólne objaśnienia.

3.4. UICONTROLs - KontrolkiObiekty uicontrol czyli w polskim tłumaczeniu "elementy sterujące interfejsu użytkownika" (bo

ui to user interface) będziemy krótko nazywać "kontrolkami".Budowanie interfejsu graficznego trzeba zacząć od opisanego już definiowania okna graficznego i

określenia jego cech. Następnie trzeba zaplanować jakie kontrolki będą nam potrzebne i zająć się ichdefiniowaniem.

Polecenie:zmienna = uicontrol(F1, 'Nazwa_Cechy', Wartość, 'Nazwa_Cechy', Wartość, ...)

Tworzy kontrolkę w oknie F1 i nadaje jej określone cechy (własności) oraz zapamiętuje jejuchwyt w zmiennej.

Pierwszą i najważniejszą cechą jest 'Style'. Jej wartość określa typ kontrolki (czyli po prostu czymona konkretnie jest) i może być jedną z następujących nazw opisanych w tabeli poniżej.

Oto przykład utworzenia suwaka o określonych wymiarach:

S1 = uicontrol('Style', 'Slider', 'Units', 'pixels', 'Position', [10, 20, 15, 40])

Jeśli nie podamy cechy 'Style' i jej wartości to domyślnie przyjęty będzie 'PushButton'. Ponieważ na-zwy są to wartości tekstowe (typu string) to trzeba umieszczać je w apostrofach. Zazwyczaj w nazwachniektóre litery pisze się jako duże aby poprawić czytelność np.: 'ToggleButton', 'RadioButton', 'CheckB-ox'. A oto dostępne typy kontrolek:

Page 29: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

299

Wartość cechy 'Style': Rodzaj kontrolki:

pushbutton Przycisktogglebutton Przełącznikradiobutton przycisk wyboru jednego z wielu

checkbox pole wyboru (wiele z wielu)edit pole edycyjne do wpisywania lub zmiany treścitext Napis (etykieta tekstowa)

slider Suwakframe Ramka

listbox Listapopupmenu Lista rozwijalna

Dla wszystkich kontrolek przydatna jest znajomość następujących cech:

Położenie rozmiary i jednostki miary:Position: [Xp, Yp, Dx, Dy]Units: pixels | normalized | inches | centimeters | points | characters |

Domyślnie: 'pixels'. Wszystkie jednostki określają położenie względem lewego dolnego roguformatki. Przy użyciu jednostek 'normalized' - lewy dolny róg formatki ma współrzędne (0,0) a prawygórny (1,1)

Dotyczące wyglądu:BackgroundColor - kolor tłaCdata - obrazek nakładany na obiekt (dany jako macierz)ForegroundColor - kolor tekstuSelectionHighlight - podświetlanie przy wybraniu (on | off)Visible - widzialny (on | off)TooltipString - opis w postaci dymku,FontName – nazwa czcionki,FontSize – rozmiar czcionki.

Oprócz tego pewne cechy mają szczególne znaczenie dla poszczególnych typów kontrolek.

Objaśnię je tylko dla kilku kontrolek najprzydatniejszych dla naszych potrzeb:

Tabela 3.3. Ważniejsze cechy wybranych kontrolekWartośćcechy 'Style' Rodzaj kontrolki Ważne cechy i działanie

pushbutton Przycisk set(uchwyt,'String', 'Napis na przycisku', 'Callback', 'Polecenie')- polecenie jest wykonywane po „wciśnięciu” przycisku myszką

edit pole edycyjnedo wpisywania lubzmiany treści

set(uchwyt,'String', ' tekst')wartość wpisaną w polu odczytamy przez:x = str2double(get(uchwyt, 'String'));

text Napis(etykieta tekstowa)

set(uchwyt,'String', ' Napis')

slider Suwak ustawiamy: set(uchwyt,'Min', 'wart.min', 'Max', 'wart.maks')odczytujemy: x=get(uchwyt,'Value');

popupmenu Lista rozwijalna definiujemy pozycje menu:set(uchwyt, 'String', ' opcja1 | opcja2 |opcja3');odczytujemy: x=get(uchwyt,'Value');

3.4.1. Ćwiczenia z kontrolkami

A) Przeanalizuj poniższy program a następnie utwórz w edytorze trzy podane niżej pliki a potemuruchom i przetestuj program „kontrolki1”:

% Przykład 14

% ten program zapisz do pliku „kontrolki1.m”

clear; clc;

y=20;

% ------ Definiowanie okna graficznego:

f1=figure('position',[40,40,700,500]);

set(f1,'color',[0.5 0.5 0]);

%------- Definiowanie przycisku:

przycisk1=uicontrol('string','SKOCZ', 'Callback','przyrost');

%------- Definiowanie napisu

Page 30: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

300

napis1=uicontrol('Style','text', 'string','TU JESTEM')set(napis1,'position',[100,y,80,20])

%------- Definiowanie suwaka:

suwak1=uicontrol('style','Slider', 'position',[20,50,20,140]);

set(suwak1,'Callback','kolor')

% tą procedurę zapisz do pliku „kolor.m”

bb=get(suwak1,'Value');set(f1,'Color',[1-sqrt(bb) bb bb^4]);

% tą procedurę zapisz do pliku „przyrost.m”

y=y+40;

if y>500

y=0

end

set(napis1,'position',[100+y,y,80,20])

Uwaga: Jak dotychczas Freemat 3.5 oraz Scilab 5.3 nie obsługują w pełni występujących tu komend.

B) Napisz program który wyświetla (w oknie f1=figure) wykres wielomianu trzeciego stopnia:

dcxbxaxxW +++= 23)( jak na rysunku poniżej:

przy czym a=1, c=2 natomiast wartości współczynników b i d, mają być ustalane suwakami wokreślonych zakresach.

Wielomian wraz z wartościami współczynników ma się wyświetlać jako tytuł wykresu:[’x^3 + ’, num2str(a), ’x^2 + ’, num2str(b), ’x + ’, num2str(c)].

Do wyznaczania pierwiastków zastosowano funkcję roots(), której wyniki też mają się wyświetlićw oknie graficznym.

Poniżej masz zawartość trzech plików: pierwiastki.m, rysuj.m, nowe.mUtwórz takie pliki i uzupełnij miejsca kropek .... odpowiednimi poleceniami., a nastepnie uruchom i

sprawdź działanie. Zmodyfikuj kolor i tytuł okna graficznego.% program pierwiastki

% cz.1 INICJACJA - jednorazowa

clear;clc

a=[1 5 2 20];

r=roots(a);

xp=min(real(r))-5; xk=max(real(r))+5;

x=linspace(xp,xk);

f1=figure;

a1=axes('position',[0.06,0.06,0.5,0.85]);

Page 31: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

311

%---- Tekst i suwak dla współczynnika b:t1=uicontrol('style','text','units','normalized','position',[0.6,0.85,0.1,0.05]);

s1=uicontrol('style','slider','units','normalized','position',[0.71,0.85,0.28,0.05

]);

set(s1,'Min',-20,'Max',20,'Callback','nowe');

%---- Tekst i suwak dla wyrazu wolnego d:

t2=....

s2=....

set(s2,'Min',-500,'Max',500,'Callback','nowe');

%----

t03=uicontrol('style','text','units','normalized','position',[0.6,0.65,0.2,0.04]);

set(t03,'string','Pierwiastki:')

%---- Wyświetlanie wartości pierwiastków

t3=uicontrol('style','text','units','normalized','position',[0.6,0.60,0.2,0.04]);

t4=....

t5=....

rysuj;

% procedura rysuj

% wyznaczenie ciągu wartości wielomianu

% dla danego wektora wspolczynnikow a

% oraz ciągu wartości x wyznaczonego przez: x=linspace(xp,xk)

y=polyval(a,x);

plot(x,y); grid on

st=['W(x)=x^3+',num2str(a(2)),'x^2+',num2str(a(3)),'x+',num2str(a(4))

];

title(st);

set(t1,'string',['b=',num2str(a(2))]);

set(t2,'string',['d=',num2str(a(4))]);

set(t3,'string',['r1=',num2str(r(1))]);

set(t4,'string',['r2=',num2str(r(2))]);

set(t5,'string',['r3=',num2str(r(3))]);

% procedura nowe

a(2)=get(s1,'Value');

a(4)=get(s2,'Value');

r=roots(a); % wyznacza 3 pierwiastki (takze zespolone)

xp=min(real(r))-5; xk=max(real(r))+5;

x=linspace(xp,xk); % wyznacza ciąg 100 wartości x między xp xk

rysuj; % wywoluje procedure rysuj

3.5. GUIDE – środowisko typu RADTak jak w innych językach programowania, Mathcad wprowadził możliwość korzystania z tak

zwanego "środowiska do szybkiego tworzenia aplikacji" (RAD = Rapid Application Development) –podobnego do Delphi, Visual Basic'a czy C++ Builder'a.

Po wpisaniu w oknie komend komendy „guide” pojawi się puste okno projektowanej aplikacjizwane tu "figure" - zupełnie analogiczne jak "form" w Visual Basic'u dlatego jest nazywane przezanalogię formatką lub oknem graficznym (albo oknem aplikacji). Z lewej strony tego okna mamypaletę elementów dialogowych – zwanych kontrolkami - które możemy wstawiać na naszą formatkę.

Przy zapisywaniu utworzonego projektu formatki do pliku z rozszerzeniem ".fig", domyślniewytwarza się prototyp programu obsługującego tą formatkę i zapisuje się do pliku z rozszerzeniem ".m".Nazwy obu plików (przed rozszerzeniami nazw) są jednakowe. A więc jeśli nasz projekt zapiszemy dopliku o nazwie TEST1 to wytworzą się pliki test1.fig oraz test1.m.

W pliku prototypu programu (np. test1.m) czyli głównej funkcji skojarzonej z plikiem projektuformatki (np. test1.fig), GUIDE wstawia automatycznie prototypy podfunkcji i ustawia własności"callback" tak aby wywoływały te podfunkcje.

Page 32: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

322

Oprócz wstawiania kontrolek obecnych w GUIDE, można te i inne kontrolki tworzyć przezwywoływanie odpowiednich funkcji a mianowicie:

Tabela 3.4. Funkcje tworzące elementy dialogu bez okna figure

Funkcja Opismenu Okienko menu działające bez tworzenia "figure"

uigetfile Okienko otwierania plikówuicontextmenu Menu kontekstoweuicontrol Do tworzenia różnorodnych "kontrolek" na formatce "figure"uimenu Tworzenie wielopoziomowego menu na formatce "figure"

W wersjach Matlaba nowszych niż 6 są dodatkowo:

uibuttongroup Panel do gromadzenia przełączników "radio buttons" i "toggle buttons"uipanel Panel dla obiektówuitoolbar Tworzy pasek narzędzi "toolbar" na formatce "figure"uipushtool Przycisk "push button" na pasku "toolbar"uitoggletool Przycisk "toggle button" na pasku "toolbar"

Każdy obiekt - a więc zarówno kontrolki jak i samo okno aplikacji czyli "okno graficzne" –posiada swoje własności które można zmieniać. Gdy klikniemy podwójnie dany obiekt to pokaże sięokno "Inspektora Własności" (Property Inspector) z wykazem własności klikniętego obiektui konkretnymi wartościami (ustawieniami) tych własności.

Działający już program musi reagować na różne zdarzenia a w szczególności działaniaużytkownika przy pomocy myszki i klawiatury. Zdarzeniom uznanym przez twórcę programu za istotnedla obsługi programu – muszą odpowiadać wywołania funkcji realizujących odpowiednie operacje.

Łatwość budowania aplikacji w GUIDE jest nieco pozorna i dotyczy głównie rozmieszczeniaelementów. Potem trzeba zająć się zrozumieniem wygenerowanych komend i rozbudowywaniemprogramu przez dopisywanie innych komend.

Dlatego uznałem, że wykracza on poza program tego semestru.

Page 33: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

333

4. Macierze i podstawy działań na macierzachTradycyjnie tablice jedno dwu lub więcej wymiarowe nazywa się w Matlabie macierzami (wiąże się

to z nazwą: Matlab = MATrix LABoratory), choć matematycznie poprawniej byłoby nazywaćmacierzami tylko tablice dwuwymiarowe.

Tak więc nazwy tablica i macierz traktować będziemy jako synonimy.Tablica to zbiór elementów jednakowego typu identyfikowanych przez wspólną nazwę oraz

indywidualne numery. W tablicy dwuwymiarowej elementy są ustawione w prostokątnym obszarze wwierszach i kolumnach. Dowolny element tablicy o nazwie A ma identyfikator:

A(numer_wiersza, numer_kolumny)

Indeksy (numery wiersza i kolumny) zapisuje się po nazwie tablicy w nawiasach okrągłych. Każdatablica prostokątna ma określoną liczbę wierszy i kolumn co można sprawdzić funkcją size:

[Liczba_wierszy Liczba_kolumn] = size(Macierz)

Wektor wierszowy to tablica o jednym tylko jednym wierszu czyli rozmiarach [1, n], a wektorkolumnowy tablica o jednej kolumnie czyli rozmiarach [n, 1]

4.1. Deklarowanie tablic

Deklarowanie typu i wymiarów tablic odbywa się automatycznie - przez rozpoznanie rodzajuwpisanych wartości oraz maksymalnych wskaźników. Jeśli elementy tablicy generujemy w pętli tomoże niepotrzebnie wielokrotnie wystąpić operacja powiększania rozmiarów tablicy np.:

>> for i=1:4; A(i)=2*i; A, end;

A =

2

A =

2 4

A =

2 4 6

A =

2 4 6 8

Aby nie marnować na to czasu komputera wskazane jest przed generowaniem elementów tablicyzarezerwować dla niej miejsce w pamięci przez wstawienie zera do elementu o maksymalnychwartościach wskaźników np.:

>> clear

>> B(4)=0, for i=1:4; B(i)=2*i; B, end;

B =

0 0 0 0

B =

2 0 0 0

B =

2 4 0 0

B =

2 4 6 0

B =

2 4 6 8

Jeszcze lepiej unikać pętli FOR gdyż Matlab jest zoptymalizowany dla operacji macierzowych:>> clear

>> i=1:4; B=2*i

B =

2 4 6 8

Uwagi te dotyczą także większej liczby wymiarów. Na przykład można zadeklarować macierzpodając jej ostatni element:

>> A(2,3)=0.

Page 34: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

344

A =0. 0. 0.

0. 0. 0.

Jeśli potem w programie wystąpią większe wartości wskaźników to macierz zostanie powiększona.Na przykład instrukcja A(3,5)=2 spowoduje następującą zmianę macierzy:

>> A(3,5)=2.

A =

0. 0. 0. 0. 0.

0. 0. 0. 0. 0.

0. 0. 0. 0. 2.

4.2. Oznaczenia i sposoby wprowadzaniaWektory i macierze mogą być wprowadzane przez:

1. wpisywanie w oknie komend lub w m-plikach, np.: TAB_A=[3.56, 2.56; 0.1, 0.99];2. generowanie przez operatory, funkcje i komendy Matlab’a, np.: B=ones(2,3);3. wczytywanie z pliku dyskowego.

Przy wprowadzaniu, wyświetlaniu i operowaniu na wektorach i macierzach używane są znaki specjalneobjaśnione w tabeli poniżej.

Tabela 4.1. Znaki specjalne używane dla macierzy i w innych rolach

Znaki Objaśnienie

[ ] w nawiasach prostokątnych umieszcza się wartości elementów macierzyprzy czym elementy wiersza oddziela się przecinkami lub spacjaminatomiast średnik odseparowuje poszczególne wiersze, na przykład:

Macierz = [12.3, 14.1, 34.5; 2.76, 8.34, 7.12]to macierz o dwu wierszach i trzech kolumnach

{ } nawiasy klamrowe są używane przy definiowaniu tzw. macierzy komórkowych

( ) nawiasy okrągłe używamy 1) dla wskaźników macierzy, 2) w wyrażeniach oraz3) dla argumentów funkcji

: dwukropek ma kilka znaczeń:1) w definicji ciągu oddziela dwa lub trzy elementy na przykład: 5:2:13 oznacza: "ciąg od 5 z przyrostem 2 do 13" 5:10 oznacza: "ciąg od 5 do 10 domyślnie z przyrostem 1"2) dwukropek zamiast wskaźnika wektora lub macierzy zastępuje wszystkie wartościtego wskaźnika na przykład A(3,:) oznacza wszystkie elementy trzeciego wiersza3) dwukropek zamiast pary wskaźników macierzy np. A(:) to wektor kolumnowyotrzymany ze sklejenia wszystkich kolumn macierzy

= przypisuje zmiennej wartość wyrażenia n.p.: x=2*sin(pi/6)

. kropka poprzedza część ułamkową liczby (lub nazwę pola rekordu)

, przecinek rozdziela 1)indeksy, 2)argumenty funkcjilub 3)poszczególne instrukcje (zamiast zmiany linii)

; oddziela 1)wiersze macierzy, 2)instrukcje – blokując tzw. “echo”

Pomoc dotyczącą nawiasów można uzyskać wpisując: help paren

4.2.1. Wektor (ciąg) generowany jako postęp arytmetyczny

Aby wygenerować ciąg (postęp arytmetyczny) trzeba podać informacje w następującej formie:

nazwa_wektora = pierwszy element : przyrost lub ubytek : ostatni element

Na przykład: x=0:0.2:1x = 0 0.2000 0.4000 0.6000 0.8000 1.0000

Zauważmy, że nie da się wykonać działań mnożenia x*x albo potęgowania x^2 !Dlaczego?Bo x jest wektorem wierszowym czyli ogólniej macierzą a działania: [*] i [^] to działania

macierzowe (o których mowa dalej). Da się natomiast zrealizować działania tablicowe:x.*x oraz x.^2

Page 35: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

355

Jeśli przyrost w ciągu arytmetycznym ma być równy 1 to można go pominąć w zapisie np.: i = 1:6daje w wyniku:

>> i = 1 2 3 4 5 6Jak widać w ten sposób możemy otrzymać zarówno bezpośrednio ciąg (wektor) wartości zmiennej, jaki ciąg indeksów, który możemy z kolei wykorzystać do generowania poszczególnych wartości zmiennejlub funkcji:

>>z(i)=2*i z = 2. 4. 6. 8. 10. 12.

>>p=2*i p = 2. 4. 6. 8. 10. 12.

Przy definiowaniu pojedynczych elementów „z(i)” zmienna „i”pełni rolę indeksu, natomiast przy definiowaniu „p” – zarówno „i”jak „p” są traktowane jak wektory. Widać więc, że w Matlabiewszystkie zmienne traktowane jak wektory.

4.2.2. Wprowadzanie wektorów i macierzy

Wprowadzanie wektora:Przykładem wektora (ciągu) wpisanego z klawiatury mogą być wyniki pomiarów napięcia w sieci

elektrycznej w ciągu doby:U = [220, 221, 220, 218, 218, 219, 220, 221]

Wprowadzanie macierzy:Aby wpisać macierz w oknie komend należy przecinkiem oddzielać elementy wiersza a

średnikiem oddzielać wiersze, np.:>> A = [1, 2, 3,4; 7, 8, 9,10] A = 1 2 3 4 7 8 9 10

4.2.3. Rola dwukropka w wybieraniu elementów macierzy

Podane już (w tabeli) funkcje dwukropka mogą być wykorzystywane do wybierania elementówtabel. Na przykład dla wprowadzonej wcześniej macierzy A:

A(:, 2) % dwukropek oznacza wiersze wszystkie a 2 to wybrana druga kolumna:ans = 2 8

A(:, 2:3) % wybieramy kolumny 2 i 3:ans = 2 3 8 9

A(:, 1:2:4) % wybieramy kolumny od 1 co 2 do 4ans = 1 3 7 9

A(2, :) % wybieramy drugi wiersz (a kolumny wszystkie):ans = 7 8 9 10

A(: , :) % to w tym przypadku to samo co A czyli cała macierz:ans = 1 2 3 4 7 8 9 10

A(:) % wymusza natomiast zamianę macierzy na wektor (kolumnami)ans =

Page 36: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

366

1 7 2 8 3 9 4 10

4.2.4. Generowanie macierzy

Do generowania pewnych macierzy można stosować funkcje:zeros(Lw,Lk): macierz wypełniona zerami np.:

>>A = zeros(2,3)ans =

0 0 0 0 0 0

ones(Lw,Lk): macierz wypełniona jedynkami np.:>>A = ones(2,4)ans =

1 1 1 1 1 1 1 1

rand(Lw,Lk): macierz liczb pseudolosowych o rozkładzie równomiernym np.:>>A = rand(2,5)ans =

0.9501 0.6068 0.8913 0.4565 0.8214 0.2311 0.4860 0.7621 0.0185 0.4447

eye(N): macierz jednostkowa (kwadratowa N x N z jedynkami na przekątnej głównej i zerami np.:>>A = eye(3)ans =

1 0 00 1 00 0 1

Wiele innych macierzy można generować programami z użyciem instrukcji FOR i innych.

4.2.5. Wczytywanie macierzy z pliku

Załóżmy, że mamy plik tekstowy o nazwie DANE1.TXT a w nim są dwie linie i w każdej po 4liczby oddzielane odstępami:

2 4 6 8

3 6 9 12

Aby wczytać te liczby do macierzy można napisać następujące instrukcje:% przyklad 15

[plik1 info] = fopen('DANE1.TXT');

A = fscanf(plik1, '%f %f %f %f', [4, 2])

close(plik1)

Ale UWAGA: dane czytane są z pliku wierszami ale umieszczane w macierzy kolumnami,dlatego po wczytaniu uzyskamy macierz:

A = 2 3 4 6 6 9 8 12

Aby uzyskać to samo co w pliku trzeba macierz transponować (jak niżej):>>A=A.’

A=2 4 6 8

3 6 9 12

Page 37: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

377

4.3. Działania na macierzachPamiętajmy, że operatory działań arytmetycznych dotyczą nie tylko skalarów ale ogólnie

macierzy. Operatory poprzedzone kropką nie reprezentują działań macierzowych lecz tablicowe toznaczy działają na odpowiadających sobie parach elementów dwu macierzy. Obie macierze musząwówczas mieć te same wymiary chyba że jedna z nich jest skalarem.

Tabela 4.2. Macierzowe operatory arytmetyczne w Matlabie:Operator Objaśnienie

+ lub .+ dodawanie skalarów lub odpowiadających sobie elementów macierzy(macierzy o identycznych wymiarach)

- lub .- odejmowanie (j.w.) lub zmiana znaku

* mnożenie macierzowe (dla A*B liczba kolumn w A musi być równa liczbie wierszy w B)

/ dzielenie prawostronne: x=a / b jest rozwiązaniem równania: x*b=a

\ dzielenie lewostronne macierzy, x=a\b jest rozwiązaniem równania a*x=b;(zamiast odwracania: inv(a)*b lepiej użyć a\b)

^ potęgowanie macierzowe a^2 = a*a (mnożenie macierzowe)

.* mnożenie tablicowe czyli odpowiadających sobie par elementów macierzy (o identycznychwymiarach)

./ dzielenie tablicowe (dotyczy elementów macierzy, wymiary muszą być identyczne)

.^ potęgowanie tablicowe (dotyczy elementów macierzy o identycznych wymiarach)

.' transponowanie macierzy (zamiana wierszy na kolumny)

' sprzężenie (dla liczb zespolonych) lub transpozycja (dla liczb rzeczywistych)

Transponowanie - to operacja polegająca na zamianie wierszy macierzy na kolumny.

Operatorem transponowania jest w Matlabie kropka i apostrof [.']. Dla macierzy o wartościach niebędących liczbami zespolonymi wystarczy sam apostrof (dla zespolonych jest to operacja tworzeniamacierzy sprzężonej).

Przykładowo jeśli:A = 2 3 4 6 6 9 8 12to macierz transponowana:A' = 2 4 6 8 3 6 9 12

Suma i różnicaDla sumowania oraz odejmowania macierze muszą mieć jednakowe wymiary, sumowane są

elementy o tych numerach.A=[4, 2, 3; 3, 6, 1 ], B=[5, 3, 8; 4, 1, 2]A = 4 2 3 3 6 1B = 5 3 8 4 1 2

A+Bans = 9 5 11 7 7 3

Mnożenie macierzy lub ich elementów

Page 38: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

388

Rozróżniane jest mnożenie macierzowe (*) oraz tablicowe (.*)W mnożeniu macierzowym każdy element macierzy wynikowej powstaje przez pomnożenieodpowiedniego wiersza pierwszej macierzy przez kolumnę drugiej i zsumowaniu iloczynów parwyrazów. Wynika z tego warunek aby liczba elementów wiersza macierzy pierwszej była równa liczbieelementów w kolumnie macierzy drugiej. Dlatego dla naszych macierzy A i B zostanie zasygnalizowanybłąd:

>> A*B??? Error using ==> * Inner matrix dimensions must agree.

Natomiast wykonalne będzie to działanie gdy macierz B transponujemy:>> A*B'ans = 50 24 41 20Bez transponowania można wykonać tak zwane mnożenie tablicowe (operator: kropka i gwiazdka).

W tym mnożeniu element macierzy wynikowej C(w,k) jest po prostu iloczynem pary elementówA(w,k)*B(w,k). Na przykład:

>> A .* Bans = 20 6 24 12 6 2

4.4. Wykresy trójwymiaroweRysowanie wykresów trójwymiarowych w najprostszym przypadku przebiega dwuetapowo:

1) przygotowanie siatki par współrzędnych (x,y) dla funkcji z=f(x,y) przy pomocy funkcji meshgrid2) użycie jednej z wielu funkcji dla wykresów trójwymiarowych

Funkcji meshgrid podajemy jako argumenty ciągi (wektory) wartości x oraz y a w wynikuuzyskujemy dwie macierze zawierające łącznie wszystkie pary współrzędnych dla któych mają byćwyznaczane wartości funkcji zmiennych x,y.

Na przykład:>> [x y] = meshgrid(0:0.1:0.3, 1:3)x = 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000y = 1 1 1 1 2 2 2 2 3 3 3 3Tak więc funkcja wyliczana będzie dla (0, 1); (0.1, 1); (0.2, 1), ... i tak dalej.Matlab posiada bardzo wiele funkcji dla wizualizacji linii i powierzchni trójwymiarowych.Niektóre z nich pokazano na przykładzie poniżej:

% najpierw siatka punktów (x,y) dla wykresu 3D:[x,y]=meshgrid(-3*pi : 0.5 : 3*pi, -3*pi : 0.5 : 3*pi);% następnie definiujemy funkcję z(x,y):z = 600 – x .* y + 50 * sin(x) + 50 * sin(y);% przy pomocy funkcji subplot% wybieramy ćwiartki okna graficznego% i wyświetlamy w nich wykresy 3D:% 1) wykres siatkowy:subplot(2,2,1); mesh(x,y,z);% 2) wykres powierzchniowy:subplot(2,2,2); surf(x,y,z);% 3)wykres warstwicowy:subplot(2,2,3); contourf(x,y,z);% 4)wykres siatkowy z warstwicami:subplot(2,2,4); meshc(x,y,z);

Rys. 4.1. Wykresy 3D

Page 39: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

399

Ogólnie przy sporządzaniu wykresów trójwymiarowych mogą wystąpić etapy i funkcjeprzedstawione w tabeli poniżej – Nie podano ich opisu traktując te informacje jako zachętę do dalszegostudiowania Matlab'a:

Etap: Przykład:Przygotowanie danych Z = peaks(20);

Otwarcie lub wybranie okna graficznego i ewentualniepozycji w tym oknie

figure(1)subplot(2,2,1)

Wywołanie funkcji wykresu h = surf(Z);

Wybranie palety (mapy) kolorów i sposobucieniowania

colormap hotshading interpset(h,'EdgeColor','k')

Zdefiniowanie źródła światła light('Position',[-2,2,20])lighting phongmaterial([0.4,0.6,0.5,30])set(h,'FaceColor',[0.7 0.7 0],...'BackFaceLighting','lit')

Ustalenie punktu widzenia view([30,25])set(gca,'CameraViewAngleMode','Manual')

określenie parametrów osi axis([5 15 5 15 −8 8])set(gca'ZTickLabel','Negative||Positive')set(gca,'PlotBoxAspectRatio',[2.5 2.5 1])

zdefiniowanie tekstów opisów wykresu, osi i legendy xlabel('X Axis')ylabel('Y Axis')zlabel('Function Value')title('Peaks')

wydrukowanie lub eksport wykresu do pliku set(gcf,'PaperPositionMode','auto')print −dps2

Page 40: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

400

5. Przykładowe zastosowania MatlabaWiele przykładowych zastosowań można oglądać jako programy demonstracyjne. Wystarczy w tym celuwpisać komendę: demo a następnie wybrać przykład z wykazu.

5.1. Układ równań liniowych.Przypomnijmy sobie najpierw z matematyki ideę rozwiązywania układu N równań liniowych z N

niewiadomymi - metodą odwracania macierzy - na przykładzie trzech równań:

Załóżmy, że mamy rozwiązać układ trzech równań (z trzema niewiadomymi x, y, z):2x - 6y = 8.56z-5y + z = 0x + y +z = 15.5

1. Trzeba najpierw nasz układ równań doprowadzić do regularnej postaci, zastępując dotychczasowenazwy zmiennych nazwami x(1), x(2), x(3) – czyli wprowadzając wektor niewiadomych x – orazformując dla każdej niewiadomej jedną kolumnę oraz przenosząc na stronę prawą wszystkie "wyrazywolne" . Ogólnie powinno to wyglądać tak:

a(1,1)*x(1) + a(1,2)*x(2) + a(1,3)*x(3) = c(1)a(2,1)*x(1) + a(2,2)*x(2) + a(2,3)*x(3) = c(2)a(3,1)*x(1) + a(3,2)*x(2) + a(3,3)*x(3) = c(3)

W naszym przypadku, po zastąpieniu nazw x, y, z nazwami x(1), x(2), x(3) otrzymamy:

2*x(1) - 6*x(2) - 8.56*x(3) = 00*x(1) - 5*x(2) + 1*x(3) = 01*x(1) + 1*x(2) + 1*x(3) = 15.5

Znając procedurę mnożenia macierzowego, łatwo stwierdzić, że jeśli zdefiniujemy – w ogólnymzapisie - następujące macierze:

=

=

=

)3(

)2(

)1(

)3(

)2(

)1(

)3,3()2,3()1,3(

)3,2()2,2()1,2(

)3,1()2,1()1,1(

c

c

c

c

x

x

x

x

aaa

aaa

aaa

a

a konkretnie w naszym przypadku:

=

−−

=

5.15

0

0

111

150

56.862

ca

to układ trzech równań liniowych można zapisać macierzowo jako:a*x=c

gdzie: a=macierz współczynników przy niewiadomych,x=wektor niewiadomych,c= wektor wyrazów wolnych.

2. Drugi krok (po uporzadkowaniu) to więc wpisanie w Matlabie (albo SciLabie jak poniżej) macierzya oraz c:-->a=[2, -6, -8.56; 0, -5, 1; 1, 1, 1]

a =

2. - 6. - 8.56

0. - 5. 1.

1. 1. 1.

-->c=[0;0;15.5]

c =

0.

0.

15.5

Page 41: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

411

3. Wtedy rozwiązanie czyli wektor niewiadomych x wyznaczamy przez lewostronne pomnożenie obustron równania przez macierz odwrotną do a zapisywaną w Matlabie jako inv(a):

inv(a)*a*x= inv(a)*ca ponieważ iloczyn macierzy danej i odwrotnej jest macierzą jednostkową którą można pominąć

więc rozwiązanie dowolnego układu równań liniowych otrzymamy przy pomocy jednego wzoru:

x = inv(a)*c

Jednakże Matlab nie zaleca stosowania funkcji inv(..) a zamiast niej poleca dzielenie lewostronnemacierzy (operator „\” w odróżnieniu od dzielenia prawostronnego „/”) jako mniej pracochłonne dlakomputera niż odwracanie macierzy. W szczególności dla naszego układu równań liniowych stosująclewostronne dzielenie mamy: a\a*x=a\c a więc po uproszczeniu uzyskujemy:

Rozwiązanie układu równań liniowych: a*x=cto: x = a\c

Matlab stosuje wówczas wydajniejszą metodę eliminacji Gauss’a zamiast pracochłonnegoodwracania macierzy, co skraca czas obliczeń 2 do 3 razy i poprawia dokładność.

Oto obie metody i ich wyniki uzyskane w SciLabie:

// metoda z odwracaniem macierzy

-->x=inv(a)*c

x =

12.440789

0.5098684

2.5493421

// metoda z dzieleniem prawostronnym

-->x=a\c

x =

12.440789

0.5098684

2.5493421

5.1.1. Ćwiczenia z macierzami i układami równań liniowych

A) Rozwiąż w Matlabie układ równań liniowych mając daną macierz współczynników M oraz wektorwyrazów wolnych C:

B) Dodatkowo wpisz odpowiednią komendę aby wyswietlić:1) macierz transponowaną wzgledem M oraz C2) wyznacznik macierzy M używając funkcji det(macierz kwadratowa)3) pierwszą a potem drugią kolumnę macierzy M (używając wyrażenia z dwukropkiem)4) elementy macierzy M z indeksami 1,1 oraz 2,25) liczbę elementów wektora C przy pomocy funkcji length(wektor)6) rozmiary macierzy M oraz C przy pomocy funkcji size(macierz)Jak numerowane są elementy wektorów i macierzy (od 0 czy od 1)?

C) Wyznacz siły reakcji mając dane obciążenie FG oraz własności geometryczne i korzystając z równaństatyki na płaszczyźnie:

Page 42: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

422

5.2. Pierwiastki wielomianuWielomian n-tego stopnia jest funkcją jednej zmiennej jednoznacznie zdefiniowaną przez wektor

wartości współczynników a:

)1(*)(...*)2(*)1()( 1 +++++= − naxnaxaxaxW nn

Funkcja roots(a) wyznacza pierwiastki wielomianu czyli rozwiązanie równania W(x)=0.

Zauważmy, że kolejność definiowania współczynników w wektorze musi być odwrotna niż to byłow Mathcadzie, a mianowicie: pierwszy element wektora a to współczynnik przy najwyższej potędze aostatni to wyraz wolny. Oto na przykład rozwiązanie równania: –3*x^2 + 2*x + 1=0 w Scilabie:

-->aa=[-3 2 1]

aa=

- 3. 2. 1.

-->roots(aa)

ans =

1.

- 0.3333333

Jeśli po wpisaniu współczynników do wektora chcemy jeszcze zrobić wykres wielomianu toniezbyt wygodne byłoby ponowne wpisywanie współczynników. Można więc skorzystać z funkcjipolyval(a, xp), która wyznacza wartość wielomianu dla danego wektora współczynników „a” oraz danejwartości x=xp. Jeśli za xp wstawimy ciąg wartości zmiennej niezależnej to otrzymamy ciąg wartościwielomianu potrzebny do wykresu.

5.2.1. Ćwiczenia – pierwiastki wielomianu

Sporządź wykres oraz wyznacz pierwiastki dla wielomianów:

A) 6,12507,25,3)( 23 +−+−= xxxxWA

B) 5007,205,0)( 25 −+= xxxWB

Uwaga: pamiętaj o regułach składni

Page 43: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

433

5.3. Rozwiązywanie równań nieliniowychDo rozwiązywania równań nieliniowych (i ich układów) służy w Matlabie m.in. funkcja:

fzero(f, x0)gdzie: f - to łańcuch tekstowy z nazwą funkcji lub wyrażeniem

x0 – to punkt startowy do poszukiwania pierwiastka

Spróbuj jednak samodzielnie napisać programy rozwiązujące równanie nieliniowe.

Numeryczne rozwiązywanie równania f(x) = 0, zwane inaczej znajdowaniem pierwiastków alboznajdowaniem miejsc zerowych funkcji f(x), wymaga najczęściej najpierw określenia przedziałóww których takie pierwiastki się znajdują. W każdym takim przedziale (A; B) funkcja przechodząc przezzero zmienia znak, a więc wartości f(A), f(B) mają różne znaki: f(A) · f(B) < 0.

Dla dokładniejszego wyznaczenia pierwiastka xp w takim przedziale stosowane są różne metody,z których trzy opisano poniżej. We wszystkich trzech metodach muszą być spełnione warunki:

1) funkcja f(x) jest ciągła w przedziale [A; B],2) na końcach przedziału [A; B] funkcja ma różne znaki,3) w przedziale tym istnieje dokładnie jeden pierwiastek,

- a dodatkowe warunki zależą od przyjętej metody.

Metody te są metodami iteracyjnymi w których powtarza się pewien cykl operacji a dokładnośćzależy od liczby powtórzeń. Sygnałem do zakończenia iteracji jest spełnienie pewnego „warunku stopu”,na przykład stwierdzenie, że wartość funkcji w znalezionym punkcie xp dostatecznie mało różni się odzera albo, że kolejna wartość xp dostatecznie mało różni się od poprzedniej.

5.3.1. Metoda bisekcji

Rys. 5.1. Metoda bisekcji

Metoda bisekcji zwana też „metodą połowienia” albo „równego podziału” polega na wyznaczeniupierwszego przybliżenia pierwiastka xp jako środka przedziału [A; B], a następnie przyjęcia jakonowego przedziału [A; B] tej z dwu połówek w której funkcja zmienia znak. Inaczej mówiąc końceprzedziału A i B są przesuwane coraz bliżej pierwiastka, co pokazano na Rys. 5.1 jako A1, A2, ...; B1,B2, ...

Algorytm można wyrazić w następujących krokach:1. wczytaj wartości A i B oraz e;2. oblicz Xs=(B-A)/2;3. jeśli |f(Xs)|<e to jako xp przyjmij wartość Xs i zakończ obliczenia a jeśli nie to:4. jeśli f(A)·f(Xs)<0 to jako nową wartość B przyjmij Xs a w przeciwnym przypadku jako nową

wartość A przyjmij Xs i skocz do punktu 2.

5.3.2. Metoda stycznych

Metoda stycznych (zwana również metodą Newtona-Raphsona lub metodą Newtona) to iteracyjnyalgorytm wyznaczania przybliżonej wartości pierwiastka funkcji.

Oprócz warunków (1) i (2) pierwsza pochodna f’(x) i druga pochodna f”(x) funkcji f(x) musi miećw przedziale (A; B) stały znak.

Page 44: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

444

Rys. 5.2. Metoda stycznych

Za wartość początkową x1 szukanego pierwiastka xp przyjmuje się ten kraniec przedziału, dlaktórego znak funkcji i znak drugiej pochodnej są jednakowe (Rys. 5.2). Następnie wyznaczana jeststyczna do krzywej w tym punkcie. Odcięta x2 punktu przecięcia stycznej z osią x jest przyjęta jest jakokolejne przybliżenie rozwiązania. Z punktu x2; f(x2) wystawiana jest kolejna styczna, znajdowanykolejny punkt x3 jej przecięcia z osią x i cykl ten może być powtarzany aż do spełnienia określonego„warunku stopu”.

Równanie prostej o współczynniku kierunkowym m przez punkt o współrzędnych x1, f(x1) to: y -f(x1) = m·(x-x1). Ponieważ współczynnik kierunkowy jest równy wartości pochodnej (tangensowi kątanachylenia stycznej) więc: y – f(x1) = f’(x1) · (x-x1). Z tego, dla y=0, wyznaczamy odciętą x punktugdzie styczna przecina oś odciętych, oznaczoną x2:

x2 = x1 – f(x1) / f’(x1)

Tak więc algorytm można zapisać w następujących punktach:1. jeśli znak(f(A)) = znak(f”(A) to xp:=A, w przeciwnym przypadku xp:=B,2. wyznacz nową wartość xp ze wzoru: xp := xp – f(xp) / f’(xp),3. jeśli |f(xp)|>e to wróć do punktu 2 a jeśli nie to zakończ,

przy czym wartość parametru e określa dokładność obliczeń, natomiast znak „:=” jest znakiem podstawiania.

5.3.3. Metoda siecznych

Metoda siecznych, zwana też „metodą interpolacji liniowej”, „metodą Eulera” lub „regułą falsi”polega na zastępowaniu przebiegu funkcji nieliniowej w przedziale [A; B] linią prostą „sieczną”, toznaczy przechodzącą przez punkty (A, f(A)) oraz (B, f(B)).

Rys. 5.3. Metoda siecznych

Za przybliżoną wartość pierwiastka xp przyjmowana jest odcięta punktu przecięcia siecznej z osiąx, a następnie koniec przedziału A lub B zostaje przemieszczony do xp, tak aby w nowym węższymprzedziale funkcja nadal zmieniała znak.

Procedura jest więc podobna jak w metodzie bisekcji tylko inaczej wyznaczany jest punkt wewnątrzprzedziału, a mianowicie:

1. wczytaj wartości A i B oraz e;

Page 45: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

455

2. oblicz Xs = A – f(A)*(B-A)/(f(B)-f(A));3. jeśli |f(Xs)|<e to jako xp przyjmij wartość Xs i zakończ obliczenia a jeśli nie to:4. jeśli f(A)·f(Xs)<0 to jako nową wartość B przyjmij Xs a w przeciwnym przypadku jako nową

wartość A przyjmij Xs i skocz do punktu 2.

5.3.4. Ćwiczenia – programy rozwiązywania równańNapisz program

a) rozwiązywania równań metodą bisekcji,b) rozwiązywania równań metodą siecznych,c) rozwiązywania równań metodą stycznych.

5.4. Interpolacja Interpolacją nazywamy zadanie znalezienia krzywej przechodzącej dokładnie przez zadane

punkty nazywane węzłami interpolacji. Stosowana może być np. gdy nie znamy wzoru funkcji lub jestbardzo skomplikowany.

Nie należy stosować interpolacji gdy punkty te pochodzą z pomiarów obarczonych zazwyczajbłędami. W takich przypadkach stosuje się aproksymację opisaną w następnym podrozdziale.

Jedną z funkcji do interpolacji Matlabie jest funkcja interp1:

yint = interp1(x, y, xint, ’metoda’)

gdzie: x, y wektory współrzędnych węzłów interpolacji,xint – wektor punktów na osi X, dla których będą obliczane interpolowane wartości yint‘metoda’: ‘linear’ – funkcja łamana,

‘spline’ – funkcja sklejana 3-go stopnia,‘cubic’ – wielomian 3-go stopnia,

5.4.1. Ćwiczenia - interpolacja

Mamy dane wartości x oraz y dla pewnej funkcji: x=[-2 –1 0 2]; y=[0 1 1 2]Wyznaczyć ciąg wartości Y dla ciągu X = -2: 0.1: 2Wyznaczymy dwoma metodami: ‘linear ’ oraz ‘spline’:x=[-2 –1 0 2]; y=[0 1 1 2];

X = -2: 0.1: 2;

Y_lin = interp1(x, y, X, ’linear’);

Y_spline = interp1(x, y, X, ’spline’);

plot(x,y,’*’, X,Y_lin,’:’, X, Y_spline, ’--’); grid on

Napisz program interpolacji danych wczytanych z pliku.

5.5. AproksymacjaAproksymacja służy głównie do dopasowywania krzywej teoretycznej do punktów

otrzymanych z pomiarów. Krzywa ta (lub prosta) nie musi dokładnie przechodzić przez zadane punktyale dążymy do tego aby suma kwadratów odchyłek była jak najmniejsza. Dlatego metoda dopasowanianazywa się metodą najmniejszych kwadratów. W Matlabie do aproksymacji wielomianami wybranegostopnia można użyć funkcji:

a = polyfit(x, y, n)

gdzie: a – szukany wektor współczynników wielomianu,x , y – współrzędne danych punktów (np.: dane z pomiarów),n – stopień dopasowywanego wielomianu

5.5.1. Ćwiczenia - aproksymacja

Dopasuj do punktów z poprzedniego ćwiczenia wielomian:a) drugiego stopniab) trzeciego stopnia

i sporządź ich wykresy wraz z punktami danychNapisz program aproksymacji dla danych wczytanych z pliku

Page 46: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

466

5.6. Analiza obrazówPoniżej zamieszczam przykład zastosowania narzędzi omówionych w rozdziale 3. Program

złożony jest z dwu plików. Poszczególne instrukcje objaśniono komentarzami.Plik profil_01.m

% PROFIL_01

% Uniwersalny program do oglądania przekrojów obrazów

% improfile(OBRAZ, [Xp Xk], [Yp Yk]) - to funkcja przekroju

naz=uigetfile('*.bmp','Wybierz plik obrazu do analizy');

A=imread(naz); % wczytuje obraz z pliku do macierzy A

[Lw, Lk] = size(A); % rozmiary obrazu

H=round(Lw/2); % rzędna linii przekroju

%---------------------

F1=figure; % wyswietla formatkę grafiki

set(F1,'Position',[40 40 600 300]); % ustawia rozmiar i położenie figury F1

% ---

S1=uicontrol(gcf, 'Style','slider'); % definiuje suwak

set(S1,'Position',[40 55 15 200]); % określa rozmiar i położenie suwaka

set(S1,'CallBack','Ustaw'); % po kliknieciu zgłasza się podprogram Ustaw

set(S1,'Min',1,'Max',Lw); % okreslenie zakresu suwaka

set(S1,'Value',H); % ustawienie pozycji suwaka

%---------------

Y=improfile(A, [1 Lk], [H H]); % wyznacza przekrój obrazu

A1=subplot(1,2,1); imshow(A); % w jednym okienku: wyswietli obraz

title(naz);

L1=line([1 Lk],[H H]); % miejsce przekroju zaznaczone na obrazie

A2=subplot(1,2,2); PL1=plot(Y); % w drugim okienku: wyswietli przekrój

grid on; axis([0,Lk, 0, 256]); title('Przekrój poziomy');

xlabel('x'); ylabel('Jasnosc');

Plik Ustaw.m% Podprogram "USTAW" jest wywoływany przez kliknięcie suwaka S1 myszką

H = get(S1,'Value'); % nowa wartość wynikająca z przemieszczenia suwaka

set(L1, 'XData',[1 Lk],'YData',[Lw-H Lw-H]); % nowa linia na obrazie

Y=improfile(A, [1 Lk], [Lw-H Lw-H]);

set(PL1, 'XData', 1:Lk-1,'YData',Y); % aktualizacja wykresu - nowy przekrój

Suwakiem można przesuwać linię pokazującą miejsce „przekroju” obrazu.Po uruchomieniu programu profil_01 funkcja uigetfile wyświetli okno "OTWÓRZ" I pozwoli

wybrać plik obrazu do analizy. Następnie pojawi się następujący obraz:

5.7. Literatura[1] Matlab. Przykłady i zadania. Autorzy: A.Kamińska, B.Pańczyk, Wyd.: Mikom, Stron 152.[2] Ryszard Buczyński, Rafał Kasztelaniec: Kurs Matlab I. Wydz. Fizyki Uniw. Warszawskiego

http://www.igf.fuw.edu.pl/ZOI/Matlab/[3] J.Brzózka, L.Dorobczyński: „Programowane w Matlab”, wyd. Mikom 1998. (314 stron)[4] B.Mrozek, Zb.Mrozek: MATLAB i Simulink. Poradnik użytkownika. wyd. Helion 2004[5] Wiesława Regel: Wykresy i obiekty graficzne w MATLAB. wyd. MIKOM 2003

Page 47: Materiały pomocnicze do zaj ęć z “Informatyki” · Z. Rudnicki: MATLAB - KOMPENDIUM 3 1. Wprowadzenie 1.1. Cel zaj ęć i układ materiału Na zaj ęciach z Matlab’a mamy

Z. Rudnicki: MATLAB - KOMPENDIUM

477

[6] Materiały pomocnicze do wykładu „Wybrane Zastosowania MATLAB-a”. Politechnika Gdańska.http://www.eti.pg.gda.pl/katedry/ksg/dydaktyka/Techniki_obliczeniowe_w_systemach_geoinformacyjnych/Materialy/Pomoc_do_MATLABA.pdf

Rozwiązania ze statyki: