Fizyka Komputerowa SciLab podstawy 1 Podstawowe wiadomości o programie SciLab wykresy 1 Wykresy 2D (dwuwymiarowe) 1.1 Podstawowym poleceniem do sporządzania wykresów dwuwymiarowych (płaskich) jest plot2d polecenie to było już stosowane w wydrukowanych wcześniej skryptach przykładowych. 1.1.1 Składnia minimum: plot2d(y) w takiej postaci dostajemy wykres wartości znajdujących się w wektorze y, na osi x zostaną umieszczone numery kolejnych wartości y. Jeśli y jest macierzą mającą n kolumn, to otrzymamy n wykresów kolejnych kolumn. 1.1.2 plot2d(x,y) x i y są wektorami, wynikiem jest wykres punktów o współrzędnych (x,y) branych kolejno z obu wektorów. Oczywiście oba wektory muszą mieć jednakowe długości (ale nie jest istotne czy są wierszowe czy kolumnowe). Jeśli x jest wektorem kolumnowym, a y jest macierzą (o tej samej co x liczbie wierszy) to otrzymamy tyle różnych wykresów ile macierz y ma kolumn wszystkie one będą wykreślone względem wartości x. Jeśli i x i y są macierzami (oczywiście muszą mieć jednakowe rozmiary) to dostaniemy tyle wykresów ile macierze x i y mają kolumn. 1.1.3 Składnia ogólna (nowa): plot2d(x,y,<opcjonalne argumenty>) dobierając odpowiednio opcjonalne argumenty (w dowolnej kolejności) możemy wpływać na wygląd wykresu. Pojedyncze wyrażenie przypisujące wartość argumentowi opcjonalnemu ma postać: słowo kluczowe = 'wartość'. 1.1.4 Składnia ogólna (stara): plot2d([logflag],x,y,[style,strf,leg,rect,nax]) 1.1.5 Słowa kluczowe: 1.1.5.1 style (występuje zarówno w nowej jak i starej składni) wektor o długości równej liczbie krzywych (czyli równej liczbie kolumn macierzy danych), każdy element odpowiada kolejnej krzywej (w kolejności kreślenia). Jeżeli wartość jest liczbą dodatnią to kreślona jest aktualnie wybrana linia (tzn. ciągła lub przerywana) o kolorze odpowiadającym wartości. Jeżeli jest liczbą ujemną (lub zerem) to rysowany jest symbol o numerze abs(wartość). W szczególnym przypadku jeśli wykreślana ma być tylko jedna krzywa, style może być wektorem dwuelementowym, którego pierwszy składnik ma znaczenie opisane powyżej, a drugi przyjmuje wartość z zakresu 1 6 i oznacza położenie opisu tej krzywej (opisy znajdują się pod wykresem, w dwóch kolumnach, numerowane są kolejno kolumnami 1 oznacza pozycję górną-lewą, 2 dolnąlewą,..., 6 dolną-prawą ). Taka opcja jest przydatna gdy na jednym wykresie rysuje się większą liczbę krzywych za pomocą osobnych komend plot2d (takie postępowanie może być konieczne gdy chcemy sporządzić wykresy kilku krzywych, z których każda opisana jest inną liczbą punktów). Jeżeli wykreślanych jest więcej krzywych, a nie podano wektora style, kolejnym krzywym zostaną przypisane kolejne kolory. Oznaczenia kolorów: 1 czarny, 2 niebieski, 3 zielony (dość jasny ale widoczny na ekranie), 4 jasnoniebieski, 5 czerwony, 6 różowy, 7 czerwony, 8 biały, 9 granatowy, 10 granatowy (nieco jaśniejszy), 11 granatowy (jeszcze trochę jaśniejszy),... W helpach (pod hasłem color_list) można znaleźć tabelkę z nazwami kolorów i odpowiadającymi im wartościami RGB. Można też wykorzystać polecenie: x=1:6; y=rand(6,5); xset('thickness',6); plot2d(x,[y], style=[1,2,3,4,5,6],leg='1@2@3@4@5@6') w wyniku dostaniemy 6 wykresów w kolorach o numerach zawartych w wektorze style i z opisem. Polecenie xset spowodowało zmianę grubości kreślonych linii (niestety wszystkich tzn. osi i ramki też) będzie o nim dalej. Innym sposobem jest wydanie polecenia xget("nazwa koloru"): np. xget("white") zwraca 32 (co nie zaprzecza podanej wyżej informacji, że kolorowi białemu odpowiada wartość 8 to też jest kolor biały). 1.1.5.2 rect (występuje zarówno w nowej jak i starej składni) wektor czteroelementowy określający zasięg osi: [xmin,ymin,xmax,ymax]. Ma znaczenie tylko gdy drugi element strf wynosi 1, 3 lub 5. 1.1.5.3 logflag (występuje zarówno w nowej jak i starej składni) łańcuch dwuelementowy, pierwszy znak dotyczy osi x, drugi osi y, każdy może przyjąć wartość "n" ( normalna równomierna) lub "l" ( logarytmiczna ). Np. ["nn"] obie osie równomierne, ["nl"] oś x równomierna,
Fizyka Komputerowa SciLab podstawy 2 oś y logarytmiczna, itd.. 1.1.5.4 frameflag (odpowiada drugiemu elementowi strf ze starej składni) przyjmuje wartości całkowite od 0 do 8 decyduje o sposobie wyznaczenia zakresu osi współrzędnych. W szczególności wartość 0 powoduje wykorzystanie bez zmian poprzedniej skali (albo skali domyślnej) części nowotworzonego wykresu mogą nie być widoczne (w szczególnych przypadkach niewidoczna może być nawet cała krzywa). Wartość 1 powoduje wykorzystanie danych z parametru rect. Wartość 8 powoduje wyznaczenie zakresu wykresu na podstawie minimalnych i maksymalnych wartości współrzędnych oraz odpowiednie przeskalowanie wcześniej wykreślonych wykresów. 1.1.5.5 axesflag (odpowiada trzeciemu elementowi strf ze starej składni) przyjmuje wartości całkowite od 0 do 5 decyduje o wykreśleniu ramki i osi: 0 nie rysuje się nic, 1 rysowane są osie (y po lewej), 2 ramka dookoła, 3 osie (y po prawej), 4 osie (przecinają się po środku), 5 osie (przecinają sę w punkcie (0,0), może nie być ich widać na wykresie). 1.1.5.6 leg (występuje zarówno w nowej jak i starej składni) łańcuch (jeden) opisów krzywych: "pierwszy@drugi@trzeci...". Ma znaczenie tylko gdy pierwszym elementem strf jest 1. W nowej składni dodatkowo można wykorzystać polecenie legends. 1.1.5.6.1 legends (występuje tylko w nowej składni), składnia polecenia: legends(strings,style [,opt, with_box]). 1.1.5.6.1.1 Parametr strings wektor łańcuchów (opisy poszczególnych krzywych). 1.1.5.6.1.2 Parametr style wierszowy wyktor liczb całkowitych (analogicznie jak parametr style w poleceniu plot2d) albo macierz liczb całkowitych o rozmiarze 2 n, element style(1,k) zawiera styl wykresu k-tej krzywej, a style(2,k) zawiera styl linii (gdy dodatni) lub kolor markera (gdy ujemny). 1.1.5.6.1.3 Parametr opt określa umiejscowienie legend (opisów krzywych): 1 (lub "ur") górny prawy narożnik, 2 (lub "ul") górny lewy, 3 (lub "ll") dolny lewy, 4 (lub "lr") dolny prawy, wartość domyślna: 5 (lub "?") umieszczenie interaktywne za pomocą myszy. Ta ostatnia wartość powoduje zatrzymanie kreślenia po narysowaniu legendy i oczekiwanie aż użytkownik kliknie na legendzie i przeciągnie ją za pomocą myszy w odpowiednie (według włąsnego uznania) miejsce. Jest to trochę niewygodne jeśli chcemy sporządzić kilka(naście) wykresów bo po każdym wykresie działanie programu będzie wstrzymane w oczekiwaniu na umiejscowienie legendy. 1.1.5.6.1.4 Parametr with_box przyjmuje wartości logiczne (domyślnie %t) decyduje o tym czy wokół legendy rysowana jest ramka czy nie. 1.1.5.7 nax (występuje zarówno w nowej jak i starej składni) wektor czteroelementowy określający liczbę podziałów osi [nx,nx,ny,ny] (N podziały główne, n podpodziały ). W starej składni ma znaczenie tylko gdy trzeci element strf wynosi 1, w nowej tylko gdy axesflag wynosi 1. 1.1.5.8 strf (występuje tylko w starej składni) łańcuch trzyelementowy o wartości domyślnej '081'. Elementy: 1.1.5.8.1 element pierwszy: przyjmuje wartości 0 lub 1 opisy nie są lub są wyświetlane. 1.1.5.8.2 element drugi: (w nowej składni: frameflag) przyjmuje wartości całkowite od 0 do 8 decyduje o sposobie wyznaczenia zakresu osi współrzędnych. W szczególności wartość 0 powoduje wykorzystanie bez zmian poprzedniej skali części nowotworzonego wykresu mogą nie być widoczne (w szczególnych przypadkach niewidoczna może być nawet cała krzywa). Domyślna wartość 8 powoduje wyznaczenie zakresu wykresu na podstawie minimalnych i maksymalnych wartości współrzędnych oraz odpowiednie przeskalowanie wcześniej wykreślonych wykresów. 1.1.5.8.3 element trzeci: (w nowej składni: axesflag) przyjmuje wartości całkowite od 0 do 5 decyduje o wykreśleniu ramki i osi: 0 nie rysuje się nic, 1 rysowane są osie (y po lewej), 2 ramka dookoła, 3 osie (y po prawej), 4 osie (przecinają się po środku), 5 osie (przecinają sę w punkcie (0,0), może nie być ich widać na wykresie). 1.1.5.9 1.2 Polecenie fplot2d
Fizyka Komputerowa SciLab podstawy 3 Polecenie to służy do sporządzania wykresów funkcji (tzn. funkcji zdefiniowanych w Scilabie jako funkcje, w przeciwieństwie do polecenia plot2d, któremu było tak na prawdę obojętne co wykreśla, aby tylko wartości rzędnych i odciętych były podane w odpowiednich wykresach). Wartości funkcji dla poszczególnych argumentów są obliczone za pomocą polecenia feval (oznacza to, że będzie ono działać nawet jeśli nie zadbamy o to aby funkcja poprawnie obsługiwała argumenty będące macierzami) i łączone odcinkami prostymi. Składnia nowa: fplot2d(xr,f,<opt_args>) Składnia stara: fplot2d(xr,f,[style,strf,leg,rect,nax]) 1.2.1 Argumenty polecenia; 1.2.1.1 xr wektor (zawiera wartości argumentu funkcji, dla których ma zostać sporządzony wykres). 1.2.1.2 f nazwa funkcji (aktualnie zdefiniowanej w Scilabie). 1.2.1.3 opt_args argumenty opcjonalne identyczne jak w poleceniu plot2d. 1.3 Menu edycji okna graficznego Czasem może być co najmniej trudno znaleźć w helpach poszukiwaną cechę wykresu (np. krój pisma, rozmiar punktowy, grubość czy kolor linii). Pomocne w taiej sytuacji może być menu edycyjne okna graficznego (występuje poczynając od wersji 3.0). Jego działanie jest zbliżone do podobnego menu znanego z Matlaba. Umożliwia zmianę położenia osi (prawo / lewo), rozmiarów i kroju czcionek (nie tylko opisujących osie ale również tytułu, ewentualnej legendy itp), kolorów (tła, osi, napisów). Niestety wprowadzone zmiany przepadają wraz z zamknięciem okna, jednak jeśli zależy nam na wyglądzie ilustracji, którą mamy np. gdzieś wkopiować rozwiązanie takie jest wystarczające. 1.4 Inne polecenia 1.4.1 subplot(n,m,p) dzieli aktualne okno na n wierszy i m kolumn i wybiera podokno numer p (numer p jest liczony kolejno wierszami poczynając od górnego-lewego, które ma numer 1) jako aktualne do wykonania wykresu. Po poleceniu tym następuje dowolna komenda produkująca jakikolwiek wykres, po czym można wybrać kolejne okno i wykonać kolejny wykres. 1.4.2 plot przestarzałe, opis można znaleźć w helpach. 1.4.3 plot2d1 przestarzałe, wykresy logarytmiczne, opis w helpach. 1.4.4 plot2d2 wykres, w którym w kolejnych przedziałach wartości są stałe. 1.4.5 plot2d3 wykres słupkowy. 1.4.6 plot2d4 poszczególne fragmenty linii (łączące kolejne punkty) są strzałkami. 2 Zaawansowane polecenia dotyczące parametrów wyświetlania grafiki 2.1 Polecenie xget() służy do sprawdzania aktualnie obowiązujących parametrów (argumenty identyczne jak dla polecenia xset() poniżej. 2.2 Polecenie xset() służy do ustawiania (zmieniania) ogólnych parametrów grafiki (szczegóły można znaleźć wydając polecenie help xset). Oto jego niektóre parametry: 2.2.1 xset("auto clear","on") wartość domyślna "off" = przy kreśleniu kolejnego wykresu dotychczasowa zawartość okna nie jest usuwana. 2.2.2 xset("background",wartość) ustala kolor tła. 2.2.3 xset("color",wartość) ustala kolor rysowania, wartość jest z przedziału (1,biały) 2.2.4 xset("default") przywraca wartości domyślne (pożyteczne zwłaszcza gdy eksperymentowaliśmy z ustawieniami i nie wiemy jak wrócić do jakichś rozsądnych wartości). 2.2.5 xset("font",nazwa,wielkość) jak w opisie. 2.2.6 xset("font size",wielkość) jak w opisie. 2.2.7 xset("fpf",łańcuch) skrót od floating point format, składnia łańcucha jak w C. 2.2.8 xset("line style",wartość) styl aktualnej linii: 1 linia ciągła, wartości większe od 1 linie przerywane. Wartości: 1, 2, 4, 5, 7 linie ciągłe, 3 linia przerywana (jednakowe odcinki), 6, 8, 9 oś symetrii (dłuższa kreska i dwie krótsze). 2.2.9 xset("mark",rodzaj,wielkość) rodzaj i wielkość znacznika. Rodzaje znaczników można obejrzeć wydając polecenie xset() pojawia się wówczas okno dialogowe, którego jedną z pozycji
Fizyka Komputerowa SciLab podstawy 4 jest markid, niestety nie widać w nim liczb przypisanych do poszczególnych znaczników. Aby sprawdzić jaki jest numer (i wielkość) aktualnego znacznika należy wydać polecenie xget("marker"). Testy pokazują, że: 0 kropka, 1 plus, 2 x, 3 *, 4 klepsydra wypełniona (diamond fill), 5 klepsydra (diamond), 6 trójkąt (wierzchołkiem w górę), 7 trójkąt (wierzchołkiem w dół), 8 trefl, 9 kółko. 2.2.10 xset("mark size",wielkość) wielkość znacznika. 2.2.11 xset("thickness",wartość) grubość linii w pikselach. 2.2.12 xset("window",numer okna) czyni okno numer okna aktulanym, a jeśli okna o takim nuemrze nie ma to je tworzy. 3 Wykresy 3D (trójwymiarowe powierzchni będącej wartością funkcji dwóch zmiennych) 3.1 Podstawowa postać polecenia do sporządzania wykresów trójwymiarowych plot3d. Jego działanie (i wiele jego parametrów) jest analogiczne jak w przypadku plot2d. Więcej szczegółów zainteresowani mogą sobie znaleźć w helpach. Polecenie to musi otrzymać co najmniej trzy argumenty: wartości x i wartości y muszą być wektorami (o różnych lub równych długościach) oraz wartości z, które muszą zostać podane jako macierz o rozmiarze n x @ n y (gdzie n x i n y są długościami wektorów x i y): plot3d(x,y,z) Taka postać wywołania funkcji jest znacznie wygodniejsza niż sposób stosowany w Matlabie, gdzie współrzędne x i y również musiały mieć postać odpowiednich macierzy. Należy jednak pamiętać, że macierz z musi zawierać wartości dla wszystkich kombinacji współrzędnych x i y, zatem jeśli będziemy chcieli zrobić wykres funkcji to i tak swego rodzaju zabawy z wektorami współrzędnych raczej nie unikniemy. Przykład: Załóżmy, że zdefiniowaliśmy funkcję f(x,y) (i to zdefiniowaliśmy ją tak aby prawidłowo działała również w sytuacji gdy jej argumenty będą macierzami): deff('[z]=f(x,y)','z=x.^2+y.^2'); Mamy też wektory wartości x i y, zawierające wartości wespółrzędnych, dla których chcemy otrzymać wykres: x = linspace(0,10,10); y = linspace(0,20,20); Zauważmy, że są to wektory wierszowe o długościach odpowiednio 10 i 20 potrzebujemy więc macierzy z o rozmiarze 10 20 (albo 20 10 zależy jaką wybierzemy kolejność argumentów). Aby wynik funkcji miał pożądany rozmiar argumenty dostarczone do funkcji muszą też mieć odpowiednie (takie same) rozmiary. Potrzebujemy więc macierzy zawierającej jednakowe wiersze wypełnione kolejnymi wartościami x oraz macierzy mającej jednakowe kolumny wypełnione kolejnymi wartościami y. Możemy otrzymać je w ten sposób: xx = x' * ones(y); yy = ones(x)' * y; Zilustruję to dodatkowo na macierzach o mniejszych rozmiarach: x = [1,2] x =! 1. 2.! y = [1,2,3] y =! 1. 2. 3.! xx = x' * ones(y)
Fizyka Komputerowa SciLab podstawy 5 xx =! 1. 1. 1.!! 2. 2. 2.! yy = ones(x)' * y yy =! 1. 2. 3.!! 1. 2. 3.! Jak widać macierz xx zawiera wyłącznie wartości x (narastające w kolejnych kolumnach) zaś macierz yy zawiera wyłącznie wartości y narastające w kolejnych wierszach. Jeśli więc z każdej z macierzy wybierzemy element (i,j) to będą one współrzędnymi x i y punktu (i,j) należącego do danych. Jeśli teraz macierze xx i yy podamy jako argumenty dla funkcji f otrzymamy odpowiednią do naszych celów macierz z: z = f(xx,yy); I można będzie sporządzić wykres: plot3d(x,y,z) Istnieją też dodatkowe wersje polecenia plot3d: 3.2 Polecenie plot3d1 Polecenie to działa analogicznie do plot3d. Różnica polega na tym, że kolor danego elementu powierzchni zależy od wartości z jaka temu elementowi odpowiada. 3.3 Polecenie plot3d2 i plot3d3 Oba te polecenia przyjmują argumenty wyłącznie w postaci macierzy macierze te definiują narożniki płaskich elementów, z których będzie zbudowany wykres powierzchni. Właśnie za pomocą tych poleceń stworzone są obrazy powierzchni (np. torusy itp.), które można zobaczyć jako po uruchomieniu programów demonstracyjnych. Nie będziemy się nimi zajmować. 3.4 Porady praktyczne 3.4.1 W każdym oknie wykresu 3D znajduje się przycisk umożliwiający obracanie wykresu. Podczas obracania u dołu okna pojawiają się wartości kątów (nazwanych alpha i theta) odpowiadających
Fizyka Komputerowa SciLab podstawy 6 aktualnie wybranemu widokowi.warto wiedzieć, że wartości te można podać jako argumenty polecenia plot3d jeśli zatem dokonamy już wyboru najwłaściwszego ustawienia wykresu możemy spowodować aby przy wszystkich kolejnych wywołaniach programu wykres od razu był wyświetlany w wybrany przez nas sposób. Przydaje się to zwłaszcza gdy metodą prób i błędów staramy się uzyskać jak najlepszy wygląd grafiki. 4 Inne polecenia dotyczące wykreślania funkcji dwóch zmiennych 4.1 Polecenie Matplot Polecenie to służy do dwuwymiarowego wykreślania wartości macierzy na podstawie wartości elementów macierzy obliczane są kolory kwadratów reprezentujących te elementy. 4.1.1 Składnia Nowa: Matplot(a,<opt_args>) Stara: Matplot(a,[strf,rect,nax]) 4.1.2 Argumenty 4.1.2.1 a macierz liczb rzeczywistych. 4.1.2.2 opt_args rect, nax, frameflag, axesflag (w starej składni strf) ich znaczenia są analogiczne jak w przypadku plot2d. 5 W 6 Wykresy trajektorii w 3 wymiarach 6.1 Polecenie param3d Polecenie to umożliwia wykreślenie jednej krzywej w trójwymiarowym układzie współrzędnych. Jako argumenty przyjmuje trzy wektory (oczywiście o jednakowej długości) zawierające współrzędne kolejnych punktów. 6.2 Polecenie param3d1 To z kolei polecenie różni się od poprzedniego tym, że umożliwia wykreślenie wielu krzywych w tym samym trójwymiarowym układzie współrzędnych. Dane muszą być podane w postaci trzech macierzy każda z macierzy zawiera dane dotyczące jednej współrzędnej, a jej kolejne kolumny odnoszą się do kolejnych krzywych. 6.3 Porady praktyczne Pojedyncza krzywa wykreślona w trójwymiarowym układzie współrzędnych bardzo często (zwłaszcza gdy ma bardziej skomplikowany kształt) jest nieczytelna (trudno np. określić czy przebiega przed czy za którąś z osi). Interpretację wykresu bardzo ułatwia narysowanie w tym samym ukłądzie rzutów trajektorii na płaszczyzny xy, yz i xz, można je uzyskać bardzo prosto: 6.4 xset("thickness",3) param3d(x,y,z) xset("thickness",1) param3d1([zeros(x),x,x],[y,zeros(y),y],[z,z,zeros(z)]) W przykładzie powyżej trajektoria jest wykreślona wyraźnie grubszą linią, a jej rzuty linią cienką.