Scilab - podstawy Scilab jest środowiskiem numerycznym, programistycznym i numerycznym dostępnym za darmo z INRIA (Institut Nationale de Recherche en Informatique et Automatique). Jest programem podobnym do MATLABa oraz jego darmowego 'klonu' OCTAVE'a. Wersje instalacyjne programu Scilab mogą zostać pobrane ze strony http://www.scilab.org. Wprowadzenie do Scilaba: http://www.scilab.org/content/download/1754/19024/file/introscilab.pdf Help - uzyskiwanie pomocy help polecenie, np. help sin apropos polecenie wyświetla informacje związane z danym poleceniem Na stronie http://www.scilab.org/product/man Okna Konsola Scilab Edytor Scilab (wywołanie: Applications/SciNotes)? - Help Na dobry początek wykresy funkcji Elementy procedury tworzenia wykresu: utworzenie ciągu wartości x-ów utworzenie ciągu wartości y-ków rysowanie zapisanie rysunku do pliku graficznego Wartości x-ów : x=[0,1,2,3,4,5,5.5,10,20] ; - ciąg wartości x=(-10:0.1:10) ; (wartość początkowa : krok : wartość końcowa) x=linspace(0, 3.141592, 20); (wartość początkowa, wartość końcowa, ile wartości) Uwagi: ; - wartości nie są wypisywane na konsoli; - transpozycja; jako wartość π można wpisać %pi, czyli: x=linspace(0,%pi,20). Wartości y-ków przykłady: Uwaga: określenie y-ki jest symboliczne; tworzony obiekt może mieć dowolną nazwę. y=x; y1=2*x; z=2*x-1; fun=sin(x)+cos(2*x); y2=x^3 g=tan(x)^2; Znak ^ oznacza potęgowanie. Uwaga: Wszystkie podane wyżej wyrażenia działają na wektorach Scilab wprowadzenie, UKSW -1- Anna Trykozko, ICM, Uniwersytet Warszawski
Uwaga: działanie (przykładowe) z=x*x spowoduje pojawienie sie komunikatu o błędzie. Na razie zastąpmy to wyrażenie wyrażeniem: z=x^2. Rysowanie funkcja plot plot(x,y) Pierwszy przykład: x=linspace (0, %pi, 50); y=sin(x); plot (x,y); y1=cos(2*x); plot(x,y1); xgrid(); Zapisanie rysunku do pliku: W oknie graficznym (interakcyjnie): Plik / eksportuj do /... wybrać typ pliku (PNG, GIF, JPG,...), podać nazwę pliku Poprzez wpisanie w oknie konsoli odpowiedniego polecenia, np: xs2png (numer_okna_graficznego, nazwa_pliku.png ) Uwagi: numer_okna_graficznego jest wyświetlony w pasku tytułowym okna. Standardowo pierwsze utworzone okno ma numer 0. Scilab wyróżnia katalog bieżący (Plik/ Wyświetl katalog bieżący). O ile nazwa pliku nie zostanie poprzedzona ścieżką dostępu, plik zostanie zapisany w katalogu bieżącym. Zmiana katalogu bieżącego: Plik/ Zmiana bieżącego katalogu...) Zmienne: W programie operuje się na zmiennych. Nadawanie im wartości odbywa się poprzez podstawienie: a=2.5; b=6.3 c=a+b Umieszczenie średnika na końcu polecenia sprawia, że wyliczona wartość (lub wartości) nie jest wyświetlana. Stałe specjalne: %i - wartość urojona równa 1 %pi - π %e - podstawa logarytmu naturalnego Scilab wprowadzenie, UKSW -2- Anna Trykozko, ICM, Uniwersytet Warszawski
%eps - największa wartość, dla której 1 + % eps = 1 %inf - nieskończoność (komputerowa) %t, %f - zmienne logiczne o wartościach prawda (true) i fałsz (f) Wektory Program Scilab jest programem wektorowym, większość operacji jest wykonywanych w odniesieniu do wektorów. Istotne jest rozróżnienie wektora wierszowego i kolumnowego. Wektor wierszowy - elementy oddzielone spacją lub przecinkiem: v=[1 2 3 4] albo v=[1, 2, 3, 4] Wektor kolumnowy - elementy oddzielone średnikiem lub pisane od nowego wiersza: r=[1; 2; 3; 4] r=[1 2 3 4] Uwaga: W przypadku dużych zestawów wartości należy umieszczać średnik na końcu polecenia. Transpozycja - zamiana wektora wierszowego na kolumnowy, i odwrotnie: vt = v' rt = r' vt' y=[1 2 3] Wektor można zdefiniować zadając wartość pierwszego elementu, krok oraz wartość ostatniego elementu, oddzielając je dwukropkiem: x=[-10:0.5:10] Zwróćmy uwagę na różnicę: x=[-10:0.5:10] Z kolei polecenie: z=linspace (-10, 10, 101); wygeneruje wektor o 101 elementach, przyjmujących wartości z przedziału [-10, 10]. Na wektorach o zgodnych wymiarach można wykonywać różne operacje: x+y x-y x*y x*y' x'*y Odwołania do elementów wektorów, np: x(1) x(10) y(2)+x(3) Wektory można konstruować w oparciu o zmienne: a=1 b=2 c=3 Scilab wprowadzenie, UKSW -3- Anna Trykozko, ICM, Uniwersytet Warszawski
x=[a, b, c] Macierze: A=[1,2,3; 4,5,6; 7,8,9] B=[1,2,3 1, 2, 3 1, 2, 3] u=[-1, -2, -3] v=[1, 1, 1] w=[-1, 0, 1] C=[u; v; w] // należy zwrócić uwagę na te trzy polecenia r=[u v w] // i dzielące je różnice D=[u' v' w'] Operacje na macierzach (Uwaga na zgodność wymiarów macierzy) A+B C-D A*B - mnożenie macierzowe B*A A.*B - mnożenie 'element po elemencie' C*u inv(a) cond(b) det(c) A*inv(A) Operacje 'element po elemencie':.*./.^ Rozwiązywanie układów równań liniowych A=[1, 3, 2; 2,13, 8; 0, 2 3] b=[1, 2, -4]' x=a\b Jest to najszybszy sposób rozwiązania układu równań. Szybkie tworzenie specjalnych macierzy i wektorów c=ones(5,3) d=zeros(10,1) dd=zeros(10) I=eye(5,5) D=diag( [2 1 0-1 -2]) L=diag([1,2,3,4], -1) U=rand(3,3) R=rand(3,3,'normal') rv=rand(10,1) rv=rand(1,10) Skrypty Polecenia programu Scilab też można umieścić w pliku (skrypcie) i wielokrotnie wykonywać. W plikach tych oprócz poleceń umieszcza się komentarze; są to linie rozpoczynające się //. Zwyczajowe rozszerzenie takich plików to.sci. Uruchomienie poleceń z pliku następuje po wprowadzeniu polecenia (albo poprzez wybór z menu poleceń): exec plik.sci Funkcje: sin, cos, log, exp, abs, sqrt, sum, max, min, sort Scilab wprowadzenie, UKSW -4- Anna Trykozko, ICM, Uniwersytet Warszawski
Pętla for for i=1:10...... Pętla while h=0; while h<7 h=h+1; disp (h) ; Instrukcja warunkowa if warunek then...instrukcje elseif warunek1 then...instrukcje1 elseif warunek2 then...instrukcje2 else... Więcej informacji o tworzeniu wykresów: Następujące po sobie polecenia plot powodują dodanie ( dorysowanie ) kolejnego wykresu do bieżącego okna. Operacje na oknach: clf() wyczyszczenie bieżącego okna. clf(1) wyczyszczenie okna nr 1. scf(1) utworzenie okna o numerze 1. xdel() usunięcie bieżącego okna. xdel(1) usunięcie okna o numerze 1. Kilka wykresów na raz : plot (x,y,x,y1); Uwaga: w związku z tym można na jednym rysunku umieszczać wykresy zdefiniowane dla różnych zakresów lub gęstości x-ów. x=linspace (0, %pi, 20); y=sin(x); x1=linspace(-%pi, %pi, 50); y1=cos(x1); x2=linspace(-2*%pi, -%pi, 20); y2=sin(2*x2); plot(x,y,x1,y1,x2,y2); xgrid(); Kolory są ustalane automatycznie. Poprzez odpowiednie zdefiniowanie parametrów można sterować zarówno kolorami, jak i rodzajem linii oraz markerów; porównajmy z poprzednim wykresem: Scilab wprowadzenie, UKSW -5- Anna Trykozko, ICM, Uniwersytet Warszawski
plot(x,y,'r',x1,y1,'g:o',x2,y2,'b*'); Każda para x-ów i y-ków została uzupełniona o ciąg symboli definiujących sposób wykreślania. Kolory: symbol kolor plot(x,y,'r',x1,y1,'r',x2,y2); r czerwony g zielony b niebieski c cyjan m magenta y żółty k czarny w biały Style wykreślania linii: plot(x,y, - ); linia ciągła (domyślnie) plot(x,y, - - ); linia przerywana plot(x,y, : ); linia kropkowana plot(x,y, -. ); linia kreskowo-kropkowa Znaczniki: Symbol znacznik Symbol znacznik + plus ^ o kółko v * gwiazdka >. kropka < krzyżyk gwiazda x 'pentagram' pięcioramienna 'square' lub 's' kwadracik 'none' brak znacznika - 'diamond' lub 'd' domyślnie Uwaga: Domyślnie znaczniki nie są rysowane. Jeśli wskaże się tylko znacznik, to trzeba jawnie podać symbol stylu wykreślania linii. W przeciwnym przypadku wykres nie będzie zawierał linii. Opisywanie wykresów: tytuł, opisy osi, lega title ( Tytul wykresu ); xtitle( Tytul wykresu, opis osi x-ow, opis osi pionowej ); leg ( opis 1. funkcji, opis 2. funkcji, opis 3. funkcji ); Wszystkie opisy odnoszą się do bieżącego okna. Scilab wprowadzenie, UKSW -6- Anna Trykozko, ICM, Uniwersytet Warszawski
leg ( opis 1. funkcji, opis 2. funkcji, opis 3. funkcji,4); położenie legy zdefiniowanie za pomocą myszy: leg ( opis 1. funkcji, opis 2. funkcji, opis 3. funkcji,5); Uwaga: Legę można uzupełnić o informację o jej położeniu na rysunku poprzez podanie na końcu opcjonalnego parametru. Domyślnym położeniem legy jest prawy górny róg. Polecenie: leg ( opis 1. funkcji, opis 2. funkcji, opis 3. funkcji,4); spowoduje umieszczenie legy w lewym dolnym rogu. Przykładowe inne możliwości można podawać albo opis liczbowy, albo opis słowny (w apostrofach): 1 lub "in_upper_right" prawy górny róg, przyjmowane domyślnie 2 lub "in_upper_left" lewy górny róg 3 lub "in_lower_left" lewy dolny róg 4 lub "in_lower_right" prawy dolny róg 5 lub "by_coordinates" położenie legy zdefiniowanie za pomocą myszki w oknie graficznym. Kilka rozłącznych wykresów w jednym oknie subplot Przykład 4 wykresów rozmieszczonych w 2 kolumnach i 2 wierszach. -->clf() -->subplot(2,2,1); -->plot(x,y) -->subplot(2,2,2); -->plot(x,y,'ro-.') -->subplot(2,2,2); -->subplot(2,2,3); -->plot(x,y,'mo-.') -->xgrid() -->subplot(2,2,4); -->plot(x,2*y,x,y); -->xgrid() Scilab wprowadzenie, UKSW -7- Anna Trykozko, ICM, Uniwersytet Warszawski
Rozwiązanie równania ( D u( x)) = f ( x) w przedziale [0, 10]. W x=0 warunek Dirichleta f(0)=10. x=10: warunek Dirichleta f(10)=0 clear; // przedzial: a=0; b=10; // liczba wezlow n=10; h=(b-a)/(n-1); // wspolczynnik dyfuzji D=0.5; // polozenie wezlow for i=1:n x(i)=a+(i-1)*h; /// macierz dyfuzji A=zeros(n-2,n-2); for i=1:n-2 A(i,i)=D*2/(h*h); for i=1:n-3 A(i,i+1)=-D/(h*h); for i=2:n-2 A(i,i-1)=-D/(h*h); /// /// /// prawa strona f=zeros(n-2,1); f(1)=d*10/(h*h); // zrodlo (np. ciepla) w punkcie 5 f(5)=2; scf(0); clf(0); ///Backslash denotes left matrix division. ///x=a\b is a solution to A*x=b u1=a\f; u1_full=[10;u1;0]; plot(x,u1_full); x=10: warunek Neumanna df/dx=0 clear; // przedzial: a=0; b=10; // liczba wezlow n=10; h=(b-a)/(n-1); // wspolczynnik dyfuzji D=0.5; // polozenie wezlow for i=1:n x(i)=a+(i-1)*h; /// macierz dyfuzji A=zeros(n-1,n-1); for i=1:n-1 A(i,i)=D*2/(h*h); for i=1:n-2 A(i,i+1)=-D/(h*h); for i=2:n-1 A(i,i-1)=-D/(h*h); /// modyfikacja macierzy A A(n-1,n-2)=-2*D/(h*h); /// prawa strona f=zeros(n-1,1); f(1)=d*10/(h*h); // zrodlo (np. ciepla) w punkcie 5 f(5)=2; scf(0); clf(0); ///Backslash denotes left matrix division. ///x=a\b is a solution to A*x=b u1=a\f; u1_full=[10;u1]; plot(x,u1_full); Scilab wprowadzenie, UKSW -8- Anna Trykozko, ICM, Uniwersytet Warszawski