Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... ·...

38
dr Sławomir Marczyński Matlab - ćwiczenia 1/38 MATLAB ćwiczenia Spis treści 1. Podstawy ............................................................................................................................................. 2 1.1. Tworzenie katalogu roboczego, przygotowanie do pracy............................................................ 2 1.2. Matlab jako kalkulator.................................................................................................................. 2 1.3. Wpisywanie macierzy i wektorów bezpośrednio z konsoli .......................................................... 4 1.4. Tworzenie macierzy przy pomocy funkcji Matlaba ...................................................................... 4 1.4. Najprostsze matematyczne operacje na macierzach ................................................................... 7 1.5. Wizualizacja macierzy................................................................................................................... 7 2. I/O ........................................................................................................................................................ 9 2.1. Wprowadzanie danych liczbowych do programu Matlab ............................................................ 9 2.2. Zapis wyników ............................................................................................................................ 12 2.3. Czytanie i zapisywanie plików graficznych ................................................................................. 13 2.4. Czytanie plików dźwiękowych .................................................................................................... 14 3. Rozwiązywanie równań ..................................................................................................................... 16 3.1. Równania nieliniowe, fzero ........................................................................................................ 16 3.2. Układy równań liniowych ........................................................................................................... 19 4. Rozwiązywanie równań ODE ............................................................................................................. 22 4.1. Prosty przypadek oscylator harmoniczny................................................................................ 22 4.2. Po co tyle funkcji ode? ................................................................................................................ 23 4.3. Trudniejszy problem - wahadło na gumce ................................................................................. 25 4.4. Automatyczne kończenie obliczeń – strzelanie z wiatrówki ...................................................... 29 4.5. Bardzo krótko o chaosie dynamicznym ...................................................................................... 33 5. Wykresy w Matlabie .......................................................................................................................... 35 5.1. Wykresy 2D................................................................................................................................. 35 5.2. Wykresy 3D................................................................................................................................. 37 5.2. Animacje ..................................................................................................................................... 38

Transcript of Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... ·...

Page 1: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 1/38

MATLAB – ćwiczenia

Spis treści 1. Podstawy ............................................................................................................................................. 2

1.1. Tworzenie katalogu roboczego, przygotowanie do pracy ............................................................ 2

1.2. Matlab jako kalkulator .................................................................................................................. 2

1.3. Wpisywanie macierzy i wektorów bezpośrednio z konsoli .......................................................... 4

1.4. Tworzenie macierzy przy pomocy funkcji Matlaba ...................................................................... 4

1.4. Najprostsze matematyczne operacje na macierzach ................................................................... 7

1.5. Wizualizacja macierzy ................................................................................................................... 7

2. I/O ........................................................................................................................................................ 9

2.1. Wprowadzanie danych liczbowych do programu Matlab ............................................................ 9

2.2. Zapis wyników ............................................................................................................................ 12

2.3. Czytanie i zapisywanie plików graficznych ................................................................................. 13

2.4. Czytanie plików dźwiękowych .................................................................................................... 14

3. Rozwiązywanie równań ..................................................................................................................... 16

3.1. Równania nieliniowe, fzero ........................................................................................................ 16

3.2. Układy równań liniowych ........................................................................................................... 19

4. Rozwiązywanie równań ODE ............................................................................................................. 22

4.1. Prosty przypadek – oscylator harmoniczny ................................................................................ 22

4.2. Po co tyle funkcji ode? ................................................................................................................ 23

4.3. Trudniejszy problem - wahadło na gumce ................................................................................. 25

4.4. Automatyczne kończenie obliczeń – strzelanie z wiatrówki ...................................................... 29

4.5. Bardzo krótko o chaosie dynamicznym ...................................................................................... 33

5. Wykresy w Matlabie .......................................................................................................................... 35

5.1. Wykresy 2D ................................................................................................................................. 35

5.2. Wykresy 3D ................................................................................................................................. 37

5.2. Animacje ..................................................................................................................................... 38

Page 2: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 2/38

1. Podstawy

1.1. Tworzenie katalogu roboczego, przygotowanie do pracy Utwórz na pulpicie folder Lab, utwórz w nim folder cw-01. Uruchom program Matlab, ustaw jako

katalog roboczy utworzony poprzednio folder cw-01. W programie Matlab wybierz z menu opcję

Command Window Only (jak na poniższej ilustracji). Utworzenie odrębnego katalogu ma dwie zalety:

unikamy konfliktów nazw; łatwo jest utrzymać porządek. Aby uniknąć problemów używamy tylko

tych liter, które są określone w standardzie ASCII. Napisz słowo diary w oknie poleceń i naciśnij enter.

Ilustracja 1. Ustawienie programu Matlab z właściwym dla pierwszych zajęć katalogu roboczym i wybór odpowiedniego ustawienia okien do dalszej pracy z programem.

1.2. Matlab jako kalkulator Matlab może służyć do prostych obliczeń. Sprawdź, czy Matlab prawidłowo obliczy ile jest ,

, , , itd. (Ilustracja 2.)

Zadanie 1. Czy wynik dzielenia dwóch liczb całkowitych będzie zawsze taki sam w języku C

i w Matlabie?

Zadanie 2. Niewymierna liczba jest zapisywana w Matlabie jako pi. A jak w Matlab jest

zapisywana liczba która jest podstawą logarytmów naturalnych?

Zadanie 3. Czym różni się funkcja Matlaba cosd od funkcji cos?

Zadanie 4. Jak obliczyć w Matlabie wyrażoną w stopniach wartość funkcji arcus tangens

dla wartości zmiennej niezależnej równej jeden?

Zadanie 5. Czy polecenie format służy w programie Matlab do formatowanie dysku?

Możemy zapisywać wyniki obliczeń w zmiennych itd. Poleceniem format zmieniamy sposób w jaki

Matlab będzie wyświetlał liczby. Do wypisywania wyników nadaje się też funkcja fprintf, nieco

podobna do znanej z języka C funkcji printf. (Ilustracja 3.) Wydając polecenie help dostajemy opis

możliwości polecenia/funkcji programu Matlab jako tekst w oknie konsoli. Polecenie doc ma

podobne działanie, ale wyświetla dokumentację jako hipertekst. (Ilustracja 4.)

Page 3: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 3/38

Ilustracja 2. Matlab jako kalkulator.

Ilustracja 3. Różne formaty wyświetlania wyników.

Ilustracja 4. Hipertekstowy opis działania polecenia format, jaki widać po wywołaniu doc format. Ten sam tekst można odnaleźć z menu programu Matlab.

Page 4: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 4/38

1.3. Wpisywanie macierzy i wektorów bezpośrednio z konsoli

Ilustracja 5. Wprowadzanie wektorów i macierzy wprost z klawiatury, liczba po liczbie.

Wektory w Matlabie to macierze o jednym wierszu (albo o jednej kolumnie). Macierze wpisuje się

z konsoli tak jak widać to na ilustracji powyżej. Średnik oznacza koniec wiersza macierzy, można też

po prostu nacisnąć enter, co zrobiono przy wprowadzaniu macierzy B. Oczywiście, dla wielkich

macierzy, zawierających miliony elementów, metody te są zupełnie nieprzydatne.

Zadanie 6. Wpisz bezpośrednio z klawiatury macierz

1.4. Tworzenie macierzy przy pomocy funkcji Matlaba

Matlab rozumie zapis 10:5:25 jako zwięzły sposób zapisu ciągu 10, 15, 20, 25. W ten sposób możemy

łatwo tworzyć rozmaite macierze.

Zadanie 7. Używając jedynie notacji z dwukropkiem wprowadź do programu Matlab

macierz:

mającą 99 wierszy i 99 kolumn.

Zadanie 8. Jak usunąć z tej macierzy pierwszy i ostatni wiersz, tak aby otrzymana macierz

miała 97 wierszy i 99 kolumn?

Page 5: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 5/38

Ilustracja 6. Tworzenie macierzy przy pomocy operatora dwukropka.

Poza notacją z dwukropkiem w Matlabie używa się funkcji generujących takie macierze jak macierz

zerowa, jednostkowa, z losowymi elementami, magiczna itd. Używając ich razem z transpozycją i

