Scilab – skrypty (programowanie)
Transkrypt
Scilab – skrypty (programowanie)
Scilab – skrypty (programowanie) Strona 1 Skrypt (program interpretowany) możemy napisać w dowolnym edytorze. Warto posługiwać się edytorem wbudowanym w program Scilab. Wykonać skrypt możemy na dwa sposoby: • wpisując polecenie exec('nazwaSkryptu') • wybierając z menu Scilab – skrypty (programowanie) Strona 2 Sposób drugi jest wygodniejszy, ale na konsoli pojawia się dodatkowy tekst. W sposobie pierwszym musimy znać nazwę pliku ze skryptem (i nazwę katalogu, w którym skrypt się znajduje). Przydatne polecenia: • pwd() zwraca bieżący katalog roboczy, jeśli uruchamiamy skrypty z tego katalogu, to wystarczy podać „krótką” nazwę skryptu, • cd('katalog') zmienia bieżący katalog roboczy. Podstawowe instrukcje: • Definiowanie własnej funkcji, funkcję dwóch zmiennych 2 2 g a ,b = sin a b e a 2 b2 function [w]=g(a,b) pom=a.*a+b.*b definiujemy tak: Scilab – skrypty (programowanie) Strona 3 w=sin(pom).*exp(pom) endfunction • Pętla for służy do powtarzania pewnego ciągu instrukcji, ilość powtórzeń (iteracji) określona jest przez zmienną sterującą. Obliczenie sumy liczb nieparzystych z przedziału [1,1000] . suma=0 for i=1:2:1000 suma=suma+i; end suma //250000 Wykres funkcji f ( x , y) = x 2 + y 2 . x=linspace(-2,2,51)' y=linspace(-3,3,61) z=[] for i=1:length(y) z=[z y(i)^2+x.*x] end plot3d(x,y,z) Suma największych liczb w kolumnach macierzy A. A=[1 2 3;4 5 6;7 8 9] [ ] 1 2 3 ⇒ 4 5 6 7 8 9 max(A)//9 największa liczba w macierzy Scilab – skrypty (programowanie) Strona 4 max(A(:,2))//8 największa liczba w drugiej kolumnie max(A(2,:))//6 największa liczba w drugim wierszu suma=0 for i=A suma=suma+max(i); end suma //24 • Pętla while służy do powtarzania ciągu instrukcji, dopóki spełniony jest pewien warunek. Przy zapisywaniu warunku przydatne są operatory logiczne: == równe < mniejsze > większe <= mniejsze lub równe >= większe lub równe ~= lub <> różne ~ negacja (zaprzeczenie) | alternatywa (lub) & koniunkcja (i) n Obliczanie najmniejszej liczba postaci 2 większej niż 27 . x=1 Scilab – skrypty (programowanie) Strona 5 while (x<=27) x=2*x; end x //32 Zapisanie liczby w układzie dwójkowym. n=input("Podaj liczbę naturalną: ") m=n A=[] while (n>0) A=[A modulo(n,2)]; n=floor(n/2); end printf("%d = ",m) for i=length(A):-1:1 printf("%d",A(i)) end //55 = 110111 • Instrukcja warunkowa if-elseif-else wykonuje fragment kodu w zależności od spełnienia (bądź niespełnienia) pewnego warunku: disp("Rownanie kwadratowe ax^2+bc+c=0") a=input("a = "); b=input("b = "); c=input("c = "); delta=b^2-4*a*c; Scilab – skrypty (programowanie) Strona 6 if(a==0) if(b==0) printf("To nie jest równanie") else printf("Jeden pierwiastek: %6.6f",-c/b) end elseif(delta<0) printf("Brak pierwiastków") elseif(delta>0) printf("Dwa pierwiastki: %6.6f %6.6f",(-b-sqrt(delta))/(2*a),(b+sqrt(delta))/(2*a)) else printf("Jeden pierwiastek: %6.6f",b/(2*a)) end • Instrukcja select-case wykonuje fragment kodu w zależności od wartości pewnej zmiennej: clear() disp("Zgaduj zgadula"); poprawne="owca"; answer=input("Odgadnij zwierzę (używaj małych liter): ",”s”); Scilab – skrypty (programowanie) Strona 7 select answer case "owca" then napis="Gratulacje!"; case "koza" then napis="Jesteś blisko"; else napis="Niestety"; end disp(napis) Lista przydatnych poleceń Szczegółowy opis można znaleźć w manualu lub w helpie Menu główne => ? => Scilab Help. • %e liczba e, • %pi liczba π , • evstr(...) obliczenie wartości wyrażenia, evstr(3+sin(%pi/2)) => 4, x=linspace(-1,1,201), evstr(%pi^((abs(x)/%e)^(1/6))) => powstanie jednowierszowa macierz ( 201×1 ) 6 zawierająca wartości funkcji f ( x) = π x = −1,00 , −0,99 , … , 1,00 , • length(...) √∣x∣ e dla długość napisu lub ilość elementów tablicy, length(„Abrakadabra”) => 11, length(2:0.23:77) => 327, length([1 2 3;4 5 6] => 6, Scilab – skrypty (programowanie) Strona 8 • min(...) najmniejsza wartość w tablicy, min([1 2 3;4 5 6;7 8 9]) => 1, min([1 2 3;4 5 6;7 8 9],'c') 1 => 4 , 7 min([1 2 3;4 5 6;7 8 9],'r') => 1 2 3 • max(...) największa wartość w tablicy, • mean(...) średnia wartość w tablicy, mean([1 2 3;4 5 6;7 8 9]) => 5, mean([1 2 3;4 5 6;7 8 9],'c') 2 => 5 , 8 mean([1 2 3;4 5 6;7 8 9],'r') => 4 • sum(...) suma liczb w tablicy, • poly(...) utworzenie wielomianu o podanych 5 6 , współczynnikach lub o podanych pierwiastkach, poly([1 2 3],'y','c') poly([1 2 3],'z','r') 2 => 1 + 2 y + 3 y , 2 3 => −6 + 11 z − 6 z + z , • roots(wielomian) wyznaczenie pierwiastków (również zespolonych) wielomianu w, • gsort(...) funkcja sortująca, A=['pies' 'kącik' 'kot'], gsort(A) => ['pies' 'kącik' 'kot'], gsort(A,'g','i') => ['kot','kącik','pies'], Scilab – skrypty (programowanie) Strona 9 • rand(...) funkcja losująca, wylosowane liczby należą do przedziału [ 0,1 ) , naprawdę działa generator pseudolosowy – kolejne liczby są obliczane wg pewnego wzoru, warto ten generator zainicjować „liczbą losową”, rand('seed',getdate('s')) funkcja getdate('s') zwraca aktualny czas w postaci liczby sekund, które upłynęły od 00:00 w dniu 1 stycznia 1970 roku (tzw. UTC = Unix Time Convention), 0.0437334 0.2639556 rand(2,2)=> 0.4818509 0.4148104 .