You are on page 1of 18

Fizyka Komputerowa

Scilab podstawy

Podstawowe wiadomoci o programie Scilab


1 Oglne
1.1
Opis tu przedstawiony dotyczy programu Scilab w wersji 4.0 (wersja zainstalowana w pracowni studenckiej
i zarazem najnowsza stabilna). Mona j cign ze strony domowej programu http://www.scilab.org .
1.2
Opis ten jest przeznaczony dla studentw pitego semestru, ktrzy bd musieli samodzielnie i od podstaw
napisa programy interpolujce, poszukujce minimw i miejsc zerowych funkcji czy rozwizujce ukady
rwna oraz rwnania rniczkowe zwyczajne z tego wzgldu nie opisuj tu szczegowo np. dziaania
operatora dzielenia macierzowego ani nie podaj opisu procedury ode ;-). Zwaszcza ten ostatni opis
potrzebny bdzie dopiero w sidmym semestrze znajdzie si w osobnym pliku.
1.3
Scilab jest programem przeznaczonym do oblicze numerycznych.
1.4
Scilab jest interpreterem tzn. pisane w nim programy (skrypty) nie s przed wykonaniem kompilowane
kolejne wprowadzane z klawiatury (bd odczytywane z pliku) polecenia s interpretowane w trakcie
realizacji programu. Ma to zarwno ze jak i dobre strony: programy interpretowane s wolniejsze od
kompilowanych, z drugiej jednak strony w przypadku interpretacji programu nie musimy z gry zna typw
wszystkich zmiennych czy rozmiarw tablic mog si one zmienia dynamicznie w trakcie wykonywania
programu.
Istnieje jednak pewne odstpstwo od tej reguy zdefiniowane funkcje, wczytywane z pliku wczeniej
zapisanego na dysku, s podczas wczytywania kompilowane, co przyspiesza wykonywanie ich
pniejszych wywoa (jest to domylne zachowanie programu o jego zmianach pniej).
1.5
Istniej moliwoci doczania do Scilaba skompilowanych funkcji w C czy Fortranie (tym nie bdziemy si
zajmowa).
2 Literatura i instrukcje.
2.1
Niestety jak dotd nie ukazaa si adna ksika po polsku (moe jeszcze w tym roku (2006) ukae si
moja ksika na ten temat Scilab w przykadach, wydawnictwo NAKOM) . Dostpnych jest kilka
polskich pozycji dotyczcych Matlaba trzeba jednak pamita, e midzy Matlabem i Scilabem istniej
rnice w skadni, ksiki te nie bd wic przydatne jako instrukcje obsugi Scilaba. Jednak filozofia
dziaania obu programw jest identyczna, w obu te istniej funkcje majce takie same dziaanie, niekiedy
wrcz majce identyczne nazwy i skadni, z tego punktu widzenia kada ksika opisujca sposb dziaania
Matlaba moe by przydatna.
2.2
Dla znajcych jako-tako angielski: pliki pomocy Scilaba.
2.3
Warto zapozna si z programami demonstracyjnymi (uruchamianymi przyciskiem Scilab Demos w menu
pomocy ? Scilaba), i je przeanalizowa (no, ale to dopiero kiedy co ju si wie o dziaaniu programu).
2.4
Internet: mona znale sporo stron powiconych pracy ze Scilabem (nie znalazem jednak stron po polsku,
wikszo jest po angielsku, a niektre po francusku).
2.4.1 Strona domowa Scilaba: http://www.scilab.org/
3 Praca ze Scilabem
3.1
Uruchomienie bezporednio po uruchomieniu Scilab wczytuje swj plik ini, jego zawarto decyduje
np. o foncie uywanym w gwnym oknie programu, o licie zmiennych systemowych itp. (o moliwoci
jego edycji pniej). W przypadku wczeniejszych wersji rwnoczenie (a waciwie minimalnie wczeniej)
z gwnym (a obecnie jedynym) oknem programu pojawiao si jeszcze jedno okno Scilex engine
Scilaba.
3.2
Wyczenie oprcz odpowiedniego przycisku windowsowego okna Scilaba mona go wyczy za
pomoc komendy exit (oczywicie uycie jej w skrypcie moe troch utrudni zapoznanie si z wynikami
dziaania programu, bo wszystkie okna znikn natychmiast nie zadajc nawet pytania czy faktycznie o to nam
chodzio).
3.3
Wydawanie polece komendy mona wpisywa z klawiatury s wykonywane natychmiast po
naciniciu Enter). Przed wykonaniem komend mona edytowa przemieszczajc kursor za pomoc
strzaek w prawo i w lewo. Nacinicie klawisza Enter powoduje wykonanie caego polecenia) niezalenie
od aktualnej pozycji kursora w linii polecenia.
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

3.4

3.5

3.6

3.7

Scilab podstawy

Skrypty za pomoc dowolnego edytora tekstowego mona utworzy plik (czysty plik tekstowy) o
dowolnej nazwie i rozszerzeniu (tzw. skrypt) zawierajcy wiele polece, ktre zachowuj si jak program
s interpretowane w miar wczytywania kolejnych polece z pliku przez Scilab. Zwyczajowo plikom
zawierajcym skrypty nadaje si rozszerzenie .sce jednak tak na prawd jest to nazwa zwyczajowa, ktra
przydaje si gwnie systemowi Windows (do rozpoznania jakim programem naley otworzy plik z takim
wanie rozszerzeniem). Podobnie jest z rozszerzeniem .sci, ktre zwyczajowo przypisywane jest plikom
zawierajcym funkcje.
Edytor poczynajc od wersji 2.7 Scilab wyposaony jest w edytor SciPad, ktry rozpoznaje skadni
polece Scilaba i odpowiednio koloruje sowa kluczowe. Mona w nim pisa programy i funkcje oraz od
razu przesya je do uruchomienia w Scilabie. Uruchamiamy go z menu (pozycja Editor). Edytor ten
rozpoznaje wybrany w Scilabie katalog roboczy i domylnie wanie w nim szuka plikw do otwarcia.
Ustalenie aktualnego katalogu roboczego polecenie chdir('cieka'). Mona te skorzysta z menu
(pozycja File i dalej Change Directory) mona wwczas przeglda istniejce katalogi. Po
wybraniu katalogu i zatwierdzeniu wyboru w linii komend pojawi si polecenie chdir z odpowiednim
argumentem (ciek wybranego katalogu) i od razu zostanie wykonane. Jeeli w nazwie katalogu wystpuje
znak ' to wystpi bd (Scilab zinterpretuje go jako zakoczenie acucha definiujcego ciek) wystarczy
zamieni go na dwa takie znaki i ponowi komend.
Historia Scilab pamita pewn liczb wczeniej wydanych komend. Nacinicie strzaki skierowanej w
gr powoduje pojawienie si ostatnio wydanej komendy, kolejne jej nacinicia przywouj wczeniejsze
komendy. Strzaka w d te dzia w tym kontekcie. Tak wic we wspomnianym wczeniej przykadzie
zmiany katalogu wybr katalogu zawierajcego znak ' spowoduje natychmiastowe wystpienie bdu, mona
jednak ponownie wywoa ostatni komend i rcznie doda jeszcze jeden znak ' .

4 Dopasowanie Scilaba do wasnych potrzeb