innymi przestawieniami elementów oraz wydzielającymi przekątne, macierz górna lub dolną itd.,

można względnie łatwo uzyskać macierz jaka nam jest potrzebna. Funkcja gallery tworzy często

używane (do testów) macierze takie jak np. macierz Householdera czy macierz Toeplitz’a itp.

Ilustracja 7. Użycie funkcji ones, diag i fliplr do utworzenia macierzy trójprzekątniowej.

Zadanie 9. Jaka macierz powstanie w Matlabie po wydaniu polecenia diag(n) gdy n = 5 ?

Zadanie 10. Utwórz poleceniem A = rand(100) macierz losową, następnie rozłóż ją na sumę

dwóch macierzy , takich że oraz dla .

Page 6: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 6/38

Zadanie 11. Utwórz poleceniem M = magic(3) kwadrat magiczny, sprawdź wynik poleceń

fliplr(M), flipud(M), triu(M), tril(M), tril(triu(M)), diag(M), diag(diag(M)),

rot90(M). Sprawdź czy jest analogiczna funkcja do rot90, ale z „obrotem w

drugą stronę”?

Zadanie 12. Przy pomocy funkcji gallery utwórz macierz trójdiagonalną o 100 wierszach i

100 kolumnach.

Jeszcze jedną możliwością jest składanie macierzy z podmacierzy, co wyjaśnia kolejna ilustracja. Gdy

w wyniku operacji powiększa się rozmiar macierzy, to dane z już utworzonej wcześniej części mogą

być przepisywane w pamięci komputera. Dlatego sklejanie dużych macierzy z bardzo małych

pojedynczych elementów jest nieefektywne. Do dobrego stylu programowania należy, jeżeli już

musimy np. użyć pętli for, wstępne ustalenie wielkości macierzy wywołaniem funkcji zeros lub ones –

niepotrzebne inicjalizacja bloku pamięci zerami jest znacznie mniej kosztowna niż wielokrotna

realokacja i kopiowanie.

Ilustracja 8. Komponowanie macierzy z podmacierzy.

Zadanie 13. Utwórz, łącząc ze sobą mniejsze macierze, macierz:

Oczywiście zawsze możemy uzyskać macierz w wyniku obliczeń. Możliwe jest także używanie

wyrażenia logicznego do utworzenia zakresu indeksów tablicy. W przykładzie powyżej w macierzy,

będącej iloczynem Kroneckera, zastępujemy zerami wszystkie elementy większe niż 9.

Zadanie 14. Czy istnieje specjalna funkcja Matlaba do tworzenia iloczynu Kroneckera

macierzy?

Page 7: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 7/38

Zadanie 15. Jeżeli macierz M = magic(7), to czym jest M(1,1), M(1,:), M(:,1), M(:,2:) oraz

M(end,2:2:end) ?

Zadanie 16. Co stanie się gdy utworzymy macierz R = rand(6), a potem przypiszemy do jej

drugiego wiersza macierz pustą R(2,:) = [] ?

Ilustracja 9. Używanie operacji matematycznych i warunków logicznych do tworzenia macierzy.

1.4. Najprostsze matematyczne operacje na macierzach

Zadanie 17. Utwórz macierz A = magic(4), macierz B = triu(ones(4)), wektor v = 1:4, oblicz

sumę macierzy A+B, różnicę A-B, pomnóż macierze A*B, sprawdź czy można

pomnożyć A*v oraz v*A; czym różnią się iloczyny v'*v, v*v', v.*v; co oblicza

iloczyn A.*B ?

1.5. Wizualizacja macierzy

Dla dużych macierzy bardziej celowe może być przyglądanie się macierzom nie jako tablicom liczb,

ale jako obrazom w których każdy piksel ma kolor zależny od wartości elementu macierzy, co

pokazuje przykład poniżej.

Page 8: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 8/38

Ilustracja 10. Zastosowanie funkcji imagesc do poglądowego przedstawienia macierzy. Od razu widać że tylko na przekątnej są niezerowe elementy. Podobnie działa funkcja spy, ale pokazuje ona tylko położenie niezerowych elementów.

Page 9: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 9/38

2. I/O

2.1. Wprowadzanie danych liczbowych do programu Matlab Utwórz na pulpicie folder cw-02 w folderze Lab. Skopiuj1 do niego pliki z P:\Matlab\cw-02 ().

Uruchom program Matlab, przejdź do katalogu Lab/cw-02 jako katalogu bieżącego. Wydaj najpierw

polecenie diary 'notes.txt', a potem diary on.

Zadanie 18. Wydaj polecenie dir, czy nazwy plików będą widoczne wraz z rozszerzeniami?

Do czego służą polecenia type dane1.txt, open dane1.txt, edit dane1.txt

oraz load dane1.txt ? Co stanie się gdy, po wydaniu polecenia load dane1.txt,

wydasz polecenia who, whos, size(dane1), length(dane1), plot(dane1),

imagesc(dane1) ?

Ilustracja 11. Czytanie pliku dane1.txt poleceniem load.

Zadanie 19. Obejrzyj zawartość pliku dane2.txt. Przy pomocy funkcji textread przeczytaj

pierwsze 3 linie z pliku dane2.txt jako odpowiednio tablicę s napisów i trzy

wektory x, y, z wartości liczbowych. Czy można poleceniem textread przeczytać

wszystkie dane z tego pliku? Dlaczego texscan bez ograniczenia liczby wierszy

powoduje błąd wykonania w Matlabie? (Ilustracja 12.)

Zadanie 20. Spróbuj wczytać te same pierwsze trzy linie z pliku dane2.txt używając

polecenia uiimport. Który z tych dwóch sposobów będzie działać w Octave?

Zadanie 21. Przeczytaj wszystkie dane z pliku dane2.txt używając funkcji textscan.

1 Jeżeli używasz komputera na pracowni. Jeżeli nie masz dostępu do tego dysku pobierz odpowiedni plik zip ze

strony http://slawek.zut.edu.pl.

Page 10: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 10/38

Zadanie 22. Przeczytaj wszystkie dane z pliku dane3.txt używając funkcji textscan w ten

sposób, aby pominąć tekst komentarza (zapisanego w konwencji C).

Jedno z możliwych rozwiązań jest na ilustracji. (Ilustracja 15.) Aby pominąć komentarze zastosowana

jest opcja CommentStyle; niektóre macierze są tworzone funkcją reshape z wektorów do których

zostały wczytane.

Ilustracja 12. Czytanie danych z pliku dane2.txt funkcją textread i przez kreatora importu uiimport.

Ilustracja 13. Czytanie przy pomocy textscan pliku tekstowego w którym występują różne bloki danych.

Page 11: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 11/38

Ilustracja 14. Plik dane3.txt – zawiera łańcuchy znaków w cudzysłowach, liczby, dodatkowe puste linie i komentarze.

Ilustracja 15. Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy %q.

Zadanie 23. Użyj funkcji dlmread do wczytania zapisanych w pliku dane4.csv danych jako

macierzy. Co się stało z brakującymi wartościami i czy nie prościej byłoby użyć

funkcji csvread? Jak rozróżnić zero przeczytane z danych od zera wrzuconego

jako wartość zastępcza dla brakujących danych? Czy dobrym pomysłem byłoby

użycie przecinków zamiast średników przy czytaniu plików zapisanych z

przecinkiem dziesiętnym zamiast kropki dziesiętnej?

Zadanie 24. Użyj funkcji importdata aby wczytać dane zapisane w pliku dane4.csv. Czy

brakujące wartości są teraz jednoznacznie określone?

Zadanie 25. Użyj niskopoziomowych funkcji wejścia/wyjścia do przetwarzania pliku

dane4.csv. Kiedy można odnieść korzyść z wywołania funkcji takich jak fgetl

skoro prościej jest użyć importdata ? Jak przeczytać plik, w którym brakujące

wartości zostały zamarkowane znakiem gwiazdki * ?

Page 12: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 12/38

Ilustracja 16. Plik dane4.csv czytany funkcjami dlmread i import data.

2.2. Zapis wyników

Dla każdego sposobu w jaki można wczytać dane do Matlaba istnieje zbliżony w koncepcji sposób

