C1
-
Upload
alexandru-vaduva -
Category
Documents
-
view
66 -
download
0
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
1
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.