Strona 1 Scilab jest darmowym programem (freeware) przeznaczonym do badań matematycznych. Może pomóc w statystycznym opracowaniu wyników badań (pomiarów). Można przy jego pomocy rysować grafy, wykresy 2- i 3- wymiarowe, tworzyć animacje. Powstał we Francji we współpracy INRIA (narodowy instytut badań w dziedzinie komputerów) oraz ENPC (słynna francuska uczelnia techniczna). Najnowszą wersję programu (5.3.3) można pobrać stąd. W tej wersji interfejs użytkownika jest w dużej części po polsku. Tutoriale internetowe: Wprowadzenie do Scilaba. Materiały z Politechniki Łódzkiej, autor Andrzej Brozi. Manual, po angielsku.
Strona 2 Po uruchomieniu programu pojawi się okno: W tym oknie wpisujemy kolejne polecenia i odczytujemy odpowiedzi. Praca z programem Całe wpisane polecenie wykonywane jest po naciśnięciu klawisza Enter, niezależnie od aktualnego położenia kursora. Można wpisywać polecenie w kilku wierszach, kończymy wiersz wpisaniem dwóch kropek.. i naciskamy Enter.
Strona 3 Zakończenie polecenia średnikiem ; zapobiega pojawieniu się wyniku polecenia na ekranie. Polecenie diary('nazwapliku', ['new' 'append']) powoduje, że wszystkie polecenia i odpowiedzi zapisywane są do wskazanego pliku. Rejestrowanie kończymy poleceniem diary(0). Plik zostanie utworzony w katalogu bieżącym, polecenie pwd (print work directory) wyświetli nazwę tego katalogu. Drugi parametr polecenia diary nie jest obowiązkowy, domyślna wartość, to 'new'.istniejący plik o takiej samej nazwie zostanie, bez uprzedzenia, nadpisany. Najważniejsze funkcje matematyczne abs wartość bezwzględna, moduł exp funkcja wykładnicza exp x = e x log logarytm naturalny (o podstawie e ) log10 logarytm o podstawie 10 sin sinus (argument w radianach) cos cosinus (argument w radianach) tan tangens (argument w radianach) cotag kotangens (argument w radianach)
abs cosh sinh sqrt round floor ceil int rand wartość bezwzględna, moduł cosinus hiperboliczny cosh x = e x e x sinus hiperboliczny sinh x = ex e x pierwiastek kwadratowy (sqrt(-1)=i) przybliżenie całkowite (zaokrąglenie) round(.4999999999999999)=0 round(.49999999999999999)=1 przybliżenie całkowite z dołu (floor(2.3)=2) przybliżenie całkowite z góry (ceil(2.3)=3) obcięcie części ułamkowej (int(-3.4)=-3) liczba (macierz) losowa, losowane są liczby z przedziału [0,1 rand() liczba rand(5,4) macierz 5 4 ** operator potęgowania (2**5=32, 1.3**5.2=3.9129602) 2 2 Strona 4 Po wykonaniu polecenia: zm=wyrażenie (np. x=sqrt(17)+exp(0)+sin(%pi/2)) powstanie zmienna o nazwie zm, jej wartością będzie obliczone wyrażenie (jeżeli zmienna o nazwie zm już istniała, to zmieni swoją wartość). Po wykonaniu polecenia: wyrażenie
(np. sqrt(17)+exp(0)+sin(%pi/2)) wartość wyrażenia zostanie obliczona i przypisana do zawsze istniejącej zmiennej o nazwie ans. Operacje na wektorach i macierzach W programie Scilab działa się właściwie tylko na macierzach (tablicach liczb). Pojedyncza liczba jest macierzą 1 1, wektor jest macierzą n 1. Definiujemy macierze tak: A=[1 2 3;4 5 6;7 8 9] Strona 5 ; jest separatorem wierszy. Wszystkie wiersze muszą mieć taką samą długość. Jeśli macierz jest jednoelementowa, to możemy opuścić nawiasy: x=37. Definiując macierz, możemy się posłużyć istniejącymi już macierzami lub innymi poleceniami (funkcjami). Polecenia: A=1:10 B=11:20 D=[A;B]
Strona 6 utworzą macierz dwuwierszową D =[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]. A=1:0.17:2 1 1.17 1.34 1.51 1.68 1.85 B=2:-0.22:0.6 2 1.78 1.56 1.34 1.12 0.9 0.68. Polecenie x=linspace(2,3,10) utworzy macierz jednowierszową mająca 10 wyrazów, pierwszym wyrazem macierzy jest liczba 2, ostatnim 3. Operator ' transponuje macierz, tzn. zamienia wiersze na kolumny i vice versa. [1 5] 2 A=[1:5]' 3 4 [ A=[[1:100]' [1:100]'] 1 1 2 2. 100 100] Jeżeli wpiszemy polecenie postaci: A=fun(matrix) (np. linspace(0,1,101) A=exp(ans)), to wartości
Strona 7 funkcji fun zostaną obliczone dla każdego elementu macierzy matrix. Jak otrzymać taką macierz (z obliczonymi wartościami)? [ 2 99 ] 0 100 100 100 sin 0 sin 2 99 sin sin sin 100 100 100 A=linspace(0,%pi,101) B=sin(A) C=[A;B]. W programie Scilab istnieją dwa operatory mnożenia macierzy. A=[1 2;3 4] [ 1 2 3 4] B=[1 2;3 4] [ 1 2 3 4] A*B [ 7 10 15 22], * oznacza operator mnożenia znany z algebry liniowej, A.*B [ 1 4 9 16],.* oznacza operator mnożenia wyraz po wyrazie.
Strona 8
Strona 9 Wykorzystanie macierzy Rozwiązywanie układów równań liniowych. Równanie postaci ax = b a,b R rozwiązujemy tak: x = b a. Układ równań a 11 x 1 a 12 x 2 a 1n x n b 1 = a n1 x 1 a n2 x 2 a nn x n b n możemy zapisać za pomocą macierzy A =[a 11 a 12 a 1n a n1 a n2 a nn] i wektorów x = [x 1 n] b x =[b1 n] w b postaci A x = b i rozwiązać analogicznie (przez dzielenie) x = A b. Nietypowy jest zapis: najpierw dzielnik, potem dzielna oraz odwrotna kreska ułamkowa (backslash). Istnieje tez operator dzielenia wyraz po wyrazie, [2 3 4].\[3 4 5]=[1.5 1.3333333 1.25] Przykład: { x y z = 3 x y z = 1 x y z = 3 A=[1 1 1;1-1 1;1-1 -1]
Strona 10 b=[3 1-3]' x=a\b 0 1 2. Wykresy dwuwymiarowe, podstawowym poleceniem jest plot2d. Można je wywoływać z argumentami różnych typów. plot2d(matrix). Matrix jest macierzą n 1, lub 1 n. Na osi Ox umieszczane zostaną numery współrzędnych wektora matrix, na osi Oy natomiast współrzędne tego wektora. Chcemy zbadać eksperymentalnie zachowanie ciągu a n = sin n 2. b=1:10000; b=b.*b; a=sin(b) W macierzy jednowierszowej a mamy 10000 początkowych wyrazów tego ciągu. Polecenie plot2d(a(801:1000)) rysuje wykres fragmentu tego ciągu. Niestety, skalowanie na osi X jest mylące.
Strona 11 Polecenie plot2d(801:1000,a(801:1000)) skaluje poprawnie oś X.
Strona 12 Rysowanie wykresu funkcji y = e x sin x. x=linspace(0,2*%pi,101) y=sin(x).*exp(x) plot2d(y)
Strona 13 Po kolejnych poleceniach z=exp(x) plot2d(z) okno graficzne wygląda tak:
Strona 14 Wykres został dorysowany w tym samym oknie graficznym, skalowanie osi Y zostało zmienione. Można takie zachowanie programu zmienić poleceniem xset. xset( window,numer_okna) xset( auto clear, on ) Po poleceniach:
Strona 15 y=linspace(0,1,11) plot2d(y) nie pasują oznaczenia na osi Ox, nic nie jest dorysowywane. plot2d(matrix), matrix jest macierzą n k n, k > 1. Na osi Ox umieszczane są numery wierszy macierzy, natomiast na osi Oy współrzędne (wyrazy) macierzy matrix. Powstaje tyle wykresów, ile macierz ma kolumn ( k ). Narysowanie jednym poleceniem wykresu dwóch funkcji. x=linspace(0,%pi,201) y=[sin(x)' cos(x)'] plot2d(y)
Strona 16 plot2d(wektorx,wektory), wektory wektorx oraz wektory muszą mieć taką samą długość. Na osiach Ox oraz Oy umieszczane są współrzędne tych wektorów. Polecenie to nadaje się do rysowania tradycyjnych
Strona 17 wykresów funkcji. x=linspace(-3,3,101) y=exp(-(x.*x)) plot2d(x,y) Polecenie plot2d(..) ma odmiany inaczej łączące punkty wykresu.
Strona 18 subplot(2,2,1) plot2d(x,y) normalny wykres subplot(2,2,2) plot2d2(x,y) wykres stały pomiędzy punktami subplot(2,2,3) plot2d3(x,y) wykres słupkowy subplot(2,2,4) plot2d4(x,y) wykres strzałkowy
Strona 19 x=[0 2 3.5] y=[2 2 3.5] plot2d4(x,y) x=[2 3.5] y=[2 0.5] plot2d4(x,y)
Strona 20 Wykresy trójwymiarowe, podstawowym poleceniem jest plot3d(wektorx,wektory,values), wektor wektorx ma długość n x, wektory ma długość n y (liczby n x, n y nie muszą być równe), values jest macierzą o rozmiarze n x n y. Jak sporządzić wykres funkcji f x, y = x 2 y 2 x, y [ 3,3]?
[ Scilab - wprowadzenie Strona 21 Inaczej, jak (w wygodny sposób) uzyskać macierz values? Skorzystamy z funkcji ones(...), która tworzy macierz złożoną z samych jedynek. Argumentem funkcji ones może być para liczb (ilość wierszy, ilość kolumn) lub macierz wzorcowa. Istnieje analogiczna funkcja zeros(...). x=linspace(-3,3,51) [ 3 2.88 2.88 3] y=linspace(-3,3,61) [ 3 2.9 2.9 3] xx=x'*ones(y) Otrzymamy macierz o rozmiarach 51 61 ze stałymi wierszami yy=ones(x)'*y 3 3 3 2.88 2.88 2.88. 3 3 3 ] Otrzymamy macierz o rozmiarach 51 61 ze stałymi kolumnami [ 3 2.9 3 3 2.9 3 3 2.9 3 ]. z=xx.*xx+yy.*yy
Strona 22 plot3d(x,y,z) Wykresy trajektorii (krzywych w R 3 ), podstawowe polecenie to, param3d(x,y,z), x, y, z są wektorami o takiej długości, opisującymi punkty w przestrzeni. Rysowanie linii śrubowej. t=linspace(0,4*%pi,101)
Strona 23 x=2*cos(t) y=2*sin(t) z=4*t xset( thickness,3) param3d(x,y,z) xset( thickness,1) param3d(x,y,zeros(z))
Strona 24