zapisu plików. Dla load to save, dla dlmread to dlmwrite itd. Praktyczne znaczenie, dla

początkujących, mają funkcje save, disp i fprintf.

Zadanie 26. Utwórz macierz o pięciu wierszach i pięciu kolumnach wywołaniem rand(5).

Zapisz tę macierz do pliku Matlaba zgodnego z wersją 4. tego programu. Zapisz

tę macierz do pliku tekstowego o nazwie los.txt. Jak zmieni się plik los.txt gdy

użyjesz opcji –double ? (Ilustracja 17.)

Zadanie 27. Do czego służy funkcja disp w Matlabie? Spróbuj wywołać disp(pi),

disp(magic(3)), disp('napis ćwiczebny'). Czy wynik wywołania disp zależy od

średnika na końcu linii? Czy w wyniku działania disp zmienia się wartość

zmiennej ans ?

Zadanie 28. Użyj funkcji fprintf i pętli for do wypisania tabelki wartości funkcji sinus dla

kątów od do co , tak aby w każdej linii był napis sinus %f = %f, gdzie

zamiast %f powinny być odpowiednie wartości. (Ilustracja 18.)

Zadanie 29. Użyj funkcji fopen, fprintf i fclose aby do pliku log.txt dopisać dane zwracane

przez date i clock. Dane które już były w pliku nie powinny zostać zniszczone.

W jaki sposób można dopisać do tego pliku bieżącą godzinę i minutę pozyskane

wywołaniem fix(clock) ? (Ilustracja 19.)

Page 13: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 13/38

Ilustracja 17. Standardowy zapis (bez double) może być zbyt mało dokładny. Nawet użycie opcji -double nie gwarantuje utraty dokładności wywołanej błędami zaokrągleń przy pisaniu i czytaniu do plików tekstowych.

Ilustracja 18. Zastosowanie funkcji fprintf i pętli for. Jeżeli chcemy wpisać całą pętlę w jednej linii, to do rozdzielenia używamy przecinków.

Ilustracja 19. Dopisywanie na końcu pliku przez podanie 'a' przy otwarciu pliku. Otwierając plik przez fopen('log.txt', 'w') zniszczylibyśmy już w nim istniejące dane.

2.3. Czytanie i zapisywanie plików graficznych

Podstawowe funkcje do czytania i zapisywania plików w formatach JPEG, GIF, PNG i podobnych to

imread i imwrite oraz print. Zamiast imread można wywoływać funkcję importdata, która

automatycznie wybierze właściwy sposób czytania (czyli wywoła imread).

Page 14: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 14/38

Zadanie 30. Użyj funkcji imread do przeczytania pliku dane5.bmp, wyświetl go funkcją

image, oblicz macierz taką że , są współrzędnymi

piksela na obrazie, a macierze , , reprezentują składowe czerwoną,

zieloną i niebieską. Zastąp zerami wszystkie te elementy macierzy które są

mniejsze niż wartości największej. Wyświetl otrzymaną w ten sposób

macierz jako obraz funkc image w odwróconej skali szarości. Zapisz tę

macierz jako plik JPEG, wyeksportuj wykres Figure 1 jako plik PNG.

Ilustracja 20. Przetwarzanie plików grafiki rastrowej.

2.4. Czytanie plików dźwiękowych Zadanie 31. Najpierw użyj funkcji wavread do przeczytania pliku dane6.wav, potem spróbuj

odtworzyć funkcją wavplay. Otwórz ten sam plik funkcją importdata. Spróbuj

teraz odsłuchać ten sam plik przy odtwarzaniu normalnym, dwukrotnie

przyspieszonym i dwukrotnie zwolnionym. Czy dane wczytane przez wavread

były odtworzone we właściwym tempie? Jakie jest domyślne tempo

odtwarzania dla wavplay ?

Ilustracja 21. Odtwarzanie dźwięku w Matlabie (wymaga podłączonych głośników lub słuchawek).

Page 15: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 15/38

Zadanie 32. Wyświetl wykres dźwięku jaki został zarejestrowany pomiędzy 2 a 3 sekundą

nagrania.

Ilustracja 22. Wykres dźwięku zapisanego w pliku dane6.wav.

Page 16: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 16/38

3. Rozwiązywanie równań

Załóż na pulpicie folder Lab/cw-03. Uruchom program Matlab, przejdź do Lab/cw-03 jako do katalogu

roboczego. Uruchom poleceniem diary zapis wydanych poleceń do pliku notes.txt.

3.1. Równania nieliniowe, fzero

Zadanie 33. Rozwiąż równanie znajdując wszystkie pierwiastki mniejsze niż 20.

Aby rozwiązać powyższe zadanie zastosujesz funkcję fzero, ale najpierw narysuj wykres aby ogólnie

zorientować się gdzie mogą być szukane miejsca zerowe.

Ilustracja 23. Wykres funkcji przedstawiających lewą (lhs) i prawą stronę (rhs) równania. Tam gdzie przecinają się ciągłe linie, niebieska i zielona, tam równanie jest spełnione.

Teraz użyj pętli for, aby znaleźć odpowiednie pierwiastki. Zauważ, że pierwsze przecięcie jest blisko

, czyli dla , natomiast kolejne w pobliżu , gdzie

,7 (bo założyliśmy ). Wyniki obliczeń dopisuj do wektora x0. Dla ułatwienia zamiast

wydawać polecenia wprost z konsoli użyj skryptu (nazwij go zadanie33.m).

1 % definicje funkcji 2 % 3 lhs = @(x)(sin(x)); 4 rhs = @(x)(exp(-x)); 5 eq = @(x)(lhs(x) - rhs(x)); 6 7 % zakres wykresu i ilość punktów 8 % 9 a = -1.0; 10 b = 24.0; 11 n = 2500; 12 13 % wykresy funkcji 14 % 15 x = linspace(a,b,n); 16 plot( x,lhs(x), x,rhs(x) ); 17 grid on; 18 title 'sin(x), exp(-x)'; 19 xlabel 'x'; 20 ylabel 'y'; 21 line( xlim, [0,0], 'Color', 'red','LineStyle',':' );

Page 17: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 17/38

22 23 % znajdowanie pierwiastków 24 % 25 x0 = []; 26 for k = 1:7 27 x0 = [x0; fzero( eq, (k-1)*pi) ]; 28 end 29 30 % wyniki jako kolumna liczb i na wykresie 31 % 32 format long 33 disp(x0); 34 hold on; plot(x0,lhs(x0),'or');

Ilustracja 24. Graficzne przedstawienie pierwiastków równania

Zadanie 34. Napisz skrypt, który znajduje wszystkie dodatnie rozwiązania równanie

, wiedząc że sekund, hertzów.

Zadanie to można rozwiązać w podobny sposób jak poprzednie. Ponieważ , to gdy

rozwiązań być nie może. Dlatego szukamy takich pierwiastków , dla których

. Okres sinusoidalnych zmian wynosi , dlatego będziemy badać

funkcję dzieląc każdy taki okres na dziesięć podprzedziałów (funkcja

sinus ma tylko 3 miejsca zerowe na okres). W każdym podprzedziale, dzięki pętli while, używamy

funkcji fzero, której przekazujemy jako pierwszy parametr równanie, a jako drugi parametr zakres.

Blok try-catch służy do wyciszenia sygnalizacji błędu, jakim jest szukanie miejsca zerowego gdzie go

nie ma.

1 % definicja funkcji 2 % 3 T = 10.0; % sekund 4 f = 50.0; % Hz 5 eq = @(t)( exp(-2.0*t/T) .* sin(2.0*pi*f*t) - 0.5 ); 6 7 % zakres wykresu i ilość punktów

Page 18: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 18/38

8 % 9 a = 0; 10 b = -0.5 * T * log(0.5); % obliczone z warunku zadania 11 n = 25000; 12 13 % wykres funkcji 14 % 15 t = linspace(a,b,n); 16 plot( t,eq(t) ); 17 grid on; 18 title 'exp(-2.0*t/T) * sin(2.0*pi*f*t) - 0.5'; 19 xlabel 't'; 20 line( xlim, [0,0], 'Color', 'red','LineStyle',':' ); 21 22 % znajdowanie pierwiastków 23 % 24 t_roots = []; 25 t_start = a; 26 t_delta = 1/f * 0.1; 27 while (t_start < b) 28 try 29 t_roots = [t_roots; fzero( eq, [t_start, t_start+t_delta] )]; 30 catch 31 end 32 t_start = t_start + t_delta; 33 end 34 35 % wyniki 36 % 37 format long 38 disp(t_roots);

