Documente Academic
Documente Profesional
Documente Cultură
17
Meniurile cu comenzile uzuale şi rolul lor
sunt următoarele:
Meniul File:
• New Scilab deschide o sesiune de
comenzi nouă;
• Exec permite lansarea în execuţie a
unui subprogram creat şi salvat anterior;
• Open... permite accesul la un
(sub)program printr-o fereastră SciPad
(figura 8.3);
• Save... ajută la salvarea unui program
cu eventuala stabilire a numelui şi
destinaţiei;
Fig. 8.3 – Fereastra SciPad
• Change Directory permite schimarea
directorului curent pe durata unei sesiuni;
• Exit determină închiderea unei sesiuni de lucru şi terminarea programului SCILAB.
Meniul Edit:
• Select All pentru selectarea conţinutului ferestrei;
• Copy şi Paste pentru copierea zonelor selectate în şi din fereastră;
• Empty Clipboard şterge conţinutul memoriei tampon;
• History permite accesul la comenzi pentru manipularea comenzilor introduse
anterior în dreptul prompt-ului SCILAB;
• LaunchPad;
Meniul Preferences conţine comenzi pentru modificarea aspectului şi a modului de lucru
ale mediului SCILAB.
Meniul Cotrol are comenzi pentru execuţia şi oprirea programului curent.
Meniul Editor este, de fapt, o comandă care permite accesul la o nouă fereastră SciPad.
Meniul Help oferă utilizatorului posibilitatea documentării asupra mediului SCILAB.
Ferastra SciPad permite încărcarea, editarea şi salvarea unui (sub)program, care poate fi
lansat în execuţie din fereastra de comenzi (Exec...). Desigur, aceste operaţii se pot face şi în
ferestra de comenzi, dar în condiţii nu tocmai comode.
9.2. Obiectele mediului SCILAB
Elementele mediului de programare SCILAB sunt constantele, literalele, polinoamele şi
funcţiile raţionale, funcţiile matematice uzuale, funcţii SCILAB generale, matricele şi listele.
9.2.1. Constantele
Constantele disponibile în mediul SCILAB sunt prezentate în tabelul 8.1.
Constantele SCILAB
Tabelul 8.1
Contanta Notaţia SCILAB Tipul
π %pi real
e %e real
∞ %inf
i %i complex
true %t boolean
18
false %f boolean
9.2.2. Literalele
Literalele folosite în SCILAB sunt:
• Literale numerice reale
Numărul real 17,173 se poate scrie:
17.173 = 17173e-3 = 0.17173e+2
(simbolul exponentului poate fi e sau E).
• Literale numerice complexe
Numărul complex 7 – 3i se scrie:
7 – 3*%i
• Literale nenumerice
Sunt şiruri de caractere cuprinse intre apostrofuri sau ghilimele:
'i' sau ''i''
'sir' sau ''sir''
9.2.3. Polinoame şi funcţii raţionale
Un polinom poate fi definit cu ajutorul funcţiei poly:
[p=]poly(a, 'x'[,'semafor']
a = număr real, vector sau matrice;
x = simbol nedeterminată;
semafor = poate fi coeff sau roots (a doua este valoarea implicită).
• Dacă a este un număr real, se poate defini nedeterminata:
-->x=poly(0,'x')
x = x sau
-->x=poly(-3,'x')
x = x+3
apoi se poate introduce pe linia de comandă:
-->p=x^3–6*x^2+11*x–6
care, în funcţie de nedeterminata (x sau x+3) defineşte polinomul:
p=
–6+11*x-6x^2+x^3 respectiv
p=
2*x+3x^2+x^3
• Dacă a este un vector, elementele acestuia sunt considerate ca fiind fie coeficienţii,
fie rădăcinile polinomului, după cum semaforul are valoarea coeff sau roots.
De exemplu, declaraţiile:
-->a=[-6 11 -6 1];
-->p=poly(a,'x',’coeff’)
definesc polinomul:
p=
–6+11*x-6x^2+x^3
iar declaraţiile:
-->a=[1 2 3];
-->p=poly(a,'x')
definesc acelaşi polinom.
• Dacă a este o matrice pătrată, polinomul generat este valoarea determinantului
det(x*eye()–a). Funcţia eye() este matricea unitate. De exemplu, declaraţiile:
-->a=[1 2 -1;2 1 2;-1 1 2];
19
-->p=poly(a,'x')
generază polinomul:
p=
15-2*x-4x^2+x^3
acelaşi polinom poate fi generat cu declaraţiile:
-->a=[1 2 -1;2 1 2;-1 1 2];
-->x=poly(0,'x');
-->p=det(x*eye()-a)
• Dacă p şi q sunt două polinoame în nedeterminata x, atunci p/q defineşte o funcţie
raţională. De exemplu:
-->v1=[1 2 3];v2=[1 2 -1];p=poly(v1,'x');q=poly(v2,'x');
-->r=p/q
r =
-3 + x
------
1 + x
-->N=r('num')
N=
-3 + x
-->n=r('den')
n=
1 + x
20
length(arg) returnează lungimea matricei (vectorului) specificată ca argument
matrix(v,m,n) remodelează matricea v, parcurgând-o pe coloane, într-o matrice de mxn (liniixcoloane)
9.2.6. Matrici
În mediul SCILAB se pot folosi matrici care în matematică sunt notate astfel:
3 π 0 4 1
1 2
A= B = 2 7 1 9 C = 2 D = [1 3 5 7] E = [7 ]
3 4 5 8 6 3
3
Matricile A şi B sunt de forma (mxn) – matrici propriu-zise, C şi D sunt de forma (mx1) şi,
respectiv, (1xn) – vectori, iar matricea E este de forma (1x1) – scalar.
Notaţia SCILAB pentru o matrice este de forma a(i,j), iar referirea la un element al
matricei se face prin notaţia x=a(2,2), ceea ce înseamnă x=4.
Atenţie! SCILAB este case sensitive (variabila a este diferită de variabila A).
9.2.6.1. Definirea matricilor simple
Se poate face prin:
a) Introducerea explicită a listei elementelor într-unul din formatele:
a=[1 2;3 4] sau a=[1,2;3,4];
separatorul dintre elementele unei linii este spaţiul sau virgula (,)
separatorul dintre linii este simbolul punct şi virgulă (;)
ex:
-->x=[1,2,3,4]
x=
1 2 3 4
-->y=[1;2;3;4]
y=
1
2
3
4
b) Generarea prin instrucţiuni şi funcţii
ex:
-->clear;
-->k=3;b(k)=5 //instructiune de atribuire
b =
0.
0.
5.
-->t=1:2:7 //progresie aritmetica: prim-termen:pas:ultim-termen
t =
21
1. 3. 5. 7.
-->r=rand(2,3)*17 //functie de randomizare
r =
3.5925227 0.0037593 11.311479
12.852746 5.6155606 10.68266
22
-->v=[0 0 0];a=[1 2 3;4 5 6;7 8 9];
-->va=[v;a]
va =
0. 0. 0.
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->av=[a;v]
av =
1. 2. 3.
4. 5. 6.
7. 8. 9.
0. 0. 0.
• Adăugarea vectorului v ca prima sau ultima coloană a matricei pătrate a:
-->vap=[v;a']'
vap =
0. 1. 2. 3.
0. 4. 5. 6.
0. 7. 8. 9.
-->apv=[a';v]'
apv =
1. 2. 3. 0.
4. 5. 6. 0.
7. 8. 9. 0.
23
a=
- 1.3 1.7320508 1.2
-->a(5)=abs(a(1));
-->a
a =
- 1.3 1.7320508 1.2 0. 1.3
sau:
-->b=[1 2;3 4]
b =
1. 2.
3. 4.
-->b(2,4)=6;
-->b
b =
1. 2. 0. 0.
3. 4. 0. 6.
• Construirea unei matrice din matrici mici folosite ca elemente:
-->a1=[1 2;3 4];
-->a2=[5 6;7 8];
-->a=[a1;a2]
a =
1. 2.
3. 4.
5. 6.
7. 8.
-->b=[a1 a2]
b =
1. 2. 5. 6.
3. 4. 7. 8.
sau
-->a1=[1 2 3;4 0 0];
-->a2=[5 6;7 8];
-->a=[a1;a2]
!--error 6
inconsistent row/column dimensions
-->a=[a1 a2]
a =
1. 2. 3. 5. 6.
4. 0. 0. 7. 8.
Se observă că matricile a1 şi a2 au acelaşi număr de linii, dar număr de coloane diferit. De
aceea, încercarea de a le combina pe coloane (a=[a1;a2]) se termină cu eroare.
9.2.6.7. Extragerea unei submatrice dintr-o matrice
• Extragerea unei zone compacte
Definirea zonei cuprinsă între liniile li : lf şi coloanele ci : cf se face prin expresia de forma
a(li:lf,ci:cf). Pentru extragerea tuturor liniilor sau tuturor coloanelor se folosesc expresiile de forma
a(:,ci:cf), respectiv a(li:lf,:). Exemplu:
-->a=[0 0 0 0;0 1 2 3;0 4 5 6;0 7 8 9]
a =
0. 0. 0. 0.
0. 1. 2. 3.
0. 4. 5. 6.
0. 7. 8. 9.
-->b=a(2:3,2:4)
24
b =
1. 2. 3.
4. 5. 6.
-->c=a(:,1:3)
c =
0. 0. 0.
0. 1. 2.
0. 4. 5.
0. 7. 8.
-->d=a(2:4,:)
d =
0. 1. 2. 3.
0. 4. 5. 6.
0. 7. 8. 9.
• Extragerea unei zone necompacte
Precizarea zonei a(l,c) se face prin definirea a doi vectori care conţin liniile (l) şi, respectiv,
coloanele (c) matricei a, care vor fi extrase. Exemplu:
-->a=[0 0 0 0;0 1 2 3;0 4 5 6;0 7 8 9]
a =
0. 0. 0. 0.
0. 1. 2. 3.
0. 4. 5. 6.
0. 7. 8. 9.
-->l=[1 2 4];
-->c=[2 3];
-->b=a(l,c)
b =
0. 0.
1. 2.
7. 8.
• Extragerea ultimei linii sau a ultimei coloane
Pentru extragerea ultimei linii sau ultimei coloane din matricea a se folosesc expresii de
forma a($,:), respectiv, a(:,$).
9.2.7. Liste
O listă se defineşte printr-o expresie de forma:
list(e1, e2, ...., en)
în care ei sunt obiecte SCILAB. Exemplu:
-->l=list(17,%pi,'scilab',[1 2;3 4])
l =
l(1)
17.
l(2)
3.1415927
l(3)
scilab
l(4)
1. 2.
3. 4.
25
În ce priveşte editarea programelor, mediul SCILAB oferă două posibilităţi:
• Introducerea programului, linie cu linie, în fereastra de comenzi în dreptul
prompt-ului. Fiecare instrucţiune este executată şi rezultatul este afişat imediat ce s-a
terminat introducerea ei, moment marcat de apăsarea tastei Enter. Rezultatul execuţiei
nu este afişat dacă, înainte de Enter, se tastează punct şi virgulă (;).
• Deschiderea unei ferestre de editare SciPad permite introducerea programului
fără o execuţie imediată şi cu indentarea liniilor, pentru uşurarea urmăririi structurii
acestuia. După finalizare programul poate fi lansat în execuţie cu ajutorul comenzii
Load into Scilab din meniul Execute (Ctrl+l).
Comentariul trebuie precedat de două simboluri slash (//) consecutive şi poate să apară în
continuarea unei instrucţiuni sau să ocupe singur o linie a programului.
9.3.2. Instrucţiunea de atribuire
variabilă = expresie
9.3.3. Instrucţiuni condiţionale
9.3.3.1. Operatori logici şi operatori relaţionali
Pentru exprimarea condiţiilor care însoţesc instrucţiunile condiţionale se folosesc operatorii
logici şi operatorii relaţionali, prezentaţi în tabelul 8.5
Operatori logici şi operatori relaţionali
Tabelul 8.5
Operatori logici Operatori relaţionali
Simbolul Semnificaţia Simbolul Semnificaţia
& şi == =
| sau ~= ≠
~ nu <= ≤
< <
>= ≥
> >
9.3.3.2. Instrucţiunea if
if condiţie-1 [then]
instrucţiuni-1
[[elseif condiţie-2 [then]
instrucţiuni-2
...
elseif condiţie-n [then]
instrucţiuni-n]
else
instrucţiuni-n+1]
end
Cuvântul cheie then poate fi înlocuit cu Enter sau virgulă (,). Dacă este folosit, then trebuie
să apară pe aceaşi linie cu if sau elseif. Cuvântul cheie elseif poate fi despărţit în două cuvinte –
else şi if – cu condiţia ca al doilea să fie scris pe linia următoare. Exemple:
// Instructiunea IF - var.1
a=0;
26
b=rand()
if b<=.5
a=1
end;
if b>.5
a=2
end;
// Instructiunea IF - var.2
a=0;
if b<=.5
a=1
else
a=2
end;
// Instructiunea IF – cu ELSEIF
if b<.2
a=1
elseif b<.4
a=2
elseif b<.6
a=3
elseif b<.8
a=4
else
a=5
end;
b =
0.2113249
a =
1.
a =
1.
a =
2.
În programul precedent funcţia rand() generează aleator un număr subunitar strict pozitiv.
9.3.3.3. Instrucţiunile select ... case
select expresie
case expresie-1 [then]
instrucţiuni-1
[[case expresie-2 [then]
instrucţiuni-2
...
case expresie-n [then]
instrucţiuni-n]
else
instrucţiuni-n+1]
end
Cuvântul cheie then poate fi înlocuit cu Enter sau virgulă (,). Dacă este folosit, then trebuie
să apară pe aceaşi linie cu case. Exemplu:
/ Instructiunile SELECT... CASE
27
clear;clc
n=round(10*rand(1,1))
select n
case 0 then
disp(0,'n=')
case 1 then
disp(1,'n=')
case 2 then
disp(2,'n=')
case 3 then
disp(3,'n=')
case 4 then
disp(4,'n=')
case 5 then
disp(5,'n=')
case 6 then
disp(6,'n=')
case 7 then
disp(7,'n=')
case 8 then
disp(8,'n=')
else
disp(9,'n=')
end
n =
9.
n=
9.
În programul precedent expresia round(10*rand(1,1)) generează aleatoriu a un număr
întreg cuprins în intervalul [1,9]. Cuvântul cheie else putea fi înlocuit cu expresia case 9.
9.3.4. Instrucţiuni de ciclare
9.3.4.1. Instrucţiunea for
for variabilă=expresie [do]
instrucţiune, instrucţiune, ...
end
În mod obişnuit expresie este de forma n1:pas:n2 sau n1:n2, unde n1,n2 sunt variabile sau
constante care definesc valorile iniţială, respectiv, finală pentru variabilă, iar pas reprezintă
valoarea cu care este incrementată variabilă la fiecare reluare a ciclului. Dacă lipseşte din
expresie, pas are valoarea implicită 1.
Cuvântul cheie do poate fi înlocuit cu Enter sau virgulă (,). Dacă este folosit, do trebuie să
apară pe aceaşi linie cu for. Virgula este obligatorie pentru separarea instrucţiunilor scrise pe
aceeaşi linie (vezi Ex.3). Exemple:
// Instructiunea FOR
clear;clc
n=3;
// Ex.1
for i = 1:n do
for j = 1:n do
a(i,j) = 1/(i+j-1);
end;
end
28
disp(a,'Ex.1: a=')
// Ex.2
for j = 2:n-1,
a(j,j) = j;
end;
disp(a,'Ex.2: a=')
// Ex.3
disp('Ex.3: v=')
for v=a, write(6,v), end
// Ex.4
disp('Ex.4')
for l=list(1,2,'example') do
l,
end
Ex.1: a=
1. 0.5 0.3333333
0.5 0.3333333 0.25
0.3333333 0.25 0.2
Ex.2: a=
1. 0.5 0.3333333
0.5 2. 0.25
0.3333333 0.25 0.2
Ex.3: v=
1.0000000000D+00
5.0000000000D-01
3.3333333333D-01
5.0000000000D-01
2.0000000000D+00
2.5000000000D-01
3.3333333333D-01
2.5000000000D-01
2.0000000000D-01
Ex.4
l =
1.
l =
2.
l =
example
29
while i<=5
j=j+1;
n=round(10*rand());
if n<=5
i=i+1;
end
end
disp(i)
disp('din')
disp(j)
6.
din
9.
numere n<=5
Instrucţiunea break realizează un salt necondiţionat la prima instrucţiune, aflată după
instrucţiunea end, care încheie instrucţiunea de ciclare.
9.4. Funcţii (subprograme) în SCILAB
9.4.1. Funcţii definite în linia de comandă
deff ('[y1, ... yn]=f(x1, ... xm)',['y1=expresie1', ... , 'yn=expresien',])
O funcţie definită în linia de comandă poate fi salvată prin comanda:
save('cale\fişier.bin',f)
Exemple:
// Functia DEFF
clear;clc
// Ex.1
disp('Ex.1')
deff('[y]=f(x)','y=2*x^2-7*x+5');
x=[1:1:9];
disp(x,'x=')
disp('f:');
f
// Ex.2
disp('Ex.2')
deff('[z]=g(u,v)','z=u+v')
deff('[z]=h(u,v)',['a=3*u+1'; 'z=4*a+u'])
u=[1 2 3 4];
v=[1 1 1 1];
disp(u,'u=',v,'v=')
disp('g:')
g
disp('h:')
h
Ex.1
x=
1. 2. 3. 4. 5. 6. 7. 8. 9.
f:
ans =
0. - 1. 2. 9. 20. 35. 54. 77. 104.
Ex.2
v=
1. 1. 1. 1.
u=
30
1. 2. 3. 4.
g:
ans =
2. 3. 4. 5.
h:
ans =
17. 30. 43. 56.
31
9.5.2. Funcţia fplot2d
fplot2d(x, f) unde
x este un şir de numere reale;
f este o funcţie Scilab
iar rezultatul este graficul funcţiei f construit pe baza valorilor ei în punctele lui x.
Exemple:
// Functia FPLOT2D
clear;clc
x=[0:0.1:2*%pi]’;
deff("[y]=f(x)","y=sin(x)+cos(x)")
x=[0:0.1:10]*%pi/10;
fplot2d(x,f)
32