C1

17
 I. Prezentarea generală a programului Scilab CURSUL 1. PREZENTAREA GENERALĂ A PROGRAMULUI SCILAB I. 1. Ce este Scilab-ul? Structural, SCILAB-ul este, cu mici modific ări, o variantă gratuită a MATLAB-ului având versiuni pentru Unix şi pentru Windows. La adresa www.scilab.org se găseşte documentaţie gratuită pe INTERNET referitoare la Scilab precum şi programul corespunzător. Pentru început, Scilab-ul se poate folosi pentru efectuarea calculelor elementare, operaţiilor cu vectori şi matrice (cu elemente reale şi complexe) şi reprezentărilor grafice de curbe şi suprafeţe. De asemenea, Scilabul poate fi un mediu agreabil de realizare a calculelor numerice pentru că dispune de o serie de metode uzuale din acest domeniu, de exemplu: - rezolvarea sistemelor liniare, - calculul valorilor şi vectorilor proprii, - rezolvarea ecuaţiilor diferenţiale, - rezolvarea sistemelor neliniare, - noţiuni de bază din algebra liniar ă, - algoritmi de optimizare Programarea în Scilab se efectuează destul de uşor, pentru anumite secvenţe mai complicate se pot folosi subprograme realizate  în C sau fortran (77). Scilab-ul include aplicaţii specifice, numite TOOLBOX-uri - colecţii extinse de funcţii SCILAB care dezvolt ă mediul de programare de la o versiune la alta, pentru a rezolva probleme din domenii variate.

Transcript of C1

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 1/17

I. Prezentarea generală a programului Scilab

CURSUL 1.

PREZENTAREA GENERALĂ A PROGRAMULUI SCILAB

I. 1. Ce este Scilab-ul?

Structural, SCILAB-ul este, cu mici modificări, o variantă gratuită 

a MATLAB-ului având versiuni pentru Unix şi pentru Windows.

La adresa www.scilab.org se găse

şte documenta

ţie gratuit

ăpe

INTERNET referitoare la Scilab precum şi programul corespunzător.

Pentru început, Scilab-ul se poate folosi pentru efectuarea

calculelor elementare, operaţiilor cu vectori şi matrice (cu elemente

reale şi complexe) şi reprezentărilor grafice de curbe şi suprafeţe. De

asemenea, Scilabul poate fi un mediu agreabil de realizare a calculelor 

numerice pentru că dispune de o serie de metode uzuale din acest

domeniu, de exemplu:

- rezolvarea sistemelor liniare,- calculul valorilor şi vectorilor proprii,

- rezolvarea ecuaţiilor diferenţiale,

- rezolvarea sistemelor neliniare,

- noţiuni de bază din algebra liniar ă,

- algoritmi de optimizare

Programarea în Scilab se efectuează destul de uşor, pentru

anumite secvenţe mai complicate se pot folosi subprograme realizate  în C sau fortran (77). Scilab-ul include aplicaţii specifice, numite

TOOLBOX-uri - colecţii extinse de funcţii SCILAB care dezvoltă mediul

de programare de la o versiune la alta, pentru a rezolva probleme din

domenii variate.

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 2/17

I. Prezentarea generală a programului Scilab

I. 2. Mediul Scilab

Mediul Scilab lucrează cu mai multe tipuri de ferestre: o fereastr ă de comenzi, o fereastr ă pentru fişiere sau grafice, o fereastr ă pentru

‘help’. Când se lansează în execuţie se deschide implicit fereastra de

comandă care, conţine meniurile File, Edit, Preferences, Control,

Editor, Applications şi ? (help) şi o bar ă de butoane

unde

Buton SemnificaţieDeschide o nouă fereastr ă de

comandă 

Deschide Scipad-ul (editorul Scilab-

ului)

Deschide un fişier 

Copiează 

Lipeşte

Schimbă directorul

Consolă Scilab

 Alege font

 În fereastra de comenzi, instrucţiunile se scriu pe prompterul -->

şi se execută apăsând Enter; instrucţiunile se execută de la stanga ladreapta şi de sus în jos în ordinea în care s-au scris.

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 3/17