Ilustracja 25. Wykres funkcji @(t)( exp(-2.0*t/T) .* sin(2.0*pi*f*t).^2 - 0.5 ).

Zadanie 35. Zmodyfikuj skrypt z poprzedniego zadania tak, aby powstała funkcja

fz(T,freq,treshold), która pozwoli obliczyć zera dla dowolnego podanego

okresu, częstotliwości oscylacji i progu (który nie musi wynosić 0.5).

Page 19: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 19/38

3.2. Układy równań liniowych

Zadanie 36. Oblicz natężenie prądu elektrycznego płynącego przez opornik R3 w obwodzie

elektrycznym (Ilustracja 26). Dane są oporności ,

, i napięcia , .

Ilustracja 26. Obwód elektryczny.

Korzystając z pierwszego i drugiego prawa Kirchhoffa możemy napisać układ trzech równań liniowych

opisujących przepływ prądu przez oporniki:

W metodzie prądów oczkowych mamy mniej równań

a natężenie prądu płynącego przez opornik R3 obliczymy jako .

Równania te możemy zapisać macierzowo jako , gdzie:

,

Jak łatwo zauważyć, macierz w metodzie prądów oczkowych to na przekątnej suma oporów w

danym oczku i z odpowiednim znakiem opory wspólne dla oczek poza przekątną). Odpowiedni skrypt

w Matlabie ma postać:

1 R1 = 10.0E3; % om 2 R2 = 20.0E3; % om 3 R3 = 30.0E3; % om 4 V1 = 1.4; % wolt 5 V2 = 1.5; % wolt 6 7 A = [ R1+R3, -R3 ; -R3, R2+R3 ]; 8 b = [ -V1 ; V2 ]; 9 x = A \ b; 10 I3 = x(2) - x(1); 11 12 fprintf('natezenie pradu plynacego przez R3 wynosi I3 = %f [A]\n', I3)

Zadanie 37. Małgosia, Kuba i Jaś idą na wycieczkę. Muszą zabrać 15 kg sprzętu. Małgosia

postawiła warunek: będzie niosła połowę tego co Jaś. Ile sprzętu będzie niósł

każdy z uczestników wycieczki?

Page 20: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 20/38

To zadanie pozornie jest łatwe, ale przecież mamy tylko dwa równania i trzy niewiadome. Zapisując je

macierzowo mamy:

Takie równanie ma oczywiście nieskończenie wiele rozwiązań. Ale oczywiście nam nie zależy na

nieskończenie wielu – lecz na przynajmniej jednym z nich możliwym do praktycznego zastosowania.

Ilustracja 27. Minimalne rozwiązanie problemu z wycieczką, tj. takie że suma kwadratów obciążeń jest najmniejsza: dla rozwiązania obliczonego przez dzielenie wynosi 125, dla rozwiązania obliczonego z macierzy pseudoodwrotnej jest mniejsza niż 81. Jeżeli przedstawimy rozwiązania w przestrzeni n-wymiarowej (konkretnie w trójwymiarowej), to rozwiązanie otrzymane z macierzy pseudoodwrotnej jest po prostu rozwiązaniem najbliższym początkowi układu współrzędnych.

Zadanie 38. Przy pomocy suwmiarki zmierzono wielokrotnie rozmiary wałka, otrzymując

następujące wartości wyrażone w milimetrach , , ,

, , . Ile wynosi długość ?

(Ilustracja 28)

Ilustracja 28. Wałek.

Moglibyśmy zadanie to rozwiązać odejmując mm, moglibyśmy też odjąć

mm. Jednak najlepiej ułożyć układ sześciu równań z czterema

niewiadomymi:

Page 21: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 21/38

Ten układ nie ma rozwiązania (jest sprzeczny), ale możemy pomnożyć i otrzymać

równanie z macierzą kwadratową, które następnie rozwiązujemy przez dzielenie w lewo, lub

znajdując macierz odwrotną . Możemy też od razu podzielić A \ b. Możemy użyć macierzy

pseudoodwrotnej pinv(A). Końcowy wynik, po zaokrągleniu do dwóch cyfr po przecinku, wynosi

mm.

Trudniejszym zadaniem mogłoby być wyznaczenie niepewności pomiarowej otrzymanego wyniku

(przy założeniu że dane były mierzone z dokładnością mm). Dobrą metodą byłyby obliczenia

Monte Carlo: wielokrotnie, np. milion razy, tworzylibyśmy dane wejściowe zaburzone losowo

i rozwiązywalibyśmy układ równań, aby następnie dokonać analizy statystycznej.

Ilustracja 29. Rozwiązania układu w którym jest więcej równań niż niewiadomych to liczby które gwarantują najmniejsze rozbieżności pomiędzy lewymi a prawymi stronami. Jak widać różne schematy rozwiązywania prowadzą do nieznacznie różnych wyników (dwie ostatnie cyfry znaczące).

Page 22: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 22/38

4. Rozwiązywanie równań ODE

Jednym z trudnych zadań, jakie może napotkać inżynier, jest rozwiązywanie równań różniczkowych

zwyczajnych. Równania takie to powiązanie wielkości aktualnie występujących z różnymi przyrostami

(wyrażonymi przez pochodne). Do ich rozwiązywania analityczne podejście jest nieskuteczne niemal

w każdym praktycznym przypadku i dlatego stosuje się metody przybliżone. Z programem takim jak

Matlab nasze zadanie sprowadza się tylko do podania równań i warunków rozwiązywania – resztę

pracy wykona za nas komputer.

4.1. Prosty przypadek – oscylator harmoniczny Klasycznym problemem, i to nie tylko mechaniki, są drgania harmoniczne tłumione pod wpływem

zewnętrznej siły wymuszającej.

Zadanie 39. Mamy ruch opisany równaniem:

Jak użyć programu Matlab dla zbadania co się dzieje, jeżeli ,

, , , początkowe położenie ,

a prędkość początkowo wynosi zero?

Zaczynamy od rozbicia równania na równania stopnia pierwszego, bo Matlab będzie rozwiązywać

układy równań pierwszego stopnia:

W pliku oscylator.m zapisujemy2 funkcję oscylator, która musi mieć dwa parametry: pierwszy

reprezentuje zmienną niezależną, drugi jest wektorem ze zmiennymi zależnymi (czyli w konkretnym

przypadku są to położenie i prędkość).

function dqdt = oscylator(t,q) omega0 = 1000.0; omega = 2000.0; zeta = 0.1; A = 0.05; dqdt = [ q(2) -2*zeta*omega0*q(2) - omega0^2*q(1)-(omega^2- omega0^2)*A*sin(omega*t) ]; end

Aby wykonać obliczenia wydajemy Matlabowi polecenie:

ode45(@oscylator,[0 0.10],[0.15 0],odeset('OutputSel',1));

2 Nazwa funkcji oscylator musi być zgodna z nazwą pliku oscylator.m. Identyfikator dqdt oznaczający

zwracany wektor, choć jest bezpośrednio po słowie kluczowym function, nie jest nazwą funkcji.

Page 23: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 23/38

Funkcja ode45 zostaje wywołana z czterema parametrami – uchwytem do funkcji oscylator, zakresem

zmiennej niezależnej dla jakiego należy wykonać obliczenia, wektorem wartości początkowych i

opcjami utworzonymi przez odeset (jako 'OutputSel' wybieramy zmienną 1, czyli położenie). Matlab

wykona obliczenia rysując wykres3 obrazujący rozwiązanie.

Ilustracja 30. Drgania tłumione zanikają zastępowane przez drgania wymuszone

4.2. Po co tyle funkcji ode? Matlab oferuje łatwą zmianę algorytmu rozwiązywania równań – wystarczy zamiast np. ode45 użyć

funkcji ode113 lub ode23 – aktualny wykaz znajdziemy w dokumentacji on-line do programu Matlab,

