SCILAB


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

Wyszukiwarka