Documente Academic
Documente Profesional
Documente Cultură
CAPITOLUL I
INTRODUCERE ÎN MATLAB
MATLAB este un mediu de programare şi calcul tehnic ce însumează
calculul, vizualizarea şi programarea într-un mediu compact, unde problemele şi
soluţiile acestora sunt exprimate folosind notaţii matematice familiare. Utilizarea
acestui mediu este frecventă în domeniile:
Matematică şi calcule matematice;
Dezvoltarea algoritmilor de calcul şi programare;
Modelare, simulare şi prototipare;
Analiza, studiul şi vizualizarea datelor;
Diagrame şi reprezentări grafice în inginerie;
Dezvoltarea soft-urilor aplicative folosind metode de creare a
interfeţelor grafice interactive(GUI).
MATLAB este un sistem interactiv care foloseşte, ca element definitoriu,
matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix şi
LABoratory. MATLAB oferă facilităţi multiple prin familiile de aplicaţii specifice
numite toolbox-uri. Toolbox-urile sunt colecţii de funcţii MATLAB (fişiere “.m”)
care extind utilizarea mediului MATLAB, la rezolvarea unor clase de probleme
specifice. Toolbox-urile sunt utilizate intensiv în domeniile: procesarea sunetelor,
sisteme de control, reţele neuronale, simulare. Mediul MATLAB se compune din
cinci părţi principale:
NOŢIUNI ELEMENTARE
FERESTRELE DE LUCRU
File se tastează concomitent [Alt]+F- adică tasta [Alt] şi tasta [F])sau prin clic cu
mouse – ul asupra comenzii dorite.
Fiecare comandă din meniul principal furnizează un submeniu specific, în
cadrul acestuia selecţia putându-se face fie cu mouse-ul, fie cu ajutorul săgeţilor
prin deplasarea zonei active, fie prin tastarea literei marcate special în fiecare
subcomandă a respectivului meniu.
GESTIONAREA FIŞIERELOR
Selectând
comanda File din meniul
principal, prin [Alt] + F,
sau prin poziţionarea
mouse-ului în dreptul
cuvântului File, se
obţine un submeniu ca
cel prezentat în figura
alăturată.
Meniul File
conţine o suma de
submeniuri, dintre care
prezentăm:
New provoacă
deschiderea unui
sub-submeniu, care are opţiunile: “M-file”, “Figure” şi Model. Alegerea
opţiunii “M-file” va deschide o fereastră de editare a unui fişier, cu extensia
“.m”, în timp ce opţiunea “Figure” deschide o fereastră grafică.
Open … deschide o fereastră de dialog care permite selectarea şi
deschiderea unui fişier.
Open Selected analizează fişierele pentru selectare şi deschide pe cel
selectat.
Run Script…- permite rularea unui fişier script care are definită calea
(Path)
Save Workspace As… deschide o fereastră de dialog pentru a salva datele
din spaţiul de lucru într-un fişier, al cărui nume trebuie precizat.
Set Path …- deschide o casetă de dialog care permite setarea căii de acces
la un anumit fişier de pe hard- disc sau de pe unităţile mobile :floppy disc
sau CD ROM.
Preferences- permite configurarea formatului numeric, alegerea tipului
caracterelor, mărimea caracterelor etc.;
6 MATLAB în ingineria mecanică
EDITAREA PROGRAMELOR
ALEGEREA OPŢIUNILOR
DOCUMENTAŢIA DE AJUTOR
EDITAREA GRAFICELOR
Selectând meniul Edit din bara de meniuri a ferestrei grafice, sunt posibile
câteva opţiuni pentru modificarea reprezentărilor grafice:
Copy- copiază figura în Clipboard;
Copy Options…- copiază figura curentă în format meta sau bitmap(vezi
formatele fişierelor grafice în Windows), existând şi posibilitatea alegerii
MATLAB în ingineria mecanică 9
double 3*10^300 Reţele numerice cu dublă precizie. Este cel mai util;izat tip
5+6*i de variabile în MATLAB.
sparse speye(5) Matrice compactă bi-dimensională cu dublă precizie.
Matricile compacte stochează doar elementele nenule,
necesitând mai puţină memorie.
int8, uint8, uint8(magic(5)) Reţele de întregi cu şi fără semn cu lungimea de 8, 16, 32 de
int16, uint16, biţi. Permit manevrarea cantităţilor întregi într-un mod
int32, uint32 eficient. Aceste date nu pot fi utilizate în operaţii
matematice.
char ‘Pachet de Reţea de caractere(fiecare caracter are 16 biţi). Aceste reţele
programe’ sunt numite, în general, şiruri de caractere.
cell {25 ‘Pachet’ eye(2)} Reţea celulară. Elementele celulelor pot conţine alte
reţele.Celulele pot colecta date şi informaţii de factură şi
mărime diferită.
structure A.ziua=12; Reţea structurală. Reţelele structurii se numesc
A.culoare=’roşu’; câmpuri.Câmpurile pot conţine alte reţele. Ca şi celulele,
A.matrice=magic(3) structurile pot colecta date şi informaţii de factură şi
; mărime diferită.
user class inline(‘sin(x)’) Classa MATLAB. Această classa este creată de utilizator,
folosind funcţii MATLAB.
java class java.awt.Frame Classa Java. Se pot utiliza appleturi Java deja existente sau
se pot crea appleturi proprii.
Function @humps Manipulator al funcţiei MATLAB.
handle
» 1/4 [Enter]
returnează rezultatul:
» ans = 0.2500
A=
1 2 3
4 5 6
7 8 9
7 8 9
» S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+…
19+20;
» S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18…
??? S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18…
|
Error: Missing operator, comma, or semicolon.
NUMERE
» 0.1714
5
De exemplu, vectorul linie a 1,23456789012345678901 ,
3
în care 1.77245385090552 , poate fi afişat în diferite formate. Pentru
aceasta, se va introduce, în linia de comandă, mai întâi, vectorul a:
» a=[5/3,1.23456789012345678901,sqrt(pi)];
14 MATLAB în ingineria mecanică
» format short
a=
1.6667 1.2346 1.7725
» format short e
a=
1.6667e+000 1.2346e+000 1.7725e+000
» format short g
a=
1.6667 1.2346 1.7725
» format long
a=
1.66666666666667 1.23456789012346 1.77245385090552
» format long e
a=
1.666666666666667e+000 1.234567890123457e+000 1.772453850905516e+000
»format long g
a=
1.66666666666667 1.23456789012346 1.77245385090552
» format bank
a=
1.67 1.23 1.77
» format rat
a=
5/3 100/81 296/167
» format +
a=
+++
O mare atenţie trebuie acordată scrierii fracţiilor zecimale. Dacă aceeaşi
fracţie zecimală este scrisă în linia de comandă cu caracterul virgulă ( ,), atunci se
MATLAB în ingineria mecanică 15
» format short
»0.1714
ans =
0.1714
în timp ce, dacă, acelaşi număr, se introduce în “scriere est-europeană” (cu
caracterul virgulă, pentru separarea fracţiei zecimale), se vor afişa două
răspunsuri:
»0,1714
ans =
0
ans =
1714
»a=2i
a=
0 + 2.0000i
»a=2*i
a=
0 + 2.0000i
»b= 2j
b=
0 + 2.0000i
»b= 2*j
b=
0 + 2.0000i
16 MATLAB în ingineria mecanică
»c=3+sqrt(7)*i
c=
3.0000 + 2.6458i
»d=3+2/3i
d=
3.0000 - 0.6667i
»e=3+sqrt(2)*i
e=
3.0000 + 1.4142i
»e=3+2^(1/2)*i
e=
3.0000 + 1.4142i
» c=3+sqrt(7)i
??? a=3+sqrt(7)i
|
Error: Missing operator, comma, or semicolon.
Eroare:Lipseşte operatorul, virgula, sau paranteza dreaptă
»e=3+2^(1/2)i
??? a=3+2^(1/2)i
|
Error: Missing operator, comma, or semicolon.
»f=1+(2+sqrt(3))i
??? f=1+(2+sqrt(3))i
|
MATLAB în ingineria mecanică 17
OPERATORI ARITMETICI
FUNCŢII
Funcţii trigonometrice
sin - sinus
sinh - sinus hiperbolic
asin - inversa sinusului (arcsin)
asinh - inversa sinusului hiperbolic
cos - cosinus
cosh - cosinus hiperbolic
acos - inversa cosinusului
acosh - inversa cosinusului hiperbolic
tan - tangenta
18 MATLAB în ingineria mecanică
Funcţii exponenţiale
exp - exponenţiala simplă ( e x )
log - logaritmul natural ( ln x )
log10 - logaritmul în baza zece ( lg x )
log2 - logaritmul în baza doi ( log 2 x )
pow2 - puterile lui 2 ( 2 x )
sqrt - radical de ordin 2 ( x )
nextpow2 - puterea următoare a lui 2 ( 2 p abs( N ) )
Funcţii complexe
Aproximări şi resturi
MATLAB în ingineria mecanică 19
t
z 1
beta - funcţia Beta completă ( B( z , w ) (1 t ) w 1 dt )
0
1
1
t
z 1
betainc -funcţia Beta incompl. ( I x ( z , w ) (1 t ) w 1 dt
B( z , w )
0
)
betaln - logaritmul natural al funcţiei Beta
d
ellipj - funcţia Jacobi eliptică ( )
0
(1 m sin 2 )
1
1
2
ellipke - funcţia eliptică integrală (
[(1 t dt )
2
)(1 mt 2 )]
0
x
2
t2
erf - funcţia eroare ( erf ( x ) e dt )
0
2
t2
erfc - funcţia eroare complementară ( erfc( x ) e dt )
0
e
t
gamma - funcţia Gamma ( (a ) t a 1 dt )
0
20 MATLAB în ingineria mecanică
x
1
e
t a 1
gammainc - funcţia Gamma incompletă ( t dt )
(a )
0
gammaln - logaritmul natural al funcţiei Gamma
legendre - funcţia Legendre asociată
m
d m 1 d n 2 n
m
( Pn ( x)
m
( 1) (1 x 2
)2
dx n 2 n n! dx
x 1 )
cross - produs vectorial al doi vectori
dot - produs scalar al doi vectori
Operaţiuni cu matrici
NOTAŢII
»A=[1,2;3,4];B=[0,1,5;2,7,9];C=[1,2,3];D=[sqrt(2),0,pi,1;3,2,1,…
5;5,7,9,7];E=[1,3,5,7]
MATLAB în ingineria mecanică 23
»A(2,1) [Enter]
ans =
3
»B(1,3) [Enter]
ans =
5;
»D(3,4) [Enter]
ans =
7;
»E(4) [Enter]
ans =
7
Cea mai simplă metodă de definire a matricilor mici constă în utilizarea unei
liste explicite, a elementelor acesteia, respectând convenţiile de scriere. La
introducerea unei astfel de liste trebuie respectate următoarele reguli:
1 2
Astfel, matricea A= , se introduce de la tastatură cu secvenţa:
3 4
»A= 1 2 ; 3 4 [Enter]
A=
1 2
3 4
» A 1,2;3,4
A=
1 2
3 4
şi se afişează:
A=
1 2
3 4
5 6
MATLAB în ingineria mecanică 25
Un alt mod de definire a unei matrici constă în apelarea numelui unui fişier
de date aflat în memoria sistemului de calcul. Acest fişier trebuie să fi fost salvat,
în prealabil, pe hard-disc, în format ASCII (text), organizat ca o matrice
rectangulară (completă) şi trebuie să aibă extensia “ .m “. Astfel, de exemplu, dacă
pe hard-disc se găseşte un fişier cu numele matricea_A.m care conţine
următoarele linii de text:
» E=1:4 [Enter]
E=
26 MATLAB în ingineria mecanică
1 2 3 4
» F=0.1:0.1:0.5 [Enter]
F=
0.1000 0.2000 0.3000 0.4000 0.5000
» I2=eye(2);I3=eye(3);I34=eye(3,4); [Enter]
I2 =
1 0
0 1
I3 =
1 0 0
0 1 0
0 0 1
I34 =
1 0 0 0
0 1 0 0
0 0 1 0
Y2 =
1 1
1 1
Y34 =
1 1 1 1
1 1 1 1
1 1 1 1
»Z3=zeros(3)
Z3 =
0 0 0
0 0 0
0 0 0
Matricea “vidă” este o matrice cu, cel puţin, una dintre dimensiuni egală cu
zero, deci fără elemente definite, dar matricea există ca structură matematică:
»A=[]
Funcţia rand() generează matrici ale căror elemente sunt numere uniform
distribuite în intervalul de valori (0,1) . Cu secvenţa următoare se generează
matricile arbitrare B3 (cu dimensiunea 3x3), B34(cu dimensiunea 3x4) şi B345(cu
dimensiunea 3x4 în 5 variante, disponibilă numai în versiunile MATLAB
superioare versiunii 5.3 ):
»B3=rand(3);B34=rand(3,4);B345=rand(3,4,5);
B3 =
0.4514 0.3127 0.6831
0.0439 0.0129 0.0928
0.0272 0.3840 0.0353
B34 =
0.6124 0.0164 0.0576 0.7176
0.6085 0.1901 0.3676 0.6927
0.0158 0.5869 0.6315 0.0841
B345(:,:,1) =
0.4544 0.1536 0.7275 0.1210
0.4418 0.6756 0.4784 0.4508
0.3533 0.6992 0.5548 0.7159
B345(:,:,2) =
0.8928 0.8656 0.9084 0.0498
0.2731 0.2324 0.2319 0.0784
0.2548 0.8049 0.2393 0.6408
B345(:,:,3) =
0.1909 0.1708 0.3400 0.3932
0.8439 0.9943 0.3142 0.5915
0.1739 0.4398 0.3651 0.1197
B345(:,:,4) =
0.0381 0.9342 0.8729 0.9669
0.4586 0.2644 0.2379 0.6649
0.8699 0.1603 0.6458 0.8704
B345(:,:,5) =
0.0099 0.4302 0.6873 0.1556
0.1370 0.8903 0.3461 0.1911
0.8188 0.7349 0.1660 0.4225
»H4=hadamard(4)
H4 =
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
G). Matricea Hilbert
» suma_elementelor_pe_linie=sum(M3) [Enter]
suma_elementelor_pe_linie =
15 15 15
M4 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
MATLAB în ingineria mecanică 31
» suma_elementelor_pe_linie= sum(M4)
suma_elementelor_pe_linie =
34 34 34 34
» suma_elementelor_pe_coloana =sum(M4')
suma_elementelor_pe_coloana =
34 34 34 34
» suma_elementelor_pe_diagonala= sum(diag(M4))
suma_elementelor_pe_diagonala =
34
»P2=pascal(2);P3=pascal(3);P4=pascal(4);P5=pascal(5);
P2 =
1 1
1 2
P3 =
1 1 1
1 2 3
1 3 6
P4 =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
P5 =
1 1 1 1 1
1 2 3 4 5
32 MATLAB în ingineria mecanică
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
»trei=wilkinson(3)
trei =
1 1 0
1 0 1
0 1 1
»patru=wilkinson(4)
patru =
1.5 1 0 0
1 0.5 1 0
0 1 0.5 1
0 0 1 1.5
»cinci=wilkinson(5)
cinci =
2 1 0 0 0
1 1 1 0 0
0 1 0 1 0
0 0 1 1 1
0 0 0 1 2
MATLAB în ingineria mecanică 33
»sase=wilkinson(6)
sase =
2.5 1 0 0 0 0
1 1.5 1 0 0 0
0 1 0.5 1 0 0
0 0 1 0.5 1 0
0 0 0 1 1.5 1
0 0 0 0 1 2.5
9 6 7 12
4 15 14 1
O altă posibilitate de a accesa date din fişiere în format text sau binar, în
MATLAB-6, este aceea de a folosi calea File→ Import Data … care utilizează un
Import Wizard (Asistent pentru import date), acesta solicitând utilizatorului date
suplimentare privind calea fişierului ce urmează a fi importat. De exemplu, pentru
a importa fişierul “matrice”, care se găseşte pe hard-disc, în partiţia D:/ a acestuia,
D:/MATLAB-6/work/matrice, se va deschide fereastra de dialog din figură:
16 3 2 13
5 10 11 8
MATLAB în ingineria mecanică 35
9 6 7 12
4 15 14 1
»load matrice.dat
»B=matrice
B=
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
ELEMENTELE MATRICILOR
Elementele matricilor pot fi numere reale sau complexe, sau orice altă
expresie MATLAB. De exemplu, pentru introducerea matricei
4
x 1,3 3 1 2 3 se foloseşte scrierea:
5
rezultă:
» x=
-1.3000 1.7321 4.8000
Elementele unei matrici pot fi referite (se pot apela, sau se poate edita) cu
indici cuprinşi între paranteze rotunde “ ( ) “, cifrele reprezentând identificatorii de
linie, respectiv de coloană ai elementului apelat.
36 MATLAB în ingineria mecanică
» a = x(2) [Enter]
a=
1.7321
» A=[1,2;3,4];A(2,4) = 6 [Enter]
A=
1 2 0 0
3 4 0 6
1 2
(adică elementul din linia 2 coloana 4, al matricei A= este definit, de-
3 4
acum înainte, ca fiind numărul întreg 6,(Atenţie! Nu trebuie înlocuite elementele
care lipsesc: A13 , A14, A23, acest lucru este realizat automat de către mediul
MATLAB )).
MATLAB în ingineria mecanică 37
se obţine rezultatul:
»A=
1 2
3 4
5 6
7 8
»B=A(2,3, :) [Enter]
extrage liniile doi şi trei (“2:3”) şi toate coloanele din matricea curentă A,
obţinându-se matricea B:
B=
3 4
5 6
B=
21 4 8 2 53 36 40 34
7 9 0 8 39 41 32 40
A+32
A
6 7 8 9 38 39 40 41
3 5 7 9 35 37 39 41
69 52 56 50 37 20 24 18
55 57 48 56 23 25 16 24 A+16
A+48 54 55 56 57 22 23 24 25
51 53 55 57 19 21 23 25
35 37 39 41
69 52 56 50
55 57 48 56
54 55 56 57
A+48
51 53 55 57
37 20 24 18
23 25 16 24
22 23 24 25
A+16
19 21 23 25
» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A; x(:,2)=[]
x=
21 8 2
7 0 8
6 8 9
3 7 9
Pentru ştergerea unui singur element (de exemplu, tot al treilea element să
fie şters, considerând elementele matricei scrise “pe coloană”) se poate folosi
următoarea secvenţă:
» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A;
» x(1:3:16) =[]
x=
7 6 4 9 5 8 8 7 8 9
M=
1 2 3 4 5 6 7 8 9 10
-1 2 3 -4 5 -6 7 -8 9 -10
0 2 0 4 0 6 0 8 0 10
-1 2 -3 4 -5 6 -7 8 -9 10
1 2 3 0 0 0 7 8 9 10
10 9 8 7 6 5 4 3 2 1
MATLAB în ingineria mecanică 41
»B1=M(1:5,3) [Enter]
B1 =
3
3
0
-3
3
»D1=M(:,3) [Enter]
extrage din matricea M, o submatrice D1 cu elementele extrase din matricea M
(toate liniile şi numai coloana 3) având următoarea configuraţie:
»D1 =
3
3
0
-3
3
8
42 MATLAB în ingineria mecanică
»E1=M(1:5,:) [Enter]
UTILIZAREA SIMBOLURILOR
E=
(((1+2+3)/((12-3^5)/11)-(14+(34)^(1/5)- log(23))^(1/3))*8^((log(125))/(log(5))))-
sqrt(55)*(12-4^3)/(8)
Utilizarea acestei expresii, în calcule, (pentru determinarea valorii expresiei
f=E^2-3*E+log(E), de exemplu), este posibilă, folosind următoarea secvenţă
MATLAB:
» f=E^2-3*E+log(E)
f =((-2/7-(14+34^(1/5)- log(23))^(1/3))*8^(log(125)/log(5))+
13/2*55^(1/2))^2-3*(-2/7-(14+34^(1/5)-log(23))^(1/3))*8^(log(125)/
log(5))-39/2*55^(1/2)+log((-2/7-(14+34^(1/5)-log(23))^(1/3))*
MATLAB în ingineria mecanică 45
8^(log(125)/log(5))+13/2*55^(1/2))
»syms x a
»f=x^2-2*a*x+7
f=
x^2-2*a*x+7
» solve(f)
ans =
[ a+(a^2-7)^(1/2)]
[ a-(a^2-7)^(1/2)]
elementele matricei “simbolice” “ans” fiind cele două rădăcini ale ecuaţiei date.
CALCULE SIMBOLICE
Diferenţierea
» syms x a b c
» f=a*x^3+b*x^2+c*x
f=
a*x^3+b*x^2+c*x
2. –se aplică funcţia diff() expresiei simbolice, creată anterior,
“f”:
» diff(f)
ans =
3*a*x^2+2*b*x+c
46 MATLAB în ingineria mecanică
» diff(f,a)
ans =
x^3
»diff(f,x,2)
ans =
6*a*x+2*b –diferenţiala de ordinul doi în raport cu “x”
» diff(f,2)
ans =
6*a*x+2*b - diferenţiala de ordinul doi în raport cu “x”
» diff(f,3)
ans =
6*a - diferenţiala de ordinul trei în raport cu “x”
» diff(f,a,2)
ans =
0- diferenţiala de ordinul doi în raport cu “a”
» syms x y u v
» u=2*x^4-log(x^2+4);v=exp(x^2-8)+4*log(3*x^3-2);
» Der_partiala=jacobian([u;v],[x,y])
Der_partiala =
[8*x^3-2*x/(x^2+4)-(2*x+2*y^3)/(x^2+2*x*y^3-5*y),- (6*x*y^2-5)/(x^2+2*x*y^3-5*y)]
[ 2*x*exp(x^2-8*y^3+6*y^2)+36*x^2/(3*x^3-2*y),(-24*y^2+12*y)*exp(x^2-8*y^3+6*y^2)-8/(3*x^3-2*y)]
» syms x y u v a b c d
» u=cos(a*x+b*y);v=sin(c*x-d*y);
» Der_partiala=jacobian([u;v],[x,y])
Der_partiala =
[ -sin(a*x+b*y)*a, -sin(a*x+b*y)*b]
[ cos(c*x-d*y)*c, -cos(c*x-d*y)*d]
»limit((x^x-a^x)/(a^x-a^a),a)
ans =
1/log(a)
48 MATLAB în ingineria mecanică
»syms n a
» limit((n^2)*(a^(1/n)-a^(1/(n+1))),n,inf)
ans =
log(a)
» limit(exp(1/(x-a)),x,a,'left')
ans =
0
» limit(exp(1/(x-a)),x,a,'right')
ans =
inf
n
Pentru calculul sumelor de tipul
k 1
a k , în care şirul a k este definit
» syms k n
MATLAB în ingineria mecanică 49
» symsum(1/(k^2+k),1,n)
ans =
-1/(n+1)+1
k 0
şi
k 0
» syms k x y n
»symsum((x^k)*(k^2+1),k,0,inf)
ans =
-(2*x^2-x+1)/(x-1)^3
» syms k x y n
»symsum(x^k+y^k,k,0,inf)
ans =
-1/(x-1)-1/(y-1)
F((ak)) f k (a ), k 0,1,2,..., n
» syms x
» taylor(exp(x^2),4,3)
ans =
exp(9)+6*exp(9)*(x-3)+19*exp(9)*(x-3)^2+42*exp(9)*(x-3)^3
ECUAŢII ALGEBRICE
» solve(x^4-7*x^3+19*x^2-23*x+10)
ans =
[ 1]
[ 2]
[ 2+i]
[ 2-i]
» solve(‘x^2=6*x-5’)
ans =
[ 1]
[ 5]
x 2 y -2 - 2
Rezolvarea sistemului de ecuaţii este realizabilă cu
2ln(x 7) yln3
următoarea secvenţă:
»syms x y
» [x,y]=solve('x=2^(y-2)-2','2*log(x+7)=y*log(3)')
x=
1/4*exp(2.7726)-2
y=
2.7726/log(2)
(x y ) 2 3z 1
x 2 ax (a 1)y a 0 ( y z ) 2 3u 1
2 ; . Secvenţa următoare rezolvă
y ay (a 1)x a 0 ( z u ) 2 3x 1
( u x ) 2 3y 1
primul sistem:
»syms x y a
» S=solve('x^2+a*x+(a+1)*y=-a','y^2+a*y+(a+1)*x=-a')
S=
x: [4x1 sym]
y: [4x1 sym]
» Solutiile=[S.x,S.y]
Solutiile =
[ 1/2-1/2*(-3-8*a)^(1/2), 1/2+1/2*(-3-8*a)^(1/2)]
[ 1/2+1/2*(-3-8*a)^(1/2), 1/2-1/2*(-3-8*a)^(1/2)]
[-a-1/2+1/2*(4*a^2+1)^(1/2),-a-1/2+1/2*(4*a^2+1)^(1/2)]
[ -a-1/2-1/2*(4*a^2+1)^(1/2), -a-1/2-1/2*(4*a^2+1)^(1/2)]
» syms x y z u
»S=solve('(x+y)^2=3*z-1','(y+z)^2=3*u-1','(z+u)^2=3*x-
1','(u+x)^2=3*y-1')
S=
u: [2x1 sym]
x: [2x1 sym]
MATLAB în ingineria mecanică 53
y: [2x1 sym]
z: [2x1 sym]
» solutii=[S.x,S.y,S.z,S.u]
solutii =
[3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2)]
[3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2)]
» syms x y t
» y1=dsolve('Dy=-y*(0.9/(1+2*t))','y(0)=1')
y1 =
1/(1+2*t)^(9/20)
» y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x')
y2 =
54 MATLAB în ingineria mecanică
1/(1+2*x)^(9/20)
» y3=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1')
y3 =
exp(-9/10/(1+2*x)*t)
1
Să se calculeze: 5
3 44 83
Să se calculeze expresiile:
2
2
E 2 3 15 ; E3 43,56 ; E 4 3 18 45 23 8 99
88,9
În MATLAB, se foloseşte algoritmul:
» E2=15^(1/3) [Enter]
E2 =
MATLAB în ingineria mecanică 55
2.4662
» E3=sqrt(43.56) [Enter]
E3 =
6.6000
» E4=((18-45*(2/88.9))^(1/3)+sqrt(23))^2-99^(1/8) [Enter]
E4 =
52.4891
Să se calculeze :
E 5 e 5 3
3
2
; E 6 ln 9 ; E 7 lg 3 2002 13
1
5
; E 8 log 4 90 4 3
1 2
3 4
E9 e
12 3 5 3 12 4 3
E 10 1 2 3 : 14 5 34 ln 23 8 log5 125 _ 55
11 8
» E7=log10(2002^(1/3)-13*sqrt(1/5))
E7 =
0.8318
» E8=(log(90-3^(1/4)))/(log(4))
E8 =
3.2353
56 MATLAB în ingineria mecanică
1 2
Pentru calculul expresiei , se procedează astfel :
E9 e 3 4
»x=[1,2;3,4];
»E9=exp(x)
E9 =
2.7183 7.3891
20.0855 54.5982
»E9=exp([1,2;3,4])
APLICAŢII
Să se introducă de la tastatură, următoarele matrici :
e lg 9 1
1 2 0 ln 5
A= 3 B= C= 2 D=
3 4
2 ln 7 lg 18 6 9
3
2 0 1
4
3 2 6 5
5 3
3 ln 9 7
Să se scrie numărul :
123,456789012345678901
în formatele: “scurt”, “lung”, “cu virgulă mobilă – scurt = eng. scurt”, “cu
virgulă mobilă – lung =eng. lung”, “raţional”, “cu două zecimale exacte”.
58 MATLAB în ingineria mecanică
M=[1,2,3,4,5,6,7,8,9,10;-1,2,3,-4,5,-6,7,-8,9,-10;0,2,0,4,0,6,0,8,0,10;...
-1,2,-3,4,-5,6,-7,8,-9,10;1,2,3,0,0,0,7,8,9,10;10,9,8,7,6,5,4,3,2,1]
» A+B -adunare
»A-B -scădere
» A*B -înmulţire
» A/B -împărţire la dreapta
» A\B -împărţire la stânga
» A^B -ridicare la putere
» A' -transpunere
» A+B - plus(A,B)
»A-B - minus(A,B)
» A*B - mtimes(A,B)
» A/B - mrdivide(A,B)
» A\B - mldivide(A,B)
» A^B - mpower(A,B)
» A' - ctranspose(A)
A.*B - times(A,B)
A./B - rdivide(A,B)
A.\B - ldivide(A,B)
A.^B - power(A,B)
A.' - transpose(A)
60 MATLAB în ingineria mecanică
Ex.:
1 2 5 6
Fie: a= ; b= ; c=2.
3 4 7 8
Să se calculeze:a+b; a-b;a+c.
» a2=a-b [Enter]
a2 =
-4 -4
-4 -4
» a3=a+c [Enter]
a3 =
3 4
5 6
Ex.:
1 2 2 3
4
Fie: m= n= lg 8
;
3 4 e ln 7 1 e
Să se calculeze: M=m+n
» M=m+n
» syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21
b22 b23 b31 b32 b33;
apoi se declară matricele A, respectiv B:
» A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]
A=
[ a11, a12, a13]
[ a21, a22, a23]
[ a31, a32, a33]
PRODUSUL VECTORIAL ŞI
PRODUSUL SCALAR AL DOI VECTORI
» a=[1;2;3]
a=
1
2
3
» b=[5,6,7]
b=
5 6 7
atunci produsul vectorial, respectiv produsul scalar, al celor doi vectori sunt:
» prod_vect_simbolic=a_simbolic*b_simbolic
prod_vect_simbolic =
[ a11*b11, a11*b12, a11*b13]
[ a21*b11, a21*b12, a21*b13]
[ a31*b11, a31*b12, a31*b13]
» prod_scalar_simbolic=b_simbolic*a_simbolic
prod_scalar_simbolic =
a11*b11+a21*b12+a31*b13
PRODUSUL MATRICILOR
» a3=a*c [Enter]
a3 =
2.0000 4.0000
6.0000 8.0000
10.0000 5.6569
0 + 2.0000i 6.2832
» a4=b*c [Enter]
a4 =
3.4641 -6 4i 2 - 4i 14
16.0000 18 0 2 12
a 11 a 12 a 13
Înmulţirea a două matrici simbolice, A a 21 a 22 a 23 şi
a 31 a 32 a 33
b 11 b 12 b 13
B b 21 b 22 b 23 ., se realizează astfel:
b 31 b 32 b 33
» syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21 b22 b23
b31 b32 b33;
» X=A*B
X=
[a11*b11+b21*a12+a13*b31,b12*a11+a12*b22+a13*b32,b13*a11+b23*a12+a13*b33]
[a21*b11+b21*a22+a23*b31,b12*a21+a22*b22+a23*b32,b13*a21+b23*a22+a23*b33]
[a31*b11+b21*a32+a33*b31,b12*a31+a32*b22+a33*b32,b13*a31+b23*a32+a33*b33]
ÎMPĂRŢIREA LA DREAPTA
Ex.:
1 2 5 6
Fie: a= ; b= ;
3 4 7 8
Să se calculeze:a/b; b/a.
Cu secvenţa MATLAB următoare, rezultă:
» a=[1,2;3,4];b=[5,6;7,8];
» a1=a/b [Enter]
a1 =
3.0000 -2.0000
2.0000 -1.0000
» a2=b/a [Enter]
66 MATLAB în ingineria mecanică
a2 =
-1 2
-2 3
1 2 3 3 2i 1 2i 7
Fie: a= ; b= .
3 4 8 9 0 1 6
» a=[1,2;3,4] ; b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6] ;
» d=a/b [Enter]
a 11 a 12
Pentru împarţirea la dreapta, a două matrici simbolice, A şi
a 21 a 22
B b 1 b 2 , se procedează astfel:
» X=B/A
X=
[ -(a21*b2-b1*a22)/(a11*a22-a12*a21), (a11*b2-a12*b1)/(a11*a22-a12*a21)]
x 1 a 11 x 2 a 12 b 1
Soluţiile sistemului de ecuaţii: se obţin cu
x 1 a 21 x 2 a 22 b 1
următoarele comenzi
» x1 = X(1)
x1 =
-(a21*b2-b1*a22)/(a11*a22-a12*a21)
» x2 = X(2)
x2 =
(a11*b2-a12*b1)/(a11*a22-a12*a21)
ÎMPĂRŢIREA LA STÂNGA
Ex.6:
1 2 5 6
Fie: A= ; B= ;
3 4 7 8
Să se calculeze:A\B; B\A.
Cu secvenţa MATLAB următoare, rezultă:
» A=[1,2;3,4];b=[5,6;7,8];
» A1=A\B [Enter]
68 MATLAB în ingineria mecanică
A1 =
-3.0000 -4.0000
4.0000 5.0000
» A2=B\A [Enter]
A2 =
5.0000 4.0000
-4.0000 -3.0000
PRODUSUL KRONECKER
Produsul Kronecker este cea mai mare matrice formată din toate produsele
posibile realizate între elementele a două matrici (nu trebuie confundat “Produsul
Kronecker” cu “simbolul Kronecker” sau “delta Kronecker”, a cărei exprimare este
1 pentru i k
dată de: ik ). Această matrice este utilizată în calculul
0 pentru i k
tensorial, în teoria deformării elastice, în teoria deformării plastice, respectiv în
calculele aferente analizei cu elemente finite a proceselor de deformare plastică şi
elasto-vâsco-plastică a materialelor. Vectorii spaţiali, definiţi pe spaţiul cu trei
dimensiuni 3 , reprezintă mărimi reale, de exemplu mărimi fizice, care conţin
trei informaţii (trei scalari). Descrierea unui vector v în baze diferite ai şi bi prin
MATLAB în ingineria mecanică 69
v v ai a i v bi b i
Deviatorul tensiunilor
xy xz
x m
D yx y m yz
z x zy z m
T S r D
Invarianţii eforturilor unitare
70 MATLAB în ingineria mecanică
1 x y z
22 2
2 xy yz zx xy yz zx
3 x y z 2 xy y z z x x y z 2 y xz 2 z xy 2
1 1
x m 2 x y 2
xz
1 1
D yx y m yz ;
2 2
1 1
2 zx 2
zy z m
1 2 3
De exemplu, produsul Kronecker al două matrici X ,
4 5 6
1 2
Y este:
3 4
» X=[1,2,3;4,5,6]; Y=[1,2;3,4];
» kron(X,Y)
ans =
1 2 2 4 3 6
3 4 6 8 9 12
4 8 5 10 6 12
12 16 15 20 18 24
» kron(Y,X)
ans =
1 2 3 2 4 6
4 5 6 8 10 12
3 6 9 4 8 12
12 15 18 16 20 24
de c ori
Dacă b este un scalar iar c este o matrice atunci calculul puterii b c se
realizează folosind valorile proprii ale matricei c respectiv ale scalarului b.
Obs. Operaţia are sens numai dacă matricea b este pătratică iar c
un scalar.
Ex.7:
1 2
Fie: a= ; b=3;c= - 3. Să se calculeze:a^b; b^a; a^c
3 4
» a=[1,2;3,4];b=3;c= -3;
» a1=a^b [Enter]
a1 =
37 54
81 118
» a2=b^a [Enter]
a2 =
87.8864 127.1198
190.6797 278.5661
» a3=a^c [Enter]
a3 =
-14.7500 6.7500
10.1250 -4.6250
TRANSPUNEREA MATRICILOR
D = det(X)
Ex:
Să se calculeze determinanţii următoarelor matrici:
1 2 3
1 2 3 3 2i 1 2i 7
A B 4 5 6 C .
3 4 8 9 0 1 6
7 8 9
» B1 = det(B)
B1 = 0
» C1 = det(C)
74 MATLAB în ingineria mecanică
» syms a b c d;
»D1= det([a, b; c, d])
2 / 3 1 / 3
Similar este cazul matricei A , unde se poate utiliza
1 1
următoarea secvenţă:
» r = det(A)
r = 1/3
CALCULUL INVERSEI
MATLAB în ingineria mecanică 75
Ex. :
2 1
Se cere inversa matricei: A = .
1 1
Cu secvenţa MATLAB următoare, rezultă:
» A = [2, 1 ; -1, 1] ;
» B = inv(A)
B=
0.3333 -0.3333
0.3333 0.6667
PSEUDO- INVERSA
»C=[9,4;2,8;6,7] ;
»P=pinv(C)
P=
0.1159 -0.0729 0.0171
-0.0534 0.1152 0.0418
Printr-un calcul simplu se poate observa că produsul P*C reprezintă
matricea unitate de ordinul doi:
»I=P*C
I=
1.0000 0.0000
0.0000 1.0000
în timp ce, produsul C*P este o matrice de ordinul 3x3, dar nu matricea unitate :
»Q=C*P
Q=
0.8293 -0.1958 0.3213
-0.1958 0.7754 0.3685
0.3213 0.3685 0.3952
RANGUL MATRICEI
Ex.:
MATLAB în ingineria mecanică 77
3 2 5 4
Să se determine rangul matricei A = 3 1 3 3 .
3 5 13 11
A x x B B , sau x A 1 B , deci x A 1 B
Egalitatea din ultima relaţie, se obţine numai pentru anumiţi vectori B . Aplicând
norma ambilor membri ai egalităţii A·x=B, se obţine :
B A x ,
x B
A A -1
x B
în care A-1 este matricea inversă a lui A, obţinută prin calcule (afectate de erori de
rotunjire, adică AA -1 I ). Astfel, pentru o matrice nesingulară A, pozitiv
definită, se defineşte numărul de condiţionare calculat ca raportul dintre cea mai
mare şi cea mai mică valoare proprie a acesteia :
1
cond .( A ) A A -1 1
2
x B
cond.( A )
x B
B
în care B
măsoară incertitudinea relativă existentă în vectorul B (de exemplu,
B
dacă elementele vectorului B sunt date cu trei cifre semnificative, atunci B
MATLAB în ingineria mecanică 79
x
este de ordinul 10-3 sau 10-4), iar x
reprezintă incertitudinea relativă existentă
în vectorul x, şi este determinată de incertitudinea existentă în vectorul B.
Dacă, atât matricea A cât şi vectorul B sunt afectati de erori, atunci
sistemul se scrie sub forma :
A A x x B B x A A 1 B Ax
Dacă vectorul termenilor liberi este determinat exact şi neafectat de erori,
iar matricea A are coeficienţi perturbaţi de erori, atunci sistemul Ax=B devine :
A A x x B ,
de unde rezultă :
x x A A 1 B sau x A A 1 A 1 B
Ultima relaţie, aranjată, devine :
x A 1 A x x ,
x A -1 A x x sau
x A
cond. A
x x A
» cond(X)
O funcţie mai performantă care permite calculul numărului de condiţionare
este rcond() şi se apelează cu sintaxa:
» rcond(X)
În MATLAB:
-numerele de condiţionare :
» C1=cond(A1); c2=cond(A2)
C1=1.7234e+004 c2=inf
» D1=condest(A1); d2=condest(A2)
D1=2,0845e+004 d2=2.7129e+017
» R1=rcond(A1); r2=rcond(A2);
R1=5.4453e-005 r2=4.1842-018
» X2=A2\B
X2=[-8.1041 7.0348]*1.0e+013
Ex.:
Se vor determina numerele de condiţionare pentru sistemul « iniţial » de ecuaţii:
45x 1 23,123x 2 2,34
x1 15x 2 3,45
82 MATLAB în ingineria mecanică
» d1=condest(a1)
d1 =
4.8072
» r1=rcond(a)
r1 =
0.2435
» r2=rcond(a1)
r2 =
0.2434
» b=[2.34;3.45];
» x1=a\b
x1 =
-0.0685
0.2346
» x2=a1\b
x2 =
-0.0685
0.2346
MATLAB în ingineria mecanică 83
FACTORIZAREA MATRICILOR
a11 x1 a 12 x 2 a 1n x n b1 a 11 a 12 a 1n
a x a x a x b a
21 1 22 2 2n n 2 21 a 22 a 2n
, în care A , este
a n1 x 1 a n 2 x 2 a nn x n b n
a n1 a n 2 a nn
x1 b1
x b
matricea coeficienţilor; x 2
este vectorul necunoscutelor; B este
2
xn b n
vectorul termenilor liberi, ai sistemului, metoda generală de transformare într-un
sistem echivalent, “Metoda de eliminare a lui Gauss”, se prezintă în continuare.
ai2 2
cu 2 , pentru eliminarea necunoscutei x2 din ultimele n-2 ecuaţii ale acestui
a
22
sistem, obţinându-se un nou sistem: A 2 x B 2 . Se observă că înainte de
eliminarea necunoscutei xk, sistemul echivalent, obţinut după eliminarea
necunoscutelor x1, x2, …, xk-1, poate fi scris sub forma:
A k x B k , k=1,2, …, n
a cărui descriere analitică este:
b 1 k
k
k k
A a i,j , B k b 2 k
, iar elementele matricei A sunt:
k
b n
k 1
ai , j , ik 1
k
a i , j 0, k,ij k - 1
k 1
ai ,k 1
a i k, j 1 ak k11, j , i k, j k
a k 1
k 1, k 1
, respectiv, elementele
b k 1 , i k 1
i
k k 1
b i k 1 a i ,k 1 k 1
bi k 1 b k 1 , ik
a k 1,k 1
1 x a 1 x a 1 x a 1 x b 1
a 11 1 12 2 1k k 1n n 1
a 22 x 2 a 2k x k a 2n x n b 22
2 2 2
k k x bk
a kk x k a kn n k
n x b n
a nn n n
k 1 k 1
j1
l kju j,k u k ,k 1 a kk
u k ,k a k ,k
j1
l kju jk
k 1 k 1
j1
l kju j,k 1 u k ,k 1 a k ,k 1
u k ,k 1 a k ,k 1
j1
l kju j,k 1
k 1 k 1
j1
l kju jn u kn a kn
u kn a kn
j1
l kju jn
Elementele coloanei k a matricei L (inferioare diagonalei principale), sunt
date de ecuaţiile:
1
k 1
k 1
l k 1, ju j,k l k 1,k u k ,k a k 1,k l
k 1,k
u k ,k
a
k 1,k l u
k 1, j jk
j1 j1
k 1 k 1
1
l k 2, j u j,k l k 2,k u k ,k a k 2,k
l k 2,k
u k ,k
a k 2,k l k 2, j u jk
j 1
j 1
k 1
k 1
l n, ju j,k l n,k u k ,k a n ,k l n ,k 1 a n,k
l n , j u jk
j1 u k ,k
j 1
FACTORIZAREA CHOLESKY
S=L’*L
L=chol(S)
88 MATLAB în ingineria mecanică
[L,P]=chol(S)
» S=pascal(7)
S=
1 1 1 1 1 1 1
1 2 3 4 5 6 7
1 3 6 10 15 21 28
1 4 10 20 35 56 84
1 5 15 35 70 126 210
1 6 21 56 126 252 462
1 7 28 84 210 462 924
» L=chol(S)
L=
1 1 1 1 1 1 1
0 1 2 3 4 5 6
0 0 1 3 6 10 15
0 0 0 1 4 10 20
0 0 0 0 1 5 15
0 0 0 0 0 1 6
0 0 0 0 0 0 1
Rt·R·X=B
RtY=B şi RX=Y.
MATLAB în ingineria mecanică 89
»X=R\(R’\B)
Ex.:
Fie sistemul de ecuaţii:
9 x 1 x 2 2x 1
3
x 1 8 x 2 5 x 3 2
2x 5x 7 x 1
1 2 3
x 2y z t 1
2x y 3z 3t 2
Temă:Să se rezolve sistemul: prin factorizare Choleski.
x y z t 1
2x 7 y 2z 3t 4
Ex.:
1 2 3
Să se factorizeze matricea A 4 5 6 prin metoda lower-upper.
7 8 0
Cu secvenţa MATLAB
»A=[1,2,3;4,5,6;7,8,0];
»[L]=lu(A)
L=
7.0000 8.0000 0
0.1429 0.8571 3.0000
0.5714 0.5000 4.5000
»[L,U]=lu(A)
94 MATLAB în ingineria mecanică
L
0,1429 1,0000 0
Matricea
0,5714 0,5000 1,0000 triunghiulară
1,0000 0 0 permutată
U
7,0000 8,0000 0
Matricea
0 0,8571 3,0000 superior
0 0 4,5000 triunghiular
» [L,U,P]=lu(A)
L=
1.0000 0 0
0.1429 1.0000 0
0.5714 0.5000 1.0000
U=
7.0000 8.0000 0
0 0.8571 3.0000
0 0 4.5000
P=
0 0 1
1 0 0
0 1 0
Matricea Ap, (linia 2 pivotată, astfel încât aceasta devine linia 1 ) este
4 0 6
A p 1 2 3 , iar matricile triunghiulare L (nepivotată) respectiv matricea
2 1 3
U
1 0 0 4 0 6
0 , respectiv U 0
sunt: L 0.25 1 2 1.5
0.5 0.5 1 0 0 0.75
» A=[1,-2,3;4,0,6;2,-1,3];
» [L]=lu(A)
L=
4.0000 0 6.0000
0.2500 -2.0000 1.5000
0.5000 0.5000 -0.7500
» [L,U]=lu(A)
L=
0.2500 1.0000 0
1.0000 0 0
0.5000 0.5000 1.0000
U=
4.0000 0 6.0000
0 -2.0000 1.5000
0 0 -0.7500
96 MATLAB în ingineria mecanică
» [L,U,P]=lu(A)
L=
1.0000 0 0
0.2500 1.0000 0
0.5000 0.5000 1.0000
U=
4.0000 0 6.0000
0 -2.0000 1.5000
0 0 -0.7500
P=
0 1 0
1 0 0
0 0 1
Rezolvarea sistemelor de ecuaţii AX=B prin factorizarea lower upper
presupune următoarele etape:
»[L,U]=lu(A);
x 2y 3z 1
4x 6z 2 , se foloseşte următoarea secvenţă MATLAB:
2x y 3z 1
»A=[1,-2,3;4,0,6;2,-1,3];B=[1;-2;-1];
»[L,U]=lu(A);X=U\(L\B)
MATLAB în ingineria mecanică 97
X=
-2
0
1
»[L,U,P]=lu(C); X=U\(L\B)
X=
-0.5000
1.5000
0.5000
x 2y 3z 1
4x 6z 2 , se foloseşte următorul model Simulink :
2x y 3z 1
FACTORIZAREA q-r
98 MATLAB în ingineria mecanică
Ex.:
1 2 3
4
Să se determine descompunerea qr a matricei A 5 6
7 8 0
Cu secvenţa MATLAB următoare, rezultă:
»A=[1,2,3;4,5,6;7,8,0];
» [Q,R]=qr(A)
Q=
-0.1231 0.9045 0.4082
-0.4924 0.3015 -0.8165
-0.8616 -0.3015 0.4082
R=
-8.1240 -9.6011 -3.3235
0 0.9045 4.5227
0 0 -3.6742
1. Y=(Q-1)*B
100 MATLAB în ingineria mecanică
2. X=R\Y
»[Q,R]=qr(A); X=R\(inv(Q)*B)
x 2y 2
x 2y 3
De exemplu, soluţia sistemului liniar , se obţine, folosind
3x y 7
2x y 11
următoarea secvenţă:
» A=[1,-2;1,2;3,-1;2,1]; B=[-2;3;7;11]; [Q,R]=qr(A);
» X=R\(inv(Q)*B)
X=
3.0470
1.7047
» A=[1,-2,1,-1;2,-1,3,-3;1,1,1,-1;2,7,2,8]; B=[1;6;7;0];
[Q,R]=qr(A);
» X=R\(inv(Q)*B)
X=
MATLAB în ingineria mecanică 101
7.0000
2.0000
-4.4000
-2.4000
a 11 a 12 a 13 a 1n x1
a a 22 a 23 a 2n
21 x 2
a 31 a 32 a 33 a 3n x 3 0
a n1 a n2 a n3 a nn x n
unde A este o matrice simetrică reală, x este vectorul variabilelor independente iar
un parametru scalar denumit valoare caracteristică sau valoare proprie.
Problema rezolvării sistemului constă în determinarea parametrului şi a
vectorului x corespunzător, vector cunoscut sub denumirea de vector caracteristic
sau vector propriu.
În determinarea soluţiilor nebanale ale sistemului de ecuaţii :AX=X, unde :
A – este matrice pătratică de ordinul n,
X – este vector coloană de ordinul n,
- este un scalar,
valorile X, respectiv , care satisfac ecuaţia de mai sus se numesc vectori proprii,
respectiv valori proprii.
Pentru a evidenţia semnificaţia fizică a valorilor şi vectorilor proprii se
consideră următoarele exemple.
2k 2m2 k 0 x
1
2
k 2k 4m k x2 0
2
0 k 2k 6m x3
unde ω reprezintă frecvenţa, x vectorul deplasare şi k=s/l (s- tensiunea în bară, 4l-
lungimea barei). Dacă se realizează substituţia m 2 / k , sistemul de ecuaţii ale
mişcării, devine:
104 MATLAB în ingineria mecanică
dx12
m 1 2 k 1 x 1 k 2 ( x 2 x1 )
dt
dx 22
m 2 2 k 2 ( x 2 x1 ) k 3 x 2
dt
unde x 1 , x 2 sunt deplasările pe orizontală faţă de starea de echilibru, iar t este
timpul.
MATLAB în ingineria mecanică 105
m1n2 y 1 k 1y 1 k 2 y 1 k 2 y 2 0
m 2 n2 y 2 k 2 y 2 k 3 y 2 k 2 y 1 0
( 2 )y 1 y 2 0
y 1 ( 2 )y 2 0
Sistemul omogen, în necunoscutele y 1 , y 2 , are soluţia banală
y 1 y 2 0 , pentru orice valoare λ, fapt neinteresant din punct de vedere fizic.
Astfel se impune condiţia ca det A 0 (A fiind matricea sistemului), rezultând
ecuaţia polinomială în :
2 1
P2 ( ) det 2 4 3 0; 1 1, 2 3
1 2
1 2
y(1) 1 (2) y1
y 1 , y 2
1 2
y2 y2
Din punct de vedere fizic, y 1 şi y 2 reprezintă frecvenţe naturale în
forma adimensională pentru sistemul considerat:
m12
1 1, 1 k / m
k
m 22
2 3, 2 3k / m
k
1 şi y 2 pentru 1 1 şi în
Dacă se rezolvă sistemul omogen în y 1 1
1 1
y() 1 1 ()y21
y 1; y 2
1 1 2 1
y2 y2
Se observă că 1 este frecvenţa cea mai joasă iar 2 este frecvenţa cea
mai înaltă pentru sistemul considerat, respectiv, faptul că la frecvenţa 1 cele
două corpuri se deplasează la fel şi în aceeaşi direcţie, iar la frecvenţa 2 cele
două mase se deplasează cu aceeaşi mărime dar în sensuri opuse. Cele două
exemple prezentate au menirea să evidenţieze faptul că valorile proprii şi vectorii
108 MATLAB în ingineria mecanică
V=eig(A)
V=eig(A,B)
[V,D]=eig(A)
[V,D]=eig(A,B)
[V,D]=eig(A,'nobalance')
Dacă matricea are valori proprii de ordinul întâi (valorile proprii sunt
distincte), atunci vectorii proprii sunt independenţi. Dacă vectorii proprii nu sunt
independenţi, atunci matricea originală nu este neregulată. Chiar dacă o matrice
este neregulată, soluţia funcţiei eig() satisface ecuaţia:
A*X=X*D
AX=BX
MATLAB în ingineria mecanică 109
unde A şi B sunt matrici pătratice de ordinul n, iar este un scalar. Valorile lui
care satisfac ecuaţia se numesc valori proprii generalizate şi valorile X
corespunzătoare sunt vectorii proprii generalizaţi. Dacă B este o matrice
nesingulară (det(B)0, adică matricea este inversabilă), problema calculului
valorilor şi vectorilor proprii se reduce la o problemă standard cu valori proprii prin
înlocuirea lui A cu B-1A, întrucât ecuaţia este echivalentă cu:
B-1AX=X
» V=eig(A,B)
» [V,D]=eig(A,B)
»A=[2,-1,0;-1,2,-1;0,-1,2]
»[V,D]=eig(A)
V=
0.5000 -0.7071 -0.5000
0.7071 0.0000 0.7071
0.5000 0.7071 -0.5000
D=
0.5858 0 0
0 2.0000 0
0 0 3.4142
»V=eig(A)
V=
0.5858
2.0000
3.4142
B.—pentru cel de-al doilea sistem :
»A=[2,-1;-1,2];
» [V,D]=eig(A)
V=
-0.7071 -0.7071
-0.7071 0.7071
D=
1 0
0 3
»V=eig(A)
V=
1
3
MATLAB în ingineria mecanică 111
AV U
AT U V
A U VT
Ex. :
1 5
Să se descompună, în valori singulare, matricea A
4 3
Rezolvare : Cu secvenţa MATLAB
» A=[1 5; 4 3];
» D=svd(A)
D=
6.6713
2.5482
» [U,S,V]=svd(A)
U=
-0.7163 -0.6977
-0.6977 0.7163
S=
6.6713 0
0 2.5482
V=
-0.5257 0.8507
-0.8507 -0.5257
Ex. :
1 7
5 3
Să se descompună matricea A , în valori singulare, folosind toate
8 1
4 9
variantele de apelare ale funcţiei MATLAB svd().
Rezolvarea este imediată, cu următoarea secvenţă:
» A=[1,7;5,3;8,1;4,9]
» D=svd(A)
D=
13.8259
7.4058
» [U,S,V]=svd(A)
U=
MATLAB în ingineria mecanică 113
» [U,S,V]=svd(A,0)
U=
-0.4445 0.4723
-0.3930 -0.2855
-0.4116 -0.7711
-0.6917 0.3176
S=
13.8259 0
0 7.4058
V=
-0.6126 -0.7904
-0.7904 0.6126
APLICAŢII
1:
e4 2 lg 8 7 5 ln 6
Fie: a= 4 5 ; b= 3 ; c=2.
3 e lg 4 lg 7 8
Să se calculeze:a+b; a-b;a+c.
2:
114 MATLAB în ingineria mecanică
3 3
3 21 sin 20 sin 3 5 2 4
Fie: m= ; n=
log 5
arctg 3 e 3 log 8 6
e 6 ln 7 1 e log5 7
Să se calculeze: M=m+n
3:
1 2
43 7
45 3
5
35 2i 1 2i 7e log6 8
Fie: a= 3 ;b= 4 ;
5 8 82 9 0 1 log 54 6
log4 6
sin 61 3
c=2.
Să se calculeze produsele : ab; ba; ac; bc.
4:
1 ln 2 sin 5 tg6
Fie: a= log 5 9 ; b= ;
lg 3 4e log 5 7 ln 8
Să se calculeze:a/b; b/a.
5:
1 2e 5 6 3 7 3 2i 1 2i 7e
Fie: a= ; c= .
ln 3 lg 4 5 8 4
9 0 1 log 43 6
Să se calculeze câtul : d=a/b.
6:
1 2 log 6 7 5 3 5 log 4 6
Fie: a= 3 ; b= ;
3 4e 7 8
Să se calculeze:a\b; b\a.
7:
1 2e ln 6
Fie: a= 5 ; b=3;c= - 3
3 ln 4
Să se calculeze:a^b; b^a; a^c
MATLAB în ingineria mecanică 115
1 4
2 3 ln 5
e 2e 5
A 3 lg 5 B 7 4 e ln 6
3 4e lg 6 7e
84 e 9
3 3 2i 1 2i 7
C .
8 9 0 1 6
9:
3 log 85 9
2e 10 ln 4
Calculaţi inversa matricei: A = .
11e 12 log 6 9
10:
53 2 5 6
4
Să se determine rangul matricei A = 3 63 1 23 3 .
5 13 5 13 11
11:
Să se descompună, prin factorizare Choleski, Lower-Upper, respectiv,
QR, matricile:
1 4
2 3 ln 5
e 2e 5
A 3 lg 5 B 7 4 e ln 6
3 4e lg 6 7e
84 e 9
3 3 2i 1 2i 7
C
8 9 0 1 6
12:
Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper,
respectiv, QR, următoarele sisteme de ecuaţii lineare:
116 MATLAB în ingineria mecanică
x 2y z t 2u 1
3x 2y z 10 2x y 3z 3t u 6
x 3y 2z 5 ;
x y z 1 x y z t 3u 7
2x 7 y 2z 8t 2u 0
13:
Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper,
respectiv, QR, următoarele sisteme de ecuaţii lineare:
6x 2y z 3t 21 9 x 1 x 2 2x 1
2x 3y z 3t 11 3
1 x 8 x 2 5 x 3 2
5x 7 y 3z 2t 8 2x 5x 7 x 1
2x y 2z 4t 10 1 2 3
14:
Să se găsească valorile şi vectorii proprii ai matricelor
9 1 1 0
1 1 2 1 2 3 1
9 0 1
A 1 8 5 B 4 5 6 C
1 0 9 1
2 5 7 7 8 0
0 1 1 9
CAPITOLUL III
MATLAB în ingineria mecanică 117
» n = (0:9)';
STRUCTURI MULTIDIMENSIONALE
118 MATLAB în ingineria mecanică
» R = randn(3,4,5)
R(:,:,1) =
0.0000 -1.8740 0.7310 0.6771
-0.3179 0.4282 0.5779 0.5689
1.0950 0.8956 0.0403 -0.2556
R(:,:,2) =
-0.3775 -0.2340 1.4435 0.7990
-0.2959 0.1184 -0.3510 0.9409
-1.4751 0.3148 0.6232 -0.9921
R(:,:,3) =
0.2120 -0.7420 0.3899 -0.5596
0.2379 1.0823 0.0880 0.4437
-1.0078 -0.1315 -0.6355 -0.9499
R(:,:,4) =
0.7812 -0.2656 0.9863 0.2341
0.5690 -1.1878 -0.5186 0.0215
-0.8217 -2.2023 0.3274 -1.0039
R(:,:,5) =
-0.9471 -1.0559 -1.2173 -1.3493
-0.3744 1.4725 -0.0412 -0.2611
-1.1859 0.0557 -1.1283 0.9535
iar cu secvenţa:
» p = perms(1:4); A = magic(4); M = zeros(4,4,24);
» for k = 1:24
M(:,:,k) = A(:,p(k,:))
End
MATLAB în ingineria mecanică 119
OPERAŢIILE ARITMETICE
CU TABLOURI DE VALORI
pentru înmulţire- “ .* ”
pentru împărţire – “ ./ “ sau “ .\ “
pentru ridicare la putere – “ .^ “
120 MATLAB în ingineria mecanică
ADUNAREA ŞI SCĂDEREA
TABLOURILOR DE VALORI
Ex.11:
1 2 3 1 8
Fie : a , b= , c=10, d=
4 5 6 9 5 3
37 e
2 .
e 6
ln 3 8
» a=[1,2,3;4,5,6];b=[-1,8,pi;9,sqrt(5),3];c=10;
» d=[7^(1/3),exp(1);exp(2)/(log(3)-8),6]
» A=a-b [Enter]
A=
2.0000 -6.0000 -0.1416
-5.0000 2.7639 3.0000
» B=a-c [Enter]
B=
-9 -8 -7
-6 -5 -4
» C=c-a [Enter]
C=
9 8 7
6 5 4
» D=c-b [Enter]
D=
11.0000 2.0000 6.8584
1.0000 7.7639 7.0000
MATLAB în ingineria mecanică 121
» E=a+d Enter]
În cazul E=a+d, MATLAB returnează un mesaj de eroare, întrucât nu este
îndeplinită condiţia de corespondenţă a dimensiunilor celor doi operanzi:
»E= a+d
??? Error using ==> +
Matrix dimensions must agree..
??? Eroare la utilizarea operatorului « + »
Matricile trebuie să aibă aceleaşi dimensiuni
Ex.:
1 2 3 1 8
Fie : a , b , c=10,
4 5 6 9 5 3
37 e
d 2 .
e 6
ln 3 8
Să se calculeze: produsele:ab;ac;ca;cb; ad
» A=a.*b [Enter]
A=
-1.0000 16.0000 9.4248
36.0000 11.1803 18.0000
» B=a.*c [Enter]
B=
10 20 30
40 50 60
122 MATLAB în ingineria mecanică
» C=c.*a [Enter]
C=
10 20 30
40 50 60
» D=c.*b [Enter]
D=
-10.0000 80.0000 31.4159
90.0000 22.3607 30.0000
» E=a.*d
??? Error using ==> .*
Matrix dimensions must agree.
??? Eroare la utilizarea operatorului « + »
Matricele trebuie să aibă aceleaşi dimensiuni
Ex.:
1 2 3 1 8
Fie : a , b= , c=10.
3
4 5 6 9 5
Să se calculeze: a:b;a:c;c:a;c:b.
Rezolvare:
Cu secvenţa MATLAB următoare, rezultă:
» a=[1,2,3;4,5,6]; b=[-1,8,pi;9,sqrt(5),3]; c=10;
» d=a./b [Enter]
d=
-1.0000 0.2500 0.9549
MATLAB în ingineria mecanică 123
» f=c./a [Enter]
f=
10.0000 5.0000 3.3333
2.5000 2.0000 1.6667
» g=c./b [Enter]
g=
-10.0000 1.2500 3.1831
1.1111 4.4721 3.3333
Ex.:
1 2 3 1 8
Fie : a , b= , c=10.
3
4 5 6 9 5
Să se calculeze:a.\b;a.\c;c.\a;c.\b.
Soluţie:
» e=a.\c [Enter]
e=
10.0000 5.0000 3.3333
124 MATLAB în ingineria mecanică
» g=c.\b [Enter]
g=
-0.1000 0.8000 0.3142
0.9000 0.2236 0.3000
RIDICAREA LA PUTERE A
TABLOURILOR DE VALORI
Ex.:
1 2 3 1 8
Fie : a , b= , c=10.
3
4 5 6 9 5
b c a b
Să se calculeze : a ; a ; c ; c .
Rezolvare:
» e=a.^c [Enter]
e=
1 1024 59049
MATLAB în ingineria mecanică 125
Ex.:
1 3 6 0
Să se determine transpusa tabloului a .
i 3 2i 1 11 7 9
ŞIRURI DE CARACTERE;
MATRICI DIN ŞIRURI DE CARACTERE
CREAREA MATRICIOR CU
ŞIRURI DE CARACTERE
»coduri_ASCII_majuscule=double('ABCDEFGHIJKLMNOPQRSTU
VWXZ')
coduri_ASCII_ majuscule =
Columns 1 through 11
65 66 67 68 69 70 71 72 73 74 75
Columns 12 through 22
76 77 78 79 80 81 82 83 84 85 86
Columns 23 through 25
87 88 90
» nume='Popescu J. Eduard'
nume =
Popescu J. Eduard
» whos nume
Name Size Bytes Class
» Nume_si_Functia=strcat(nume,',',functia)
Nume_si_Functia =
Popescu J. Eduard,Director General Adjunct
128 MATLAB în ingineria mecanică
» whos Nume_si_Functia
Name Size Bytes Class
ans 1x42 84 char array
Grand total is 42 elements using 84 bytes
» whos numele_si_functia
Name Size Bytes Class
numele_si_functia 2x24 96 char array
Grand total is 48 elements using 96 bytes
Cod Caracter Cod Caracter Cod Caracter Cod Caracter Cod Caracter
0. (zero) 27. → 54. 4 81. N 108. h
1. ☺ 28. ← 55. 5 82. O 109. i
2. ☻ 29. └ 56. 6 83. P 110. j
3. 30. ↔ 57. 7 84. Q 111. k
4. 31. 58. 85. 112.
5. ◊ 32. ▲ 59. 8 86. R 113. l
MATLAB în ingineria mecanică 129
» nume_si_functia_numeric=double(nume_si_functia)
nume_si_functia_numeric =
Columns 1 through 12
80 111 112 101 115 99 117 32 74 46 32 69
68 105 114 101 99 116 111 114 32 71 101 110
Columns 13 through 24
100 117 97 114 100 32 32 32 32 32 32 32
101 114 97 108 32 65 100 106 117 110 99 116
»valoarea_numerica_a_literei_P=double('P')
valoarea_numerica_a_literei_P =
80
»valoarea_numerica_a_literei_o=double('o')
valoarea_numerica_a_literei_o =
111
130 MATLAB în ingineria mecanică
» char(65:75)
ans =
ABCDEFGHIJK
» char(ones(4,20)*double('#'))
ans =
####################
####################
####################
####################
Astfel, dacă :
» p=’m’;
atunci expresia:
MATLAB în ingineria mecanică 131
» p+2
returnează rezultatul:
ans =
111
» char(p+1)
ans =
n
» double('<')/double('x')
ans =
0.5000
»s1='ann'; s2='ban';
»s1<s2
ans =
1 0 0
În acest exemplu, caracterul de pe prima poziţie, din şirul s1 are “valoare”
mai mică decât caracterul corespunzător din şirul s2, rezultatul afişat fiind, în
consecinţă “1”, în timp ce, celelalte “elemente ” ale şirului s1 sunt mai mari sau
egale decât “valorile” caracterelor de pe poziţiile corespunzătoare ale şirului s2,
rezultatul afişat fiind “0”, întrucât rezultatul comparării este fals.
Dacă şirurile nu au aceeaşi dimensiune (acelaşi număr de caractere),
folosirea operatorilor relaţionali este improprie, MATLAB afişând un mesaj de
eroare :
» s3='anna'; s2='ban';
» s3>s2
» strcmp(s2,s3)
ans =
0
» numesiadresa(1:3)
ans =
A2N
» numesiadresa(1:4)
ans =
A2Nl
» numesiadresa(1:20)
ans =
A2Nl1eb weB rrYtuo x
» s='x=-b/(2*a)';b=8;a=7;
» eval(s)
x=
-0.5714
» x=0:0.01:10;
» f=input('Introduceti functia de variabila x pentru reprezentare
grafica:','s')
MATLAB în ingineria mecanică 135
exp(-0.5*x).*sin(x);
» plot(x,eval(f)),grid
» student.legitimatie='JUANCA0123';
» student.calificative=[7 9 6 5];
» student
student =
nume: 'Juan Antonio Cajigal'
legitimatie: 'JUANCA0123'
calificative: [7 9 6 5]
» student.calificative(2)
ans =
9
» student.calificative(4)
ans =
5
» student(2).nume='Luis Jimenez';
» student(2).legitimatie='LUJIM0012';
» student(2).calificative=[7 5];
MATLAB în ingineria mecanică 137
» student(1)
ans =
nume: 'Juan Antonio Cajigal'
legitimatie: 'JUANCA0123'
calificative: [7 9 6 5]
»student
student =
1x2 struct array with fields:
nume
legitimatie
calificative
» cursuri.titlu='Metode numerice';
» cursuri.grupa=student;
» cursuri
cursuri =
titlu: 'Metode numerice'
grupa: [1x2 struct]
» cursuri(1).grupa(1:2).nume
ans =
Juan Antonio Cajigal
ans =
Luis Jimenez
Pentru ştergerea sau anularea unor câmpuri ale structurii create se foloseşte
funcţia MATLAB rmfield().
MATLAB în ingineria mecanică 139
STRUCTURI CELULARE
Definirea celulelor
Indexare:
Considerând că structura “student”, creată în paragraful anterior, există
stocată în memoria calculatorului, se poate defini o structură celulară (“2x2”) prin
atribuirea datelor din celulele specificate:
» c(1,1)={rand(3)};
» c(1,2)={char('Bonzai','Makay')};
» c(2,1)={13};
» c(2,2)={student};
»c
c=
[ 3x3 double ] [ 2x6 char ]
[ 13] [ 1x2 struct ]
»cellplot(c)
iar instrucţiunea:
»celldisp(c)
c{1,1} =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
c{2,1} =
13
c{1,2} =
Bonzai
Makay
c{2,2} =
1x2 struct array with fields:
nume
legitimatie
calificative
» c{1}
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
» c{1}(2,3)
ans =
0.0185
În mod similar, sunt afişate celelalte celule ale structurii celulare “c”:
» c{2}
ans =
13
» c{3}
ans =
Bonzai
Makay
» c{4}
ans =
1x2 struct array with fields:
nume
legitimatie
calificative
CREAREA STRUCTURILOR
CELULARE MULTIDIMENSIONALE
» A(:,:,2)= [1 0 4; 3 5 6; 9 8 7]
A(:,:,1) =
5 7 8
0 1 9
4 3 6
A(:,:,2) =
1 0 4
3 5 6
9 8 7
B). Generarea structurilor multidimensionale prin funcţii MATLAB
dimensionale:
» retea_arbitrara = randn(6,5,2)
retea_arbitrara(:,:,1) =
-0.1199 -0.0793 0.0359 0.1326 -1.0246
-0.0653 1.5352 -0.6275 1.5929 -1.2344
0.4853 -0.6065 0.5354 1.0184 0.2888
-0.5955 -1.3474 0.5529 -1.5804 -0.4293
-0.1497 0.4694 -0.2037 -0.0787 0.0558
-0.4348 -0.9036 -2.0543 -0.6817 -0.3679
retea_arbitrara(:,:,2) =
-0.4650 1.0378 1.9574 1.1902 0.0860
0.3710 -0.3898 0.5045 -1.1162 -2.0046
0.7283 -1.3813 1.8645 0.6353 -0.4931
2.1122 0.3155 -0.3398 -0.6014 0.4620
-1.3573 1.5532 -1.1398 0.5512 -0.3210
-1.0226 0.7079 -0.2111 -1.0998 1.2366
B(:,:,2) =
1 3 3 5
4 7 9 7
» a = magic(3); b = pascal(3); c = cat(2,a,b)
c=
8 1 6 1 1 1
3 5 7 1 2 3
4 9 2 1 3 6
MATLAB în ingineria mecanică 145
APLICAŢII
[1]:
e2 2e 3 ln 5 1 8e 2
Fie: a 4 lg 5 ,
b 5 6 ,c=2
4 6 5 6e 9 log 4 7 5 3
37 e
d 2
e 6
ln 3 8
[2]:
0,1 2 3 5 1 8 5 3
Fie: a 5 ,b lg 7 ,
4 5 6 ln 4 9 5 log4 7 3e
37 e
c=10, d= e 2
.
6
ln 3 8
Să se calculeze: produsele:ab;ac;ca;cb; ad
[3]:
1 2 3 1 8
Fie : a , b= , c=10.
4 5 6 9 5 3
Să se calculeze: a:b;a:c;c:a;c:b.
148 MATLAB în ingineria mecanică
[4]:
1 2 3 1 8
Fie : a , b= , c=10.
4 5 6 9 5 3
Să se calculeze:a.\b;a.\c;c.\a;c.\b.
[5]:
1 2 3 1 8
Fie : a , b= , c=10.
4 5 6 9 5 3
[6]:
1 3 6 0
Să se determine transpusa tabloului a .
i 3 2i 1 11 7 9
MATLAB în ingineria mecanică 149
CAPITOLUL IV
-expresie_1
matricele sau expresiile matriceale care se compară ;
-expresie_2-
Ex.:
1 2 3
Să se compare elementele matricei A 4 5 6 cu scalarul B e 2 log 3 5 .
7 8 9
Folosind secvanţa MATLAB următoare:
150 MATLAB în ingineria mecanică
» A=[1,2,3;4,5,6;7,8,9]; B=exp(2)-log(5)/log(3);
» A<=B
ans =
1 1 1
1 1 0
0 0 0
» A>=B
ans =
0 0 0
0 0 1
1 1 1
» A==B
ans =
0 0 0
0 0 0
0 0 0
» A~=B
ans =
1 1 1
1 1 1
1 1 1
Ex.:
1 2 4 2 1 3
5 şi B 3
Să se compare matricele A 3 0 2 2 .
2 1 3 5 4 1
Cu secvenţa MATLAB următoare, rezultă:
» A=[-1,2,4;3,0,5;2,1,3];B=[2,-1,3;3,-2,2;5,-4,1];
se obţin rezultatele:
» A<B
ans =
1 0 0
0 0 0
1 0 0
» A<=B
MATLAB în ingineria mecanică 151
ans =
1 0 0
1 0 0
1 0 0
» A>B
ans =
0 1 1
0 1 1
0 1 1
» A>=B
ans =
0 1 1
1 1 1
0 1 1
» A==B
ans =
0 0 0
1 0 0
0 0 0
» A~=B
ans =
1 1 1
0 1 1
1 1 1
OPERATORI LOGICI
PRECEDENŢA OPERATORILOR
1|0&0=0
0&0|1=1
CUVINTE CHEIE
MATLAB rezervă o listă de cuvinte cheie, listă care poate fi afişată, pentru
evitarea erorilor de evaluare şi de redactare a expresiilor logice, cu funcţia
iskeyword, în linia de comandă MATLAB:
» [Cuvinte_cheie]=iskeyword
Cuvinte_cheie =
'break'
'case'
'catch'
'continue'
'else'
'elseif'
'end'
'for'
'function'
'global'
'if'
'otherwise'
'persistent'
'return'
'switch'
'try'
'while'
154 MATLAB în ingineria mecanică
b) if expresie_logică_1
grup_de_instrucţiuni_A
else
grup_de_instrucţiuni_B
end
c) if expresie_logică_1
grup_de_instrucţiuni_A
elseif expresie_logică_2
grup_de_instrucţiuni_B
end
d) if expresie_logică_1
grup_de_instrucţiuni_A
elseif expresie_logică_2
grup_de_instrucţiuni_B
else
grup_de_instrucţiuni_C
end
if A if A
x=a x=a
else elseif B
if B x=b
x=b elseif C
else x=c
if C else
x=c x=d
MATLAB în ingineria mecanică 155
else end
x=d
end
end
end
e x 3 4 dacă 6 x 4
3
f log 5 x 2 2 x 4 3 dacă 4 x 10 , pentru valorile întregi ale
5
3
x2 4
dacă 10 x 15
0 , 456 e 5
variabilei x.
Se va folosi următoarea secvenţă MATLAB (pentru simplificare se va utiliza
funcţia length(x) şi o buclă repetitivă for, care va fi prezentată în secţiunea
următoare):
» x=-6:15;
» for k=1:length(x)
if x(k)<-4
f(k)=exp(x(k)-3)-4
elseif (x(k)>=-4)&(x(k)<=10)
f(k)=(log(x(k)^2+(2+sqrt(x(k)^4+3))^(1/3)))
else
f(k)=det([pi,3^(1/5);0.456,exp(x(k)^2-4)])
end
end
f=
1.0e+096 *
Columns 1 through 7
-0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
INSTRUCŢIUNEA DE CICLARE « for »
se prezintă aici numai valoarea « finală » a expresiei f, valorile intermediare fiind omise,
pentru acurateţea prezentării
156 MATLAB în ingineria mecanică
for index=expresie
grup_de_instrucţiuni
end
în care :
index –reprezintă contorul de iterare
expresie- este o matrice, un scalar sau, de cele mai multe ori, o
expresie de forma :
“De la …” “Până la …”
for k = 1:n
fact = k * fact;
disp( [k fact] )
end
% FINAL PROGRAM
Ti 1 Ti K dt Ti Tf
K = 0.05;
Tf = 10; %temperatura finala
a = 0; % momentul initial
158 MATLAB în ingineria mecanică
40.00 12.01
45.00 11.56
50.00 11.22
55.00 10.95
60.00 10.74
65.00 10.57
70.00 10.45
75.00 10.35
80.00 10.27
85.00 10.21
90.00 10.16
95.00 10.13
100.00 10.10
e m 2 daca m 10,2
b) g 2 daca m 2,8 cu pasul de indexare de –0,3.
log m 2 7 5 19 daca m 8,25
3
a) Cu sintaxa Matlab :
» x=-2*pi:0.1:2*pi;
» f=sin(x);
» plot(x,f)
160 MATLAB în ingineria mecanică
se obţin valorile funcţiei f, care vor fi afişate dacă se tastează, în linia de comandă,
numele acesteia, şi, într-o fereastră grafică Figure 1 reprezentarea funcţiei f :
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-8 -6 -4 -2 0 2 4 6 8
if (m(k)>=-10)&(m(k)<=2) 20
g(k)=exp(m(k))+2 15
elseif (m(k)>2)&(m(k)<=8) 10
g(k)=-2 5
elseif (m(k)>8)&(m(k)<=25)
0
-5
g(k)=(log(m(k)^2-5^(1/7)) -10 -5 0 5 10 15 20 25
+19)/log(3)
end
end
» plot(m,g)
nu s-au prezentat aici valorile funcţiei, pentru acurateţea lucrării
MATLAB în ingineria mecanică 161
m=4;n=3;
for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1);
end
end
A=
Columns 1 through 8
1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250
0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111
0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000
0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909
0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833
162 MATLAB în ingineria mecanică
Ex.: Un fişier care generează o matrice (s-au introdus, aici, şi linii de help,
folosind modul de scriere MATLAB, linia de text, care conţine informaţia, este
precedată de caracterul “%”):
for i = 1:10
A(i,i) = 1; % se introduce cifra “ 1”, pe diagonala principală
if (i > 1)
A(i,i-1) = 2; % se introduce cifra “ 2”, în faţa diagonalei principale, dar numai pe
ultimele 9 linii,
end
if (i < 10)
A(i,i+1) = 5; % se introduce cifra “ 5”, în dreapta diagonalei principale, dar numai
pe primele 9 linii,
end
end
A=
1 5 0 0 0 0 0 0 0 0
2 1 5 0 0 0 0 0 0 0
0 2 1 5 0 0 0 0 0 0
0 0 2 1 5 0 0 0 0 0
0 0 0 2 1 5 0 0 0 0
0 0 0 0 2 1 5 0 0 0
0 0 0 0 0 2 1 5 0 0
0 0 0 0 0 0 2 1 5 0
0 0 0 0 0 0 0 2 1 5
0 0 0 0 0 0 0 0 2 1
m1=[-4 1 0; 1 -4 1; 0 1 -4]
m2=eye(3)
m3=zeros(3,3)
a=[m1 m2 m3; m2 m1 m2; m3 m2 m1]
b=[-100; -100; -100; 0; 0; 0; 0; 0; 0]
a\b
MATLAB în ingineria mecanică 163
a=
-4 1 0 1 0 0 0 0 0 b= ans =
1 -4 1 0 1 0 0 0 0 -100 42.8571
0 1 -4 0 0 1 0 0 0 -100 52.6786
1 0 0 -4 1 0 1 0 0 -100 42.8571
0 1 0 1 -4 1 0 1 0 0 18.7500
0 0 1 0 1 -4 0 0 1 0 25.0000
0 0 0 1 0 0 -4 1 0 0 18.7500
0 0 0 0 1 0 1 -4 1 0 7.1429
0 0 0 0 0 1 0 1 -4 0 9.8214
0 7.1429
k(1)=1.5;
k(2)=1;
k(3)=1.5;
k(4)=2;
l(1)=0.3;
l(2)=0.1;
l(3)=0.2;
l(4)=0.2;
b=zeros(4,1);
for i=1:3
b(i)=k(i)*l(i)-k(i+1)*l(i+1);
end
b(4)=1;
m=zeros(4,4);
for i=1:3
m(i,i)=k(i)+k(i+1);
m(i+1,i)=-k(i+1);
m(i,i+1)=-k(i+1);
end
m(4,4)=1;
m(4,3)=0;
b
m
x=m\b
Rezultatele sunt :
164 MATLAB în ingineria mecanică
b= m=
0.3500 2.5000 -1.0000 0 0
-0.2000 -1.0000 2.5000 -1.5000 0
-0.1000 0 -1.5000 3.5000 -2.0000
1.0000 0 0 0 1.0000
x=
0.3471
0.5176
0.7647
1.0000
c(7,1)=7;
c(7,2)=8;
m=zeros(7,7);
for i=1:7
if c(i,1)~=1
if c(i,1)==8
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
elseif c(i,1)==7
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
m(11,i)=(coord(c(i,1),1)-coord(c(i,2),1))/dist;
else
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
m(2*c(i,1)-3,i)=(coord(c(i,1),1)-coord(c(i,2),1))/dist;
m(2*c(i,1)-2,i)=(coord(c(i,1),2)-coord(c(i,2),2))/dist;
end
end
if c(i,2)~=1
if c(i,2)==8
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
elseif c(i,2)==7
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
m(11,i)=(coord(c(i,2),1)-coord(c(i,1),1))/dist;
else
dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)-
coord(c(i,2),2))^2)^0.5;
m(2*c(i,2)-3,i)=(coord(c(i,2),1)-coord(c(i,1),1))/dist;
m(2*c(i,2)-2,i)=(coord(c(i,2),2)-coord(c(i,1),2))/dist;
end
end
end
m
b=zeros(11,1);
b(4,1)=-10;
b
d=m\b
% FINAL PROGRAM
166 MATLAB în ingineria mecanică
m=
-0.1961 0.9191 0 0 0 0 0
0.9806 -0.3939 0 0 0 0 0
0 -0.9191 -0.8716 0 0 0 0
0 0.3939 -0.4903 0 0 0 0
0 0 0.8716 -0.8716 0 0 0
0 0 0.4903 0.4903 0 0 0
0 0 0 0.8716 0.9191 0 0
0 0 0 -0.4903 0.3939 0 0
0 0 0 0 -0.9191 0.1961 0
0 0 0 0 -0.3939 0.9806 0
0 0 0 0 0 -0.1961 0.3714
b=
0
0
0
-10
0
0
0
0
0
0
0
d=
-2.1265
-3.7535
3.8868
1.1340
-0.4106
-0.2326
-0.1228
MATLAB în ingineria mecanică 167
Ex.:
Un fişier pentru calculul elementelor traiectoriei unui proiectil (viteză,
inălţime, distanţă) lansat sub un anumit unghi faţă de orizontală, sub acţiunea
gravitaţiei:
dt = 0.1;
g = 9.8;
u = 60;
Alfa = input( 'Introduceti unghiul de lansare al proiectilului: ' );
Radian = Alfa * pi / 180; % conversia in radiani
x_initial = zeros(1); y_initial = zeros(1); % initializare
y = 0; t = 0;
i = 1; % initial vector subscript
while y >= 0
t = t + dt;
i = i + 1;
y = u * sin(Radian) * t - g * t^2 / 2;
if y >= 0
Distanta_pe_x(i) = u * cos(Radian) * t;
Inaltimea_pe_y(i) = y;
end
end
APLICAŢII
[1]:
1 2 4
Să se compare elementele matricei A 3 0 5 cu scalarul B= ;
2 1 3
[2]:
2 1 3
2 cu elementele
Să se compare elementele matricei C 3 2
5 4 1
1 2 4
matricei A 3 0 5 ;
2 1 3
[3]:
1 2 8 13
Să se compare elementele matricelor D ; E ;
3 8 4 7
[4]:
4 2 1 3
Să se compare elementele matricelor X 3 ; Y 3 2 2 cu
2 5 4 1
scalarul x log 43 7 ;
[5]:
Să se realizeze un fişier script pentru afişarea unei matrici cu dimensiunea
3x4 în care elementele primei linii să difere printr-o constantă, număr natural,
elementele celei de-a doua linii să difere prin constanta e 2, iar elementele ultimei
linii sa difere prin ln8.
[6]:
Să se actualizeze fişierul de mai jos astfel încât să se afişeze încă două
butoane la alegere :
MATLAB în ingineria mecanică 169
k=0;
while k~=3
k=menu('Faceti clic pe una dintre optiuni','Fa asta','Fa alta',
'Iesire');
if k==1
disp('Fa asta...Apasa orice cheie pentru a continua...')
pause
elseif k==2
disp('Fa alta...Apasa orice cheie pentru a
continua...')
pause
end
end
[7]:
Să se actualizeze fişierul de mai jos astfel încât să se afişeze încă două
subgrafice, cu titlurile (c) şi (d):
subplot(2,2,1)
plot(rand(1, 20)),title('(a)')
subplot(2,2,2)
axis([0 4 0 4])
plot([0 4], [0 0], [1 1 2 3 3], [0 2 3 2 0]),title('(b)')
170 MATLAB în ingineria mecanică
[8]:
Să se actualizeze fişierul de mai jos astfel încât să se afişeze 8, 12, 24 de
„petale”:
x = 0:pi/40:2*pi;
polar(x, sin(2*x)),grid
MATLAB în ingineria mecanică 171
[9]:
Să se actualizeze fişierul de mai jos astfel încât să se solicite
utilizatorului să introducă diametrul „desenului”:
n=1:200;
d = 137.51;
th = pi*d*n/180;
r = sqrt(n);
plot(r.*cos(th), r.*sin(th), '*')
axis square
[10]:
Să se actualizeze fişierul de mai jos astfel încât “pasul de desenare” să fie
mai mic, respectiv, în altă variantă, să fie mai mare:
x = 0;
y = 0;
dx = pi/100;
p = plot(x, y, 'o', 'EraseMode', 'none'); % 'xor' afişează numai
punctele curente
% ' none' afişează toate punctele
axis([0 20*pi -2 2])
for x = dx:dx:20*pi;
x = x + dx;
y = sin(x);
set(p, 'XData', x, 'YData', y)
pause(0.05)
end
172 MATLAB în ingineria mecanică
[11]:
Să se actualizeze fişierul de mai jos astfel încât “sombrero-ul” să fie
înclinat spre stânga sau spre dreapta, şi “lumina” să “cadă” din dreapta :
colormap jet
daspect([10 5 1])
axis tight
view(-50, 30)
camlight right
[12]:
Să se actualizeze fişierul de mai jos astfel încât imaginea reprezentării
grafice să fie amplasată pe o “matrice” grafică de 3 linii şi 3 coloane (ca în figură):
subplot(3,3,1)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted,
subplot(3,3,2)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted,
subplot(3,3,3)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted
subplot(3,3,4)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted
subplot(3,3,5)
x = 0:pi/20:pi;
174 MATLAB în ingineria mecanică
[13]:
Să se actualizeze fişierul de mai jos astfel încât utilizatorul să fie solicitat
să introducă viteza iniţială şi timpul total al mişcării
g = 9.8;
v0 = 60;
t = 0 : 0.1 : 12.3;
s = v0 * t - g / 2 * t .^ 2;
plot(t, s), title( 'Miscarea pe verticala sub actiunea gravitatiei' )
xlabel( 'Timpul' ), ylabel( 'Inaltimea' ), grid
disp( [t' s'] )
MATLAB în ingineria mecanică 175
CAPITOLUL V
Funcţia Descriere
conv(p,q) -produsul polinoamelor p şi q
[C,R]=deconv(p,q) -Câtul, C, şi restul R al împărţirii
polinoamelor p şi q
1. poly(r) 1. -determină polinoamele cu rădăcini
2. poly(A) date în vectorul coloană r
2. -determină coeficienţii polinomului
caracteristic ai matricei pătratice A
1. polyder(p) 1. -derivata polinomului p
2. polyder(p,q) 2. -derivata produsului polinoamelor p
3. [A,B]=polyder(p,q) şi q
3. -derivata fracţiei raţionale p/q
1. polyfit(x,y,n) 1. aproximează un set de date x şi y cu
2. [p,S]=polyfit(x,y,n) un polinom de gradul n
3. [p,S,miu]=polyfit(x,y, 2. aproximează un set de date x şi y cu
n) un polinom de gradul n
3. aproximează un set de date x şi y cu
un polinom de gradul n
1. polyval(p,x) 1. evaluarea polinomului p în punctul
2. polyval(p,q) x, sau pe intervalul x
2. evaluarea polinomului p în punctele
vectorului q
polyvalm(A) -evaluarea polinomului în elementele matricei
pătratice A
[r,p,k]=residue(a,b) -descompunerea raportului a două polinoame
a şi b în fracţii simple, având ca rezultat
vectorul coloană al reziduurilor, r, vectorul
coloană al polilor, p, şi k - vectorul linie al
polinomului cât (A/B)
roots(p) -calculează rădăcinile unui polinom p
REPREZENTAREA POLINOAMELOR
176 MATLAB în ingineria mecanică
»p=[1,7,0,1,-8]
Obs.: În polinomul h(x) coeficienţii lui x4, x3 respectiv x, care lipsesc, sunt
înlocuiţi cu valoarea 0 (zero). Altfel, MATLAB va introduce un polinom de grad
inferior celui real (de exemplu, dacă h(x) ar fi introdus de la tastatură numai cu
coeficienţii h=[1,2,-6*(5^(1/3))] acesta reprezintă polinomul h(x)=x2+2x--6 3 5 )
PRODUSUL POLINOAMELOR
Ex.:
-în MATLAB:
»g1 = [1 1 -2];g2 = [1 1];
»g = conv(g1, g2)
g = [1 2 -1 -2]
care în formă algebrică uzuală se scrie : g(x) = x3+2x2-x-2
MATLAB în ingineria mecanică 177
ÎMPĂRŢIREA POLINOAMELOR
» [c, r] = deconv(a, b)
în care :
c - vectorul coeficienţilor polinomului cât
r - vectorul coeficienţilor polinomului rest
Polinoamele c(x) şi r(x) respectă teorema împărţirii cu rest (p(x)=d(x)*c(x)
+r(x), în care p(x) este polinomul- „deîmpărţit”, d(x) reprezintă polinomul-
p( x ) r( x)
„împărţitor” : c( x ) )
d( x ) d( x )
Ex.:
Să se calculeze câtul şi restul împărţirii polinoamelor h1(x)= x3+2x2-2 şi
h2(x)= x2+x, folosind o funcţie MATLAB.
-în MATLAB:
»h1 = [1 2 0 -2];
»h2 = [1 1 0];
»[c, r] = deconv(h1, h2)
c=
1 1
r=
0 0 -1 -2
În format algebric uzual cătul împărţirii este: c(x)=x+1, iar restul r(x)= -x-2 .
»r = roots(a)
178 MATLAB în ingineria mecanică
în care:
a - vector linie al coeficienţilor polinomului
Ex.:
Fie polinomul f(x) = x3-2x2-3x+10. Să se determine rădăcinile ecuaţiei
f(x)=0.
-în MATLAB
»f = [1 -2 -3 10]
»r=roots(f)
r=
2+i
2-i
-2
» p = poly(z)
în care:
z – vectorul- coloană al rădăcinilor
Ex.:
Fie rădăcinile unui polinom : x1=2; x2=3; x3=4. Să se determine polinomul
cu rădăcinile x1; x2; x3.
S1 = x1+x2+x3 S1= 9
S2 = x1x2+x1x3+x2x3 S2=26
S3 = x1x2x3 S3= 24
» b=[2;3;4];
» p=poly(b)
p=
1 -9 26 -24
1) Evaluarea simplă:
Ex.:
Să se calculeze valoarea polinomului f(x) = 3x4-5x3+3x-1 în punctul x =
2.
În MATLAB, se declară, mai întâi, valoarea variabilei, apoi se introduce
polinomul de evaluat, folosind regulile standard:
» x = 2;
» f = 3*(x^4)-5*(x^3)+3*x-1
f=
13
Ex.
1)-variabila este un vector linie:
» x= [1 2 0];
» f = 3*x.^4-5*x.^3+3*x-1
f=
MATLAB în ingineria mecanică 181
0 13 -1
» f = 3*x^4-5*x^3+3*x-1
Ex.
2)-variabila este un vector coloană:
» x=[1;2;0];
» f = 3*x.^4-5*x.^3+3*x-1
f=
0
13
-1
Ex.:
» x=[1,2;3,4];
» f = 3*x^4-5*x^3+3*x-1
f=
414 605
908 1323
Ex.:
» x=[1,2,3;4,5,6];
» f = 3*x.^4-5*x.^3+3*x-1
f=
0 13 116
459 1264 2825
Obs.:
Dacă expresia f(x) se introduce:
» f = 3*x^4-5*x^3+3*x-1
MATLAB afişează mesajul :
??? Error using ==> ^
Matrix must be square.
EVALUAREA POLINOAMELOR CU
FUNCŢIA MATLAB POLYVAL(P, Q)
» f = polyval(p, q)
sau
»f=polyvalm(p,q)
în care:
p - vectorul linie al coeficienţilor polinomului;
q – vectorul , respectiv, matricea în care se evaluează polinomul p.
Ex.:
Să se determine valoarea polinomului p(x)=3x4+x3+2x2-1 în punctele
vectorului q=[1,2,3,4,0], respectiv ale matricelor Q = [1 2 ; 3 4] şi R = [1 2 3 ;
3 4 5].
În MATLAB:
» p = [3 1 2 0 -1];
» q = [1 2 3 4 0]; Q = [1 2 ; 3 4]; R = [1 2 3 ; 3 4 5];
MATLAB în ingineria mecanică 183
» f1=polyval(p,q)
f 1=
5 63 287 863 -1
» f2=polyval(p,Q)
f2 =
5 63
287 863
» f3=polyvalm(p,Q)
f3 =
647 944
1416 2063
» f4=polyval(p,R)
f4 =
5 63 287
287 863 2049
» f5=polyvalm(p,R)
??? Error using ==> polyvalm
Matrix must be square.
EVALUAREA PE INTERVALE
Ex.:
Să se determine valoarea polinomului p(x)=3x4+x3+2x2-1, pentru valorile x
[0,5] în punctele fixe distanţate la 0,2 unităţi.
În MATLAB:
» x = 0:0.2:5;
» p = [3 1 2 0 -1];
» f = polyval(p, x)
f=
1.0e+003 *
Columns 1 through 10
-0.0010 -0.0009 -0.0005 0.0003 0.0020 0.0050 0.0098 0.0172 0.0279 0.0428
184 MATLAB în ingineria mecanică
Columns 11 through 20
0.0630 0.0896 0.1239 0.1672 0.2210 0.2870 0.3668 0.4623 0.5755 0.7083
Columns 21 through 26
0.8630 1.0419 1.2473 1.4819 1.7482 2.0490
CALCULUL DERIVATEI
Derivata polinomului
Ex.:
Să se calculeze derivata polinomului A(x) = x3+2x2-x+2
» A = [1 2 -1 2]
» D = polyder(A)
D=
3 4 -1
» D = polyder(A, B)
Ex.:
Să se determine derivata produsului (x3+2x2-x+2) · (x-1).
În MATLAB:
» A = [1 2 -1 2]; B = [1 -1];
» D_prod = polyder(A, B)
MATLAB în ingineria mecanică 185
D_prod =
4 3 -6 3
» [M, N] = polyder(A, B)
în care:
-M şi N sunt polinoamele de la numărătorul respectiv numitorul expresiei
derivate;
-A şi B sunt polinoamele de la numărătorul respectiv numitorul expresiei
ce urmează a fi derivată.
Ex.:
x 3 2x 2 x 2
Să se determine derivata expresiei raţionale: .
x1
În MATLAB:
» A = [1 2 -1 2]; B = [1 -1];
» [M, N] = polyder(A, B)
M=
2 -1 -4 -1
N=
1 -2 1
2x 3 x 2 4x 1
În format algebric uzual, rezultatul se scrie:
x 1 2
Aceste operaţii se pot executa numai dacă polinoamele au acelaşi grad, prin
urmare polinoamele trebuie transformate, prin extindere spre stânga, astfel încât
acestea să fie de acelaşi grad. După uniformizarea gradului, adunarea algebrică a
polinoamelor se realizează, în MATLAB, ca o însumare a doi vectori de aceeaşi
dimensiune.
Ex.:
Să se calculeze suma şi diferenţa polinoamelor: g(x) = x4-5x2+6x-1 şi h(x)
3
= x +3x-2.
Astfel:
» g = [1 0 -5 6 -1]; h = [0 1 0 3 -2];
» suma = g+h
suma =
1 1 -5 9 -3
» dif = g-h
dif =
1 -1 -5 3 1
A( x )
Orice expresie raţională, se poate descompune în fracţii simple,
B( x )
după rădăcinile polinomului de la numitor (soluţiile numitorului se numesc poli):
A x r1 r2 r3 rn
... k ( x)
B x x p 1 x p 2 x p 3 x pn
A x rj rj 1 rj 2 rj m 1
...
B x x pj x pj 2 x p j 3 x p j m
Întrucât descompunerea în fracţii simple are ca rezultat trei vectori, funcţia
MATLAB residue(), se introduce cu parametri de ieşire. Funcţia MATLAB pentru
descompunerea în fracţii simple este:
» [r, p, k] = residue(A, B)
în care:
r - vectorul coloană al reziduurilor;
p - vectorul coloană al polilor;
k - vectorul linie al polinomului cât (A/B)
Ex.:
A x x 3 6x 2 11 x 6
Să se descompună în fracţii simple expresia: .
B x x 2 9x 20
» A = [1 -6 11 -6]; B = [1 -9 20];
» [Catul,Restul]=deconv(A,B)
Catul =
1 3
Restul =
0 0 18 -66
reziduuri_partiale =
24
-6
188 MATLAB în ingineria mecanică
polii_fractiei =
5
4
coeficientii_catului =
1 3
x 3 6x 2 11 x 6
24
6 x 3
2
x 9x 20 x5 x4
MATLAB în ingineria mecanică 189
CAPITOLUL VI
Obs.:
Dacă x se găseşte între două valori din tabel funcţia
table1() returnează o valoare interpolată liniar;
Funcţia MATLAB table1() este înlocuită în versiunile
superioare ale MATLAB(ulterioare versiunii 5.3) cu
funcţiile interp1(),interp2(), interp3(), interpft(),
interplat(), interplon(), interpm(), interpn().
Ex.:
Fiind date perechile de numere (x,y) : (-2,6); (-1,2); (0,3); (2,1); (4,7) ,se
cere să se găsească valorile y corespunzătoare pentru x1 = -1; x2 = 3; x3 = 3.5; x4 =
0.5; x5 = 3.75; x6 = -0.573.
Soluţie:
-se organizează perechile de numere (x,y) ca matrice cu 2 coloane, apoi se
foloseşte funcţia table1(), pentru a găsi valorile cerute:
»y2=table1(tablou_original,3)
y2 = 4
190 MATLAB în ingineria mecanică
»y3=table1(tablou_original,3.5)
y3 = 5.5
»y4=table1(tablou_original,0.5)
y4 = 2.5
»y5=table1(tablou_original,3.75)
y5 = 6.25
»y6=table1(tablou_original,-0.573)
y6 = 2.427
Atenţie !
Coloana I trebuie să fie monotonă (elementele trebuie să fie
ordonate crescător) !
Valorile căutate trebuie să se încadreze între cea mai mică şi cea
mai mare valoare a lui x, altfel, se afişează un mesaj de eroare.
Astfel, dacă se cere să se găsească valoarea corespunzătoare lui y
atunci când x=5, MATLAB afişează următorul mesaj :
» y7=table1(tablou_original,5)
??? Error using ==> table1
x0 larger than all values in first column
???Eroare la utilizarea ==> table1
x0 este mai mare decât toate valorile primei coloane
»table2(“tab”,x,y)
Obs.:
Funcţia MATLAB table2() este înlocuită în versiunile superioare
versiunii MATLAB 5.3 cu funcţia interp2(), în linia de comandă a
MATLAB în ingineria mecanică 191
Condiţii:
-tabelul “tab” este organizat ca o matrice, cu n linii şi m coloane,
întotdeauna având, pe poziţia (1,1), elementul 0 ;
-numărul de linii este dat de numărul valorilor argumentului x, la
care se adaugă o linie pentru introducerea valorilor argumentului y,
iar numărul de coloane este dat de numărul valorilor lui y;
-valorile x-ilor se plasează pe prima coloană, în ordine crescătoare,
începând cu a 2-a linie;
-valorile y-ilor se plasează pe prima linie, în ordine crescătoare,
începând cu a 2-a coloană;
Ex.:
Fiind date tripletele:
x y
0 1 2 3 4 5 6 7 8 9 10
-3 0 1 2 4 8 7 11 0 1 1
2 9 3 1 7 6 5 3 1 0 -3
8 -8 9 1 0 2 -8 2 1 0 1
100 0 0 1 7 2 8 1 2 1 0
Soluţie:
»tablou_original_2= [0,1,2,3,4,5,6,7,8,9,10;-3,0,1,2,4,8,7,11,0,1,1;
2,9,3,1,7,6,5,3,1,0,-3;8,-8,9,1,0,2,-8,2,1,0,1;
100,0,0,1,7,2,8,1,2,1,10] ;
»z1=table2(tablou_original_2,-3,7)
z1=11
192 MATLAB în ingineria mecanică
»z2=table2(tablou_original_2,-3,6.5)
z2=9
»z3=table2(tablou_original_2,-2,6)
z3=6.6
»z4=table2(tablou_original_2,50,8)
z4=1.4565
»z5=table2(tablou_original_2,99,9.9)
z5=0.1087
»z6=table2(tablou_original_2,-4,8)
»z7=table2(tablou_original_2,2,11)
INTERPOLAREA ŞI REGRESIA
f (x i ) y i , i 1, 2, 3, , n
d f , F 0
cât sunt mai elaborate considerentele pe baza carora i s-a stabilit forma (cu
cât este mai puţin empirică). Având în vedere imprecizia datelor, nu este de
asteptat ca funcţia model să interpoleze punctele tabelate (chiar dacă acest lucru
este teoretic posibil) şi este deci firesc să se impună minimizarea distanţei d(f, F)
în raport cu valorile parametrilor:
d(f , F ) min im
aj
n
S
i 1
y i F x i ; a 2
Acest procedeu se numeşte regresie sau ajustare prin metoda celor mai
mici pătrate. Termenul preluat din limba engleză este fitare (de la "to fit"—a
potrivi), desemnând procesul de ajustare a parametrilor curbei de regresie.
MATLAB în ingineria mecanică 197
n
Intr-un context mai larg, funcţionala S
i 1
y i F x i ; a 2 reprezintă
n
1
2
i 1
2
i
y i F x i ; a 2
n
Spre deosebire de funcţionala S
i 1
y i F x i ; a 2 , funcţia de merit
y i F x i ; a F x i ; a 0,
n
1
i 1
2
i
a j
j=1, 2, …, m
din care pot fi determinaţi parametrii aj. Ajustarea pe baza funcţiei de merit 2
mai este numită uneori şi regresie "hi-p&trat".
Curba de regresie y = F(x;a.) nu trebuie să treacă în mod necesar prin
nici unul din punctele tabelate Mi(xi, yi), ci doar prin barele de eroare ale
acestora (de lungime i ), minimizând funcţionala 2 .
198 MATLAB în ingineria mecanică
2
n
a j
a2
j
i 1
i2
y i
n
S
p 1
2
i 1
x i y i p1 x i p 2 0
n
S
p 2
2
i 1
y i p1 x i p 2 0
p 1 x i2 p 2 x i
i 1 i 1
i 1
xi y i
n n ale cărui soluţii sunt:
p1 x i n p 2 y i
i 1 i 1
200 MATLAB în ingineria mecanică
n n n
n
i 1
x i y i x i y i
i 1 i 1
p1 2 respectiv
n n
n x i2
xi
i 1 i 1
1
n n
p2
n i 1
y i p1 xi .
i 1
y X
unde:
-y este un vector coloană (n linii ), al răspunsurilor;
- este un vector coloană (m linii), al coeficienţilor;
-X este o matrice nxm, a valorilor previzionate;
- este vectorul coloană (n linii ), al erorilor.
Pentru un polinom de gradul întâi, cele n ecuaţii cu două necunoscute, exprimate
în funcţie de y, X şi sunt:
y 1 x1 1
y 2 x 2 1 p
y 3 x 3 1 x 1
p 2
y n x n 1
Soluţia problemei, dată prin metoda celor mai mici patrate, este un vector
b, care conţine vectorul coeficienţilor . Ecuaţiile generalizate ataşate acestui
sistem sunt reprezentate prin:
X T
X b XT y ,
MATLAB în ingineria mecanică 201
cu soluţia generalizată:
b XT X 1
XT y
ŷ X b H y ,
unde:
H X XT X 1
XT
r y ŷ 1 H y
n
S
i 1
w i y i ŷ i 2
b ˆ X T W X 1
XT W y ,
202 MATLAB în ingineria mecanică
1
wi
2
1
1 n
wi
n y i y 2
i 1
Această relaţie este acoperitoare pentru calculul ponderilor, dacă setul de date
conţine valori identice (repetiţii). În acest caz, n reprezintă numărul de replici
identice.
Metoda celor mai mici pătrate, în general, este sensibilă la valorile „ieşite”
din setul de valori, adică din modul în care evoluează acest set de date.
Minimizarea influenţei ieşirilor este realizabilă prin metoda, robustă, a celor mai
mici pătrate. Această metodă este disponibilă în două variante:
1. Metoda reziduurilor absolute (LAR=Least Absolute Residuals)-această
metodă aproximează setul de valori printr-o curbă care minimizează
diferenţa absolută a reziduurilor, în raport cu diferenţa pătratelor acestora.
Din acest motiv, valorile extreme au o influenţă redusă.
2. Metoda ponderilor bipătrate –Această variantă a metodei minimizează
suma pătratelor ponderilor, în care ponderea reprezintă „distanţa” lacare se
găseşte fiecare punct faţă de linia de aproximare. Astfel, punctele apropiate
de curbă au o pondere ridicată, iar punctele „îndepărtate” de curbă, dau
ponderi reduse (valori apropiate de zero).
ri
radj
1 hi
în care ri este reziduul pătratic uzual, iar hi este „rotunjirea” care ajustează
reziduurile prin lipsă. „Actualizarea” se realizează prin:
radj
u ,
Ks
unde K este o constantă de reglaj K=4.685. şi s este varianţa robustă dată prin
relaţia:
DMA
s
0,6745
wi
2
1 ui 2 , ui 1
0, ui 1
y f ( X, )
unde
y este vectorul coloană al răspunsurilor (n linii);
f este o funcţie de şi X;
este vectorul coloană al coeficienţilor (m linii);
X este matricea proiectată a modelului (n linii, m coloane );
este vectorul coloană al erorilor (n linii).
ŷ f ( X, )
MODELE PARAMETRICE
În MATLAB sunt disponibile câteva modele parametrice consacrate,
pentru interpolarea şi aproximarea datelor:
1. Funcţii exponenţiale
2. Serii Fourier
3. Modelul Gauss
i 1
4. Modelul polinomial
n
Ecuaţia caracteristică acestui model este: y
i 1
p i x n 1 i , în care (n+1)
5. Serii de puteri
6. Expresii raţionale
i 1
p i x n 1 i
forma: y n , în care gradul numărătorului, 0 n 5 ,
x m
i 1
qi x m i
7. Sume de sinus
208 MATLAB în ingineria mecanică
n
Modelul matematic este dat de relaţia: y a sin(b x c ) , în care
i 1
i i i
a este amplitudinea, b, este frecvenţa, iar c este constanta de fază pentru fiecare
termen al sumei de sinusi ( 1 n 8 ).
8. Distribuţia Weibull
9. Modele utilizator
tabele bi-dimensionale
În versiunile superioare ale
MATLAB este înlocuită cu funcţia
interp2
1. spline(x,y,xx) 1. interpolare spline cubică în tabele uni-
2. spline(x,y) dimensionale
2. determină componentele polinomiale ale
curbei spline de aproximare, pentru
utilizarea cu funcţia MATLAB ppval()
1. interpft(x,n) - interpolează prin metoda Transormatei
2. interpft(x,n,dim) Fourier rapide (fft)
1 2
1. interp1(x,Y,xi) - interpolează linear, spline sau cubic în tabele
2. interp1(Y,xi) uni-dimensionale
3. interp1(x,Y,xi,metoda) - căutare în tabele uni-dimensionale
1. interp2(X,Y,Z,XI,YI) - interpolează bi-linear, cubic-spline sau bi-
2. interp2(Z,XI,YI) cubic în tabele bidimensionale
3. interp2(X,Y,Z,XI,YI,metoda) - căutare în tabele bi-dimensionale
1. interp3(X,Y,Z,V,XI,YI,ZI) - interpolează date în trei dimensiuni
2. interp3(...,metoda) - căutare în tabele
1. interpn(X1,X2,X3,V,Y1,Y2,Y3,..) - interpolare lineară, spline, spline-cubică a
2. interpn(V,Y1,Y2,Y3,...) datelor multi-dimensionale
3. interpn(...,metoda) - căutare în tabele
1. griddata(x,y,z,XI,YI) - aproximează şi ajustează o suprafaţă z=f(x,y)
2. griddata(x,y,z,xi,yi) la datele vectorului tridimensional (x,y,z),
3. griddata(...,metoda) neuniform spaţiat, prin interpolarea la punctele
specificate (XI,YI), cu condiţia ca suprafaţa sa
treacă, întotdeauna, prin punctele date.
1. griddata3(x,y,z,v,xi,yi,zi) - aproximează şi ajustează o suprafaţă
2. griddata3(...,'metoda') w=f(x,y,z) dată de vectorul spaţial neuniform
(x,y,z,v), prin interpolare în punctele specificate
(xi,yi,zi)
interpstreamspeed(X,Y,Z,U,V,W,vertice - interpolează liniile de câmp prin vertex-uri, pe
s) baza datelor specificate în vectorii U,V,W, ale
căror coordonate sunt date de matricile X,Y,Z.
INTERPOLAREA LINEARĂ
yi = interp1(x,Y,xi)
yi = interp1(Y,xi)
yi = interp1(x,Y,xi,metoda)
yi = interp1(x,Y,xi,metoda,extrapolata)
'nearest' –in
Dacă un element al vectorului xi se găseşte în exteriorul intervalului
cuprins de x, atunci, metoda de interpolare specificată, va fi utilizată pentru
extrapolare.
Ex. :
MATLAB în ingineria mecanică 211
Soluţie:
Varianta A
» x = 0:10;
» y = sin(x);
» xi = 0:.25:10;
» yi = interp1(x,y,xi);
» plot(x,y,'o',xi,yi)
Varianta B
» x = 0:0.1 :10;
» y = sin(x);
» xi = 0:.25:10;
» yi = interp1(x,y,xi);
» plot(x,y,'o',xi,yi)
Ex. :
Se consideră doi vectori: unul reprezentând deceniile 1 până la 9 ale
secolului trecut, cel de-al doilea reprezentând populaţia Statelor Unite ale Americii
(în milioane locuitori) pentru fiecare început de deceniu:
» t = 1900:10:1990;
» p = [75.995 91.972 105.711 123.203 131.669 150.697 179.323…
203.212 226.505 249.633];
Soluţie:
Prin interpolare:
212 MATLAB în ingineria mecanică
»populatia_in_1975=interp1(t,p,1975)
se obţine rezultatul:
»populatia_in_1975=
214.8585
Interpolând între anii 1900 şi 2000 se obţin rezultatele, respectiv, graficul evoluţiei
populaţiei între anii 1900 şi 2000:
» x = 1900:2000;
» y = interp1(t,p,x);
» plot(t,p,'o',x,y)
INTERPOLAREA BIDIMENSIONALĂ
ZI = interp2(X,Y,Z,XI,YI)
ZI = interp2(Z,XI,YI)
ZI = interp2(Z,de_n_ori)
ZI = interp2(X,Y,Z,XI,YI,metoda)
CONCLUZIE :
Oricare dintre aceste variante interpolează între punctele unei reţele bi-
dimensionale, fiind găsite valorile unei funcţii f(x,y) care face conexiunea între
punctele intermediare.
» [X,Y] = meshgrid(-3:.25:3);
» Z = peaks(X,Y);
214 MATLAB în ingineria mecanică
» [XI,YI] = meshgrid(-3:.125:3);
» ZI = interp2(X,Y,Z,XI,YI);
» mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
» hold off
»axis([-3 3 -3 3 -5 20])
INTERPOLARE TRIDIMENSIONALĂ
» VI = interp3(X,Y,Z,V,XI,YI,ZI)
» VI = interp3(V,XI,YI,ZI)
» VI = interp3(V,de_n_ori)
» VI = interp3(...,metoda)
» [x,y,z,v] = flow(10);
» [xi,yi,zi] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);
» vi = interp3(x,y,z,v,xi,yi,zi);
» slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2])
yy = spline(x,y,xx)
pp = spline(x,y)
unde:
- x,y sunt vectori linie ce conţin abscisele, respectiv ordonatele
punctelor;
Planul de
secţionare
y=[2]
216 MATLAB în ingineria mecanică
Ex.:
Să se determine valoarea y1 de interpolare pentru x1=2.7; dacă:
»x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ;
»y1=spline(x,y,2.7)
y1=67.4340
Ex.:
Folosind aceiaşi vectori, se cere interpolarea în punctele (1.5,2.7) respectiv
în (1.2,3.4,4.5).
»x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ;
»y2=spline(x,y,[1.5,2.7])
y2=42.2500 67.4340
»y3=spline(x,y,[1.2,3.4,4.5])
y3 = 28.8320 70.0480 86.6250
Ex.:
Folosind vectorii x=[0,1,2,3,4,5] şi y=[0,20,60,68,77,100] se cere interpolarea în
“n=26” puncte echidistante situate între 0 şi 5:
»xi=0:0.2:5;
» yi=spline(x,y,xi)
yi =
Columns 1 through 8
0 -1.2480 0.7360 5.3440 11.9680 20.0000 28.8320 37.8560
Columns 9 through 16
46.4640 54.0480 60.0000 63.9040 66.1120 67.1680 67.6160 68.0000
Columns 17 through 24
68.7760 70.0480 71.8320 74.1440 77.0000 80.4160 84.4080 88.9920
MATLAB în ingineria mecanică 217
Columns 25 through 26
94.1840 100.0000
Ex.:
Să se reprezinte grafic o interpolare lineară şi o interpolare spline cubică
pentru datele şi rezultatele exemplului anterior.Pentru reprezentarea grafică se va
folosi funcţia MATLAB plot() :
»x i=0:0.2:5;
»y i=spline(x,y,x i);
»plot(x,y,xi,yi,x,y,’o’)
Ex.:
a) Fiind date 10 perechi de puncte în
xOy, să se traseze graficul rezultat prin
interpolare spline pe o reţea de patru ori
mai fină (x=0:10; y=sin x)
Soluţie:
»x = 0:10; y = sin(x);
»xi = 0:0.25:10;
»yi = spline(x,y,xi);
»plot(x,y,’o’,xi,yi)
b)
Folosind, pentru x pasul iterării 0.5 iar funcţia y=tgx+sinx, să se reprezinte
pe acelaşi grafic valorile funcţiei (y- cu linie punctată de culoare roşie), valorile
interpolate prin metoda spline(yi-cu linie continuă de culoare magenta ) şi valorile
interpolate prin metoda cubic (zi-cu linie continuă de culoare verde):
218 MATLAB în ingineria mecanică
»x = 0:0.5:10; y = tan(x)+sin(x);
»xi = 0:0.125:10;
»yi = spline(x,y,xi);
»zi=interp1(x,y,xi,'cubic');
»plot(x,y,'r:',xi,yi,'m-',xi,zi,'g-')
INTERPOLAREA MULTIPLĂ
»interp1(x,y,xi,’regula’)
Soluţie :
» x=-10:0.5:10;
» y=(log(abs(x+12))+2)./(exp(x)+12);
» xi=[-10,-9.75,-4.25,4.15,0.1,6.35];
» yi1 = interp1(x,y,xi,'linear');
» yi2 = interp1(x,y,xi,'spline');
» yi3 = interp1(x,y,xi,'cubic');
»plot(x,y,'r:',xi,yi1,'m-',xi,yi2,'g-',xi,yi3,'k-.')
REGRESIA POLINOMIALĂ
y 1 1 t 1 t 12
y 2 1 t 2 t 22
a 0
y 3 1 t 3 t 23
ecuaţii (vectorul y are 6 elemente) cu 3 necunoscute: a1 .
y 4 1 t 4 t 42
a 2
y 5 1 t 5 t 52
y 6 1 t 6 t 62
Presupunând că sunt date elementele vectorului t şi ale vectorului
corespondent, y, se formează matricea X, a coeficienţilor sistemului, în funcţie de
dimensiunea vectorului t, în raport de puterile întâi şi a doua ale elementelor
acestui vector:
» t = [0, 0.3, 0.8, 1.1, 1.6, 2.3]'; y = [0.5, 0.82, 1.14, 1.25, 1.35, 1.40]';X=
[ones(size(t)) t t.^2]
X=
1.0000 0 0
1.0000 0.3000 0.0900
1.0000 0.8000 0.6400
1.0000 1.1000 1.2100
1.0000 1.6000 2.5600
1.0000 2.3000 5.2900
220 MATLAB în ingineria mecanică
»T = (0:0.1:2.5)'; Y = [ones(size(T)) T
T.^2]*a; plot(T,Y,'-',t,y,'o'), grid on
REGRESIA EXPONENŢIALĂ
0.4097
Modelul matematic de aproximare se formează cu aceste valori
determinate prin rezolvarea sistemului de ecuaţii:
t t
Y 1,3974 0,8988 e 0,4097 t e . Prin evaluarea modelului, pe un
interval uniform T=0:0.1:2.5 (care include valorile vectoruluit = [0 .3 .8 1.1 1.6
2.3]'), şi suprapunerea graficului Y(T) peste y(t):
»T = (0:0.1:2.5)';
» Y = [ones(size(T)) exp(- T) T.*exp(- T)]*a;
» plot(T,Y,'-',t,y,'o'), grid on
REGRESIA MULTIPLĂ
include şi datele adiţionale. Astfel, dacă se presupune că, pentru doi parametri
diferiţi, definiţi vectorial, x1 = [.2 .5 .6 .8 1.0 1.1]' şi x2 = [.1 .3 .4 .9 1.1 1.4]', s-au
determinat experimental, statistic sau prin altă metodă, valorile funcţiei, şi acestea
sunt cuprinse în vectorul y = [0.17 0.26 0.28 0.23 0.27 0.24]', atunci, funcţia-
model matematic lineară, care ar putea exprima relaţia între parametri, este:
y a 0 a1 x1 a 2 x 2 , în care ai reprezintă parametrii lineari ce urmează a fi
determinaţi. Regresia multiplă determină soluţia a 0 , a 1 , a 2 folosind metoda
celor mai mici pătrate. Pentru aceasta, se construieşte matricea regresiilor, X, şi se
găsesc coeficienţii necunoscuţi (a=[a0; a1; a2]):
» x1 = [3.2 4.5 7.6 8.8 1.0 3.1]'; x2 = [2.1 4.3 5.4 8.9 1.1 1.4]';
» y = [2.5 3.3 4.5 5.2 8.9 4.7]';
» X = [ones(size(x1)) x1 x2];
» a = X\y
a=
6.4905
-1.0243
0.8208
» y_model=6.4905-1.0243.*x1+0.8208.*x2
y_model =
4.9364
5.4106
3.1381
4.7818
6.3691
4.4643
» Y=X*a;
» eroarea_maxima=max(abs(Y-y))
eroarea_maxima =
2.5309
MATLAB în ingineria mecanică 223
» x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .
27 .24]';
» X = [ones(size(x1)) x1 x2];
» a = X\y
a=
0.1018
0.4844
-0.2847
» y_model=0.1018+0.4844.*x1-0.2847.*x2
y_model =
0.1702
0.2586
0.2786
0.2331
0.2730
0.2361
» Y=X*a;
» eroarea_maxima=max(abs(Y-y))
eroarea_maxima =
0.0038
a) » p = polyfit(x,y,n)
b) » [p,S] = polyfit(x,y,n)
c) » [p,S,miu] = polyfit(x,y,n)
Descriere:
224 MATLAB în ingineria mecanică
p x p 1 x n p 2 x n 1 ... p n x p n 1
» x2 = 1:.1:5;
» y2 = polyval(p,x2);
» plot(x,y,'o',x2,y2),ylabel('Valorile determinate pentru y2' ),
xlabel('Valorile x2'), grid on
Reprezentarea grafică a acestei aproximări este redată în figură:
MATLAB în ingineria mecanică 225
Valoare aproximată
X2aproximat=4,5
Y2aproximat=385.9449
Valoare
măsurată
x=2
y=43,1
EROAREA APROXIMĂRII
n n n
1 1 x
2
n
x i x 2 , sau
i 1
2
n1
x i x 2 , unde
i 1
x
i 1
n
i
.
( x )2
1 2 2
( x, , ) e
2
x
2
0 e
t2
erf ( x ) dt
»p = polyfit(x,y,6)
MATLAB în ingineria mecanică 227
»p=
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
» f = polyval(p,x);
»tabel = [x y f y-f]
tabel =
Valorile x Valorile y Valorile f Valorile erorii
0 0 0.0004 -0.0004
0.1000 0.1125 0.1119 0.0006
0.2000 0.2227 0.2223 0.0004
0.3000 0.3286 0.3287 -0.0001
0.4000 0.4284 0.4288 -0.0004
0.5000 0.5205 0.5209 -0.0004
0.6000 0.6039 0.6041 -0.0002
0.7000 0.6778 0.6778 0.0000
0.8000 0.7421 0.7418 0.0003
0.9000 0.7969 0.7965 0.0004
1.0000 0.8427 0.8424 0.0003
1.1000 0.8802 0.8800 0.0002
1.2000 0.9103 0.9104 -0.0000
1.3000 0.9340 0.9342 -0.0002
1.4000 0.9523 0.9526 -0.0003
1.5000 0.9661 0.9664 -0.0003
1.6000 0.9763 0.9765 -0.0002
1.7000 0.9838 0.9838 0.0000
1.8000 0.9891 0.9889 0.0002
1.9000 0.9928 0.9925 0.0003
2.0000 0.9953 0.9951 0.0002
2.1000 0.9970 0.9969 0.0001
2.2000 0.9981 0.9982 -0.0001
2.3000 0.9989 0.9991 -0.0003
2.4000 0.9993 0.9995 -0.0002
2.5000 0.9996 0.9994 0.0002
Se poate observa că, pe acest interval, ajustarea polinomială este relativ
corespunzătoare, dar, dacă se extinde intervalul (vectorul x devine x=0:0.1:5),
reprezentarea grafică arată ca aproximarea devine neconformă, aceasta
deteriorându-se rapid:
228 MATLAB în ingineria mecanică
» x = (0: 0.1:7)';
» y = erf(x);
» polytool(x,y,6)
obţinându-se imaginea:
CAPITOLUL VII
MATLAB în ingineria mecanică 231
NOŢIUNI GENERALE
»trafic=[11,11,9;7,13,11;14,17,20;11,13,9;43,51,69;38,46,76;61,132,186;75,135,1
80;38,88,115;28,36,55;12,12,14;18,27,30;18,19,29;17,15,18;19,36,48;32,47,10;
42,65,92;57,66,151;44,55,90;114,145,257;35,58,68;11,12,15;13,9,15;10,9,7]
trafic =
11 11 9
7 13 11
14 17 20 Ora Pct. A Pct. B Pct. C
11 13 9 înregistrării
43 51 69 01 h 00 min 11 11 9
38 46 76 02 h 00 min 7 13 11
61 132 186 03 h 00 min 14 17 20
75 135 180 04 h 00 min 11 13 9
38 88 115 05 h 00 min 43 51 69
28 36 55 06 h 00 min 38 46 76
12 12 14 07 h 00 min 61 132 186
18 27 30 08 h 00 min 75 135 180
18 19 29 09 h 00 min 38 88 115
17 15 18 10 h 00 min 28 36 55
19 36 48 11 h 00 min 12 12 14
32 47 10 12 h 00 min 18 27 30
42 65 92 13 h 00 min 18 19 29
57 66 151 14 h 00 min 17 15 18
44 55 90 15 h 00 min 19 36 48
114 145 257 16 h 00 min 32 47 10
35 58 68 17 h 00 min 42 65 92
11 12 15 18 h 00 min 57 66 151
13 9 15
19 h 00 min 44 55 90
10 9 7
20 h 00 min 114 145 257
Matricea trafic, a
21 h 00 min 35 58 68
observaţiilor zilnice, poate fi 22 h 00 min 11 12 15
23 h 00 min 13 9 15
24 h 00 min 10 9 7
232 MATLAB în ingineria mecanică
» t=1:24;
» set(0,'defaultaxeslinestyleorder','-|--|-.');
» set(0,'defaultaxescolororder',[0 0 0]);
» xlabel('Timpul'), ylabel('Numar de vehicule in trafic'), grid on
» plot(t,trafic), legend('Locatia A','Locatia B','Locatia C',0)
» cftool
Această comandă are ca efect activarea interfeţei grafice Curve Fitting Tool
(Instrument de ajustare a curbelor):
PROCEDURA DE AJUSTARE
» cftool
Pentru a determina cea mai bună ajustare sau aproximare trebuie avute în
vedere atât rezultatele grafice cât şi rezultatele numerice ale procedurii efective.
Pentru exemplificare se consideră că pentru vectorul populatia_USA =
238 MATLAB în ingineria mecanică
[3.9,5.3,7.2,9.6,12.9,17.1,23.1,31.4,38.6,50.2,62.9,76,92,105.7,122.8,131.7,150.7,1
79,205,226.5,248.7]' raportat la anii de referinţă cuprinşi în vectorul
anii_de_referinta=[1790,1800,1810,1820,1830,1840,1850,1860,1870,1880,1890,
1900,1910,1920,1930,1940,1950,1960,1970,1980,1990]’ s-au realizat ajustări
folosind expresii polinomiale de diferite grade (2, 4 şi 7) respectiv o ajustare
exponenţială de un singur termen, a*exp(b*x) (adică a e bx ), şi s-au obţinut
reprezentările grafice (ale rezultatelor ajustării, respectiv ale reziduurilor), din
figură:
Din aceste reprezentări se poate deduce că este dificil a decide care dintre
polinoameoferă cele mai bune rezultate pentru aproximare sau ajustare, întrucât
diferenţele reziduale sunt nesemnificative, iar, prin comparaţie, ajustarea
exponenţială cu un singur termen este evident neacoperitoare, datorită gradului
mare de incompatibilitate şi concordanţă cu datele discrete.Setul de date ajustate se
poate vizualiza accesând butonul Data..., caseta Data sets, opţiunea View:
Parametrii numerici ai ajustării se pot seta din interfaţa Curve Fitting Tool
->Fitting ->Results şi
Table of Fits->Table
options:
În această sesiune
sunt validate titlurile
coloanelor care vor apărea
în tabelul Table of Fits.
Opţiunea SSE (Sum of
Squares Due to Error),
este o marime statistică ce
se referă la mărimea
deviaţiei valorii de răspuns
a ajustării, faţă de valoarea
MATLAB în ingineria mecanică 241
i 1
i ŷ i y i 2
-SST): R square n . R-square poate lua valori cuprinse între 0
i 1
i y i y i 2
relaţia: SSE
y
i 1
i i ŷ i 2
. O valoare apropiată de 0 înseamnă o
RMSE
v v
bună aproximare.
Validarea parametrului #Coeff are ca efect afişarea numărului de
coeficienţi folosiţi pentru aproximarea datelor.
Intervalul de confidenţă (de siguranţă) reprezintă limitele, inferioară
respectiv superioară, ale coeficienţilor ecuaţiei aproximării. Formatul afişat pentru
un parametru este: p1 = 0.006541 (0.006124, 0.006958), ceea ce înseamnă că
valoarea calculată a coeficientului este 0.006541, limita inferioară 0.006124
respectiv limita superioară 0.006958. Implicit, nivelul de siguranţă este 95%, şi se
poate modifica din interfaţa Curve Fitting Tool meniul View, opţiunea
Confidence level. Limitele de siguranţă pot fi calculate şi afişate grafic din
interfaţa Curve Fitting Tool meniul View, opţiunea Prediction Bounds, sau cu
opţiunea Analysis din interfaţa Curve Fitting Tool.
Din interfaţa Curve Fitting Tool, butonul Analysis se pot realiza analize
ale parametrilor ajustării, în funcţie de datele originale. Se pot interpola, extrapola
date, se pot diferenţia şi integra curbele de variaţie ale ajustării, între anumite
limite. Pentru aceasta, se sccesează vectorul Xi dorit, din câmpul Analyze at Xi, se
selectează caseta aferentă evaluării Evaluate fit at Xi, pentru afişarea rezultatelor
şi reprezentarea grafică a acestora fiind necesară validarea casetelor Plot results şi
Plot data set, după care se accesează butonul Apply, pentru realizarea procedurii.
De exemplu pentru extrapolarea necesară identificării datelor ajustării folosind
ajustarea polinomială, pentru populaţia corespunzătoare anului 2025, se va
modifica ultima valoare din câmpul Analyze at Xi, la valoarea 2025:
Ex.:
Se va realiza o ajustare polinomială de ordinul III, V şi VI, pentru vectorii
x = [4:0.1:7 9:0.2:12]', y = c(1) + c(2)*x + c(3)*x.^2 + c(4)*x.^3 +
(rand(size(x))-0.5), ai cărui coeficienţi sunt elementele vectorului c = [8 -5 13 12].
Ex.:
Se va ajusta o curbă de variaţie a coeficientului de dilatare a Cu, în raport
cu temperatura. Pentru aceasta se va considera vectorul temp al temperaturilor, un
vector cu 236 elemente, cu temperaturi cuprinse între 24,41 [K] şi 848,23 [K], iar
valorile măsurate experimental, pentru coeficientul de dilatare, pentru aceste
temperaturi, stocate în vectorul coloană coef_CU. Se va realiza o aproximare
raţională, cu o funcţie având atat numărătorul cât şi numitorul, polinoame de gradul
doi. După ce sunt introduse datele, în fereastra de comandă (prin una din opţiunile
posibile:de la tastatură, import, încarcare etc.), se activează procesul de ajustare, cu
funcţia cftool, apoi se setează parametrii de aproximare din interfaţa Fitting...,
selectând, din câmpul Type of fit, opţiunea Rational. Apoi, se nominalizează tipul
polinomului de la numărător (Numerator), respectiv de la numitorul expresiei
raţionale (Denominator):
MATLAB în ingineria mecanică 249
[1] BEJU, I., et al.. -Tehnici de calcul tensorial euclidian cu aplicaţii, Editura
Tehnică, Bucureşti, 1977 .
[2] BEU, T. A. –Calcul numeric în C, Ed. Albastră, Cluj-Napoca, 1999.
[3] BONET, J. - Numerical Simulation of the Superplastic Forming of Thin
Sheet Components Using the Finite Element method, " International
Journal for Numerical Methods in Engineering", vol. 30, pag. 1719- 1737,
1990.
[4] BROWN, E.E.& col.- “Superalloys – Processing – 2 nd. Int.Conf. on
Superalloys”, Publ.AIME, 1972, pag. L1-L12.
[5] BUDIANSKY, B. & col.- “Mechanics of Solids”, Ed. H.G.Hopkins &
M.J.Sewell, publ. Pergamon Press Oxford, 1982, pag. 13.
[6] DODESCU, GH. -Metode numerice în algebră, Editura Tehnică,
Bucureşti, 1979 .
[7] FORRAY, M.J. - Calculul variaţional în ştiinţă şi tehnică, Editura
Tehnică, Bucureşti, 1975 .
[8] GHINEA, M. -MATLAB- Calcul numeric, grafică, aplicaţii,
Editura Teora, Bucureşti, 1997.
[9] GREBENIŞAN, G. –Metodă de optimizare numerică a parametrilor
deformării superplastice, Sesiunea anuală de comunicări ştiinţifice, Oradea,
1999
[10] GREBENIŞAN, G. –Program dezvoltat în mediul MATLAB 5.3, pentru
determinarea analitică a parametrilor tehnologici la deformarea
superplastică (partea I-Consideraţii teoretice), Simpozion “Materiale
avansate, tratamente termice şi calitatea managementului”, Editura
Politehnica, Timişoara, 2001.
[11] GREBENIŞAN, G. - Program dezvoltat în mediul MATLAB 5.3, pentru
determinarea analitică a parametrilor tehnologici la deformarea
superplastică (partea II-Aplicaţie), Simpozion “Materiale avansate,
tratamente termice şi calitatea managementului”, Editura Politehnica,
Timişoara, 2001.
[12] GREBENIŞAN, G. –Parametrii tehnologici ai deformării superplastice-
program de calcul în MATLAB-studiu de caz, Sesiunea anuală de
comunicări ştiinţifice, Oradea, 2002.
[13] HAHN, B.D. –Essential MATLAB for Scientists and Engineers, Ed. By
Butterworth-Heinemann, Cape Town, 2002.
[14] KOBAYASHI, S. -Metal Forming and the Finite Element Method, Oxford
Universitz Press, New York, 1989.
[15] LEWIS, P.E.,ş.a. - The Finite element Method. Principles and
Applications, Addison Wesley Publishing Company, London, 1991 .
[16] LUNGU, N. - Matematici cu aplicaţii tehnice, Editura Tehnică,
Bucureşti,1990 .
254 MATLAB în ingineria mecanică
ANEXĂ
MATLAB în ingineria mecanică 255
format short e
%matricea deformatiilor reale;
eps=[0.0000318 0.000077 0.000155 0.000285 0.000669 0.00131 0.00256 0.00637 ;
0.0000318 0.000077 0.000155 0.000285 0.000669 0.00131 0.00256 0.00637 ;
0.0000328 0.0000793 0.000155 0.000285 0.000711 0.00139 0.00256 0.00637 ;
0.0000318 0.0000793 0.000155 0.000285 0.000711 0.00139 0.00256 0.0000947;
0.0000318 0.0000746 0.000155 0.000303 0.000711 0.00139 0.00256 0.00599 ;
0.0000318 0.0000746 0.000146 0.000268 0.000649 0.00116 0.00226 0.00499 ;
0.0000793 0.000155 0.000285 0.000711 0.00139 0.00272 0.00637 0.0117 ;
0.0000299 0.0000746 0.000137 0.000277 0.000629 0.00131 0.00233 0.0047 ;
0.0000318 0.000077 0.000146 0.000285 0.00069 0.00135 0.00248 0.00564 ;
0.0000318 0.000077 0.000146 0.000285 0.00069 0.00135 0.00248 0.00547 ;
0.0000309 0.0000746 0.000146 0.000268 0.000669 0.00123 0.0024 0.00547 ];
%matricea coeficientilor de sensibilitate a vitezei de deformare;
m=[ 0.31 0.22 0.19 0.17 0.15 0.13 0.11 0.08;
0.24 0.28 0.25 0.21 0.14 0.11 0.08 0.07;
0.6 0.44 0.37 0.31 0.26 0.23 0.2 0.15;
0.58 0.58 0.6 0.62 0.61 0.59 0.54 0.37;
0.31 0.27 0.24 0.21 0.017 0.14 0.12 0.1;
0.5 0.4 0.36 0.29 0.21 0.17 0.15 0.13;
0.26 0.49 0.65 0.54 0.46 0.39 0.3 0.22;
0.45 0.58 0.63 0.62 0.58 0.53 0.46 0.38;
0.29 0.41 0.47 0.5 0.51 0.48 0.44 0.37;
0.37 0.43 0.46 0.49 0.51 0.51 0.5 0.48;
MATLAB în ingineria mecanică 257
%h=uicontrol('Style','text','Position',[80 80 300
65],'String',MESAJ1,'BackgroundColor','b','ForegroundColor','y','FontWeight','bold
');
% j=uicontrol('Style','text','Position',[80 80 300 65],'String',MESAJ2);
% l=uicontrol('Style','text','Position',[80 80 300 65],'String',MESAJ3);
pause
subplot(2,3,1);
plot(temp/50000,'r');
%set(title('TEMPERATURA [C]'),'color','r')
index=1;
%text(50,0.0055,{'\leftarrow temp'},'FontSize',10)
legend('temp.',1)
subplot(2,3,2);plot(mar_gr/1000,'y');
%set(title('DIM. GRAUNTILOR [m*10^-6]'),'color','y')
legend('dim. gr.',1)
subplot(2,3,3);plot(eps,'m');
%set(title('VIT. DE DEF. [sec^-1]'),'color','m')
legend('vit. de def.',1)
subplot(2,3,4);plot(m/100,'g');
%set(title('COEFICIENTUL m'),'color','g')
legend('coef. "m"',1)
subplot(2,3,5);plot(sigma/10000,'b');
%set(title('REZ. DE DEF. [N/mm^2]'),'color','b')
legend('rez. de def.',1)
subplot(2,3,6);plot(k/1000000,'k');
%set(title('CONSISTENTA [N/mm^2]'),'color','k')
MATLAB în ingineria mecanică 259
legend('consistenta',1)
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
delete(h)
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
260 MATLAB în ingineria mecanică
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left','Visible','on');
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...
'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme
nt','left');
zoom off
pause
%Reprezentarea grafica a expresiei sigma=k*(eps^m)
zoom on
msgbox('Pentru "ZOOM- IN" folositi butonul stang al mouse- ului...Pentru
"ZOOM- OUT" folositi butonul drept!','!!! H E L P !!!')
sigma_calc = k.*(eps.^m);
subplot(1,1,1)
plot(sigma_calc,'r');
ylabel('REZISTENTA [kPa]')
xlabel('INDEX')
MATLAB în ingineria mecanică 261
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
disp(blanks(1)')
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE
IN WORKSPACE','!! VERIFICARE !!')
else
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
end
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left','Visible','on');
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...
'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme
nt','left');
pause
g = waitbar(0,'A S T E P T A T I V A R O G !...');
for i=1:1000,
% SE REALIZEAZA CALCULE %
waitbar(i/1000)
end
close(g)
temp1 = temp(1:8);
mar_gr1 = mar_gr(1:8);
eps1 = eps(1:8);
m1 = m(1:8);
sigma1 = sigma(1:8);
k1 = k(1:8);
temp2 = temp(9:16);
mar_gr2 = mar_gr(9:16);
eps2 = eps(9:16);
m2 = m(9:16);
sigma2 = sigma(9:16);
k2 = k(9:16);
temp3 = temp(17:24);
mar_gr3 = mar_gr(17:24);
eps3 = eps(17:24);
m3 = m(17:24);
sigma3 = sigma(17:24);
k3 = k(17:24);
temp4 = temp(25:32);
mar_gr4 = mar_gr(25:32);
eps4 = eps(25:32);
m4 = m(25:32);
sigma4 = sigma(25:32);
k4 = k(25:32);
temp5 = temp(33:40);
mar_gr5 = mar_gr(33:40);
eps5 = eps(33:40);
MATLAB în ingineria mecanică 263
m5 = m(33:40);
sigma5 = sigma(33:40);
k5 = k(33:40);
temp6 = temp(41:48);
mar_gr6 = mar_gr(41:48);
eps6 = eps(41:48);
m6 = m(41:48);
sigma6 = sigma(41:48);
k6 = k(41:48);
temp7 = temp(49:56);
mar_gr7 = mar_gr(49:56);
eps7 = eps(49:56);
m7 = m(49:56);
sigma7 = sigma(49:56);
k7 = k(49:56);
temp8 = temp(57:64);
mar_gr8 = mar_gr(57:64);
eps8 = eps(57:64);
m8 = m(57:64);
sigma8 = sigma(57:64);
k8 = k(57:64);
temp9 = temp(65:72);
mar_gr9 = mar_gr(65:72);
eps9 = eps(65:72);
m9 = m(65:72);
sigma9 = sigma(65:72);
k9 = k(65:72);
temp10 = temp(73:80);
mar_gr10 = mar_gr(73:80);
eps10 = eps(73:80);
m10 = m(73:80);
sigma10 = sigma(73:80);
k10 = k(73:80);
temp11 = temp(81:88);
mar_gr11 = mar_gr(81:88);
264 MATLAB în ingineria mecanică
eps11 = eps(81:88);
m11 = m(81:88);
sigma11 = sigma(81:88);
k11 = k(81:88);
temp12 = temp(89:96);
mar_gr12 = mar_gr(89:96);
eps12 = eps(89:96);
m12 = m(89:96);
sigma12 = sigma(89:96);
k12 = k(89:96);
% Cu majuscule se vor nota valorile calculate ale lui 'm' si 'k' prin metoda numerica
conditie = 1;
pas = 0.001;
eroare = 0.000001;
expresie = 0;
M = 0;
i = 0;
while conditie
M = M+pas;
i = i+1;
s11 = sum(eps1.^(2*M));
s21 = sum((eps1.^M).*sigma1.*log(eps1));
s31 = sum((eps1.^M).*sigma1);
s41 = sum((eps1.^(2.*M)).*sigma1.*log(eps1));
expresie = s11*s21-s31*s41;
s12 = sum(eps2.^(2*M));
s22 = sum((eps2.^M).*sigma2.*log(eps2));
s32 = sum((eps2.^M).*sigma2);
s42 = sum((eps2.^(2.*M)).*sigma2.*log(eps2));
expresie = s12*s22-s32*s42;
MATLAB în ingineria mecanică 265
s13 = sum(eps3.^(2*M));
s23 = sum((eps3.^M).*sigma3.*log(eps3));
s33 = sum((eps3.^M).*sigma3);
s43 = sum((eps3.^(2.*M)).*sigma3.*log(eps3));
expresie = s13*s23-s33*s43;
s14 = sum(eps4.^(2*M));
s24 = sum((eps4.^M).*sigma4.*log(eps4));
s34 = sum((eps4.^M).*sigma4);
s44 = sum((eps4.^(2.*M)).*sigma4.*log(eps4));
expresie = s14*s24-s34*s44;
s15 = sum(eps5.^(2*M));
s25 = sum((eps5.^M).*sigma5.*log(eps5));
s35 = sum((eps5.^M).*sigma5);
s45 = sum((eps5.^(2.*M)).*sigma5.*log(eps5));
expresie = s15*s25-s35*s45;
s16 = sum(eps6.^(2*M));
s26 = sum((eps6.^M).*sigma6.*log(eps6));
s36 = sum((eps6.^M).*sigma6);
s46 = sum((eps6.^(2.*M)).*sigma6.*log(eps6));
expresie = s16*s26-s36*s46;
s17 = sum(eps7.^(2*M));
s27 = sum((eps7.^M).*sigma7.*log(eps7));
s37 = sum((eps7.^M).*sigma7);
s47 = sum((eps7.^(2.*M)).*sigma7.*log(eps7));
expresie = s17*s27-s37*s47;
s18 = sum(eps8.^(2*M));
s28 = sum((eps8.^M).*sigma8.*log(eps8));
s38 = sum((eps8.^M).*sigma8);
s48 = sum((eps8.^(2.*M)).*sigma8.*log(eps8));
expresie = s18*s28-s38*s48;
s19 = sum(eps9.^(2*M));
s29 = sum((eps9.^M).*sigma9.*log(eps9));
s39 = sum((eps9.^M).*sigma9);
s49 = sum((eps9.^(2.*M)).*sigma9.*log(eps9));
expresie = s19*s29-s39*s49;
266 MATLAB în ingineria mecanică
s10 = sum(eps10.^(2*M));
s20 = sum((eps10.^M).*sigma10.*log(eps10));
s30 = sum((eps10.^M).*sigma10);
s40 = sum((eps10.^(2.*M)).*sigma10.*log(eps10));
expresie = s10*s20-s30*s40;
s111 = sum(eps11.^(2*M));
s211 = sum((eps11.^M).*sigma11.*log(eps11));
s311 = sum((eps11.^M).*sigma11);
s411 = sum((eps11.^(2.*M)).*sigma11.*log(eps11));
expresie = s111*s211-s311*s411;
s112 = sum(eps12.^(2*M));
s212 = sum((eps12.^M).*sigma12.*log(eps12));
s312 = sum((eps12.^M).*sigma12);
s412 = sum((eps12.^(2.*M)).*sigma12.*log(eps12));
xpresie = s112*s212-s312*s412;
sigma_calc1 = K1.*(eps1.^((-1)*M));
sigma_calc2 = K2.*(eps2.^((-1)*M));
sigma_calc3 = K3.*(eps3.^((-1)*M));
sigma_calc4 = K4.*(eps4.^((-1)*M));
sigma_calc5 = K5.*(eps5.^((-1)*M));
MATLAB în ingineria mecanică 267
sigma_calc6 = K6.*(eps6.^((-1)*M));
sigma_calc7 = K7.*(eps7.^((-1)*M));
sigma_calc8 = K8.*(eps8.^((-1)*M));
sigma_calc9 = K9.*(eps9.^((-1)*M));
sigma_calc10 = K10.*(eps10.^((-1)*M));
sigma_calc11 = K11.*(eps11.^((-1)*M));
sigma_calc12 = K12.*(eps12.^((-1)*M));
subplot(1,2,1)
plot(eps1,sigma_calc1,'r')
grid on
set(title('SIGMA CALCULAT-1'),'color','r')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
268 MATLAB în ingineria mecanică
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
hold off
subplot(1,2,2)
plot(eps2,sigma_calc2,'b');grid
set(title('SIGMA CALCULAT-2'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
MATLAB în ingineria mecanică 269
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
270 MATLAB în ingineria mecanică
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps4,sigma_calc4,'k')
set(title('SIGMA CALCULAT-4'),'color','k')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
272 MATLAB în ingineria mecanică
pause
subplot(1,1,1)
subplot(1,2,1)
plot(eps5,sigma_calc5,'y')
set(title('SIGMA CALCULAT-5'),'color','y')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
MATLAB în ingineria mecanică 273
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(1,2,2)
plot(eps6,sigma_calc6,'r')
set(title('SIGMA CALCULAT-6'),'color','r')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
274 MATLAB în ingineria mecanică
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,1)
plot(eps7,sigma_calc7,'m')
set(title('SIGMA CALC7'),'color','m')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
MATLAB în ingineria mecanică 275
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...
'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps8,sigma_calc8,'c')
set(title('SIGMA CALCULAT-8'),'color','c')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
276 MATLAB în ingineria mecanică
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
end
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
MATLAB în ingineria mecanică 277
subplot(1,2,1)
plot(eps9,sigma_calc9,'b')
set(title('SIGMA CALCULAT-9'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
end
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
278 MATLAB în ingineria mecanică
pause
subplot(1,2,2)
plot(eps10,sigma_calc10,'k')
set(title('SIGMA CALCULAT-10'),'color','k')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
MATLAB în ingineria mecanică 279
disp(blanks(1)')
pause
subplot(2,1,1)
plot(eps11,sigma_calc11,'r')
set(title('SIGMA CALCULAT-11'),'color','r')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
280 MATLAB în ingineria mecanică
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps12,sigma_calc12,'b')
set(title('SIGMA CALCULAT-12'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
MATLAB în ingineria mecanică 281
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
282 MATLAB în ingineria mecanică
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps2,sigma2,'g*')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','g')
MATLAB în ingineria mecanică 283
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
end
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...
'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme
nt','left');
284 MATLAB în ingineria mecanică
pause
subplot(2,1,1)
plot(eps3,sigma3,'b')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
end
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps4,sigma4,'g')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','g')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
286 MATLAB în ingineria mecanică
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,1)
plot(eps5,sigma5,'k')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','k')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
MATLAB în ingineria mecanică 287
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps6,sigma6,'r')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','r')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
288 MATLAB în ingineria mecanică
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
MATLAB în ingineria mecanică 289
subplot(2,1,1)
plot(eps7,sigma7,'b')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
end
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
290 MATLAB în ingineria mecanică
pause
subplot(2,1,2)
plot(eps8,sigma8,'y')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','y')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
MATLAB în ingineria mecanică 291
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,1)
plot(eps9,sigma9,'r')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','r')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
292 MATLAB în ingineria mecanică
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,2)
plot(eps10,sigma10,'c')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','c')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
MATLAB în ingineria mecanică 293
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
subplot(2,1,1)
plot(eps11,sigma11,'r')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','r')
294 MATLAB în ingineria mecanică
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
MATLAB în ingineria mecanică 295
pause
subplot(2,1,2)
plot(eps12,sigma12,'b')
set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA
DEFORMARE'),'color','b')
disp(blanks(1)')
h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...
'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme
nt','left');
disp(blanks(1)')
r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC
?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI
"0 urmat de ENTER"');
if r==1;
j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
disp('ALEGETI PUNCTELE ! ')
disp('INCHEIATI APASAND TASTA "E N T E R " ')
[x,y]=ginput;
disp(blanks(1)')
disp('C O O R D O N A T E L E S U N T:')
disp(blanks(1)')
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA'])
disp(blanks(1)')
disp([x,y])
disp('Apasati orice tasta pentru a continua')
disp('Apasati [Ctrl + C] pentru a renunta')
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN
WORKSPACE','!! VERIFICARE !!')
else
296 MATLAB în ingineria mecanică
disp(blanks(1)')
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme
nt','left');
pause
delete(j)
delete(h)
msgbox('S F A R S I T P R O G R A M','!!!! OPTIMIZARE !!!!')
disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
')
disp(' ~~~~~~~~~~ S FAR S IT PRO G RAM ~~~~~~~~ ')
disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
')
%Sfarsit program