I. Prezentarea generală a programului Scilab

Meniul File conţine:

unde, un fişier specificat este executat cu Exec şi încărcat cu Load.

  Activat meniul Editor  face să se dechidă editorul Scilab-ului în

care se pot scrie programe care se pot executa folosind Execute/Loadinto Scilab.

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 4/17

I. Prezentarea generală a programului Scilab

Folosind Scicos din Applications se pot realiza diverse

diagrame şi simulări în fereastra care se deschide.

Pentru realizarea diagramelor se pot alege obiecte folosind opţiunea

Palettes din Edit (sau clic dreapta cu mouse-ul), de exemplu:

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 5/17

I. Prezentarea generală a programului Scilab

Se pot introduce instrucţiuni cu ajutorul ferestrei de dialog obţinute prin

accesarea opţiunii Context (clic dreapta cu mouse-ul).

 Într-o fereastr ă asemănătoare se pot edita şi personaliza graficele.

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 6/17

I. Prezentarea generală a programului Scilab

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 7/17

I. Prezentarea generală a programului Scilab

I. 3. Noţiuni Scilab

Pachet de programe de înaltă performanţă, dedicat calcului numeric

şi reprezentărilor grafice în domeniul ştiinţei şi ingineriei, precum şi

simulărilor stocastice. Matricea este elementul de baza; cu aceasta se pot

rezolva probleme f ăr ă a fi necesar ă scrierea unui program într-un limbaj de

programare.

Lucrează cu mai multe tipuri de ferestre: o fereastr ă de comenzi, o

fereastr ă pentru fişiere sau grafice, o fereastr ă pentru ‘help’. Include

aplicaţii specifice, numite TOOLBOX-uri; colecţii extinse de funcţii SCILAB

care dezvoltă mediul de programare de la o versiune la alta, pentru a

rezolva probleme din domenii variate. Structural, SCILAB-ul este (cu mici

modificări!) o variantă gratuită a MATLAB-ului.

Tabel 1. Funcţii SCILAB de interes general:

Denumire funcţie Acţiune funcţieexit, quit Comanda pentru ieşirea din SCILABhelp Furnizează informaţii “on-line” despre

SCILABwho Listează variabilele curentecd Schimbă directorul de lucrudir Afişează lista directorului

clc Şterge fereastra de comenzimtlb_save Salvează variabilele curenteerror Afişează mesaje de eroareexist Verifică dăcă o variabilă sau un fişier există disp Afişează o matrice sau un textclear  Şterge variabile şi funcţiisize Returnează dimensiunile unei matriceapropos Caută în ‘help’ un cuvânt specificat

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 8/17

I. Prezentarea generală a programului Scilab

Manevrarea vectorilor şi matricelor Definirea matricelor :

- Introducerea explicită a listei de elemente;- Generarea prin instrucţiuni şi funcţii;- Crearea de fişiere script;

- Încărcarea din fişiere de date externe.Introducerea explicit ă a unei matrice:

- Elementele unei linii sunt separate prin virgulă sau spaţiu;- Lista elementelor matricei trebuie încadrată între

paranteze drepte;- Liniile se separ ă prin punct şi virgulă (‘;’).

Exemplu pentru definirea unei matrice: comanda

-->A=[1 1 1;2 4 8;3 9 27] are drept efect

  A = ! 1. 1. 1. ! ! 2. 4. 8. ! ! 3. 9. 27. ! 

Exemplu pentru definirea unui vector :

-->b=[ 2 10 44 190] b = ! 2. 10. 44. 190. ! 

Tabel 2. Funcţii pentru construirea unui vector sau unei matrice tip

Funcţia Semnificaţia

Exemplu

eye Matriceaunitate

I=eye(4,4)I =! 1. 0. 0. !! 0. 1. 0. !! 0. 0. 1. !

diag Matricediagonală  B=diag(b)B =! 2. 0. 0. 0. !! 0. 10. 0. 0. !! 0. 0. 44. 0. !! 0. 0. 0. 190. !

zeros Matrice cutoateelementele

0

-->C=zeros(3,2)C =

! 0. 0. !

! 0. 0. !! 0. 0. !

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 9/17

