SCILAB
Scilab
Program przeznaczony do obliczeń numerycznych. Program darmowy Komercyjny odpowiednik: Matlab Wymaga opanowania zasad macierzowego zapisu wyra eń. Zawiera wiele wbudowanych procedur numerycznych. Posiada tak e swój interpreter oraz język programowania wysokiego poziomu.
1
Wprowadzanie macierzy
Średnik rozdziela poszczególne wiersze. Cała lista elementów macierzy jest zawarta w nawiasach kwadratowych, [ ]. S = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
S = ! ! ! ! 16. 3. 5. 10. 9. 6. 4. 15. 2. 13. 11. 8. 7. 12. 14. 1. ! ! ! !
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
Sumowanie elementów macierzy
W wierszach
Instrukcja:
sum(S,'c')
Wynik:
ans = ! ! ! ! 34. 34. 34. 34. ! ! ! !
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
2
Sumowanie elementów macierzy
W kolumnach
Instrukcja:
sum(S,'r')
Wynik:
ans = ! 34. 34. 34. 34. !
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
Przekątna główna
Elementy macierzy le ące na przekątnej głównej
Instrukcja:
diag(S)
Wynik:
ans = ! ! ! ! 16. ! 10. ! 7. ! 1. !
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
3
Elementy macierzy
Element macierzy S le ący w wierszu i oraz kolumnie j jest oznaczany jako S(i, j) Instrukcja obliczająca sumę elementów w czwartej kolumnie:
S(1,4) + S(2,4) + S(3,4) + S(4,4) ans = 34.
Przykład błędnej instrukcji:
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
temp = S(5,5) !--error 21 invalid index
Rozszerzanie macierzy
Instrukcje: temp = S; temp(4,5) = Wynik temp = ! ! ! ! 16. 3. 2. 13. 0. 5. 10. 11. 8. 0. 9. 6. 7. 12. 0. 4. 15. 14. 1. 71. ! ! ! !
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
71
4
Operator dwukropka
Instrukcja 1:10 Wynik
ans =
! 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. !
Instrukcja 10:-2:0 Wynik ans = ! 10.
8.
6.
4.
2.
0.!
Wybór fragmentu macierzy
Instrukcja
S(1,1:4)
Wynik
ans = ! 16. 3. 2. 13. !
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
5
Zmienne
Nie jest wymagane deklarowanie zmiennych. Je eli u ywany nowej nazwy zmiennej nowa zmienna jest automatycznie tworzona i alokowana w pamięci. Je eli zmienna o danej nazwie istnieje, modyfikowana jest zawartość tej zmiennej. Przykład:
num_integer = 100 Istrukcja powoduje utworzenie macierzy o wymiarach 1x1, która przechowuje pojedynczą wartość: 100.
Operatory
+ * / ^ Ś () dodawanie odejmowanie mno enie dzielenie potęgowanie transpozycja kolejność wykonywania działań
6
Generowanie macierzy
zeros(3,3) ans = ! 0. 0. 0. ! ! 0. 0. 0. ! ! 0. 0. 0. ! 4*ones(3,3) ans = ! 4. 4. 4. ! ! 4. 4. 4. ! ! 4. 4. 4. ! rand(4,4,'normal') ans = ! ! ! ! 1.4739763 .2546697 .8529775 - .6834217 .7223316 .8145126 .6380837 - .1884803 - 1.0327357 - .9239258 2.7266682 - 1.7086773 .0698768 - 1.3772844 - .1728369 - .6019869 ! ! ! !
Zapisywanie macierzy
Zapis macierzy do pliku
save S
Odczyt macierzy z pliku load S Pliki o rozszerzeniu dat
7
Pliki SCI
Pliki tekstowe o rozszerzeniu SCI Przykład:
// this is comment line // sci-file to plot sine wave time = 0:.01:20; plot(sin(time));
Zapis do pliku My_prog.sci Uruchomienie:
exec('E:\Scilab-2.6\work\My_prog.sci')
Łączenie macierzy
a = [ 1 2 3 ]; b = [ 4 5 6]; c = [ 7 8 9]; d= [ a b c] d = ! 1. 2. 3. 4. 5. 6. 7. 8. 9. !
8
Usuwanie wierszy lub kolumn
s = [ 1 2 3 4; 5 6 7 8; 9 10 11 12 ] s = ! 1. 2. 3. 4. ! ! 5. 6. 7. 8. ! ! 9. 10. 11. 12. ! s(:,2) =[ ] s = ! 1. ! 5. ! 9. 3. 7. 11. 4. ! 8. ! 12. !
Typy danych
Stałe specjalne Macierze typu liczbowego Macierze łańcuchów znakowych Wielomiany i macierze wielomianów Macierze typu logicznego Listy Funkcje Biblioteki
9
Stałe specjalne
%i %pi %e %eps %nan %inf %t %f
Jednostka urojona: %i^2 = -1 PI = 3.1415927 ..... Liczba Eulera e = 2.7182818 Stała określająca precyzję maszyny not a number – wartość, która nie jest liczbą Nieskończoność Prawda – stała typu logicznego Fałsz – stała typu logicznego %f = ~%t.
Macierze łańcuchów znakowych
Podstawianie wartości
ss = ! z ! !0 w+v ! ! z*y-x*(w+v) !
x=1;y=2;z=3;w=4;v=5; evstr(ss) ans = ! 3. ! 0. 9. ! - 3. !
10
Wielomiany
Wielomian definiowany przez pierwiastki
p = poly([1 2],'s') p = 2 2 - 3s + s
Wielomian definiowany przez współczynniki
q=poly([1 2],'s','c') q = 1 + 2s
Macierze typu logicznego
Sprawdzanie warunku
[ 3,3] == [3,4] ans = ! T F !
Operacje logiczne
A = [%t %f %t A = ! T F T F ! B = ! F T F T ! %f], B = [%f %t %f %t]
A|B // logical OR ans = ! T T T T ! A&B // logical AND ans = ! F F F F !
11
Operatory logiczne
& i | lub ~ nie
Listy
ls = list(2,%i,'f',ones(3,3)) ls = ls(1) 2. ls(2) i ls(3) f ls(4) ! 1. 1. 1. ! ! 1. 1. 1. ! ! 1. 1. 1. !
12
Funkcje
Definicja funkcji
deff('[out] = dB(inp)',' out = 10*log10(inp)Ś)
Wywołanie funkcji
dB(10)
Wynik
ans = 10.
Operatory porównania
== ~= >= <= > < Equal to Not equal to Greater than or equal to Less than or equal to Greater than Less than
13
Instrukcje sterujące
if - instrukcja warunkowa select – instrukcja wyboru Pętle:
for while
break – instrukcja przerwania
Instrukcja warunkowa IF
if warunek1 then ciag instrukcji wykonywanych gdy spelniony jest warunek1 elseif warunek2 then ciag instrukcji wykonywanych gdy spelniony jest warunek2 ... elseif warunekN then ciag instrukcji wykonywanych gdy spelniony jest warunekN else ciag instrukcji wykonywanych gdy nie jest spelniony zaden z warunków od 1 do N end
14
Instrukcja warunkowa IF
if x>0 then, y=-x, else, y=x, end
T x>0
N
y = -x
y=x
Instrukcja warunkowa IF
if modulo(num,2) == 0 disp(ŚLiczba jest parzysta'); elseif modulo(num,2) ~=0 disp(ŚLiczba jest nieparzysta'); else disp(ŚNiewłaściwa liczba'); end
15
Instrukcja wyboru SELECT
select zmienna_testjaca case wyrazenie_1 ciag instrukcji wykonywany gdy zmienna_testujaca równa jest wyrazeniu_1 ... case wyrazenieN ciag instrukcji wykonywany gdy zmienna_testujaca rowna jest wyrazeniu_N else ciag instrukcji wykonywany gdy zmienna_testujaca nie jest równa zadnemu z wyrazen od 1 do N end
Instrukcja wyboru SELECT
select case case else end num 1 y = 'przypadek 1' 2 y = 'przypadek 2' y = 'inne przypadki'
N num = 1 T
y = Śprzypadek 1’ N num = 2 T
y = Śinne przypadki’
y = Śprzypadek 2’
16
Instrukcja wyboru SELECT
select modulo(num,2) case 0 disp(ŚLiczba jest parzysta'); case 1 disp(ŚLiczba jest nieparzysta'); else disp(ŚNiewłaściwa liczba'); end
Pętla FOR
for i = i_start : i_krok : i koniec instrukcja1 instrukcja2 ........... instrukcjan end
17
Pętla FOR
y=0; for i=1:4, y=y+v(i), end
i=1
y = y + v(i)
i = i +1
i <= 4
Pętla FOR
v=[1 -1 1 -1] y=0; for k=v, y=y+k, end
18
Pętla FOR
//Program to generate Bipolar signal +1 / -1 mat = rand(1,10,'normal'); binary =zeros(size(mat)); for count = 1:1:length(mat) if mat(count) >= 0 binary(count) =1; else binary(count) =-1; end end
Pętla WHILE
while warunek instrukcja_1 ............. instrukcja_N end
19
Pętla WHILE
x=1 ; while x<14, x=2*x, end
x=1
x=2*x
x < 14
Pętla WHILE
mat = rand(1,10,'normal'); binary =zeros(size(mat)); count = 1; while( count <= length(mat)) if mat(count) >= 0 binary(count) =1; else binary(count) =-1; end count =count+1; end
20
Instrukcja BREAK
mat = rand(1,10,'normal'); binary =zeros(size(mat)); count = 1; while( count <= length(mat)) if mat(count) >= 0 binary(count) =1; else binary(count) =-1; end count =count+1; // break condition if count == 5 break; end end
21