Metody numeryczne Laboratorium 1 Będziemy używać narzędzia
Transkrypt
Metody numeryczne Laboratorium 1 Będziemy używać narzędzia
Metody numeryczne Laboratorium 1 Będziemy używać narzędzia GNU Octave z nakładką graficzną QtOctave. Jest to darmowy odpowiednik programu Matlab. Większość programów napisanych dla jednego programu działa też w drugim. Dokumentacja GNU Octave: HTML i PDF Okno programu QtOctave - Terminal Z prawej strony na dole mamy linię poleceń, gdzie wpisujemy wyrażenia, np. (3+5)*12. Wyniki wykonywanych poleceń widać w terminalu, prawa strona okna programu. Z lewej strony mamy trzy panele: • Lista zmiennych – wyświetla informację o zmiennych w programie • Lista poleceń – lista ostatnio wpisanych poleceń • Nawigator – lista plików i katalogów, można zapisywać i wczytywać pliki programów czyli skrypty (*.m), wykresy, wyznaczone dane, ... QtOctave - Edytor Oprócz wpisywana poleceń w bezpośrednio w linii poleceń, można je również wpisywać w pliku, np. test.m i następnie uruchamiać jako program. Służy do tego Edytor, ikona . Większość poleceń wprowadzać będziemy tekstowo, z linii pleceń czy w programie. Niektóre polecenia można wprowadzić z menu, np.: Warto pewnie skorzystać z rysowania wykresów i ich eksportu do plików graficznych – dużo łatwiej wybrać dostępne opcje niż nauczyć się składni odpowiednich komend na pamięć. Zapoznanie się ze środowiskiem. 1. Pomoc i czyszczenie terminala help – wyświetla pomoc do podanego polecenia, np.: help who – wyświetla pomoc o poleceniu who clc – czyści ekran terminala Ćwiczenia 1.1. Wyświetlić informacje o funkcjach sqrt i nthroot. Do czego one służą? 1.2. Wyczyścić ekran. Stałe - dokumentacja e – wartość stałej e pi – wartość liczby pi Inf – nieskończoność NaN – oznacznie Not a Number (to nie liczba) I – liczba urojona, można też pisać małe i eps – precyzja maszyny realmax – największa możliwa liczba w zapisie zmiennopozycyjnym realmin – najmniejsza możliwa … 2. Proste operacje matematyczne 2+4, 4-5, 3*7, 12/8 2^3 albo 2**3 2+3*4 (2+3)*4 – ważne jest stosowanie nawiasów 4^0.5 4^1/2 albo 4^(1/2) – ważna jest kolejność działań, bo chociaż wynik ten sam to liczy się inaczej!! 27^1/3 27^(1/3) Porównanie wartości: 12 > 8, 9 <= 8, 2 == 2, 4 != 5 Ćwiczenia √ 3 5 1 2 Jak jest różnica jeśli polecenie zakończymy średnikiem? 2.1. Obliczyć 32 +0.0625∗8+ 3. Funkcje matematyczne, potęgi i logarytmy – dokumentacja, funkcje trygonometryczne – dokumentacja sqrt(4) – pierwiastek kwadratowy cbrt(27) – pierwiastek sześcienny (trzeciego stopnia), to samo co 27^(1/3) albo 27**(1/3) nthroot(4,2) – pierwiastek n-tego stopnia nthroot(27,3) nthroot(64,6) log(e^3) – log naturalny, o podstawie e log10(1000) – log o podstawie 10 log2(128) – log o podstawie 2 sin(pi) sin(pi/2) cos, tan, cot, sec, csc Inne funkcje... cyklometryczne, hiperboliczne, … Ćwiczenia 3.1. Wyliczyć wartość wyrażeń: a) √ 3 5 32 +sin ( b) 1+cos ( 1 2 pi ) 2 5 ⋅pi +0.5236 6 √ ⋅log2(256) 2396+ 145 29 )−sin ( 5 ⋅pi) 14 4. Zmienne Zmienną może być dowolny ciąg znaków składający się z liter, liczb i znaków podkreślenia. Powinien zaczynać się od litery. Małe i duże litery są rozróżniane. Przykłady: a=12; A=[1 2 3; 4,7,9]; b2=sqrt(2); inna_war=631.45; minPerDay2=92.6; _12name=3**4; % Też działa choć zaczyna się od znaku ”_” c=a*5+b2; Podane nazwy zmiennej, nie zakończonej średnikiem, wyświetli jej wartość., np. polecenie: A wyświetli całą zawartość macierzy A. Kilka poleceń związanych ze zmiennymi Wyświetlanie listy zdeklarowanych zmiennych, ich rozmiarów oraz ich usuwanie who whos % to samo co zawiera panel „Lista zmiennych” size(A) % rozmiar zmiennej/macierzy A size(A,1) % liczba wierszy macierzy A size(A,2) % liczba kolumn macierzy A length(A) % największy z rozmiarów clear _12name; Ćwiczenia 4.1. Przyprostokątne trójkąta prostokątnego wynoszą: a=9, b=12. Obliczyć przeciwprostokątną c korzystając ze zmiennych a i b. 4.2. Jeśli a i b będą długościami podstaw trapezu, a odległość między podstawami będzie siódmą częścią sumy ich długości, to jakie będzie jego pole? Pole zapisać w zmiennej Pt. 4.3. W zmiennej Pk zapisać pole koła, którego średnica równa się sumie a i b. 5. Wektory i macierze Zmienne mogą być wektorami, macierzami albo n-wymiarowymi macierzami. Wektor będący wierszem definiujemy następująco: x=[1 2 3] % liczby oddzielamy spacją albo przecinkiem Wektor kolumnowy definiujemy: x=[1;2;3] % liczby oddzielone średnikiem Używając powyższych dwóch sposobów można łatwo utworzyć różne macierze np. 2x4, 3x3, 4x2: A=[1 2 3 4; 3 -8 0 5] B=[1,0,5; -2,3,8; a,b,c] % można używać wcześniejszych zmiennych C=[1 2; 3 4; pi 2*pi; 0 e] % można używać stałych Tworząc wektory czy macierze można używać operatora zakresu (z podaniem kroku albo bez jego podawania, domyślnie krok co 1). Operator zakresu to ”:” (dwukropek). V1 = 1:6 % wektor 6-elementowy, domyślny krok 1 v2 = 1:0.3:6 % wektor 17-elementowy, krok co 0.3 v3 = a:-3:-a % jeśli a=9 to wektor 7-elementowy od 9 do -9 z krokiem -3 % macierz 3x3, środkowy wiersz podany jako zakres M1=[1 2 3; 0:0.45:1; 4 5 6] % macierz 3x4 z trzech zakresów, trzeci z krokiem ujemnym M2=[1:4; 2:5; 0:-1:-3] % macierz 3x5, różne kroki ale taka sama liczba elementów M3=[-pi:pi/2:pi; 0:2:8; -5:-2:-13] Do tworzenia macierzy można używać specjalnych funkcji: M4 = rand(4,2) % macierz 4x2 wypełniona liczbami losowymi M5 = ones(5) % macierz 5x5 wypełniona jedynkami M6 = zeros(2,7) % macierz 2x7 zawierająca zera Operacje na macierzach Na wektorach i macierzach można można operować jak na wartościach skalarnych, np.: v3.^2 % poniesienie każdego elem. wektora v3 do kwadratu (.^) v3+rand(1) % dodanie tej samej losowej wartości do elem. V3 v3+rand(1,7) % dodanie innej losowej wartości do każdego elem. v3 M4*4 % 4-krotne zwiększenie wartości elementów macierzy 2*(M1+8)/pi % zwiększenie elementów o 8, pomnożenie, podzielenie Operacje macierzowe M2' % transponowanie macierzy (apostrof) M1*M3 % mnożenie macierzy, muszą być odpowiednich rozmiarów M1.*B % mnożenie elementów macierzy między sobą, % jest to co innego niż mnożenie macierzy times(M1,B) % inny sposób na mnożenie elem. macierzy między sobą inv(B) % wyznaczenie macierzy odwrotnej inv(B)*B % sprawdzenie czy otrzymamy macierz jednostkową det(m) % wyznacznik macierzy m Dostęp do wybranych elementów macierzy, indeksowanie elementów Do poszczególnych elementów macierzy, albo ich zakresów można się odwoływać podając numer wiersza lub kolumny albo ich zakresy. Numery indeksów zaczynają się od 1. Przykłady: M3(2,3) % podajemy indeksy elementów w nawiasie, % tutaj jest drugi wiersz, trzecia kolumna M2(1:2,2:end) % zakresy elementów, % tutaj wiersze od 1 do 2, kolumny od 2 do końca M4(:,:) % cała macierz, wszystkie wiersze i wszystkie kolumny M2(2,:) % drugi wiersz, wszystkie kolumny Można w ten sposób wybierać elementy z jednej macierzy i przypisywać je do innych. np.: % macierz M2 w 3 wierszu ma 3 elementy z 1 wiersza macierzy M1 M2=[-pi:pi/2:pi; 0:2:8; 1 2 M1(1,:)] W ten sposób można też ustawiać wartości w całych zakresach w macierzy, np.: % ustawia wartość 0 w 2 i 3 wierszu we wszystkich kolumnach M2(2:3,:)=0 Ćwiczenia 5.1. Utworzyć dwie macierze: 1 4 1 2 3 oraz B= 0 3 A= 4 5 0 2 2 5.2. Utworzyć macierze C i D o wartościach: C=A*B, D=B*A. Jakie są ich rozmiary? Jak sprawdzić ich rozmiary przynajmniej na dwa sposoby? [ ] [ ] 5.3. Zwiększyć wartości elementów macierzy D dwukrotnie. 5.4. Utworzyć macierz E o rozmiarze 3x4 zawierającą same zera. Wartości pierwszych trzech kolumn macierzy E przypisać z macierzy D. 5.5. Utworzyć macierz F, której wartości będą iloczynami poszczególnych wartości transponowanej macierzy A i macierzy B (nie mnożymy macierzy ale ich poszczególne wartości). Jakie rozmiary będzie miała macierz F? Wektory 5.6. Utworzyć wektor u zawierający wartości: u=[0 pi/2 pi 3/2pi 2pi] 5.7. Utworzyć wektor v zawierający wartości cos(u). Narysować na osi współrzędnych punkty złożone z par (ui,vi) dla utworzonych wektorów. Co zdaje się przypominać wykres? Jak narysować bardziej wierny wykres funkcji cosinus? 5.8. Utworzyć wektor x zawierający wartości od 0 do 2pi z krokiem co 0.2. Odczytać rozmiar wektora. 5.9. Utworzyć wektor y zawierający elementy równe sin(x). Narysować wykres funkcji sin(x). 5.10. Utworzyć macierz BIG będącą wynikiem pomnożenia transponowanego wektora y przez jego samego. Wynik powinien być macierzą kwadratową. Można narysować: surf(BIG) 6. Rysowanie wykresów Wykresy rysujemy za pomocą funkcji plot() - dokumentacja Przykłady: x1=[0 1 2 3 4 5 6]; y1=[0 1 2 3 4 5 9]; x2=0:0.1:2*pi; y2=sin(x2); plot(x1,y1); % linia bez zaznaczonych punktów, domyślnie plot(x1,y1,'-'); % jw. % czerwona linia (red) z kwadratowymi punktami (square) plot(x1,x1.^3,'-sr'); % brak linii, okrągłe punkty („o”) w kolorze czarnym (black) plot(x1,x1.^3,'ok'); % zielona linia (green) z trójkątnymi punktami („^”) z legendą: „y=x^3” plot(x1,x1.^3,'-^g;y=x^3;'); Można rysować kilka wykresów jednocześnie, np.: plot(x1,y1,x2,y2) % dwa wykresy, domyślne kolory plot(x1,y1,'-dr',x2,y2,'-*k') % dwa wykresy, różne kol. i oznaczenia pkt. plot(x1,y1, x2,y2, x2,cos(x2), x1,x1/2) % aż cztery różne wykresy Do testowania rysowania można użyć funkcji: sombrero() albo peaks(). Ćwiczenia 3 6.1. Narysować na jednym rysunku wykresy funkcji argumentów [-1, 1]. 2 y=x , y=x 2 , y=x , y=x 3 dla przedziału 6.2. Narysować koło składające się z dwóch wykresów funkcji. Środek koła może być w punkcie (0,0). Obie funkcje narysować tym samym kolorem, punkty oznaczyć znakami +. Rysunek zapisać do pliku: kolo.png. 6.3. Narysować koło w biegunowym układzie współrzędnych korzystając z menu: Wykres > 2D > Biegunowy