Documente Academic
Documente Profesional
Documente Cultură
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
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
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
programe’ reţele 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
VARIABILE
» 1/4 [Enter]
returnează rezultatul:
» ans = 0.2500
A=
1 2 3
4 5 6
7 8 9
»A [Enter]
»A=
1 2 3
4 5 6
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 π , în
3
care π = 1.77245385090552 , poate fi afişat în diferite formate. Pentru aceasta, se
va introduce, în linia de comandă, mai întâi, vectorul a:
14 MATLAB
» a=[5/3,1.23456789012345678901,sqrt(pi)];
» 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=
+++
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
16 MATLAB
b=
0 + 2.0000i
»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.
MATLAB în ingineria mecanică 17
»f=1+(2+sqrt(3))i
??? f=1+(2+sqrt(3))i
|
Error: Missing operator, comma, or semicolon.
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
18 MATLAB
Funcţii exponenţiale
Funcţii complexe
Aproximări şi resturi
d 2y dy
besselj - f. Bessel de ordinul I ( x 2 ⋅ 2
+ x⋅ − (x 2 + ν 2 ) ⋅ y = 0
dx dx
bessely - funcţia Bessel de ordinul II
besselh - funcţia Bessel de ordinul III (funcţia Hankel)
besseli - funcţia Bessel de ordinul I, modificată
besselk - funcţia Bessel de ordinul II, modificată
1
beta ∫
- funcţia Beta completă ( B( z , w ) = t z −1 (1 − t ) w −1 dt )
0
1
1
betainc -funcţia Beta incompl. ( I x ( z , w ) =
B( z , w ) ∫
t z −1 (1 − t ) w −1 dt )
0
betaln - logaritmul natural al funcţiei Beta
φ
dθ
ellipj - funcţia Jacobi eliptică ( ∫ (1 − m sin
0
2
θ)
)
1
1 −
2
∫ [(1 − t )(1 − mt 2 )]
2
ellipke - funcţia eliptică integrală ( dt )
0
x
2 −t 2
π∫
erf - funcţia eroare ( erf ( x ) = e dt )
0
20 MATLAB
∞
2 −t 2
π∫
erfc - funcţia eroare complementară ( erfc( x ) = e dt )
0
erfinv - funcţia eroare inversă
∞
e −t
expint - funcţia integrală exponenţială ( ∫x
t
dt )
∞
gamma ∫
- funcţia Gamma ( Γ(a ) = e −t t a−1dt )
0
x
1
gammainc - funcţia Gamma incompletă (
Γ (a ) ∫
e − t t a−1dt )
0
gammaln - logaritmul natural al funcţiei Gamma
legendre - funcţia Legendre asociată
(n
)
m
d m 1 d n 2
( Pnm ( x ) = ( −1) m (1 − x 2 ) 2 n n x − 1 )
dx 2 n! dx
cross - produs vectorial al doi vectori
dot - produs scalar al doi vectori
Operaţiuni cu matrici
Matrici speciale
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]
»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
A=[1,2[Enter]
3,4[Enter]
5,6] [Enter]
şi se afişează:
A=
1 2
3 4
5 6
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=
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
MATLAB în ingineria mecanică 27
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=[]
28 MATLAB
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);
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
MATLAB în ingineria mecanică 29
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
30 MATLAB
» suma_elementelor_pe_linie=sum(M3) [Enter]
suma_elementelor_pe_linie =
15 15 15
»M4=magic(4)
M4 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
» 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
32 MATLAB
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
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
MATLAB în ingineria mecanică 33
»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
»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
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ă:
text trebuie sa fie organizat ca tabel bi-dimensional (linii şi coloane), separate prin
spaţii libere (blancuri), cu un rând pe fiecare linie şi număr egal de elemente în
fiecare rând (tabelul trebuie sa aibă acelasi număr de coloane pe fiecare linie). De
exemplu, dacă, intr-un editor de text (acest editor poate fi extern MATLAB-ului),
se creează fişierul text conţinând următoarele patru linii de text:
16 3 2 13
5 10 11 8
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
36 MATLAB
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.
De exemplu, cu instrucţiunea următoare, se cere afişarea elementului “al
doilea” al vectorului x:
» a = x(2) [Enter]
a=
1.7321
» A=[1,2;3,4];A(2,4) = 6 [Enter]
MATLAB în ingineria mecanică 37
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 )).
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
CONCATENAREA MATRICILOR
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
MATLAB în ingineria mecanică 39
» 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
40 MATLAB
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];
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
»B1=M(1:5,3) [Enter]
B1 =
3
3
0
-3
3
»D1=M(:,3) [Enter]
42 MATLAB
»D1 =
3
3
0
-3
3
8
»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)
MATLAB în ingineria mecanică 45
» 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))*
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
46 MATLAB
» 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”
ans =
[ 2*k^2*x, 3*pi^3*x^2]
[ k^2, 1/(x^2+1)^(1/2)*x]
» 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]
»syms a x
»limit((x^x-a^x)/(a^x-a^a),a)
ans =
1/log(a)
»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 ∑a
k =1
k , în care şirul a k este definit
MATLAB în ingineria mecanică 49
∑k
1
calculul sumei , se foloseşte secvenţa:
k =1
2
+k
» syms k n
» symsum(1/(k^2+k),1,n)
ans =
-1/(n+1)+1
∑ (k ) ∑ (x )
n n
2
+ 1 ⋅ x k şi k
+ y k , se foloseşte secvenţa:
k =0 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)
calculele sunt destul de dificile. Pentru evaluarea lui f(x) se caută o altă
funcţie F(x) relativ simplă astfel ca pentru orice valoare a lui x valoarea lui
f(x) se alege dintr-o anumită clasă de funcţii, de exemplu din clasa
polinoamelor de grad n sau mai mic, pentru un anume n, atunci trebuie ca
F(x) să ia aceeaşi valoare cu f(x) pentru anumite valori ale lui x. Aceste
valori ale lui x sunt adesea referite ca puncte de interpolare. De asemenea se
poate cere ca anumite derivate ale lui F(x) să ia acelaşi valori cu valorile
derivatelor corespunzătoare ale lui f(x) în anumite puncte de interpolare. Se
poate arăta că dacă F(x) este suma a n+1 termeni ai seriei Taylor pentru f(x)
în punctul x=a, atunci F(x) poate fi considerată ca un polinom de interpolare
pentru f(x) de grad n sau mai mic, deoarece:
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ă
2ln(x + 7) = yln3
cu 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)
»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')
MATLAB în ingineria mecanică 53
S=
u: [2x1 sym]
x: [2x1 sym]
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)
54 MATLAB
» y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x')
y2 =
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: 3 − 5
44 + 8−3
În MATLAB, se foloseşte algoritmul:
» E1=3^5-4^(1/4)+8^(-3)
ceea ce are ca rezultat:
E1 =
241.5877
2).-Calculul expresiilor cu numere iraţionale
Să se calculeze expresiile:
2
2
E 2 = 15 ;
3
E 3 = 43,56 ; E 4 = 3 18 − 45 ⋅ + 23 − 8 99
88,9
MATLAB în ingineria mecanică 55
» E2=15^(1/3) [Enter]
E2 =
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
; E 6 = ln 9 − ; E 7 = lg 3 2002 − 13 ⋅
2
1
5
(
; E = log 4 90 − 4 3
8
)
1 2
3 4
E9 = e
12 − 3 5 3 log 125 12 − 4 3
E 10 = (1 + 2 + 3 ) : − 14 + 5 34 − ln 23 ⋅ 8 5 _ 55 ⋅
11 8
» E7=log10(2002^(1/3)-13*sqrt(1/5))
E7 =
0.8318
» E8=(log(90-3^(1/4)))/(log(4))
56 MATLAB
E8 =
3.2353
1 2
3 4
Pentru calculul expresiei E 9 = e , se procedează astfel :
»x=[1,2;3,4];
»E9=exp(x)
E9 =
2.7183 7.3891
20.0855 54.5982
»E9=exp([1,2;3,4])
↑ Ctrl+p Readuce linia anterioară (prin acţionarea repetata a tastei “săgeată sus” se
readuc toate liniile anterioare, în linia curentă)
↓ Ctrl+n Readuce linia următoare (prin acţionarea repetată a tastei “săgeată jos” se
readuc toate liniile “următoare”, în linia curentă)
← Ctrl+b Salt la stânga cu un caracter
→ Ctrl+f Salt la dreapta cu un caracter
Ctrl+ → Ctrl+r Salt la dreapta, peste un cuvânt
Ctrl+ ← Ctrl+l Salt la stânga, peste un cuvânt
Home Ctrl+a Salt la începutul liniei de comandă
End Ctrl+e Salt la sfârşitul liniei de comandă
Esc Ctrl+u Şterge linia curentă
Del Ctrl+d Şterge caracterul din dreapta cursorului
Backspace Ctrl+h Şterge caracterul din stânga cursorului
Ctrl+k Şterge de la cursor până la sfârşitul liniei de comandă curente.
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
3 4
2 ln 7 lg 18 6 9 3
2 0 π 1
4
D= 3 2 6 5
5 3
3 ln 9 7
58 MATLAB
• 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”.
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]
CAPITOLUL II
» 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)
60 MATLAB
A./B - rdivide(A,B)
A.\B - ldivide(A,B)
A.^B - power(A,B)
A.' - transpose(A)
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 34
Fie: m= ; n= lg 8
3 4 e ln 7 1 − e
MATLAB în ingineria mecanică 61
Să se calculeze: 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 SI
PRODUSUL SCALAR AL DOI VECTORI
» a=[1;2;3]
a=
1
2
3
» b=[5,6,7]
b=
5 6 7
» b_simbolic=[b11,b12,b13]
b_simbolic =
[ b11, b12, b13]
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
» a2=b*a [Enter]
??? Error using
Inner matrix dimensions must agree.
Eroare la utilizarea operatorului *
Matricile trebuie să respecte condiţia dimensională
» 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]
66 MATLAB
a1 =
3.0000 -2.0000
2.0000 -1.0000
» a2=b/a [Enter]
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:
» B=[b1 b2]
B=
[ b1 b2]
» X=B/A
X=
[ -(a21*b2-b1*a22)/(a11*a22-a12*a21), (a11*b2-a12*b1)/(a11*a22-a12*a21)]
x ⋅ a + x 2 ⋅ a 12 = b 1
Soluţiile sistemului de ecuaţii: 1 11 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.
68 MATLAB
» A=[1,2;3,4];b=[5,6;7,8];
» A1=A\B [Enter]
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
MATLAB în ingineria mecanică 69
v = v ai ⋅ a i = v bi ⋅ b i
• Deviatorul tensiunilor::
σ − σ τ xy τ xz
x m
[D σ ] = τ y x σ y − α m τ yz ;
τ zx τ zy σz − σm
[Tσ ] = [S r ] + [D σ ] ;
70 MATLAB
(
∆ 2 = σ x σ y + σ y σ z + σ z σ x − τ xy 2 + τ 2 y z + τ 2 z x )
∆ 3 = σ x σ y σ z + 2σ x y σ y z σ z x − σ x σ y z 2 − σ y σ x z 2 − σ z σ x y 2
1 1
ε x − ε m 2
γ xy
2
γ xz
[D ε ] = 1 γ y x εy − εm
1
γ yz ;
2 2
1 1
2 γ zx γ zy εz − εm
2
MATLAB în ingineria mecanică 71
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
72 MATLAB
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
» x1=x’ [Enter]
x1 =
1 4
2 5
3 6
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 7 8 9 8 9 0 1 6
» B1 = det(B)
B1 = 0
» C1 = det(C)
» 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
sa fie, cel putin teoretic, identică cu X = A\B iar, Y = B*inv(A) să fie identică cu Y
= B/A. Utilizarea operatorilor aritmetici « împărţire la stânga » şi « împărţire la
dreapta » este preferată utilizării inversei matricei, datorită timpului de calcul mai
redus, a. volumului de memorie cerută şi a unor proprietăţi de detecţie a erorilor
mai bune. Prin definiţie, inversa unei matrici pătratice A(i,i), este matriea A-1, care
satisface relaţia:( A)*(A-1)=I, unde I este matricea unitate (matricea cu elementele
de pe diagonala principală egale cu unitatea, respectiv celelalte elemente egale cu
zero). Inversa unei matrici se calculează cu funcţia MATLAB inv (), şi se apelează
cu sintaxa:
Y = inv(X)
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
»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.:
3 2 −5 4
Să se determine rangul matricei A = 3 − 1
3 − 3 .
3 5 − 13 11
3 2−5 3 −5 4 3 2 4 2 −5 4
3 −1 3 =3 3 − 3 = 3 −1 − 3 = −1 3 −3 =0
3 5 − 13 3 − 13 11 3 5 11 5 − 13 11
3 2
şi, deoarece, există minori de ordinul al doilea nenuli, de exemplu =-9≠0,
3 −1
rezultă că rangul matricei A este: rang A = 2
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 măsoară incertitudinea relativă existentă în vectorul B (de exemplu,
B
δB
dacă elementele vectorului B sunt date cu trei cifre semnificative, atunci este
B
δx
de ordinul 10-3 sau 10-4), iar reprezintă incertitudinea relativă existentă în
x
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 )
MATLAB în ingineria mecanică 79
(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
δx ≤ A -1 δA x + δx sau ≤ cond. (A )
x + δx A
» cond(X)
80 MATLAB
» 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
respectiv pentru sistemul "perturbat":
45x 1 + 23,124x 2 = 2,34
x1 + 15x 2 = 3,45
»d=condest(a)
d=
4.8071
» 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
FACTORIZAREA MATRICILOR
a 11 x 1 + a 12 x 2 + … + a 1n x n = b 1 a 11 … a 1n
a 12
a 21 x 1 + a 22 x 2 + … + a 2n x n = b 2 a 22 … a 2n
a 21
, în care A= , este
⋮ ⋮
a n1 x 1 + a n 2 x 2
+ … + a nn x n = b n a n 2 … a nn
a n1
x1 b1
x b
matricea coeficienţilor; x = 2 este vectorul necunoscutelor; B = 2 este
⋮ ⋮
x n 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.
b (k −1) , i ≤ k −1
i
(k)
b i = (k −1) a i(k,k−−11) (k −1)
bi − (k −1) b k −1 , i≥k
a k −1,k −1
a 11
a 12
triunghiulară, dacă det[a 11 ] ≠ 0, det ≠ 0, … , det[A ] ≠ 0 .
a 21
a 22
Descompunerea este unică dacă elementele matricei L sau U, de pe diagonala
principală sunt specificate astfel:
a 11 a 12 … a 1n
a 21 a 22 … a 2n
A = LU = =
⋮
a n1 a n 2 … a nn
1 0 0 0 0 u 11 u 12 u 13 … u 1n
l 21 1 0 0 0 0 u 22 u 23 … u 2n
= l 31 l 32 1 0 0 0 0 u 33 … u 3n
⋮ ⋮
l l … l 1 0 0 0 0 u
n1 n 2 n ,n −1 nn
k −1 k −1
∑
j=1
l kju j,k + u k ,k +1 = a kk
u k ,k = a k ,k − ∑l
j=1
kju jk
k −1 k −1
∑j=1
l kju j,k +1 + u k ,k +1 = a k ,k +1
u k ,k +1 = a k ,k +1 − ∑l
j=1
kj u j,k +1
⋮ ⋮
k −1 k −1
∑l
j=1
kju jn + u kn = a kn
u kn = a kn − ∑l
j=1
kju jn
86 MATLAB
1
k −1 k −1
∑ l k +1, j u jk
∑l
j=1
k + 1, j u j,k + l k +1,k u k ,k = a k +1,k l k +1,k =
u k ,k
a k +1,k −
j=1
k −1 k −1
∑l
1
k + 2 , j u j,k + l k + 2,k u k ,k = a k + 2,k l k + 2 ,k = a k + 2 ,k − ∑ l k + 2, j u jk
j=1
u k ,k
j=1
⋮ ⋮
k −1
k −1
∑l
j=1
n , j u j,k + l n ,k u k ,k = a n ,k l n ,k = 1 a n ,k −
u k ,k ∑ l n , j u jk
j=1
FACTORIZAREA CHOLESKY
S=L’*L
L=chol(S)
[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)
88 MATLAB
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.
»X=R\(R’\B)
Ex.:
Fie sistemul de ecuaţii:
9x 1 − x 2 + 2x = 1
3
−
1 x + 8 x 2 − 5 x 3 = −2
2 x − 5 x + 7 x = −1
1 2 3
»L=chol(A);
»X=L\(L’\B)
X=
0.1846
-0.6308
-0.6462
x + 2y + z + t = 1
2 x + y + 3 z + 3t = − 2
Temă:Să se rezolve sistemul: prin factorizare Choleski.
x + y + z + t = −1
2x + 7 y + 2z + 3t = 4
1 2 3
liniilor unei matrici A = 4 5
6 după următorul index: P=[2,1,3,3,2,2,],
7 8 0
respectiv permutarea coloanelor, după următoarea regulă:Q=[2,1,3,2,2]. Atunci,
schema bloc este următoarea:
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)
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)
94 MATLAB
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 U
2 − 1 3
MATLAB în ingineria mecanică 95
1 0 0 4 0 6
sunt: L = 0.25 1 0 , respectiv U = 0 − 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
» [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
96 MATLAB
»[L,U]=lu(A);
»A=[1,-2,3;4,0,6;2,-1,3];B=[1;-2;-1];
»[L,U]=lu(A);X=U\(L\B)
X=
-2
0
1
»[L,U,P]=lu(C); X=U\(L\B)
X=
-0.5000
1.5000
0.5000
FACTORIZAREA q-r
Ex.:
1 2 3
Să se determine descompunerea qr a matricei A = 4 5 6
7 8 0
MATLAB în ingineria mecanică 99
»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
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 următoarea
3x − y = 7
2x + y = 11
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=
7.0000
2.0000
-4.4000
-2.4000
a 11 − λ a 12 a 13 … a 1n x1
a 21 a 22 − λ a 23 … a 2n x 2
a 31 a 32 a 33 − λ … a 3n x 3 = 0
⋮ ⋮
a a n2 a n3 … a nn − λ x n
n1
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,
102 MATLAB
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 − 2mω 2 −k 0 x
1
− k 2k − 4mω 2 −k ⋅ x 2 = 0
0 −k 2k − 6mω 2 x 3
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:
2 − 1 0 x1 2 0 0 x 1
− 1 2 − 1 ⋅ x 2 = λ 0 4 0 ⋅ x 2
0 − 1 2 x 3 0 0 6 x 3
B. Un sistem fizic format din două corpuri solide de mase m1, respectiv
m2, legate între ele prin trei arcuri elastice elicoidale, având coeficienţii de
elasticitate k 1 , k 2 , k 3 , este descris matematic prin sistemul de ecuaţii diferenţiale
ordinare:
dx 2
m 1 21 = − k 1 x 1 + k 2 ( x 2 − x1 )
dt
2
dx 2
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ă 103
− m 1ω n2 y 1 − k 1 y 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
2 − λ − 1
P2 (λ ) ≡ det ≡ λ − 4λ + 3 = 0; λ 1 = 1, λ 2 = 3
2
− 1 2 − λ
y 11 y 12
y (1) = → λ 1 , y ( 2) = → λ 2
y 12 y 22
mω12
λ1 = = 1, ω1 = k / m
k
mω 22
λ2 = = 3, ω 2 = 3k / m
k
y 11 1 y 12 1
y (1) = = → λ 1 ; y ( 2) = = → λ 2
y 12 1 y 22 − 1
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 proprii
descriu modul de comportare al unui sistem fizic, reprezentând o serie de mărimi
ce descriu comportarea sistemului.
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
λBX
AX=λ
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:
λX
B-1AX=λ
» V=eig(A,B)
» [V,D]=eig(A,B)
Ex.:
− 2 1 0
Să se determine valorile şi vectorii proprii ai matricei A = 1 − 2 1
0 1 − 2
Cu secvenţa MATLAB :
» 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=
-3.4142 0 0
0 -2.0000 0
0 0 - 0.5858
»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
MATLAB în ingineria mecanică 107
»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
A⋅V = 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
MATLAB în ingineria mecanică 109
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=
-0.4445 0.4723 -0.0336 -0.7604
-0.3930 -0.2855 -0.8693 0.0909
-0.4116 -0.7711 0.4125 -0.2566
-0.6917 0.3176 0.2701 0.5897
S=
13.8259 0
0 7.4058
0 0
0 0
V=
-0.6126 -0.7904
-0.7904 0.6126
» [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
110 MATLAB
APLICAŢII
1:
e4 2 lg 8 7 5 ln 6
Fie: a= 4 5 ; b= ; c=2.
3 e lg 4 lg 7 3 8
Să se calculeze:a+b; a-b;a+c.
2:
π
3 21 sin 20 sin 3
5 2 3
4
Fie: m= log3 5
; n= 3
log 8
arctg3 e e 6 ln 7
6
1 − e log5 7
Să se calculeze: M=m+n
3:
1 2
4 3 5 − 35 2i 1 − 2i 7e log6 8
7
3 45
Fie: a= 3 ;b= 4 ; c=2.
5 8 82 9 0 1 log 54 6
log4π 6
sin 61 3
Să se calculeze produsele : ab; ba; ac; bc.
4:
1 ln 2 sin 5 tg6
Fie: a= log5 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= 5 .
ln 3 lg 4 8 4
9 0 1 log 43 6
Să se calculeze câtul : d=a/b.
MATLAB în ingineria mecanică 111
6:
1 2 log6 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
1 4
2 3 ln 5
e 2e 3 − 3 2i 1 − 2i 7
A = 3 lg 5 B = 7 4 e 5
ln 6 C = .
3 4e lg 6 7e 8 9 0 1 6
84 e9
9:
3 log85 9
Calculaţi inversa matricei: A = 2e 10 ln 4 .
− 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 3 − 3 2i 1 − 2i 7
A = 3 lg 5 B = 7 4 5
ln 6 C =
4e lg 6
e
3 7e 8 9 0 1 6
84 e9
112 MATLAB
12:
Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper,
respectiv, QR, următoarele sisteme de ecuaţii lineare:
3x + 2y − z = 10 x − 2y + z − t + 2u = 1
2 x − y + 3 z − 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 9x 1 − x 2 + 2x = 1
2x − 3y + z − 3t = 11
3
− x 1 + 8 x 2 − 5 x 3 = −2
5 x + 7 y + 3 z − 2t = 8 2 x − 5 x + 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
MATLAB în ingineria mecanică 113
CAPITOLUL III
» n = (0:9)';
STRUCTURI MULTIDIMENSIONALE
» 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ă 115
OPERAŢIILE ARITMETICE
CU TABLOURI DE VALORI
• pentru înmulţire- “ .* ”
• pentru împărţire – “ ./ “ sau “ .\ “
• pentru ridicare la putere – “ .^ “
116 MATLAB
ADUNAREA ŞI SCĂDEREA
TABLOURILOR DE VALORI
Ex.11:
1 2 3 − 1 8 π
Fie : a = , b= , c=10,
4 5 6 9 5 3
37 e
d= e 2 .
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
» E=a+d Enter]
MATLAB în ingineria mecanică 117
»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 = e2 .
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
118 MATLAB
» 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.
4 5 6 9 5 3
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
0.4444 2.2361 2.0000
MATLAB în ingineria mecanică 119
» e=a./c[Enter]
e=
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
» 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.
4 5 6 9 5 3
Să se calculeze:a.\b;a.\c;c.\a;c.\b.
Soluţie:
» e=a.\c [Enter]
e=
10.0000 5.0000 3.3333
2.5000 2.0000 1.6667
120 MATLAB
» f=c.\a [Enter]
f=
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
» 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.
4 5 6 9 5 3
Să se calculeze : ab; ac; ca; cb.
Rezolvare:
» e=a.^c [Enter]
e=
1 1024 59049
1048576 9765625 60466176
MATLAB în ingineria mecanică 121
» f=c.^a [Enter]
f=
10 100 1000
10000 100000 1000000
» g=c.^b [Enter]
g=
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
124 MATLAB
» 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ă 125
» 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
126 MATLAB
» char(65:75)
ans =
ABCDEFGHIJK
» char(ones(4,20)*double('#'))
ans =
####################
####################
####################
####################
Astfel, dacă :
» p=’m’;
atunci expresia:
MATLAB în ingineria mecanică 127
» 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ă 131
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ă 133
» 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ă 135
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ă 141
APLICAŢII
[1]:
e2 2e 3 ln 5 −1 8e π 2
Fie: a = 4 , b = 5 ,c=2
4 6 5 6e lg 5 9 log 4 7 5 6
3
37 e
d = e2
6
ln 3 − 8
[2]:
0,1 2π 3 − 5 −1 8 5 π 3
Fie: a = 5 , b = lg 7 log4 7 ,
4 5 6 ln 4 9 5 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.
144 MATLAB
[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ă 145
CAPITOLUL IV
-expresie_1
-expresie_2- matricele sau expresiile matriceale care se compară ;
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:
146 MATLAB
» 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
Să se compare matricele A = 3 0 5 şi B = 3
− 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
MATLAB în ingineria mecanică 147
» A<=B
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'
150 MATLAB
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ă 151
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
2
x −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
∗
se prezintă aici numai valoarea « finală » a expresiei f, valorile intermediare fiind omise,
pentru acurateţea prezentării
152 MATLAB
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 …”
n = 10;
fact = 1;
for k = 1:n
fact = k * fact;
disp( [k fact] )
end
% FINAL PROGRAM
Ti +1 = Ti − K ⋅ dt ⋅ (Ti − Tf )
K = 0.05;
154 MATLAB
30.00 13.32
35.00 12.58
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)
156 MATLAB
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 0
elseif (m(k)>8)&(m(k)<=25) -5
-1 0 -5 0 5 10 15 20 25
g(k)=(log(m(k)^2-
5^(1/7))+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ă 157
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
158 MATLAB
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ă 159
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 :
160 MATLAB
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
162 MATLAB
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ă 163
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
Să se compare elementele matricei C = 3 − 2 2 cu elementele
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 e2, iar elementele ultimei
linii sa difere prin ln8.
MATLAB în ingineria mecanică 165
[6]:
Să se actualizeze fişierul de mai jos astfel încât să se afişeze încă două
butoane la alegere :
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)')
166 MATLAB
[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ă 167
[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
168 MATLAB
[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;
170 MATLAB
[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ă 171
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
172 MATLAB
REPREZENTAREA POLINOAMELOR
»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)
MATLAB în ingineria mecanică 173
g = [1 2 -1 -2]
care în formă algebrică uzuală se scrie : g(x) = x3+2x2-x-2
Î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ă
p( x ) r( x )
polinomul- „î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)
î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.
a) Soluţia algebrică:
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];
MATLAB în ingineria mecanică 177
» f = 3*x.^4-5*x.^3+3*x-1
f=
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
178 MATLAB
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].
MATLAB în ingineria mecanică 179
Î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];
» 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)
180 MATLAB
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
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).
MATLAB în ingineria mecanică 181
În MATLAB:
» A = [1 2 -1 2]; B = [1 -1];
» D_prod = polyder(A, B)
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: .
x−1
Î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
182 MATLAB
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) = x3+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 − p j ) (
+
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 + 11x − 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
184 MATLAB
polii_fractiei =
5
4
coeficientii_catului =
1 3
x 3 − 6x 2 + 11x − 6
=
24
+
(− 6) + (x + 3)
x − 9x + 20
2 x−5 x−4
MATLAB în ingineria mecanică 185
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
186 MATLAB
»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ă 187
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
188 MATLAB
»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
1
b 2
d(f , F ) = [f (x ) − F (x; a )]2 ⋅ dx
∫
a
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= ∑ [yi − F(xi ;a)]2
i=1
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ă 193
n
Intr-un context mai larg, funcţionala S = ∑ [yi − F(xi ;a)]2 reprezintă
i=1
aşa-numita funcţie de merit a procesului de ajustare. Pentru o apreciere mai
nuanţată a gradului în care funcţia model aproximează datele măsurate, în
practică se utilizează funcţii de merit mai elaborate. Oricum, deoarece în mod
conventional funcţia de merit este construită astfel încât valori mici să
corespunda unor abateri reduse ale modelului faţă de funcţia tabelată, procesul
de ajustare a parametrilor de model este, în esenţă., un proces de minimizare
multidimensionă. Unul dintre cele mai utilizate criterii de performanţă este cel
furnizat de funcţia de merit "hi-patrat":
n
χ =
2
∑ [y − F(xi ;a)]2
1
2 i
i=1 σi
n
Spre deosebire de funcţionala S = ∑ [yi − F(xi ;a)]2 , funcţia de merit
i =1
"hi-patrat", atribuie ponderi diferite punctelor de tabelare individuale, şi
anume depinzând de inversul deviaţiei standard σ i asociate. În acest fel creşte
ponderea relativă a punctelor afectate de erori mici, funcţia model fiind forţată în
procesul ajustării parametrilor să minimizeze cu precădere distanţa faţă de
aceste puncte în detrimentul distanţei faţă de punctele mai imprecise (cu σ i
mari). În cazul în care deviaţiile σ i sunt egale sau nu sunt cunoscute, formalismul
se simplifică şi revine la regresia cu ajutorul funcţiei de merit S. Extremum- ul
n
funcţionalei χ =
2
∑
1
[y − F(xi ;a)]2
2 i în raport cu parametrii aj este
i=1 σi
caracterizat prin relaţiile:
∂χ 2
= 0, j=1, 2, …, m
∂a j
sau
∂F(xi ;a)
n
∑
1
[y − F(xi ;a)] ⋅
2 i
= 0, j=1, 2, …, m
σ
i=1 i
∂a j
194 MATLAB
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 .
Deoarece erorile de măsurare ale datelor induc imprecizii în
determinarea parametrilor de model, informaţia furnizată de procesul de
ajustare nu este completă fără estimarea acestor erori. Admiţând că datele sunt
independente, considerente de propagare a erorilor arată. că varianţa (imprecizia
probabilă patratică.) σ a2 asociată parametrului aj rezultă prin cumularea
j
2
n
∂a j
σ a2
j
= ∑
=
i 1
σ i2
∂ y
i
n
∂S
= −2 x i (y i − (p 1 ⋅ x i + p 2 )) = 0
∑
∂p 1 i =1
n
∂S
= −2 (y i − (p 1 ⋅ x i + p 2 )) = 0
∑
∂p 2 i =1
196 MATLAB
n n n
n⋅ ∑x i ⋅ yi − ∑ x ⋅∑ y
i i
1
n n
p1 = i =1
n
i =1
i =1
2
respectiv p 2 = ∑
n i =1
y i − p1 ∑ xi .
n
i =1
n⋅ ∑x i2 −
∑
xi
i =1 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
MATLAB în ingineria mecanică 197
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 ,
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= ∑ w (y
i =1
i i − ŷ i )
2
198 MATLAB
(
b = βˆ = X T ⋅ W ⋅ X )−1
⋅ XT ⋅ W ⋅ y ,
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
MATLAB în ingineria mecanică 199
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= ,
K⋅s
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 =
( )
1 − (u i )2 , u i < 1
2
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, β )
INTERPOLAREA DATELOR,
FOLOSIND MATLAB
Interpolarea, aşa cum s-a afirmat şi anterior, în cadrul acestui capitol, este
un proces prin care se realizează estimarea numerică a valorilor intermediare prin
care face conexiunea între punctele corespunzătoare datelor cunoscute. Interpolarea
are aplicaţii deosebit de importante în procesarea imaginilor şi a semnalelor
(achiziţiei de date). Se disting :metode de interpolare lineară, bi-dimensională,
Spline, Fourier, bi-lineară, bi-armonică, bi-cubică, multi-dimensională, prin
triangularizare.
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
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
∑ pi ⋅ xn 1 i
=
+ −
forma: y = i 1
n
, în care gradul numărătorului, 0 ≤ n ≤ 5 ,
x m
+ ∑=
i 1
qi ⋅ x m−i
204 MATLAB
7. Sume de sinus
n
Modelul matematic este dat de relaţia: y = ∑=
i 1
a i ⋅ sin(b i ⋅ x + c i ) , în care
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
INTERPOLAREA LINEARĂ
yi = interp1(x,Y,xi)
yi = interp1(Y,xi)
yi = interp1(x,Y,xi,metoda)
yi = interp1(x,Y,xi,metoda,extrapolata)
'
n
e
a
r
e
s
t
'
–
i
n
MATLAB în ingineria mecanică 207
Ex. :
Să se genereze o curbă sinusoidală „primară”, apoi să se interpoleze peste un
număr mai mare de abscise:
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:
»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.
210 MATLAB
» [X,Y] = meshgrid(-3:.25:3);
» Z = peaks(X,Y);
» [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)
MATLAB în ingineria mecanică 211
» [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;
- xi este vector ce conţine noua abscisă
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)
MATLAB în ingineria mecanică 213
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
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)
214 MATLAB
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):
»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’)
Ex.:
Să se determine prin interpolare lineară, spline şi cubică, şi apoi sa se
reprezinte grafic punctele
corespunzătoare valorilor
-10,-9.75,-4.25,4.15,0.1,6.35, dacă
x=-10:0.5:10, iar
y=(log(abs(x+12))+2)./(exp(x)+12).
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Ă
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
»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Ă
» a=X\y
a=
1.3974
-0.8988
0.4097
Modelul matematic de aproximare se formează cu aceste valori
determinate prin rezolvarea sistemului de ecuaţii:
Y = 1,3974 − 0,8988 ⋅ e − t + 0,4097 ⋅ t ⋅ e − t . 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Ă
» 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))
MATLAB în ingineria mecanică 219
eroarea_maxima =
2.5309
» 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)
220 MATLAB
Descriere:
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
MATLAB în ingineria mecanică 221
Valoare aproximată
X2aproximat=4,5
Y2aproximat=385.9449
Valoare
măsurată
x=2
y=43,1
EROAREA APROXIMĂRII
n n n
∑ (x i − x )2 , sau σ 2 = ∑ (x i − x )2 , unde
x
∑
1 1
σ2 = ⋅ ⋅ x= i
.
n i =1
n−1 i =1 =
i 1
n
− ( x − µ )2
1 2σ 2
Φ( x, µ , σ ) = ⋅e
σ ⋅ 2π
x
2 2
erf ( x ) =
π ∫0
⋅ e − t ⋅ dt
»p = polyfit(x,y,6)
»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
224 MATLAB
» x = (0: 0.1:7)';
» y = erf(x);
» polytool(x,y,6)
obţinându-se imaginea:
CAPITOLUL VII
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,
180;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 Ora Pct. A Pct. B Pct. C
7 13 11 înregistrării
14 17 20 01 h 00 min 11 11 9
11 13 9 02 h 00 min 7 13 11
43 51 69 03 h 00 min 14 17 20
38 46 76 04 h 00 min 11 13 9
61 132 186 05 h 00 min 43 51 69
75 135 180 06 h 00 min 38 46 76
38 88 115 07 h 00 min 61 132 186
28 36 55 08 h 00 min 75 135 180
12 12 14
09 h 00 min 38 88 115
18 27 30
10 h 00 min 28 36 55
18 19 29
11 h 00 min 12 12 14
17 15 18
19 36 48 12 h 00 min 18 27 30
32 47 10 13 h 00 min 18 19 29
42 65 92 14 h 00 min 17 15 18
57 66 151 15 h 00 min 19 36 48
44 55 90 16 h 00 min 32 47 10
114 145 257 17 h 00 min 42 65 92
35 58 68 18 h 00 min 57 66 151
11 12 15 19 h 00 min 44 55 90
13 9 15 20 h 00 min 114 145 257
10 9 7 21 h 00 min 35 58 68
22 h 00 min 11 12 15
23 h 00 min 13 9 15
24 h 00 min 10 9 7
228 MATLAB
» 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 =
[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,179,205,2
26.5,248.7]' raportat la anii de
referinţă cuprinşi în vectorul
anii_de_referinta=[1790,1800
,1810,1820,1830,1840,1850,18
60,1870,1880,1890,1900,1910,
1920,1930,1940,1950,1960,19
70,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 b⋅x ), şi s-au obţinut
reprezentările grafice (ale
rezultatelor ajustării, respectiv
ale reziduurilor), din figură:
Parametrii
numerici ai ajustării se pot
seta din interfaţa Curve
Fitting Tool ->Fitting -
>Results şi Table of Fits-
>Table options:
MATLAB în ingineria mecanică 237
=
i 1
care ω i reprezintă mărimea reziduului (determinate, şi afişate, în MATLAB, cu
opţiunea Residuals din meniul View):
238 MATLAB
∑ ω i (ŷ i − y i )2
=
-SST): R − square = i 1
n
. R-square poate lua valori cuprinse între 0
∑ ω i (y i − y i ) 2
=
i 1
şi 1, o valoare mai aproape de 1 are semnificaţia unei bune aproximări. De
exemplu, o valoare R-square=0,99871 (în cazul ajustării polinomiale de gradul II)
arată că există o variaţie de până la 99,87 % faţă de valoarea medie calculată.
Parametrul DFE (Degrees of Freedom Adjusted R-Square) foloseşte parametrul
R-square, definit anterior, şi ajustează această valoare pe baza gradelor de
libertate ale reziduurilor. Gradele de libertate ale reziduurilor se reprezintă
diferenţa dintre numărul valorilor de raspuns şi numărul coeficienţilor de
aproximare: v=n-m. În această relaţie, v reprezintă numărul datelor independente
din totalul de n puncte necesare calculării sumei de pătrate, iar m este numărul de
coeficienţi ai ecuaţiei de aproximare. Modelul matematic, se consideră ca fiind un
bun indicator statistic al calităţii aproximării când sunt adăugaţi coeficienţi
suplimentari în ecuaţia aproximării.
Parametrul RMSE (Root Mean Squared Error) este cunoscut ca eroarea
standard a aproximării şi ca eroarea standard a regresiilor. Se determină cu
n
SSE
∑ ω (y
i =1
i i − ŷ i )2
relaţia: RMSE = = . O valoare apropiată de 0 înseamnă
v v
o 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ă
MATLAB în ingineria mecanică 239
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:
242 MATLAB
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ă 245
BIBLIOGRAFIE
[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 – 2nd. 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.
250 MATLAB
ANEXĂ
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;
MATLAB în ingineria mecanică 253
MESAJ5(1)={'S F A R S I T P R O G R A M'};
% se construiesc controalele:h,j,l
%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)
MATLAB în ingineria mecanică 255
subplot(2,3,6);plot(k/1000000,'k');
%set(title('CONSISTENTA [N/mm^2]'),'color','k')
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')
256 MATLAB
'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ă 257
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ă 259
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);
260 MATLAB
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ă 261
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;
262 MATLAB
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ă 263
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')
264 MATLAB
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ă 265
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');
266 MATLAB
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)')
268 MATLAB
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ă 269
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)')
270 MATLAB
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ă 271
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');
272 MATLAB
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ă 273
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');
274 MATLAB
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ă 275
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 !!')
276 MATLAB
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ă 277
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"');
278 MATLAB
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ă 279
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');
280 MATLAB
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])
282 MATLAB
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ă 283
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');
284 MATLAB
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ă 285
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');
286 MATLAB
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ă 287
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)')
288 MATLAB
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ă 289
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')
290 MATLAB
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ă 291
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
292 MATLAB
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(' ~~~~~~~~~~ SFARSIT PROGRAM ~~~~~~~~ ')
disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
')
%Sfarsit program