np. pisząc polecenie doc ode45. Po co jednak tyle funkcji ode4 – czy nie wystarczyłaby jedna, ode45?

Na kolejnym rysunku poniżej widzimy zły efekt działania ode45 dla bardzo długich czasów: fałszywy

okres i zanik amplitudy. Fikcyjny okres powstał dzięki aliasingowi – jak to się stało wyjaśnia kolejny

rysunek. Zanik amplitudy powstał wskutek kumulacji błędów numerycznych. Wybór innego schematu

obliczeń (np. ode23t) pozwala na ocenę w jakim stopniu otrzymane wyniki są poprawne. Szczególnie

uważać należy na takie równania, które określa się jako odporne5 (stiff equations). Gdy próbujemy

rozwiązać je numerycznie nieodpowiednimi dla nich metodami, takimi jak właśnie ode45, to

3 Zależność . Jeżeli wybierzemy 2, to zostanie narysowany wykres . Jeżeli pominiemy czwarty parametr

lub po prostu damy optset(), to wykreślone zostaną wszystkie zmienne na jednym wykresie.

4 Funkcje ode23 (Shampine-Bogacki) i ode45 (Dormand-Prince) implementują schematy Runge-Kutty rzędu

odpowiednio 3 i 4 oraz 4 i 5. Każda z nich w trakcie działania używa pary metod po to, aby móc ocenić dokładność obliczeń i odpowiednio dobrać krok. Funkcja ode113 używa wielokrokowej, z predykatorem i korektorem, automatycznym dopasowaniem rzędu i kroku, metody Adamsa-Bashfortha-Moultona (i jest przeniesiona z fortranowskich DE/STEP/INTERP Shampine’a i Gordona). Funkcja ode15s implementuje techniki „różniczkowania do tyłu” NDF (Klopfenstein-Shampine) i BDF wybierając wzory rzędu od 1 do 5. Funkcja ode23s wywodzi się z metody Rosenbrocka, ale ma pewne udoskonalenia (Shampine-Reichelty). Funkcja ode23t to niejawna metoda trapezów, funkcja ode23tb to ode23t z różniczkowaniem BDF. Jak widać metody te są dość zaawansowane (i można ewentualnie wywoływać je z różnymi ustawieniami, np. dostarczając jakobian). Ponadto Octave ma wbudowaną funkcję lsode (Livermore Solver of ODE), która wymaga nieco innej kolejności parametrów niż funkcje znane z Matlaba.

5 Rozpowszechniło się, niezbyt poprawne, tłumaczenie stiff equations na równania sztywne.

0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1-0.25

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

Page 24: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 24/38

automatyczny wybór kroku zawodzi. Wydaje się nawet, że w praktycznych problemach najczęściej

będziemy mieli do czynienia z równaniami odpornymi, a przezorne traktowanie wszystkich równań

jako sztywnych nie jest szkodliwe.

Zadanie 40. Rozwiąż poprzednie zadanie dla zerowego tłumienia , dla czasów od

do , , , , stosując różne metody (ode45, ode113, ode23t

itd.). Napisz skrypt w Matlabie, który rozwiązuje równanie wybraną metodą

i rysuje trzy wykresy: zależność i zależność , oraz czyli diagram

fazowy. Czy amplituda drgań jest stała, rośnie czy maleje po dłuższym czasie?

Jaka metoda daje najbardziej wiarygodne rezultaty? Sprawdź, co na ten temat

