Fizyka Komputerowa Informatyka 3. sem. wykład 1 1
Podstawowe wiadomości o programie Scilab
1 Ogólne informacje o Scilabie i przedmiocie
1.1 Wersja 4.1.2.
Opis tu przedstawiony dotyczy programu Scilab w wersji 4.1.2 (wersja zainstalowana w pracowni
studenckiej). Nie jest ju\ najnowsza (w połowie września 2008 pojawiła się wersja 5.0.1), sle postanowiłem się
unikać niespodzianek. Mo\na ją ściągnąć ze strony domowej programu http://www.scilab.org (a dokładniej w
dziale Old Versions : http://www.scilab.org/download/index_download.php?page=old_releases).
1.2 Opis ten jest przeznaczony dla studentów Informatyki (trzeci semestr), uczestniczących w zajęciach z Fizyki
Komputerowej.
2 Literatura i instrukcje.
2.1 Pozycje po polsku
Jak dotąd po polsku dosstępne są dwie pozycje: moja ksią\ka Andrzej Brozi,
Scilab w przykładach , wydawnictwo NAKOM, 2007, ISBN 13: 978-83-89529-
26-8 oraz ksiÄ…\ka Cypriana T. Lachowicza, Matlab, Scilab, Maxima. Opis i
przykłady zastosowań , wydawnictwo Politechniki Opolskiej, 2005, ISBN 83-
88492-80-2.
Dostępnych jest te\ kilka polskojęzycznych pozycji dotyczących Matlaba
trzeba jednak pamiętać, \e między Matlabem i Scilabem istnieją ró\nice w składni,
ksią\ki te nie będą więc przydatne jako szczegółowe instrukcje obsługi Scilaba.
Jednak filozofia działania obu programów jest identyczna, w obu te\ istnieją
funkcje mające takie same działanie (chocia\ nie zawsze mają identyczne nazwy i
składnię), z tego punktu widzenia ka\da ksią\ka opisująca sposób działania Matlaba
mo\e być przydatna.
2.2 Obcojęzyczne
Dla znających jako-tako angielski lub francuski polecam pliki pomocy Scilaba. Dość łatwo mo\na te\
znalezć informacje w języku rosyjskim.
2.3 Programy demonstracyjne
Warto zapoznać się z programami demonstracyjnymi (uruchamianymi przyciskiem Scilab Demos w menu
pomocy ? Scilaba) i je przeanalizować (ale to dopiero kiedy coś ju\ się wie o działaniu programu).
2.4 Internet
Mo\na znalezć sporo stron poświęconych pracy ze Scilabem (nie znalazłem jednak stron w języku polskim,
większość jest po angielsku, niektóre po francusku lub rosyjsku).
Strona domowa Scilaba: http://www.scilab.org/
Dokumentacja: http://www.scilab.org/product/
Wiki: http://wiki.scilab.org/Contents
3 Praca ze Scilabem
3.1 Ogólne informacje o Scilabie
3.1.1 Obliczenia numeryczne
Scilab jest programem przeznaczonym do obliczeń numerycznych. Słyszałem o próbach powiązania
Scilaba i programu do obliczeń symbolicznych Maxima (równie\ darmowy), ale na razie nie są one
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 2
szczególnie udane.
3.1.2 Interpreter
Scilab jest interpreterem tzn. polecenia wprowadzane z klawiatury (bÄ…dz odczytywane z pliku z
napisanym programem (skryptem) sÄ… wykonywane kolejno w miarÄ™ ich wydawania / wczytywania. Ma to
zarówno złe jak i dobre strony: programy interpretowane są wolniejsze od kompilowanych, z drugiej jednak
strony w przypadku interpretacji programu nie musimy z góry znać typów wszystkich zmiennych ani
rozmiarów tablic mogą się one zmieniać dynamicznie w trakcie wykonywania programu.
Istnieje pewne odstępstwo od tej reguły zdefiniowane przez u\ytkownika funkcje, zarówno
wczytywane z pliku wcześniej zapisanego na dysku jak i zdefiniowane w treści programu, są podczas
odczytywania kompilowane , co przyspiesza wykonywanie ich pózniejszych wywołań (jest to domyślne
zachowanie programu o jego zmianach pózniej).
Istnieją mo\liwości dołączania do Scilaba skompilowanych funkcji w C czy Fortranie (tym nie będziemy
się zajmować).
3.2 Uruchomienie
Bezpośrednio po uruchomieniu Scilab wczytuje swój plik ini, jego zawartość decyduje np. o foncie
u\ywanym w głównym oknie programu, o liście zmiennych systemowych itp. (o mo\liwości jego edycji
pózniej). W przypadku wcześniejszych wersji równocześnie (a właściwie minimalnie wcześniej) z głównym (a
obecnie jedynym) oknem programu pojawiało się jeszcze jedno okno Scilex engine Scilaba.
3.3 Wyłączenie
Oprócz odpowiedniego przycisku windowsowego okna Scilaba mo\na go wyłączyć za pomocą komendy
exit (u\ycie jej w skrypcie mo\e uniemo\liwić zapoznanie się z wynikami działania programu, bo wszystkie
otworzone przez program okna znikną natychmiast nie zadając nawet pytania czy faktycznie o to nam chodziło).
3.4 Wydawanie poleceń
Komendy mo\na wpisywać z klawiatury są wykonywane natychmiast po naciśnięciu klawisza Enter ).
Przed wykonaniem komendę mo\na edytować przemieszczając kursor za pomocą strzałek w prawo i w lewo.
Naciśnięcie klawisza Enter powoduje wykonanie całego polecenia niezale\nie od aktualnej pozycji kursora
w linii polecenia.
3.5 Skrypty
Za pomocą dowolnego edytora tekstowego mo\na utworzyć plik ( czysty plik tekstowy) o dowolnej nazwie
i rozszerzeniu (tzw. skrypt) zawierający wiele poleceń, które zachowują się jak program są interpretowane w
miarę wczytywania kolejnych poleceń z pliku przez Scilab. Zwyczajowo plikom zawierającym skrypty nadaje
się rozszerzenie .sce jednak tak na prawdę jest to nazwa zwyczajowa , która przydaje się głównie systemowi
Windows (do rozpoznania jakim programem nale\y otworzyć plik z takim właśnie rozszerzeniem). Podobnie
jest z rozszerzeniem .sci , które zwyczajowo przypisywane jest plikom zawierającym funkcje. Skryptami i
definiowanie funkcji Scilaba zajmiemy się pózniej.
3.6 Edytor
Poczynając od wersji 2.7 Scilab wyposa\ony jest w edytor SciPad, który rozpoznaje składnię poleceń Scilaba
i odpowiednio koloruje słowa kluczowe. Mo\na w nim pisać programy i funkcje oraz od razu przesyłać je do
uruchomienia w Scilabie. Uruchamiamy go z głównego menu (pozycja Editor ). Edytor ten rozpoznaje
wybrany w Scilabie katalog roboczy i domyślnie właśnie w nim szuka plików do otwarcia.
3.7 Katalog roboczy
Katalog roboczy mo\na ustalić w linii poleceń: polecenie chdir('ście\ka'). Mo\na te\ skorzystać z
menu (pozycja File i dalej Change Directory ) mo\na wówczas przeglądać istniejące katalogi. Jeśli
korzystamy z menu, to po wybraniu katalogu i zatwierdzeniu wyboru w linii komend i tak pojawi siÄ™ polecenie
chdir z odpowiednim argumentem (ście\ką do wybranego katalogu) i od razu zostanie wykonane. Je\eli w
nazwie katalogu występuje znak ' to wystąpi błąd (Scilab zinterpretuje go jako zakończenie łańcucha
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 3
definiującego ście\kę) wystarczy zamienić go na dwa takie znaki i ponowić komendę. Polecenie pwd pokazuje
nam jaki jest aktualny katalog.
3.8 Historia
Scilab pamięta pewną liczbę wcześniej wydanych komend. Naciśnięcie strzałki skierowanej w górę
powoduje pojawienie się ostatnio wydanej komendy, kolejne jej naciśnięcia przywołują wcześniejsze komendy.
Strzałka w dół w tym kontekście przywołuje komendy pózniejsze ni\ akurat znajdująca się w linii poleceń. Tak
więc we wspomnianym wcześniej przykładzie zmiany katalogu wybór katalogu zawierającego znak ' spowoduje
natychmiastowe wystąpienie błędu, mo\na jednak za pomocą strzałki w górę ponownie wywołać ostatnią
komendę i ręcznie dodać jeszcze jeden znak ' .
4 Dopasowanie Scilaba do własnych potrzeb
4.1 Plik scilab.ini
Początkowo plik ten nie istnieje, mo\na go jednak stworzyć w aktualnym (w chwili uruchamiania Scilaba)
katalogu. Bezpośrednio po zainstalowaniu Scilaba katalogiem tym jest \Documents and Settings\nazwa
u\ytkownika . W pliku tym mo\na umieścić wszelkie komendy jakie chcielibyśmy, aby Scilab wykonywał
bezpośredni po uruchomieniu. W szczególności mo\e znalezć się tam polecenie chdir('ście\ka')
wskazujące na katalog, w którym przechowujemy pliki Scilaba. Jednak definiowanie w tym pliku zmiennych,
które chcielibyśmy by były zawsze dostępne, mija się z celem, bowiem ich \ywotność sięga nie dalej ni\ do
najbli\szego u\ycia polecenia clear (o nim pózniej). Polecenie chdir (podobnie jak wiele innych poleceń
Scilaba mo\na wydać równie\ w takiej postaci: chdir "ście\ka" (jednak taka postać będzie działać zgodnie
z oczekiwaniami tylko gdy argumentem będzie sam łańcuch, a nie zmienna łańcuch zawierająca).
4.2 Plik scilab.star
Plik ten znajduje się w domowym katalogu Scilaba. W tym pliku mo\na ewentualnie zdefiniować zmienne, o
których wspomniałem powy\ej. Przed eksperymentami warto jednak sporządzić kopię zapasową tego pliku, bo
jego błędna zawartość mo\e uniemo\liwić uruchomienie programu.
4.3 Polskie litery
Domyślna czcionka u\ywana w głównym oknie Scilaba nie ma polskich znaków. Taki stan rzeczy mo\na
zmienić wystarczy w menu Preferences , pozycja Choose Font wybrać czcionkę obsługującą polskie
znaki. Mo\e pojawić się tylko jeden problem zapisanie dokonanej zmiany. Sesję Scilaba mo\emy zakończyć
na dwa sposoby: albo wydajÄ…c w linii komend polecenie exit, albo zamykajÄ…c jego okno na windowsowÄ…
modłę (W w górnym prawym rogu okna). Tylko ten drugi sposób powoduje zapamiętanie dokonanej zmiany
wyboru czcionki. Warto pamiętać, \e zmiana ta ma znaczenie tylko z punktu widzenia komentarzy
wprowadzanych do programów nazwy plików, funkcji i zmiennych polskich liter zawierać nie powinny.
5 Pomoc
5.1 Pozycja w menu ?
Po naciśnięciu rozwija się lista, na której pierwszą pozycją jest uruchomienie przeglądarki plików pomocy
( Scilab Help ). Równie dobrze mo\emy posłu\yc się standardowym skrótem klawiszem F1 .
5.2 W linii komend:
5.2.1 Polecenie help nazwa
(gdzie nazwa jest nazwÄ… funkcji, polecenia itp.) otwiera tÄ™ samÄ… przeglÄ…darkÄ™ z wybranym ju\ opisem.
Porawna jest równie\ składnia help("nazwa") (zasada ta dotyczy większości poleceń Scilaba).
5.2.2 Polecenie apropos wyra\enie
(gdzie wyra\enie mo\e być wyra\eniem składającym się z kilku słów) tak\e otwiera tę samą
przeglądarkę, ale tym razem z listą opisów zawierających wpisane wyra\enie.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 4
5.3 Scilab Demos
W pozycji menu ? znajduje się równie\ pozycja Scilab Demos . Kliknięcie na niej uruchamia program
umo\liwiający wybór działu, a pózniej konkretnego programu demonstracyjnego.
Warto wspomnieć o jeszcze jednej pozycji menu ? Configure . Opcja ta umo\liwia wybór
przeglądarki u\ywanej do przeglądania plików pomocy. Domyślnie jest to Scilab Browser (druga pozycja na
liście) i to ustawienie zalecam. Wybór opcji Default Windows Browser spowoduje przeglądanie plików
pomocy w domyślnej przeglądarce internetowej, a Old Scilab Browser uruchomi starą (i zdecydowanie mniej
wygodnÄ…) przeglÄ…darkÄ™. Pewnym utrudnieniem jest fakt, \e po wybraniu opcji Configure Scilab w \aden
sposób nie informuje nas jaki wybór obowiązuje aktualnie.
6 Notatki z sesji Scilaba
Istnieje mo\liwość dokładnego zapisu przebiegu sesji pracy ze Scilabem: polecenie diary('nazwa_pliku')
powoduje zapis do podanego pliku tekstowego wszystkich wpisywanych przez nas poleceń oraz wszystkich
odpowiedzi Scilaba. Zakończenie poleceniem diary(0). Polecenie to koniecznie chce zało\yć nowy (pusty) plik
tekstowy o podanej nazwie zatem po przerwaniu zapisu trzeba zacząć zapisywanie do pliku o innej nazwie
(poczynając od wersji wersji 3.0 polecenie to kasuje utworzony wcześniej plik nie zawracając głowy
u\ytkownikowi). Aańcuch nazwa pliku mo\e zawierać równi\ ście\kę do pliku, w ście\ce tej znakiem
oddzielającym katalogi mo\e być zarówno / jak i \ . Je\eli nie podamy ście\ki to plik zostanie utworzony w
aktualnym katalogu roboczym (co to za katalog mo\na sprawdzić poleceniem pwd (skrót od print work directory, a
do jego zmiany słu\y polecenie chdir (pkt.3.7).
7 Konwersacja ze Scilabem
7.1 Linia komend
Polecenia wpisujemy w linii komend, kończymy je naciskając Enter i wtedy Scilab je wykonuje (lub
usiłuje wykonać).
7.2 Długie polecenia
Je\eli polecenie jest za długie i wygodniej byłoby nam zapisać je w kilku wierszach to nale\y wpisać dwie
kropki .. naciśnięcie klawisza Enter spowoduje wówczas przejście do nowej linii, ale Scilab będzie
oczekiwać na dokończenie polecenia w kolejnej linii (albo kolejnych liniach jeśli następne linie te\ będziemy
kończyć dwiema kropkami). Jak łatwo się domyślić metody tej nie da się zastosować do przeniesienia części
wprowadzanego łańcucha do następnego wiersza.
7.3 Ukrycie wyniku polecenia
Jeśli nie chcemy aby wynik polecenia pojawił się na ekranie (bo np. zdefiniowaliśmy właśnie jakąś ogromną
macierz) to polecenie kończymy średnikiem ( ; ).
7.4 Kilka poleceń w jednej linii
Mo\liwe jest wydanie kilku poleceń w jednej linii trzeba je wówczas oddzielić średnikami (wyników nie
będzie widać na ekranie) lub przecinkami (wyniki będą widoczne). Podczas testowania programów wpisywanie
wielu poleceń w jednej linii mo\e być trochę niewygodne w razie napotkania błędu Scilab poda nam numer
wiersza, w którym wystąpił błąd, nie będzie jednak wiadomo, w którym konkretnie poleceniu. Jeszcze
niewygodniejsze mo\e być skorzystanie z mo\liwości wprowadzenia jednego polecenia w wielu liniach linie
przełamane za pomocą dwóch kropek są przez Scilaba traktowane jako pojedyncza linia i odpowiednio do
tego zostanie podany numer wiersza z błędem.
7.5 Kopiowanie do i ze schowka
Mo\liwe jest wkopiowywanie fragmentu tekstu ze schowka do linii komend, w wersji 4.0 mo\na ju\ u\yć do
tego skrótu klawiaturowego Ctrl-v . Skopiowanie fragmentu polecenia z wiersza poleceń te\ mo\e odbyć się z
wykorzystaniem skrótu Ctrl-c warunkiem jest jednak, aby istniał w tym momencie zaznaczony blok. Jeśli
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 5
naciśniemy Ctrl-C lub Ctrl-c gdy nic nie było zaznaczone to dotychczasowy znak zachęty (mający postać
>) zmieni się na 1 > (liczba mo\e być wy\sza je\eli naciśniemy Ctrl-C kilka razy). Naciśnięcie Ctrl-C
powoduje przerwanie aktualnie wykonywanych operacji (poleceń wprowadzonych z klawiatury albo
odczytanych ze skryptu) i przekazanie kontroli u\ytkownikowi (ten sam efekt mo\emy uzyskać wykorzystując
pozycję menu Control i dalej Interrupt ). W stanie tym dostępne są wszystkie aktualnie znajdujące się w
pamięci zmienne, mo\na je nie tylko oglądać, ale i zmieniać. Po wydaniu polecenia resume Scilab powraca do
wykonywania programu (który oczywiście nie zdając sobie sprawy z ewentualnych zmian wprowadzonych
przez u\ytkownika wykorzystuje je jakby nigdy nic ). Mo\liwe jest skopiowanie całych przykładów
podawanych w helpach i wklejenie ich w edytorze do skryptu zachęcam do eksperymentów.
8 Zmienne
8.1 Zapis liczb (dokładność):
Do zmiany formatu wyświetlania (i drukowania) liczb słu\y funkcja format. Wywołanie:
format([typ],[długość]), gdzie typem mo\e być 'e' (exponential postać wykładnicza) lub 'v'
(variable format zmienny (domyślny)), a długość domyślnie wynosi 10.
8.2 Macierze
W zasadzie wszystkie zmienne o wartościach liczbowych są przez Scilaba traktowane jak macierze nawet
skalary sÄ… uwa\ane za macierze o wymiarze 1×1. Mo\na odwoÅ‚ywać siÄ™ do poszczególnych elementów macierzy
albo do ich zakresów (np. A(2,3) albo A(1:3,2:5) o operatorze : będzie jeszcze pózniej).
8.3 Aańcuchy
Ciągi znaków ograniczone znakami ' lub ". Jest między nimi subtelna ró\nica podwójne uszy edytor
SciPad rozpoznaje jako ogranicznik łańcucha i całe łańcuchy pokazuje w innym kolorze. Jeśli chcemy umieścić
w łańcuchu znak cudzysłowu musimy obok siebie zapisać dwa takie same znaki.
8.4 Typy zmiennych
Ka\da nowoutworzona zmienna nale\y do typu float , mo\na jednak zmienić jej typ na całkowity (int8,
int16, int32, uint8, uint16, uint32).
8.5 ZarzÄ…dzanie zmiennymi
8.5.1 komenda who
Podaje listę zmiennych i informuje o łącznej zajętości pamięci, stosu itp..
8.5.2 komenda whos()
Podaje bardziej szczegółowe informacje o zmiennych znajdujących się w pamięci (w szczególności ich
rozmiary, ile ka\da z nich zajmuje pamięci itp., pokazywane są równie\ nazwy zdefiniowanych przez
u\ytkownika funkcji).
8.5.3 komenda clear
Je\eli jako parametr podano nazwÄ™ konkretnej zmienej (lub kilka nazw oddzielonych spacjami) to
zostanie ona (lub one) usunięta z pamięci, je\eli nie podano \adnych parametrów to komenda ta powoduje
usunięcie z pamięci wszystkich zmiennych utworzonych przez u\ytkownika. Parametry tej komendy podaje
się po spacji (i jeśli jest ich więcej oddziela się je od siebie równie\ spacjami).
8.6 Zmienne systemowe
Zmienne o nazwach zaczynajÄ…cych siÄ™ od znaku % sÄ… zmienymi predefiniowanymi (systemowymi), np.
%eps, %t czy %pi. Komenda clear ich nie kasuje. U\ytkownik mo\e oczywiście utworzyć własne zmienne
o nazwach zaczynających się od % , jednak taka nazwa nie uczyni ich odpornymi na działanie polecenia
clear.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 6
9 Operatory arytmetyczne
Przede wszystkim trzeba pamiętać o tym, \e wszystkie operatory domyślnie działają na macierze. Operatory nie
muszą być oddzielane od zmiennych spacjami (chocia\ w szczególnych przypadkach spacje pozwalają uniknąć
niejednoznaczności o tym za chwilę).
9.1 Operator przypisania: = .
Wartość wyra\enia po prawej stronie zostaje przypisana zmiennej znajdującej się z lewej strony. Jeśli w
wierszu polecenia wprowadzimy tylko wyra\enie to obliczona wartość zostanie przypisana domyślnej zmiennej
o nazwie ans. Długość nazw zmiennych jest nieograniczona, lecz rozpoznawane są tylko 24 pierwsze znaki.
Nazwy muszą zaczynać się od litery lub znaku % , po których następują dowolne znaki litery, cyfry lub inne
znaki (poza oczywiście spacją i symbolami operatorów).
9.2 Operatory dodawania i odejmowania ( + i ).
Dodają do siebie lub odejmują od siebie odpowiednie elementy swoich argumentów. Oczywiście rozmiary
dodawanych macierzy muszą się zgadzać (w szczególności mogą to być i skalary), mo\liwe jest jednak dodanie
(lub odjęcie) skalara do macierzy wówczas skalar ten zostanie dodany do ka\dego elementu macierzy (w tym
względzie działanie to jest analogiczne do mno\enia macierzy przez skalar). Operator dodawania mo\e być
stosowany tak\e do łączenia łańcuchów.
9.3 Mno\enie: * .
Jest to mno\enie macierzy (bądz wektorów, oczywiście muszą one mieć odpowiednie rozmiary). Dla
skalarów działa to całkiem normalnie. Jeśli pomno\ymy macierz przez skalar to pomno\one przez ten skalar
zostaną wszystkie elementy macierzy. W szczególności iloczyn skalarny dwóch wektorów (np. wierszowych)
otrzymamy wykonując działanie: a*b (wektor b w tym przykładzie jest transponowany czyli kolumnowy, o
operatorze transpozycji dalej). Istnieje dodatkowo specjalny operator ( .* ) umo\liwiajÄ…cy mno\enie
macierzy element po elemencie t.j. w sposób analogiczny do np. dodawania: element przez odpowiadający
mu element.
-->a = [1,2,3,4]
a =
1. 2. 3. 4.
-->b = a*a
!--error 10
inconsistent multiplication
-->c = a*a'
c =
30.
-->d = a'*a
d =
1. 2. 3. 4.
2. 4. 6. 8.
3. 6. 9. 12.
4. 8. 12. 16.
-->e = a .* a
e =
1. 4. 9. 16.
9.4 Dzielenie: / .
Dzielenie dwóch skalarów działa całkiem normalnie . Podzielenie macierzy przez skalar powoduje
podzielenie wszystkich elementów macierzy przez ten sam skalar (analogicznie jak mno\enie). W odniesieniu
do macierzy dzielenie jest zdefiniowane jako mno\enie przez odwrotność macierzy będącej dzielnikiem (funkcja
inv albo w zapisie skróconym ^(-1) ). Istnieje równie\ operator ./ słu\ący do dzielenia przez siebie
odpowiednich elementów macierzy. Poza tym istnieją operatory \ i .\ mamy więc mo\liwość dzielenia
lewo- i prawostronnego. W przykładzie poni\ej widzimy macierzowe dzielenie lewostronne, będące w istocie
rozwiązaniem układu równań liniowych.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 7
x1 7
1 2 3 4
x2 6
5 6 7 8
A x ' b ] '
1 7 9 13 x3 &2
2 4 8 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 Potęgowanie: ^ (lub ** ).
W przypadku skalarów jest to normane potęgowanie, macierze kwadratowe mogą być podnoszone do potęgi
jako macierze (potęgowanie macierzowe). Do podniesienia do potęgi ka\dego z elementów macierzy z osobna
słu\y 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.
W przypadku operatora .^ wykładnikiem mo\e być równie\ macierz (np. a.^b) wówczas ka\dy z
elementów macierzy a zostanie podniesiony do potęgi będącej analogicznym elementam macierzy b (oczywiście
rozmiary obu macierzy muszą być identyczne).
9.6 Transpozycja (operator .' )
Zamiana indeksów miejscami, albo ' prawdziwa transpozycja z zamianą na wartości sprzę\one
(oczywiście w przypadku macierzy zawierającej wyłącznie liczby rzeczywiste to rozró\nienie nie ma
praktycznego znaczenia).
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 8
-->a = [1,2,3,4]
a =
1. 2. 3. 4.
-->b = a'
b =
1.
2.
3.
4.
9.7 Operator .*. (iloczyn Kroneckera).
Operator ten (np. A.*.B, albo funkcja kron(A,B)) zwraca macierz utworzoną z bloków postaci Aij*B:
A1,1@B ÿ A1,n@B
A.(.B ' ! " !
Am,1@B ÿ Am,n@B
W przykładzie powy\ej macierz A ma m wierszy i n kolumn. Rozmiary obu macierzy mogą być dowolne.
-->a = [1,2;,3,4]
a =
1. 2.
3. 4.
-->b=[5,6;7,8]
b =
5. 6.
7. 8.
-->a.*.b
ans
5. 6. 10. 12.
7. 8. 14. 16.
15. 18. 20. 24.
21. 24. 28. 32.
Równie dobrze mo\na posłu\yć się poleceniem kron(a,b):
-->kron(b,a)
ans =
5. 10. 6. 12.
15. 20. 18. 24.
7. 14. 8. 16.
21. 28. 24. 32.
9.8 Specyfika działania operatorów na macierze i skalary
Je\eli macierz pomno\ymy lub podzielimy przez skalar to oczywiście pomno\ony (podzielony) zostanie
ka\dy element macierzy. Jak ju\ wspomniałem Scilab rozszerza tę zasadę na operatory dodawania i
odejmowania. Jeśli do macierzy dodamy skalar (np. a+2) to Scilab potraktuje to jako polecenie dodania liczby 2
do ka\dego 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.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 9
9.9 Problem z wyra\eniem postaci 1/a
Gdybyśmy chcieli podzielić lub pomno\yć skalar przez macierz to musimy pamiętać o tym, \e polecenie
1/a będzie dla Scilaba oznaczać pomno\enie liczby 1 przez odwrotność macierzy a. Aby uniknąć takiego
nieporozumienia moglibyśmy zastosować operator z kropką , ale występująca w operatorze kropka mogłaby
zostać zinterpretowana przez Scilab jako kropka dziesiętna (oczywiście jest to mo\liwe tylko gdy pierwszym
argumentem będzie liczba całkowita) np. gdybyśmy chcieli zapisać 1./a to Scilab zrozumie to jako 1.0/a
(jeśli po kropce dziesiętnej wystąpi zero to nie ma obowiązku zapisywania go sama kropka dziesiętna
wystarczy). Aby uniknąć takiej pomyłki nale\ałoby wpisać (1)./a albo oddzielić operator od argumentów
spacjami 1 ./ a (osobiście zalecam ciągłe stosowanie tej ostatniej metody otrzymujemy wówczas nieco
czytelniejszy kod).
9.10 Reszta z dzielenia modulo(x,d)
x jest dzielną, a d dzielnikiem (obie te liczby nie muszą być całkowite, jednak wyniki dla liczb
niecałkowitych mogą być błędne !!! (w opisie w plikach pomocy zaznaczono wyraznie, \e funkcja ta jest
przeznaczona tylko dla liczb całkowitych).
10 Operatory logiczne:
10.1 Zaprzeczenie: ~ .
Operator ten mo\e działać na macierze zawierające liczby. Wynikiem będzie macierz zawierająca wartości
logiczne %F wszędzie tam gdzie elementy macierzy były ró\ne od zera i %T tam gdzie wartości elementów
wynosiły 0. Mo\na oczywiście obliczyć ~~A i dostać %T dla wartości niezerowych i %F dla zer.
10.2 Koniunkcja: and (lub znak & ).
Ten operator równie\ mo\e działać na macierze zawierające wartości liczbowe. Wynikiem będzie %T jeśli
wszystkie elementy macierzy mają wartości niezerowe i %F jeśli choć jedna będzie zerem. W wywołaniu tej
funkcji mo\e wystąpić dodatkowy argument postaci 'c' lub 'r'. Jeśli dana będzie macierz
A = [1,2,0;4,5,6], to działanie and(A,'c') daje wektor kolumnowy zawierający wynik działania and na
wiersze macierzy A i analogicznie, polecenie and(A,'r') daje wektor wierszowy będący wynikiem działania
and na kolumny macierzy A.
10.3 alternatywa: or lub znak | .
Na macierze działa analogicznie jak and.
11 Operatory relacji:
11.1 Nierówność: ~= (inaczej ni\ w C).
11.2 Równość: == (tak jak w C).
11.3 Większość, mniejszość itp.: < , > , <= , >= .
Wynikiem działania operatorów relacji jest wartość logiczna %T lub %F. Operatory te mogą jednak działać
równie\ na macierze liczbowe. Jeśli 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 jak
A (3 wiersze na 4 kolumny) zawierającą wartości %T tam gdzie relacja jest spełniona i %F tam gdzie spełniona
nie jest. Działanie jest analogiczne jeśli oba argumenty relacji będą macierzami liczbowymi (oczywiście muszą
wtedy mieć jednakowe rozmiary). Wartości logiczne %T i %F na ekranie wyświetlane są jako T i F (dla skrócenia
zapisu). Natomiast wprowadzając je z klawiatury równie dobrze mo\emy u\ywać wielkich liter: %T, %F jak i
małych: %t, %f.
12 Zmienne predefiniowane.
Ich nazwy zaczynają się od znaku % (mo\na jednak tego znaku u\ywać dla nazw zmiennych tworzonych przez
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 10
u\ytkownika). Zmienne predefiniowane nie ulegają usunięciu po wydaniu komendy clear, która wydana bez
dodatkowych parametrów usuwa wszystkie istniejące zmienne.
12.1 Wartość Ą %pi.
12.2 Podstawa logarytmów naturalnych e: %e.
12.3 Jednostka urojona: %i na ekranie pojawia siÄ™ jako samo i.
12.4 Nieskończoność: %inf.
12.5 Prawda logiczna: %t lub %T, fałsz: %f lub %F.
12.6 Minimana mo\liwa do zapisania w danym systemie liczba zmiennoprzecinkowa: %eps bardzo
po\yteczna mo\na ją wykorzystać np. do zatrzymania obliczeń gdy krok zmaleje do praktycznie
niemierzalnej wielkości.
12.7 nie liczba : %nan not a number.
12.8 Zmienna ans.
Istnieje jeszcze jedna szczególna zmienna: ans. Jest to zmienna, której przypisuje się wynik ostatniego
polecenia, jeśli polecenie to samo nie określało swojego celu . Jeśli np. wprowadzimy polecenie 2+2, to
odpowiedzią Scilaba będzie: ans = 4. Zmienna ta udostępnia obliczoną wartość dopóki nie wydamy kolejnego
tego rodzaju polecenia.
13 Funkcje wbudowane
Dostępne są właściwie wszystkie funkcje elementarne (trygonometryczne, wykładnicze, logarytmiczne) Nazwy
wszystkich funkcji pisane są małymi literami. Praktycznie wszystkie funkcje na macierze działają element po
elemencie czyli wynikiem dziaÅ‚ania funkcji na macierz-argument o rozmiarze n×m bÄ™dzie identycznego
rozmiaru macierz-wynik zawierająca wyniki działania funkcji na poszczególne elementy macierzy-argumentu.
13.1 Funkcje trygonometryczne
Proste (sin, cos, tan, cotg), odwrotne (asin, acos, atan), hiperboliczne (sinh, cosh, ) i odwrotne do
nich (asinh, acosh, ). Argumenty zawsze przyjmujÄ… w radianach.
13.2 Funkcje logarytmiczne
log logarytm naturalny, log10 logarytm dziesiętny, log2 logarytm o podstawie 2.
13.3 Funkcja eksponencjalna: exp.
13.4 Pierwiastek: sqrt.
13.5 Wartość bezwględna liczby (rzeczywistej lub zespolonej): abs.
13.6 Signum: sign.
Zwraca +1 dla liczb dodatnich i 1 dla zera i liczb ujemnych.
13.7 Funkcje działające na liczbach zespolonych
Moduł (abs), sprzę\enie (conj), część rzeczywista (real), część zespolona (imag)
13.8 Liczby losowe:
Funkcja rand(n1,n2) generuje macierz n1×n2 skÅ‚adajÄ…cÄ… siÄ™ z liczb losowych z przedziaÅ‚u <0,1).
Istnieje te\ generator liczb losowych grand umo\liwiający uzyskanie ró\nych zadanych rozkładów.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 11
13.9 Funkcje specjalne
Funkcja błędu (erf) i jej dopełnienie (erfc), funkcja gamma (gamma) i jej logarytm (gammaln), funkcja psi
(pochodna funkcji gamma, dlgamma), funkcja beta (beta), funkcje Bessela pierszego (besseli, besselj),
drugiego (besselk, bessely) i trzeciego (besselh) rodzaju,
13.10 Funkcje macierzowe
Funkcje realizujÄ…ce operacje w wersjach macierzowych . Np. funkcja obliczajÄ…ca pierwiastek (sqrt)
zastosowana do macierzy zwraca macierz zawierająca pierwiastki poszczególnych elementów macierzy będącej
jej argumentem. Mo\na jednak zdefiniować pierwiastek z macierzy (kwadratowej) jako operację zwracającą
takÄ… macierz, \e pomno\ona (macierzowo) sama przez siebie daje macierz oryginalnÄ….
13.10.1 Pierwiastek macierzowy: sqrtm
Funkcja realizująca opisaną w powy\szym przykładzie operację. Powinno oczywiście zachodzić:
sqrtm(X)*sqrtm(X) == X, ale najczęściej nie zachodzi, bo w wyniku pierwiastkowania macierzowego
otrzymujemy macierz, w której występują wartości zespolone, które po podniesieniu wyniku do kwadratu nie
znikajÄ…:
-->a=[1,2,3;4,5,6;7,8,9]
a =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->sqrtm(a)
ans =
0.4497564 + 0.7622786i 0.5526217 + 0.2067958i 0.6554871 - 0.3486869i
1.0185207 + 0.0841514i 1.2514702 + 0.0228291i 1.4844197 - 0.0384931i
1.5872851 - 0.5939759i 1.9503187 - 0.1611376i 2.3133523 + 0.2717007i
-->sqrtm(a)^2 - a
ans =
1.0D-15 *
- 0.6661338 + 0.0229851i - 0.0996382i 0.8881784 - 0.0977002i
0.8881784 + 0.0897990i 3.5527137 - 0.0161275i 6.2172489 - 0.0378387i
0.1833115i 1.7763568 + 0.0712592i 5.3290705 + 0.0031442i
Warto jednak zwrócić uwagę, \eto co zostało jest bardzo bliskie zera rzędu 10 15.
13.10.2 Eksponent macierzowy: expm
x2 ÿ
Funkcja ta oblicza sumÄ™ szeregu postaci expm x ' I % x % % ÿ, gdzie I jest macierzÄ…
ÿ
ÿ
2
jednostkowÄ… o rozm\iarze identycznym z x.
13.10.3 Logarytm macierzowy: logm
Operacja przeciwna do eksponentu macierzowego. I znów: wprawdzie powinno zachodzić:
logm(expm(X)) == X, ale przeszkadzają składniki zespolone:
-->a = [1,2,3;4,5,6;7,8,9] a =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->logm(expm(a))-a
ans =
1.0D-09 *
0.5657645 0.6277747 - 0.5631446
- 0.6186123 - 0.1845466 0.2937011
0.1333236 - 0.2751595 0.1387974
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 12
Macierzowe funkcje trygonometryczne i hiperboliczne i odwrotne do nich (wykorzystujÄ…ce w definicjach
eksponent macierzowy): sinm, asinm, cosm, acosm, tanm, atanm, sinhm, asinhm, coshm, acoshm,
tanhm, atanhm).
14 Operacje macierzowe.
14.1 Sposoby tworzenia macierzy.
14.1.1 Operator: : .
Operator ten słu\y do generowania ciągu liczb. Zapis 1:10 oznacza 1,2,3,4,5,6,7,8,9,10. Mo\na te\
podać krok (umieszczony pomiędzy dwoma dwukropkami): 1:2:10 to samo co poprzednio tylko z
krokiem 2: 1,3,5,7,9 (warto zwrócić uwagę na to, \e przy tym zapisie w wygenerowanym zestawie liczb
mo\e nie znalezć się podana wartość końcowa (w tym przypadku 10) dopilnować tego musi sam
u\ytkownik). Krok mo\e być ujemny, wtedy oczywiście początek musi być większy ni\ koniec, w
przeciwnym razie otrzymamy wektor pusty (a Scilab nie będzie sygnalizować błędu). No i oczywiście \adna
z tych liczb nie musi być całkowita.
14.1.2 Składanie macierzy z kawałków .
Zdefiniowane wcześniej macierze mo\na łączyć posługując się nawiasami kwadratowymi oraz
przecinkami i średnikami (pod warunkiem zgodności odpowiednich rozmiarów).
Przykład: 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. 2. 3. 7. 8.
4. 5. 6. 9. 0.
11. 12. 13. 14. 15.
16. 17. 18. 19. 20.
W tym samym poleceniu mo\na łączyć wszystkie mo\liwości (wpisywanie z klawiatury, generowanie i
składanie macierzy z kawałków).
14.2 Odwoływanie się do elementów macierzy
(jako przykład posłu\y nam macierz D zdefiniowana powy\ej).
14.2.1 Przez podanie indeksów
Np. D(3,4) element z 3-go wiersza (pierwszy indeks) i 4-tej kolumny (drugi indeks):
3,4 ' 14
14.2.2 Mo\na te\ wybrać fragment macierzy: np. D(1:2,1:3) wynikiem jest macierz 2×3 z lewego górnego
naro\nika macierzy D (wiersze od 1 do 2 i kolumny od 1 do 3).
1 2 3
D 1:2,1:3 '
4 5 6
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 13
14.2.3 Symbol :
Gdybyśmy chcieli wybrać np. cały 2-gi wiersz macierzy D nale\ałoby wydać polecenie: D(2,:) w tym
przypadku osamotniony symbol : oznacza wszystkie mo\liwe wartości danego indeksu (w tym
przykładzie: numeru kolumny).
D 2,: ' 4 5 6 9 0
14.2.4 Symbol $
Symbol ten oznacza maksymalną (końcową) mo\liwą wartość indeksu/wskaznika gdybyśmy np.
chcieli wybrać dwie ostatnie kolumny macierzy D moglibyśmy wydać polecenie D(:,$-1:$) takie
polecenie działa nawet jeśli nie wiemy ile kolumn (czy wierszy) ma macierz D w danej chwili (Scilab jednak
to wie).
7 8
9 0
D :,$&1:$ '
14 15
19 20
14.3 Sprawdzenie rozmiaru macierzy: funkcja size.
Wynikiem jest wektor dwuelementowy zawierający liczbę wierszy i liczbę kolumn. Mo\na odwołać się tylko
do jednego elementu tej funkcji: size(A,1) daje liczbÄ™ wierszy, a size(A,2) daje liczbÄ™ kolumn. Nie musimy
pamiętać, która składowa jest liczbą kolumn, a która liczbą wierszy polecenie mo\e mieć postać
size(A,'r') (liczba wierszy rows) lub size(A,'c') (liczba kolumn columns). Gdyby chodziło nam o
łączną liczbę elementów size(A,'*') iloczyn obu poprzednich.
14.4 Znajdowanie elementu o maksymalnej (lub minimalnej) wartości: funkcja max (lub min).
Wynikiem wywołania polecenia max (lub min) z przypisaniem do pojednczej zmiennej jest maksymalna
(minimalna) wartość występująca w całej macierzy.
-->A = rand(3,4)
A =
! 0.3076091 0.312642 0.5664249 0.5935095 !
! 0.9329616 0.3616361 0.4826472 0.5015342 !
! 0.2146008 0.2922267 0.3321719 0.4368588 !
-->max(A)
ans =
0.9329616
Polecenie to mo\e przyjąć równie\ drugi argument postaci 'r' lub 'c' wówczas wynikiem będzie
odpowiednio wektor wierszowy lub kolumnowy zawierający maksymalne wartości występujące odpowiednio w
wierszach lub w kolumnach macierzy będącej pierwszym argumentem:
-->max(A,'r')
ans =
! 0.9329616 0.3616361 0.5664249 0.5935095 !
-->min(A,'c')
ans =
! 0.3076091 !
! 0.3616361 !
! 0.2146008 !
Istnieje te\ drugi sposób wywołania tego polecenia umo\liwiający otrzymanie nie tylko samej wartości
maksymalnej ale i jej współrzędnych w tym celu musimy wynik polecenia max przypisać do wektora
dwuelementowego (przy czym drugi element tego wektora sam mo\e być wektorem o liczbie elementów równej
liczbie wymiarów badanej macierzy):
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 14
-->[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 !
14.5 Zmiana wartości elementów macierzy
Aby zmienić wartość wybranych elementów macierzy dokonujemy przypisania nowej wartości wybranemu
elementowi (albo wybranym elementom wtedy musimy oczywiście zatroszczyć się o to aby rozmiary
macierzy podstawianej odpowiadały rozmiarom wybranego do zamiany fragmentu macierzy oryginalnej).
Mo\na przypisać im tak\e im macierz pustą [] (oczywiście macierz taka jest skalarem więc dopuszczalne
jest podstawienie postaci a(:,1:3) = [] spowoduje to usunięcie pierwszych trzech kolumn macierzy a).
Nie uda się podstawienie a(1,1) = [] w efekcie dostalibyśmy niekompletną macierz.
14.6 Funkcje słu\ące do generowania macierzy
14.6.1 linspace(x1,x2,N) i logspace(x1,x2,N).
Słu\ą do generowania wektorów wierszowych zawierających N elementów równomiernie rozło\onych od
x1 do x2 (linspace) lub od 10x1 do 10x2 (logspace) będą to np. argumenty, dla których będziemy chcieli
potem utworzyć wykres. Argument N jest opcjonalny, je\eli go nie ma Scilab przyjmuje 100 (dla
linspace) lub 50 (dla logspace).
14.6.2 diag
Jako argument przyjmuje wektor zaś zwraca macierz kwadratową, na której głównej przekątnej znajdują
się wartości podane w wektorze a pozostałe wartości sa zerami (np. diag([1,2,3,4])).
14.6.3 eye macierz jednostkowa
Ma 1 na głównej przekątnej, pozostałe wartości równe 0. Je\eli \ądana macierz nie będzie kwadratowa to
jedynki i tak znajdą się na głównej przekątnej tzn. poczynając od pozycji (1,1) przez (2,2), (3,3) itd. jak
długo się da (np. eye(n1,n2)).
14.6.4 ones
Same jedynki (np. ones(n1,n2)).
14.6.5 zeros
Same zera (np. zeros(n1,n2)).
14.6.6 rand
Liczby losowe z zakresu +0,1) (np. rand(n1,n2)).
Polecenia z powy\szych 4 punktów wymagają podania dwóch argumentów (w przeciwieństwie do
Matlaba, gdzie jeśli chodzi nam o macierz kwadratowa wystarczy jeden argument) po podaniu tylko
jednego argumentu nie jest generowana macierz kwadratowa ani wektor a skalar.
14.6.7 diag
Polecenie to ma ró\ne znaczenia w zale\ności od argumentów. Jeśli argumentem będzie wektor polecenie
utworzy macierz, na której głównej przekątnej znajdą się (kolejno od góry) elementy podanego wektora, np.:
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 15
-->a = [1,2,3];
-->A = diag(a)
A =
! 1. 0. 0. !
! 0. 2. 0. !
! 0. 0. 3. !
Mo\na podać dodatkowy argument liczbę całkowitą wskazuje ona o którą przekątną powy\ej lub poni\ej
(gdy liczba jest ujemna) głównej nam chodzi. Jeśli na przykład wektor a nadal jest określony jak powy\ej to:
-->A = diag(a,-2)
A =
! 0. 0. 0. 0. 0. !
! 0. 0. 0. 0. 0. !
! 1. 0. 0. 0. 0. !
! 0. 2. 0. 0. 0. !
! 0. 0. 3. 0. 0. !
Uzyskujemy w ten sposób mo\liwość łatwego utworzenia np. macierzy trójdiagonalnej:
-->a = [1,2,3];
-->b = [4,5,6,7];
-->c = [8,9,10];
-->A = diag(a,1) + diag(b) + diag(c,-1)
A =
! 4. 1. 0. 0. !
! 8. 5. 2. 0. !
! 0. 9. 6. 3. !
! 0. 0. 10. 7. !
Drugim zastosowaniem polecenia diag jest wydobywanie przekątnej (głównej lub którejś z wy\szych bądz
ni\szych) z ju\ istniejÄ…cej macierzy w takiej sytuacji pierwszym argumentem polecenia nie jest wektor a
macierz. Na przykład:
-->A = rand(4,5)
A =
! 0.2113249 0.6653811 0.8782165 0.7263507 0.2312237 !
! 0.7560439 0.6283918 0.0683740 0.1985144 0.2164633 !
! 0.0002211 0.8497452 0.5608486 0.5442573 0.8833888 !
! 0.3303271 0.6857310 0.6623569 0.2320748 0.6525135 !
-->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.8833888 !
14.7 Zapamiętywanie macierzy przez Scilab
14.7.1 macierz pełna (full)
Zapamiętywane są wszystkie elementy macierzy w ten sposób domyślnie jest zapamiętywana ka\da
wprowadzana lub generowana macierz. Polecenie full(a) przerabia macierz rzadką a na pełną.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 16
14.7.2 m acierz rzadka (sparse)
Zapamiętywane są tylko elementy niezerowe. Polecenie to tworzy (nową) macierz jako rzadką, albo
przerabia istniejÄ…cÄ… ju\ macierz na rzadkÄ….
Przerobienie istniejącej ju\ macierzy (pełnej X na macierz rzadką sp) uzyskamy przez wywołanie:
sp = sparse(X)
Utworzenie macierzy sp od razu jako rzadkiej:
sp = sparse(ij,v [,mn])
gdzie:
X dowolna istniejąca ju\ macierz pełna,
ij dwukolumnowa macierz liczb całkowitych (współrzędne elementów niezerowych),
v wektor (niezerowe wartości macierzy),
mn wektor dwuelementowy (liczba wierszy, liczba kolumn), argument opcjonalny (potrzebny
gdyby zakres elementów (zerowych) macierzy miał rozciągać się poza zakres istniejących
elementów niezerowych).
Przykład zastosowania ( \ywcem z helpów Scilaba):
-->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.
0. 0. 0. 0.
3. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 2.
Jak łatwo się domyślić w powy\szym przykładzie celowo nie zakończyłem wydawanych poleceń
średnikami.
Działania na macierzach rzadkich odbywają się w taki sam sposób jak na macierzach pełnych.
-->2*sp($,$)
ans =
4.
Jeśli jednak chcemy dokonać podstawienia, albo po prostu wyświetlić któryś z jej elementów musimy
wykorzystać polecenie sparse: (poniewa\ odwołanie postaci A(1,2) w przypadku macierzy rzadkiej daje
równie\ macierz rzadkÄ… (o wymiarze 1×1):
-->sp(3,1)
ans =
( 1, 1) sparse matrix
( 1, 1) 3.
-->a = sp($,$)
a =
( 1, 1) sparse matrix
( 1, 1) 2.
Je\eli chcemy dostać konkretną liczbę musimy wydać polecenie:
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Fizyka Komputerowa Informatyka 3. sem. wykład 1 17
-->full(sp(3,1))
ans =
3.
© Andrzej Brozi, Instytut Fizyki Politechniki Aódzkiej
Wyszukiwarka
Podobne podstrony:
Neural Network II SCILABscilab przykładowe zadaniascilab dziamalnia macierzeScilab dla ciekawych 1SCILABscilabSCILABSCILAB SCILABti scilabNeural Network I SCILABcw scilab19 05scilabFuzzy Logic I SCILABmetobl 312B lab6 scilab ChebdowskiSCILAB 3więcej podobnych podstron