Sunteți pe pagina 1din 10

Programare n SCILAB

SCILAB-ul lucreaza
In mod linie de comanda; fiecare linie este prelucrata imediat si rezultatele sunt
afisate;
Cu programe continute in fisiere; un fisier consta dintr-o succesiune de
instructiuni SCILAB, cu posibilitatea apelarii altor fisiere precum si apelarii
recursive. Un program SCILAB poate fi scris sub forma fisierelor:
Script; contine o secventa de comenzi SCILAB,se executa prin apelarea
numelui fisierului : exec(nume_fisier)
Functie; prima linie contine cuvantul function, poate lucra cu argumente.
Se pot defini mai multe functii in acelas fisier.
Instructiuni si functii de control Instructiuni si functii de control
Instructiune folosita pentru a face o alegere case
Instructiune pentru incheierea ciclurilor for, while si if end
Instructiune pentru afisarea unui mesaj de eroare error
Returneaza executia la functia precizata return
Instructiune pentru terminarea fortata intr-un ciclu break
Instructiune pentru crearea ciclurilor cu conditie logica while
Instructiune pentru crearea ciclurilor cu numar specificat
de pasi
for
Instructiune asociata cu if elseif
Instructiune asociata cu if else
Instructiune pentru executia conditionala if
Semnificatie Semnificatie Instructiune Instructiune
Sintaxa instructiunilor SCILAB Sintaxa instructiunilor SCILAB
Exemple de fisiere script
Definirea i reprezentarea grafic a funciilor cu acolad: cu ajutorul Scipad-
ului (editorul Scilab-ului) se editeaza un fisier script care se salveaza, de exemplu,
Functie.sce si contine urmatoarele instructiuni:
a=-4;b=4;d=0.01;c=0;
x=a:d:b;
k=length(x);
for i=1:k
if (x(i)>=a)&(x(i)<c)
y(i)=x(i)+sin(x(i));
end
if (x(i)>=c)&(x(i)<=%pi)
y(i)=sin(x(i));
elseif (x(i)>%pi)&(x(i)<=b)
y(i)=(x(i))^1/3-%pi^1/3;
end
end
plot(x,y)
select expr_0
case expr_1 Instr_1
case expr_n Instr_n else Instr end
case
while expresie
grup_instructiuni
end
while
for index=expresie \\
expresie=initial:pas:final
grup_instructiuni
for
if expresie_logica_1 grup instructiuni A
elseif expresie_logica_2 grup instructiuni B
end
elseif
if expresie_logica grup instructiuni A
else grup instructiuni B end
else
if expresie_logica grup instructiuni end if
Sintaxa Sintaxa Instructiune Instructiune
In fereastra de comanda se executa fisierul folosind instructiunea:
-->exec('functie.sce')
si se va obtine intr-o noua fereastra graficul functiei:
f x ( ) x sin x ( ) + 4 x 0 < if
sin x ( ) 0 x if
3
x
3

( )
otherwise
:=
Observatie: se poate executa direct, in editorul Scilab-ului folosind din meniul
Execute optiunea Load into Scilab
Calculul limitei irurilor definite recurent: sa se calculeze limita sirului
1 ,
2
2
10 , lim
2
1 1
>
+
= =
+

