You are on page 1of 13

PMF

Scilab podstawy 1

Podstawowe wiadomoci o programie Scilab


1 Oglne 1.1 Opis tu przedstawiony dotyczy programu Scilab w wersjach 4.1.2 i 5.2.2 (wersje zainstalowane w pracowni studenckiej). Mona je 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 ;-). 1.3 Scilab jest programem przeznaczonym do oblicze numerycznych. 1.4 Scilab jest interpreterem tzn. uruchamiane w nim programy (skrypty) nie s przed wykonaniem poddawane kompilacji 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 pewne odstpstwo od tej reguy zdefiniowane przez uytkownika funkcje, zarwno wczytywane z pliku wczeniej zapisanego na dysku jak i zdefiniowane w treci programu, s podczas odczytywania 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 Jak dotd po polsku, oprcz mojej ksiki Scilab w przykadach, wydawnictwo NAKOM 2007, ISBN 978-83-89529-26-8, dostpna jest jeszcze ksika Cypriana T. Lachowicza, Matlab, Scilab, Maxima. Opis i przykady zastosowa, wydawnictwo Politechniki Opolskiej, 2005, ISBN 83-88492-80-2. 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 (chocia nie zawsze maj identyczne nazwy i skadni), z tego punktu widzenia kada ksika opisujca sposb dziaania Matlaba moe by przydatna. 2.2 Dla znajcych jako-tako angielski lub francuski: pliki pomocy Scilaba. 2.3 Warto zapozna si z programami demonstracyjnymi (uruchamianymi przyciskiem Scilab Demos (4.1.2) lub Scilab Demonstrations (5.2.2) 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, niektre po francusku czy rosyjsku). 2.4.1 Strona domowa Scilaba: http://www.scilab.org/ 2.4.2 Dokumentacja: http://www.scilab.org/product/ 2.4.3 Wiki: http://wiki.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
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

3.3

3.4

3.5

3.6

3.7

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). Wydawanie polece komendy mona wpisywa z klawiatury s wykonywane natychmiast po naciniciu klawisza 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. 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 Scilab w wersji 4.1.2 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 istniej w nim te podstawowe polecenia suce do debugowania programw. Uruchamiamy go z menu (pozycja Editor). Edytor ten rozpoznaje wybrany w Scilabie katalog roboczy i domylnie wanie w nim szuka plikw do otwarcia. W wersji 5.2.2 mamy do dyspozycji edytor o nazwie Editor 1.0. Nie ma on adnych polece do debugowania. 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 dziaa 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. Bezporednio 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
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

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 (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). Jak atwo si domyli metody tej nie da si zastosowa 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 zaznaczone 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 ". W wersji 4.1.2 jest midzy nimi subtelna rnica podwjne uszy edytor SciPad rozpoznaje jako ogranicznik acucha i pokazuje je w innym kolorze. W wersji 5.2.2 acuchy s poprawnie kolorowane niezalenie od symbolu, ktry je ogranicza. Jeli chcemy
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

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 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). 8.6 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.
-->b = a*a !--error 10 inconsistent multiplication -->c = a*a' c = 30. -->d = a'*a d = 1. 2. 2. 4. 3. 6. 4. 8.

3. 6. 9. 12.

4. 8. 12. 16.

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

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

Scilab podstawy 1

9.

16.

9.4

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 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. x1 1 2 3 4 7 x2 5 6 7 8 6 A x ' b ] ' 1 7 9 13 x3 &2 2 4 8 5 x4 8

6.1979167 x ' A\b Y x ' &15.375 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.

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF -->c = a.^2 c = 1. 4. 9. 16.

Scilab podstawy 1

Wykadnikiem rwnie moe by macierz (musi mie identyczny rozmiar jak macierz bdca podstaw):
-->a = [1,2;3,4] a = 1. 2. 3. 4. -->b = [1,0;2,0.5] b = 1. 0. 2. 0.5 -->a.^b ans = 1. 9.

1. 2.