4.1
Plik scilab.ini pocztkowo nie istnieje, mona go jednak stworzy w aktualnym (w chwili uruchamiania
Scilaba) katalogu. Bezpoednio po zainstalowaniu Scilaba katalogiem tym jest \Documents and
Settings\nazwa uytkownika. W pliku tym mona umieci wszelkie komendy jakie chcielibymy aby Scilab
wykonywa bezporedni po uruchomieniu. W szczeglnoci moe znale si tam polecenie
chdir('cieka') wskazujce na katalog, w ktrym trzymamy pliki Scilaba. Jednak definiowanie w tym
pliku zmiennych, ktre chcielibymy by byy zawsze dostpne, mija si z celem bowiem ich ywotno
siga nie dalej ni do najbliszego uycia polecenia clear.
4.2
Plik scilab.star znajduje si w domowym katalogu Scilaba. W tym pliku mona ewentualnie
zdefiniowa zmienne, o ktrych wspomniaem powyej. Przed eksperymentami warto jednak sporzdzi
kopi zapasow tego pliku bo jego bdna zawarto moe uniemoliwi uruchomienie programu.
5 Pomoc
5.1
Pozycja w menu ? rozwija si lista, na ktrej pierwsz pozycj jest uruchomienie przegldarki plikw
pomocy (Scilab Help). Rwnie dobrze moemy posuyc si standardowym skrtem klawiszem F1.
5.2
W linii komend polecenie help nazwa (gdzie nazwa jest nazw funkcji, polecenia itp.) otwiera t sam
przegldark z wybranym ju opisem.
5.3
Polecenie apropos wyraenie (gdzie wyraenie moe by wyraeniem skadajcym si z kilku sw)
take otwiera t sam przegldark, ale tym razem z list opisw zawierajcych wpisane wyraenie.
6 Notatki z sesji Scilaba
6.1
Istnieje moliwo dokadnego zapisu przebiegu aktualnej sesji pracy ze Scilabem: polecenie
diary('nazwa_pliku') powoduje zapis do podanego pliku tekstowego wszystkich wpisywanych przez
nas polece oraz wszystkich odpowiedzi Scilaba. Zakoczenie: diary(0). Polecenie to koniecznie chce
zaoy nowy plik tekstowy o podanej nazwie zatem po przerwaniu zapisu trzeba zacz zapisywanie do
pliku o innej nazwie (we wczeniejszych wersjach polecenie to zachowywao si na tyle kulturalnie, e nie
kasowao wczeniejszego pliku o podanej nazwie tylko informowao, e taki plik ju istnieje, w wersji 3.0
kasuje utworzony wczeniej plik nie zawracajc gowy uytkownikowi). W ewentualnie podawanej
ciece znakiem oddzielajcym katalogi moe by zarwno / jak i \ . Jeeli nie podamy cieki to plik
zostanie utworzony w aktualnym katalogu roboczym (co to za katalog mona sprawdzi poleceniem pwd
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

(print work directory, a do jego zmiany suy polecenie chdir (pkt.3.6).


7 Konwersacja ze Scilabem
7.1
Polecenia wpisujemy w linii komend, koczymy je naciskajc Enter i wtedy Scilab je wykonuje (lub
usiuje wykona).
7.2
Jeeli polecenie jest za dugie i wygodniej byoby nam zapisa je w kilku wierszach to naley wpisa dwie
kropki .. nacinicie klawisza Enter spowoduje wwczas przejcie do nowej linii, ale Scilab bdzie
oczekiwa na dokoczenie polecenia w kolejnej linii (albo kolejnych liniach jeli nastpne linie te bdziemy
koczy dwiema kropkami). Oczywicie nie da si zastosowa tej metody do przeniesienia czci
wprowadzanego acucha do nastpnego wiersza.
7.3
Jeli nie chcemy aby wynik polecenia pojawi si na ekranie (bo np. zdefiniowalimy wanie jak ogromn
macierz) to polecenie koczymy rednikiem ( ; ).
7.4
Mona wyda kilka polece w jednej linii trzeba je wwczas oddzieli rednikami (wynikw nie bdzie
wida na ekranie) lub przecinkami (wyniki bd widoczne). Podczas testowania programw wpisywanie
wielu polece w jednej linii moe by troch niewygodne w razie napotkania bdu Scilab poda nam
numer wiersza, w ktrym wystpi bd, nie bdzie jednak wiadomo, w ktrym konkretnie poleceniu. Jeszcze
niewygodniejsze moe by skorzystanie z moliwoci wprowadzenia jednego polecenia w wielu liniach
linie przeamane za pomoc dwch kropek s przez Scilaba traktowane jako pojedyncza linia i
odpowiednio do tego zostanie podany numer wiersza z bdem.
7.5
Moliwe jest wkopiowywanie fragmentu tekstu ze schowka do linii komend, w wersji 4.0 mona ju uy do
tego skrtu klawiaturowego Ctrl-v. Skopiowanie fragmentu polecenia z wiersza polece te moe odby
si z wykorzystaniem skrtu Ctrl-c warunkiem jest jednak aby istnia w tym momencie zaznaczony
blok. Jeli naciniemy Ctrl-C lub Ctrl-c gdy nic nie byo zaznacone dotychczasowy znak zachty
(majcy posta >) zmieni si na 1> (liczba moe by wysza jeeli naciniemy Ctrl-C kilka razy).
Nacinicie Ctrl-C powoduje przerwanie aktualnie wykonywanych operacji (polece wprowadzonych z
klawiatury czy odczytanych ze skryptu) i przekazanie kontroli uytkownikowi (ten sam efekt uzyskamy
wykorzystujc pozycj menu Control i dalej Interrupt). W stanie tym dostpne s wszystkie aktualnie
znajdujce si w pamici zmienne, mona je nie tylko oglda ale i zmienia. Po wydaniu polecenia resume
Scilab powraca do wykonywania programu (ktry oczywicie nie zdajc sobie sprawy z ewentualnych
zmian wprowadzonych przez uytkownika wykorzystuje je jakby nigdy nic). Moliwe jest skopiowanie
caych przykadw podawanych w helpach i wklejenie ich w edytorze do skryptu zachcam do
eksperymentw.
8 Zmienne
8.1
Sposb zapisu liczb (dokadno): Do zmiany formatu wywietlania (i drukowania) liczb suy funkcja
format. Wywoanie: format([typ],[dugo]), gdzie typem moe by 'e' (exponential posta
wykadnicza) lub 'v' (variable format zmienny (domylny)), a dugo domylnie wynosi 10.
8.2
Macierze w zasadzie wszystkie zmienne o wartociach liczbowych s przez Scilaba traktowane jak
macierze nawet skalary s uwaane za macierze o wymiarze 11. Mona odwoywa si do
poszczeglnych elementw macierzy albo do ich zakresw (np. A(2,3) albo A(1:3,2:5) o operatorze
: bdzie jeszcze pniej).
8.3
acuchy cigi znakw ograniczone znakami ' lub ". Jest midzy nimi subtelna rnica podwjne
uszy edytor SciPad rozpoznaje jako ogranicznik acucha i pokazuje je w innym kolorze. Jeli chcemy
umieci w acuchu znak cudzysowu musimy obok siebie zapisa dwa takie znaki.
8.4
Typy zmiennych kada nowoutworzona zmienna naley do typu float, mona jednak zmienic jej typ
na cakowity (int8, int16, int32, uint8, uint16, uint32). W tym semestrze jednak nie bdziemy si t kwesti
zajmowa.
8.5
Zarzdzanie zmiennymi
8.5.1 komenda who podaje list zmiennych i informuje o cznej zajtoci pamici, stosu itp..
8.5.2 komenda whos() podaje bardziej szczegowe informacje o zmiennych znajdujcych si w pamici
(w szczeglnoci ich wymiary, ile kada z nich zajmuje pamici itp., pokazywane s rwnie nazwy
zdefiniowanych przez uytkownika funkcji).
8.5.3 komenda clear jeeli jako parametr podano nazw konkretnej zmienej (lub kilka nazw) to zostanie
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

8.6

Scilab podstawy

ona (lub one) usunita z pamici, jeeli nie podano parametrw to komenda ta powoduje usunicie z
pamici wszystkich zmiennych utworzonych przez uytkownika. Parametry tej komendy podaje si po
spacji (i jeli jest ich wicej oddziela si je od siebie rwnie spacjami).
Zmienne o nazwach zaczynajcych si od znaku % s zmienymi predefiniowanymi (systemowymi), np.
%eps, %t czy %pi. Komenda clear ich nie kasuje. Uytkownik moe oczywicie utworzy wasne zmienne
o nazwach zaczynajcych si od %, jednak taka nazwa nie czyni ich odpornymi na dziaanie polecenia
clear.

9 Operatory arytmetyczne
Trzeba pamita o tym, e wszystkie operatory domylnie dziaaj na macierze. Operatory nie musz by
oddzielane od zmiennych spacjami (chocia w szczeglnych przypadkach spacje pozwalaj unikn
niejednoznacznoci o tym pniej).
9.1
Operator przypisania: =. Warto wyraenia po prawej stronie zostaje przypisana zmiennej znajdujcej si
z lewej strony. Jeli w wierszu polecenia wprowadzimy tylko wyraenie to obliczona warto zostanie
przypisana domylnej zmiennej o nazwie ans. Dugo nazw zmiennych jest nieograniczona, lecz
rozpoznawane s tylko 24 pierwsze znaki. Nazwy musz zaczyna si od litery lub znaku %, po ktrych
nastpuj dowolne znaki litery, cyfry lub inne znaki (poza oczywicie spacj i symbolami operatorw).
9.2
Operatory dodawania i odejmowania (+ i ). Dodaj do siebie lub odejmuj od siebie odpowiednie
elementy swoich argumentw. Oczywicie rozmiary dodawanych macierzy musz si zgadza (w
szczeglnoci mog to by i skalary), moliwe jest jednak dodanie (lub odjcie) skalara do macierzy
wwczas skalar ten zostanie dodany do kadego elementu macierzy (w tym wzgldzie dziaanie to jest
analogiczne do mnoenia macierzy przez skalar). Operator dodawania moe by stosowany take do czenia
acuchw.
9.3
Mnoenie: *. Jest to mnoenie macierzy (bd wektorw, oczywicie musz one mie odpowiednie
rozmiary). Dla skalarw dziaa to cakiem normalnie. Jeli pomnoymy macierz przez skalar to pomnoone
przez ten skalar zostan wszystkie elementy macierzy. W szczeglnoci iloczyn skalarny dwch wektorw
(np. wierszowych) otrzymamy wykonujc dziaanie: a*b (wektor b w tym przykadzie jest transponowany
czyli kolumnowy, o operatorze transpozycji dalej). Istnieje dodatkowo specjalny operator (.*)
umoliwiajcy mnoenie macierzy w sposb analogiczny do np. dodawania: element przez odpowiadajcy
mu element.
-->a = [1,2,3,4]
a =
1.
2.
3.

4.

-->b = a*a
!--error 10
inconsistent multiplication
-->c = a*a'
c =
30.

9.4

-->d = a'*a
d =
1.
2.
2.
4.
3.
6.
4.
8.

3.
6.
9.
12.

-->e = a.*a
e =
1.
4.

9.

4.
8.
12.
16.

16.

Dzielenie: /. Dzielenie dwch skalarw dziaa cakiem normalnie. Podzielenie macierzy przez skalar
powoduje podzielenie wszystkich elementw macierzy przez ten sam skalar. W odniesieniu do macierzy
dzielenie jest zdefiniowane jako mnoenie przez odwrotno macierzy bdcej dzielnikiem (funkcja inv
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

albo w zapisie skrconym ^(-1)). Istnieje rwnie operator ./ sucy do dzielenia przez siebie
odpowiednich elementw macierzy. Poza tym istniej operatory \ i .\ mamy wic moliwo
dzielenia lewo- i prawostronnego.

123 4 x1 7
8 x2 ' 6
Ax'b ] 567
17913 x3 &2
248 5 x4 8
6.1979167
15.375
x'A\b Y x' &
4.15625
4.7708333

-->A = [1,2,3,4;5,6,7,8;1,7,9,13;2,4,8,5]
A =
1.
2.
3.
4.
5.
6.
7.
8.
1.
7.
9.
13.
2.
4.
8.
5.
-->b = [7;6;-2;8]
b =
7.
6.
- 2.
8.
-->x = A\b
x =
6.1979167
- 15.375
4.15625
4.7708333

9.5

Potgowanie: ^ lub **. W przypadku skalarw jest to normane potgowanie, macierze kwadratowe
mog by podnoszone do potgi jako macierze. Do podniesienia do potgi kadego z elementw macierzy z
osobna suy operator .^.
-->a = [1,2;3,4]
a =
1.
2.
3.
4.
-->b = a^2
b =
7.
10.
15.
22.
-->c = a.^2
c =
1.
4.
9.
16.

9.6

Transpozycja (operator .') zamiana indeksw miejscami, albo ' transpozycja z zamian na
wartoci sprzone (oczywicie w przypadku macierzy zawierajcej wycznie liczby rzeczywiste to
rozrnienie nie ma znaczenia).
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

-->a = [1,2,3,4]
a =
1.
2.
3.

4.

-->b = a'
b =
1.
2.
3.
4.

9.7

9.8

Uwaga dotyczca specyfiki dziaania operatorw na macierze i skalary jeeli macierz pomnoymy lub
podzielimy przez skalar to oczywicie pomnoony (podzielony) zostanie kady element macierzy. Jak ju
wspomniaem Scilab rozszerza t zasad na operatory dodawania, odejmowania i przypisania. Jeli do
macierzy dodamy skalar (np. a+2) to Scilab potraktuje to jako polecenie dodania liczby 2 do kadego
elementu macierzy a.
-->a = [1,2,3,4]
a =
1.
2.
3.

4.

-->b = a*2
b =
2.
4.

6.

8.

-->c = a+1
c =
2.
3.

4.

5.

Gdybymy chcieli podzieli lub pomnoy skalar przez macierz to musimy pamita o tym, e polecenie
1/a bdzie dla Scilaba oznacza pomnoenie liczby 1 przez odwrotno macierzy a. Aby unikn takiego

9.9

nieporozumienia moglibymy zastosowa operator z kropk, ale wystpujca w operatorze kropka mgaby
zosta zinterpretowana przez Scilaba jako kropka dziesitna (oczywicie jest to moliwe tylko gdy
pierwszym argumentem bdzie liczba cakowita) np. gdybymy chcieli zapisa 1./a to Scilab zrozumie
to jako 1.0/a (jeli po kropce dziesitnej wystpi zero to nie ma obowizku zapisywania go sama kropka
dziesitna wystarczy). Aby unikn takiej pomyki naleaoby wpisa (1)./a albo oddzieli operator od
argumentw spacjami (osobicie zalecam cige stosowanie tej ostatniej metody otrzymujemy wwczas
nieco czytelniejszy kod).
Reszta z dzielenia modulo(x,d) gdzie x jest dzieln, a d dzielnikiem (poczynajc od wersji 3.0 obie
te liczby nie musz ju by cakowite jednak wyniki dla liczb niecakowitych mog by bdne !!! w
opisie w plikach pomocy zaznaczono wyranie, e funkcja ta jest przeznaczona tylko dla liczb cakowitych).

10 Operatory logiczne:
10.1 Zaprzeczenie: ~. Operator ten moe dziaa na macierze zawierajce liczby. Wynikiem bdzie macierz
zawierajca wartoci logiczne %F wszdzie tam gdzie elementy macierzy byy rne od zera i %T tam gdzie
wartoci elementw wynosiy 0. Mona oczywicie obliczy ~~A i dosta %T dla wartoci niezerowych i
%F dla zer.
10.2 Koniunkcja: and lub &. Ten operator rwnie moe dziaa na macierze zawierajce wartoci liczbowe.
Wynikiem bdzie %T jeli wszystkie elementy macierzy maj wartoci niezerowe i %F jeli cho jedna bdzie
zerem. W wywoaniu tej funkcji moe wystpi dodatkowy argument postaci 'c' lub 'r'. Jeli dana bdzie
macierz A = [1,2,0;4,5,6], to dziaanie and(A,'c') daje wektor kolumnowy zawierajcy wynik
dziaania and na wiersze macierzy A i analogicznie, polecenie and(A,'r') daje wektor wierszowy bdcy
wynikiem dziaania and na kolumny macierzy A.
10.3 alternatywa: or lub |. Na macierze dziaa analogicznie jak and.

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

11 Operatory relacji:
11.1 Nierwno: ~= (inaczej ni w C).
11.2 Rwno: == (tak jak w C).
11.3 Wikszo, mniejszo itp.: <, >, <=, >=.
Wynikiem dziaania operatorw relacji jest warto logiczna %T lub %F. Operatory te mog jednak dziaa
rwnie na macierze liczbowe. Jeli np. poleceniem A = rand(3,4) wygenerujemy macierz liczb losowych
o 3 wierszach i 4 kolumnach, to polecenie B = A < 0.5 wygeneruje nam macierz o takim samym rozmiarze
(3 wiersze na 4 kolumny) zawierajc wartoci %T tam gdzie relacja jest speniona i %F tam gdzie speniona
nie jest. Dziaanie jest analogiczne jeli oba argumenty relacji bd macierzami liczbowymi (oczywicie
musz wtedy mie jednakowe rozmiary). Wartoci logiczne %T i %F na ekranie wywietlane s jako T i F
(prawdopodobnie dla skrcenia zapisu). Natomiast wprowadzajc je z klawiatury rwnie dobrze moemy
uywa zapisu %T, %F jak i %t, %f.
12 Zmienne predefiniowane.
Ich nazwy zaczynaj si od znaku % (mona jednak tego znaku uywa dla nazw zmiennych tworzonych przez
uytkownika). Zmienne predefiniowane nie ulegaj usuniciu po wydaniu komendy clear, ktra wydana bez
dodatkowych parametrw usuwa wszystkie istniejce zmienne.
12.1 Warto mona uzyska wpisujc %pi.
12.2 Podstawa logarytmw naturalnych e: %e.
12.3 Jednostka urojona: %i na ekranie pojawia si jako samo i.
12.4 Nieskoczono: %inf.
12.5 Prawda logiczna: %t lub %T, fasz: %f lub %F.
12.6 Minimana moliwa do zapisania w danym systemie liczba zmiennoprzecinkowa: %eps bardzo
poyteczna mona j wykorzysta np. do zatrzymania oblicze gdy krok zmaleje do praktycznie
niemierzalnej wielkoci.
12.7 nie liczba: %nan not a number.
12.8 Istnieje jeszcze jedna szczeglna zmienna: ans. Jest to zmienna, ktrej przypisuje si wynik ostatniego
polecenia, jeli polecenie to samo tego nie okrelao. Jeli np. wprowadzimy polecenie 2+2, to odpowiedzi
Scilaba bdzie: ans = 4. Zmienna ta udostpnia obliczon warto dopki nie wydamy kolejnego tego
rodzaju polecenia.
13 Operacje macierzowe.
13.1 Sposoby tworzenia macierzy.
13.1.1 Operator: : . Operator ten suy do generowania cigu liczb. Zapis 1:10 oznacza 1,2,3,4,5,6,7,8,9,10.
Mona te poda krok (umieszczony pomidzy dwoma dwukropkami): 1:2:10 to samo co
poprzednio tylko z krokiem 2: 1,3,5,7,9 (warto zwrci uwag na to, e przy tym zapisie w
wygenerowanym zestawie liczb moe nie znale si podana warto kocowa (w tym przypadku 10)
dopilnowa tego musi sam uytkownik). Krok moe by ujemny, wtedy oczywicie pocztek musi by
wikszy ni koniec, w przeciwnym razie otrzymamy wektor pusty (a Scilab nie bdzie sygnalizowa
bdu). No i oczywicie adna z tych liczb nie musi by cakowita.
13.1.2 Skadanie macierzy z kawakw. Zdefiniowane wczeniej macierze mona czy posugujc si
nawiasami kwadratowymi oraz przecinkami i rednikami (pod warunkiem zgodnoci odpowiednich
rozmiarw).
Przykad: Definiujemy macierze:
A=[1,2,3;4,5,6]; B=[7,8;9,0]; C=[11,12,13,14,15;16,17,18,19,20];

Poprawny jest zapis:


-->D = [A,B;C]

i daje macierz:
D

=
1.
4.
11.
16.

2.
5.
12.
17.

3.
6.
13.
18.

7.
9.
14.
19.

8.
0.
15.
20.

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

13.1.3 W tym samym poleceniu mona czy wszystkie moliwoci (wpisywanie z klawiatury, generowanie i
skadanie macierzy z kawakw).
13.2 Odwoywanie si do elementw macierzy (jako przykad posuy nam macierz D zdefiniowana powyej).
13.2.1 Przez podanie indeksw: np. D(3,4) element z 3-go wiersza (pierwszy indeks) i 4-tej kolumny (drugi
indeks).

D3,4 '14

13.2.2 Mona te wybra fragment macierzy: np. D(1:2,1:3) wynikiem jest macierz 22 z lewego grnego
naronika macierzy A (wiersze od 1 do 2 i kolumny od 1 do 3).

D1:2,1:3' 123
456

13.2.3 Symbol : gdybymy chcieli wybra np. cay 2-gi wiersz macierzy A naleaoby wyda polecenie:
D(2,:) w tym przypadku osamotniony symbol : oznacza wszystkie moliwe wartoci danego
indeksu (w tym przykadzie: numeru kolumny).

D2,: ' 45690

13.2.4 Symbol $ oznacza maksymaln (kocow) moliw warto indeksu/wskanika gdybymy np.
chcieli wybra dwie ostatnie kolumny macierzy A moglibymy wyda polecenie A(:,$-1:$) takie
polecenie dziaa nawet jeli nie wiemy ile kolumn (czy wierszy) ma macierz A w danej chwili (Scilab
jednak to wie).

78
90
D:,$&1:$ ' 1415
1920

13.2.5 Za pomoc macierzy zawierajcej wartoci logiczne %T i %F. Najlepiej wytumaczy to na przykadzie.
Wygeneruj dwuwierszow macierz liczb losowych: a = rand(2,5). Nastpnie utworz macierz b
zawierajc informacj o tym, ktre wartoci pierwszego wiersza macierzy a s mniejsze od 0.5:
b = a(1,:)<0.5. Na koniec utworz wektor c zawierajcy elementy drugiego wiersza macierzy a
odpowiadajce elementom wiersza pierwszego mniejszym od 0.5 (znajdujce si w tych samych
kolumnach): c = a(2,b).

a'rand
2,5

.0002211
.6653811
.8497452
.8782165
Y .2113249
.7560439
.3303271
.6283918
.6857310
.0683740
b'a1,: <0.5 Y TTFFF
c'a2,b Y .7560439
.3303271

Innym przykadem wykorzystania tej metody wybierania elementw macierzy moe by sytuacja gdy
chcemy aby aden element macierzy nie przekracza zadanej maksymalnej wartoci (macierz moe np.
zawiera wartoci funkcji dwch zmiennych, ktrych wykres chcemy sporzdzi). Zamy, e wartoci
funkcji znajduj si w macierzy F, a zadana warto maksymalna wynosi max:

FF>max'max

13.3

Wyraenie w nawiasie tworzy macierz wartoci logicznych o takim samym rozmiarze jak F, zawierajc
%T w miejscach, w ktrych elementy macierzy F speniaj podany warunek (s wiksze ni max). Gdy
macierz zawierajca wartoci logiczne zostanie uyta w miejsce indeksw macierzy F spowoduje dokonanie
wyboru tych elementw macierzy F, ktre znajduj si w miejscach odpowiadajcych %T (wynikiem bdzie
oczywicie rwnie macierz). Na koniec operator podstawienia spowoduje podstawienie podanego skalara w
miejsce kadego elementu macierzy. W tym wic przypadku warto max zostanie podstawiona w miejsce
wszystkich elementw macierzy F, ktre pierwotnie byy wiksze ni max.
Sprawdzenie rozmiaru macierzy: funkcja size. Wynikiem jest wektor dwuelementowy zawierajcy liczb
wierszy i liczb kolumn. Mona odwoa si tylko do jednego elementu tej funkcji: size(A,1) daje liczb
wierszy, a size(A,2) daje liczb kolumn. Nie musimy pamita, ktra skadowa jest liczb kolumn, a ktra
liczb wierszy polecenie moe mie posta size(A,'r') (liczba wierszy rows) lub size(A,'c')
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

13.4

Scilab podstawy

(liczba kolumn columns). Gdyby chodzio nam o czn liczb elementw size(A,'*') iloczyn obu
poprzednich.
Znajdowanie elementu o maksymalnej (lub minimalnej) wartoci: funkcja max (lub min). Wynikiem
wywoania polecenia max (lub min) z jednym argumentem jest maksymalna (minimalna) warto
wystpujca w caej macierzy.
-->A = rand(3,4)
A =
!
0.3076091
!
0.9329616
!
0.2146008
-->max(A)
ans =
0.9329616

0.312642
0.3616361
0.2922267

0.5664249
0.4826472
0.3321719

0.5935095 !
0.5015342 !
0.4368588 !

Polecenie to moe przyj rwnie drugi argument postaci 'r' lub 'c' wwczas wynikiem bdzie
odpowiednio wektor wierszowy lub kolumnowy zawierajcy maksymalne wartoci wystpujce
odpowiednio w wierszach lub w kolumnach macierzy bdcej pierwszym argumentem:
-->max(A,'r')
ans =
!
0.9329616
-->min(A,'c')
ans =
!
0.3076091 !
!
0.3616361 !
!
0.2146008 !

0.3616361

0.5664249

0.5935095 !

Istnieje te drugi sposb wywoania tego polecenia umoliwiajcy otrzymanie nie tylko samej wartoci
maksymalnej ale i jej wsprzdnych:
-->[wart,wsp] = max(A)
wsp =
!
2.
1. !
wart =
0.9329616

albo:
-->[wart,wsp] = min(A,'c')
wsp =
!
1. !
!
2. !
!
1. !
wart =
!
0.3076091 !
!
0.3616361 !
!
0.2146008 !

13.5

Aby zmieni warto wybranych elementw macierzy dokonujemy przypisania nowej wartoci wybranemu
elementowi (albo wybranym elementom wtedy musimy oczywicie zatroszczy si o to aby rozmiary
macierzy podstawianej odpowiaday rozmiarom wybranego do zamiany fragmentu macierzy oryginalnej).
Mona przypisa im take im macierz pust [] (oczywicie macierz taka jest skalarem wic dopuszczalne
jest podstawienie postaci a(:,1:3) = [] spowoduje to usunicie pierwszych trzech kolumn macierzy
a). Nie uda si podstawienie a(1,1) = [] w efekcie dostalibymy niekompletn macierz.
13.6 Funkcje suce do generowania macierzy
13.6.1 linspace(x1,x2,N) i logspace(x1,x2,N). Su do generowania wektorw wierszowych
zawierajcych N elementw rwnomiernie rozoonych od x1 do x2 (linspace) lub od 10x1 do 10x2
(logspace) bd to np. argumenty, dla ktrych bdziemy chcieli potem utworzy wykres. Argument N
jest opcjonalny, jeeli go nie ma przyjmuje si 100 (dla linspace) lub 50 (dla logspace).
13.6.2 diag jako argument przyjmuje wektor za zwraca macierz kwadratow, na ktrej gwnej przektnej
znajduj si wartoci podane w wektorze a pozostae wartoci sa zerami (np. diag([1,2,3,4])).
13.6.3 eye macierz jednostkowa (1 na gwnej przektnej, pozostae 0), jeeli dana macierz nie bdzie
kwadratowa to jedynki i tak znajd si na gwnej przektnej tzn. poczynajc od pozycji (1,1) przez
(2,2), (3,3) itd. jak dugo si da (np. eye(n1,n2)).
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

10

13.6.4 ones same jedynki (np. ones(n1,n2)).


13.6.5 zeros same zera (np. zeros(n1,n2)).
13.6.6 rand liczby losowe z zakresu <0,1) (np. rand(n1,n2)).
Polecenia z powyszych 4 punktw wymagaj podania dwch argumentw (w przeciwiestwie do
Matlaba) po podaniu tylko jednego argumentu nie jest generowana macierz kwadratowa ani wektor a
skalar.
13.6.7 diag polecenie to ma rne znaczenia w zalenoci od argumentw. Jeli argumentem bdzie wektor
polecenie utworzy macierz, na ktrej gwnej przektnej znajd si (kolejno od gry) elementy podanego
wektora, np.:
-->a =
-->A =
A =
!
!
!

[1,2,3];
diag(a)
1.
0.
0.

0.
2.
0.

0. !
0. !
3. !

Mona poda dodatkowy argument liczb cakowit wskazuje ona o ktr przektn powyej lub
poniej (gdy liczba jest ujemna) gwnej nam chodzi. Jeli na przykad wektor a nadal jest okrelony jak
powyej to:
-->A =
A =
!
!
!
!
!

diag(a,-2)
0.
0.
1.
0.
0.

0.
0.
0.
2.
0.

0.
0.
0.
0.
3.

0.
0.
0.
0.
0.

0.
0.
0.
0.
0.

!
!
!
!
!

Uzyskujemy w ten sposb moliwo atwego utworzenia np. macierzy trjdiagonalnej:


-->a =
-->b =
-->c =
-->A =
A =
!
!
!
!

[1,2,3];
[4,5,6,7];
[8,9,10];
diag(a,1) + diag(b) + diag(c,-1)
4.
8.
0.
0.

1.
5.
9.
0.

0.
2.
6.
10.

0.
0.
3.
7.

!
!
!
!

Drugim zastosowaniem polecenia diag jest wydobywanie przektnej (gwnej lub ktrej z wyszych bd
niszych) z ju istniejcej macierzy w takiej sytuacji pierwszym argumentem polecenia nie jest wektor a macierz. Na
przykad:
-->A = rand(4,5)
A =
!
0.2113249
!
0.7560439
!
0.0002211
!
0.3303271
-->diag(A)
ans =
!
0.2113249
!
0.6283918
!
0.5608486
!
0.2320748
-->diag(A,-1)
ans =
!
0.7560439
!
0.8497452
!
0.6623569
-->diag(A,2)
ans =
!
0.8782165
!
0.1985144

0.6653811
0.6283918
0.8497452
0.6857310

0.8782165
0.0683740
0.5608486
0.6623569

0.7263507
0.1985144
0.5442573
0.2320748

!
!
!
!

!
!
!

!
!

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

0.2312237
0.2164633
0.8833888
0.6525135

!
!
!
!

Fizyka Komputerowa
!

Scilab podstawy

11

0.8833888 !

13.7 Zapamitywanie macierzy przez Scilab


13.7.1 full macierz pena zapamitywane s wszystkie elementy macierzy w ten sposb domylnie
jest zapamitywana kada wprowadzana lub generowana macierz.
13.7.2 sparse macierz rzadka zapamitywane s tylko elementy niezerowe. Polecenie to tworzy (now)
macierz jako rzadk, albo przerabia istniejc ju macierz na rzadk.
Wywoanie (przerabianie istniejcej ju macierzy):
sp = sparse(X)

lub (tworzenie macierzy od razu jako rzadkiej):


sp = sparse(ij,v [,mn])

gdzie:
X dowolna istniejca ju macierz,
ij dwukolumnowa macierz liczb integer (wsprzdne elementw niezerowych),
v wektor (niezerowe wartoci macierzy),
mn wektor dwuelementowy (liczba wierszy, liczba kolumn), argument opcjonalny.
Przykad zastosowania (ywcem z helpw):
sp = sparse([1,2;5,4;3,1],[1,2,3])
sp =
(
5,
4) sparse matrix
(
1,
2)
1.
(
3,
1)
3.
(
5,
4)
2.
A = full(sp)
A =
!
0.
1.
!
0.
0.
!
3.
0.
!
0.
0.
!
0.
0.

0.
0.
0.
0.
0.

0.
0.
0.
0.
2.

!
!
!
!
!

Jak atwo si domyli w powyszym przykadzie celowo nie zakoczyem wydawanych polece
rednikami.
Dziaania na macierzach rzadkich odbywaj si w taki sam sposb jak na macierzach penych, z t
jednak rnic, e w przypadku macierzy penej moemy atwo dosta si do dowolnego elementu (za
pomoc polecenia np.: A(1,2)), natomiast takie samo polecenie w przypadku macierzy rzadkiej daje
rwnie macierz rzadk (o wymiarze 11):
sp(3,1)
ans =
(
1,
(
1,

1) sparse matrix
1)
3.

Jeeli chcemy dosta konkretn liczb musimy wyda polecenie:


full(sp(3,1))
ans =
3.

14 Porady praktyczne
14.1 Na samym pocztku skryptu warto umieci polecenie clear dziki temu w chwili uruchamiania skryptu
dotychczas obecne w pamici zmienne znikn (mog one pochodzi np. z poprzednich uruchomie podczas
testowania programu). Po zakoczeniu wykonywania polece ze skryptu (czy wpisywanych z klawiatury)
wszystkie utworzone zmienne pozostaj w pamici i s dostpne do dalszych operacji, dziki temu kiedy co
nam nie wychodzi mona sprawdzi np. czy utworzone wektory s wierszowe czy kolumnowe i jakie maj
rozmiary (za pomoca polecenia whos()). Usunicie zmiennych na starcie kolejnego uruchomienia ma
znaczenie zwaszcza podczas testowania nowych skryptw.
14.2 Jeeli nasz program rysuje jakie wykresy (moe ich by sporo) to umieszczenie na pocztku polecenia
xdel(winsid()) spowoduje zamknicie wszystkich otwartych okien graficznych dziki temu po

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

14.3

Scilab podstawy

12

wprowadzeniu poprawek moemy od razu uruchomi skrypt od nowa, a zamykaniem okien zajmie si on
sam.
Komentowanie skryptu komentarze zaczynaj si od dwch znakw // i rozcigaj si do koca wiersza.
Poczynajc od wersji 3.0 jest nareszcie moliwo wykomentowania wikszej liczby wierszy. Jednak nie
za pomoc znakw pocztku i koca komentarza (tak jak ma to miejsce np. w C) po zaznaczeniu
fragmentu tekstu naley wybra z menu Edit polecenie Comment selection, co spowoduje wpisanie
znakw // na pocztku kadego wiersza. Istnieje oczywicie polecenie Uncomment selection.

15 Zadanie pierwsza praca domowa.


15.1 Oszacowanie wartoci metod Monte Carlo (plik mc_pi.sce).
15.1.1 Potrzebne funkcje:
15.1.1.1 rand(M,N) daje macierz MN (M wierszy, N kolumn) liczb losowych
W przeciwiestwie do Matlaba wywoanie postaci rand(M) nie daje macierzy kwadratowej, a
pojedyncz liczb jeeli chcemy dosta macierz (czy choby wektor) musimy poda dwa
argumenty.
15.1.1.2 sum(x) (gdzie x jest jak macierz) suma wszystkich elementw macierzy. W
szczeglnoci elementami sumowanej macierzy mog by wyraenia logiczne prawdzie bdzie
odpowiada 1, a faszowi 0. Mona poda drugi argument postaci r lub c dostaniemy
wwczas odpowiednio wektor wierszowy lub kolumnowy zawierajcy sumy poszczeglnych
kolumn lub wierszy.
Tu warto zrci uwag na fakt, e jeli w Scilabie zechcemy obejrze tak macierz (wynikajc z
operacji logicznych) to bdzie ona zawiera T i F jako logiczne prawd i fasz. Jednak mona je
sumowa prawdzie bdzie odpowiada 1 a faszowi 0.
15.1.2 Oglnie metoda: Oszacowanie bdzie przeprowadzane etapami po 100 strzaw i takich etapw
przeprowadzimy 1000. W kadym etapie generujemy dwa 100-elementowe wektory liczb losowych (x i y,
z zakresu od 1 do +1) po czym zliczamy ile tak okrelonych punktw trafio w okrg (promie
jednostkowy, rodek w (0,0)). Oszacowaniem bdzie (liczba trafie)/(4*(liczba strzaw)) (4 dlatego,
e nasze koo mieci si w kwadracie 22). Otrzyman warto zapisujemy do wektora kolejnych
oszacowa. Licznikw nie zerujemy tylko przechodzimy do nastpnego etapu. Na koniec zrobimy wykres
kolejnych oszacowanych wartoci spodziewamy si oczywicie, e bdzie zbieny do prawdziwej
wartoci.
15.1.3 Warto pamita: szybko oblicze zaley od tego czy zadeklarowano? macierz o odpowiedniej
wielkoci (i w zwizku z tym operacje odbywaj si na istniejcych ju elementach macierzy) czy te
istniejca mniejsza (za maa) macierz jest powikszana w celu dopisania kolejnej wartoci. Swego
rodzaju deklaracj mona uzyska przez utworzenie macierzy odpowiedniej wielkoci skadajcej si
np. z samych zer (inicjalizacja), podczas dalszych oblicze istniejce ju wartoci (zerowe) bd
zastpowane nowymi (obliczonymi).
Program liczcy znajduje si w pliku mc_pi_1.sce
16 Podstawowe konstrukcje jzyka Scilab
16.1 Instrukcja if:
if wyraenie logiczne then polecenia ,
elseif wyraenie logiczne then polecenia ,
...
else polecenia ,
end

16.2

Czci elseif i else s opcjonalne.


Instrukcja for:
for zmienna = (dowolnie zdefiniowany wektor lub macierz) ,
polecenia ,
end

Dowolnie zdefiniowany wektor lub macierz moe by gotow (ju istniejc) macierz albo np.
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

16.3

Scilab podstawy

13

wyraeniem postaci start:krok:koniec (krok moe by ujemny analogicznie jak w przypadku definicji
macierzy/wektorw). Jeeli zmiennej biecej przypisujemy macierz to zmienna przyjmuje jako swe wartoci
kolejne kolumny tej macierzy.
Instrukcja while:
while wyraenie logiczne ,
polecenia ,
else polecenia ,
end

16.4

Cz else jest opcjonalna, polecenia wystpujce w niej s wykonywane gdy wyraenie logiczne
stanie si faszywe.
Instrukcja select/case:
select wyraenie ,
case wyraenie1 then polecenia ,
case wyraenie2 then polecenia ,
...
case wyraenieN then polecenia ,
else polecenia ,
end

Cz else jest opcjonalna.


Warto zwrci uwag na elastyczno skadni Scilaba rwnie dobrze jak wymienione powyej zadziaaj
polecenia:
for zmienna = (dowolnie zdefiniowany wektor lub macierz) do
while wyraenie logiczne do
nie ma wic koniecznoci zmieniania dotychczasowych przyzwyczaje.
17 Skrypty i funkcje
17.1 Wbudowane
Dostpne s waciwie wszystkie funkcje elementarne (trygonometryczne, wykadnicze, logarytmiczne).
17.1.1 Funkcje trygonometryczne proste, odwrotne, hiperboliczne i odwrotne do nich. Argumenty przyjmuj
w radianach.
17.1.2 Funkcje logarytmiczne: log logarytm naturalny, log10 logarytm dziesitny, log2 logarytm o
podstawie 2.
17.1.3 Funkcja eksponencjalna: exp.
17.1.4 Liczby losowe: funkcja rand(n1,n2) generuje macierz n1n2 skadajc si z liczb losowych z
przedziau <0,1). Istnieje te generator liczb losowych grand umoliwiajcy uzyskanie rnych
zadanych rozkadw.
17.1.5 Funkcje specjalne: erfc, funkcja gamma, funkcje Bessela pierszego i drugiego rodzaju,
17.2 Funkcje tworzone przez uytkownika
17.2.1 Skrypty cig polece Scilaba (co w rodzaju makrokomendy nie przyjmuje zewntrznych
parametrw). Mona utworzy go jako plik tekstowy za pomoc dowolnego edytowa tekstowego i
zapisa na dysk z dowoln nazw i z rozszerzeniem .sce (jest to tylko konwencja w rzeczywistoci
rozszerzenie moe by dowolne istotne ejst tylko to aby polecenia byy syntaktycznie poprawne).
17.2.1.1 Polecenie exec suy do uruchamiania skryptu znajdujcego si w pliku. Wywoanie:
exec nazwa_pliku lub exec('nazwa_pliku'). Po nazwie pliku zawierajcego skrypt moe
nastpi liczba okrelajca tryb wykonywnia skryptu, domylnie na ekran trafiaj wszystkie linie
znajdujce si w skrypcie (wcznie z komentarzami), jeli wartoci bdzie 1 nie bdzie
drukowane nic. Inne moliwoci mona sprawdzi w helpach (mona np. spowodowa pojawianie
si na ekranie tylko komend).
17.2.1.2 Polecenie execstr suy do uruchomienia cigu polece znajdujcych si w wektorze
acuchw.
Przykad:
wykonaj = [for i = 1:n,',..
' for j = 1:n,',..

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

14

' a(i,j) = 1/(i+j-1);',..


' end',..
'end'];
n = 4; execstr(wykonaj); a

W powyszym przykadzie trzeba zwrci uwag na zastosowanie dwch kropek (..) do przeniesienia
dalszej czci wprowadzanego wanie polecenia do nastpnego wiersza (nacinicie Enter nie powoduje
wwczas wykonania (albo raczej usiowania wykonania) wprowadzonej do tej pory czci polecenia) oraz na
obecno przecinkw przed wielokropkami (zamiast nich mogyby by spacje), bez nich Scilab bdzie
widzie dwa nastpujce tu po sobie apostrofy (czyli danie wstawienia apostrofu do wntrza acucha) i
nie dostaniemy wektora acuchw.
Warto zwrci uwag na potencjaln uyteczno tego polecenia umoliwia ono napisanie programu
(skryptu), ktry poprosi uytkownika o wprowadzenie funkcji, ktra bdzie w dalszym cigu przez ten
skrypt wykorzystywana.
17.2.2 Funkcje
W przeciwiestwie do skryptw funkcje mog przyjmowa parametry i zwraca wyniki. Rwnie
zapisywane s w plikach, ktrym zazwyczaj nadaje si rozszerzenie .sci. W jednym pliku mona
umieci wiele funkcji (inaczej ni w Matlabie, gdzie kada funkcja musi znale si w osobnym pliku),
kada z funkcji musi zaczyna si sowem kluczowym function, koczy endfunction oraz definiowa
output i input.
We wczeniejszych wersjach Scilaba sowo kluczowe function rwnoczenie rozpoczynao definicj
funkcji oraz niejako przy okazji koczyo poprzedni definicj. Poczynajc od wersji 2.7 pojawio si nowe
sowo kluczowe endfunction, ktre obecnie suy wanie do koczenia definicji funkcji.
17.2.2.1 Definiowanie funkcji w pliku:
function [sinus,cosinus] = moja_funkcja(x)
sinus = sin(x);
cosinus = cos(x);
endfunction

W tym przypadku funkcja przyjmuje pojedynczy parametr, a zwraca wierszowy wektor dwuelementowy
(jeli argumentem bdzie wektor funkcja zwrci macierz, skadajc si z dwch wektorw wynikowych
funkcji sin i cos). Istotn informacj jest fakt, e pierwszy wiersz definicji funkcji (zaczynajcy si od sowa
function, a koczcy si na licie argumentw musi znajdowa si w jednym wierszu nie mona
podzieli go za pomoc znaku ...
17.2.2.2 Definiowanie funkcji w linii komend:
deff('[si,co]=m_f(x)',['si=sin(x)','co=cos(x)'])

Tak zdefiniowana funkcja dziaa identycznie jak ta zdefiniowana w pliku. Mona uywa jej rwnie
jako argumentu dla innych funkcji. Oglnie skadnia tego polecenia/definicji jest nastpujca:
deff(acuch_skadni,wektor_acuchw_polece) (ten ostatni wektor moe by wierszowy
lub kolumnowy). Po wektorze acuchw polece moe wystpi jeszcze jeden argument
pojedynczy znak 'c' lub 'n' pierwszy z nich (jest to warto domylna) oznacza, e funkcja ma
zosta skompilowana, a drugi e nie. Przy przedstawionym powyej sposobie zdefiniowania funkcji
m_f wywoanie jej musi mie posta [a,b] = m_f(x) tzn. po lewej stronie musi wystpowa
wektor (z nawiasami kwadratowymi), gdybymy chcieli tego unikn moglibymy zdefiniowa t funkcj
nieco inaczej:
deff('sico=m_f(x)',['sico(1)=sin(x)','sico(2)=cos(x)'])

Jeeli wynikiem funkcji ma by pojedyncza zmienna nawiasy kwadratowe nie s konieczne. Tak
zdefiniowan funkcj mona wywoa tak: ab = m_f(x) i ab bdzie wektorem dwuelementowym.
Pierwszy sposb definiowania funkcji, cho mniej wygodny przy definiowaniu, poprawnie dziaa
take gdy argument x jest macierz, a drugi nie. Z drugiej strony, gdy funkcj zdefiniowan pierwszym
sposobem wywoamy bez polecenia przypisania (czyli gdy wynik ma zosta przypisany zmiennej ans)
jako ans otrzymamy tylko jedn liczb (ostatni), natomiast przy takim samym wywoaniu drugiej
funkcji zwrcony zostanie cay wektor.
17.2.3 Wywoywanie funkcji
17.2.3.1 normalne w linii komend, z podaniem nazwy zmiennej, ktrej ma zosta przypisany wynik
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

15

lub bez jej podania.


17.2.3.2 Za pomoc polecenia feval(x,y,f) gdzie x i y s wektorami argumentw (w przypadku
funkcji jednej zmiennej moe by tylko jeden) a f jest nazw funkcji (wczeniej zdefiniowanej
lub wczytanej z pliku). Polecenie to oblicza wartoci funkcji f podstawiajc do niej kolejno
wartoci z wektorw argumentw dziki temu dziaa nawet jeli nawet funkcja f zostaa
zdefiniowana w taki sposb, e nie dziaaa dla argumentw bdcych wektorami.
17.2.4 Zmienne lokalne i globalne
Domylnie wszystkie zmienne wystpujce wewntrz zdefiniowanej funkcji s lokalne. Aby uy
zmiennych globalnych musimy wyda polecenie global A B C, po ktrego wykonaniu zmienne A, B i
C bd mogy by wykorzystywane jako globalne. Polecenie takie musi znale si zarwno wewntrz
funkcji jak i w skrypcie j wywoujcym (jeeli definiujemy funkcj w linii komend to przed
wywoaniem funkcji trzeba polecenie to wyda take w linii komend). Naley tu jednak zwrci uwag
na to, e z wntrza funkcji dostpne do odczytu s wszystkie zmienne istniejce w pamici Scilaba.
Deklaracja globalnoci zmiennych konieczna jest tylko wtedy, gdy chcemy aby zmiana wartoci zmiennej
dokonana wewntrz funkcji bya widziana przez wszystkie pozostale funkcje.
17.2.5 Definiowanie funkcji o zmiennej liczbie argumentw
Niestety Scilab nie toleruje definicji funkcji postaci f (a,b=2) (ktra jest poprawna np. w Derive, a
umoliwia wywoania funkcji z rnymi liczbami argumentw). Aby zdefiniowanie tego rodzaju funkcji
byo moliwe wprowadzono zmienne varargin i varargout. Zmienne te powinny wystpowa jako
ostatnie na licie argumentw wyjciowych i wejciowych (oczywicie o ile w ogle maj na nich si
pojawi). W tym semestrze na pewno nie bdzie nam to potrzebne, ale jeli komu bardzo na tym zaley
to zachcam do przestudiowania plikw pomocy.
17.2.6 Kompilowanie funkcji
W zasadzie Scilab jest interpreterem tzn. wydawane polecenia (czyli np. zapisane na dysku
skrypty) s interpretowane na bieco. Wyjtek od tej zasady stanowi funkcje zdefiniowane przez
uytkownika, ktre mog by kompilowane:
17.2.6.1 Podczas wczytywania z dysku
Jest to stan domylny kada wczytywana z dysku funkcja jest wstpnie kompilowana.
Istnieje moliwo wyczenia tej opcji (za pomoc odpowiedniego przecznika w poleceniu
getf.
17.2.6.2 Na yczenie uytkownika
Do tego suy funkcja comp mona w ten sposb skompilowa np. funkcj zdefiniowan
wczeniej w programie za pomoc polecenia deff dziki czemu jej pniejsze wywoania
podczas danej sesji Scilaba bd realizowane szybciej.
17.2.6.3 Wszystkie funkcje standardowe zdefiniowane w Scilabie s ju skompilowane.
17.3 Dodatkowe sztuczki?
17.3.1 Pomiar czasu wykonywania polece polecenie timer(). Polecenie to wywietla czas (w sekundach)
jaki zuy procesor od momentu poprzedniego wywoania polecenia timer(). Oczywicie pierwsze
wywoanie powinno dawa wynik 0, ale w rzeczywistoci mierzy czas pracy prosecor od uruchomienia
aktualnej sesji Scilaba.
18 Wykresy dwuwymiarowe
18.1 Podstawowym poleceniem do sporzdzania wykresw dwuwymiarowych (paskich) jest plot2d byo ju
stosowane w wydrukowanych powyej skryptach przykadowych.
18.1.1 Skadnia minimum: plot2d(y) w takiej postaci dostaniemy wykres wartoci znajdujcych si w
wektorze y, na osi x zostan umieszczone numery kolejnych wartoci y. Jeli y jest macierz majc n
kolumn, to otrzymamy n wykresw kolejnych kolumn.
18.1.2 plot2d(x,y) x i y s wektorami, wynikiem jest wykres punktw o wsprzdnych (x,y) branych
kolejno z obu wektorw. Oczywicie oba wektory musz mie jednakowe dugoci (ale nie jest istotne
czy s wierszowe czy kolumnowe). Jeli x jest wektorem kolumnowym, a y jest macierz (o tej samej co x
liczbie wierszy) to otrzymamy tyle wykresw ile kolumn ma macierz y wszystkie one bd wykrelone
wzgldem wartoci x. Jeli i x i y s macierzami (oczywicie musz mie jednakowe rozmiary) to
dostaniemy tyle wykresw ile macierze x i y maj kolumn.
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

16

18.1.3 plot2d(x,y) x jest wektorem, a y macierz wynikiem bdzie kilka wykresw dokadnie tyle
ile kolumn ma macierz y. Wszystkie wykresy wykorzystuj ten sam wektor wartoci x. Wektor x musi
wwczas by wektorem kolumnowym. Oczywicie x i y musz mie t sam liczb wierszy.
18.1.4 plot2d(x,y) x i y s macierzami wynikiem bdzie kilka wykresw, ale kady z nich bdzie mie
inne wartoci x. Rwnie w tym przypadku liczby wierszy musz by jednakowe. Musimy te pamieta,
e serie danych do wykrelenia bd wybierane kolumnami. Wszystkie utworzone w ten sposb wykresy
bd mie identyczne liczby punktw danych.
18.1.5 Wykresy o rnych liczbach punktw danych w celu utworzenia takich wykresw polecenie plot2d
musimy wyda kilka razy kade kolejne wydanie tego polecenia generuje nowy wykres w tym samym
oknie graficznym.
18.1.6 Skadnia oglna: plot2d(x,y,<opcjonalne argumenty>) dobierajc odpowiednio opcjonalne
argumenty (w dowolnej kolejnoci) moemy wpywa na wygld wykresu. Pojedyncze wyraenie ma
posta: sowo kluczowe = 'warto'.
18.1.7 Sowa kluczowe:
18.1.7.1 style wektor o dugoci rwnej liczbie wykresw (czyli rwnej liczbie kolumn macierzy
danych), kady element odpowiada kolejnej krzywej (w kolejnoci krelenia). Jeeli warto jest
liczb dodatni to krelona jest linia o kolorze odpowiadajcym wartoci. Jeeli warto jest
liczb ujemn (lub zerem) to rysowany jest symbol o numerze |warto|. W szczeglnym
przypadku jeli wykrelona jest tylko jedna krzywa, style moe by wektorem
dwuelementowym, ktrego pierwszy skadnik ma znaczenie opisane powyej, a drugi przyjmuje
warto z zakresu 16 i oznacza pooenie opisu tej krzywej (opisy znajduj si pod wykresem, w
dwch kolumnach, numerowane s kolejno kolumnami 1 oznacza pozycj grn-lew, a 6
doln-praw). Taka opcja jest przydatna gdy na jednym wykresie rysuje si wiksz liczb
krzywych za pomoc osobnych komend plot2d (jak napisaem nieco wyej takie postpowanie
moe by konieczne gdy chcemy sporzdzi wykresy kilku krzywych, z ktrych kada opisana jest
inn liczb punktw). Jeeli wykrelanych jest wicej krzywych, a nie podano wektora style,
kolejnym krzywym zostan przypisane kolejne kolory. Oznaczenia kolorw: 1 czarny, 2
niebieski, 3 zielony (do jasny ale widoczny na ekranie), 4 jasnoniebieski, 5 czerwony,
6 rowy, 7 czerwony, 8 biay, 9 granatowy, 10 granatowy (nieco janiejszy), 11
granatowy (jeszcze troch janiejszy),... W helpach (pod hasem color_list) mona znale
tabelk z nazwami kolorw i odpowiadajcymi im wartociami RGB. Mona te wykorzysta
polecenie: x=1:6; y=rand(6,6); xset('thickness',6); plot2d(x,y,
style=[1,2,3,4,5,6],leg='1@2@3@4@5@6') w wyniku dostaniemy 6 wykresw w
kolorach o numerach zawartych w wektorze style i z opisem. Polecenie xset spowodowao
zmian gruboci krelonych linii (niestety wszystkich tzn. osi i ramki te) bdzie o nim
dalej. Innym sposobem jest wydanie polecenia xget("nazwa koloru"): np. xget("white")
zwraca 32 (co nie zaprzecza podanej wyej informacji, e kolorowi biaemu odpowiada warto 8
to te jest kolor biay).
18.1.7.2 strf acuch trzyelementowy o wartoci domylnej '081'. Elementy:
18.1.7.2.1
pierwszy: 0 lub 1 opisy nie s lub s wywietlane.
18.1.7.2.2
drugi: od 0 do 8 decyduje o sposobie wyznaczenia zakresu osi wsprzdnych. W
szczeglnoci warto 0 powoduje wykorzystanie bez zmian poprzedniej skali (czci
nowego wykresu mog nie by widoczne). Domylna warto 8 powoduje wyznaczenie
zakresu wykresu na podstawie minimalnych i maksymalnych watroci wsprzdnych oraz
odpowiednie przeskalowanie wczeniej wykrelonych wykresw.
18.1.7.2.3
trzeci: od 0 do 5 decyduje o wykreleniu ramki i osi: 0 nie rysuje si nic, 1
rysowane s osie (y po lewej), 2 ramka dookoa, 3 osie (y po prawej), 4 osie
(przecinaj si po rodku), 5 osie (przecinaj s w punkcie (0,0) , mog nie by
widoczne na wykresie).
18.1.7.3 leg acuch (jeden) opisw krzywych: "pierwszy@drugi@trzeci...". Ma znaczenie tylko gdy
pierwszym elementem strf jest 1.
18.1.7.4 rect wektor czteroelementowy okrelajcy zasig osi: [xmin,ymin,xmax,ymax]. Ma

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

17

znaczenie tylko gdy drugi element strf wynosi 1, 3 lub 5.


18.1.7.5 nax wektor czteroelementowy okrelajcy liczb podziaw osi [nx,Nx,ny,Ny] (N
podziay gwne, n podpodziay). Ma znaczenie tylko gdy trzeci element strf wynosi 1).
18.1.7.6 logflag acuch dwuelementowy, pierwszy znak dotyczy osi x, drugi osi y, kady moe
przyj warto "n" (normalna rwnomierna) lub "l" (logarytmiczna). Np. ["nn"]
obie osie rwnomierne, ["nl"] o x rwnomierna, o y logarytmiczna, itd..
18.2 Polecenie xset() suy do ustawiania oglnych parametrw grafiki (szczegy mona znale wydajc
polecenie help xset).Niektre parametry:
18.2.1 xset("auto clear","on") warto domylna "off" = przy kreleniu kolejnego wykresu
dotychczasowa zawarto okna nie jest usuwana.
18.2.2
xset("background",warto) ustala kolor ta.
xset("color",warto) ustala kolor rysowania, warto jest z przedziau (1,biay)
18.2.3
18.2.4
xset("default") przywraca wartoci domylne (poyteczne zwaszcza gdy eksperymentowalimy z ustawieniami i nie wiemy jak wrci do jakich rozsdnych wartoci).
18.2.5
xset("font",nazwa,wielko) jak w opisie.
xset("font size",wielko) jak w opisie.
18.2.6
18.2.7
xset("fpf",acuch) skrt od floating point format, skadnia acucha jak w C.
18.2.8
xset("line style",warto) styl aktualnej linii: 1 linia ciga, wartoci wiksze od 1
linie przerywane. Wartoci: 1, 2, 4, 5, 7 linie cige, 3 linia przerywana (jednakowe odcinki), 6,
8, 9 o symetrii (dusza kreska i dwie krtsze).
18.2.9
xset("mark",rodzaj,wielko) rodzaj i wielko znacznika. Rodzaje znacznikw mona
obejrze wydajc polecenie xset() pojawia si wwczas okno dialogowe, ktrego jedn z pozycji
jest markid, niestety nie wida w nim liczb przypisanych do poszczeglnych znacznikw. Aby
sprawdzi jaki jest numer (i wielko) aktualnego znacznika naley wyda polecenie
xget("marker"). Testy pokazuj, e: 0 kropka, 1 plus, 2 x, 3 *, 4 romb
wypeniony (diamond fill), 5 romb (diamond), 6 trjkt (wierzchokiem w gr), 7 trjkt
(wierzchokiem w d), 8 trefl, 9 kko.
18.2.10 xset("mark size",wielko) wielko znacznika.
18.2.11 xset("thickness",warto) grubo linii w pikselach.
18.2.12 xset("window",numer okna) czyni okno numer okna aktulanym, a jeli okna o takim nuemrze
nie ma to je tworzy.
18.3 Menu edycji okna graficznego
Czasem moe by co najmniej trudno znale w helpach poszukiwan cech wykresu (np. krj pisma,
rozmiar punktowy, grubo czy kolor linii). Pomocne w taiej sytuacji moe by menu edycyjne okna
graficznego (wystpuje poczynajc od wersji 3.0). Jego dziaanie jest zblione do podobnego menu znanego
z Matlaba. Umoliwia zmian pooenia osi (prawo / lewo), rozmiarw i kroju czcionek (nie tylko
opisujcych osie, ale rwnie tytuu, ewentualnej legendy itp), kolorw (ta, osi, napisw). Niestety
wprowadzone zmiany przepadaj wraz z zamkniciem okna, jednak jeli zaley nam na wygldzie
pojedynczej ilustracji, ktr mamy np. gdzie wkopiowa rozwizanie takie jest wystarczajce.
18.4 Inne polecenia
18.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 poczynajc od grnego-lewego, ktre ma numer 1) jako aktualne
do wykonania wykresu. Po poleceniu tym nastpuje dowolna komenda produkujca jakikolwiek
wykres, po czym mona wybra kolejne okno i wykona kolejny wykres.
18.4.2 plot przestarzae, opis mona znale w helpach.
18.4.3 plot2d1 przestarzae, wykresy logarytmiczne, opis w helpach.
18.4.4 plot2d2 wykres, w ktrym w kolejnych przedziaach wartoci s stae.
18.4.5 plot2d3 wykres supkowy.
18.4.6 plot2d4 poszczeglne fragmenty linii (czce kolejne punkty) s strzakami.
18.4.7 fplot2d(x,f,opcje) wykres funkcji f (sama funkcja musi oczywicie by wczeniej zdefiniowana)
dla argumentw zawartych w wektorze x. Wartoci funkcji dla poszczeglnych argumentw s obliczone
za pomoc polecenia feval (oznacza to, e bdzie dziaa nawet jeli nie zadbamy o to by funkcja
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

Fizyka Komputerowa

Scilab podstawy

18

poprawnie obsugiwaa argumenty bdce macierzami bd wektorami) i czone odcinkami prostymi.

Opisy dotyczce wykresw trjwymiarowych znajd si w osobnym (i dziki temu wyranie


krtszym) pliku Scilab-podstawy1a.

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

You might also like