Documente Academic
Documente Profesional
Documente Cultură
CURS 1
PREZENTARE GENERALĂ
Domenii de utilizare:
❑ Matematică și calcul numeric
❑ Dezvoltarea algoritmilor
❑ Modelarea, simularea și testarea prototipurilor
❑ Analiza și vizualizarea datelor
❑ Grafică inginerească și din științele aplicate
❑ Dezvoltarea de aplicații, inclusiv GUI (Graphical User Interface)
➢ MATLAB=sistem interactiv care are ca element de bază tabloul, matricea, ceea ce permite
rezolvarea problemelor de calcul numeric
➢ Numele MATLAB provine de la Matrix laboratory. Firma producătoare este The MathWorks,
Inc., SUA
➢ MATLAB-ul a evoluat:
❑ în mediul universitar, unde este pachetul standard pentru cursurile introductive și
avansate de matematică, inginerie și științe
❑ în mediul economic, unde este utilizat pentru cercetarea de înalt randament, dezvoltare
și producție
➢ MATLAB-ul permite dezvoltarea unei familii de aplicații sub forma toolbox-urilor. Aceste
toolbox-uri permit învățarea și aplicarea tehnologiilor specializate din diverse domenii. Sunt
disponibile toolbox-uri pentru diverse domenii
Software de analiza numerica si simbolica 2
Limbajul MATLAB: Reprezintă un limbaj de nivel înalt de tip matrice/tablou cu instrucțiuni de control
al salturilor, funcții, structuri de date, intrări/ieșiri și cu proprietăți de programare orientată pe
obiecte1. Facilitățile de programare sunt organizate în 6 directoare:
ops
Operators and special characters (Operatori și caractere
speciale)
Lang
Programming language constructs (Construcția limbajului de
programare)
Strfun Character strings (Șiruri de caractere)
Iofun File input/output (Fișierul de intrare/ieșire)
Timefun Time and dates (Oră și date)
Datatypes Data types and structures (Tipuri de date și structuri)
Mediul de lucru MATLAB: Reprezintă un set de facilități care permit manevrarea variabilelor în spațiul
de lucru, importul și exportul de date, dezvoltarea, manipularea, editarea și depanarea fișierelor
MATLAB (.m) și a aplicațiilor MATLAB. Aceste facilități sunt organizate în directorul:
1
Programarea orientată pe obiect este unul din cei mai importanți paşi făcuți în evoluția limbajelor de programare spre o
mai puternică abstractizare în implementarea programelor. Ea a apărut din necesitatea exprimării problemei într-un mod
mai natural ființei umane. Astfel, unitățile care alcătuiesc un program se apropie mai mult de modul nostru de a gândi decât
modul de lucru al calculatorului.
Software de analiza numerica si simbolica 3
Handle Graphics®: Reprezintă sistemul grafic al MATLAB-ului. Cuprinde comenzi de înalt nivel pentru
vizualizarea datelor bi și tridimensional, procesarea imaginilor, animație, prezentări de grafice.
Permite de asemenea utilizarea unor comenzi pentru crearea unor interfețe grafice GUI. Funcțiile
grafice sunt organizate în 5 directoare:
elmat
Elementary matrices and matrix manipulation (Matrice
elementare și manipularea lor)
Elfun
Elementary math functions (Funcții matematice
elementare)
Specfun
Specialized math functions (Funcții matematice
specializate)
Matfun
Matrix functions – numerical linear algebra (Funcții de
matrice - algebră liniară numerică)
Datafun
Data analysis and Fourier transforms (Analiza datelor și
transformări Fourier)
Polyfun Interpolation and polynomials (Interpolare si polinoame)
Funfun
Function functions and ODE solvers (Funcțiile de funcții și
de rezolvare a ecuațiilor diferențiale ordinare)
Sparfun Sparse matrices (Matrice rare)
Interfața de aplicații program a MATLAB-ului (API) este o bibliotecă care permite scrierea de
programe în C sau Fortran care interacționează cu MATLAB-ul. Include facilități pentru apelarea
rutinelor din MATLAB, apelarea MATLAB-ului ca mașină de calcul, scrierea și citirea fișierelor de tip
.MAT.
Software de analiza numerica si simbolica 4
Pachetul SIMULINK
❑ SIMULINK® este un pachet software atașat MATLAB-ului și reprezintă un sistem interactiv
pentru simularea dinamicii sistemelor. Este conceput sub forma unei interfețe grafice care
permite crearea unui model prin “trasarea” schemei bloc a sistemului și apoi simularea
dinamicii sistemului
❑ SIMULINK poate lucra cu sisteme liniare, neliniare, continue, discrete, multivariabile etc.
❑ SIMULINK beneficiază de așa-numitele Blockset-uri, care sunt de fapt biblioteci
suplimentare ce conțin aplicații specializate din domenii cum ar fi: comunicații, procesarea
semnalelor etc.
❑ Real-time Workshop® este un program foarte important care permite generarea unui cod C
pentru schemele bloc create în SIMULINK și prin urmare permite rularea de aplicații în timp
real de o mare diversitate
Toolbox-urile MATLAB
❑ Toolbox-urile reprezintă o familie de aplicații care permit învățarea și aplicarea
tehnologiilor specializate din diverse domenii. Aceste toolbox-uri sunt colecții de funcții
MATLAB (functions) (M-files) care extind mediul MATLAB pentru rezolvarea unor clase
particulare de probleme
Câteva din cele mai utilizate aplicații sunt prezentate în figura următoare.
Software de analiza numerica si simbolica 5
Software de analiza numerica si simbolica 6
1. Expresii fundamentale
Matlab-ul lucrează cu expresii matematice ca și celelalte limbaje de programare, dar spre deosebire
de majoritatea acestor limbaje, aceste expresii implică lucrul cu tablouri/matrice la scară largă.
Expresiile sunt alcătuite cu ajutorul următoarelor tipuri:
➢ Variabile
➢ Numere
➢ Operatori
➢ Funcții
Variabile
➢ Matlab-ul nu necesită declararea dimensiunii variabilelor, deoarece la întâlnirea unui nou nume
de variabilă generează automat variabila respectivă și alocă spațiul necesar de memorie
➢ Numele unei variabile este o literă, urmată de un număr oricât de mare de litere, cifre sau
simboluri. Din acest număr “oricât de mare” sunt oprite primele 31 de caractere
➢ Matlab-ul este case sensitive - face distincție între literele mici și cele mari
Exemplu:
a = 30
creează o matrice 1x1 cu numele a și stochează valoarea acesteia, 30, într-o singură locație
corespunzătoare singurului element al matricei.
Numere
➢ MATLAB-ul utilizează notația zecimală, cu punct zecimal opțional și cu semn + sau -. Se
utilizează și notația științifică cu litera e pentru a specifica o putere a lui 10. Reprezentarea
numerelor imaginare este realizată cu litera i sau j ca sufix
Exemple:
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
➢ Toate numerele sunt stocate intern utilizând formatul long specificat de standardul IEEE2 în
virgulă mobilă
2
Organizația internațională Institute of Electrical and Electronics Engineers
Software de analiza numerica si simbolica 7
Operatori
➢ Expresiile utilizează operatori aritmetici uzuali:
+ Adunare
- Scădere
* Multiplicare
/ Împărțire la dreapta
\ Împărțire la stânga
^ Ridicarea la o putere
' Transpusa complex conjugată
( ) Operatorul de specificare a ordinii de evaluare
Funcții
➢ MATLAB-ul furnizează un mare număr de funcții matematice elementare standard (abs,
sqrt, exp, sin …)
➢ Există și funcții matematice avansate (funcții Bessel, gama etc.), multe dintre acestea
acceptând argumente complexe
➢ Pentru vizualizarea funcțiilor elementare se poate tasta:
help elfun
➢ O parte din funcții (cum ar fi sqrt, sin) sunt de tip built-in, adică sunt o parte a nucleului
MATLAB, au o mare eficiență, dar detaliile constructive nu sunt accesibile utilizatorului
➢ Alte funcții sunt implementate ca fișiere MATLAB (M-files) și pot fi chiar modificate
➢ Câteva funcții furnizează valorile unor constante universale:
pi 3.141592653589793
i Imaginary unit, -1
j Same as i
eps Floating point relative precision 2.220446049250313e-016
realmin
The smallest positive normalized single precision floating point number on
your computer: 2^(-1022), aprox. 2.225073858507201e-308
realmax
The largest single precision floating point number representable on your
computer: 2^1024, aprox. 1.797693134862316e+308
Inf Infinity
NaN Not-a-number
➢ Atenție: numele funcțiilor nu sunt rezervate și deci este posibilă suprascrierea lor !!!
Software de analiza numerica si simbolica 8
Exemplu:
eps = 1.e-6
Expresii
➢ Exemple de expresii și rezultatele corespunzătoare ale evaluării acestor expresii:
rho = (1+sqrt(5))/2
rho =
1.6180
a = abs(3+4i)
a =
5
z = sqrt(besselk(4/3,rho-i))
z =
0.3730 + 0.3214i
nr_foarte_mare = exp(log(realmax))
nr_foarte_mare =
1.7977e+308
➢ Pentru aflarea tuturor informațiilor utile despre o comandă sau o funcție se tastează help
urmat de numele comenzii sau funcției respective
➢ Pachetul MATLAB dispune de asemenea de informații complete despre utilizare sub forma unei
documentații tip .pdf
➢ În cazuri particulare se poate apela la INTERNET, existând o legătură la pagina Web a firmei
producătoare
➢ Alte comenzi utile pentru aflarea de informații sunt: helpwin, lookfor, help help
Exemple sugestive de utilizare a comenzii help:
help sin
SIN Sine of argument in radians.
SIN(X) is the sine of the elements of X.
Overloaded methods:
codistributed/sin
help exp
EXP Exponential.
EXP(X) is the exponential of the elements of X, e to the X.
For complex Z=X+i*Y, EXP(Z) = EXP(X)*(COS(Y)+i*SIN(Y)).
Overloaded methods:
lti/exp
codistributed/exp
fints/exp
xregcovariance/exp
help plot
PLOT Linear plot.
PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix,
then the vector is plotted versus the rows or columns of the matrix,
whichever line up. If X is a scalar and Y is a vector, disconnected
line objects are created and plotted as discrete points vertically at
X.
Various line types, plot symbols and colors may be obtained with
PLOT(X,Y,S) where S is a character string made from one element
from any or all the following 3 columns:
Note that RGB colors in the ColorOrder property may differ from
similarly-named colors in the (X,Y,S) triples. For example, the
second axes ColorOrder property is medium green with RGB [0 .5 0],
while PLOT(X,Y,'g') plots a green line with RGB [0 1 0].
Example
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));
plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)
Overloaded methods:
robot/plot
Software de analiza numerica si simbolica 12
quaternion/plot
timeseries/plot
phytree/plot
HeatMap/plot
clustergram/plot
channel.plot
sfit/plot
cfit/plot
fints/plot
idmodel/plot
idfrd/plot
iddata/plot
idnlhw/plot
idnlarx/plot
cgrules/plot
xregtwostage/plot
xregtransient/plot
xregmodel/plot
xregarx/plot
localmulti/plot
localmod/plot
localavfit/plot
sweepset/plot
mdevtestplan/plot
cgdatasetnode/plot
mpc/plot
rfckt.plot
frd/plot
dspdata.plot
wdectree/plot
ntree/plot
dtree/plot
wvtree/plot
rwvtree/plot
edwttree/plot
Reference page in Help browser
doc plot
Software de analiza numerica si simbolica 13
Formatul datelor
MATLAB-ul afișează numerele cu 4 zecimale (setare implicită). Această setare se poate modifica cu
ajutorul comenzii format:
help format
FORMAT Set output format.
FORMAT with no inputs sets the output format to the default appropriate
for the class of the variable. For float variables, the default is
FORMAT SHORT.
FORMAT does not affect how MATLAB computations are done. Computations
on float variables, namely single or double, are done in appropriate
floating point precision, no matter how those variables are displayed.
Computations on integer variables are done natively in integer. Integer
variables are always displayed to the appropriate number of digits for
the class, for example, 3 digits to display the INT8 range -128:127.
FORMAT SHORT and LONG do not affect the display of integer variables.
Example:
format short, pi, single(pi)
displays both double and single pi with 5 digits as 3.1416 while
format long, pi, single(pi)
displays pi as 3.141592653589793 and single(pi) as 3.1415927.
Overloaded methods:
quantizer/format
Exemple:
» c=1.333456789233
c =
1.3335
» format long
» c
c =
1.33345678923300
» format short e
» c
c =
1.3335e+000
» format long e
» c
c =
1.333456789233000e+000
» format
» c
c =
1.3335
Exemplu:
load date
➢ Dacă se dorește aflarea variabilelor curente se pot utiliza comenzile who sau whos:
who
Your variables are:
A c determ
whos
Name Size Bytes Class
➢ Pentru ștergerea tuturor variabilelor curente din memoria de lucru se poate utiliza comanda
clear
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 2
Fișiere script
Fișierele script sunt cele mai simple fișiere MATLAB, nu au argumente de intrare sau de ieșire și sunt
utile pentru executarea secvențială a unor calcule care altfel ar trebui executate în mod repetat de la
linia de comandă. Script-urile operează cu datele din workspace și pot crea date noi. Aceste date sunt
disponibile după terminarea execuției fișierului.
Exemplu de fișier script salvat cu numele pitagoraGen_script.m
z=x^2+y^2-2*x*y*cos(alfa);
r=sqrt(z)
După ce se termină execuția fișierului script, toate variabilele rămân în spațiul de lucru.
Rutine (function)
Aceste fișiere acceptă argumente de intrare și furnizează argumente de ieșire. Numele fișierului
MATLAB (m-file) și cel al funcției (rutinei) respective trebuie să fie identice. Funcțiile (rutinele)
lucrează cu variabile proprii, separate de spațiul de lucru (workspace) uzual al MATLAB-ului.
O funcție .m are următoarele părți componente:
➢ Linia de definire a funcției
➢ Linia de prim help H1
➢ Textul Help-ului
➢ Corpul funcției
➢ Comentarii
➢ Linia de end (end-ul funcției nu este obligatoriu)
Exemplu:
Linia de definire
Această linie informează MATLAB-ul că fișierul conține o funcție și specifică argumentele.
Software de analiza numerica si simbolica 3
Linia H1
Linia H1 este o linie de comentariu care începe cu semnul "%" și furnizează prima linie text atunci când
utilizatorul tastează help numeleFunctiei la prompterul MATLAB.
Textul Help-ului
Se poate crea un help online prin introducerea uneia sau mai multor linii de comentariu după linia H1,
fiecare linie începând cu "%".
Corpul funcției
Corpul funcției conține toate instrucțiunile în cod MATLAB care permit efectuarea calculelor și
asignează valori argumentelor de ieșire. Declarațiile din corp pot conține apelări de funcții, instrucțiuni
de salt, intrări/ieșiri interactive, calcule etc.
Comentarii
O linie de comentariu începe după cum s-a precizat cu semnul "%" și poate fi plasată oriunde într-un
fișier. Pot fi adăugate linii albe oriunde în fișier, acestea fiind ignorate.
Linia end-ului (nu este obligatorie)
z=x^2+y^2-2*x*y*cos(alfa);
r=sqrt(z);
end %end-ul nu este obligatoriu
După ce se termină execuția funcției, doar variabila latura rămâne în spațiul de lucru.
Software de analiza numerica si simbolica 4
Variabile globale
Dacă se dorește ca mai multe astfel de subrutine să utilizeze o anume variabilă comună, se declară
variabila respectivă ca globală, utilizând comanda global în toate funcțiile respective.
Exemplu: fișierul cadereLibera.m:
function [h]=cadereLibera(t)
%cadereLibera Calculeaza spatiul parcurs de un corp in cadere libera
%Argumentul de intrare este timpul exprimat in secunde
global ACC_GRAVITATIONALA
h=1/2*ACC_GRAVITATIONALA*t.^2;
end %nu este obligatoriu
4. Matrice, vectori
Pentru a lucra ușor și bine cu limbajul MATLAB trebuie în primul rând să se învețe manipularea
matricelor.
În MATLAB, o matrice este un tablou dreptunghiular de numere.
Scalarii sunt matrice 1 × 1, iar vectorii sunt matrice cu o singură linie sau coloană.
Matricele se pot introduce în mai multe moduri:
➢ Introducerea unei liste explicite cu elementele matricei
➢ Încărcarea unor date din fișiere externe de date
➢ Generarea de matrice utilizând funcții built-in
➢ Crearea de matrice în fișierele M-files
Trebuie respectate câteva convenții simple:
➢ Elementele unei linii sunt separate prin virgule sau spații
➢ Sfârșitul unei linii se marchează cu punct și virgulă
➢ Lista de elemente care formează matricea se delimitează cu paranteze drepte [ ]
Pentru introducerea matricei lui Dürer tastăm:
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
Operatorul :
Operatorul : este foarte important.
De exemplu, expresiile următoare sunt vectori linie:
a=1:10
a =
1 2 3 4 5 6 7 8 9 10
b=100:-7:50
b =
100 93 86 79 72 65 58 51
Software de analiza numerica si simbolica 6
c=0:pi/4:pi
c =
0 0.7854 1.5708 2.3562 3.1416
Pentru înmulțirea a două matrice se folosește operatorul * valabil de altfel și pentru operațiile cu
scalari.
Exemplu:
D=A*B
D =
58 -30
129 -327
Dacă dimensiunile matricelor care se înmulțesc nu sunt corespunzătoare, atunci va fi furnizat un mesaj
de eroare:
E=[1 23; -12 2;1 2]
E =
1 23
-12 2
1 2
F=A*E
??? Error using ==> *
Inner matrix dimensions must agree.
Software de analiza numerica si simbolica 7
Operatori aritmetici
Operatori relaționali
Operatorii relaționali compară elementele corespondente ale unor tablouri de dimensiune egală.
Operatorii relaționali lucrează totdeauna element cu element !!!.
Software de analiza numerica si simbolica 8
Exemplu:
A = [2 7 6;9 0 5;3 0.5 6];
B = [8 7 0;3 2 5;4 -1 7];
A == B
ans =
0 1 0
0 0 1
0 0 0
Operatori logici
& and (și)
| or (sau)
~ not (nu)
➢ O expresie care utilizează operatorul & este adevărată dacă ambii operanzi sunt adevărați. În
termeni numerici, expresia este adevărată dacă ambii operanzi sunt nenuli.
Exemplu:
u = [1 0 2 3 0 5];
v = [5 6 1 0 0 7];
u & v
ans =
1 0 1 0 0 1
➢ O expresie care utilizează operatorul | este adevărată dacă unul dintre operanzi este logic
adevărat sau dacă ambii operanzi sunt adevărați. În termeni numerici, expresia este falsă dacă
ambii operanzi sunt nuli.
Exemplu:
u | v
ans =
1 1 1 1 0 1
➢ O expresie care utilizează operatorul ~ neagă operandul. În termeni numerici, orice operand
nenul devine nul și orice operand nul devine unu.
Exemplu:
~u
ans =
0 1 0 0 1 0
Operatorii logici lucrează cu elementele corespondente ale unor tablouri de dimensiuni egale. Pentru
vectori și tablouri dreptunghiulare ambii operanzi trebuie să aibă aceeași dimensiune, cu excepția
Software de analiza numerica si simbolica 9
situației în care unul dintre ei este scalar. În acest caz, ca și la operatorii aritmetici, MATLAB-ul aplică
scalarul fiecărui element al celuilalt operand.
Funcții logice
În plus față de operatorii logici, MATLAB-ul furnizează și funcții logice:
Prioritatea operatorilor
Deoarece se pot construi expresii cu diverse tipuri de operatori, nivelurile de prioritate determină
ordinea în care sunt evaluate expresiile. În cadrul fiecărui nivel, operatorii au prioritate egală și sunt
evaluați de la stânga la dreapta.
Regulile de prioritate de la nivelul de prioritate cel mai mare spre cel mai mic sunt prezentate în tabelul
următor.
Software de analiza numerica si simbolica 10
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 3
2. Instrucțiuni de salt și bucle (instrucțiuni pentru controlul derulării unui program) (partea 1)
În MATLAB există mai multe tipuri de instrucțiuni de control al buclelor:
✓ if, else și elseif
✓ switch, case și otherwise
✓ for
✓ while
✓ break
✓ continue
✓ return
✓ try, catch
✓ error
Toate instrucțiunile de control folosesc comanda end pentru a indica sfârșitul blocului respectiv.
➢ if (simplu)
Exemplu: Un fișier script cu numele tempMasurataVar1 care stabilește dacă temperatura măsurată
este corespunzătoare efectuării măsurătorilor.
%stabileste daca temperatura masurata este corespunzatoare efectuarii
masuratorilor
a=7;b=3;
rezultat=input('scrieti a+b sau a-b = ','s')
disp('de afisat')
de afisat
➢ if-else
Exemplu: Un fișier script cu numele tempMasurataVar2 care stabilește dacă temperatura măsurată
este corespunzătoare efectuării măsurătorilor.
%stabileste daca temperatura masurata este corespunzatoare efectuarii
masuratorilor
➢ if-elseif
Exemplu:
u=input('u=');
v=input('v=');
if u>v
disp('u este mai mare ca v')
elseif u<v
disp('u este mai mic ca v')
end
➢ if-elseif-else
Exemplul 1:
u=input('u=');
v=input('v=');
if u>v
disp('u este mai mare ca v')
elseif u<v
disp('u este mai mic ca v')
else
disp('u este egal cu v')
end
Exemplul 3: Un fișier script cu numele parSauImpar pentru stabilirea parității sau imparității unui
număr întreg strict pozitiv.
%script-ul stabileste paritatea sau imparitatea unui numar intreg strict
pozitiv
n=input('n=');
if n<=0
disp('valoarea furnizata trebuie sa fie strict pozitiva');
elseif rem(n,2)==0 %functia rem returneaza restul impartirii
disp('n par');
else %daca n este strict pozitiv si impar
disp('n impar');
end
Funcția strcmp(S1,S2) compară șirurile de caractere S1 și S2: dacă sunt identice returnează 1
(true), în caz contrar 0 (false).
strcmp('bicicleta','trotineta')
ans =
0
Software de analiza numerica si simbolica 8
switch-case-otherwise if-elseif-else
Instrucțiunea for
Execută un grup de instrucțiuni de un număr fixat de ori.
Exemplul 1: Să se scrie un fișier script numit sumaSerieNumereVar1 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator.
%Calculeaza suma unei serii de n valori numerice introduse de utilizator
%Se foloseste bucla FOR
Exemplul 2: Să se genereze 5 numere egale cu dublul celui anterior, primul fiind introdus de utilizator.
x(1)=input('Introduceti valoarea primului numar: ');
for n=2:1:6 %se poate scrie si n=2:6
x(n)=2*x(n-1);
end
disp(x)
Se pot scrie instrucțiuni for în corpul unei alte instrucțiuni for (for imbricat).
Exemplul 3: Să se scrie un fișier script numit generareMatriceVar1 pentru generarea unei matrice
M cu m linii și n coloane având valorile elementelor dată de relația M(i,j)=1/(i+j-1)
Instrucțiunea while
Execută un grup de instrucțiuni de un număr nedefinit de ori pe baza unei condiții logice.
Exemplul 1: Să se scrie un fișier script numit sumaSerieNumereVar2 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator.
%Calculeaza suma unei serii de n valori numerice introduse de utilizator
%Se foloseste bucla WHILE
Exemplul 2: Să se scrie un fișier script numit traiectorie pentru calculul elementelor traiectoriei
unui proiectil (înălțime, distanță) lansat sub un anumit unghi față de orizontală, sub acțiunea
Software de analiza numerica si simbolica 13
x = v 0 cos ( ) t
t2 (1)
y = v 0 sin ( ) t − g
2
Exemplul 4: Validarea intrărilor folosind bucla while. Validarea intrărilor (input-ului) este procesul de
verificare a datelor care sunt introduse într-un program ca să fim siguri că sunt corecte înainte de a fi
folosite în calcule. Dacă un user introduce date greșite, programul va returna răspunsuri eronate sau
erori logice care sunt cel mai greu de depanat. Calculatorul nu poate să facă diferența între datele
corecte și cele incorecte. Ce s-ar întâmpla dacă la orele lucrate într-o săptămână, operatorul în loc de
50 de ore ar introduce 500 de ore? Rezultatul ar fi aberant. Același lucru se poate întâmpla și cu salariul
orar. Cum prevenim o astfel de greșeală? Simplu! Utilizăm bucle while.
Să se scrie un script salariulBrutSapt care să calculeze salariul brut săptămânal al angajaților.
Software de analiza numerica si simbolica 15
Se pot scrie instrucțiuni while în corpul unei alte instrucțiuni while (while imbricat).
Exemplul 5: Să se scrie un fișier script numit generareMatriceVar2 pentru generarea unei matrice
M cu m linii și n coloane având valorile elementelor dată de relația M(i,j)=1/(i+j-1)
Software de analiza numerica si simbolica 16
Observație: este mai dificilă gestionarea indicilor în cazul folosirii ciclului while decât în cazul ciclului
for.
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 4
2. Instrucțiuni de salt și bucle (instrucțiuni pentru controlul derulării unui program) (partea 2)
Instrucțiunea break
Provoacă întreruperea ciclurilor for și while și salt la prima instrucțiune după instrucțiunea end
a ciclului. Se recomandă a fi utilizată și în cazul în care o condiție de eroare este detectată în interiorul
unei bucle. În cazul unor cicluri imbricate, break comandă ieșirea din cel mai interior ciclu.
Exemplul 1: Să se scrie un fișier script cu numele sumaValPozVar1 care să calculeze suma unei serii
de n valori numerice pozitive introduse de utilizator. Dacă se introduce un număr negativ, acesta nu
este luat în considerare și se calculează suma valorilor pozitive introduse până la acesta.
Software de analiza numerica si simbolica 2
Exemplul 2: Să se scrie un fișier script numit sumaSerieNumereVar3 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator folosind o buclă while infinită și instrucțiunea
break.
Software de analiza numerica si simbolica 3
Instrucțiunea continue
Transferă controlul următoarei iterații din ciclurilor while și for în care apare, sărind peste
celelalte instrucțiuni din corpul ciclului. Este utilă în cazul unor bucle mari, când trebuie sărite anumite
instrucțiuni. În cicluri imbricate controlul este dat următoarei iterații a ciclului care conține
instrucțiunea continue.
b) dacă conditie logica 2 este falsă, instrucțiunea continue nu este luată în considerare și
se execută corp instructiuni 2 și se trece la următoarea iterație din ciclul while
Exemplul 1: Se generează numere aleatoare întregi cu distribuție uniformă mai mici sau egale cu 10
atât timp cât numărul aleator generat este mai mare decât indicele acestuia. Când numărul aleator
generat este mai mic decât indicele acestuia se termină generarea (combinație a instrucțiunilor
continue și break).
i=0; %se initializeaza indicele
while 1 %1 este adevarat intotdeauna (ciclu while infinit)
i=i+1; %indexez valoarea lui i
nrAleator=randi(10); %generez un numar aleator intreg <=10
if nrAleator>=i
disp([num2str(nrAleator) '>=' num2str(i)]);
continue %se trece la generarea urmatorului numar aleator
end
disp([num2str(nrAleator) '<' num2str(i)]);
break %daca nrAleator < i se opreste ciclul
end
Exemplul 2: Să se scrie un fișier script cu numele sumaValPozVar2 care să calculeze suma unei serii
de n valori numerice pozitive introduse de utilizator. Dacă se introduce un număr negativ, acesta nu
este luat în considerare și se calculează suma valorilor pozitive introduse.
%Acest script calculeaza suma unei serii de n
%valori numerice pozitive introduse de utilizator
%Daca se introduce un numar negativ, acesta nu este luat in considerare
Instrucțiunea return
Provoacă ieșirea forțată din funcție sau script și întoarcerea la funcția apelantă (care a apelat
procedura) sau dă controlul la tastatură.
Exemplu general:
function [argIesire]=numeFunctie(x,y,...)
while conditie 1
corp instructiuni 1;
if conditie 2
corp instructiuni 2;
argIesire=valoare 1;
return;
Software de analiza numerica si simbolica 6
end
corp instructiuni 3
end
corp instructiuni 4;
argIesire=valoare 2;
end %end-ul functiei nu este obligatoriu
Dacă conditie 1 este sau devine falsă se execută corp instructiuni 4 și se returnează
argIerire (=valoare 2) (se iese din funcție).
Exemplul 2: Să se găsească poziția și primul număr divizibil cu o valoare dată dintr-un șir de numere
întregi strict pozitive.
function [indx,val]=returnDemo(a,x)
%Exemplu cu instructiunea return
%Functia returnDemo gaseste pozitia si valoarea primului numar divizibil
%cu o valoare data dintr-un sir de numere intregi
i=1;
while i<=length(x)
if rem(x(i),a)==0
indx=i;
val=x(i);
return
end
indx=NaN; %indx nu este un numar
val=NaN; %nu exista nicio valoare din sir divizibila cu valoarea data
i=i+1;
end
disp(['nu exista in sir numar divizibil cu ',num2str(a)]);
end %end-ul functiei nu este obligatoriu
Se execută corp instructiuni dintre try și catch până la întâlnirea unei erori și apoi se execută
corp instructiuni dintre catch și end. Dacă apare o eroare între catch și end, MATLAB termină
execuția, dacă nu s-a specificat o altă secvență try/catch.
Software de analiza numerica si simbolica 8
Instrucțiunea error
Instrucțiune pentru afișarea unui mesaj de eroare și termină execuția instrucțiunilor ulterioare.
Exemplu:
function [c]=functieTest(a,b,x)
%FUNCTIA CALCULEAZA..................
if nargin~=3
error('Numarul argumentelor de intrare este 3')
end
c=(a+b)^x;
end %end-ul functiei nu este obligatoriu
Apel: v=functieTest(2,3,0.15)
Se returnează numărul variabilelor de intrare, iar dacă funcția nu are intrări, se returnează un număr
negativ.
Exemplu:
nargin('functieTest')
ans =
3
Software de analiza numerica si simbolica 9
În interiorul corpului unei funcții definite de utilizator, nargin returnează numărul de argumente de
intrare care au fost folosite pentru a apela funcția.
Funcția nargout. Pentru testarea numărului argumentelor de ieșire care pot fi introduse pentru
apelarea unei funcții, este disponibilă variabila permanentă nargout, care se apelează cu sintaxa:
nargout('numeFunctie')
Se returnează numărul variabilelor de ieșire, iar dacă funcția nu are ieșiri, se returnează un număr
negativ.
Exemplu: să se ceară numărul argumentelor de ieșire al funcției returnDemo
nargout('returnDemo')
ans =
2
În interiorul corpului unei funcții definite de utilizator, nargout returnează numărul de argumente de
ieșire care au fost folosite pentru a apela funcția.
4. Intrări utilizator
Pentru a obține o intrare de la utilizator în timpul execuției unui fișier există următoarele posibilități:
➢ Afișarea unui prompter prin intermediul unei funcții tip input și introducerea unor date de la
tastatură
➢ Oprirea execuției cu o comandă pause (reluarea execuției la apăsarea unei taste)
➢ Construirea unei interfețe grafice GUI completă
Comanda pause. Fără argument, oprește execuția până la apăsarea unei taste. Pentru a avea o pauză
de n secunde se folosește comanda:
pause(n)
Software de analiza numerica si simbolica 10
Se pot concatena (concatenare = lipire) șirurile de caractere pentru a crea expresii de intrare necesare
funcției eval.
Exemplul 4: Se creează 10 variabile de forma Pi (P1, P2, ..., P10) și se setează fiecare variabilă
la valoarea i*10, utilizând funcția eval
for i=1:10
eval(['P',num2str(i),'=i*10'])
end
Funcția feval. Execută o anumită funcție specificată sub forma unui șir de caractere. Sintaxa are
forma:
[y1,..,yn]=feval('numeFunctie',x1,...,xn)
[y1,..,yn]=feval(@numeFunctie,x1,...,xn)
Software de analiza numerica si simbolica 11
în care x1,...,xn sunt argumentele de intrare pentru funcția respectivă, iar y1,..,yn sunt
argumentele de ieșire ale funcției.
Exemplul 1:
a=feval('log',7) %evalueaza functia log pt. 7 si returneaza rezultatul
a =
1.9459
Exemplul 3:
function [y]=calculFunTrig(x)
%Functia calculFunTrig calculeaza valorile principalelor functii
%trigonometrice (sinus, cosinus, tangenta, cotangenta) pentru un unghi
%exprimat in grade
if nargin~=1
error('Numarul argumentelor de intrare este 1')
end
funTrig=['sind';'cosd';'tand';'cotd']; %vectorul coloana al functiilor
y=zeros(length(funTrig),1); %definesc dimensiunea vectorului y
for i=1:1:length(funTrig);
y(i)=feval(funTrig(i,:),x);
end
Este indicată folosirea funcției feval în locul funcției eval, deoarece execuția este mai rapidă!!!
6. Funcții handle
O funcție handle (function handle) este un tip de date din MATLAB care stochează o asociere
cu o funcție. O utilizare tipică a function handle este de a transmite o funcție unei alte funcții. De
exemplu, se poate utiliza o function handle ca argument de intrare pentru o funcție care evaluează
expresii matematice într-un interval de valori (vom vedea în cursurile următoare).
Function handle poate să fie o funcție deja definită (salvată) sau o funcție anonimă.
Function handle se creează folosind operatorul @.
Software de analiza numerica si simbolica 12
0.5000
49.2500
7. Funcția anonimă
Funcția anonimă este o function handle care nu este stocată într-un fișier de program. Este definită
printr-o singură declarație și poate avea orice număr de argumente de intrare și un singur argument
de ieșire. O funcție anonimă poate conține doar o singură instrucțiune executabilă.
Sintaxa:
nume=@(var. formale de intrare) expresia functiei
Exemplu:
func=@(x,y) (x+1)/10+sind(y);
rez=func(5,30)
rez =
1.1000
8. Subfuncții
Fișierele .m de tip funcție pot conține mai mult de o funcție. Prima funcție din fișier se numește
funcție primară, iar celelalte se numesc subfuncții, fiind vizibile numai din funcția primară sau din
alte subfuncții din același fișier. Fiecare funcție are propria sa linie de definiție.
Numele funcției trebuie să fie unic într-un fișier .m !!!
Software de analiza numerica si simbolica 13
Apel: s=RezEcGr2(1,12,32)
9. Funcții private
Ele se păstrează într-un subdirector cu numele special private și sunt vizibile numai din directorul
părinte.
De exemplu, presupunem că în calea (path) MATLAB avem un director numit Statistica. Putem
crea un subdirector al acestuia cu numele private, care să conțină funcții vizibile numai în funcțiile
din directorul Statistica.
Astfel de funcții sunt utile pentru a crea versiuni proprii ale unor funcții, păstrând în același timp
versiunile originale într-un alt director.
Subdirectorii de tip private nu trebuie adăugați la calea (path) MATLAB !!!
Software de analiza numerica si simbolica 14
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 5
3. Matricea goală
Sintaxa:
X=[] generează o matrice goală (fără nici un element)
Software de analiza numerica si simbolica 2
Exemplu:
X=[]
X =
[]
4. Matricea unitate
Sintaxe:
ones(m,n) returnează o matrice de dimensiune m x n cu toate elementele 1
ones(size(M)) returnează o matrice de dimensiunea matricei M cu toate elementele 1
Exemple:
ones(1,5)
ones(5,5)
ones(3,2)
D=[1 5 7; 3 6 8];ones(size(D))
5. Matricea zero
Sintaxe:
zeros(m,n) returnează o matrice de dimensiune m x n cu toate elementele 0
zeros(size(M)) returnează o matrice de dimensiunea matricei M cu toate elementele 0
Exemple:
zeros(1,5)
zeros(5,5)
zeros(3,2)
D=[1 5 7; 3 6 8];zeros(size(D))
6. Matricea identitate
Sintaxe:
eye(m,n) returnează o matrice de dimensiune m x n având elementele diagonalei principale
egale cu 1, iar restul elementelor egale cu 0
eye(size(M)) returnează o matrice de dimensiune egală cu dimensiunea matricei M având
elementele diagonalei principale egale cu 1, iar restul elementelor egale cu 0
Exemple:
eye(1,5)
Software de analiza numerica si simbolica 3
eye(5,5)
eye(3,2)
D=[1 5 7; 3 6 8];eye(size(D))
Exemple:
rand
rand(1,5)
rand(5,5)
rand(3,2)
D=[1 5 7; 3 6 8];rand(size(D))
r=a+(b-a)*rand(1,100) %genereaza un vector cu 100 de numere aleatoare cu
distributie uniforma in intervalul (a,b)
Exemple:
randi(7)
randi(23,2,5)
Software de analiza numerica si simbolica 4
randi([0,5],10,1)
randi([0,10],3,2)
D=[1 5 7; 3 6 8];randi([1,10],size(D))
Exemple:
rand
randn(1,5)
randn(5,5)
randn(3,2)
D=[1 5 7; 3 6 8];randn(size(D))
r=1+2*randn(1,200) %genereaza 200 de numere aleatoare cu distributie normala
cu media 1 si abaterea standard 2)
Exemplul 1: înlocuirea elementului din linia 3 și coloana 3, A(3,3), al matricei A, cu suma dintre
elementul din linia 1 - coloana 3, A(1,3), și elementul din linia 3 - coloana 1, A(3,1)
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
A(3,3)=A(1,3)+A(3,1)
A =
2 4 7 3
5 1 0 4
7 4 14 9
Crearea vectorilor și matricelor mari, precum și manipularea acestora se face cu multă flexibilitate dacă
se utilizează indici de tip vector.
Pentru extragerea vectorilor cu elemente decupate din alți vectori, se folosesc formele:
a(j:k) selectează elementele [j,j+1,...,k] ale vectorului; dacă j>k, vectorul rezultat
este gol
a(j:i:k) selectează elementele [j,j+i,j+2i,...,k] ale vectorului; vectorul rezultat este
gol dacă i>0 și j>k sau dacă i<0 și j<k
c=a(2:2:8)
c =
6 8 7 0
Pentru extragerea matricelor cu elemente decupate din alte matrice, se folosesc formele:
A(:,j) selectează coloana j a matricei A
A(i,:) selectează linia i a matricei A
A(:,:) selectează întreaga matrice A
A(:,j:k) selectează toate liniile și coloanele de la j la k (A(:,j),A(:,j+1),...,A(:,k))
A(j:k,:) selectează liniile de la j la k și toate coloanele (A(j,:),A(j+1,:),...,A(k,:))
A(:) selectează toate elementele matricei A, privite ca o singură coloană, începând cu
prima
Dacă indicii x și y sunt vectori cu elemente numere întregi, instrucțiunea N=M(x,y) creează o
matrice N, care conține elementele din liniile x ale coloanelor y ale matricei M.
Exemplul 4: extragerea matricei B de dimensiunea 3 x 3, constând din elementele liniilor 1:3 ale
coloanelor 2:4 ale matricei A
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
B=A(1:3,2:4)
B =
4 7 3
1 0 4
4 8 9
Exemplul 5: extragerea din matricea A a matricei C de dimensiune 3 x 1 care să conțină toate liniile
din coloana a 3-a
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
C=A(:,3)
Software de analiza numerica si simbolica 7
C =
7
0
8
Exemplul 6: extragerea matricei D de dimensiune 2 x 4 care conține liniile 1:2 ale coloanelor
matricei A
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
D=A(1:2,:)
D =
2 4 7 3
5 1 0 4
Exemplul 7: înlocuirea coloanele 1,3 și 4 ale matricei A, cu coloanele 1:3 ale matricei E
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
E=[4 7 2 6;7 3 5 6;9 4 7 3]
E =
4 7 2 6
7 3 5 6
9 4 7 3
A(:,[1,3,4])=E(:,1:3)
A =
4 4 7 2
7 1 3 5
9 4 4 7
d =
1
3
2
4
Exemplul 10: inversarea coloanelor unei matrice A se face cu sintaxa A(:,n:-1:1), unde n
reprezintă numărul de coloane
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
F=A(:,size(A,2):-1:1)
F =
3 7 4 2
4 0 1 5
9 8 4 7
Exemplul 11: inversarea liniilor unei matrice A se face cu sintaxa A(m:-1:1,:), unde m reprezintă
numărul de linii
G=A(size(A,1):-1:1,:)
G =
7 4 8 9
5 1 0 4
2 4 7 3
Software de analiza numerica si simbolica 9
returnează în matricea B toate elementele din liniile matricei A pentru care elementul corespunzător
ca poziție din vectorul v are valoarea 1. Prin acest procedeu se poate extrage o matrice prin
intermediul unui vector returnat de funcții logice.
Pentru coloane, pentru un vector linie u cu elemente logice de lungime n, expresia este:
C=A(:,u)
Exemplu: Să se extragă din matricea A toate liniile care au elementul din coloana a 3-a mai mare sau
egal cu 4, respectiv coloanele a căror linie 3 au elementele mai mari decât 5.
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
v=A(:,3)>=4
v =
1
0
1
H=A(v,:)
H =
2 4 7 3
7 4 8 9
u=A(3,:)>5
u =
1 0 1 1
G=A(:,u)
G =
2 7 3
5 0 4
7 8 9
Software de analiza numerica si simbolica 10
Elementele matricei Y vor fi în ordinea succesivă a coloanelor și pe fiecare coloană de sus în jos a
elementele matricei argument X (citite de sus în jos și de la stânga la dreapta).
Exemplu: redimensionarea matricei A cu dimensiunea 3 × 4 într-o matrice cu dimensiunea
2 × 6.
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
I=reshape(A,2,6)
I =
2 7 1 7 8 4
5 4 4 0 3 9
N =
9 8 4 7
4 0 1 5
3 7 4 2
Exemple:
a=randn(1,5)
A=randn(5)
diag(a)
diag(a,1)
diag(a,-1)
diag(a,2)
diag(a,-2)
diag(A)
diag(A,2)
diag(A,-2)
diag(diag(A))
Exemple:
A=randn(5)
triu(A)
triu(A,1)
triu(A,-1)
TABLOURI MULTIDIMENSIONALE
MATLAB-ul permite utilizarea tablourilor cu mai mult de 2 indici. Ele pot fi create și apelând funcțiile
specifice matricelor (zeros, ones, rand, randn etc.) cu mai mult de două argumente de intrare.
Exemplul 1: Crearea unui tablou cu dimensiunea 3 × 4 × 5 (60 de elemente), având toate elementele
egale cu 1.
U=ones(3,4,5)
U(:,:,1) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,2) =
1 1 1 1
1 1 1 1
1 1 1 1
Software de analiza numerica si simbolica 14
U(:,:,3) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,4) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,5) =
1 1 1 1
1 1 1 1
1 1 1 1
B(:,:,1) =
3 2 1
6 5 4
9 8 7
B(:,:,2) =
3 1 2
6 4 5
9 7 8
B(:,:,3) =
2 3 1
5 6 4
8 9 7
B(:,:,4) =
2 1 3
5 4 6
8 7 9
B(:,:,5) =
1 2 3
4 5 6
7 8 9
B(:,:,6) =
1 3 2
4 6 5
7 9 8
Referirea unui element individual al tabloului B se face prin 3 indici reprezentând dimensiunile 1, 2
și 3:
B(2,3,3) %linia 2, coloana 3, matricea 3
Software de analiza numerica si simbolica 16
ans =
4
A 5-a matrice:
B(:,:,5)
ans =
1 2 3
4 5 6
7 8 9
TABLOURI DE CELULE
Un tablou de celule în MATLAB este un tablou multidimensional ale cărui elemente sunt copii ale
altor tablouri. Crearea unui tablou de celule și indexarea elementelor se realizează folosind acolade
{} în loc de paranteze [], respectiv ().
Un tablou de celule poate conține elemente de diverse tipuri (scalari, vectori, matrice, șiruri de
caractere (string-uri)).
Exemplu: Tablou de celule unidimensional 1 × 3:
A=ones(4); %matrice 4 × 4
C={A,A(:,2),A(2,3)} %A(:,2) este un vector coloana, A(2,3) este un scalar
C =
[4x4 double] [4x1 double] [1]
produce un tablou de celule 1 × 3. Cele trei celule conțin o matrice, un vector coloană și un scalar.
Afișarea de tipul [4x4 double] [4x1 double] [1] se datorează lipsei de spațiu; ori de câte
ori apare această situație MATLAB dă un sumar al structurilor și componentelor.
Trebuie reținute două aspecte importante:
1. utilizarea acoladelor în cazul indexurilor:
C{1} %se cere elementul 1 al structurii, adica matricea A
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Software de analiza numerica si simbolica 17
2. Celulele conțin copii ale tablourilor, nu pointeri pe tablouri. Astfel, dacă se modifică matricea A,
tabloul C nu se modifică.
Pot fi create și tablouri de celule multidimensionale (având linii și coloane).
Exemplu:
D={'psi',9,eye(2);'miu',2-3i,pi}
D =
'psi' [ 9] [2x2 double]
'miu' [2.0000 - 3.0000i] [ 3.1416]
ȘIRURI DE CARACTERE
Exemplu:
a='Centrul Universitar Nord din Baia Mare'
Software de analiza numerica si simbolica 18
a =
Centrul Universitar Nord din Baia Mare
Caracterele ASCII imprimabile au codurile 32:127. Valorile mai mici decât 32 sunt coduri de caractere
de control neimprimabile.
Concatenarea șirurilor de caractere se realizează prin încadrarea lor între paranteze pătrate [].
Instrucțiunea următoare concatenează șirurile pe orizontală (se folosesc parantezele []):
d=['Forta∙','de∙','reactiune'] %sau d=['Forta∙' 'de∙' 'reactiune']
d =
Forta de reactiune
STRUCTURI
1. Crearea structurilor
Structurile sunt tablouri de celule multidimensionale (eterogene), ale căror elemente pot fi
desemnate prin nume de câmpuri.
Exemplu: structură care conține informații despre produsele dintr-o magazie: denumire, furnizor, preț
și numărul de bucăți
Software de analiza numerica si simbolica 20
creează o structură numită MAG, cu patru câmpuri: denumire, furnizor, pret, bucati.
MAG
MAG =
struct with fields:
denumire: 'surub cap hexagonal M8'
furnizor: 'S.C. SERV S.R.L.'
pret: 0.2000
bucati: 214
Structurile sunt tablouri care permit inserarea unor elemente adiționale prin două metode:
a) Câmpurile pot fi adăugate unul câte unul:
MAG(2).denumire='surub cap hexagonal M10';
MAG(2).furnizor='S.C. SERV S.R.L.';
MAG(2).pret=0.22;
MAG(2).bucati=143;
Deoarece structura a devenit destul de mare, la apelare se va afișa numai un sumar al ei:
MAG
MAG =
1x3 struct array with fields:
denumire
furnizor
pret
bucati
2. Interogarea structurilor
Există mai multe moduri de a interoga structurile:
a) Dacă se tastează:
MAG.pret
ans =
0.2000
Software de analiza numerica si simbolica 21
ans =
0.2200
ans =
0.1000
MAG(2).pret
ans =
0.2200
MAG(3).pret
ans =
0.1000
Forma aceasta nu este foarte utilă, deoarece ia separat fiecare pret, îl atribuie variabilei
implicite ans și afișează rezultatul fiecărei atribuiri.
b) Dacă se încadrează între paranteze pătrate (devine un vector linie):
[MAG.pret]
ans =
0.2000 0.2200 0.1000
d) Utilizarea funcției de concatenare cat care este utilă pentru crearea și gestionarea tablourilor și
structurilor de date avansate:
C=cat(dim,A1,A2,A3,A4,...)
se pot utiliza pentru a concatena un tablou de celule sau de structuri care conține câmpuri numerice
într-o singură matrice.
Exemplu:
cat(3,MAG.pret) %produce un tablou tridimensional 1 × 1 × 3
ans(:,:,1) =
0.2000
ans(:,:,2) =
0.2200
ans(:,:,3) =
0.1000
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
5. Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 6
a) dacă Y este vector, se trasează graficul Y=Y(i), unde i=1, 2,..., n este numărul de
ordine al elementului Y, culoarea liniei fiind albastră
b) dacă Y este o matrice m x n, se trasează graficele Yj=Yj(i), unde i=1, 2...., n
este numărul de ordine al elementului de pe coloana j, culorile liniilor fiind alese de
program
plot(X,Y) reprezintă grafic argumentul Y funcție de X cu următoarele precizări:
a) dacă X este vector, iar Y este o matrice, atunci coloanele lui Y sunt trasate funcție de
vectorul X; curba graficului este de tip continuu, culorile liniilor fiind alese de program
b) dacă X și Y sunt matrice de aceeași dimensiune, se reprezintă coloanele lui Y funcție de
coloanele lui X; curba graficului este de tip continuu, culorile liniilor fiind alese de
program
plot(X1,Y1,...,Xn,Yn) reprezintă simultan mai multe grafice Y funcție de X în același sistem
de coordonate, observațiile de la plot(X,Y) rămân valabile
Software de analiza numerica si simbolica 2
Tabelul 1
Tipul liniei Tipul markerului Culoare
continuă - plus + roșu r
întreruptă -- cerc o verde g
puncte : steluță * albastru b
linie-punct -. punct . albastru deschis c
cruce x mov m
pătrat 'square' sau s galben y
hexagon 'diamond' sau d negru k
triunghi cu vârful în sus ^ alb w
triunghi cu vârful în jos v
triunghi cu vârful în dreapta >
triunghi cu vârful în stânga <
stea în 5 colțuri 'pentagram' sau p
stea în 6 colțuri 'hexagram' sau h
Exemplu: Să se traseze pe același grafic variația funcțiilor sin și cos pentru valori cuprinse între 0 și
2π pentru exact 20 de valori discrete.
x=linspace(0,2*pi,20);
y1=sin(x);y2=cos(x);
plot(x,y1,'-ob',x,y2,'--sm','LineWidth',1,'MarkerEdgeColor','k',...
'MarkerFaceColor','y','MarkerSize',5)
Software de analiza numerica si simbolica 3
Sintaxe:
loglog(X,Y)
semilogx(X,Y)
semilogy(X,Y)
Funcția loglog scalează ambele axe utilizând logaritmul în baza 10, în timp ce funcțiile semilogx
și semilogy scalează logaritmic numai axa x, respectiv axa y, cealaltă axă fiind scalată liniar.
Modul de utilizare al acestor funcții este identic cu cel al funcției plot.
Exemplu: Să se reprezinte funcțiile f1 ( x ) = 200 × e-0.05×x × sin( x ) și f2 ( x ) = 0,5 × e-0.05×x × sin(10 × x ) , pentru
x Î[0,30] cu funcția plotyy.
x=0:0.01:30;
y1=200*exp(-0.05*x).*sin(x);
y2=0.5*exp(-0.5*x).*sin(10*x);
plotyy(x,y1,x,y2,'plot');
Software de analiza numerica si simbolica 5
Exemplul 1: Să se traseze variația funcției sin pentru valori cuprinse între 0 și 2π pentru exact 200
de valori discrete.
x=linspace(0,2*pi,200);
y=sin(x);
area(x,y);
Software de analiza numerica si simbolica 7
Exemplul 2: Să se reprezinte graficul de tip arie al datelor conținute în matricea Y=[1 5 3;3 2 7;1
5 3;2 6 1]
Y=[1 5 3;3 2 7;1 5 3;2 6 1];
area(Y);colormap autumn
Exemplu: Notele obținute de o grupă de studenți au fost următoarele: 3 note sub nota 5, 4 note între
5 și 6, 5 între 6 și 7, 5 între 7 și 8, 4 între 8 și 9 și 3 între 9 și 10. Să se reprezinte rezultatele printr-un
grafic de tip plăcintă, cu feliile corespunzătoare notelor sub 5, respectiv notelor cuprinse între 9 și 10
detașate.
x=[3 4 5 5 4 3]; x=[3 4 5 5 4 3];
pie(x,[1 0 0 0 0 1],... pie(x,[1 0 0 0 0 1])
{'<5','5-6','6-7','7-8','8-9','9-10'}) colormap HSV
colormap jet
Software de analiza numerica si simbolica 9
Să se reprezinte grafic funcția din fișierul test.m, între limitele [-20,20], cu n=50 eșantioane.
fplot('test',[-20 20],50);grid
Exemplu:
[X,Y]=meshgrid(-10:.5:10,-10:.5:10);
R=sqrt(X.^2+Y.^2);
Z=sin(R)./R;
mesh(X,Y,Z)
Funcția surf produce grafice asemănătoare cu cele obținute cu ajutorul funcției mesh, dar cu
deosebirea că ochiurile suprafeței sunt colorate.
Exemplu:
[X,Y]=meshgrid(-10:.5:10,-10:.5:10);
R=sqrt(X.^2+Y.^2);
Z=sin(R)./R;
surf(X,Y,Z)
Software de analiza numerica si simbolica 15
Cele mai utilizate funcții utilizate pentru manipularea și personalizarea graficelor sunt:
Exemplu:
x=0:0.01:30;
y1=200*exp(-0.05*x).*sin(x);
y2=100*exp(-0.5*x).*sin(10*x);
plot(x,y1);hold on;
plot(x,y2);
200
150
100
50
-50
-100
-150
-200
0 5 10 15 20 25 30
Sintaxe:
subplot(m,n,s) împarte fereastra figură în m × n zone dreptunghiulare de afișare (analog
unui tabel cu m linii și n coloane) și specifică fereastra (celula tabelului) în care se va face
reprezentare grafică curentă prin numărul (scalarul) s; zonele de afișare sunt numerotate de la
stânga la dreapta, începând cu linia de sus. Dacă fereastra figură a fost împărțită anterior,
apelul funcției face numai specificarea subferestrei curente în care se va crea noul sistem de
axe
Software de analiza numerica si simbolica 17
În cazul în care apelul unei funcții subplot determină suprapunerea noului sistem de axe peste unul
existent, are loc ștergerea primului.
Exemplul 1: Reprezentarea grafică în cadrane a liniilor matricei Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6
1 9].
Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6 1 9];
subplot(2,2,1);plot(Y(1,:));
subplot(2,2,2);plot(Y(2,:));
subplot(2,2,3);plot(Y(3,:));
subplot(2,2,4);plot(Y(4,:));
Exemplul 2: Reprezentarea grafică a primelor 2 linii ale matricei Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6
1 9] în grafice separate în cadranele 1 și 3, respectiv liniile 3 și 4 în același grafic care să ocupe
cadranul 2 și 4.
Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6 1 9];
subplot(2,2,1);plot(Y(1,:));
subplot(2,2,3);plot(Y(2,:));
subplot(2,2,[2 4]);plot(Y(3,:));hold on;plot(Y(4,:));
Software de analiza numerica si simbolica 18
4. Frontierele axelor
Frontierele axelor sunt manipulate cu funcția box.
Sintaxe:
box on sunt reprezentate frontierele axelor
Exemplu: Reprezentarea primelor 2 linii ale matricei Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6 1 9] în
grafice cu, respectiv fără reprezentarea frontierele axelor.
Y=[1 5 3 4;3 2 7 6;1 5 3 7;2 6 1 9];
figure;plot(Y(1,:));box on;
figure;plot(Y(2,:));box off;
axis ij plasează originea sistemului de coordonate în colțul din stânga sus: i este axa
verticală cu valori care cresc de sus în jos, iar j este axa orizontală, cu valori care
cresc de la stânga la dreapta
axis xy formatul axelor este cel cartezian (implicit)
axis equal stabilește raportul de aspect, astfel ca unitățile să fie aceleași în fiecare direcție.
Raportul de aspect ale axelor x,y,z este ajustat automat în raport de domeniul
datelor
axis square realizează un grafic de formă pătrată (2D) sau cubică (3D); această opțiune ajustează
axele x,y,z astfel încât acestea au lungimi egale și ajustează unitățile de date în
mod corespunzător
axis normal reglează automat raportul de aspect al axelor x,y,z și scalarea relativă a unităților
de date, astfel încât graficul să se potrivească cât mai bine formei figurii
axis off dezactivează toate axele, gradațiile și etichetele
axis on activează toate axele, gradațiile și etichetele
Exemplul 1:
x=0:10;
y=0:2:20;
subplot(1,2,1);plot(x,y);axis equal;
subplot(1,2,2);plot(x,y);axis square;
Exemplul 2:
subplot(1,2,1);plot(0:pi/20:2*pi,sin(0:pi/20:2*pi));
subplot(1,2,2);plot(0:pi/20:2*pi,sin(0:pi/20:2*pi));axis tight
Software de analiza numerica si simbolica 21
¥ \infty º \equiv
ò \int
Definiția literelor grecești mari începe cu literă mare, a celor mici cu literă mică, de exemplu \Omega
pentru Ω și respectiv \omega pentru ω.
Expresiile se definesc după următoarele reguli:
¦ expresii cu exponenți; expresia ab se definește ca a^b
¦ expresii cu indici; expresia xi se definește ca x_i
¦ dacă este cazul, expresiile se pot grupa între acolade, { }
Software de analiza numerica si simbolica 22
sau:
e^{at}
Pentru a afișa un text inclinat (italic), vom defini acel text ca:
\ittextul dorit
iar pentru afișare cu litere groase (bold) vom defini textul ca:
\bftextul dorit
unde 'text' este un șir de caractere care reprezintă numele axei, unitatea de măsură etc. ale
graficului curent. Repetarea instrucțiunii cu alt text conduce la înlocuirea textului anterior, fără a fi
necesară refacerea reprezentării grafice.
Exemplu:
a=2;t=0:.1:4.5;v=a*t;
plot(t,v);
xlabel('timpul,[s]','FontSize',14);
ylabel('viteza,[m/s]','FontSize',14);
title(['Variatia vitezei pentru acc=',num2str(a),'m/s^2'],'FontSize',18)
Software de analiza numerica si simbolica 24
Funcția text scrie șirul de caractere 'text' în poziția specificată de coordonatele (x,y). Dacă x
și y sunt vectori, funcția text scrie șirul de caractere 'text' în toate pozițiile date de perechile
(x,y).
Exemplu:
plot(0:pi/20:2*pi,sin(0:pi/20:2*pi));
text(pi,0,'\leftarrow sin(\pi)','FontSize',18)
Software de analiza numerica si simbolica 25
Funcția gtext afișează șirul de caractere 'text' în fereastra grafică și așteaptă plasarea acestuia
pe grafic cu mouse-ul sau oricare tastă.
Exemplu:
plot(0:pi/20:2*pi,sin(0:pi/20:2*pi));
gtext('\leftarrow sin(\omega)','FontSize',18)
Dacă funcția grid este setată on, pe grafic sunt reprezentate liniile grid, iar dacă este off,
acestea sunt eliminate. Funcția grid stabilește proprietățile obiectului “axe curente”.
Exemplu:
a=2;t=0:.1:4.5;v=a*t;
plot(t,v);grid minor
xlabel('timpul,[s]','FontSize',14);ylabel('viteza,[m/s]','FontSize',14);
title(['Variatia vitezei pentru acc=',num2str(a),'m/s^2'],'FontSize',18);
text(t(20),v(20),['\leftarrow v=',num2str(v(20)),'m/s'],'FontSize',18);
Software de analiza numerica si simbolica 26
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 7
rho =
5
z =
5
theta =
0.9273
phi =
0.7854
r =
7.0711
Există două metode importante de a îmbunătăți viteza de execuție și gestiunea memoriei în codurile
sursă scrise în MATLAB:
✓ vectorizarea ciclurilor
✓ prealocarea dimensiunilor
Vectorizarea ciclului
MATLAB-ul optimizează operațiile cu vectori și matrice și în unele situații folosește algoritmi mai rapizi
decât cei uzuali. Din acest motiv atunci când este posibil, ciclurile for sau while se recomandă a fi
înlocuite cu operații vectoriale sau matriciale.
Exemplu:
tic %start cronometru
x1=0.01;
for k=1:10000
y1(k)=log10(x1);
x1=x1+0.01;
end
toc %stop cronometru
Elapsed time is 0.029637 seconds.
Software de analiza numerica si simbolica 3
Prealocarea dimensiunilor
Când ciclurile for sau while nu pot fi evitate, prealocarea dimensiunilor duce la o creștere a vitezei
de calcul și o îmbunătățire a utilizării memoriei.
Exemplu:
tic
for n=1:320
r(n)=rank(ones(n)); %functia rank calculează rangul unei matrice
end
toc
Elapsed time is 1.415834 seconds.
Explicație: fără prealocare, MATLAB-ul mărește dimensiunea tabloului r la fiecare execuție a ciclului,
ceea ce duce la micșorarea vitezei, la fragmentarea și utilizarea irațională a memoriei. Prealocarea
dimensiunii elimină acest pas de creștere a dimensiunii.
Software de analiza numerica si simbolica 4
1. Sume și produse
Suma elementelor unui vector, matrice sau tablou se realizează cu funcția sum.
Sintaxe:
Y=sum(X) dacă argumentul X este un vector funcția sum returnează un scalar egal cu suma
elementelor vectorului, iar dacă argumentul este o matrice, funcția returnează un vector linie
care conține suma elementelor pe fiecare coloană
Y=sum(X,dim) returnează suma elementelor după dimensiunea specificată (1-suma pe fiecare
coloană rezultând un vector linie care conține suma elementelor pe fiecare coloană; 2-suma pe
fiecare linie rezultând un vector coloană care conține suma elementelor pe fiecare linie; 3-suma
după dimensiunea 3 etc.)
j
Suma cumulată a elementelor unui vector, matrice sau tablou este dată de relația s j = xk ,
k =1
Sintaxe:
Y=cumsum(X) dacă argumentul X este un vector, funcția cumsum returnează un vector care
conține suma cumulată a elementelor vectorului, iar dacă argumentul este o matrice, funcția
returnează o matrice care pe fiecare coloană conține suma cumulată a elementelor din coloana
respectivă
Software de analiza numerica si simbolica 5
Exemplul 1: Să se calculeze suma, suma cumulată, produsul, produsul cumulat și diferențele succesive
ale elementelor unei matrice după dimensiunea 1.
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
S=sum(A,1)
S =
14 9 15 16
P=prod(A,1)
P =
70 16 0 108
SC=cumsum(A,1)
SC =
2 4 7 3
7 5 7 7
14 9 15 16
PC=cumprod(A,1)
PC =
2 4 7 3
10 4 0 12
70 16 0 108
DS=diff(A,1)
DS =
3 -3 -7 1
2 3 8 5
Exemplul 2: Să se calculeze vitezele medii ale unui atlet pe baza următoarelor date experimentale:
distanțele considerate: 0, 100, 300, 600, 1000, 1500, 2000, 2500, 3000 [m], la timpii:
0, 16, 47, 96, 160, 239, 319, 398, 476 [s].
d=[0 100 300 600 1000 1500 2000 2500 3000];
t=[0 16 47 96 160 239 319 398 476];
vMed=diff(d)./diff(t)
Software de analiza numerica si simbolica 7
vMed =
6.2500 6.4516 6.1224 6.2500 6.3291 6.2500 6.3291
6.4103
3. Sortarea elementelor
Sortarea elementelor unui vector, matrice sau tablou se face cu funcția sort.
Sintaxe:
Y=sort(X) dacă argumentul X este vector, funcția sortează crescător elementele sale; dacă
argumentul X este matrice, funcția sortează crescător fiecare coloană a acesteia
Y=sort(X,dim) sortează elementele crescător după dimensiunea specificată (1-sortează
elementele crescător pe fiecare coloană, 2-sortează elementele crescător pe fiecare linie, 3-
sortează după dimensiunea 3 etc.)
Y=sort(...,'tip_sortare') sortează elementele în direcția specificată, în funcție de
'tip_sortare': 'ascend' sau 'descend'
[Y,I]=sort(X...) returnează în matricea Y elementele coloanelor sortate și în matricea I
indicii elementelor sortate ale matricei X. Dacă elementele coloanei matricei se repetă (au valori
egale), indicii acestora sunt returnați în ordinea în care au fost întâlniți în matricea argument.
Obs. Pentru matrice cu elemente numere complexe, sortarea se face după valoarea modulului.
4. Maximul și minimul
Funcțiile max și min determină maximul și minimul valorilor unui vector, matrice sau tablou.
Sintaxe:
M=max(X) dacă X este vector, aceste funcții returnează un scalar egal cu cel mai mare element,
iar dacă X este matrice, funcțiile returnează un vector linie care conține elementele maxime din
fiecare coloană
m=min(X) dacă X este vector, aceste funcții returnează un scalar egal cu cel mai mic element,
iar dacă X este matrice, funcțiile returnează un vector linie care conține elementele minime din
fiecare coloană
[M,I]=max(X) determină elementele maxime și a indicelui (poziției) acestora; în vectorul M se
memorează valorile maxime, iar în vectorul I indicii acestor valori; dacă există mai multe valori
maxime identice, se reține indicele primului element maxim
[m,I]=min(X) determină elementele minime, precum și a indicelui (poziției) acestora; în
vectorul m se memorează valorile minime, iar în vectorul I indicii acestor valori; dacă există
mai multe valori minime identice, se reține indicele primului element minim
[M,I]=max(X,[],dim) determină elementele maxime, precum și a indicelui (poziției) acestora
după dimensiunea specificată (1-maximul de pe fiecare coloană, 2-maximul de pe fiecare linie, 3-
maximul după dimensiunea 3 etc.)
[m,I]=min(X,[],dim) determină elementele minime, precum și a indicelui (poziției) acestora
după dimensiunea specificată (1-minimul de pe fiecare coloană, 2-minimul de pe fiecare linie, 3-
minimul după dimensiunea 3 etc.)
C=max(A,B) creează o matrice C care conține elementele maxime din două matrice A și B,
de aceeași dimensiune
C=min(A,B) creează o matrice C care conține elementele minime din două matrice A și B, de
aceeași dimensiune
Exemplul 1: Să se determine valorile maxime și indicii acestora în cazul unui vector și ale unei matrice.
a=[2 4 7 3 5 1 0 4 7 4 8 9]
a =
2 4 7 3 5 1 0 4 7 4 8 9
[M1,I1]=max(a)
M1 =
9
I1 =
12
Software de analiza numerica si simbolica 9
[M2,I2]=max(A)
M2 =
7 4 8 9
I2 =
3 1 3 3
[M,I]=max(A,[],2)
M =
7
5
9
I =
3
1
4
Exemplul 2: Crearea a două matrice C și D care conțin elementele maxime, respectiv minime, din
două matrice A și B.
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
B=[3 2 3 1;6 1 9 3;8 3 2 2]
B =
3 2 3 1
6 1 9 3
8 3 2 2
C=max(A,B)
C =
3 4 7 3
6 1 9 4
8 4 8 9
Software de analiza numerica si simbolica 10
D=min(A,B)
D =
2 2 3 1
5 1 0 3
7 3 2 2
5. Media aritmetică
Media aritmetică a unui vector, matrice sau tablou se calculează cu funcția mean.
Sintaxe:
Y=mean(X) dacă argumentul X este un vector, funcția mean returnează un scalar egal cu media
aritmetică a elementelor vectorului, iar dacă argumentul este o matrice funcția returnează un
vector linie care conține media aritmetică a elementelor pe fiecare coloană
Y=mean(X,dim) dacă argumentul X este un tablou, funcția returnează media aritmetică a
elementelor după dimensiunea specificată (1-media pe fiecare coloană, 2-media pe fiecare linie,
3-media după dimensiunea 3 etc.)
6. Mediana
Mediana este elementul de la mijlocul unul set de date ordonat crescător sau descrescător. Dacă
numărul N al valorilor setului este impar, valoarea mediană este cea din poziția (N+1)/2, iar dacă acesta
este par, valoarea mediană este media elementelor din pozițiile (N/2) și (N/2) + 1. Se determină cu
funcția median.
Sintaxe:
Y=median(X) dacă argumentul X este un vector, funcția returnează un scalar egal cu mediana
elementelor vectorului
Y=median(X,dim) dacă argumentul X este un tablou, funcția returnează mediana elementelor
după dimensiunea specificată (1-mediana pe fiecare coloană, 2-mediana pe fiecare linie, 3-
mediana după dimensiunea 3 etc.)
7. Modulul
Modulul reprezintă valoarea termenului dintr-o serie de date care are frecvența maximă. Există serii
de date care au mai multe module. Se determină cu funcția mode.
Sintaxe:
Y=mode(X) dacă argumentul X este un vector, funcția returnează un scalar egal cu modulul
elementelor vectorului. Atunci când există mai multe valori care au aceeași frecvență absolută,
funcția returnează cea mai mică valoare
Software de analiza numerica si simbolica 11
(x − m)
2
k
2 = k =1
unde termenul ( xk − m ) reprezintă diferența sau abaterea lui xk față de valoarea medie a variabilei,
notată cu m (dacă N > 40).
Abaterea medie pătratică (abaterea standard) a unei variabile este definită ca radicalul dispersiei
variabilei respective:
N
(x − m)
2
k
= k =1
N
Dispersia de selecție se calculează cu relația:
N
(x − x)
2
k
s2 = k =1
N−1
unde termenul ( xk − x ) reprezintă diferența sau abaterea lui xk față de valoarea medie a selecției,
notată cu x (N < 40).
Abaterea medie pătratică de selecție (abaterea standard de selecție):
N
(x − x)
2
k
s= k =1
N−1
Dispersia (varianța) se calculează cu funcția var.
Sintaxe:
v=var(x,tip_dispersie) dacă argumentul x este un vector, funcția returnează un scalar care
reprezintă dispersia elementelor vectorului (dacă tip_dispersie este 1), respectiv dispersia
de selecție (dacă tip_dispersie este 0)
Software de analiza numerica si simbolica 12
Exemplu:
rez=[7.00 7.10 7.05 7.05 6.90 7.20 7.20 7.25 7.05 7.20 7.25 7.15 7.20 6.95 7.20
7.50 7.65 7.40 7.20 6.90 7.10 7.40];
Media=mean(rez,2)
Mediana=median(rez,2)
Modul=mode(rez,2)
dispSel=var(rez,0) %0==disp. de selectie
abStSel=std(rez,0)
Media =
7.1773
Mediana =
7.2000
Modul =
7.2000
dispSel =
0.0352
abStSel =
0.1875
Software de analiza numerica si simbolica 13
Exemplu: În tabelul următor sunt date rezultatele obținute de un eșantion de 9 studenți la un test
aplicat pe parcurs, respectiv nota finală la examen.
1. Să se determine media, mediana, modulul, dispersia de selecție și abaterea medie pătratică
de selecție ale variabilei test, respectiv notă finală
2. Să se afle dacă rezultatele obținute de cei 9 studenți la testul aplicat pe parcurs au influențat
notele lor finale la examen
Software de analiza numerica si simbolica 14
abaterea =
85.8455 1.5000
R =
1.0000 0.9740
0.9740 1.0000
Polinomul este o funcție de o singură variabilă, care poate fi exprimat sub următoarea formă generală:
p ( x ) = a1x +a2x
n n-1 2
+...+an-1x +anx +an+1
1. Evaluarea polinoamelor
În MATLAB există mai multe metode pentru evaluarea polinoamelor. Vor fi exemplificate, cu
polinomul:
a) Evaluarea cu scalari, adică pentru o singură valoare a variabilei. În acest caz se efectuează
operațiile cu scalari
Exemplu: Evaluarea polinomului p pentru x=1
x=1;
p=x^4+2*x^2+0.5*x-6.5
p =
-3
b) Evaluarea polinomului în mai multe puncte. În acest caz se efectuează operații cu tablouri
(matrice sau vectori). Programul se execută mai rapid decât ansamblul calculelor pentru fiecare
valoare scalară în parte. Sintaxa evaluării presupune în acest caz plasarea unui punct înaintea
operatorilor înmulțire, împărțire sau ridicare la putere. Dimensiunea matricei în care se
returnează valorile polinomului este identică cu cea a matricei care conține punctele în care se
face evaluarea
Exemplu: Evaluarea polinomului p pentru x=-2, 0, 0.5, 1, 3
x=[-2 0 0.5 1 3];
p=x.^4+2*x.^2+0.5*x-6.5
p =
16.5000 -6.5000 -5.6875 -3.0000 94.0000
c) Evaluarea polinomului în unul sau mai multe puncte utilizând funcția polyval
Se apelează cu sintaxa:
Y=polyval(p,X)
h=p1-p2
h =
1.0000 0 -1.0000 2.5000 -11.5000
u=conv(p1,p2)
u =
3.0000 -2.0000 11.0000 -2.5000 -10.5000 15.5000 -32.5000
[v,r]=deconv(p1,p2)
v =
0.3333 0.2222 0.2593
r =
0 0 0 -0.0926 -7.7963
Apelată cu sintaxa:
d=polyder(a,b)
d(x)= ( a ( x ) b ( x ) ) = a ( x ) b ( x ) + a ( x ) b ( x )
Apelată cu sintaxa:
[m,n]=polyder(a,b)
m (x) a ( x ) a ( x ) b ( x ) -a ( x ) b ( x )
= =
n (x) b(x) b(x)
2
Exemplu: Se consideră polinoamele: p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5 . Să se calculeze
coeficienții derivatelor polinoamelor p1 și p2, ai produsului p1∙p2, respectiv ai numărătorului și
numitorului raportului p1/p2.
p1=[1 0 2 0.5 -6.5]; p2=[3 -2 5];
d1=polyder(p1)
d1 =
4.0000 0 4.0000 0.5000
d2=polyder(p2)
Software de analiza numerica si simbolica 19
d2 =
6 -2
d3=polyder(p1,p2)
d3 =
18.0000 -10.0000 44.0000 -7.5000 -21.0000 15.5000
[m,n]=polyder(p1,p2)
m =
6.0000 -6.0000 20.0000 -5.5000 59.0000 -10.5000
n =
9 -12 34 -20 25
unde: p este vectorul linie al coeficienților polinomului în ordinea descrescătoare a puterilor variabilei
k este constanta de integrare (fără k constanta de integrare este 0)
Exemplu: Să se calculeze integrala polinoamelor p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5 .
p1=[1 0 2 0.5 -6.5]; p2=[3 -2 5];
in1=polyint(p1)
in1 =
0.2000 0 0.6667 0.2500 -6.5000 0
in2=polyint(p2,2)
in2 =
1 -1 5 2
Exemplu: Să se găsească rădăcinile polinoamelor: p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5 .
p1=[1 0 2 0.5 -6.5];p2=[3 -2 5];
r1=roots(p1)
r1 =
0.0456 + 1.9345i
0.0456 - 1.9345i
-1.3640
1.2727
r2=roots(p2)
r2 =
0.3333 + 1.2472i
0.3333 - 1.2472i
Funcțiile roots și poly sunt funcții reciproce, realizând trecerea de la coeficienți la rădăcini, respectiv
de la rădăcini la coeficienți.
Software de analiza numerica si simbolica 21
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 8
INTERPOLAREA DATELOR
Interpolarea unui set discret de perechi de date experimentale (xk,yk) presupune determinarea
unei funcții f(x) astfel ca f(xk) = yk, în vederea estimării setului de date în orice alt punct
xi ≠ xk. Interpolarea răspunde la nevoia de a găsi o estimare a valorilor yi în punctele xi pentru
care nu s-a realizat experimentul.
Spre exemplu, fie punctele de coordonate (x1,y1) și (x2,y2) care au fost stabilite experimental; se
cere estimarea valorii f(xi) = yi, unde x1 < xi < x2 (valoarea xi nu a fost inclusă în experiment,
deci valoarea yi nu se cunoaște). Dacă punctele sunt unite printr-o dreaptă, interpolarea se numește
liniară, iar dacă sunt unite printr-un polinom, interpolarea se numesște spline.
Extrapolarea reprezintă estimarea unei valori f(xe) = ye, unde xe se află în afara intervalului
valorilor din experiment (xmin,xmax).
Principalele funcții MATLAB pentru interpolarea datelor sunt:
Exemplul 1: Cunoscând evoluția populației unui oraș între anii 1920 și 2010, din 10 în 10 ani, să se
estimeze prin toate metodele evoluția anuală a populației între anii 1900 și 2030. Să se estimeze
populația din anii 1917 și 2043 prin metoda 'pchip'.
x=1920:10:2010;
y=[75995 91972 105711 123203 131669 150697 179323 203212 226505 249633];
xi=1900:2030;
y1i=interp1(x,y,xi,'nearest','extrap');
y2i=interp1(x,y,xi,'linear','extrap');
y3i=interp1(x,y,xi,'spline','extrap');
y4i=interp1(x,y,xi,'pchip','extrap');
plot(x,y,'o',xi,y1i,xi,y2i,xi,y3i,xi,y4i);grid;
legend('date','nearest','linear','spline','pchip','Location','EastOutside');
y5i=interp1(x,y,[1917,2043],'pchip','extrap')
y5i =
1.0e+005 *
0.7078 3.2477
Exemplul 2: Să se reprezinte grafic o interpolare liniară și spline prin șase puncte date, pe o rețea de 10
ori mai "fină".
Software de analiza numerica si simbolica 3
x=[0 1 2 3 4 5];
y=[0.0 20.0 60.0 68.0 77.0 110.0];
xi=0:0.1:5;
yil=interp1(x,y,xi,'linear');
yis=interp1(x,y,xi,'spline')
plot(x,y,'o',xi,yil,xi,yis);grid;title('Interpolare liniara vs. spline')
Exemplul 1: Să se interpoleze datele din tabelul bidimensional pentru valorile x=1:9, y=1:10. Să se
estimeze valoarea lui z pentru x=3.72 și y=5.68.
x 1 2 5 9
y
1 2 6 7 5
3 3 4 8 6
10 4 6 9 5
x=[1 2 5 9];
y=[1 3 10]';
Z=[2,6,7,5;3,4,8,6;4,6,9,5];
xi=1:9;
yi=[1:10]';
Zil=interp2(x,y,Z,xi,yi,'linear');
surf(x,y,Z);hold on;surf(xi,yi,Zil+25);
Zil=interp2(x,y,Z,3.72,5.68,'linear')
Zil =
6.8395
Zis=interp2(x,y,Z,3.72,5.68,'spline')
Zis =
5.7064
Software de analiza numerica si simbolica 5
APROXIMAREA DATELOR
O altă modalitate de prelucrare a unui set de date este aproximarea cu o funcție care constituie "cea
mai bună aproximare". În acest caz nu este neapărat necesar ca funcția determinată să treacă prin
toate punctele date, însă aceasta trebuie să reprezinte "cea mai bună aproximare într-un anumit
sens” (după un anumit criteriu de eroare impus). De exemplu, metoda celor mai mici pătrate
furnizează cea mai bună aproximare în sensul minimizării pătratului distanțelor dintre punctele date
și funcția de aproximare. Pentru ca aproximarea să fie considerată "cea mai bună", suma pătratelor
distanțelor de la fiecare punct al setului de date la curba de aproximare (linie sau polinom) trebuie
să fie minimă. Cu această condiție este posibil ca nici un punct al setului de date să se găsească pe
curba de aproximare. Acest aspect diferențiază clar aproximarea datelor de interpolarea datelor, în
cazul căreia toate punctele sunt situate pe curba de interpolare.
Software de analiza numerica si simbolica 6
Exemplu: Să se aproximeze în sensul celor mai mici pătrate cu o regresie liniară setul de date:
x=[0 1 2 3 4 5];y=[0.0 20.0 60.0 68.0 77.0 110.0];
p=polyfit(x,y,1);
y1=polyval(p,x);
plot(x,y1,x,y,'o');grid
Software de analiza numerica si simbolica 7
Regresia polinomială
Regresia polinomială reprezintă aproximarea unui set de date cu N valori printr-un polinom de grad n:
a) dacă gradul polinomului n = N – 1 (unde N este numărul de valori ale setului de date), toate
valorile setului se vor afla pe curba de "aproximare"
b) pentru n < N – 1, aproximarea este cu atât mai bună cu cât gradul polinomului este mai
apropiat de N – 1
c) pentru n > N – 1, aproximarea poate conduce la erori de aproximare considerabile; în acest
caz Matlab-ul va da un mesaj de eroare
Exemplu: Aproximați în sensul celor mai mici pătrate următorul set de date experimentale:
x=[0 0.5 1 1.5 2 2.5 3 3.5 4];
y=[-4.51 -0.466 1.417 1.046 -1.207 0.342 1.630 2.364 7.035];
p3=polyfit(x,y,3);
xi=0:0.01:4;
p3=polyfit(x,y,3);
poli3=polyval(p3,xi);
p6=polyfit(x,y,6);
poli6=polyval(p6,xi);
p8=polyfit(x,y,8);
poli8=polyval(p8,xi);
plot(x,y,'o',xi,poli3,xi,poli6,xi,poli8);grid;
legend('date','polinom grd.3','polinom grd.6','polinom grd.8',
'Location','NorthEastOutside');
Software de analiza numerica si simbolica 8
Exemplu: În urma unui studiu experimental privind influența vitezei de așchiere, v [m/min] și
avansului, s [mm/rot] pentru o adâncime de așchiere de ap = 2mm asupra forței principale de așchiere
Fz [N] au rezultat următoarele rezultate:
Software de analiza numerica si simbolica 9
Vectorii v și s, respectiv matricea Fz sunt definiți în prealabil într-un fișier de tip script care se
salvează cu numele dateAschiere în care apelăm și instrumentul cftool.
%Fisierul script care contine datele experimentale la aschire
%viteza
v=[10 20 30 40 50 60 80 100 130];
%avansul
s=[0.125 0.195 0.285 0.390 0.490 0.750]';
%forta de aschiere
Fz=10^3*[1.6 1.0 0.9 1.0 1.1 1.0 1.1 1.1 1.1;2.0 1.5 1.3 1.3 1.3 1.4 1.5 1.7
1.8;...
2.8 2.1 2.0 2.2 2.5 2.7 2.5 2.2 2.1;3.2 2.8 2.7 2.9 3.0 3.2 2.9 2.7
2.8;...
4.0 3.5 3.9 4.0 4.1 4.0 3.5 3.6 3.6;5.9 5.2 5.7 5.2 5.1 5.0 4.9 4.8 4.8];
%apelarea instrumentului pentru aproximarea datelor
cftool(v,s,Fz)
Software de analiza numerica si simbolica 10
Se deschide implicit aproximarea de tip Interpolant. Putem alege din metodele Custom Equation,
Interpolant (default), Lowess și Polynomial.
Software de analiza numerica si simbolica 11
Alegem metoda Polynomial. Pe baza variației forței principale de așchiere Fz în funcție de viteza
de așchiere v și avansul sculei s, putem încerca aproximarea acesteia cu un polinom de gradul 2 în
cazul ambelor variabile.
Rezultatul aproximării:
Acum putem crea o funcție care să aproximeze forța principală de așchiere Fz:
function [Fz]=functieAproxFz(v,s)
%Estimeaza forta principala de aschiere Fz pentru o adancime de aschiere de
2mm
if nargin~=2
error('Numarul de argumente de intrare trebuie sa fie 2')
end
p00=-16.7;
p10=-2.529;
p01=9403;
p20=0.03547;
p11=-12.6;
p02=-2339;
Fz=p00+p10*v+p01*s+p20*v.^2+p11*v.*s+p02*s.^2;
end
Software de analiza numerica si simbolica 13
Fz =
4.2405e+03
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 9
Funcțiile folosite în problemele de găsire a valorilor minime și zero ale funcțiilor sunt:
fminbnd
Găsește minimul absolut al funcțiilor de o singură variabilă
reală supuse la constrângeri
fminsearch
Găsește un minim local al funcțiilor de mai multe variabile
reale nesupuse la constrângeri
fmincon
Găsește un minim local al funcțiilor de mai multe variabile
reale supuse la constrângeri
fzero Găsește zeroul funcțiilor de o singură variabilă reală
3. fminbnd prezintă adesea convergență lentă atunci când soluția coincide cu una din limitele
intervalului x1 sau x2
Software de analiza numerica si simbolica 2
Exemplul 1:
1. definirea funcției pentru care dorim să găsim minimul absolut:
function [f]=functieDeMinimizat(x)
f=0;
for k=-10:10
f=f+(k+1)^2*cos(k*x)*exp(-k^2/2);
end
1.5
0.5
-0.5
A minim
-1
1 1.5 2 2.5 3 3.5 4 4.5 5
1.5
0.5
minim absolut
-0.5
0 2 4 6 8 10 12 14
-1
-2 minim absolut
0 2 4 6 8 10 12 14
optimset('Display','iter','TolX',1e-12))
Func-count x f(x) Procedure
1 4.43769 0.397239 initial
2 6.56231 0.998498 golden
3 3.12461 2.72546 golden
Software de analiza numerica si simbolica 4
12
10
minim absolut
0
1 2 3 4 5 6 7 8 9 10
2. Găsirea unui minim local al funcțiilor de mai multe variabile reale nesupuse la constrângeri
Se utilizează funcția fminsearch
Sintaxe:
[X,Fmin]=fminsearch(@numeFunctie,X0) returnează valorile xi (i=1...n) în vectorul X,
pentru care funcția numeFunctie(x1,x2,...,xn) prezintă un minim local și valoarea
minimului local al funcției, Fmin; X0 reprezintă valoarea de start a căutării (X0 poate fi
Software de analiza numerica si simbolica 5
scalar, vector sau matrice); numeFunctie este numele fișierului .m în care a fost definită
funcția pentru care se caută un minim local
[X,Fmin]=fminsearch(@numeFunctie,X0,optimset('optiuni')) opțiuni disponibile:
Display, FunValCheck, MaxFunEval, MaxIter, OutputFcn, PlotFcns, TolFun, TolX,
(vezi help-ul pentru funcția optimset)
[X,Fmin,exitflag]=fminsearch(...) vezi help-ul
[X,Fmin,exitflag,output]=fminsearch(...) vezi help-ul
Observații:
1. fminsearch se bazează pe algoritmul simplex (metodă iterativă în care se pleacă de la o soluție
admisibilă inițială și se construiesc alte soluții până când se găsește un minim local)
2. În Matlab variabilele vor fi notate cu x(1), x(2), x(3), ...
2.5
1.5
0.5
minim local 2
0
2
a
Exemplul 2: Să se găsească minimul local pentru funcția F ( x,y,z ) = y - x a1 + 2 + ( z2 + x ) în jurul
2
z
punctelor x=0, y=0, z=0 pentru a1=3 și a2=2 (funcția este de 3 variabile și depinde de 2
parametri).
Conform notației din Matlab, vom nota variabila x cu x(1), variabila y cu x(2), respectiv variabila z
cu x(3).
a1=3;
a2=2;
X0=[0,0,0];
[X,Fmin]=fminsearch(@(x) (x(2)-x(1)^a1+a2/x(3))^2+(x(3)^2+x(1))^2,X0)
X =
-1.0658 -3.1480 1.0324
Fmin =
4.4605e-013 → 0
3. Găsirea unui minim local al funcțiilor de mai multe variabile reale supuse la constrângeri
Găsește vectorul X=[x1,x2,…,xn] care definește minimul local al unei funcții de mai multe variabile
f(X) supusă la:
Minimul unei funcții de mai multe variabile supuse la constrângeri se găsește cu funcția fmincon.
Sintaxe:
[X,Fmin]=fmincon(@numeFunctie,X0) returnează vectorul care conține valorile X ale
variabilelor pentru care funcția prezintă un minim local și valoarea minimului local Fmin al
funcției numeFunctie nesupusă la restricții; X0 reprezintă valoarea de start a căutării
[X,Fmin]=fmincon(@numeFunctie,X0,A,b) returnează vectorul care conține valorile X ale
variabilelor pentru care funcția prezintă un minim local și valoarea minimului local Fmin al
funcției numeFunctie supusă doar la restricții liniare de tip inegalitate A∙x≤b
[X,Fmin]=fmincon(@numeFunctie,X0,A,b,Aeq,beq) returnează vectorul care conține
valorile X ale variabilelor pentru care funcția prezintă un minim local și valoarea minimului local
Fmin al funcției numeFunctie supusă și la restricții liniare de tip egalitate Aeq∙x=beq (se
setează A=[] și b=[] în cazul în care nu există restricții liniare de tip inegalitate)
[X,Fmin]=fmincon(@numeFunctie,X0,A,b,Aeq,beq,LB,UB) returnează vectorul care conține
valorile X ale variabilelor pentru care funcția prezintă un minim local și valoarea minimului local
Fmin al funcției numeFunctie supusă și la constrângeri de mărginire LB x UB (se setează
A=[] și b=[] în cazul în care nu există restricții liniare de tip inegalitate; se setează Aeq=[] și
beq=[] în cazul în care nu există restricții liniare de tip egalitate)
[X,Fmin]=fmincon(@numeFunctie,X0,A,b,Aeq,beq,LB,UB,constrNelFunctie) returnează
vectorul care conține valorile X ale variabilelor pentru care funcția prezintă un minim local și
valoarea minimului local Fmin al funcției numeFunctie supusă și la constrângeri neliniare de
tip inegalitate și/sau egalitate care se scriu într-o funcție constrNelFunctie.m având
argumentul de intrare vectorul variabilelor X și argumente de ieșire vectorii c și ceq (se
setează A=[] și b=[] în cazul în care nu există restricții liniare de tip inegalitate; se setează
Aeq=[] și beq=[] în cazul în care nu există restricții liniare de tip egalitate; se setează LB=[]
și UB=[] în cazul în care nu există constrângeri de mărginire)
[X,Fmin]=fmincon(@numeFunctie,X0,A,b,Aeq,beq,LB,UB,constrNelFunctie,options)
returnează vectorul care conține valorile X ale variabilelor pentru care funcția prezintă un minim
local și valoarea minimului local Fmin al funcției numeFunctie cu parametrii de optimizare
implicite înlocuite cu valorile din structura options; se utilizează optimoptions pentru a seta
aceste opțiuni (se setează A=[] și b=[] în cazul în care nu există restricții liniare de tip
Software de analiza numerica si simbolica 8
inegalitate; se setează Aeq=[] și beq=[] în cazul în care nu există restricții liniare de tip
egalitate; se setează LB=[] și UB=[] în cazul în care nu există constrângeri de mărginire; se
setează constrNelFunctie=[] în cazul în care nu există constrângeri neliniare de tip inegalitate
sau egalitate)
[X,Fmin,exitflag]=fmincon(...) returnează exitflag (vezi help-ul)
[X,Fmin,exitflag,output]=fmincon(...) vezi help-ul
( )
Exemplu: Să se găsească minimul funcției F ( x,y ) = ex 4 x 2 + 2 y2 + 4 x y + 2 y + a1 , cu variabilele
x și y reale, supusă la următoarele constrângeri:
−x y − a2 0
X =
-9.5473 1.0474
Fmin =
0.0236
-5.5511e-017 → 0
Software de analiza numerica si simbolica 10
1.5
0.5
0 zero
-0.5
0 2 4 6 8 10 12 14
2.9190e-012 → 0
2
1.5
0.5
0 zero
-0.5
0 2 4 6 8 10 12 14
1.3323e-015 → 0
Software de analiza numerica si simbolica 11
1.0533e+015→ inf
2. Comanda fzero definește un zero ca un punct în care funcția traversează axa x. Punctele în care
funcția este doar tangentă la axa x, nu sunt zerouri valabile. Pentru funcții cu zero nevalabil, fzero
rulează până când Inf, Nan, sau o valoare complexă este detectată
Exemplul 4:
x=fzero(@(x) x^2,1)
Exiting fzero: aborting search for an interval containing a sign change because
NaN or Inf function value encountered during search.
(Function value at -1.7162e+154 is Inf.)
Check function or try again with a different starting value.
x =
NaN
9
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 10
În calcule inginerești se utilizează frecvent expresii simbolice. MATLAB-ul folosește Symbolic Math
Toolbox care conține un grup de instrumente matematice simbolice folosit pentru crearea și
operarea cu expresii matematice simbolice. Acesta conține sute de funcții simbolice MATLAB
utilizate pentru derivare, integrare, simplificări, transformări, rezolvări de ecuații și sisteme de
ecuații, inclusiv diferențiale etc.
Calculul simbolic operează cu obiecte simbolice: variabile, matrice și expresii simbolice.
1. Definirea variabilelor
Variabilele simbolice pot fi definite în două moduri:
cu funcția sym este definit un număr, variabilă și obiect simbolic, iar cu funcția syms pot fi
definite mai multe numere, variabile și obiecte simbolice
orice variabilă care primește ca valoare o expresie simbolică prin folosirea operatorului =
devine o variabilă simbolică
A. Funcția sym poate fi apelată cu una din sintaxele:
Sintaxa v=sym('v') creează variabila simbolică v:
x=sym('x')
Funcția assumptions verifică mulțimea căreia îi aparține una sau mai multe variabile:
assumptions(z)
ans =
0 < z
assumptions([u w])
ans =
[ in(u, 'integer'), in(w, 'rational')]
Sintaxa sym('v','clear') șterge ipoteza stabilită anterior pentru variabila simbolică v (real,
positive, integer, rational):
sym('y','clear')
Funcția assume(v,'set') setează faptul că variabila simbolică v definită anterior aparține unei
mulțimi (set poate fi real, positive, integer, rational):
Software de analiza numerica si simbolica 2
y=sym('y');
assume(y,'integer')
assumptions(y)
ans =
in(y, 'integer')
Sintaxa assume(v,'clear') șterge ipoteza stabilită anterior pentru variabila simbolică v (real,
positive, integer, rational):
assume([y,'clear')
Funcția isAlways(AM) testează (verifică) o afirmație matematică (dacă afirmația este adevărată
returnează 1, dacă este falsă returnează 0):
Exemple:
x=sym('x');
assume(x>2)
assumeAlso(x<10)
isAlways(sqrt(x)<4)
ans =
1
Sintaxa Sim=sym(Num,'flag') convertește un scalar, vector sau matrice numerică Num la forma
simbolică Sim, argumentul flag specificând tehnica de conversie a numerelor în virgulă mobilă
folosind una dintre următoarele caractere: r, d, f:
a. r vine de la "rațional" care reprezintă opțiunea implicită (default):
Software de analiza numerica si simbolica 3
a=sym(1/3,'r')
a =
1/3
b=sym(1+sqrt(5),'r')
b =
910872158600853/281474976710656
b. d vine de la "decimal" = zecimală: numărul de cifre este definit de setarea curentă a cifrelor
utilizate de către vpa (Variable-precision arithmetic); utilizarea a mai puțin de 16 cifre
poate duce la o pierdere oarecare a acurateței, în timp ce mai mult de 16 cifre ar putea să fie
nejustificată:
digits(10);
sym(1/3,'d')
ans =
0.3333333333
digits(20);
sym(1/3,'d')
ans =
0.33333333333333331483
c. f vine de la "floating-point":
sym(pi,'f')
ans =
3.141592654
Sintaxa M=sym('M',dim) creează un tablou având elemente de tip simbolic. Numele elementelor
generate ale unui vector utilizează forma vk, iar cele ale unei matrice utilizează forma Mi_j.
a=sym('a',[1 5])
a =
[ a1, a2, a3, a4, a5]
A=sym('A',[2,3])
A =
[ A1_1, A1_2, A1_3]
[ A2_1, A2_2, A2_3]
Sintaxa M=sym('M%d%d',dim) specifică forma Mij pentru numele elementelor unei matrice:
B=sym('B%d%d',[2 3])
B =
[ B11, B12, B13]
[ B21, B22, B23]
Software de analiza numerica si simbolica 4
a=sym('a',[1 5],'real');
assumptions(a)
ans =
[ in(a1, 'real'), in(a2, 'real'), in(a3, 'real'), in(a4, 'real'), in(a5,
'real')]
B=sym('B%d%d',[2 3],'positive');
assumptions(B)
ans =
[ 0 < B21, 0 < B11, 0 < B22, 0 < B12, 0 < B23, 0 < B13]
Funcția assume(M,'set') stabilește faptul că toate elementele matricei M aparțin mulțimii set
(set poate fi real, positive, integer, rational), unde M este un vector sau o matrice
simbolică definită anterior:
B=sym('B%d%d',[2 3]);
assumptions(B)
ans =
Empty sym: 1-by-0
assume(B,'positive')
assumptions(B)
ans =
[ 0 < B21, 0 < B11, 0 < B22, 0 < B12, 0 < B23, 0 < B13]
Pentru a afișa o expresie simbolică într-un format apropiat de cel din matematică se utilizează funcția
pretty(Sim) al cărei parametru de intrare este chiar expresia simbolică:
pretty(A)
/ 1, 2, 3 \
| |
\ 4, 5, 6 /
x=sym('x');
y=sym('y');
f=sym('f(x,y)')
f =
f(x, y)
Software de analiza numerica si simbolica 5
Sintaxa syms v1 ... vN set creează variabile simbolice v1 ... vN și afirmă că acestea aparțin
mulțimii set (set poate fi real, positive, integer, rational):
syms x y z real
Sintaxa syms v1 ... vN clear elimină ipotezele stabilite anterior pentru variabile simbolice
v1 ... vN:
syms x y z clear
varianta 2: syms x a b c d
f=sym('a*x^3+b*x^2+c*x+d')
f =
a*x^3 + b*x^2 + c*x + d
Software de analiza numerica si simbolica 6
varianta 2: x=sym('x','real');
y=sym('y','real');
z=x+i*y
z =
x + y*i
În expresiile cu variabile complexe pot fi utilizate funcțiile matematice standard: real, imag,
conj, abs etc.
5. Substituții
Există situații când se impune înlocuirea variabilelor simbolice cu altele, sau să atribuim acestora
valori numerice, în acest caz, expresiile simbolice fiind evaluate la valoarea numerică
corespunzătoare.
Aceste substituții ale variabilelor simbolice se fac cu funcția subs.
Sintaxe:
subs(expresie_simbolica,{var_simbolice_substituite},{var_simbolice_noi})
subs(expresie_simbolica,{var_simbolice_substituite},{val_numerice})
Exemple:
syms t y
g=t+y
syms a
h=subs(g,{t},{a})
Software de analiza numerica si simbolica 7
h =
a + y
syms t y
g=t+y;
syms a b
h=subs(g,{t},{a,b})
h =
[ a + y, b + y]
syms t y
g=t+y+1
h=subs(g,{t},{2,3})
h =
[ y + 3, y + 4]
syms x y z
f=x+y+z;
syms u v
g=subs(f,{x,y},{u,v})
g =
u + v + z
syms x y z
f=x+y+z
g=subs(f,{x,y},{1,[4,5]})
g =
[ z + 5, z + 6]
Funcția double(S) convertește valoarea simbolică S într-o valoare numerică în dublă precizie.
syms x y
f=x^2-6*log(y)+7;
g=subs(f,{x,y},{5,10})
gNum=double(g)
g =
32 - 6*log(10)
gNum =
18.1845
8. Dezvoltări și simplificări
Funcția expand aplică dezvoltarea polinoamelor, funcțiilor exponențiale, logaritmice,
trigonometrice.
Sintaxa: E=expand(S)
Tabelul 1. Câteva exemple
S expand(S)
a*(x+y) a*x+a*y
a*(x-y) a*x–a*y
a^(x+y) a^x*a^y
a^(x-y) a^x/a^y
exp(a+b) exp(a)*exp(b)
exp(a-b) exp(a)/exp(b)
log(x*y) log(x)+log(y)
log(x/y) log(x)–log(y)
log(a^y) y*log(a)
sin(a+b) sin(a)*cos(b)+cos(a)*sin(b)
sin(2*asin(a)) 2*a*(1-a^2)^(1/2)
Software de analiza numerica si simbolica 9
Funcția simplify realizează aducerea la o formă mai simplă a polinoamelor, funcțiilor exponențiale
și logaritmice, funcțiilor trigonometrice.
Sintaxa: R=simplify(S)
Tabelul 2. Câteva exemple
S simplify(S)
sin(x)^2+cos(x)^2 1
a^x*a^y a^(x+y)
a^x/a^y a^(x-y)
exp(a)*exp(b) exp(a+b)
exp(a)/exp(b) exp(a–b)
exp(log(x)) x
log(exp(x) x
x 2 + 5x + 6
Exemplu. Să se aducă la o formă mai simplă expresia
x +2
syms x
r=simplify((x^2 + 5*x + 6)/(x + 2))
r =
x + 3
./ C=A./B Cij=Aij/Bij
.\ C=A.\B Cij=Bij/Aij
.^ C=A.^B Cij=Aij^Bij
a 0 a b
Exemplul 2. Să se definească matricele simbolice , . Să se calculeze suma și produsul
c d c 0
lor.
syms a b c d
M1=[a 0;c d]
Software de analiza numerica si simbolica 11
M2=[a b;c 0]
S=M1+M2
P=M1*M2
M1 =
[ a, 0]
[ c, d]
M2 =
[ a, b]
[ c, 0]
S =
[ 2*a, b]
[ 2*c, d]
P =
[ a^2, a*b]
[ a*c + c*d, b*c]
a + i b b
Exemplul 3. Să se definească matricea simbolică cu elemente complexe și să se
c d − i c
calculeze determinantul, inversa și conjugata acesteia.
syms a b c d real
M=[a+i*b b;c d-i*c]
det_M=det(M)
inv_M=inv(M)
conj_M=conj(M)
M =
[ a + b*i, b]
[ c, d - c*i]
det_M =
a*d - a*c*i + b*d*i
inv_M =
[ -(c*i - d)/(a*d - a*c*i + b*d*i), -b/(a*d - a*c*i + b*d*i)]
[ -c/(a*d - a*c*i + b*d*i), (a + b*i)/(a*d - a*c*i + b*d*i)]
[ a - b*i, b]
[ c, d + c*i]
Software de analiza numerica si simbolica 12
( )
Exemplul 3. Să se calculeze limitele laterale ale funcției h(x) = 1/ x2 + x -2 în punctul x=1.
syms x real
h=1/(x^2+x-2);
[limit(h,x,1,'left'), limit(h,x,1,'right')]
ans =
[ -Inf, Inf]
Sintaxe:
diff(expr,v,n) calculează derivata de ordinul n, respectiv derivata parțială de ordinul n
pentru o funcție de mai multe variabile, a expresiei simbolice expr în raport cu variabila v
diff(expr,v1,v2,...) calculează derivata parțială mixtă în raport cu variabilele v1,v2,...
Exemplul 1. Să se determine derivata de ordinul întâi a funcției f(x) = tg(2∙x).
syms x real
f=tan(2*x);
f_prim=diff(f,x,1)
f_prim =
2*tan(2*x)^2 + 2
Exemplul 2. Să se determine derivatele parțiale de ordinul doi și derivata parțială mixtă a funcției
g(x,y) = x ∙ cos(y) - y ∙ cos(x).
syms x y real
g=x*cos(y)-y*cos(x);
g_sec_x=diff(g,x,2) %derivata partiala de ordinul 2 in raport de x
g_sec_y=diff(g,y,2) %derivata partiala de ordinul 2 in raport de y
g_part_xy=diff(g,x,y) %derivata partiala mixta in raport de x si y
g_sec_x =
y*cos(x)
g_sec_y =
-x*cos(y)
g_part_xy =
sin(x) - sin(y)
x3 xy
Exemplul 3. Să se calculeze derivatele parțiale de ordinul 1 ale matricei simbolice M =
log(x) y
x
(derivata unei matrice simbolice este matricea obținută prin derivarea fiecărui element).
syms x y real
M=[x^3 x^y;log10(x) y/x]
M_prim_x=diff(M,x,1)
M_prim_y=diff(M,y,1)
M =
[ x^3, x^y]
[ log(x)/log(10), y/x]
Software de analiza numerica si simbolica 14
M_prim_x =
[ 3*x^2, x^(y - 1)*y]
[ 1/(x*log(10)), -y/x^2]
M_prim_y =
[ 0, x^y*log(x)]
[ 0, 1/x]
Calculul integralelor care depind de un parametru. Fie o funcție care depinde de un parametru. Dacă
parametrul este un număr real, pozitiv sau întreg, el trebuie declarat.
e
− ax2
Exemplul 5. Să se calculeze integrala definită dx , unde a>0.
−
syms x real
syms a positive
f=exp(-a*x^2);
r=int(f,x,-Inf,Inf)
r =
pi^(1/2)/a^(1/2)
k −1 n n
Exemplul 1. Să se calculeze sumele s1 = (k + 1) , s2 = (k + 1) și s3 = (k + 1) . Calculați ultimele
2
0 k =1 k =1
syms k n positive
s1=symsum(k+1,k)
pretty(s1)
s2=symsum(k+1,k,1,n)
pretty(s2)
subs(s2,n,100)
s3=symsum((k+1)^2,k,1,n)
pretty(s3)
subs(s3,{n},{100})
s1 =
k^2/2 + k/2
2
k k
-- + -
2 2
s2 =
n + (n*(n + 1))/2
n (n + 1)
n + ---------
2
ans =
5150
s3 =
((2*n + 3)*(n + 1)*(n + 2))/6 - 1
(2 n + 3) (n + 1) (n + 2)
------------------------- - 1
6
ans =
348550
syms k positive
s2=symsum(k+1,k,1,100)
s3=symsum((k+1)^2,k,1,100)
s2 =
5150
Software de analiza numerica si simbolica 17
s3 =
348550
Observație: funcția double(x) returnează valoarea de precizie dublă pentru x. Dacă x este deja
un scalar, vector sau matrice de precizie dublă, double nu are efect.
3x + y = 2
Exemplul 3. Să se rezolve sistemul neliniar de ecuații , x,y
4x + 5xy = 1
syms x y real
s=solve(3*x+y==2,4*x+5*x*y==1,x,y)
s =
x: [2x1 sym]
y: [2x1 sym]
s.x
s.y
ans =
34^(1/2)/15 + 7/15
7/15 - 34^(1/2)/15
ans =
3/5 - 34^(1/2)/5
34^(1/2)/5 + 3/5
x=double(s.x)
y=double(s.y)
x =
0.8554
0.0779
y =
-0.5662
1.7662
x + ay + b = 0
Exemplul 4. Să se rezolve sistemul de ecuații cu parametri: , x,y,a,b
y + bx + a = 0
syms x y a b real
s=solve(x+a*y+b==0,y+b*x+a==0,x,y)
x=s.x
y=s.y
s =
x: [1x1 sym]
y: [1x1 sym]
x =
Software de analiza numerica si simbolica 19
(- a^2 + b)/(a*b - 1)
y =
(- b^2 + a)/(a*b - 1)
y
x = ln z + 1
Exemplul 5. Să se rezolve sistemul neliniar de trei ecuații: y = 0,4 + z2 − 2x 2 , x,y,z
xy
z = 2 +
20
syms x y z real
s=solve(x==log(y/z)+1,y==0.4+z^2-2*x^2,z==2+x*y/20,x,y,z)
x=double(s.x)
y=double(s.y)
z=double(s.z)
s =
x: [1x1 sym]
y: [1x1 sym]
z: [1x1 sym]
x =
3.5093
y =
-21.2451
z =
-1.7278
Fie ecuația diferențială ordinară de ordinul întâi f ( x,y(x),y'(x) ) = 0 , unde x este variabila
independentă, iar y(x) este funcția necunoscută. Soluția generală a acestei ecuații diferențiale
depinde de o singură constantă arbitrară C. Dacă ne interesează o soluție a ecuației diferențiale care
la valoare inițială x0 trece prin punctul y0, constanta C ia valoarea y0.
În continuare vom presupune că soluția ecuației diferențiale există. În funcție de proprietățile
funcției f, soluția poate să fie unică sau nu.
Rezolvarea ecuațiilor diferențiale ordinare se face cu funcția dsolve care poate rezolva ecuații și
sisteme de ecuații diferențiale ordinare de ordinul întâi și de ordin superior.
Notații:
funcția necunoscută este notată cu y(x)
derivata este notată cu diff(y,n), unde n este ordinul derivatei funcției y
condițiile inițiale și/ sau condițiile la limită, dacă există, au forma y(xi), Dy(xi),
D2y(xi),…, D(n-1)y(xi)
Software de analiza numerica si simbolica 20
Sintaxe:
dsolve(eq) rezolvă simbolic ecuația diferențială ordinară eq fără condiții inițiale
dsolve(eq1,eq2,...) rezolvă simbolic sistemul de ecuații diferențiale ordinare eq1,eq2,...
fără condiții inițiale
dsolve(eq,cond1,cond2,...) rezolvă simbolic ecuația diferențială ordinară eq, cu condițiile
inițiale și/sau condițiile la limită cond1,cond2,...
dsolve(eq1,eq2,...,cond1,cond2,...) rezolvă simbolic ecuațiile diferențiale ordinare
eq1,eq2,..., cu condițiile inițiale și/sau condițiile la limită cond1,cond2,...
y =
C3*cos(t) + C4*sin(t)
syms y(t)
Dy=diff(y,1)
y=dsolve(diff(y,2)+y==0,y(0)==1,Dy(0)==-1,'IgnoreAnalyticConstraints',false)
y =
cos(t) - sin(t)
Exemplul 2. Să se rezolve ecuația diferențială: y'' + 2y' + y = e2x + 2x + 1, variabila independentă fiind
x. Condițiile inițiale: y(0)=0, y’(0)=0
syms y(x)
Dy=diff(y,1);
y=dsolve(diff(y,2)+2*diff(y,1)+y==exp(2*x)+2*x+1,y(0)==0,Dy(0)==0,...
'IgnoreAnalyticConstraints',false)
pretty(y)
y =
3*x + 26/(9*exp(x)) + exp(2*x)/9 + (2*x)/(3*exp(x)) - (x*exp(2*x))/3 +
(x*(6*x + exp(2*x) - 3))/3 - 2*x^2 – 3
y +p2 y = 0
2. ecuația diferențială a mișcării vibratorii libere cu condițiile inițiale y(0)=1mm, și y’(0)=0m/s
3. să se traseze graficul pentru tЄ[0, 10] secunde, unde: a=0,6m, b=0,4m, d=5mm,
11 d4 3 (a + b) E I k
E=2,0 × 10 N/m2, m=10kg, I = , k= , p=
32 a b m
2 2
Rezolvare:
syms y(t) p
%cerinta 1
sol1Sim=dsolve(diff(y,2)+p^2*y==0,'IgnoreAnalyticConstraints',false)
%cerinta 2
Dy=diff(y,1);
sol2Sim=simplify(dsolve(diff(y,2)+p^2*y==0, y(0)==1*10^-3,Dy(0)==0,...
'IgnoreAnalyticConstraints',false))
%cerinta 3
a=0.6;b=0.4;d=5*10^-3;E=2*10^11;m=10;
Software de analiza numerica si simbolica 22
I=pi*d^4/32;
k=3*(a+b)*E*I/(a^2*b^2);
pNum=sqrt(k/m);
sol3Num=subs(sol2Sim,{p},{pNum})
ezplot(sol3Num,[0,10])
sol1Sim =
C1*exp(p*t*1i) + C2*exp(-p*t*1i)
sol2Sim =
cos(p*t)/1000
sol3Num =
cos((4500638457603595*t)/562949953421312)/1000
x 2 - log(y) == 0
10
6
y
1
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
x
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
3. ***, MATLAB User’s Guide, The Mathworks Inc., SUA
Software de analiza numerica si simbolica 1
CURS 11
INTRODUCERE ÎN Python
1. De ce Python?
✓ este un limbaj de programare de nivel înalt (high level programming language)
✓ este un limbaj curat, cu sintaxă simplă și ușor de implementat pe orice calculator
✓ poate realiza aplicații desktop de sine stătătoare precum și proiecte web
2. Anaconda
Anaconda este o distribuție condiționată gratuită și open-source a limbajelor de programare Python
și R pentru calcul științific (știința datelor, aplicații de învățare automată, prelucrarea datelor la scară
largă, analiza predictivă etc.), care are ca scop simplificarea gestionării și implementării pachetelor.
Distribuția include pachete de date științifice potrivite pentru Windows, Linux și MacOS. Este
dezvoltat și întreținut de Anaconda, Inc. Ca produs, Anaconda este cunoscut și sub numele de
Anaconda Distribution sau Anaconda Individual Edition care este gratuit, respectiv Anaconda Team
Edition și Anaconda Enterprise Edition care sunt negratuite.
Anaconda Navigator este o interfață grafica desktop (GUI) inclusa în distribuția Anaconda care
permite utilizatorilor să lanseze aplicații și să gestioneze pachetele implementate. Navigatorul poate
căuta pachete pe Anaconda Cloud sau într-un depozit Local Anaconda, le poate instala într-un mediu,
poate rula pachetele și le poate actualiza. Este disponibil pentru Windows, macOS și Linux.
Următoarele aplicații sunt disponibile în mod implicit în Navigator:
JupyterLab
Jupyter Notebook
QtConsole
Spyder
Glue
Orange
RStudio
Visual Studio Code
Individual Edition
With over 20 million users worldwide, the open-source Individual Edition (Distribution) is the easiest way to
perform Python/R data science and machine learning on a single machine. Developed for solo practitioners, it is
the toolkit that equips you to work with thousands of open-source packages and libraries.
Download
2. RECOMMENDED: Verify data integrity with SHA-256. For more information on hashes, see What about
cryptographic hash verification?
Note
To prevent permission errors, do not launch the installer from the Favorites folder.
Note
If you encounter issues during installation, temporarily disable your anti-virus software during install, then re-enable it
after the installation concludes. If you installed for all users, uninstall Anaconda and re-install it for your user only and try
again.
4. Click Next.
6. Select an install for “Just Me” unless you’re installing for all users (which requires Windows Administrator
privileges) and click Next.
7. Select a destination folder to install Anaconda and click the Next button. See FAQ.
Note
Install Anaconda to a directory path that does not contain spaces or unicode characters.
Note
8. Choose whether to add Anaconda to your PATH environment variable. We recommend not adding Anaconda to
the PATH environment variable, since this can interfere with other software. Instead, use Anaconda software by
opening Anaconda Navigator or the Anaconda Prompt from the Start Menu.
Software de analiza numerica si simbolica 3
9. Choose whether to register Anaconda as your default Python. Unless you plan on installing and running multiple
versions of Anaconda or multiple versions of Python, accept the default and leave this box checked.
10. Click the Install button. If you want to watch the packages Anaconda is installing, click Show Details.
12. Optional: To install PyCharm for Anaconda, click on the link to https://www.anaconda.com/pycharm.
13. After a successful installation you will see the “Thanks for installing Anaconda” dialog box:
14. If you wish to read more about Anaconda Cloud and how to get started with Anaconda, check the boxes “Learn
more about Anaconda Cloud” and “Learn how to get started with Anaconda”. Click the Finish button.
Windows: Click Start, search or select Anaconda Navigator from the menu.
Software de analiza numerica si simbolica 5
Dacă nu doriți tot pachetul Anaconda, se poate descărca și instala doar aplicația Spyder de pe site-ul
https://www.spyder-ide.org/ sau https://www.filehorse.com/download-spyder-python/
4.1. Comentarii
▪ încep cu # și țin până la sfârșitul liniei:
#primul meu program in Python
analog cu:
#ce pot face
#cu Python
Comentariile sunt folosite ca să arăți ce ai vrut să faci acolo. Dacă peste câtva timp vei redeschide
programul, comentariile îți vor reaminti de ceea ce ai vrut să faci cu linia de cod respectivă din
program. Ele sunt ignorate de interpretorul Python dar nu trebuie ignorate de tine!
O funcție este un cod prescris care realizează o operație. Python are numeroase funcții
preconstruite. Totuși, dintre toate, fundamentală rămâne funcția print, adică exact aceea care
afișează ieșirea pe ecran.
Când un program execută o funcție, spunem că el cheamă (invocă) funcția.
Afișarea ieșirii cu funcția print
Când invocăm funcția print, scriem cuvântul print urmat de un set de paranteze rotunde ( ).
Înăuntrul parantezelor scriem argumentul care reprezintă datele pe care le dorim afișate pe ecran.
Spre exemplu, la invocarea funcției print în declarația print('Hello World!'), argumentul este
Hello World!. Observăm că apostrofurile (ghilimelele simple) nu sunt afișate la ieșirea programului.
Ele doar arată începutul și sfârșitul textului pe care vrem să-l afișăm. Se poate afirma că print
este una dintre cele mai utilizate funcții.
Software de analiza numerica si simbolica 8
Pe lângă ghilimele simple (' ') pot fi folosite cele duble ('' '') și triple (''' ''').
print('Centrul Universitar Nord, Victor Babes,62A, Baia Mare, Maramures')
Răspunsul este:
SyntaxError: invalid syntax
Corect este:
print("Vino'ncoa!")
sau:
print('''Vino'ncoa!''')
Răspunsul este:
SyntaxError: invalid syntax
Corect este:
print('"Python" este un limbaj de programare de nivel înalt')
Software de analiza numerica si simbolica 9
sau:
print('''"Python" este un limbaj de programare de nivel înalt''')
4.4. Variabile
Programarea înseamnă înainte de toate a jongla cu noțiuni abstracte.
Variabilele sunt printre cele mai importante elemente din programare, iar ele și manipularea lor
trebuie bine înțeleasă. În Python înțelegerea variabilelor este mulțumitor de ușoară.
Tot ceea ce trebuie să faceți este să vă gândiți la o variabilă ca la o cutie în care depozitați ceva.
O variabilă este un nume (cuvânt) care reprezintă o valoare stocată în memoria calculatorului: este o
secvență de caractere (litere, cifre, _) care încep obligatoriu cu o literă sau cu _
Este indicat ca numele variabilei să înceapă cu literă mică!!!
Variabilele sunt sensibile la litere mici sau mari (case sensitive) așa că de exemplu python nu este
totuna cu Python.
Numele variabilelor nu au voie să conțină cuvintele cheie din Python. De asemenea, variabilele nu
trebuie să înceapă cu un număr sau să conțină caractere speciale precum $ # % ^ & * ș.a.m.d.
Numele (variabila) se scrie întotdeauna în partea stângă:
numarulDeDinti=22
Răspuns:
22
Observație: Când se trece o variabilă ca argument al funcției print nu este nevoie de ghilimele!!!
Dacă vreau să tipăresc numarul de dinti este: 22
print('numarul de dinti este:')
print(numarulDeDinti)
Răspuns:
numarul de dinti este:
22
sau:
print('numarul de dinti este:',numarulDeDinti)
Răspuns:
numarul de dinti este: 22
Software de analiza numerica si simbolica 10
Ce se întâmplă dacă în prima varianta a exemplului anterior am fi cuprins între ghilimele parametrul
numarulDeDinti ca mai jos?
Răspuns:
numarul de dinti este: numarulDeDinti
În loc să se afișeze valoarea parametrului care este 22, se printează șirul literal numarulDeDinti.
Exemplu de script cu două variabile:
#Se creeaza doua variabile numite modul si numarDinti
modul=3
numarDinti=27
#Afiseaza valorile referite de variabile
print('Modulul este:',modul)
print('Numarul de dinti este:',numarDinti)
La fel de bine putem să inversăm numele dacă ultima declarație ar arăta astfel:
print(nume,prenume)
Răspuns:
Pop Ioan
Răspuns:
<class 'int'>
print(type(2.34))
Răspuns:
<class 'float'>
print(type('modul'))
Răspuns:
<class 'str'>
raspuns=True
print(type(raspuns))
Răspuns:
<class 'bool'>
Ce se întâmplă însă dacă unui întreg (int) îi adăugăm zero după virgulă? Pentru noi el rămâne un
întreg, nu însă și pentru calculator. Astfel, el devine un număr în virgulă mobilă (float):
print(type(10))
Răspuns:
<class 'int'>
print(type(10.0))
Răspuns:
<class 'float'>
În Python, o variabilă poate să refere orice tip de date: șir, întreg, în virgulă mobilă, complex,
boolean. După ce o variabilă a fost atribuită unui anumit tip, ea poate fi reatribuită altui tip de date.
x=12 #aici avem o variabila int (intreg)
print(x)
Răspuns:
12
Software de analiza numerica si simbolica 12
str:
x='Sa invatam Python' #aici avem o variabila str (sir)
print(x)
Răspuns:
Sa invatam Python
float:
x=0.20 #aici avem o variabila float (virgula mobila)
print(x)
Răspuns:
0.20
Răspuns:
0.20
Răspuns:
Domnul/doamna Pop Marius este invitat(a) la ghiseu
Software de analiza numerica si simbolica 13
Răspuns:
Iata datele pe care le-ai introdus:
Numele Pop Ioan
Varsta 40
Venitul declarat 3076.98
Concluzia este următoarea: atunci când se introduc nume sau alte date literale se scrie simplu
input('……'). Când însă se introduc numere (întregi sau în virgulă mobilă) este obligatoriu să
definim tipul lor, int sau float.
int și float funcționează doar dacă itemul ce urmează să fie introdus conține o valoare numerică.
Altfel, va apărea o eroare numită excepție.
Dacă nu este obligatoriu ca numărul introdus să fie de un anumit tip (int sau float) putem
utiliza instrucțiunea eval care va evalua tipul numărului (eval ține loc de int sau float):
numar=eval(input('Introduceti numarul: '))
print(type(numar))
Software de analiza numerica si simbolica 14
În consolă:
Introduceti numarul: 34
Răspuns:
<class 'int'>
În consolă:
Introduceti numarul: 34.5
Răspuns:
<class 'float'>
Răspuns:
Centrul Universitar Nord
Răspuns:
CentrulUniversitarNord
Dup caracterul \ pot să urmeze anumite instrucțiuni: de exemplu, \n înseamnă linie nouă, \t tab
orizontal, \v tab vertical etc.
print('Centrul\nUniversitar\nNord')
Software de analiza numerica si simbolica 15
Răspuns:
Centrul
Universitar
Nord
FUNCȚII
O funcție reprezintă un grup de declarații pentru a realiza o anumită sarcină. Funcțiile ne ajută să
împărțim programul în bucăți mai mici și modulare. Pe măsură ce programul nostru crește din ce în
ce mai mult, funcțiile îl fac mai organizat și mai ușor de gestionat. În plus, evită repetarea și face
codul reutilizabil.
Pot fi utilizate atât funcții predefinite, disponibile la nivelul limbajului Python, de exemplu
print(), type(), id(), cât și funcții definite de utilizator.
Răspuns:
Va rugam sa respectati distantarea fizica!
În cazul funcțiilor care nu au argumente de intrare este mai util să invocăm funcția chiar în fișier,
astfel că nu vom mai fi nevoiți să invocăm funcția în consolă:
def mesaj():
#un mesaj din pandemie
return print('Va rugam sa respectati distantarea fizica!')
mesaj()
Răspuns:
Buna dimineata Ionel !
Răspuns:
12
În consolă:
dublare('Hello')
Răspuns:
'HelloHello'
Răspuns:
Aria patratului este egala cu 25mp
Răspuns:
Aria dreptunghiului este egala cu 50mp
Software de analiza numerica si simbolica 19
3. Variabile locale
O variabilă locală este creată în interiorul unei funcții și nu poate fi accesată din afara ei.
Funcții diferite pot avea variabile locale cu același nume pentru că ele nu se pot vedea una pe
cealaltă. De fiecare dată când se atribuie o valoare unei variabile în interiorul unei funcții, se
creează o variabilă locală.
Exemplu: Putem să scriem cele două funcții scrise anterior într-un sigur fișier .py pe care să-l
denumim calculArii; ambele funcții au câte o variabilă cu același nume, aria:
def ariaPatratului(latura):
#Functia care calculeaza aria patratului; latura se introduce in [m]
aria=latura**2
return print('Aria patratului este egala cu ',aria,'mp',sep='')
def ariaDreptunghiului(lungimea,latimea):
#Functia care calculeaza aria dreprunghiului
aria=lungimea*latimea
return print('Aria dreptunghiului este egala cu ',aria,'mp',sep='')
Răspuns:
Aria patratului este egala cu 100mp
În consolă:
ariaDreptunghiului(8,9)
Răspuns:
Aria dreptunghiului este egala cu 72mp
4. Constante globale
O constantă globală referă o valoare care nu poate fi modificată.
Prin convenție, constantele globale se scriu cu majuscule și sunt așezate la începutul programului,
înaintea oricăror alte declarații, ca în exemplul următor (funcția cadereLibera2):
Software de analiza numerica si simbolica 20
def distanta(timp):
valoarea=ACC_GRAV/2*timp**2
print('Distanta parcursa este egala cu ',format(valoarea,'.3f'),'m',sep='')
Răspuns:
Viteza finala este egala cu 294.300m/s
Distanta parcursa este egala cu 4414.500m
5. Funcția lambda
Python permite crearea unei funcții anonime folosind cuvântul cheie lambda.
O funcție anonimă poate să conțină doar o singură expresie care neapărat trebuie să returneze o
valoare. Altfel ca la crearea unei funcții comune care folosește def, o funcție creată cu lambda
returnează un obiect funcție. Acesta poate fi atribuit unei variabile care poate fi folosită în orice
moment ca să execute expresia conținută.
Funcției lambda putem chiar să nu îi atribuim nicio variabilă.
Sintaxe:
variabila=lambda argumente:expresie
variabila=(lambda argumente:expresie)(valori)
Software de analiza numerica si simbolica 21
Exemple:
1. Ca funcție obișnuită:
def dublare(x):
#functia dubleaza valoarea introdusa
return x+x
Răspuns:
10
2. Cu funcția lambda:
dublu=lambda x:2*x
În consolă:
dublu(5)
Răspuns:
10
sau:
În consolă:
dublu=(lambda x:2*x)(7)
print(dublu)
Răspuns:
14
Bibliografie
1. Mircea Prodan, Cum să programezi în Python (Manual în limba română), 2014
2. Marian Bucos, PROGRAMARE. PYTHON, https://uncoded.ro
3. Adriana Drăghici, Introducere în limbajul Python, 2018
4. Czibula Istvan, Fundamentele Programării. Limbajul de programare PYTHON
5. Mark Lutz, Learning Python, 5th Edition
Software de analiza numerica si simbolica 22
6. https://docs.anaconda.com/
7. https://opentechschool.github.io/python-beginners/ro/
8. https://python-course.eu/
Software de analiza numerica si simbolica 1
CURS 12
a referinta 5
a referinta 6
Exemplu:
a=5
print(a)
print(id(a))
print(id(5))
a=6
print(a)
print(id(a))
print(id(6))
Software de analiza numerica si simbolica 2
Răspuns:
5
140736772908960
140736772908960
6
140736772908992
140736772908992
Observație: funcția id() returnează id-ul unic pentru obiectul specificat, adică adresa de memorie a
obiectului; id-ul va fi diferit de fiecare dată când se rulează programul.
Python oferă suport pentru 3 tipuri de numere: int (numere întregi), float (numere reale, cu
virgulă) și complex (numere complexe). Mai mult, Python ne permite să schimbăm tipul de date
oricând ne dorim. Tot ce trebuie să facem este să apelăm una dintre funcțiile built-in
(preinstalate) cu numele specific tipului de date dorit:
a=3.0 #creez variabila a cu valoarea 3.0
print(a)
print(type(a))
Răspuns:
3.0
<class 'float'>
Răspuns:
3
<class 'int'>
Răspuns:
(3+0j)
<class 'complex'>
numCompl=complex(4,5)
print(numCompl)
print(type(numCompl))
Răspuns:
(4+5j)
<class 'complex'>
• primul argument, care este un număr în virgulă mobilă (12345.6789), este numărul pe
care vrem să-l formatăm
• al doilea argument este un șir, de exemplu '.3f' și reprezintă specificatorul de format
(în acest caz 3 zecimale):
▪ .3 specifică precizia; el arată că vrem să rotunjim numărul la trei zecimale
▪ f vine de la float și specifică faptul că numărul formatat este în virgulă mobilă
print(format(12345.6789,'.3f'))
Răspuns:
12345.679
print(format(12345.6789,'.1f'))
Răspuns:
12345.7
Răspuns:
1.235e+04
Software de analiza numerica si simbolica 4
Răspuns:
12,345.68
Răspuns:
Numarul este 12,345.68
Formatarea unui număr în virgulă mobilă ca procent: în loc să folosim litera f folosim simbolul
procent %
print(format(0.5,'%'))
Răspuns:
50.000000%
print(format(0.5,'.1%'))
Răspuns:
50.0%
print(format(0.5,'.0%'))
Răspuns:
50%
Formatarea întregilor: diferențele la formatarea întregilor față de numerele în virgulă mobilă sunt:
• se folosește d în loc de f
• nu se poate specifica precizia
print(format(123456,'d'))
Răspuns:
123456
print(format(123456,',d'))
Răspuns:
123,456
Software de analiza numerica si simbolica 5
Răspuns:
Grupa are un numar de 25 de studenti
Răspuns:
AnacondaPython
AnacondaAnaconda
În consolă:
Introduceti numele dumneavoastra: Pop
Introduceti prenumele dumneavoastra: Ioan
Răspuns:
Domnul Pop Ioan este invitat la ghiseu
Software de analiza numerica si simbolica 6
Răspunsul ar fi:
Domnul Ioan Pop este invitat la ghiseu
1
Există o diferență între funcție și metodă, deși ambele reprezintă subrutine de calcul, adică secvențe de cod ce
prelucrează ceva specific. Metoda este o funcție ce aparține unei clase / tip de date etc.
Software de analiza numerica si simbolica 8
Considerăm următorul șir șablon: Domnul {0} {1} este invitat la ghiseul {2}
Acoladele { } sunt doar substituenți pentru argumentele metodei format care trebuie plasate în șir.
Exemplu:
nume=input('Introduceti numele dumneavoastra: ')
prenume=input('Introduceti prenumele dumneavoastra: ')
nrGhiseu=3
print('Domnul {0} {1} este invitat la ghiseul {2}'.format(nume,prenume,nrGhiseu))
În consolă:
Introduceti numele dumneavoastra: Pop
Introduceti prenumele dumneavoastra: Ioan
Răspuns:
Domnul Pop Ioan este invitat la ghiseul 3
Dacă șirul șablon ar fi: Domnul {1} {0} este invitat la ghiseul {2}
print('Domnul {1} {0} este invitat la ghiseul {2}'.format(nume,prenume,ghiseu))
Răspunsul ar fi:
Domnul Ioan Pop este invitat la ghiseul 3
Răspuns:
anaconda
ANACONDA
['Ana', 'onda']
Răspuns:
8
Valoarea minimă și maximă (returnează litera din șir cu poziția minimă/maximă în alfabet): cu
funcțiile min(), max()
Observație: toate literele mari vor fi considerate ”mai mici” decât orice literă mică!!!
nume='Anaconda'
minLit=min(nume)
maxLit=max(nume)
print(minLit)
print(maxLit)
Răspuns:
A (observație: A este ”mai mic” decât a)
o
Software de analiza numerica si simbolica 10
Răspuns:
NameError: name 'nume' is not defined
print(w)
print(type(w))
[[4, 5], [7, 'un sir']]
<class 'list'>
Răspuns:
[1, 2, 4, 6, 9, 10, 'un sir', 'alt sir']
[1, 2, 4, 6, 9, 10, 1, 2, 4, 6, 9, 10]
['un sir', 'alt sir', 'un sir', 'alt sir']
Răspuns:
Lista initiala este: [10, 20]
Adresa de memorie a listei initiale este: 2674068808000
Copia este: [10, 20]
Adresa de memorie a copiei este: 2674068808000
Lista initiala modificata este: [10, 30]
Adresa de memorie a listei initiale modificata este: 2674068808000
Copia este: [10, 30]
Adresa de memorie a copiei este: 2674068808000
Chiar dacă am modificat doar lista inițială (listaInit) se modifică și copia acesteia
(listaNoua). Același lucru s-ar întâmpla cu listaInit dacă am modifica listaNoua!!!
Software de analiza numerica si simbolica 13
Explicație: obiectului de tip variabilă listaInit îi atribuim obiectul de tip listă [10,20]. Prin
atribuire creăm obiectul de tip variabilă listaNoua. Atât listaInit, cât și listaNoua vor indica
același obiect listă și aceeași adresă de memorie. Din acest motiv, modificarea obiectului de tip listă
prin oricare din obiectele listaInit sau listaNoua, rezultă și modificarea celuilalt obiect listă.
listaInit
=
[10,20]
listaNoua
listaInit
[10,30]
listaNoua
Metoda copy() returnează o listă nouă cu aceleași itemuri ca cea originală, dar cu propria
adresă!!!; se mai spune că se creează o copie superficială (shallow copy)
listaInit=[10,20] #definesc listaInit
print('Lista initiala este:',listaInit)
print('Adresa de memorie a listei initiale este:',id(listaInit))
Răspuns:
Lista initiala este: [10, 20]
Adresa de memorie a listei initiale este: 1900055746112
Copia superficiala este: [10, 20]
Adresa de memorie a copiei superficiale este: 1900068560640
Lista initiala modificata este: [10, 30]
Adresa de memorie a listei initiale modificata este: 1900055746112
Copia superficiala este: [10, 20]
Adresa de memorie a copiei superficiale este: 1900068560640
Metoda index() returnează indexul primului item din listă care conține itemul căutat; dacă
itemul căutat nu există în listă, programul va ridica o excepție ValueError
x=[1,5,-7,3,0,9,-7]
z=[1,'un sir',3,4,'alt sir']
print(x.index(-7)) #afisez indexul itemului -7
print(z.index('un sir')) #afisez indexul itemului 'un sir'
print(z.index('sir')) #afisez indexul itemului 'sir' (nu exista)
Software de analiza numerica si simbolica 15
Răspuns:
2
1
ValueError: 'sir' is not in list
Răspuns:
2
Metoda sort() sortează itemurile unei liste în ordine ascendentă sau descendentă; metoda sort
nu returnează, ci actualizează lista existentă!!!
Sintaxe:
lista.sort(reverse=True|False)
lista.sort() #sortare in ordine ascendenta
Exemplu:
x=[1,5,-7,3,0,9,-2]
print('Ordinea originala:',x)
x.sort(reverse=True) #sortarea descendenta a listei x
print('In ordine descendenta:',x) #afisez lista x actualizata
x.sort(reverse=False) #sau x.sort();sortarea ascendenta a listei x
print('In ordine ascendenta:',x) #afisez lista x actualizata
Răspuns:
Ordinea originala: [1, 5, -7, 3, 0, 9, -2]
In ordine descendenta: [9, 5, 3, 1, 0, -2, -7]
In ordine ascendenta: [-7, -2, 0, 1, 3, 5, 9]
Metoda reverse() inversează ordinea itemilor din listă; metoda reverse nu returnează, ci
actualizează lista existentă!!!
x=[1,5,-7,3,0,9,-2]
print('Ordinea originala:',x) #afisez lista x originala
x.reverse()
print('Ordinea inversata:',x) #afisez lista x actualizata (inversata)
Software de analiza numerica si simbolica 16
Răspuns:
Ordinea originala: [1, 5, -7, 3, 0, 9, -2]
Ordinea inversata: [-2, 9, 0, 3, -7, 5, 1]
Metoda append() este folosită pentru adăugarea unui item listei. Itemul se adaugă întotdeauna la
sfârșitul listei!!!; metoda append nu returnează, ci actualizează lista existentă!!!
x=[1,5,-7,3,0,9,-2]
z=[1,'un sir',3,4,'alt sir']
x.append(246) #adaug un item, 246, care este de tip numar
z.append([45,98]) #adaug un item, [45,98], care este de tip lista
print(x) #afisez lista x actualizata
print(z) #afisez lista z actualizata
Răspuns:
[1, 5, -7, 3, 0, 9, -2, 246]
[1, 'un sir', 3, 4, 'alt sir', [45, 98]]
Metoda extend() este folosită pentru adăugarea unor itemi listei. Itemii se adaugă întotdeauna la
sfârșitul listei!!!; metoda extend nu returnează, ci actualizează lista existentă!!!
x=[1,5,-7,3,0,9,-2]
z=[1,'un sir',3,4,'alt sir']
x.extend([246]) #adaug un singur item, 246, care este de tip numar
z.extend([45,98]) #adaug doi itemi, 45 si 98, care sunt de tip numar
print(x) #afisez lista x actualizata
print(z) #afisez lista z actualizata
Răspuns:
[1, 5, -7, 3, 0, 9, -2, 246]
[1, 'un sir', 3, 4, 'alt sir', 45, 98]
Metoda insert() este folosită pentru adăugarea unui item într-o listă pe o poziție specificată;
metoda insert nu returnează, ci actualizează lista existentă!!!
x=[1,5,-7,3,0,9,-2]
z=[1,'un sir',3,4,'alt sir']
x.insert(3,246) #itemul 246 este adaugat pe pozitia cu indexul 3
z.insert(4,[45,98]) #itemul [45,98] este adaugat pe pozitia cu indexul 4
print(x) #afisez lista x actualizata
print(z) #afisez lista z actualizata
Software de analiza numerica si simbolica 17
Răspuns:
[1, 5, -7, 246, 3, 0, 9, -2]
[1, 'un sir', 3, 4, [45, 98], 'alt sir']
Metoda remove() elimină din listă primul item identic cu itemul căutat. Dacă itemul nu există în
listă, programul va ridica o excepție ValueError; metoda remove nu returnează, ci actualizează
lista existentă!!!
x=[1,5,-7,3,0,9,-2]
z=[1,'un sir',3,4,'alt sir']
x.remove(0) #elimin itemul 0
z.remove('alt sir') #elimin itemul 'alt sir'
print(x) #afisez lista x actualizata
print(z) #afisez lista z actualizata
Răspuns:
[1, 5, -7, 3, 9, -2]
[1, 'un sir', 3, 4]
Metoda pop() elimină din listă itemul având indexul dat, returnează itemul eliminat și
actualizează lista existentă
z=[1,'un sir',3,4,'alt sir']
valElim=z.pop(1) #elimin itemul cu indexul 1, adica itemul 'un sir'
print(valElim) #afisez itemul eliminat
print(z) #afisez lista z actualizata
Răspuns:
un sir
[1, 3, 4, 'alt sir']
Metoda clear() elimină toate itemurile din listă, fără a șterge și lista!!!
x=[1,5,-7,3,0,9,-2]
z=[1,'un sir',3,4,'alt sir']
x.clear()
z.clear()
print(x) #afisez lista x actualizata (golita)
print(z) #afisez lista z actualizata (golita)
Software de analiza numerica si simbolica 18
Răspuns:
[]
[]
Răspuns:
7
Valoarea minimă și maximă (returnează itemul minim/ maxim din listă): cu funcțiile min(), max()
Atenție: lucrează doar cu liste omogene. În cazul celor mixte (eterogene) dă eroare!!!
x=[1,5,-7,3,0,9,-2] #lista cu itemuri de tip numeric (vector)
minList=min(x)
maxList=max(x)
print(minList)
print(maxList)
Răspuns:
-7
9
Răspuns:
abc
aefg
Software de analiza numerica si simbolica 19
Răspuns:
TypeError: '<' not supported between instances of 'str' and 'int'
Răspuns:
[3, 'un sir']
[4, 5]
Exemplu:
x=[1,5,-7,3,0,9,-2]
print('Ordinea originala:',x)
xDesc=sorted(x,reverse=True) #sortarea descendenta a listei x
print('In ordine descendenta:',xDesc) #afisez lista x actualizata
xAsc=sorted(x) #sau x.sort();sortarea ascendenta a listei x
print('In ordine ascendenta:',xAsc) #afisez lista x actualizata
Răspuns:
Ordinea originala: [1, 5, -7, 3, 0, 9, -2]
In ordine descendenta: [9, 5, 3, 1, 0, -2, -7]
In ordine ascendenta: [-7, -2, 0, 1, 3, 5, 9]
Exemplu:
z=[1,'un sir',3,4,'alt sir']
del(z[1])
print(z) #afisez lista z actualizata
Răspuns:
[1, 3, 4, 'alt sir']
x=[1,5,-7,3,0,9,-2]
del(x) #dupa stergere obiectul x nu mai exista
print(x) #obiectul x ne mai existand, primim un mesaj de eroare
Răspuns:
NameError: name 'x' is not defined
Răspuns:
(1, 'un sir', 3, 4, 'alt sir')
<class 'tuple'>
Observație: pentru a crea o tuplu cu un singur item trebuie să adăugăm o virgulă după acel item,
altfel va ignora parantezele și va trata itemul drept o simplă instanță a tipului corespunzător; astfel
(2,) este tuplu, iar (2) este numărul 2!!!
x=(2,)
print('Variabila x este:',x)
print('Tipul variabilei x este:',type(x))
y=(2)
print('Variabila y este:',y)
print('Tipul variabilei y este:',type(y))
Răspuns:
Variabila x este: (2,)
Tipul variabilei x este: <class 'tuple'>
Variabila y este: 2
Tipul variabilei y este: <class 'int'>
Tuplurile nu suportă metoda copy și metodele care presupun actualizarea conținutului: sort,
reverse, append, extend, insert, remove, pop, clear.
Dintre metodele prezentate la obiectele de tip listă, tuplurile suportă doar cele care nu presupun
actualizarea conținutului: index și count.
Metoda index() returnează indexul primului item din tuplu care conține itemul căutat. Dacă
itemul căutat nu există în tuplu, programul va ridica o excepție ValueError
x=(1,5,-7,3,0,9,-7)
z=(1,'un sir',3,4,'alt sir')
print(x.index(-7)) #afisez indexul itemului -7
print(z.index('un sir')) #afisez indexul itemului 'un sir'
Răspuns:
2
1
Răspuns:
2
Răspuns:
7
Software de analiza numerica si simbolica 23
Valoarea minimă și maximă (returnează itemul minim/maxim din tuplu): cu funcțiile min(), max()
Atenție: lucrează doar cu tupluri omogene. În cazul celor mixte (eterogene) dă eroare!!!
x=(1,5,-7,3,0,9,-2) #tuplu cu itemuri de tip numeric (vector)
minTup=min(x)
maxTup=max(x)
print(minTup)
print(maxTup)
Răspuns:
-7
9
Răspuns:
abc
aefg
Răspuns:
TypeError: '<' not supported between instances of 'str' and 'int'
Răspuns:
(3, 'un sir')
(4, 5)
Sortarea tuplului (Atenție: deoarece tuplul este imutabil returnează o listă sortată): cu funcția
sorted()
Sintaxa:
ascList=sorted(lista) #sortare ascendenta
desList=sorted(lista,reverse=True) #sortare descendenta
Software de analiza numerica si simbolica 24
Exemplu:
x=(1,5,-7,3,0,9,-2)
print('Ordinea originala:',x)
xDesc=sorted(x,reverse=True) #sortarea descendenta a tuplului x
print('In ordine descendenta:',xDesc) #afisez tuplul x actualizat
xAsc=sorted(x) #sau x.sort();sortarea ascendenta a tuplului x
print('In ordine ascendenta:',xAsc) #afisez tuplul x actualizat
Răspuns:
Ordinea originala: (1, 5, -7, 3, 0, 9, -2)
In ordine descendenta: [9, 5, 3, 1, 0, -2, -7]
In ordine ascendenta: [-7, -2, 0, 1, 3, 5, 9]
Răspuns:
[1, 'un sir', 3, 4, 'alt sir']
<class 'list'>
Răspuns:
NameError: name 'x' is not defined
Software de analiza numerica si simbolica 25
Răspuns:
{'Ioana': 1, 'Costel': 2, 'Liviu': 5, 'Maricica': 3, 'Ionel': 4, 'Petrica': 1,
'Stelica': 4}
<class 'dict'>
Software de analiza numerica si simbolica 26
Răspuns:
{'Ioana': 1, 'Costel': 2, 'Liviu': 5, 'Maricica': 3, 'Ionel': 4, 'Petrica':
1, 'Stelica': 4, 'Cornel': 5}
Răspuns:
{'Ioana': 1, 'Costel': 2, 'Liviu': 5, 'Maricica': 4, 'Ionel': 4, 'Petrica':
1, 'Stelica': 4, 'Cornel': 5}
Răspuns:
dict_keys(['Ioana', 'Costel', 'Liviu', 'Maricica', 'Ionel', 'Petrica',
'Stelica'])
Răspuns:
dict_values([1, 2, 5, 3, 4, 1, 4])
Răspuns:
dict_items([('Ioana', 1), ('Costel', 2), ('Liviu', 5), ('Maricica', 3),
('Ionel', 4), ('Petrica', 1), ('Stelica', 4)])
Răspuns:
1
Metoda dictionar.pop() șterge perechea de tip cheie-valoare din dicționar pe baza cheii
specificate
calificare.pop('Costel')
print(calificare)
Răspuns:
{'Ioana': 1, 'Liviu': 5, 'Maricica': 4, 'Ionel': 4, 'Petrica': 1, 'Stelica':
4, 'Cornel': 5}
Software de analiza numerica si simbolica 28
Răspuns:
{'Ioana': 1, 'Liviu': 5, 'Maricica': 4, 'Ionel': 4, 'Petrica': 1, 'Stelica': 4}
Răspuns:
{'Ioana': 1, 'Liviu': 5, 'Maricica': 4, 'Ionel': 4, 'Petrica': 1, 'Stelica': 4}
Răspuns:
{'Ioana': 2, 'Liviu': 5, 'Maricica': 4, 'Ionel': 4, 'Petrica': 1, 'Stelica':
4, 'Lucian': 5, 'Raluca': 1}
Răspuns:
{}
Metoda dict.fromkeys() returnează un dicționar: primul argument este lista cheilor, definită
anterior, iar al doilea argument este valoarea comună atribuită cheilor
chei=('Rosii','Ardei','Castraveti') #definesc cheile
legume=dict.fromkeys(chei,0) #definesc numele dictionarului si stabilesc
valoarea comuna a cheilor ca fiind 0
print(legume)
Răspuns:
{'Rosii': 0, 'Ardei': 0, 'Castraveti': 0}
Software de analiza numerica si simbolica 29
Răspuns:
5
Răspuns:
2
15
Răspuns:
36
Returnarea unei liste care conține cheile ordonate crescător: cu funcția sorted()
cheiSortate=sorted(capitale)
print(cheiSortate)
Răspuns:
[2, 3, 5, 11, 15]
Software de analiza numerica si simbolica 30
Funcția any() returnează True dacă cel puțin o cheie de la nivelul dicționarului are valoarea True
(diferită de 0), respectiv funcția all() returnează True dacă toate cheile de la nivelul
dicționarului se evaluează la True
Răspuns:
Traceback (most recent call last):
File " untitled3.py", line 13, in <module>
print(capitale)
NameError: name 'capitale' is not defined
Răspuns:
{'Bucuresti', 'Iasi', 'Timisoara', 'Cluj'}
<class 'set'>
În cazul în care nu sunt precizate elemente ale mulțimii, adică set(), se creează o mulțime goală:
multimeGoala=set()
Software de analiza numerica si simbolica 31
În cazul unei mulțimi, elementele pot să fie de tip diferit (elemente eterogene):
MultimeEterogena={'Cerc', 3.14, 'Putere', 1024}
print(MultimeEterogena)
print(type(MultimeEterogena))
Răspuns:
{'Cerc', 1024, 3.14, 'Putere'}
<class 'set'>
Răspuns:
{'Bucuresti', 'Iasi', 'Timisoara', 'Cluj'}
print(oraseROU[1])
Răspuns:
Traceback (most recent call last):
File "Orase.py", line 3, in <module>
print(oraseROU[1])
TypeError: 'set' object is not subscriptable
Răspuns:
Traceback (most recent call last):
File "Orase.py", line 3, in <module>
print(oraseROU)
NameError: name 'oraseROU' is not defined
Software de analiza numerica si simbolica 32
Răspuns:
{'Baia Mare', 'Bucuresti', 'Iasi', 'Timisoara', 'Cluj'}
Metoda update() permite adăugarea mai multor elemente la o mulțime prin intermediul unei
singure operații. Elementele care sunt deja prezente la nivelul mulțimii nu vor mai fi adăugate!!!
multimeNumere={1, 3, 5, 7, 9}
multimeNumere.update({1, 2, 4, 6, 8})
print(multimeNumere)
Răspuns:
{1, 2, 3, 4, 5, 6, 7, 8, 9}
Metoda remove() șterge elementul precizat ca și argument. Dacă valoarea precizată ca și argument
nu este prezentă la nivelul mulțimii, metoda returnează o eroare de tip KeyError
oraseROU={'Bucuresti','Iasi','Cluj','Timisoara'}
oraseROU.remove('Iasi')
print(oraseROU)
Răspuns:
{'Bucuresti', 'Cluj', 'Timisoara'}
oraseROU.remove('Deva')
Răspuns:
Traceback (most recent call last):
File "Orase.py", line 4, in <module>
Software de analiza numerica si simbolica 33
oraseROU.remove('Deva')
KeyError: 'Deva'
Răspuns:
{'Cluj', 'Bucuresti', 'Timisoara'}
Răspuns:
{'Timisoara', 'Bucuresti', 'Iasi'} #a sters aleator elementul 'Cluj'
Răspuns:
{'Bucuresti', 'Iasi', 'Timisoara', 'Cluj'}
copieOraseROU=oraseROU.copy()
print(copieOraseROU)
Răspuns:
{'Bucuresti', 'Iasi', 'Timisoara', 'Cluj'}
Metoda clear() șterge toate elementele din mulțime și returnează set() (o mulțime goală)
oraseROU={'Bucuresti','Iasi','Cluj','Timisoara'}
oraseROU.clear()
print(oraseROU)
Răspuns:
Software de analiza numerica si simbolica 34
set()
Răspuns:
{1, 2, 3, 4, 5, 7, 9}
Răspuns:
{1, 3}
Răspuns:
{9, 5, 7}
{2, 4}
Răspuns:
6
Răspuns:
0
10
Răspuns:
34
Returnarea unei liste care conține elementele mulțimii ordonate crescător: cu funcția sorted()
multimeNum={10, 7, 0, 5, 3, 9}
listaSortata=sorted(multimeNum)
print(listaSortata)
Răspuns:
[0, 3, 5, 7, 9, 10]
Funcția any() returnează True dacă cel puțin un element se evaluează la True; în caz contrar
returnează False
multimeNum={10, 7, 0, 5, 3, 9}
raspuns=any(multimeNum)
Software de analiza numerica si simbolica 36
print(raspuns)
Răspuns:
True
Funcția all() returnează True dacă toate elementele se evaluează la True; în caz contrar False
multimeNum={10, 7, 0, 5, 3, 9}
raspuns=all(multimeNum)
print(raspuns)
Răspuns:
False
Răspuns:
{'Iasi', 'Bucuresti', 'Cluj', 'Baia Mare'}
Scriptul precedent poate fi rescris mult mai compact folosind set comprehension
oraseROU={'Bucuresti','Iasi','Cluj','Timisoara','Zalau','Baia Mare','Medias'}
oraseROUnew={oras for oras in oraseROU if oras < 'M'}
print(oraseROUnew)
Răspuns:
{'Iasi', 'Bucuresti', 'Cluj', 'Baia Mare'}
Software de analiza numerica si simbolica 37
Bibliografie
1. Mircea Prodan, Cum să programezi în Python (Manual în limba română), 2014
2. Marian Bucos, PROGRAMARE. PYTHON, https://uncoded.ro
3. Adriana Drăghici, Introducere în limbajul Python, 2018
4. Czibula Istvan, Fundamentele Programării. Limbajul de programare PYTHON
5. Mark Lutz, Learning Python, 5th Edition
6. https://docs.anaconda.com/
7. https://docs.python.org/3/library/
8. https://opentechschool.github.io/python-beginners/ro/
9. https://python-course.eu/
Software de analiza numerica si simbolica 1
CURS 13
OPERATORI
Operatorii sunt simboluri speciale în Python care efectuează calcule aritmetice sau logice. Valoarea
cu care operează operatorul se numește operand:
Exemplu:
2+3
Out[1]: 5
unde + este operatorul care efectuează însumarea operanzilor 2 și 3, iar 5 este ieșirea
operației.
1. Operatori aritmetici
Operatorii aritmetici sunt utilizați pentru efectuarea operațiilor matematice.
Operator Operația Exemplu
x=5+2
+ adunare print(x)
7
x=5-2
- scădere print(x)
3
x=5*2
* înmulțire print(x)
10
x=5/2
/ împărțire print(x)
2.5
x=5//2
// floor division (cât) print(x)
2
x=5%2
% modulo (rest) print(x)
1
x=5**2
** ridicare la putere print(x)
25
3. Operatori de comparație
Operatorii de comparație sunt folosiți pentru a compara valori, returnând True sau False.
Operator Semnificația Exemplu
x=7
y=9
< Mai mic
print(x<y)
True
print(x>y)
> Mai mare
False
print(x<=y)
<= Mai mic sau egal
True
print(x>=y)
>= Mai mare sau egal
False
print(x==y)
== Egalitate
False
print(x!=y)
!= Diferit
True
4. Operatori logici
Operator Semnificație Exemplu
x=True
Adevărat dacă ambii operanzi y=False
and
sunt adevărați print(x and y)
False
Adevărat dacă oricare dintre print(x or y)
or
operanzi este adevărat True
print(not x)
False
not Neagă operandul
print(not y)
True
Software de analiza numerica si simbolica 3
5. Operatori speciali
Limbajul Python oferă câteva tipuri speciale de operatori precum operatorii speciali de identitate
și operatorii speciali de membru.
5.1. Operatorii speciali de identitate
is și is not sunt operatorii speciali de identitate din Python. Sunt utilizați pentru a verifica dacă
doi operanzi sunt identici (sunt situați în același loc din memoriei). Două variabile care sunt egale nu
implică faptul că sunt identice!!!
Operator Semnificație
Adevărat dacă operanzii sunt identici (se referă la
is
același obiect)
Adevărat dacă operanzii nu sunt identici (nu se
is not
referă la același obiect)
Exemple:
x1=3 #numar
y1=3 #numar
x2='Hello' #sir
y2='Hello' #sir
x3=[1,2,3] #lista
y3=[1,2,3] #lista
x4=(1,2,3) #tuplu
y4=(1,2,3) #tuplu
x5={'Ioana':1,'Costel':2,'Liviu':5,'Maricica':3,'Ionel':4} #dictionar
y5={'Ioana':1,'Costel':2,'Liviu':5,'Maricica':3,'Ionel':4} #dictionar
x6={'Bucuresti','Iasi','Cluj','Timisoara'} #multime
y6={'Bucuresti','Iasi','Cluj','Timisoara'} #multime
x1 is y1
True
x2 is y2
True
x3 is y3
False
x4 is y4
False
Software de analiza numerica si simbolica 4
x5 is y5
False
x6 is y6
False
Variabilele (variabilele sunt și ele operanzi) x1 și y1 sunt numere întregi (int) de aceleași valori,
deci sunt egale și identice. Același lucru este cazul cu x2 și y2 care sunt șiruri (str).
Dar operanzii x3 și y3 sunt liste, x4 și y4 sunt tupluri, x5 și y5 sunt dicționare, respectiv x6 și
y6 sunt mulțimi. Sunt egali, dar nu identici deoarece interpretorul le localizează separat în
memorie.
'Hel' in x
True
2 in y
True
'Costel' in w
True
'Iasi' in u
True
Software de analiza numerica si simbolica 5
STRUCTURI DE DECIZIE
Atenție: indentarea corectă face ca blocul de cod aferent declarației if să fie stabilit corect!!! În
Python nu există instrucțiunea end !!!!
Exemplu:
temperatura=eval(input('Introduceti temperatura masurata: '))
if temperatura>=20 and temperatura<=22:
print('Temperatura de',temperatura,'grade Celsius este \
corespunzatoare efectuarii masuratorilor')
if temperatura<20 or temperatura>22:
print('Temperatura de',temperatura,'grade Celsius nu este \
corespunzatoare efectuarii masuratorilor')
Exemplu:
temperatura=eval(input('Introduceti temperatura masurata: '))
if temperatura>=20 and temperatura<=22:
print('Temperatura de',temperatura,'grade Celsius este \
corespunzatoare efectuarii masuratorilor')
else:
print('Temperatura de',temperatura,'grade Celsius nu este \
corespunzatoare efectuarii masuratorilor')
În consolă:
Introduceti pretul la raft: 1245.89
Răspuns:
Discount-ul este 15%
Pretul final este 1059.01 lei,
din care TVA-ul reprezinta 169.09 lei.
Software de analiza numerica si simbolica 8
2. Bucla for
Bucla for iterează de un număr specificat de ori.
Forma generală:
for variabila in secventa:
blocul de cod al lui of
codul ulterior
Exemplu:
#Lista contine 4 itemuri, indicii incep cu 0 si
#se termina cu 3
def culori():
listaDeCulori={'Rosu','Albastu','Verde','Negru'}
for culoare in listaDeCulori:
print(culoare)
culori()
Răspuns:
Rosu
Albastru
Verde
Negru
Software de analiza numerica si simbolica 9
Exemple:
for x in range(7):
print(x)
Răspuns:
0
1
2
3
4
5
6
for x in range(1,7):
print(x)
Răspuns:
1
2
3
4
5
6
for x in range(1,7,2):
print(x)
Răspuns:
1
3
5
Software de analiza numerica si simbolica 10
3. Bucla while
Bucla while face ca o declarație sau un bloc de declarații să se repete
atâta timp cât o condiție e adevărată.
Formatul general:
while(conditie):
blocul de cod al lui while
codul ulterior
def cels2fahr():
raspuns=input('Continuati? (da/nu): ')
while(raspuns=='da'):
C=eval(input('Temperatura in grade Celsius= '))
F=32+9/5*C
print('Temperatura in grade Fahrenheit=',F)
raspuns=input('Continuati? (da/nu): ')
cels2fahr()
Exemplu: Validarea intrărilor folosind bucla while. Validarea intrărilor (input-ului) este procesul de
verificare a datelor care sunt introduse într-un program ca să fim siguri că sunt corecte înainte de a fi
folosite în calcule. Dacă un user introduce date greșite, programul va returna răspunsuri eronate sau
erori logice care sunt cel mai greu de depanat. Calculatorul nu poate să facă diferența între datele
corecte și cele incorecte.
#Acest program afiseaza salariul brut saptamanal pentru orele lucrate
def calculSalariuBrut():
#Se introduce numele angajatului
nume=input('Introdu numele angajatului:')
#Se introduce numarul orelor lucrate intr-o saptamana
ore=int(input('Introdu numarul orelor lucrate:'))
#Ia salariul orar
salOrar=float(input('Introdu salariul orar:'))
#Calculeaza salariul brut
salariu=ore*salOrar
#Afiseaza salariul
print('Sal. brut al angajatului',nume,'este:',format(salariu,',.2f'),'lei')
calculSalariuBrut()
Software de analiza numerica si simbolica 12
Ce s-ar întâmpla dacă la orele lucrate într-o săptămână, operatorul în loc de 50 de ore ar introduce
500 de ore? Rezultatul ar fi aberant. Același lucru se poate întâmpla și cu salariul orar.
Cum prevenim o astfel de greșeală? Simplu! Adăugăm o buclă while.
#Acest program afiseaza salariul brut saptamanal pentru orele lucrate
def calculSalariuBrut():
#Se introduce numele angajatului
nume=input('Introdu numele angajatului:')
#Se introduce numarul orelor lucrate intr-o saptamana
ore=int(input('Introdu numarul orelor lucrate:'))
#Asigura-te ca userul nu introduce o valoare absurda
while ore>60:
print('Eroare! Nu pot fi mai mult de 60 de ore!')
ore=int(input('Introdu orele corecte:'))
#Ia salariul orar
salOrar=float(input('Introdu salariul orar:'))
#Asigura-te ca userul nu introduce o valoare absurda
while salOrar>60:
print('Eroare! Salariul orar nu poate fi mai mare de 60 lei!')
salOrar=float(input('Introdu salariul orar corect:'))
#Calculeaza salariul brut
salariu=ore*salOrar
#Afiseaza salariul
print('Sal. brut al angajatului',nume,'este:',format(salariu,',.2f'),'lei')
calculSalariuBrut()
4. Instrucțiunea break
Instrucțiunea break termină bucla care o conține și dă
controlul instrucțiunii imediat următoare corpului buclei for
sau while. Dacă instrucțiunea break se află într-o buclă
imbricată, aceasta va termina bucla cea mai interioară.
Forma generală:
for variabila in secventa:
bloc de cod al lui for
if condition:
break
bloc de cod al lui for
codul ulterior
Software de analiza numerica si simbolica 13
while(conditie):
bloc de cod al lui while
if condition:
break
bloc de cod al lui while
codul ulterior
Exemplu:
#Acest script calculeaza suma unei serii de n
#valori numerice pozitive introduse de utilizator
#Daca se introduce un numar negativ, acesta nu este luat in considerare
#si se calculeaza suma valorilor pozitive introduse pana la acesta
5. Instrucțiunea continue
Instrucțiunea continue se folosește de obicei împreună cu if; este utilizată într-o buclă for sau
while pentru a sări la următoarea iterație.
Software de analiza numerica si simbolica 14
Forma generală:
for variabila in secventa:
bloc de cod al lui for
if condition:
continue
bloc de cod al lui for
codul ulterior
while(conditie):
bloc de cod al lui while
if condition:
continue
bloc de cod al lui while
codul ulterior
Exemplu:
#Acest script calculeaza suma unei serii de n
#valori numerice pozitive introduse de utilizator
#Daca se introduce un numar negativ, acesta nu este luat in considerare
6. Declarația pass
Instrucțiunea pass este o instrucțiune nulă. În timp ce interpretorul ignoră în totalitate
comentariul #, declarația pass nu este ignorată, dar nici nu se întâmplă nimic, rezultând
no operation (NOP).
În general, îl folosim ca substitut: să presupunem că avem o buclă sau o funcție care nu este încă
implementată, dar vrem să o implementăm în viitor. Nu putem avea un corp gol, deoarece
interpretorul ar da o eroare; folosim declarația pass pentru a construi un corp care nu face nimic.
Exemplu:
#pass este doar un substitut pentru functionalitatea care
#va fi adaugata ulterior
codul anterior
for val in sequence:
pass
............................
codul ulterior
MODULE
Modulele sunt fișiere care conțin instrucțiuni și definiții Python (variabile, funcții, clase). Rolul
modulelor este acela de a împarți programele în unități care pot fi gestionate mult mai ușor.
Câteva dintre funcțiile Python sunt construite în interpretorul lui. Dacă vrem să le folosim, trebuie
să le invocăm. Așa este cazul cu input, print, range.
Majoritatea funcțiilor sunt însă stocate în biblioteci numite module. Aceste module care sunt copiate
în computer în momentul instalării Python ajută la organizarea bibliotecilor standard.
De exemplu, putem defini un modul care poate conține funcții utilizate frecvent, funcții ce pot fi
astfel incluse în diverse aplicații în locul copierii codului de definire.
1. Module standard
Python Standard Library conține un număr mare de module utile ce sunt disponibile la instalarea
Python. Lista completă a acestor module standard poate fi consultată în directorul Lib din
directorul de instalare.
În plus, lista modulelor (modules) este disponibilă și prin intermediul interpretorului interactiv
folosind funcția help().
Software de analiza numerica si simbolica 16
>>>help('modules')
Please wait a moment while I gather a list of all available modules...
Pentru a invoca o funcție stocată într-un modul, trebuie scrisă o declarație de import a modulului
respectiv în partea cea mai de sus a programului:
import modul
2. Modulul math
Metodele modulului math sunt prezentate în tabelul următor.
Metoda Descriere
math.acos() Returns the arc cosine of a number
math.acosh() Returns the inverse hyperbolic cosine of a number
math.asin() Returns the arc sine of a number
math.asinh() Returns the inverse hyperbolic sine of a number
math.atan() Returns the arc tangent of a number in radians
math.atan2() Returns the arc tangent of y/x in radians
math.atanh() Returns the inverse hyperbolic tangent of a number
math.ceil() Rounds a number up to the nearest integer
Returns the number of ways to choose k items from n items
math.comb()
without repetition and order
Returns a float consisting of the value of the first parameter
math.copysign()
and the sign of the second parameter
math.cos() Returns the cosine of a number
math.cosh() Returns the hyperbolic cosine of a number
math.degrees() Converts an angle from radians to degrees
Returns the Euclidean distance between two points (p and q),
math.dist()
where p and q are the coordinates of that point
math.erf() Returns the error function of a number
math.erfc() Returns the complementary error function of a number
math.exp() Returns E raised to the power of x
math.expm1() Returns Ex - 1
math.fabs() Returns the absolute value of a number
math.factorial() Returns the factorial of a number
math.floor() Rounds a number down to the nearest integer
math.fmod() Returns the remainder of x/y
math.frexp() Returns the mantissa and the exponent, of a specified number
Returns the sum of all items in any iterable (tuples, arrays,
math.fsum()
lists, etc.)
math.gamma() Returns the gamma function at x
math.gcd() Returns the greatest common divisor of two integers
math.hypot() Returns the Euclidean norm
math.isclose() Checks whether two values are close to each other, or not
math.isfinite() Checks whether a number is finite or not
math.isinf() Checks whether a number is infinite or not
math.isnan() Checks whether a value is NaN (not a number) or not
math.isqrt() Rounds a square root number downwards to the nearest integer
Returns the inverse of math.frexp() which is x * (2**i) of the
math.ldexp()
given numbers x and i
math.lgamma() Returns the log gamma value of x
Returns the natural logarithm of a number, or the logarithm of
math.log()
number to base
math.log10() Returns the base-10 logarithm of x
math.log1p() Returns the natural logarithm of 1+x
math.log2() Returns the base-2 logarithm of x
Returns the number of ways to choose k items from n items with
math.perm()
order and without repetition
Software de analiza numerica si simbolica 18
Varianta 2:
#Calculul produsului scalar al doi vectori
#Primele doua argumente de intrare sunt modulele vectorilor
#iar cel de-al treilea este unghiul dintre vectori in grade
def produsScalar(x,y,alfa):
import math as m #de obicei pentru math se foloseste acronimul m
return x*y*m.cos(m.radians(alfa))
Varianta 3:
#Calculul produsului scalar al doi vectori
#Primele doua argumente de intrare sunt modulele vectorilor
#iar cel de-al treilea este unghiul dintre vectori in grade
def produsScalar(x,y,alfa):
from math import cos
from math import radians
return x*y*cos(radians(alfa))
Software de analiza numerica si simbolica 19
3. Modulul statistics
Acest modul oferă metode pentru calcularea statisticilor matematice ale datelor numerice cu valori
reale. Modulul statistics nu este destinat să concureze bibliotecilor terțe Python-ului, cum ar fi
NumPy, SciPy, sau pachetelor de statistică cu funcții complete destinate statisticienilor
profesioniști, cum ar fi Minitab, SAS și Matlab. Se adresează la nivelul calculatoarelor grafice și
științifice.
Dacă nu este menționat în mod explicit, funcțiile modulului acceptă doar date de tip int, float,
Decimal și Fraction.
Metoda Descriere
mean() Arithmetic mean (“average”) of data
fmean() Fast, floating point arithmetic mean
geometric_mean() Geometric mean of data
harmonic_mean() Harmonic mean of data
median() Median (middle value) of data
median_low() Low median of data
median_high() High median of data
median_grouped() Median, or 50th percentile, of grouped data
mode() Single mode of discrete or nominal data
multimode() List of modes of discrete or nominal data
quantiles() Divide data into intervals with equal probability
pstdev() Population standard deviation of data
pvariance() Population variance of data
stdev() Sample standard deviation of data
variance() Sample variance of data
covariance() Sample covariance for two variables
correlation() Pearson’s correlation coefficient for two variables
linear_regression() Slope and intercept for simple linear regression
pe o mașină unealtă, au fost măsurate primele 25 de piese prelucrate, rezultând următorul eșantion:
40.06, 40.11, 40.05, 40.12, 40.10, 40.08, 40.06, 40.09, 40.10, 40.10, 40.07, 40.10, 40.15, 40.04, 40.01,
40.07, 40.07, 40.08, 40.11, 40.11, 40.06, 40.07, 40.09, 40.06, 40.06
Să se scrie un fișier script care să calculeze media de selecție, modulele, mediana, dispersia de
selecție și abaterea standard de selecție.
import statistics as st
valori=[40.06, 40.11, 40.05, 40.12, 40.10, 40.08, 40.06, 40.09, 40.10,\
40.10, 40.07, 40.10, 40.15, 40.04, 40.01, 40.07, 40.07, 40.08,\
40.11, 40.11, 40.06, 40.07, 40.09, 40.06, 40.06]
print('media=',format(st.fmean(valori),'.3f'))
print('module=',st.multimode(valori))
print('mediana=',st.median(valori))
print('disp.Sel=',format(st.variance(valori),'.3f'))
print('abSt.Sel=',format(st.stdev(valori),'.3f'))
Software de analiza numerica si simbolica 20
Răspuns:
media= 40.081
module= [40.06]
mediana= 40.08
disp.Sel= 0.001
abSt.Sel= 0.029
MODULE THIRD-PARTY
Python-ulpur fără module third-party nu poate fi folosit pentru sarcini rezolvabile de limbajele
Matlab, R etc. Dacă folosim Python în combinație cu module third-party ale sale. NumPy,
SciPy, Matplotlib, Pandas, acesta va aparține limbajelor de programare numerică de top
precum Matlab sau R.
Numpy este modulul third-party care oferă structurile de date de bază, implementând tablouri
(array). Modulul furnizează funcționalitățile necesare pentru a crea și manipula aceste structuri de
date.
SciPy se bazează pe Numpy, utilizând structurile de date furnizate de acesta. SciPy extinde
capacitățile NumPy cu funcții utile suplimentare pentru minimizare, regresie, transformare Fourier și
multe altele.
Matplotlib este un modul third-party de plotare pentru limbajul de programare Python și
modulele third-party NumPy și SciPy.
Bibliografie
1. Mircea Prodan, Cum să programezi în Python (Manual în limba română), 2014
2. Marian Bucos, PROGRAMARE. PYTHON, https://uncoded.ro
3. Adriana Drăghici, Introducere în limbajul Python, 2018
4. Czibula Istvan, Fundamentele Programării. Limbajul de programare PYTHON
5. Mark Lutz, Learning Python, 5th Edition
6. https://docs.anaconda.com/
7. https://docs.python.org/3/library/
8. https://opentechschool.github.io/python-beginners/ro/
9. https://python-course.eu/
10. https://numpy.org/doc/stable/reference/
11. https://www.tutorialspoint.com/numpy/index.htm
12. https://matplotlib.org