Jak wida kady element macierzy a jest podnoszony do potgi bdcej odpowiadajcym mu elementem macierzy b. 9.6 Transpozycja (operator ') prawdziwa transpozycja zamiana miejscami indeksw oraz zamiana wartoci na sprzone, albo .' transpozycja polegajca tylko na zamianie miejscami indeksw (oczywicie w przypadku macierzy zawierajcej wycznie liczby rzeczywiste to rozrnienie nie ma znaczenia).
-->a = [1,2,3,4] a = 1. 2. 3. -->b = a' b = 1. 2. 3. 4.

4.

9.7

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 i odejmowania. 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. -->b = a*2 b = 2. 4. -->c = a+1 c = 2. 3.

4.

6.

8.

4.

5.

9.8

Gdybymy chcieli podzieli lub pomnoy skalar przez macierz to musimy pamita o tym, e polecenie
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

1/a bdzie dla Scilaba oznacza obliczenie odwrotnoci macierzy a. Aby unikn takiego nieporozumienia

9.9

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. 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. Macierz logiczn moemy wykorzysta w obliczeniach tak samo jak liczbow w obliczeniach kada warto T bdzie odpowiada 1, a F 0. 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 na ekranie pojawia si jako Inf. 12.5 Prawda logiczna: %t lub %T, fasz: %f lub %F na ekranie pojawiaj si jako T 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 na ekranie pojawia si jako Nan.
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

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 przechowuje 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: zapis 1.1:0.4:3.3 da w efekcie cig 1.1,1.5,1.9,2.3,2.7,3.1. 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] 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]

ktry daje macierz:


D = 1. 4. 11. 16. 2. 5. 12. 17. 3. 6. 13. 18. 7. 9. 14. 19. 8. 0. 15. 20.

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). D 3,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). D 1:2,1:3 ' 1 2 3 4 5 6

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

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). D 2,: ' 4 5 6 9 0 13.2.4 Symbol $ oznacza maksymaln moliw (czyli kocow) warto indeksu/wskanika gdybymy np. chcieli wybra dwie ostatnie kolumny macierzy D moglibymy wyda polecenie D(:,$-1:$) takie polecenie dziaa nawet jeli nie wiemy ile kolumn (czy wierszy) ma macierz D w danej chwili (Scilab jednak to wie). 7 8 D :,$&1:$ ' 9 0 14 15

19 20 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

.2113249 .0002211 .6653811 .8497452 .8782165 .7560439 .3303271 .6283918 .6857310 .0683740

b ' a 1,: < 0.5 c ' a 2,b

T T F F F

.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: F F > max ' max 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

13.3

13.4

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') (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.
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

10

-->A = A = ! ! !

rand(3,4) 0.3076091 0.9329616 0.2146008 0.312642 0.3616361 0.2922267 0.5664249 0.4826472 0.3321719 0.5935095 ! 0.5015342 ! 0.4368588 !

-->max(A) ans = 0.9329616

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 w caoci 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 eye macierz jednostkowa (1 na gwnej przektnej, pozostae 0), jeeli dana macierz nie bdzie
Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF

Scilab podstawy 1

11

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)). 13.6.3 ones same jedynki (np. ones(n1,n2)). 13.6.4 zeros same zera (np. zeros(n1,n2)). 13.6.5 rand liczby losowe z zakresu <0,1) (np. rand(n1,n2)). Polecenia z powyszych 4 punktw wymagaj podania dwch argumentw liczbowych (w przeciwiestwie do Matlaba) gdy argumentem jest jedna lioczba generowany jest skalar. Moliwe jest jednak wywoanie ich z jednym argumentem musi nim by macierz wwczas wynikiem bdzie odpowiednia macierz o rozmiarze identycznym macierz bdca argumentem. 13.6.6 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 okrela ona, o ktr przektn powyej lub poniej (gdy liczba jest ujemna) gwnej nam chodzi. Zakadajc ten sam co poprzednio wektor a otrzymamy:
-->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.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

! ! ! !

! !

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF ! 0.5608486 ! 0.2320748 -->diag(A,-1) ans = ! 0.7560439 ! 0.8497452 ! 0.6623569 -->diag(A,2) ans = ! 0.8782165 ! 0.1985144 ! 0.8833888 ! !

Scilab podstawy 1

12

! ! !

! ! !

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 =

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

PMF ( ( 1, 1,

Scilab podstawy 1 1) sparse matrix 1) 3.

13

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 wprowadzeniu poprawek moemy od razu uruchomi skrypt od nowa, a zamykaniem okien zajmie si on sam. 14.3 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 (skrt: Ctrl-m), co spowoduje wpisanie znakw // na pocztku kadego wiersza. Istnieje oczywicie polecenie Uncomment selection (Ctrl-M). Podobnie mona zastosowa wcicie dla caego wybranego fragmentu tekstu (Ctrl-d) lub je usun (Ctrl-D).

Andrzej Brozi, Instytut Fizyki Politechniki dzkiej

You might also like