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 .

Podobne dokumenty