n
c
c
c si c unde c
n
n
n n
n
.
Se scrie programul n fisierul numit SirRecurent.sce:
x=10;
c=(2+x^2)/(2*x);
while abs(c-x)>0.00001
x=c;
c=(2+x^2)/(2*x);
end
c
-4 -3 -2 -1 0 1 2 3 4
-4
-3
-2
-1
0
1
Se lanseaz in execuie n fereastra de comanda scriind:
-->exec("SirRecurent.sce")
si se obtine rezultatul:
c =
1.4142136
Fiiere funcie sunt utilizate pentru crearea unor noi funcii SCILAB. Forma
general a unui fiier funcie este:
function [parametri_ieire] = nume_funcie (parametri_intrare)
..instructiuni de definire a functiei.
endfunction
unde:
function cuvnt cheie care declar fiierul ca fiier funcie (obligatoriu);
nume_funcie numele funciei, adic numele sub care se salveaz fiierul,
fr extensie; nu poate fi identic cu cel al unui fiier existent;
parametri_ieire parametrii de ieire trebuie separai cu virgul i cuprini ntre
paranteze drepte. Dac funcia nu are parametri de ieire
parantezele drepte i semnul = nu mai au sens;
parametri_intrare parametrii de intrare trebuie separai cu virgul i cuprini
ntre paranteze rotunde. Dac funcia nu are parametri de
intrare parantezele rotunde nu mai au sens.
endfunction instructiunea de terminare a unei functii.
Observatii:
Un fisier de tip functie poate sa contina mai multe functii.
Pentru utilizarea unei functii trebuie folosita, mai intai, comanda: getf
(NumeFunctie.sci)
Spre deosebire de fisierele script care au extensia sce fisierele de tip
functie au extensia sci.
Calculul factorialului
Se vor defini in acelas fisier (functii.sci)doua functii care calculeaza factorialul
unui numar dat; prima nu verifica daca argumentul este intreg pozitiv, a doua
functie face acest lucru inainte de a face calculul
function [f]=factorial(n)
f=prod(1:n)
endfunction
function [f]=factorial1(n)
//daca n nu este intreg si pozitiv se transmite un mesaj de eroare,
//apoi se transforma numarul intr-un numar intreg pozitiv
if (n-floor(n)~=0)|n<0 then
n=floor(abs(n))
warning('argumentul nu este intreg pozitiv; se va calcula
'+sprintf("%d",n)+"!")
end
f=prod(1:n)
endfunction
In fereastra de comanda se vor folosi aceste functii astfel:
-->getf('functii.sci')
-->factorial(5)
ans =
120.
-->factorial(0.5)
ans =
1.
-->factorial(-0.5)
ans =
1.
Daca argumentul nu este intreg si pozitiv functia factorial intoarce un rezultat
oarecare, 1, daca vom folosi functia factorial1 se va obtine:
-->factorial1(5)
ans =
120.
-->factorial1(0.5)
WARNING:argumentul nu este intreg pozitiv; se va calcula 0!
ans =
1.
-->factorial1(-5)
WARNING:argumentul nu este intreg pozitiv; se va calcula 5!
ans =
120.
Recursivitate: o functie se poate apela pe ea insasi (exemplu: calculul
factorialului recursive)
function [f]=fact(n)
if n<=1 then
f=1
else
f=n*fact(n-1)
end
endfunction
Observatie: O functie se poate defini direct prin intermediul comenzii deff
deff([y1, y2,, ]=nume_functie(x1, x2, ),text)
Exemplu: deff([y]=f(x),y=sin(x).*cos(x))
Reprezentri grafice
Functia Semnificatia Exemplu
plot Reprezinta grafic
o curba in 2D
unind punctele de
coordonate (x,y)
-->x=linspace(0,2*%pi,101);
-->y=exp(x).*sin(4*x);
-->plot(x,y,'x','y','y=exp(x)*sin(4x)')
plot2d Reprezinta grafic
o functie in 2D
t=(0:0.1:6*%pi);
plot2d(t',sin(t)');
xtitle('plot2d and xgrid ','t','sin(t)');
xgrid();
fplot2d Reprezinta grafic
o functie in 2D
definite anterior
deff("[y]=f(x)","y=sin(x)+cos(x)")
x=[0:0.1:10]*%pi/10;
fplot2d(x,f)
clf();
fplot2d(1:10,'parab')
paramfplot2d Reprezinta grafic
cu animatie o
functie in 2D
deff('y=f(x,t)','y=t*sin(x)')
x=linspace(0,2*%pi,50);theta=0:0.05:1;
paramfplot2d(f,x,theta);
plot3d Reprezinta grafic
o suprafata in 3D
t=[0:0.3:2*%pi]';
z=sin(t)*cos(t'); plot3d(t,t,z)
contour2d Reprezinta grafic
liniile de contur
in2D
contour2d(1:10,1:10,rand(10,10),5,rect=
[0,0,11,11])
xset("fpf","%.2f")
clf()
contour2d(1:10,1:10,rand(10,10),5,rect=
[0,0,11,11]
contour Reprezinta grafic
liniile de contur
ale unei suprafete
t=%pi*[-10:10]/10;
deff("[z]=surf(x,y)","z=sin(x)*cos(y)");
z=feval(t,t,surf);
rect=[-%pi,%pi,-%pi,%pi,-1,1];
contour(t,t,z,10,35,45," ",[0,1,0],rect)
xset("fpf","%.2f")
xbasc()
contour(t,t,z,10,flag=[0,1,0],ebox=rect)
Observatie: Instructiunea plot va desena intr-o alta fereastra graficul
Pentru mai multe informatii si exemple tastati in fereastra de comanda
-->apropos Graphics
Ex. plot
Ex. plot2d
0 2 4 6 8 10 12 14 16 18 20
-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
pl ot2d and xgri d
t
si n(t)
Ex. Plot3d
-1.0
0
1.0
Z
0
1
2
3
4
5
6
X
0
1
2
3
4
5
6
Y
0 1 2 3 4 5 6 7
-400
-300
-200
-100
0
100
200
y=exp(x)*si n(4x)
x
y
Exemplul : Reprezentarea liniilor de contur n plan
0.0 2.2 4.4 6.6 8.8 11.0
0.0
2.2
4.4
6.6
8.8
11.0
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66 0.66
0.83
0.83
0.83
0.83
0.83
0.83
0.83
0.83
0.83
Exercitii
1. Sa se defineasca urmatoarele functii cu acolada:

s s
< s
=
4 0 ,
0 4 ,
) (
x x
x x
x f
si
{ } { }

s s
s s < s
=
4 4 ), 5 cos(
10 4 4 10 ), sin(
) (
x x
x x x
x f
si sa se reprezinte grafic.
2. Sa se genereze o matrice A, cu n linii si n+1 coloane, ale carei elemente sunt:

=
=
=
rest in
j i daca
j i daca
A
, 0
1 , 1
, 2
.
3. Sa se scrie un program utilizand while care calculeaza suma elementelor
vectorului x=(5 2 9 10 1 9 1) pana cand intalneste un nr mai mare ca 8.
4. S se calculeze suma elementelor unui vector care sunt cuprinse intre valorile a
i b cu a<b.
5. S se calculeze produsul elementelor diferite de zero ale unui vector.
6. Se d irul de numere x
1
, x
2
, , x
n
. S se determine numrul de elemente
pozitive i s se calculeze produsul lor.
7. S se calculeze media aritmetic a elementelor unui vector care sunt mai mari
decat o valoare dat.
8. Se d irul de numere x
1
, x
2
, , x
n
. S se calculeze:
- media aritmetic a numerelor pozitive;
- suma ptratelor numerelor negative
9. S se ordoneze cresctor elementele unui vector.
10. S se calculeze produsul scalar al vectorilor x = ( x
1
, x
2
, , x
n
) i y = (y
1
, y
2
,
,y
n
).
11. Se dau dou siruri de cte n numere: a
1
, a
2
, , a
n
i b
1
, b
2
, , b
n
. S se formeze
irul c
1
, c
2
, , c
n
n care termenii se obin dup urmtorul procedeu: pentru
orice i, n i , 1 = ,
{ }

>
<
+
=
0 , , max
0 ,
2
i i i i
i i
i i
i
b a daca b a
b a daca
b a
c
Rezolvare ex1:(pentru prima functie)
a=-4;b=4;d=0.01;c=0;x=a:d:b;
k=max(size(x));
for i=1:k
if (x(i)>=a)&(x(i)<c)
y(i)=x(i)+sin(x(i));
end
if (x(i)>=c)&(x(i)<=%pi)
y(i)=sin(x(i));
elseif (x(i)>%pi)&(x(i)<=b)
y(i)=(x(i))^1/3-%pi^1/3;
end
end
plot(x,y)

S-ar putea să vă placă și