I. Prezentarea generală a programului Scilab

ones Matrice cutoateelementele1

-->D=ones(2,3)D =

! 1. 1. 1. !! 1. 1. 1. !

rand Matrice cuelementealeatoare

-->M=rand(3,4)M =! 0.2113249 0.3303271 0.84974520.0683740 !! 0.7560439 0.6653811 0.68573100.5608486 !! 0.0002211 0.6283918 0.87821650.6623569 !

triu Partea

triunghiular ă superioar ă aunei matrice

-->U=triu(D)

U =! 1. 1. 1. !! 0. 1. 1. !! 0. 0. 1. !

tril Parteatriunghiular ă inferioar ă aunei matrice

-->V=tril(D)V =

! 1. 0. 0. !! 1. 1. 0. !! 1. 1. 1. !

linspace Vector cuincrementar e constantă   între douavalori

-->v=linspace(0,1,5)v =

! 0. 0.25 0.5 0.75 1. !Observaţie: acelas lucru se obtine daca-->x=0:0.25:1x =

! 0. 0.25 0.5 0.75 1. !Pentru

-->y=1:5se obtine

y =! 1. 2. 3. 4. 5. !

plot Reprezintă grafic ocurba în 2D

-->x=linspace(0,2*%pi,101);-->y=exp(x).*sin(4*x);-->plot(x,y,'x','y','y=exp(x)*sin(4x)')

Observaţie: Instrucţiunea plot va desena într-o alta fereastr ă graficul

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 10/17

I. Prezentarea generală a programului Scilab

Tabel 3. Funcţii uzuale ale SCILAB-ului: 

Apelareafuncţiei

Semnificaţia matematică 

sin(x)sinc(x)

cos(x)tan(x)cotg(x)sinh(x)cosh(x)tanh(x)asin(x)

acos(x)atan(x)exp(x)log(x)log10(x)floor(x)ceil(x)Re(z)Im(z)

lenght(v)size(a)max(v)min(v)sqrt(x)

sin x

 x

 x)sin( 

cos xtg xctg(x)sh xch xth xarcsin x

arccos xarctg xex

ln(x)lg x[x][x]+1Re zIm z

Numărul elem. vectorului vDimensiunea matricei aCel mai mare elem. al vect. vCel mai mic elem. al vect. v x  

Tabel 4. Operatorii aritmetici SCILAB:

Operaţia Scalari Matrice Tablouri

  Adunare + + +

Scădere - - - Înmulţire * * .* Împăr ţire la stânga \ \ .\ Împăr ţire la dreapta / / ./Ridicare la putere ^ ^ .^Transpunere ‘ .’

Tabel 5. Operatorii relaţionali

Operator Semnifica

ţie

< Mai mic> Mai mare

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 11/17

I. Prezentarea generală a programului Scilab

Operator Semnificaţie<= Mai mic sau egal>= Mai mare sau egal== Identic

~= Diferit

Tabel 6. Operatorii logici

Operator Simbol SCILAB Prioritatea

NU ~ 1ŞI & 2

SAU | 3

Programare în SCILAB

SCILAB-ul poate lucra în urmatoarele moduri:

- În modul linie de comanda; fiecare linie este prelucrată imediat şi

rezultatele sunt afişate;

- Cu programe conţinute în fişiere. Un fişier constă dintr-o succesiune de

instrucţiuni SCILAB, cu posibilitatea apelării altor fişiere precum şi a

apelării recursive. Un program SCILAB poate fi scris sub forma

fişierelor:

-  Script: conţine o secventă de comenzi SCILAB; se execută prin apelarea numelui fişierului: exec(‘nume_fisier’)Funcţie:prima linie conţine cuvântul function; poate lucra cu argumente.Se pot defini mai multe funcţii în acelaşi fişier.

Tabel 7. Instrucţiuni şi funcţii de control

Instrucţiune Semnificaţiaif Instrucţiune pentru execuţia condiţională else Instrucţiune asociată cu if 

elseif Instrucţiune asociată cu if 

case Instrucţiune folosită pentru a face o alegerefor Instrucţiune pentru crearea ciclurilor cu număr specificat

de paşiwhile Instrucţiune pentru crearea ciclurilor cu condiţie logică break Instrucţiune pentru terminarea for ţată într-un ciclu

return Returnează execuţia la funcţia precizată error Instrucţiune pentru afişarea unui mesaj de eroareend Instrucţiune pentru încheierea ciclurilor for, while şi if  

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 12/17

I. Prezentarea generală a programului Scilab

Tabel 8. Sintaxa instrucţiunilor SCILAB

Instrucţiune Sintaxă 

If if expresie_logic ă grup instrucţiuni endElse if expresie_logic ă grup instrucţiuni A

else grup instrucţiuni B endElseif if  expresie_logic ă _1 grup instrucţiuni Aelseif expresie_logic ă _2  grup instrucţiuni Bend

Case select expr_0case expr_1 Instr_1 …case expr_n Instr_n else Instr end

For for index = expresie \\ expresie = iniţial: pas:final

grup_instrucţiuniendWhile while expresie

grup_instrucţiuniend

Exemple de fişiere script

Definirea şi reprezentarea grafic ă a func ţ iilor cu acolad ă: cu ajutorul

Scipad-ului (editorul Scilab-ului) se editează un fişier script care sesalvează, de exemplu, Functie.sce şi conţine următoarele instrucţiuni:

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)

 În fereastra de comandă se execută fişierul folosind instrucţiunea:

-->exec('functie.sce')şi se va obţine într-o nouă fereastr ă graficul funcţiei:

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 13/17

I. Prezentarea generală a programului Scilab

f x( ) x sin x( )+ 4− x≤ 0<if 

sin x( ) 0 x≤ π≤if 

3x

3π−( ) otherwise

:=

 

-4 -3 -2 -1 0 1 2 3 4-4

-3

-2

-1

0

Observaţie: Fişierul se poate executa direct, în editorul Scilab-ului folosind

din meniul ‘Execute’ opţiunea ‘Load into Scilab’.

Calculul limitei şirurilor definite recurent : să se calculeze limita şirului

1,2

210,lim

2

11 ≥

+

=+∞

 n c

 c

 c si cunde c n

 n n n

 n .

Se scrie programul în fişierul 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 Se lansează în execuţie în fereastra de comandă scriind:

-->exec("SirRecurent.sce")şi se obtine rezultatul:

c = 1.4142136 

Fi şierele func ţ ie sunt utilizate pentru crearea unor noi funcţii SCILAB.

Forma generală a unui fişier funcţie este:function [parametri_ieşire] = nume_func ţ ie (parametri_intrare)

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 14/17

I. Prezentarea generală a programului Scilab

…..instruc ţ iuni de definire a func ţ iei….endfunction

unde:

function: cuvânt cheie care declar ă fişierul ca fişier funcţie (obligatoriu);nume_functie: numele funcţiei, adică numele sub care se salvează fişierul,f ăr ă extensie; nu poate fi identic cu cel al unui fişier existent;

 parametri_iesire: parametrii de ieşire trebuie separaţi cu virgulă şi cuprinsi între paranteze drepte. Dacă funcţia nu are parametri de ieşire parantezeledrepte şi semnul egal (=) nu mai au sens;

 parametri_intrare: parametrii de intrare trebuie separaţi cu virgulă  şicuprinsi între paranteze rotunde. Daca funcţia nu are parametri de intrareparantezele rotunde nu mai au sens.endfunction: instrucţiunea de terminare a unei funcţii.

Observaţii:

Un fişier de tip funcţie poate să contină mai multe funcţii. Pentru utilizarea

unei funcţii trebuie folosită, mai intâi, comanda:

getf(“NumeFunctie.sci”) 

Spre deosebire de fişierele script  care au extensia ‘sce’, fişierele de tip

funcţie au extensia ‘sci ’.

Exemplu: Calculul factorialului 

Se vor defini în acelaşi fişier (functii.sci ) două funcţii care calculează 

factorialul unui număr dat; prima nu verifică dacă argumentul este întreg

pozitiv, a doua funcţie face acest lucru înainte de a face calculul

function [f]=factorial(n)

f=prod(1:n)endfunction