można znaleźć w dokumentacji programu Matlab. (Ilustracja 31. Rozwiązania

tego samego równania (oscylator harmoniczny bez tłumienia i bez

wymuszenia, , ), ta sama procedura, tj. ode45, ale różny zakresu

czasu symulacji. Po lewej czas w symulacji kończy się na 100 sekundach, po

prawej po 100 tysiącach sekund (czyli 1000 razy więcej niż po lewej). (Ilustracja

31.)

Ilustracja 31. Rozwiązania tego samego równania (oscylator harmoniczny bez tłumienia i bez wymuszenia, , ), ta sama procedura, tj. ode45, ale różny zakresu czasu symulacji. Po lewej czas w symulacji kończy się na 100 sekundach, po prawej po 100 tysiącach sekund (czyli 1000 razy więcej niż po lewej).

Zadanie 41. Aliasing. Stablicuj, jako y1, funkcję sinus w przedziale od do z krokiem

. Stablicuj, jako y2, funkcję sinus w tym samym przedziale, ale z krokiem

np. . Wykreśl y1 i y2 na jednym wykresie, obie linie mają rozciągać

się na ten sam zakres odciętych. (Ilustracja 32.)

Ilustracja 32. Zjawisko aliasingu – przeskakiwane są całe okresy, powstaje krzywa (czerwona) o fałszywie wydłużonym okresie.

-1 -0.5 0 0.5 1-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3diagram fazowy

x1

x2

0 20 40 60 80 100-1

-0.5

0

0.5

1położenie

t

x1

0 20 40 60 80 100-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3prędkość

t

x2 -1 -0.5 0 0.5 1

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3diagram fazowy

x1

x2

0 2 4 6 8 10

x 104

-1

-0.5

0

0.5

1położenie

t

x1

0 2 4 6 8 10

x 104

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3prędkość

t

x2

0 10 20 30 40 50 60 70 80 90 100-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

sin

()

Page 25: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 25/38

4.3. Trudniejszy problem - wahadło na gumce Ruch oscylatora harmonicznego jest opisany w tysiącach książek i istnieją jego rozwiązania

analityczne. Spróbujmy teraz zastosować Matlab do problemu6 lepiej wykazującego skuteczność

obliczeń numerycznych.

Mamy ciężarek o masie 100 gramów przywiązany do jednometrowej nici gumowej, tak że wisząc na

niej rozciągnął ją o 10 centymetrów. Masę gumki pomijamy, opór powietrza pomijamy, siłę Coriolisa

pomijamy, przyspieszenie normalne ziemskie wynosi . Gumka jest przywiązana

drugim końcem do początku układu współrzędnych, tj. w tym miejscu współrzędne , , wynoszą

zero. Chcemy zobaczyć, jak będzie poruszać się ciężarek na gumce.

Ilustracja 33. Układ osi współrzędnych dla zadania „gumka i ciężarek”.

Najtrudniejsze jest uwzględnienie, że czasami gumka jest napięta – a czasami luźna – i to wyklucza7

rozwiązanie analityczne, czyli zapisane matematycznym wzorem. Dodatkowo warto zauważyć, że

„wahadło na gumce” może wychylać się o duże kąty, tj. takie dla których nie można uznać iż

. I oczywiście – mamy trzy stopnie swobody (trzy współrzędne). Wyprowadzenia są w

kolejnym akapicie, ale można je pominąć – najważniejsze są równania otrzymane na końcu – właśnie

to te równania będziemy rozwiązywali numerycznie.

Początkową długość gumki oznaczamy . Jeżeli ciężarek jest w punkcie o współrzędnych , to

jest w odległości od początku układu współrzędnych. Jeżeli , to gumka jest

nienaciągnięta i na ciężarek działa tylko jego ciężar . Jeżeli , to na ciężarek działa także

naciąg gumki, równy co do wartości . Stałą wyliczamy ze wzoru , w

którym jest długością gumki po rozciągnięciu przez nieruchomo wiszący

ciężarek. Problem jest trójwymiarowy. Składowe ciężaru są oczywiste: ,

. Składowe siły są też nietrudne do określenia:

,

,

, gdzie

oczywiście może być (dla nienapiętej gumki) równe zero. Stąd (i z drugiej zasady dynamiki

Newtona) równania ruchu: , , , gdzie jest

prędkością ciężarka. Warunki początkowe opiszmy jako bycie w miejscu o współrzędnych ,

gdzie , i poruszanie się z prędkością taką, że jej wektor ma kąt elewacji , a jego rzut na

6 W podręcznikach zwykle nie ma innych sił sprężystych niż liniowo i symetrycznie zależne od odkształcenia. Nie

jest to realistyczne, ale znakomicie ułatwia wyprowadzanie wzorów matematycznych. Fizyka aż do XX wieku starannie omijała problemy nieliniowe, zwłaszcza prowadzące do chaosu dynamicznego.

7 Jeżeli jakiś geniusz dałby sobie radę z tym problemem… to wystarczy nieco zmodyfikować np. użyty model

sprężystości… albo uwzględnić masę gumki… albo dodać opór powietrza… Każda taka modyfikacja jest dość łatwa w modelu numerycznym, lecz dla „ścisłego” rozwiązania wprost zabójcza.

Page 26: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 26/38

płaszczyznę jest odchylony o kąt od kierunku osi (patrz rysunek). Pionowa składowa prędkości

początkowej jest równa , natomiast poziome składowe to

, . Jak widać układ współrzędnych wybraliśmy tak, aby oś

była skierowana pionowo w górę, a oś przechodziła przez punkt w którym jest ciężarek w czasie

. (Nie zmniejsza to ogólności rozwiązań.) Jeżeli ktoś w tym miejscu trochę się pogubił – to nie

powinien się martwić – do tej pory omawialiśmy szczegóły wymagające koncentracji, ale dość nudne i

drugoplanowe.

Mamy więc układ sześciu równań:

gdzie jest równe jeżeli to wyrażenie jest dodatnie, a zero w pozostałych

przypadkach.

Chcąc numerycznie rozwiązać ten problem tworzymy w katalogu roboczym8 plik o nazwie gumka.m.

W pliku tym są, jak widać, dwie funkcje – jedna o nazwie gumka (czyli zgodnej z nazwą pliku i ta

będzie uruchamiała obliczenia) – druga o nazwie fcn (czyli subfunkcja dostępna tylko z poziomu

funkcji gumka). Nasza funkcja gumka będzie wywoływała biblioteczną funkcję ode45, a ta w czasie

rozwiązywania problemu, aby obliczyć prawe strony układu równań, będzie używać funkcji fcn.

Warto zauważyć, w jaki sposób przekazywane są dodatkowe parametry do funkcji fcn – dopisujemy

je jako piąty i kolejne argumenty do wywołania ode45, a w funkcji fcn pojawiają się jako trzeci itd.

Alternatywną możliwością jest używanie zmiennych globalnych, albo definiowanie ich jako lokalnych

w samej funkcji fcn. Każde z tych rozwiązań ma wady i zalety.9

function gumka % % GUMKA - rozwiązywanie równań ODE (2012, Sławomir Marczyński) % Parametry i dane wejściowe

8 W Microsoft Windows Vista domyślnym katalogiem roboczym dla programu Matlab jest „Moje

dokumenty/Matlab” zwykle na dysku systemowym C:, jednak w czasie zajęć w pracowni komputerowej ZUT należy używać dysku D:, bo dysk C: może być niedostępny dla niektórych operacji.

9 Przekazywanie za każdym razem parametrów może nieco spowolnić obliczenia, globalne zmienne mogą więc

dawać większą prędkość działania. Zmienne globalne… są globalne, to znaczy są globalne nie tylko w obrębie danego pliku, ale są wspólne dla wszystkich funkcji jakie są w Matlabie użyte. I to może prowadzić do trudnych do wykrycia błędów, konfliktów nazw. Natomiast zdefiniowanie zmiennych wyłącznie lokalnie nie pozwala na sensowne modyfikowanie ich wartości z zewnątrz.

Page 27: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 27/38

m = 0.1 ; % masa ciężarka w kilogramach l0 = 1.0 ; % długość nitki gumowej (nierozciągniętej), metry l = 1.1 ; % długość nitki gumowej (po zawieszeniu ciężarka), metry g = 9.81 ; % przyspieszenie ziemskie normalne, metry na sekundę^2 k = m * g / (l - l0); % Warunki początkowe x0 = 0.5; % w metrach y0 = 0.0; % w metrach z0 = -0.5; % w metrach v0 = 0.1; % prędkość początkowa, w metrach na sekundę alfa = 90.0; % kąt w stopniach beta = 0.0; % kąt w stopniach v0x = v0 * cosd(beta) * cosd(alfa); v0y = v0 * cosd(beta) * sind(alfa); v0z = v0 * sind(beta); init = [ x0, y0, z0, v0x, v0y, v0z]; % Parametry sterujące symulacją n = 500; % w ilu punktach ma być podane rozwiązanie t_start = 0; % czas startu symulacji, sekundy t_end = 20; % czas stopu symulacji, sekundy t = linspace(t_start, t_end, n); % generowanie wektora czasu opt = odeset('InitialStep',0.0001/v0,'MaxStep',0.0001/v0); % W tym miejscu wywołujemy ode45 aby rozwiązać równanie [czas, wyniki] = ode45(@fcn, t, init, opt, m, l0, k, g); % Równanie jest już rozwiązane numerycznie, % pozostaje pokazać wyniki plot3(wyniki(:,1), wyniki(:,2), wyniki(:,3)); axis square; grid on; xlabel 'x'; ylabel 'y'; zlabel 'z'; title 'trajektoria ci??arka' end function dqdt = fcn(t, q, m, l0, k, g) % % Funkcja fcn oblicza prawe strony układu równań różniczkowych: % % dq(1)/dt = f1(t,q(1),q(2),...,q(n)) % dq(2)/dt = f2(t,q(1),q(2),...,q(n)) % ... = ... % dq(n)/dt = fn(t,q(1),q(2),...,q(n)) dqdt = zeros(size(q)); x = q(1); y = q(2);

Page 28: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 28/38

z = q(3); vx = q(4); vy = q(5); vz = q(6); r = sqrt(x^2 + y^2 + z^2); delta = r - l0; dqdt(1) = vx; dqdt(2) = vy; dqdt(3) = vz; if delta > 0. dqdt(4) = - (x/r) * k * delta / m; dqdt(5) = - (y/r) * k * delta / m; dqdt(6) = - (z/r) * k * delta / m - g; else dqdt(4) = 0.; dqdt(5) = 0.; dqdt(6) = - g; end end

Ilustracja 34. Trajektoria obliczona programem gumka, widać złożenie drgań w pionie, wahań w poziomie i obrotu.

Podany wyżej skrypt w języku Matlab jest przykładem i dlatego jest napisany z myślą o czytelności,

nawet kosztem prędkości działania i zwięzłości zapisu. Doświadczeni użytkownicy Matlaba zapisaliby

być może funkcję fcn używając długości wektora obliczanej przez norm, warunek zapisaliby

jako wartość logicznego wyrażenia (wynosi ono 1 dla prawdy, 0 dla nieprawdy), być może nie użyliby

dodatkowych zmiennych, a parametry , , i ustalali globalnie… i otrzymali np. coś takiego:

-1

-0.5

0

0.5

-0.8-0.6

-0.4-0.2

00.2

0.40.6

-1.4

-1.3

-1.2

-1.1

-1

-0.9

-0.8

-0.7

-0.6

-0.5

-0.4

y

trajektoria ciężarka

x

z

Page 29: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 29/38

function dqdt = fcn(t, q) global m l0 k g dqdt(1:3) = q(4:6); dqdt(4:6) = - q(1:3) * k * (norm(q(1:3) ? l0) / m * (norm(q(1:3)) > l0); dqdt( 6) = dqdt(6) - g; end

Taki styl nie jest wzorem do naśladowania – najważniejsza jest poprawność obliczeń, a trudno ją

sprawdzić, jeżeli program został napisany nieczytelnie i z nadmiernym użyciem rozmaitych,

błyskotliwych, sztuczek.

Zadanie 42. Utwórz plik gumka.m i skopiuj do niego funkcje gumka i dqdt, jakie są na

listingu powyżej (copy-paste). Narysuj tor ruchu ciężarka, jeżeli początkowe

wartości metr, , metrów na sekundę, ,

. Jak zmieni się tor ruchu gdy prędkość metrów na sekundę?

Zadanie 43. Narysuj wykres, na którym będzie widoczna prędkość ciężarka (z poprzedniego

zadania) jako funkcja czasu.

4.4. Automatyczne kończenie obliczeń – strzelanie z wiatrówki Poprzednio obliczenia były kończone po założonym czasie (w symulacji) , w tym przykładzie warunek

stopu będzie inny.

Chcemy oszacować, jaki jest maksymalny realistyczny zasięg pocisku z wiatrówki strzelającej kulkami

Ballistic Ball (BB). Dane są10 kaliber , prędkość wylotowa , masa pocisku

rama. Przypominamy sobie wzór na zasięg rzutu ukośnego, wartość przyspieszenia

ziemskiego i podstawiamy dane:

Wynik, jaki otrzymujemy w ten sposób, realistyczny nie jest. Dlaczego? Zignorowaliśmy opór

powietrza, a dla ruchu pocisków ma on bardzo duże znaczenie.11 Jak go uwzględnić? Można założyć,

że opór powierza wynika z tarcia lepkiego gazu o kulisty pocisk (wzór Stokesa) – do obliczeń siły

potrzebna byłaby lepkość powietrza (około , zależnie od temperatury,

wilgotności itd.). Można też założyć, tak jak tu zrobimy, opór aerodynamiczny wynikający z

konieczności rozpędzenia powierza przed pociskiem do prędkości pocisku (model Newtona),

otrzymując wzór:

10 Jak łatwo obliczyć średnia gęstość materiału z którego wykonano pocisk wynosi ,

kinetyczna energia początkowa

dżula (czyli poniżej określonej w przepisach granicy 17 dżuli).

11 Chyba, że strzelamy np. na Księżycu – wtedy zasięg pocisku wzrośnie jeszcze 6 razy, do ponad .

Page 30: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 30/38

gdzie

jest polem powierzchni przekroju poprzeczego pocisku, jego prędkością w danej

chwili, jest gęstością powietrza, jest współczynnikiem zależnym od kształtu, który

dla kuli wynosi . Oczywiście

. Mamy więc równania:

Dokładamy do nich warunki początkowe:

Kodujemy to w skrypcie Matlaba tworząc w pliku o nazwie zasięg.m funkcję zasięg oraz dwie

subfunkcje fcn i events.12 Funkcja fcn ma znaną już budowę – dostaje wartości zmiennej niezależnej i

zmiennych zależnych jako dane – zwraca wartości pochodnych. Funkcja events jest funkcją

wywoływaną z wnętrza ode45 i kontrolującą „czy już” – zwróćmy uwagę, iż musi ona mieć dokładnie

takie same parametry jak funkcja fcn. Czyli jeżeli stosujemy dodatkowe parametry (powyżej

czwartego) w wywołaniu funkcji ode, to te parametry muszą być jako trzeci i kolejne w funkcjach fcn i

events.13 Uruchamiając ten skrypt widzimy, że tor lotu pocisku nie jest parabolą, a zasięg jest znacznie

mniejszy niż obliczony z pominięciem oporów ruchu.

function zasieg % % Zasięg strzału pociskiem BB z typowej wiatrówki (2012, Sławomir Marczyński) % Warunki początkowe x0 = 1.5; % metry y0 = 0.0; % metry v0 = 120.0; % prędkość początkowa, w metrach na sekundę alfa = 45.0; % kąt w stopniach init = [ x0, y0, v0 * cosd(alfa), v0 * sind(alfa)]; % Parametry sterujące symulacją

12

Ponieważ nazwy subfunkcji nie muszą (a nawet nie mogą) być takie jak nazwa pliku, to przy refaktoryzacji wystarczyłoby zmienić tylko nazwę głównej funkcji (jedna zmiana identyfikatora w jednym miejscu). Wszystkie wywołania subfunkcji pozostałyby bez zmian. Użycie subfunkcji jest wygodniejsze niż pisanie oddzielnych plików fcn.m i events.m.

13 Matlab nie sprawdza poprawności listy parametrów zanim dana funkcja nie zostanie wywołana. Dlatego, przy

braku kompilacji innej niż JIT, niewłaściwe (nawet jeżeli nieużywane) parametry funkcji fcn i events będą powodowały błędy run-time, a nie compile-time.

Page 31: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 31/38

n = 500; % w ilu punktach ma być podane rozwiązanie t_start = 0; % czas startu symulacji, sekundy t_end = 20; % czas stopu symulacji, sekundy t = linspace(t_start, t_end, n); % generowanie wektora czasu opt = odeset('Events',@events); % dodawana jest funkcja kontrolująca % W tym miejscu wywołujemy ode45 aby rozwiązać równania, % pierwszy, niepotrzebny, wektor zwracany przez ode45 odrzucamy tyldą [~, wyniki] = ode45(@fcn, t, init, opt, 0.33E-3, 4.5E-3, 1.2, 9.81); % Równanie jest już rozwiązane numerycznie, prezentujemy wyniki plot(wyniki(:,1),wyniki(:,2)); grid on; xlabel 'x'; ylabel 'y'; title 'trajektoria' end function dqdt = fcn(t, q, m, D, ro, g) cx = 0.45; % współczynnik oporu areodynamicznego dqdt = zeros(size(q)); x = q(1); y = q(2); vx = q(3); vy = q(4); v = sqrt(vx^2 + vy^2); F = (cx/8) * (ro * D * v)^2 * pi; dqdt(1) = vx; dqdt(2) = vy; dqdt(3) = - (vx/v) * (F/m); dqdt(4) = - (vy/v) * (F/m) - g; end function [value,halt,direction] = events(t,q, m, D, ro, g) % Obliczenia będą przerywane (halt = 1) gdy q(2) przejdzie przez zero (value = 0) % od wartości dodatnich do ujemnych (direction = -1). value = q(2); halt = 1 ; direction = -1 ; end

Page 32: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 32/38

Ilustracja 35. Trajektoria pocisku BB wystrzelonego z wiatrówki.

Zadanie 44. Sprawdź jak zmieni się zasięg gdy: masa ciężarka będzie dziesięciokrotnie

większa; prędkość pocisku będzie dziesięciokrotnie większa; gęstość powietrza

będzie o 10% mniejsza.

Dla sprawdzenia jak na zasięg wpływa kąt elewacji, zmodyfikujemy plik zasieg.m zapisując go pod

nazwą zasiegi.m: zamiast jednego kąta elewacji i jednej krzywej przebadamy cały zakres możliwych

kątów elewacji, bo być może największy zasięg jest uzyskiwany dla kąta innego niż . Dodajemy

funkcję zasiegi, zmieniamy bezparametrową funkcję zasieg na subfunkcję zasieg1(alfa), usuwamy

ustawienie wartości alfa w tej subfunkcji. Reszta pozostaje bez zmian, a pętla for i polecenie hold on

wymuszą nałożenie kolejnych wykresów na siebie.

function zasiegi figure; hold on; for alfa = 3:3:90 zasieg1(alfa) end hold off; end function zasieg1(alfa) % % Zasięgi strzałów pociskiem BB z typowej wiatrówki (2012, Sławomir Marczyński) % Warunki początkowe x0 = 1.5; % metry y0 = 0.0; % metry v0 = 120.0; % prędkość początkowa, w metrach na sekundę % alfa % kąt w stopniach, jako parametr funkcji zasieg1

0 20 40 60 80 100 120 140-10

0

10

20

30

40

50

60

70

x

y

trajektoria

Page 33: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 33/38

Ilustracja 36. Trajektorie pocisków z wiatrówki przy różnych kątach elewacji, opór powietrza proporcjonalny do kwadratu prędkości. Jak widać tak obliczony zasięg strzału nie przekracza 140 metrów, czyli jest ponad dziesięciokrotnie mniejszy niż bez oporu powietrza. Naturalnie, wyniki te należałoby sprawdzić doświadczalnie. (Na laptopie z procesorem Intel® Core™ 2 Duo [email protected] obliczenie i narysowanie wszystkich krzywych trwało około pół sekundy.)

Zadanie 45. Narysuj wykres wielu torów ruchu pocisku, ale zmień warunek zakończenia

obliczeń: strzelec stoi przed murem o wysokości 10 metrów odległym o 20

metrów, obliczenia przerywane są gdy pocisk trafi w ścianę lub opadnie poniżej

poziomu gruntu .

4.5. Bardzo krótko o chaosie dynamicznym Istnieje możliwość, iż natrafimy na równania ODE, których rozwiązania będą po prostu chaotyczne: za

każdym razem zupełnie inne, nawet jeżeli tylko nieznacznie (np. o jedną miliardową) zmieniliśmy

dane. Na przykład gdy kąt początkowy zmieni się z na .spodziewalibyśmy się, że

rozwiązania równań są bardzo zbliżone do siebie. Jednak gdy równania są chaotyczne, to dowolnie

mała zmiana warunków początkowych „na wejściu” prowadzi do wykładniczego wzrostu rozbieżności

między rozwiązaniami „na wyjściu” (dokładniej mierzy to wykładnik Łapunowa) i nie istnieje

jakakolwiek metoda pozwalająca wiarygodnie obliczyć rozwiązania.14. Na przykład, taka

jednomiliardowa zmiana kąta może spowodować inny wynik losowania stron boiska przez rzut

monetą (orzeł-reszka). Dlatego trzeba być świadomym ograniczeń metod numerycznych, w tym

funkcji ode z programu Matlab.

Typowym układem chaotycznych równań jest układ Lorenza:

14

Podobnie jak nie można napisać wszystkich cyfr liczby .

0 20 40 60 80 100 120 140-20

0

20

40

60

80

100

120

x

y

trajektoria

Page 34: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 34/38

Skrypty, pozwalające rozwiązywać ten układ równań, dla programów Matlab i Octave, są opisane i

dostępne np. w Wikipedii15. Ale ponieważ układ jest chaotyczny, to wyniki ich działania nie są

„prawdziwymi rozwiązaniami” – wystarczy bowiem dowolnie mała zmiana warunków początkowych

(albo dokładności obliczeń) otrzymamy zupełnie inne wyniki.16

Zadanie 46. Zaprogramuj w Matlabie rozwiązywanie układu Lorentza. (Ilustracja 37.)

Ilustracja 37. Rysunek 1. Próby rozwiązywania układu równań Lorentza dla , , , fragment dla . Wykresy po lewej i prawej stronie zostały zrobione dla warunków początkowych odpowiednio równych oraz . Zmiana o jedną miliardową początkowego spowodowała widoczną zmianę rozwiązań.

Podsumowując: środowiska obliczeniowe Matlab i Octave17 są potężnymi narzędziami pozwalającymi

na rozwiązywanie równań ODE w bardzo łatwy sposób. Nie jest do tego wymagany jakiś szczególny

talent matematyczny, a jedynie umiejętność zapisania tych równań w postaci zrozumiałej dla

komputera.

15

Patrz (23 maja 2012) np. http://en.wikipedia.org/wiki/Lorenz_system. Skrypt dla Octave używa lsode.

16 W sensie wrażenia estetycznego będą one podobne.

17 Przykłady powinny działać w Octave po zainstalowaniu dodatkowych pakietów z funkcjami ode.

-20-15

-10-5

05

1015

20 -30

-20

-10

0

10

20

30

0

5

10

15

20

25

30

35

40

45

50

-20-15

-10-5

05

1015

20 -30

-20

-10

0

10

20

30

0

5

10

15

20

25

30

35

40

45

50

Page 35: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 35/38

5. Wykresy w Matlabie

5.1. Wykresy 2D

Zadanie 47. Krzywą Gaussa nazywamy krzywą przedstawiającą funkcję

Narysuj, używając fplot, na jednym wykresie dziesięć krzywych Gaussa dla

, , gdzie , natomiast . Zmień

poleceniem set oś rzędnych na logarytmiczną.

Ilustracja 38. Wykresy funkcji Gaussa o różnych parametrach.

Zadanie 48. W pliku data1.txt zapisane są w czterech kolumnach liczby: w pierwszej

wartości , w drugiej , w trzeciej niepewności pomiarowe , w czwartej

niepewności pomiarowe . Wczytaj te dane do programu Matlab/Octave

i wykreśl je na wykresie zaznaczają niepewności pomiarowe. Przy każdym

punkcie na wykresie napisz, stosując funkcje num2str i text, wartość , czyli

numer kolejny punktu.

Page 36: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 36/38

Ilustracja 39

Zadanie 49. Parabola przecina hiperbolę w dwóch miejscach.

Zapisz te dwa równania jako funkcje anonimowe o uchwytach f1 i f2, narysuj

poleceniem fplot wykres dla pokazujący te dwie krzywe, znajdź

ich punkty przecięcia za pomocą fzero, zamaluj obszar jaki powstał pomiędzy

nimi na żółto poleceniem fill.

Ilustracja 40

Zadanie 50. Napisz skrypt w Matlabie/Octave, która rysuje i zapisuje jako jeden plik JPEG

wykresy funkcji dla przy pomocy funkcji

plot, loglog, semilogx, semilogy. Użyj subplot do rozmieszczenia wykresów, grid

Page 37: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 37/38

minor dla umieszczenia gęstej podziałki na osiach, poleceń title, xlabel i ylabel

by umieścić napisy, print aby utworzyć plik JPEG.

Zadanie 51. Charakterystyka kierunkowa sensora jest taka, że jego czułość spada o

przy odchylenia od kierunku w którym jest ustawiony. Zakładając równanie

na czułość czujnika ma postać , gdzie narysuj

biegunowy wykres przedstawiający . Narysuj na tym samym wykresie

drugą krzywą, innym kolorem, linią przerywaną, pokazującą jak zmieniłaby się

charakterystyka czujnika, gdyby jego czułość spadała tylko o przy

dziesięciostopniowym odchyleniu.

Ilustracja 41. Jak widać, różnice pomiędzy charakterystykami sensorów są niewielkie. (Ponadto dla kątów bliskich 180° model wykładniczego zaniku czułości może być zbytnim uproszczeniem.)

5.2. Wykresy 3D

Zadanie 52. Narysuj poleceniem ezplot3 linię określoną równaniami , ,

, dla . Narysuj tę linię używając plot3 z utworzonymi

wektorami x, y, z zawierającymi odpowiednie dane. Co stanie się, gdy niektóre

z wartości zastąpi się symbolem NaN?

Zadanie 53. Narysuj wykres funkcji

dla

, poleceniem ezsurf. Wydaj polecenie hold on.

Dorysuj, poleceniem ezsurf, wykres funkcji dla , , ,

. Sprawdź jakie wyniki otrzymasz, używając zamiast ezsurf funkcji

ezmesh i ezcontour.

Zadanie 54. Przy pomocy polecenia meshgrid utwórz dane potrzebne do wykreślenia

powierzchni dla dodatnich . Wykreśl izolinie dla tej

powierzchni poleceniem contour3. Dorysuj wykres tej powierzchni poleceniem

Page 38: Matlab - ćwiczeniaslawek.zut.edu.pl/fileadmin/2012-2013/slawek - Matlab - ćwiczenia... · Współpraca funkcji textscan z funkcją reshape i czytanie napisów ujętych w cudzysłowy

dr Sławomir Marczyński Matlab - ćwiczenia 38/38

surface z opcjami 'EdgeColor' [0.8 0.8 0.8] i 'FaceColor' [0.9 0.9 0.9]. Zaznacz

punkt i punkt na tej powierzchni używając stem3.18 Czy można tak

narysowaną powierzchnię interaktywnie obrócić? Wypróbuj polecenie view. W

jaki sposób z wykresu usunąć część powierzchni, dla której ?

Zadanie 55. Narysuj kulę. Pomaluj ją tak, aby kolor na jej powierzchni odzwierciedlał

wartość . Jakich innych funkcji można użyć,

aby pomalować kulę bez widocznych „szwów”?

5.2. Animacje

Zadanie 56. Użyj poleceń getframe i movie do zapisania i odtworzenia animacji wykresu

funkcji , gdzie jest równe numerowi klatki filmu.

Uwaga: Octave nie ma zaimplementowanej funkcji getframe.

Zadanie 57. Użyj polecenia print do wygenerowania ciągu obrazków w formacie JPEG, o

nazwach klatka001.jpeg, klatka002.jpeg, …, zawierających wykresy funkcji z

poprzedniego zadania. Spróbuj scalić odpowiednim narzędziem te pliki w jeden

plik wideo. Możesz także spróbować przygotować plik GIF z animacją.

18

Jak narysować najkrótszą krzywą, leżącą na tej powierzchni, łączącą te dwa punkty? To bardzo ciekawe pytanie, ale znacznie trudniejsze niż mogłoby się wydawać.