Professional Documents
Culture Documents
Scilab podstawy
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 ' .
Fizyka Komputerowa
Scilab podstawy
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.
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];
i daje macierz:
D
=
1.
4.
11.
16.
2.
5.
12.
17.
3.
6.
13.
18.
7.
9.
14.
19.
8.
0.
15.
20.
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).
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
[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.
!
!
!
!
!
[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
!
!
!
!
!
!
!
!
!
0.2312237
0.2164633
0.8833888
0.6525135
!
!
!
!
Fizyka Komputerowa
!
Scilab podstawy
11
0.8833888 !
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.
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
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.
16.2
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
Fizyka Komputerowa
Scilab podstawy
14
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
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
Fizyka Komputerowa
Scilab podstawy
17
Fizyka Komputerowa
Scilab podstawy
18