function [f]=factorial1(n) //dac ă n nu este întreg şi pozitiv se transmite un mesaj de eroare, //apoi se transformă numărul într-un număr întreg pozitiv 

if (n-floor(n)~=0)|n<0 thenn=floor(abs(n))warning('argumentul nu este întreg pozitiv; se va calcula

'+sprintf("%d",n)+"!")end f=prod(1:n)

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 15/17

I. Prezentarea generală a programului Scilab

endfunction În fereastra de comandă se vor folosi aceste funcţii astfel:

-->getf('functii.sci')-->factorial(5)

ans = 120.-->factorial(0.5)ans = 1.

-->factorial(-0.5)ans = 1.

Dacă argumentul nu este întreg şi pozitiv funcţia factorial întoarce un

rezultat oarecare, 1. Dacă vom folosi funcţia factorial1 se va obţine:

-->factorial1(5)ans = 120.

-->factorial1(0.5)WARNING:argumentul nu este întreg pozitiv; se va calcula 0! ans = 1.

-->factorial1(-5)WARNING:argumentul nu este întreg pozitiv; se va calcula 5! 

ans = 120.

Recursivitate: o funcţie se poate apela pe ea însăşi (exemplu: calculul

factorialului recursiv)

function [f]=fact(n)if n<=1 thenf=1else

f=n*fact(n-1)end endfunction

Observaţie: O funcţie 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)’)

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 16/17

I. Prezentarea generală a programului Scilab

Reprezentări grafice

Exemplul 1: Reprezentarea color, în plan a liniilor de contur ale unei

suprafeţe folosind Sgrayplot :

 x=-10:10; y=-10:10;m =rand(21,21);Sgrayplot(x,y,m,"111",[-20,-20,20,20])t=-%pi:0.1:%pi; m=sin(t)'*cos(t);clf()Sgrayplot(t,t,m)

-3 -2 -1 0 1 2 3

-3

-2

-1

0

1

2

3

+

 

Exemplul 2: Reprezentarea liniilor de contur în plan a unei suprafeţe

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])

0.0 2.2 4.4 6.6 8.8 11.00.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.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.66

0.66

0.66

0.66

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

 

5/14/2018 C1 - slidepdf.com

http://slidepdf.com/reader/full/c15572000849795991699ea97a 17/17

I. Prezentarea generală a programului Scilab

Exemplul 3: Reprezentarea în 3D a suprafeţei: z=sin(x)*cos(y)

t=%pi*(-10:10)/10;deff('[z]=surf(x,y)','z=sin(x)*cos(y)');rect=[-%pi,%pi,-%pi,%pi,-5,1];

z=feval(t,t,surf); plot3d(t,t,z,35,45,'X@Y@Z',[2,1,3],rect);title=['plot3d’];

plot3d

-5

-4

-3

-2

-1

0

1

Z

-4

-3

-2

-1

0

1

2

3

4

 

-4-3

-2-1

01

23

4

 

Citirea / Scrierea din/în fişier în Scilab

Citire:read (citirea se face în matrice)

[x]=read(file-desc,m,n,[format]) sau [x]=read(file-desc,m,n,k,format)file-desc: şir de caractere specificând numele fişierului sau valoare

 întreagă specificând unitatea logică m, n: numere întregi reprezentând dimensiunile matricei. Dacă nu sedă numărul de linii, se citeşte tot fişierulformat: şir de caractere ce specifică un format ”Fortran”k: întreg sau vector de întregi

Scriere în fi şier: write(fisier,text_de_scris)

 Alte instruc ţ iuni pentru fi şiere:

Deschidere fişier: [unit,[err]]=file(‘open’,nume_fisier,[status]) undestatus poate fi “new” (pentru fişier nou), “old” (pentru fişier deja existent),“unknown” (când nu se ştie exact). unit este un ‘identificator’ pentru fişier,iar err conţine posibilele erori.

 Închidere fişier: file(‘close’, unit) Pozitionare la sfâr şit de fişier: file(‘last’,unit) 

Pozitionare la început de fişier: file(‘rewind’,unit) Pentru mai multe detalii să se apeleze apropos comanda.