Sunteți pe pagina 1din 290

CAPITOLUL I

INTRODUCERE ÎN MATLAB
MATLAB este un mediu de programare şi calcul tehnic ce însumează
calculul, vizualizarea şi programarea într-un mediu compact, unde problemele şi
soluţiile acestora sunt exprimate folosind notaţii matematice familiare. Utilizarea
acestui mediu este frecventă în domeniile:
 Matematică şi calcule matematice;
 Dezvoltarea algoritmilor de calcul şi programare;
 Modelare, simulare şi prototipare;
 Analiza, studiul şi vizualizarea datelor;
 Diagrame şi reprezentări grafice în inginerie;
 Dezvoltarea soft-urilor aplicative folosind metode de creare a
interfeţelor grafice interactive(GUI).
MATLAB este un sistem interactiv care foloseşte, ca element definitoriu,
matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix şi
LABoratory. MATLAB oferă facilităţi multiple prin familiile de aplicaţii specifice
numite toolbox-uri. Toolbox-urile sunt colecţii de funcţii MATLAB (fişiere “.m”)
care extind utilizarea mediului MATLAB, la rezolvarea unor clase de probleme
specifice. Toolbox-urile sunt utilizate intensiv în domeniile: procesarea sunetelor,
sisteme de control, reţele neuronale, simulare. Mediul MATLAB se compune din
cinci părţi principale:

• Mediul de dezvoltare-un set de facilităţi şi instrumente matematice


(interfeţe grafice) cu ajutorul cărora se pot manevra fişierele şi funcţiile
MATLAB. Aceste instrumente includ: desktop-ul MATLAB, Command
Window (Fereastra de Comandă), un sistem de urmărire a comenzilor
precum şi browser-e pentru afişarea instrucţiunilor de Help (ajutor),
spaţiului de lucru;
• Biblioteca de funcţii MATLAB-un set de funcţii şi algoritmi de calcul
(pornind de la cele mai simple, pentru calculul funcţiilor trigonometrice, de
exemplu, şi până la cele mai complicate, cum ar fi cele pentru calculul
transformatei Fourier);
• Limbajul MATLAB-un limbaj de nivel înalt, bazat pe manevrarea
matricilor, cu control asupra declaraţiilor, funcţiilor, structurilor de date,
intrărilor/ieşirilor şi cu facilităţi de programare orientată pe obiecte.
• Manevrarea graficelor - acesta reprezintă partea grafică a sistemului
MATLAB. Acest sistem include comenzi pentru vizualizarea datelor bi- şi
tridimensionale, de procesare a imaginilor, animaţiilor şi reprezentărilor
grafice în general;
4 MATLAB

• Interfaţa aplicativă MATLAB (API)- este o bibliotecă de instrumente şi


funcţii specifice, care permite dezvoltarea programelor în limbaj C şi
Fortran, limbaje care interacţionează cu MATLAB. Această bibliotecă
include facilităţi pentru utilizarea şi apelarea unor rutine şi subrutine pentru
MATLAB (dynamic linking), folosind MATLAB ca un mediu de calcul cât
şi pentru citirea / scrierea fişierelor “.mat”.

NOŢIUNI ELEMENTARE

Programul se lansează, în execuţie, din mediul Windows, prin selecţia


pictogramei MATLAB (dublu-clic asupra icon-ului Matlab), sau, din afara
mediului Windows (de exemplu, DOS), direct cu o comandă de forma:
win c:\Matlab\bin\matlab

care, accesează fişierul executabil “matlab.exe” ce se găseşte în calea


“C:\MATLAB\BIN” din unitatea c:\ ( presupunând ca c:\ reprezintă unitatea de pe
hard-ul sistemului de calcul, unde se găseşte instalat MATLAB).
Se vor prezenta, în continuare, noţiuni generale ale mediului de programare
MATLAB 5.2, cu referiri la versiunea MATLAB 6.0.0.88 Release 12.

FERESTRELE DE LUCRU

MATLAB lucrează cu două tipuri de ferestre: o fereastră de comenzi


(Command Window) şi o fereastră pentru reprezentări grafice (Figure). Ambele
tipuri de ferestre dispun de meniuri si submeniuri independente, cu observaţia ca,
în fereastra Figure, se reprezintă grafic comanda din Command Window.

FEREASTRA DE COMENZI (Command Window)

Fereastra de comenzi este prezentată în imaginea alăturată. Meniurile din


bara superioară sunt
accesibile prin tastarea
simultană a tastei [Alt]
şi a literei subliniate
(de exemplu pentru
accesarea meniului
File se tastează
concomitent [Alt]+F-
MATLAB în ingineria mecanică 5

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

• Print Setup… şi Print…- Comenzile de tipărire a documentului; Print şi


Print Setup, apar în acelaşi meniu de gestionare a fişierelor. Comanda
“Print…” permite tipărirea documentului, iar ”Print Setup…” configurează
pagina, marginile, tipul de imprimantă etc.
• Exit MATLAB- comanda al cărei efect este părăsirea aplicaţiei. Comanda
de părăsire a aplicaţiei (echivalentă opţiunii Exit MATLAB din meniul File)
poate fi validată şi prin apăsarea simultană a tastelor [Ctrl]+ Q.

EDITAREA PROGRAMELOR

Selectând comanda Edit din meniul principal al Command Window, apare


submeniul prezentat în figura alăturată.
Modul de lucru în acest meniu
este intuitiv, identic meniului Edit
Windows sau oricărui editor de texte care
lucrează sub Windows: după selectarea
unui text, din mediul MATLAB sau din
alt document, acesta se poate prelucra
folosind opţiunile Cut, Copy şi Paste.
Ştergerea sesiunii de lucru se realizeză cu
comanda Clear Session (efectul acestei
comenzi constituindu-se în “curăţirea”
completă a spaţiului de lucru).

ALEGEREA OPŢIUNILOR

Selectând comanda Options din bara de


meniuri, se afişează caseta de submeniuri
prezentată în figura alăturată. Submeniurile sunt:
• Numeric Format este un submeniu care
permite selectarea unuia dintre formatele
de afişare: Short (5 cifre) / Long (15
cifre) / Hex (hexazecimal) / Bank / Plus
(+, - şi blanc) / Short e (5 cifre +
exponenţiala) / Long e (15 cifre +
exponenţiala) / Rational (fracţii), precum
şi a distanţelor dintre rândurile succesive: Loose (distanţat)/ Compact.
MATLAB în ingineria mecanică 7

• Turn Echo este un comutator (on/off) care permite afişarea liniilor


programului MATLAB, în timpul rulării acestuia.
• Enable Background Process este un comutator (on/off) care permite
rularea programelor MATLAB, în background, în timp ce calculatorul poate
efectua şi alte operaţii.
• Command Window Font…- deschide o fereastră de dialog pentru
selectarea fonturilor (tip, mărime şi culoare) care se vor utiliza în fereastra de
comandă curentă a sesiunii de lucru MATLAB.
• Uicontrols Font - permite setarea fonturilor (tip, mărime şi culoare) pentru
interfeţe grafice, butoane etc.
• Editor Preference… - selectează editorul de texte cu care se vor scrie
programele MATLAB, implicit este NOTEPAD.EXE.

SELECTAREA FERESTRELOR CURENTE DE LUCRU

Comanda Windows, din bara de meniuri, afişează submeniul prezentat în


figura alăturată.
Trecerea dintr-o
fereastră grafică, sau de
comenzi, într-o altă
fereastră se realizează prin
selectarea comenzii
Window din meniul
principal, urmată de
selectarea uneia dintre
ferestrele grafice deschise
(ex: Figure No. 1, Figure
No. 2,…) sau a celei de
comenzi (MATLAB
Command Windows).

DOCUMENTAŢIA DE AJUTOR

Comanda Help din meniul principal afişează submeniul prezentat în figura


alăturată. Submeniurile acestui meniu sunt:
• Table of Contents. Afişează o listă senzitivă cu toţi subdirectorii din corpul
principal al MATLAB. La plasarea săgeţii mouse-ului pe unul dintre
subdirectorii listaţi, acesta se transformă într-o “mână” care permite, prin
selectare, afişarea help-ului grupei de funcţii respective.
8 MATLAB

Index furnizează o listă cu


subdirectorii principali ai
MATLAB-ului. Selectarea
subdirectorului dorit afişează
conţinutul acestuia şi apoi
informaţii despre un anumit fişier
sau funcţie.
• Help Selected afişează
documentaţia Help pentru
funcţia MATLAB ce a fost selectată cu mouse-ul.
• About…-afişează versiunea, licenţa etc.

FEREASTRA DE REPREZENTĂRI GRAFICE ÎN MATLAB (Figure)

Fereastra grafică este o formă elevată de reprezentare a graficelor. De


menţionat că pot exista mai multe ferestre grafice deschise în acelaşi timp, una
fiind curentă, dar o singură fereastră de comenzi.

GESTIONAREA FERESTRELOR GRAFICE

Din meniul File- submeniul


New- opţiunea Figure se deschide o
fereastră, cu titlul Figure 1, având o
configuraţie apropiată de cea a
Command Window, cu bară de meniuri
: File, Edit, Windows, Help, ale căror
opţiuni sunt similare celor ale ferestrei
de comenzi.

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

unei culori pentru fundalul (background) figurii (inversarea între alb şi


negru; implicit este negru);
• Clear Figure şterge figura curentă, fără să închidă fereastra grafică.

TIPURI DE DATE UTILIZATE ÎN MATLAB

DATE EXEMPLU DESCRIERE


single 3*10^38 Reţele numerice cu simplă precizie. Simpla precizie necesită
spaţiu de stocare mai mic decât dubla precizie. Acest tip de
date nu poate fi utilizat în operaţii matematice

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

FORMATUL NUMERELOR. OPERATORI ŞI EXPRESII ARITMETICE

MATLAB utilizează, ca orice limbaj de programare, expresii matematice,


dar, spre deosebire de majoritatea limbajelor de programare, aceste expresii, în
MATLAB, sunt matrici. Expresiile MATLAB sunt de următoarele tipuri:
 Variabile
 Numere
 Operatori
 Funcţii
10 MATLAB

VARIABILE

Pentru variabile, MATLAB nu solicită un, anume, tip de declarare a


acestora, nici o configurare dimensională. În MATLAB, variabilele se creează
automat prin declararea numelui acesteia, fiindu-i alocat un spaţiu de stocare
corespunzător. De exemplu, prin atribuirea:
»fun=123;
variabila cu numele fun are “valoarea 123”. Această “valoare” va fi utilizată de
MATLAB, pe tot parcursul sesiunii de lucru, dacă aceasta nu este schimbată printr-
o nouă atribuire. Dacă, o nouă variabilă, cu acelaşi nume, este declarată, în linia de
comandă, sau într-un fişier-program, atunci “vechea” valoare este înlocuită cu noua
valoare. Variabilele sunt matrici. De exemplu, fun, reprezintă o matrice cu o linie
şi o coloană. Numele variabilei trebuie sa înceapă, obligatoriu cu o literă, urmată de
oricâte litere sau numere, dar MATLAB reţine doar primele 31 de caractere.
Întrucât, MATLAB este case sensitive, acesta face distincţie între literele
majuscule şi literele minuscule. De exemplu, variabila fun, este diferită de oricare
dintre variabilele Fun, fUn, fuN, FUn, FuN, fUN sau FUN.
Expresiile introduse de la tastatură, de către utilizator, sunt interpretate şi
evaluate secvenţial, la accesarea tastei [Enter]. Expresiile pot fi: şiruri de caractere
(care reprezintă, de cele mai multe ori, numele unui fişier script sau al unui fişier
funcţie), instrucţiuni, funcţii dedicate (specifice limbajului MATLAB).
Instrucţiunile MATLAB sunt, de cele mai multe ori, de forma generală:
» variabila=expresie [Enter]
Atenţie: simbolul “ »”, nu trebuie introdus de către utilizator,
simbolul este afisat automat de MATLAB, în Command Window,
acesta fiind prompterul din fereastra de lucru, Workspace.
În forma generală, a instrucţiunii:
 “variabila” - reprezintă numele expresiei, si poate fi o înşiruire de
caractere alfa-numerice, exceptând caracterele speciale (^,&,*,(,),+,/
etc.) cu condiţia ca primul caracter sa nu fie o cifră;
 “ = “ – reprezintă semnul de atribuire (“egalitatea” dintre două
expresii se reprezintă, în MATLAB, cu semnul egal dublu : “ = = “);
 “ expresie “ – reprezintă instrucţiunea propriu- zisă, adică aceea
care urmează a fi evaluată, după accesarea tastei [Enter]. Valoarea “
expresiei “ va fi atribuită automat “variabilei “, aceasta poate fi
folosită în expresii şi funcţii, fiind memorată de MATLAB.
De asemenea, instrucţiunile pot avea şi următoarea formă, simplificată:
» expresie [Enter]
MATLAB în ingineria mecanică 11

ceea ce permite execuţia imediată a expresiei, la accesarea tastei [Enter],


MATLAB atribuind, automat, numele “ans “ valorii acestei “expresii “, ca în
exemplul următor:

» 1/4 [Enter]

returnează rezultatul:

» ans = 0.2500

Atenţie MATLAB recunoaşte sistemul britanic de scriere a numerelor (


fracţiile zecimale se exprimă folosind ca separator caracterul punct “ . “ şi
nu caracterul virgulă “,”, ca în sistemul european, continental) !
Expresiile sunt compuse din operatori sau caractere speciale, din funcţii şi
cifre, respectiv expresii logice. Orice instrucţiune, scrisă în câmpul de lucru, este în
mod normal încheiată cu accesarea tastei [Enter]. Dacă ultimul caracter, al
instrucţiunii, este caracterul punct-virgulă “ ; “, atunci instrucţiunea este executată,
valoarea acesteia este stocată în memoria MATLAB, dar afişarea rezultatului este
suprimată (excepţie cazul în care instrucţiunea generează o eroare). Utilizarea
acestui caracter la sfârşitul unei instrucţiuni în fişiere- “ .m “ este necesară în
situaţiile în care nu se doreşte afişarea datelor intermediare. De exemplu, matricea
1 2 3
 
A =  4 5 6 , se introduce de la tastatură folosind următoarea convenţie de
7 8 9
scriere:
» A=[1 2 3; 4 5 6; 7 8 9]

Accesarea tastei [Enter], va avea ca rezultat afişarea matricei A:

A=
1 2 3
4 5 6
7 8 9

Dacă, aceeaşi matrice se introduce, folosind caracterul punct şi virgulă “ ; “,


rezultatul nu va fi afişat. Tastarea numelui unei variabile urmată de “Enter”
afişează valoarea acesteia, dacă aceasta a fost, în prealabil, executată sau introdusă
de la tastatură. De exemplu, daca matricea A a fost introdusă in spaţiul de lucru
MATLAB, şi este dorită afişarea ei, pentru aceasta este nevoie doar de introducerea
numelui acesteia (adică A):
12 MATLAB

»A [Enter]
»A=
1 2 3
4 5 6
7 8 9

Dacă expresia, ce urmează a fi evaluată, este supra-dimensionată, şi nu


încape pe o singură linie, se utilizează semnul “…” (trei puncte), urmat de
“[Enter]”, pentru a preciza că instrucţiunea continuă pe linia următoare. Astfel
instrucţiunea:

» S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+…
19+20;

evaluează suma celor 20 de numere şi valoarea acesteia este atribuită variabilei S.


Spaţiile dintre semnele “=”, “+”, “-“ şi numere sunt opţionale, dar caracterul “…”,
este obligatoriu a fi introdus, întotdeauna, după un operator, după o virgulă sau
după o paranteză, altfel se afişează un mesaj de eroare. De exemplu, dacă într-o
instrucţiune simplă, caracterul “…” (“ trei puncte”) se introduce, nu imediat după
operatori, caractere separatoare, paranteze (ca mai jos):

» S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18…

atunci se afişează un mesaj de eroare :

??? 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.

VARIABILE SPECIALE ŞI CONSTANTE

ans - ultimul răspuns


eps - precizia relativă, în virgulă mobilă
realmax - cel mai mare număr pozitiv, în virgulă mobilă
realmin - cel mai mic număr pozitiv, în virgulă mobilă
pi - 3.1415926535897....
i, j - unitatea imaginară ( − 1 )
inf - infinit
NaN - Not-a-Number (nu este număr)
MATLAB în ingineria mecanică 13

isnan - valoarea de adevăr pentru NaN


isinf - valoarea de adevăr pentru infinit
isfinite - valoarea de adevăr pentru valori finite
why - răspuns succint

NUMERE

Formatul numerelor utilizabile în MATLAB este cel convenţional cu punct


6
zecimal (scrierea britanică). Astfel, fracţia zecimală = 0,1714 , va fi recunos-
35
cută ca atare, în expresiile MATLAB, dacă aceasta este scrisă:

» 0.1714

Formatul numerelor se declară în linia de comandă, sau din meniul


File→Preferences→Command Window→Numeric format. Declararea
formatului numerelor în linia de comandă, din fereastra de lucru, se realizează
folosind comanda format urmată de tipul formatului numerelor (conform
tabelului):

FORMATUL COMANDA DESCRIEREA FORMATULUI


NUMERELOR
short »format short -formatul scurt cu 5 cifre semnificative, cu aproximare la
ultima cifră zecimală
short e »format short e -formatul scurt în 5 cifre semnificative, aproximat prin
adaos sau lipsă
short g »format short g -formatul scurt cu 5 cifre semnificative, cu cea mai bună
aproximare
long »format long -formatul lung cu 15 cifre semnificative
long e »format long e -formatul lung cu 15 cifre semnificative aproximat prin
adaos sau lipsă
long g »format long g -formatul lung cu 15 cifre semnificative, cu cea mai bună
aproximare
bank »format bank -formatul cu două cifre zecimale semnificative, aproximat
prin adaos, sau prin lipsă
rat »format rat -formatul raţional (raport)
+ »format + -afişează semnul numărului
hex »format hex -formatul hexazecimal

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

apoi, se introduc instrucţiunile pentru schimbarea afişării numerelor (Atenţie!


După fiecare instrucţiune de schimbare a formatului, se introduce, în linia de
comandă, fnumele variabilei care se doreşte a fi afişată, în formatul respectiv):

» 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

O mare atenţie trebuie acordată scrierii fracţiilor zecimale. Dacă aceeaşi


fracţie zecimală este scrisă în linia de comandă cu caracterul virgulă (,), atunci se
va afişa un rezultat dublu. De exemplu, dacă se introduce numarul 0,1714, şi se
doreşte afişarea acestuia în format scurt, se vor folosi următoarele instrucţiuni:

» 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

De observat că sunt afişate două variabile, cu acelaşi nume, ans, dar cu


valori diferite. În acest caz MATLAB va utiliza în evaluări, ulterioare acestei
secvenţe, ultima valoare a variabilei ans (adică 1714).
Numerele complexe, scrise în forma algebrică, sunt acceptate de
MATLAB, dacă se foloseşte simbolul i sau j, pentru valoarea − 1 . Astfel,
2
numerele complexe: a = 2i , b = 2 j , c = 3 + i 7 , d = 3 + i , e = 3 + i 2 , se pot
3
introduce, de la tastatură, astfel:

»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

Dacă numerele complexe necesită folosirea funcţiilor speciale (de exemplu


pentru calculul rădăcinii pătrate a numărului x, se foloseşte, uneori, funcţia
specifică MATLAB: x =sqrt(x), în timp ce, pentru calculul radicalului de ordinul
trei se poate folosi calculul cu puteri raţionale: 3 3 =3^(1/3)) sau a parantezelor,
pentru scrierea acestora, atunci este necesară folosirea operatorului aritmetic de
înmulţire (*), pentru evidenţierea părţii imaginare a numărului complex, în caz
contrar, va fi afişat un mesaj de eroare.
De exemplu, numerele c = 3 + i 7 , e = 3 + i 2 , f = 1 + ( 2 + 3 )i scrise
fără operatorul “*”, afişează următoarele mesaje de eroare:

» 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.

Numărul − 3 + − 2 este un număr complex, pentru care MATLAB


afişează valoarea explicită: -3.0000 + 1.4142i
Numerele utilizate în MATLAB trebuie sa fie cuprinse între 10 −308 şi 10 308 .

OPERATORI ARITMETICI

MATLAB utilizează următorii operatori aritmetici:


+ adunarea
- scăderea
* înmulţirea
/ împărţirea la dreapta
\ împărţirea la stânga
^ ridicarea la putere
‘ transpunerea
() specificarea ordinii evaluării expresiilor
Există două simboluri pentru împărţire, utilizate în mod special pentru
operaţiile cu matrici. Pentru expresiile scalare 1/4 şi 4\1 se obţine acelaşi rezultat
(0.25). Într-o expresie, parantezele sunt utilizate pentru a preciza ordinea executării
operaţiilor.

FUNCŢII

În MATLAB sunt predefinite funcţiile matematice elementare standard. O


listă completă a funcţiilor matematice elementare se afişează folosind comanda
help elfun, help specfun, respectiv help elmat, în linia de comandă. Acestea sunt:

Funcţii trigonometrice

sin - sinus
sinh - sinus hiperbolic
asin - inversa sinusului (arcsin)
asinh - inversa sinusului hiperbolic
cos - cosinus
cosh - cosinus hiperbolic
18 MATLAB

acos - inversa cosinusului


acosh - inversa cosinusului hiperbolic
tan - tangenta
tanh - tangenta hiperbolică
atan - arctangenta
atan2 - arctangenta în cadranul patru
atanh - arctangenta hiperbolică
sec - secanta
sech - secanta hiperbolică
asec -arcsecanta
asech - arcsecanta hiperbolică
csc - cosecanta
csch - cosecanta hiperbolică
acsc - arccosecanta
acsch - arccosecanta hiperbolică
cot - cotangenta
coth - cotangenta hiperbolică
acot - arccotangentă
acoth - arccotangenta hiperbolică

Funcţii exponenţiale

exp - exponenţiala simplă ( e x )


log - logaritmul natural ( ln x )
log10 - logaritmul în baza zece ( lg x )
log2 - logaritmul în baza doi ( log 2 x )
pow2 - puterile lui 2 ( 2 x )
sqrt - radical de ordin 2 ( x )
nextpow2 - puterea următoare a lui 2 ( 2 p ≥ abs( N ) )

Funcţii complexe

abs - valoarea absolută ( x )


angle - unghiul de fază ( z = R ⋅ e θi )
complex - creează numărul complex din partea reală şi imaginară, date
conj - conjugatul numărului complex
imag - partea imaginară a numărului complex
real - partea reală a numărului complex
MATLAB în ingineria mecanică 19

unwrap - corectează unghiul de fază


isreal - valoarea de adevăr

Aproximări şi resturi

fix - aproximare prin lipsă


floor - aproximare spre cel mai mic întreg
ceil - aproximare spre întregul mai mare sau egal
round - aproximare spre cel mai apropiat întreg
mod - rest modulo
rem - restul împărţirii
sign - signum

Funcţii matematice speciale

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
φ

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

Funcţii specifice teoriei numerelor

factor - descompunerea în factori primi


isprime - valoarea de adevăr, pentru numere prime
primes - generează lista numerelor prime, mai mici sau egale cu nr. dat
gcd - cel mai mare divizor comun
lcm - cel mai mic multiplu comun
n 1
rat - descompunere raţională ( = d 1 + )
d 1
d2 +
 1 
 d 3 + … + 
 d k 
rats - aproximarea raţională cu afişarea rezultatului în format raţional
perms - afişează toate permutările posibile
n!
nchoosek - combinări de n luate câte k C kn =
(n − k )!⋅n!
factorial - factorial (n!)
MATLAB în ingineria mecanică 21

Funcţii specifice operaţiunilor cu matrici


Matrici elementare

zeros - matricea zerourilor


ones - matricea unitară
eye - matricea unitate
repmat - repetarea matricei originale
rand - matrici cu elemente aleatorii uniform distribuite
randn - numere normal distribuite
linspace - creează un vector linie spaţiat linear egal
logspace - creează un vector linie egal spaţiat logaritmic
freqspace - spaţierea frecvenţei
meshgrid - transformă vectorii liniari în matrici bi-dimensionale
: - spaţierea regulată

Caracteristici elementare ale matricilor

size - dimensiunea matricei


length - lungimea vectorului
ndims - numărul de dimensiuni ale structurii
disp - afişează o matrice sau un text
isempty - valoarea de adevăr pentru matricea “goală”
isequal - valoarea de adevăr pentru matrici egale
isnumeric - valoarea de adevăr pentru matrici numerice
islogical - valoarea de adevăr pentru matrici logice
logical - converteşte valori numerice în “valori” logice

Operaţiuni cu matrici

reshape - schimbă dimensiunea matricei


diag - matrici diagonale şi diagonala matricilor
blkdiag - creează o matrice diagonală cu elementele date
tril - extrage matricea diagonală inferioară
triu - extrage matricea diagonală superioară
fliplr - inversează ordinea coloanelor, de la stânga la dreapta
flipud - inversează liniile
flipdim - inversează liniile sau coloanele după dimensiunea cerută
rot90 - roteşte matricea cu multiplu de 90o
find - afişează indicele poziţiei elementelor diferite de zero
end - ultimul index valabil
sub2ind - transformă indicii multipli în indici singulari
22 MATLAB

Matrici speciale

compan - matricea companion


gallery - testarea tipului matricei
hadamard - matricea Hadamard
hankel - matricea Hankel
hilb - matricea Hilbert
invhilb - matricea inversă Hilbert
magic - matricea magică pătratică
pascal - matricea Pascal
toeplitz - matricea Toeplitz
vander - matricea Vandermonde
wilkinson - testarea matricei Wilkinson

MATRICI, VECTORI ŞI SCALARI

NOTAŢII

MATLAB este un pachet de programe care lucrează numai cu un singur tip


de entităţi, matrici rectangulare, cu elemente reale sau complexe.În acest sens,
scalarii sunt asimilaţi matricilor cu o linie şi o coloană (1x1), iar vectorii sunt
asimilaţi matricilor cu o linie şi n coloane (1x n) sau o coloană şi n linii (nx1).
Operaţiile şi comenzile în MATLAB sunt aproape naturale, în sens matricial,
asemănător modului de calcul obişnuit. Astfel, entităţile :
1   2 0 π 1
1 2 0 1 5    
A=   ; B=   ; C=  2 ; D=  3 2 1 5  ; E=[1 3 5 7] ,
 3 4 2 7 9  3  5 7 9 7
 
sunt toate matrici în accepţiunea MATLAB: A este o matrice 2x2, B are
dimensiunea 2x3, C este 3x1, D este o matrice 3x4 şi E este un vector linie 1x4.
Elementele unei matrici, pot fi identificate prin una dintre notaţiile: Aij, A[i,j],
A(i,j) etc. şi semnifică elementul de la intersecţia liniei “i” cu coloana “j”. Ultima
notaţie, A(i,j), este cea care a fost adoptată şi în MATLAB şi va fi folosită în
continuare. Dimensiunea unei matrici este precizată de o pereche de numere, care
arată numărul de linii şi coloane ale matricei respective: D este o matrice 3x4; iar o
matrice cu o singură linie sau o singură coloană se numeşte vector linie (matricea E
din exemplul anterior) sau vector coloană (matricea C din exemplul anterior),
MATLAB în ingineria mecanică 23

elementele acestora putând fi identificate cu un singur indice. O matrice cu o


singură linie şi o singură coloană este un scalar.
Pentru a face referire la un element A(i,j), (adică elementul aflat la
intersecţia liniei i cu coloana j ) al unei matrici A, sunt necesari doi indici, indicele
de linie şi indicele de coloană, în această ordine. Referirea la un element al unui
vector poate fi făcută numai cu un singur indice.
Astfel, dacă se introduce de la tastatură, la promptul MATLAB, (promptul
are simbolul grafic “ » “) matricile A, B, C, D şi E:

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

De exemplu, elementul de pe poziţia (2,1), al matricei A, poate fi apelat cu


comanda:

»A(2,1) [Enter]
ans =
3

Dacă se repetă exemplul, pentru matricile B, D, E:

»B(1,3) [Enter]
ans =
5;

»D(3,4) [Enter]
ans =
7;

»E(4) [Enter]
ans =
7

DEFINIREA MATRICILOR SIMPLE

Definirea matricilor se face prin una dintre următoarele metode:


1. introducerea explicită a listei de elementelor;
2. generarea prin instrucţiuni şi funcţii;
3. crearea fişierelor” .m”;
4. încărcare din fişiere de date externe.
24 MATLAB

DEFINIREA MATRICILOR SIMPLE PRIN


INTRODUCEREA LISTEI DE ELEMENTE

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:

a) elementele matricei sunt cuprinse între paranteze drepte “ [ ] “


b) elementele unei linii trebuie separate prin spaţii libere (blanc-uri ) sau
virgule;
c) liniile se separă prin semnul punct-virgulă “ ; “ ;

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

Obs. –În acest exemplu:


• elementele unei linii sunt separate printr-un spaţiu liber
((blank): 1 2 respectiv 3 4 ;
 
• [Enter]- reprezintă tasta cu acelaşi nume;

Acelaşi rezultat se obţine dacă elementele liniei se separă prin virgulă:

» A = [1,2;3,4]
A=
1 2
3 4

Matricea A, astfel definită, poate fi utilizată în calcule sau poate fi salvată


într-un fişier de date pentru o folosire ulterioară (tipul fisierelor de date este .mat).

Pentru matricile mari, la care datele de intrare nu încap pe o singură linie,


se poate proceda la înlocuirea semnului “ ; “ cu o apăsare a tastei “[Enter]”, ca în
exemplul următor:
MATLAB în ingineria mecanică 25

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:

instrucţiunea care citeşte fişierul (şi generează matricea “A”) este:


» matricea_A
ceea ce va avea ca rezultat afişarea matricei A:
A=
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Afişarea matricei conţinută în fişierul matricea_A.mat, este posibilă, la
tastarea numelui acestui fişier, numai în cazul în care acest fişier este salvat în
directorul curent.

Posibilitatea de a importa date din alte programe va fi abordată în secţiuni


ulterioare.
26 MATLAB

GENERAREA MATRICILOR PRIN


INSTRUCŢIUNI ŞI FUNCŢII

În MATLAB se pot defini matricile folosind instrucţiuni şi funcţii


specifice, existând, deasemenea, predefinite matrici implicite. Generarea matricilor
prin instrucţiuni şi funcţii utilizează facilităţile acestui mediu de programare.
De exemplu, matricile E = [1 2 3 4] şi
F = [0,1 0,2 0,3 0,4 0,5] se generează astfel:

» E=1:4 [Enter]
E=
1 2 3 4

iar cu secvenţa următoare se obţine matricea F:

» F=0.1:0.1:0.5 [Enter]
F=
0.1000 0.2000 0.3000 0.4000 0.5000

Matricile predefinite, prin funcţii MATLAB, sunt:

A). Matricea unitate eye(n), eye(n,m)

Prin secvanţa următoare se generează matricile unitate având elementele


diagonalei principale 1 (Atenţie! Pentru afişarea matricilor I2, I3 respectiv I34,
este necesară introducerea numelui acesteia, la prompterul MATLAB, întrucât
definirea acestora se încheie cu caracterul “;” care blochează afişarea!):

» 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

B). Matricea identică : ones(n), ones(m,n)

Matricea identică are toate elementele egale cu cifra 1:

» Y2= ones(2); Y34= ones(3,4);

se obţin rezultatele (după ce se introduce, de la tastatură, numele matricei):

Y2 =
1 1
1 1

Y34 =
1 1 1 1
1 1 1 1
1 1 1 1

C). Matricea zero : zeros(n), zeros(n,m)


Matricea zero are toate elementele egale cu 0 (nu este matricea nulă):

»Z3=zeros(3)
Z3 =
0 0 0
0 0 0
0 0 0

D). Matricea vidă: [ ]

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

E). Matricea aleatoare: rand(n), rand(n,m), rand(n,m,p)

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

fiind obţinute rezultatele:


B3 =
0.4514 0.3127 0.6831
0.0439 0.0129 0.0928
0.0272 0.3840 0.0353

B34 =
0.6124 0.0164 0.0576 0.7176
0.6085 0.1901 0.3676 0.6927
0.0158 0.5869 0.6315 0.0841

B345(:,:,1) =
0.4544 0.1536 0.7275 0.1210
0.4418 0.6756 0.4784 0.4508
0.3533 0.6992 0.5548 0.7159

B345(:,:,2) =
0.8928 0.8656 0.9084 0.0498
0.2731 0.2324 0.2319 0.0784
0.2548 0.8049 0.2393 0.6408

B345(:,:,3) =
0.1909 0.1708 0.3400 0.3932
0.8439 0.9943 0.3142 0.5915
0.1739 0.4398 0.3651 0.1197

B345(:,:,4) =
0.0381 0.9342 0.8729 0.9669
0.4586 0.2644 0.2379 0.6649
0.8699 0.1603 0.6458 0.8704
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

F). Matricea dispersiilor:sparse (A), sparse(i,j,s,m,n)

Funcţia sparse() generează o matrice dispersată în raport cu argumentul.


1 0 3 9 4 
Astfel, dacă se dă matricea C =   , atunci funcţia sparse (C),
 0 ,6 0 0 9 − 8 
generează matricea:
»C=[1,0,3,9,4;0.6,0,0,9,8];
» sparse (C)
ans =
(1,1) 1.0000
(2,1) 0.6000
(1,3) 3.0000
(1,4) 9.0000
(2,4) 9.0000
(1,5) 4.0000
(2,5) -8.0000
adică, sunt reţinute doar elementele diferite de valoarea zero din matricea C de la
argumentul funcţiei sparse. Această funcţie este utilă pentru stocarea în memoria
calculatorului a matricilor cu m linii şi n coloane, unde m şi n sunt valori mari.

G). Matricea Hadamard

Această matrice se generează cu funcţia sinonimă hadamard(n) cu


condiţia ca n, n/12 şi n/20 să fie puteri ale lui 2. Matricea Hadamard are
elementele 1 şi -1 iar coloanele sunt ortogonale. Utilitatea acestei matrici se
regăseşte în combinatorică, procesarea semnalelor şi analiză numerică. Cu secvenţa
următoare se obţin matricea Hadamard de ordinul 4:

»H4=hadamard(4)
H4 =
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
30 MATLAB

H). Matricea Hilbert

Matricea Hilbert este un exemplu notabil de matrice slab condiţionată.


Elementele matricei Hilbert sunt de forma H(i, j) = 1/(i+j-1), şi se generează cu
funcţia MATLAB hilb(n). De exemplu:
»H3=hilb(3)
H3 =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000

I). Matricea magică pătratică

Matricea magică pătratică este generată cu funcţia MATLAB magic(n) şi


este construită din întregii cuprinşi între 1 şi n2 cu condiţia ca suma elementelor de
pe orice rând să fie egală cu suma elementelor de pe oricare coloană respectiv cu
suma elementelor de pe diagonala principală, iar n trebuie să fie un scalar mai mare
sau egal cu 3:
»M3=magic(3) [Enter]
M3 =
8 1 6
3 5 7
4 9 2

Pentru verificarea condiţiei de egalitate între suma elementelor pe linie cu


suma elementelor pe coloană, respectiv cu suma elementelor pe diagonală, se
realizează suma corespunzătoare, folosind o funcţie Matlab (sum() )

» suma_elementelor_pe_linie=sum(M3) [Enter]
suma_elementelor_pe_linie =
15 15 15

» suma_elementelor_pe_coloana= sum(M3') [Enter]


suma_elementelor_pe_coloana =
15 15 15

» suma_elementelor_pe_diagonala= sum(diag(M3)) [Enter]


suma_elementelor_pe_diagonala =
15
MATLAB în ingineria mecanică 31

»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

Pentru afişarea matricilor M3 respectiv M4, se tastează numele acesteia.

J). Matricea Pascal

Matricea Pascal se generează cu funcţia MATLAB, specifică, pascal(n),


este o matrice de ordinul n, pozitiv definita, simetrică, cu elemntele, numere
întregi, preluate din Triunghiul lui Pascal (format din coeficienţii binomiali), iar
inversa acestei matrici este o matrice cu elementele numere întregi:

»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

K). Matricea Wilkinson

Cu funcţia MATLAB wilkinson(n) se generează matricea sinonimă, care


este o matrice pătratică de ordinul n cu valori proprii, de test, simetrică,
tridiagonală, cu perechi de valori întregi apropiate dar nu exact egale. Cea mai
utilizată este matricea Wilkinson de ordinul 21. Pentru a se observa cum se
construieşte matricea Wilkinson se prezintă, mai jos, matricele corespunzătoare, de
ordinul 2, 3, 4, 5, 6:
»doi=wilkinson(2)
doi =
0.5000 1.0000
1.0000 0.5000

»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

GENERAREA MATRICILOR PRIN


CREAREA FIŞIERELOR SCRIPT

O facilitate oferită de MATLAB, pentru generarea matricilor, este crearea


fişierelor script. De exemplu, pentru matricea “A”, dată sub forma algebrică,
16.0 3.0 2.0 13.0
 
 5.0 10.0 11.0 8.0 
A= ,
 9.0 6.0 7.0 12.0
 
 4.0 15.0 14.0 1.0 

se realizează fişierul matricea_A.m astfel:


• Din meniul File → New → M-file se crează fişierul matricea_A care va
conţine textul

A = [ ...
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0 ]

• Acest fişier se salvează (din meniul File →Save As … ) cu numele


matricea_A, acestuia fiindu-i atribuită, implicit, extensia “.m”
34 MATLAB

Dacă se doreşte apelarea fişierului (pentru a fi utilizat în alte fişiere, sau în


Workspace), în linia de comandă MATLAB, se tastează numele fişierului,
matricea_A, rezultatul fiind afişarea matricei A:
»matricea_A
»A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

GENERAREA MATRICILOR PRIN


ÎNCĂRCAREA DIN FIŞIERE EXTERNE

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ă:

Accesând butonul Next, iar, după validarea operaţiei, Finish, în spaţiul de


lucru, poate fi, oricând, afişată şi utilizată matricea salvată în acest fişier. Comanda
load citeşte fişierele binare conţinând matrici generate în sesiuni de lucru
anterioare. Aceeaşi comandă citeşte fişiere- text conţinând date numerice. Fişierul
MATLAB în ingineria mecanică 35

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

şi se salvează fişierul cu numele, matrice, de exemplu, atunci, acest fişier poate fi


apelat folosind următoarea succesiune de operaţiuni, în Workspace (acest fişier
poate fi apelat şi de alte fişiere sau funcţii MATLAB). De exemplu, presupunând
că în calcule este necesar ca datele cuprinse în fişierul matrice.dat, stocat în
memoria calculatorului, şi aceste date să fie identificate cu numele “B”, atunci se
procedează astfel:

»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

» x=[ -1.3, sqrt(3), (1+2+3)*4/5] [Enter]

rezultă:
» x=
-1.3000 1.7321 4.8000
36 MATLAB

Obs. De remarcat faptul că pentru numărul raţional “-1,3” s-a folosit


formatul britanic: s-a folosit caracterul “.” pentru separarea părţii întregi de
partea fracţionară a numărului. De asemenea, “sqrt(3)”, pentru numărul “ 3 ”,
elementul x(3) fiind afişat cu valoarea calculată pentru expresia de mai sus,iar
pentru separarea elementelor unei linii s-a folosit caracterul virgulă (,).

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

în timp ce, cu instrucţiunea următoare se modifică elementul al cinci-lea al


aceluiaşi vector x (dacă acest element nu exista în varianta originală a vectorului x,
atunci, MATLAB atribuie automat valoarea înscrisă în partea dreaptă a semnului
“=”, de atribuire):

» x(5) = abs(x(1) ) [Enter]


x=
-1.3000 1.7321 4.8000 0 1.3000

(adică, elementul al 5-lea al vectorului x este egal cu valoarea absolută a


elementului de pe poziţia 1 a vectorului x), ceea ce returnează rezultatul:

Obs:De remarcat că se atribuie o valoare unui element care ocupă o poziţie


în afara dimensiunii maxime a matricei sau vectorului referit, iar
elementele nedefinite sunt setate la valoarea zero.

Deci, ca regulă, se poate deduce că în cazul în care pe o anumită poziţie,


într-o matrice, nu există un element şi se defineşte, folosind o regulă oarecare, un
element de pe o poziţie “următoare”, elementul care lipseşte se înlocuieşte automat
de către MATLAB, cu valoarea 0 (zero).In acest sens, instrucţiunea următoare
“adaugă” un element pe poziţia (2,4), şi “completează” cu zerouri acolo unde nu
sunt definite alte valori, pentru matricea A:

» 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 )).

O modalitate de a construi matrici mari constă în folosirea matricilor mici


ca elemente, şi concatenarea (“legarea”) acestora. Spre exemplu, din două matrici
2x3 se poate construi o matrice 4x3; dimensiunile matricilor utilizate trebuind să
fie astfel alese încât să se realizeze tablouri rectangulare complete.

Fie A1 şi A2 cele două matrici utilizate. Cu secvenţa următoare:

» A1=[ 1 2 ; 3 4]; A2=[5 6 ; 7 8]; A =[ A1 ; A2] [Enter]

se obţine rezultatul:

»A=
1 2
3 4
5 6
7 8

O matrice cu dimensiuni reduse poate fi extrasă din matrici mai mari


utilizând semnul “ : “ (două puncte). De exemplu:

»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

În acest exemplu, caracterul “două puncte” ( “ : “ ), folosit în instrucţiunea


»B=A(2:3, :), are următoarea semnificaţie:”se extrag elementele aflate la
intersecţia liniilor 2, 3 cu toate coloanele matricei A”.
38 MATLAB

CONCATENAREA MATRICILOR

Concatenarea (“legarea”) este procesul de asamblare a matricilor mici,


pentru generarea matricilor supra- dimensionate (o matrice, în fapt, este constituită
prin concatenarea elementelor proprii). Operatorul de concatenare este perechea de
 21 4 8 2
 
7 9 0 8
paranteze drepte, [ ]. De exemplu, fiind dată matricea A =  , se
 6 7 8 9
 
 3 5 7 9
poate genera o altă matrice B, prin suplimentarea liniilor şi coloanelor matricei A,
astfel:

• Matricea B va avea două “linii” şi două “coloane”


• “Elementul” B(1,1) este matricea A;
• “Elementul” B(1,2) este format din elementele matricei A, la care se adună
scalarul 32;
• “Elementul” B(2,1) este format din elementele matricei A, la care se adună
scalarul 48;
• “Elementul” B(2,1) este format din elementele matricei A, la care se adună
scalarul 16.

Pentru a realiza acest deziderat, în linia de comandă (considerând că


matricea A este stocată în memorie), se introduce, de la tastatură, următoarea
secvenţă:
» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];
» B = [A, A+32; A+48, A+16]

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

Un alt exemplu, asamblarea aceloraşi matrici, prin aranjarea acestora “în


coloană” :
»B1 = [A ;A+32; A+48; A+16]
B1 =
21 4 8 2
7 9 0 8
A
6 7 8 9
3 5 7 9
53 36 40 34
39 41 32 40
A+32
38 39 40 41
35 37 39 41
69 52 56 50
55 57 48 56
54 55 56 57
A+48
51 53 55 57
37 20 24 18
23 25 16 24
A+16
22 23 24 25
19 21 23 25

ŞTERGEREA LINIILOR ŞI A COLOANELOR

Se pot şterge linii şi coloane, ale unei matrici, folosind operatorul [ ]. De


exemplu, pentru a şterge coloana 2 a matricei A, dată în forma algebrică generală:
 21 4 8 2
 
7 9 0 8
A= , se poate folosi următoarea secvenţă:
 6 7 8 9
 
 3 5 7 9

» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A; x(:,2)=[]

se obţine o nouă matrice x :

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

Se observă că, elementele matricei au fost “citite” pe coloană, şi tot al treilea


element, începând cu primul, a fost eliminat, rezultatul fiind un vector linie.

EXTRAGEREA SUBMATRICILOR PRIN INDICI

Elementele individuale ale unei matrici se apelează cu numele acesteia,


urmat de doi indici, cuprinşi între paranteze rotunde separaţi prin virgulă. Primul
indice semnifică linia, iar al doilea coloana în care se găseşte elementul apelat. De
 21 4 8 2
7 9 0 8
exemplu, considerând matricea A =  stocată în memoria
6 7 8 9
 
3 5 7 9
calculatorului, atunci cu instrucţiunea:
» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];A(6,5)=A(1,2)+A(3,1) [Enter]
se obţine o altă matrice la care elementul din linia 6, coloana 5: A(6,5), al matricei
A, este obţinut ca suma dintre elementul de pe linia 1 –coloana 2 (A(1,2)) şi
elementul de pe linia 3, coloana 1 (A(3,1)), celelalte elemente fiind înlocuite cu
valoarea zero:
»A=
21 4 8 2 0
7 9 0 8 0
6 7 8 9 0
3 5 7 9 0
0 0 0 0 0
0 0 0 0 10
Indicii pot fi scalari sau vectori. Indicii vectori permit definirea unor
submatrici, procedeu prin care se pot referi părţi disparate dintr-o matrice. Spre
exemplu, dacă se presupune că matricea M6x10 există deja salvată pe disc,
MATLAB în ingineria mecanică 41

»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

atunci, cu instrucţiunea următoare, se extrage submatricea B cu dimensiunea 5x1,


formată cu elementele liniilor 1, 2, 3, 4, 5 (notaţia “1:5” arată că sunt apelate toate
liniile: 1 până la 5) şi coloana a 3-a a matricei M:

»B1=M(1:5,3) [Enter]

B1 =
3
3
0
-3
3

în timp ce, instrucţiunea următoare, extrage submatricea C, de dimensiunea 5x4,


constituită din elementele primelor 5 liniii şi ale ultimelor 4 coloane (coloanele 7,
8, 9, 10) ale matricei M:

»C1=M(1:5, 7:10) [Enter]


C1 =
7 8 9 10
7 - 8 9 - 10
0 8 0 10
-7 8 - 9 10
7 8 9 10

Utilizarea, numai a caracterului “:” (“două puncte”) în locul indicilor


pentru linii sau pentru coloane, presupune considerarea tuturor elementelor pe linii,
respectiv pe coloane. Astfel instrucţiunea:

»D1=M(:,3) [Enter]
42 MATLAB

extrage din matricea M, o submatrice D1 cu elementele extrase din matricea M


(toate liniile şi numai coloana 3) având următoarea configuraţie:

»D1 =
3
3
0
-3
3
8

în timp ce, instrucţiunea:

»E1=M(1:5,:) [Enter]

extrage submatricea E1 care conţine liniile de la 1 la 5 ale tuturor coloanelor


matricei M:
»E1 =
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

UTILIZAREA SIMBOLURILOR

MATLAB, în variantele recente, foloseşte Symbolic Math Toolbox (grup


de instrumente matematice simbolice) pentru crearea variabilelor şi obiectelor
simbolice. Această colecţie de instrumente MATLAB, nu trebuie confundată cu
facilitatea oferita, tot de MATLAB, pentru utilizarea simbolurilor literale.
În calcule inginereşti se utilizează frecvent, in locul expresiilor numerice,
supradimensionate, în general în cazul calculelor numerice cu matrici şi de analiză
numerică, expresii simbolice. Nucleul computaţional este format pe baza kernel-
ului MAPLE®, dezvoltat la University of Waterloo, Canada, şi la Eidgenössiche
Technische Hochschule, Zürich, Elveţia. Sunt disponibile două categorii de
toolbox-uri: o colecţie de bază, numită Symbolic Math Toolbox, respectiv, o
colecţie de funcţii extinse, numită Extended Symbolic Math Toolbox.
Simbolurile matematice se creeaza cu funcţia MATLAB sym(), respectiv
cu funcţia syms. Diferenţa dintre aceste două funcţii constă în faptul că prima
MATLAB în ingineria mecanică 43

creează o variabilă simbolică, în timp ce, a doua, crează o mulţime finită de


variabile, prin declararea acestora, la începutul sesiunii de lucru. Trebuie făcută o
diferenţiere exactă între simbolurile literale (ale literelor din alfabetul grecesc, de
exemplu) şi simbolurile matematice folosite pentru reprezentarea variabilelor în
MATLAB. De exemplu, pentru introducerea unui text, de la tastatură, în care
intervin simboluri matematice sau caractere greceşti, precum şi caractere speciale
folosite ca simboluri pentru operatori matematici, se folosesc proprietăţile
disponibile în MATLAB, pentru inserarea acestora. În tabelul alăturat sunt cuprinse
toate simbolurile literale şi caracterele speciale, pentru care MATLAB oferă
facilităţi de inserare în text:
DENUMIREA SIMBOL DENUMIREA SIMBOL DENUMIREA SIMBOL
SIMBOLULUI SIMBOLULUI SIMBOLULUI
\alpha α \upsilon υ \sim ≈
\beta β \phi φ \leq ≤
\gamma γ \chi χ \infty ∞
\delta δ \psi ψ \leftrightarrow ↔
\epsilon ε \omega ω \leftarrow ←
\zeta ζ \Gamma Γ \rightarrow →
\eta η \Delta ∆ \uparrow

\theta θ \Theta Θ \downarrow

\vartheta ϑ \Lambda Λ \circ 
\iota ι \Xi Ξ \pm ±
\kappa κ \Pi Π \geq ≥
\lambda λ \Sigma Σ \partial ∂
\mu µ \Upsilon Υ \div ÷
\nu ν \Phi Φ \neq ≠
\xi ξ \Psi Ψ \equiv ≡
\pi π \Omega Ω \Im ℑ
\rho ρ \forall ∀ \Re ℜ
\sigma σ \exists ∃ \supset ⊃
\varsigma ς \ni ∋ \subset ⊂
\tau τ \cong ≅ \int

\nabla ∇ \copyright © \in ∈
\perp ⊥ \langle 〈 \rangle 〉
\cap ∩ \cup ∪ \supseteq ⊇
\otimes ⊗ \oplus ⊕ \oslash Ø

Introducerea simbolurilor literale, respectiv a caracterelor speciale, în


texte sau şiruri de caractere este o operaţiune distinctă a MATLAB, din acest
motiv, aceasta va fi tratată într-o secţiune consacrată acestui subiect. Raţiunea
44 MATLAB

pentru care aceste observaţii, referitoare la diferenţa dintre simbolurile


matematice, folosite în MATLAB ca orice alt tip de variabilă şi simbolurile literale,
folosite ca şiruri de caractere (text) rezidă în aceea că se doreşte eliminarea unei
posibilităţi de apariţie a confuziilor nedorite, în tratarea calculului simbolic.

DEFINIREA ŞI CREAREA EXPRESIILOR SIMBOLICE

Variabilele şi expresiile simbolice se definesc cu comanda sym, în


linia de comanda a spaţiului de lucru MATLAB. Funcţia MATLAB sym(x),
permite atribuirea, variabilei “x”, caracterul de “simbol”. Astfel, cu
comanda:
»c = sym('variabila_simbolica')

se crează variabila simbolica “ c “, care va afişa, atunci când este accesată,


expresia “ variabila_simbolica “:
c=
variabila_simbolica

O expresie matematică poate fi reprezentată printr-un simbol alfanumeric,


fiind posibilă utilizarea acesteia, ulterior, în calcule şi expresii numerice complexe.
De exemplu, presupunând că se doreşte folosirea repetată a unei expresii
matematice, relativ complicată, ca editare, în expresii diferite, atunci se poate folosi
următorul algoritm: se declară expresia simbolică, după care aceasta se poate
utiliza în calcule şi expresii ca o valoare numerică sau simbolică de sine-stătătoare.
Fie expresia:
  12 − 3 5 3   12 − 4 3
E9 =  (1 + 2 + 3 ) : − 14 + 5 34 − ln 23  ⋅ 8 log5 125  _ 55 ⋅
  11   8

Declararea acesteia ca variabila simbolica se realizează cu comanda:

»E=sym( ' (((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) ' )

ceea ce are ca rezultat afişarea expresiei simbolice:

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

Utilizarea acestei expresii, în calcule, (pentru determinarea valorii expresiei f=E^2-


3*E+log(E), de exemplu), este posibilă, folosind următoarea secvenţă MATLAB:

» f=E^2-3*E+log(E)
f =((-2/7-(14+34^(1/5)- log(23))^(1/3))*8^(log(125)/log(5))+
13/2*55^(1/2))^2-3*(-2/7-(14+34^(1/5)-log(23))^(1/3))*8^(log(125)/
log(5))-39/2*55^(1/2)+log((-2/7-(14+34^(1/5)-log(23))^(1/3))*
8^(log(125)/log(5))+13/2*55^(1/2))

Pentru ca operaţiile aritmetice cu expresii simbolice, în MATLAB, să se


poată realiza, este necesară declararea tuturor variabilelor dintr-o expresie
matematică. De exemplu, rezolvarea unei ecuaţii parametrice, cu parametrul “ a ”,
şi variabila “ x ”, declarată, este posibilă dacă, în prealabil, s-a declarat simbol,
parametrul respectiv, folosind, pentru aceasta funcţia syms. Astfel, pentru
rezolvarea ecuaţiei f (x ) = 0 , unde f ( x ) = x 2 − 2ax + 7 , se procedează astfel:

»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

Pentru calculul diferenţialei unei funcţii, se procedează astfel:


1. -se declară simbolurile care urmeaza a fi utilizate:

» 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

2. –se aplică funcţia diff() expresiei simbolice, creată anterior,


“f”:
» diff(f)
ans =
3*a*x^2+2*b*x+c

Diferenţiala se calculeaza, implicit, în raport cu variabila “x”, indiferent de


ordinea declarării simbolurilor. Dacă, de exemplu, se cere diferenţiala în raport cu
o altă variabilă, atunci funcţia MATLAB pentru calculul diferenţialei se apelează
cu doi parametri:

» diff(f,a)
ans =
x^3

În mod similar se determină diferenţiala de ordinul ”n”(n≥2) în raport cu o


variabilă. Funcţia MATLAB diff() se apelează, atunci, cu doi sau trei parametri,
între aceştia, ultimul parametru fiind ordinul de diferenţiere:

»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”

Diferenţiala matricei se determină în mod similar diferenţialelor funcţiilor


simple:
» syms x k pi
» A=[ (k*x)^2, (pi*x)^3;k^2*x, (x^2+1)^(1/2)];
» diff(A)
MATLAB în ingineria mecanică 47

ans =
[ 2*k^2*x, 3*pi^3*x^2]
[ k^2, 1/(x^2+1)^(1/2)*x]

Derivatele parţiale se determină folosind funcţia MATLAB jacobian(), în


funcţie de variabilele funcţiilor. Astfel, derivata unei funcţii f (u, v ) , în raport cu
funcţiile u( x, y ) , respectiv v( x, y ) , se determină cu următoarea secvenţă:

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

respectiv, pentru alte două funcţii:

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

Calculul limitelor funcţiilor simbolice

Calculul limitei unei funcţii, definită simbolic presupune existenţa, în


primul rând, limitei funcţiei respective într-un punct. Întrucât se definesc limitele
laterale (la stânga sau la dreapta), MATLAB permite calculul diferenţiat al acestora
prin specificarea “sensului” de calcul. Limitele se calculează folosind funcţia
MATLAB limit(f(x),xo), cu parametrii de intrare, f(x) şi xo în funcţie de tipul
xx − ax
limitei. De exemplu, dacă se cere calculul limitei funcţiei f ( x ) = , când x
a x − aa
tinde spre a, se procedează astfel:
48 MATLAB

»syms a x

»limit((x^x-a^x)/(a^x-a^a),a)
ans =
1/log(a)

Pentru calculul limitei şirului x n = n 2 ⋅ (n a − n +1 a ), a > 0 , se foloseşte


secvenţa MATLAB:

»syms n a

» limit((n^2)*(a^(1/n)-a^(1/(n+1))),n,inf)
ans =
log(a)

Limitele laterale se determină folosind aceeaşi funcţie MATLAB, pentru


care paramatrii de intrare sunt:funcţia (scrisă simbolic), variabila, punctul în care se
cere limita respectiv “sensul” (“left”-stânga; “right”-dreapta), după cum limita se
calculează, la stânga, sau la dreapta punctului de acumulare. De exemplu, pentru
1 1
calculul limitelor laterale lim e a
x − şi lim e a
x − se procedează astfel:
x →a − x →a +
»syms a x

» limit(exp(1/(x-a)),x,a,'left')
ans =
0

» limit(exp(1/(x-a)),x,a,'right')
ans =
inf

Calculul sumelor simbolice

n
Pentru calculul sumelor de tipul ∑a
k =1
k , în care şirul a k este definit
MATLAB în ingineria mecanică 49

simbolic, se foloseşte funcţia MATLAB symsum( a k ,k,ko,kn). De exemplu, pentru


n

∑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

În cazul în care indexul de sumare nu este implicit (în expresia simbolică,


şirul fiind definit cu mai multe variabile), funcţia MATLAB trebuie sa fie explicit
definită prin parametrii de intrare. Astfel, dacă se cere calculul sumelor infinite

∑ (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

respectiv, pentru cea de-a doua sumă:

» syms k x y n

»symsum(x^k+y^k,k,0,inf)
ans =
-1/(x-1)-1/(y-1)

Calculul seriilor Taylor

Dezvoltarea unei funcţii în serie Taylor are o aplicabilitate deosebită în


calculele numerice. Fie f : [a, b] → R . Se pune problema determinăii unei
funcţii F, care să aproximeze funcţia f în intervalul [a,b]. Se recurge la
această aproximare în două cazuri: 1) când nu se cunoaşte expresia analitică
a lui f, dar se cunosc valorile sale într-un număr finit de puncte şi 2) când
expresia analitică a lui f este destul de complicată şi cu ajutorul acesteia
50 MATLAB

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

Forma generală a dezvoltarii funcţiei f(x), în serie Taylor, în jurul unui


f (n ) (a )

∑ ⋅ (x − a ) . Funcţia MATLAB, pentru calculul primilor n


n
punct x=a este:
n=0
n!
termeni ai dezvoltării, se utilizează funcţia taylor(f(x), n, a). De exemplu, pentru
2
determinarea primilor 4 termeni ai dezvoltării funcţiei f ( x ) = e x , în jurul
punctului x=3, se va folosi următoarea secvenţă:

» 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

Problemele legate de aproximarea folosind seriile Taylor vor fi abordate


într-o altă secţiune a acestei lucrări.

REZOLVAREA ECUAŢIILOR SIMBOLICE

ECUAŢII ALGEBRICE

Rezolvarea ecuaţiilor algebrice simple comportă, în MATLAB, un volum


de lucru redus, dar necesită un efort de calcul relativ mare pentru sistemul de
MATLAB în ingineria mecanică 51

calcul, comparativ cu alte operaţii şi calcule matematice. Funcţia MATLAB


folosită pentru rezolvarea directă a ecuaţiilor algebrice, este solve(), în care
parametrii de intrare sunt ecuaţiile simbolice. Dacă ecuaţia are forma f(x)=0, atunci
funcţia MATLAB se apelează în forma simplă: solve(f(x)), în timp ce, pentru
ecuaţii de forma f(x)=g(x), funcţia MATLAB se apelează cu parametrii de intrare
marcaţi ca şiruri de caractere: solve(‘f(x)=g(x)’). În cazul sistemelor de ecuaţii, se
respectă ultima regulă de scriere a parametrilor de intrare, ecuaţiile fiind
considerate şiruri de caractere separate prin caracterul virgulă: solve(‘f1(x)=g1(x)’,
‘f2(x)=g2(x)’, ‘f3(x)=g3(x)’, …,‘fn(x)=gn(x)’). În continuare se prezintă exemple
ilustrative:
» syms a x

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

În scrierea soluţiei acestui sistem de ecuaţii, MATLAB foloseşte


transformarea ln 16 =2,7726. Astfel, soluţia sistemului se mai poate scrie sub
forma consacrată {x = 2; y = 4} .
52 MATLAB

Rezolvarea ecuaţiilor parametrice sau a sistemelor cu numar mare de


ecuaţii, MATLAB afişează un “câmp” “S” al soluţiilor. “Extragerea” soluţiilor din
acest “câmp” se realizează folosind o instrucţiune simplă:S.(nume_soluţie). Pentru
ilustrarea acestor situaţii, se studiază rezolvarea
 ( x + y ) = 3z − 1
2

 x + ax + (a + 1)y + a = 0  ( y + z ) 2 = 3u − 1
2
sistemelor:  2 ;  . Secvenţa următoare
 y + ay + (a + 1)x + a = 0  ( z + u ) 2 = 3x − 1
( u + x ) 2 = 3 y − 1

rezolvă primul sistem:

»syms x y a

» S=solve('x^2+a*x+(a+1)*y=-a','y^2+a*y+(a+1)*x=-a')

S=
x: [4x1 sym]
y: [4x1 sym]

“Câmpul” soluţiilor sistemului, S, este o matrice simbolică formată din


cele două linii şi o coloană a soluţiilor pentru x, respectiv pentru y. Afişarea
“desfăşurată” a soluţiilor, se poate realiza cu instrucţiunea, dată în linia de
comandă:

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

Pentru rezolvarea celui de-al doilea sistem se foloseşte secvenţa:

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

iar afişarea detaliată a soluţiilor este dată cu comanda:

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

REZOLVAREA ECUAŢIILOR DIFERENŢIALE

Rezolvarea ecuaţiilor diferenţiale ordinare este posibilă în MATLAB,


folosind funcţia dedicată dsolve(), în care, parametrii de intrare sunt ecuaţia
diferenţială, scrisă simbolic (folosind convenţia de scriere a şirurilor de caractere),
respectiv condiţiile la limită, dacă acestea există. Parametrii de intrare se separă
prin caracterul virgulă. Diferenţiala de ordinul n se specifică în ecuaţie prin
simbolul Dny, în care, D reprezintă simbolizarea diferenţialei, n reprezintă ordinul
acesteia, iar y este integrala funcţiei, sau variabila dependentă (de exemplu, D2y
reprezintă diferenţiala de ordinul doi a funcţiei y). Variabila independentă
implicită, recunoscută de MATLAB, este t. Această variabilă poate fi schimbată,
prin adăugarea, ca parametru de intrare, în şirul parametrilor funcţiei MATLAB
dsolve(‘ecuatie’,’cond_la_lim_1’,’con_la_lim_2’,’variabila_indep_noua’). De
0 .9
exemplu, rezolvarea ecuaţiilor diferenţiale: y ′ = − y , y (0) = 1 , respectiv
1 + 2t
0.9
y′ = − y , y (0) = 1 , este similară, cu observaţia că, în cel de-al doilea caz,
1 + 2x
este necesară marcarea ca variabilă independentă, a variabilei x. Acest lucru se va
observa, în linia de comandă, în şirul parametrilor de intrare. Secvenţa MATLAB,
pentru rezolvarea acestor ecuaţii diferenţiale, este:

» 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

respectiv, pentru a doua ecuaţie:

» y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x')
y2 =
1/(1+2*x)^(9/20)

Rezolvarea ecuaţiei a doua, fără a specifica faptul ca x este variabilă


independentă, are ca rezultat:

» y3=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1')

y3 =
exp(-9/10/(1+2*x)*t)

Folosind convenţia de scriere comună, soluţiile sunt: y 1 = (1 + 2t )−0.45 ;


0.9
− ⋅t
y 2 = (1 + 2x ) −0.45
respectiv y 3 = e 1+ 2 x .

EXEMPLE DE UTILIZARE A OPERATORILOR


ŞI FUNCŢIILOR MATLAB DE BAZĂ

1).-Calculul puterii unui număr:

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

În MATLAB, se foloseşte algoritmul:

» 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

3).- Calculul expresiilor exponenţiale şi logaritmice

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

În MATLAB, aceste expresii se calculează astfel:


» E5=exp(5-sqrt(3))
E5 =
26.2574
» E6=log(9-3/2)
E6 =
2.0149

» 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 :

-se introduce, de la tastatură:

»x=[1,2;3,4];

-se determină valoarea expresiei, folosind funcţia exp

»E9=exp(x)
E9 =
2.7183 7.3891
20.0855 54.5982

O altă posibilitate de a calcula aceasta expresie este prin aplicarea directă a


 1 2
funcţiei MATLAB exp(), matricei  :
 3 4

»E9=exp([1,2;3,4])

De observat că rezultatul este o matrice cu două linii şi două coloane, exact


ca şi exponentul.
Expresia E10 se calculează astfel:
»E10=(((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)
E10 =
-1.2985e+003
OBSERVAŢII:
• Pentru calculul expresiilor iraţionale (radicali cu indice diferit de 2: a b
a
sau bc ) se foloseşte algoritmul pentru calculul puterilor cu exponent
1 c
raţional : ba sau b a ;
• Pentru calculul exponenţialei ( ex ) nu se foloseşte operatorul putere (“^“);
MATLAB în ingineria mecanică 57

• Pentru calculul expresiilor logaritmice cu logaritmi în altă bază decât baza


naturală ( ln x) sau 10 ( lg x ) se foloseşte formula de schimbare a bazei
log c b
logaritmului : log a b =
log c a
• MATLAB dispune de o serie de combinaţii, implicite, de taste pentru
crearea comenzilor rapide (conform tabelului):

TASTA COMBINAŢIA SEMNIFICAŢIA


DE TASTE

↑ 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”.

• Fiind dată matricea :


 3  3 
 2 ln 4 123  1.2 − e 3 23
  4  
A = e log 3 5 4 log 3 2002 1 4 5
 
 −5 e ln 4 1
− ln 12 π
 4 2 

să se determine (în MATLAB) matricea formată astfel:

 A1-din elementele de pe poziţiile: (1,5), (2,3), (2,5), (3,1), (3,3),


(3,5), aranjate în toate variantele posibile(2 linii / 3 coloane; 3 linii
/ 2 coloane; 1 linie / 6 coloane; 6 linii / 1 coloană);
 A2-din elementele de pe liniile 1 şi 3 coloanele 1, 3, 5;
 A3-din elementele de pe “diagonalele principale” cu 3 elemente;
 A4-din elementele de pe “diagonalele secundare” cu 2 elemente;

• Se dă matricea (scrisă conform convenţiilor MATLAB):

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]

se cere să se determine (în MATLAB) matricile formate astfel:


• Elementele liniilor 1, 2, 4 şi coloanelor 3, 5, 10;
• Elementele tuturor liniilor matricei M şi coloanele 1, 2, 3, 6, 8, 9,10;
• Elementele liniilor 1, 2, 3, 5, 6 şi coloanelor 1, 3, 5, 7, 9;
• Elementele liniilor 1, 3, 6 şi coloanelor 10, 3, 2, 1 (în această ordine)
• Elementele liniilor 6, 5, 4, 3, 2, 1 şi coloanele 10, 9, 8, …, 2, 1 (în această
ordine)

• Să se calculeze valoarea expresiei E:


e − 15 ln 6  2
( )
lg 8
E =   x − 2 ln x + 23 lg 23 , pentru x= log 3 e 3− ln 5 + 16 .

3
3 + 8 
6
MATLAB în ingineria mecanică 59

CAPITOLUL II

OPERAŢIILE ARITMETICE CU MATRICI


În MATLAB operaţiile aritmetice cu matrici (considerăm matricile date A
şi B) au următoarea sintaxă:

» 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

iar, operaţiile aritmetice cu tablouri de valori (considerăm tablourile de valori A şi


B) au următoarea sintaxă:
» 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

Versiunea MATLAB 6 dispune de funcţii specifice pentru realizarea


operaţiilor aritmetice cu matrici, respectiv, cu tablouri de valori:

a)-Funcţii MATLAB specifice operaţiilor cu matrici

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

b)- Funcţii MATLAB specifice operaţiilor cu tablouri de valori

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)

ADUNAREA ŞI SCĂDEREA MATRICILOR

Aceste operaţii se pot realiza dacă este respectată condiţia ca matricile să


aibă aceeaşi dimensiune (exclus cazul în care se doreşte adunarea sau scăderea
dintre o matrice şi un scalar, unde MATLAB realizează operaţia în modul următor:
scalarul este adunat fiecărui element al matricei, fiind respectată regula de bază, din
algebra elementară, în acest caz).

Ex.:
1 2  5 6
Fie: a=  ; b=   ; c=2.
 3 4  7 8
Să se calculeze:a+b; a-b;a+c.

Rezolvare:Cu secvenţa MATLAB următoare, rezultă:


» a=[1,2;3,4];b=[5,6;7,8];c=2;
» a1=a+b [Enter]
a1 =
6 8
10 12

» 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

Rezolvare: Cu secvenţa MATLAB


» m=[1,2;3,4];n=[pi,sqrt(2),4^(1/3);exp(log10(8)),log(7),1-exp(1)] ;
» M=m+n

Rezultatul afişat de MATLAB este:


??? Error using ==> +
Matrix dimensions must agree.
(Eroare la utilizarea operatorului ==> “ + “
Dimensiunile matricelor trebuie să fie identice)

În MATLAB, versiunea 6 este posibilă adunarea unor matrici ale căror


elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie două
 a 11 a 12 a 13   b 11 b 12 b 13 
   
matrici : A = a 21 a 22 a 23  şi B = b 21 b 22 b 23  . Pentru a se calcula
a 31 a 32 a 33  b 31 b 32 b 33 
suma X=B+A, se declară elementele matricelor, ca simboluri literale:

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

» B=[b11 b12 b13; b21 b22 b23; b31 b32 b33]


B=
[ b11, b12, b13]
[ b21, b22, b23]
[ b31, b32, b33]

Cu secvenţa MATLAB următoare se determină matricea X:


» X=A+B
X=
[ a11+b11, a12+b12, a13+b13]
[ a21+b21, a22+b22, a23+b23]
[ a31+b31, a32+b32, a33+b33]
62 MATLAB

Notă: De observat modul de afişare a matricilor simbolice: fiecare linie


este încadrată între paranteze drepte.

PRODUSUL VECTORIAL SI
PRODUSUL SCALAR AL DOI VECTORI

Produsul vectorilor (matrici cu o singura linie, respectiv o singură


coloană), este definit diferit decât pentru matrici. Astfel doi vectori (a, b), având
aceeaşi lungime, se pot inmulţi în orice ordine : a*b, respectiv b*a. De exemplu,
considerând doi vectori daţi prin componente :

» a=[1;2;3]
a=
1
2
3

» b=[5,6,7]
b=
5 6 7

produsul vectorial al acestora este :


» prod_vect=a*b
prod_vect =
5 6 7
10 12 14
15 18 21

iar produsul scalar al celor doi vectori este :


» prod_scalar=b*a
prod_scalar =
38
Dacă vectorii (a, b) sunt daţi simbolic:
» syms a11 a21 a31 b11 b12 b13
» a_simbolic=[a11 ;a21; a31]
a_simbolic =
[ a11]
[ a21]
[ a31]
MATLAB în ingineria mecanică 63

» 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

Produsul a două matrici se simbolizează cu caracterul “ * “ (tastele “ Shift


+ 8 “ de pe tastatura literală, apăsate simultan, sau caracterul corespunzător de pe
tastatura numerică).
Pentru ca produsul a două matrici să se poată realiza este necesar a se
îndeplini următoarea condiţie esenţială: numărul de coloane ale primei matrici să
fie egal cu numărul de linii ale celei de-a doua matrici. Astfel, dacă se înmulţesc
două matrici a(m,n) şi b(n,p) se obţine o matrice c(m,p), această regulă aplicându-
se şi în cazul înmulţirii unei matrici cu un vector-linie sau vector-coloană).
Ex.:
1 2 
   3 − 3 2i 1 − 2i 7 
3 4 
Fie: a= ; b=  ; c=2.
5 8  8 9 0 1 6
 
i π 
Să se calculeze produsele : a·b; b·a; a·c; b·c.
Rezolvare:Cu secvenţa MATLAB următoare, rezultă:
»a=[1,2;3,4;5,sqrt(8);i,pi];b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6];c=2;
» a1=a*b [Enter]
a1 =
17.7321 15 2i 3 - 2i 19
37.1962 27 6i 7 - 6i 45
31.2877 10.4558 10i 7.8284 -10i 51.9706
25.1327+1.7321i 28.2743-3i -2 5.1416+i 18.8496+7i
64 MATLAB

» 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

Observaţie: În cazul produsului a2=b*a, MATLAB afişează


mesajul:
??? Error using ==> *
Inner matrix dimensions must agree.
(întrucât dimensiunile matricelor implicate în
produs nu respectă condiţia impusă !

 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 

• -se declară elementele matricelor, ca simboluri:

» syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21 b22 b23
b31 b32 b33;

• se declară matricele A, respectiv B:


MATLAB în ingineria mecanică 65

» A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]


A=
[ a11, a12, a13]
[ a21, a22, a23]
[ a31, a32, a33]

» B=[b11 b12 b13; b21 b22 b23; b31 b32 b33]


B=
[ b11, b12, b13]
[ b21, b22, b23]
[ b31, b32, b33]

Cu secvenţa MATLAB următoare se determină matricea-produs X=A*B:

» 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

Împărţirea la dreapta este simbolizată cu operatorul “/” (slash), şi este


realizabilă numai dacă inversa celei de- a doua matrici există (determinantul
acesteia este nenul) şi această inversă respectă condiţia impusă înmulţirii
matricelor. Astfel, dacă se împart două matrici a(i,j) şi b(m,m) este necesar ca b-1
să existe şi dimensiunea acesteia să respecte condiţia m==j. Împarţirea la dreapta, a
două matrici, constă, de fapt, în rezolvarea ecuaţiei X*a=b.

Notă :Se cunoaşte faptul că o matrice admite inversă numai dacă


aceasta este pătratică şi determinantul este nenul.

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

Exemplu (produsul matricilor cu dimensiuni ne-adecvate):

1 2  3 − 3 2i 1 − 2i 7 
Fie: a=   ; b=  .
 3 4  8 9 0 1 6

Să se calculeze câtul : d=a/b.


Cu secvenţa MATLAB următoare, rezultă:

» a=[1,2;3,4] ; b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6] ;
» d=a/b [Enter]

MATLAB va afişa următorul răspuns:

??? Error using ==> /


Matrix dimensions must agree.
???Eroare la utilizarea operatorului /
Dimensiunile matricilor trebuie sa fie adecvate

 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:

• se declară elementele matricelor, ca simboluri literale


» syms a11 a12 a21 a22 b1 b2;

• se declară matricile A, respectiv B:


» A = [a11 a12; a21 a22]
A=
[ a11, a12]
[ a21, a22]
MATLAB în ingineria mecanică 67

» B=[b1 b2]
B=
[ b1 b2]

Cu secvenţa,MATLAB, următoare se determină matricea- X=B/A:

» 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

Operaţia de împărţire la stânga este simbolizată cu operatorul “\”


(backslash), reprezentând, în termeni aritmetici, produsul dintre inversa primei
matrici şi cea de-a doua matrice. Astfel, condiţia necesară (dar nu suficientă) pentru
ca o matrice A să se “ împartă “ la stânga prin matricea B, este ca matricea A să
admită inversă şi în plus această inversă trebuie să îndeplinească şi condiţia
necesară ca două matrici să se poată înmulţi. Ca o concluzie, se va încerca
împărţirea la stânga, sau la dreapta, a două matrici, numai în cazul în care cele două
matrici sunt pătratice, şi dacă matricea, la care se împarte, este nesingulară,
condiţia pentru înmulţire să fie îndeplinită (numărul de coloane ale primei matrici
egal cu numărul de linii ale celei de-a doua matrici ).

Ex.6:
1 2  5 6
Fie: A=  ; B=  ;
 3 4  7 8
Să se calculeze:A\B; B\A.
68 MATLAB

Cu secvenţa MATLAB următoare, rezultă:

» 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

În MATLAB (versiuni superioare versiunii 5.3) este posibilă împărţirea


unor matrici ale căror elemente sunt caractere alfanumerice, declarate ca simboluri.
De exemplu, fie două matrici, A şi B, ale căror elemente sunt date simbolic
 a 11 a 12   b 11 b 12 b 13 
A(2x2)=[aij], B(2x3)=[bik]: A =   şi B = b  . Se cere
a 21 a 22   21 b 22 b 23 
matricea X=B/A.

Cu secvenţa MATLAB următoare se determină matricea X, ca fiind câtul simbolic


al matricilor A şi B:
»syms a11 a12 a21 a22 b11 b12 b13 b21 b22 b23;
»A = [a11 a12; a21 a22];
»B = [b11 b12 b13;b21 b22 b23];
»X = A\B

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

calculele aferente analizei cu elemente finite a proceselor de deformare plastică şi


elasto-vâsco-plastică a materialelor. Vectorii spaţiali, definiţi pe spaţiul cu trei
dimensiuni ℜ 3 , reprezintă mărimi reale, de exemplu mărimi fizice, care conţin trei
informaţii (trei scalari). Descrierea unui vector v în baze diferite ai şi bi prin
coordonatele respective, nu schimbă valoarea sa intrinsecă (v se numeşte şi mărime
invariantă):

v = v ai ⋅ a i = v bi ⋅ b i

Toate mărimile invariante se numesc tensori (un exemplu de tensor este


tensorul tensiunilor care, dat prin componente, se reprezintă prin matricea
 σ x τ xy τ xz 
 
componentelor, într-un sistem de axe x, y, z: Tσ =  τ xy σ y τ yz  , acesta
τ σ z 
 xz τ yz
caracterizând starea de eforturi unitare, a unui punct situat pe o suprafaţă oarecare
a corpului supus acţiunii unor forţe exterioare). Un scalar este tensor, dacă poate fi
scris ca produsul scalar u·v a doi vectori:

T (0 ) = u ⋅ v − tensor de ordinul 0 (scalar )


,
T (1) = T i g i − tensor de ordinul 1 ( vector)

unde T i sunt coordonatele tensorului în raport cu baza gi.

Alte exemple de tensori şi deviatori:


• Tensorul sferic al tensiunilor::
σ m 0 0 
σ +σ +σ
[S σ ] =  0 σ m 0  ; σ m = x y z ;

3
 0 0 σ m 

• Deviatorul tensiunilor::
σ − σ τ xy τ xz 
 x m 
[D σ ] =  τ y x σ y − α m τ yz ;
 
τ zx τ zy σz − σm
 
[Tσ ] = [S r ] + [D σ ] ;
70 MATLAB

• Invarianţii eforturilor unitare::


∆1 = σx + σy + σz

(
∆ 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

care, în funcţie de tensiunile normale principale σ 1 , σ 2 , σ 3 , sunt :


∆ 1 = σ1 + σ 2 + σ 3
∆ 2 = σ1σ 2 + σ 2 σ 3 + σ 3 σ 1
∆ 3 = σ1σ 2σ 3

• Tensorul deformaţiilor specifice::


 1 1 
 εx 2
γ xy
2
γ xz 
 
[Tε ] =  1 γ y x ωε y 1
γ yz 
2 2 
1 1 
 2 γ zx 2 γ zy εz 
 

• Tensorul sferic al deformaţiilor::


ε m 0 0 
εx + εy + εz
[S ε ] =  0 εm

0  ; εm = ;
3
 0 0 ε m 

• Deviatorul deformaţiilor specifice:

 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

Produsul Kronecker se realizează cu funcţia MATLAB kron(X,Y),


rezultatul fiind obţinut după următoarea regulă de calcul:

 X(1,1) * Y X(1,2) * Y … X(1, n ) * Y 


 
 … 
 X(m,1) * Y X(m,2) * Y … X(m, n ) * Y 

 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

FUNCŢIA PUTERE ATAŞATĂ UNEI MATRICI

Operaţia de calcul a puterii unei matrici se simbolizează cu operatorul “^”


(Shift + 6;):
A=b^c,
Puterea unei matrici (bc)se calculează ca produs repetat de c ori al matricei
b prin ea însăşi:
b^c=b*b*b*…*b

de c ori
72 MATLAB

Dacă b este un scalar iar c este o matrice atunci calculul puterii bc se


realizează folosind valorile proprii ale matricei c respectiv ale scalarului b.

Obs. Operaţia are sens numai dacă matricea b este pătratică iar c
un scalar.

Ex.7:
 1 2
Fie: a=  ; b=3;c= - 3. Să se calculeze:a^b; b^a; a^c
 3 4

» a=[1,2;3,4];b=3;c= -3;
» a1=a^b [Enter]
a1 =
37 54
81 118

» a2=b^a [Enter]
a2 =
87.8864 127.1198
190.6797 278.5661

» a3=a^c [Enter]
a3 =
-14.7500 6.7500
10.1250 -4.6250

Trebuie observat faptul că a3=a^c, unde c este un scalar negativ, se


execută în următoarea ordine: se determină inversa matricei a după care rezultatul
se ridică la puterea |c| (valoarea absolută a scalarului c).

TRANSPUNEREA MATRICILOR

Transpusa unei matrici x(i, j) (i linii şi j coloane), este matricea x1(j, i) (j


linii şi i coloane), şi se determină, în MATLAB, folosind, pentru simbolizarea ope-
raţiei, caracterul apostrof : “ ‘ “. De exemplu, pentru matricea x :
» x=[1,2,3;4,5,6] ;
transpusa x1 este determinată Cu secvenţa MATLAB următoare, rezultă:
MATLAB în ingineria mecanică 73

» x1=x’ [Enter]
x1 =
1 4
2 5
3 6

Determinantul unei matrici

Obs. Numai matricile pătratice permit calculul determinantului, în timp


ce, matricele cu număr de linii diferit de numărul de coloane, « tablourile »,
permit doar calculul « minorilor ».
Calculul determinantului unei matrici se realizează cu funcţia det( ) şi se
apelează cu sintaxa:

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

Cu secvenţa MATLAB următoare, rezultă:


» A= [1,2;3,4];B=[1,2,3;4,5,6 ;7,8,9];C=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6];
» A1 = det(A)
A1 = -2;

» B1 = det(B)
B1 = 0

» C1 = det(C)

În cazul C1 = det(C), MATLAB returnează următorul mesaj de eroare (datorat


dimensiunii matricei C):
??? Error using ==> det
Matrix must be square.
??? Eroare la utilizarea funcţiei det ()
Matricea trebuie să fie pătratică
74 MATLAB

În MATLAB(versiunile superioare versiunii 5.3), este disponibil calculul


determinantului unei matrici ale cărei elemente sunt simboluri literale declarate cu
a b 
funcţia syms. De exemplu, pentru calculul determinantului matricei D =   se
c d 
poate utiliza următoarea secvenţă :

» syms a b c d;
»D1= det([a, b; c, d])

care returnează următoarea “valoare”:

»D1= a*d - b*c

 2 / 3 1 / 3
Similar este cazul matricei A =   , unde se poate utiliza
 1 1 
următoarea secvenţă:

» A = sym([2/3 1/3;1 1])


A=
[ 2/3, 1/3]
[ 1, 1]

» r = det(A)
r = 1/3

Obs : Determinantul unei matrici este utilizabil în consideraţii


teoretice şi în anumite tipuri de calcule simbolice, dar este, datorită
scalării şi erorilor de aproximare, mai puţin utilizabil în calcule
numerice.

CALCULUL INVERSEI

Dacă o matrice A este pătratică şi nesingulară (determinantul matricei este


nenul), ecuaţiile AX = I şi X·A = I (matricea I fiind matricea unitate) au aceeaşi
soluţie, X. Această soluţie se numeşte inversa matricei A, se notează cu A-1 şi se
calculează folosind funcţia MATLAB inv(A). Dacă matricea A este pătratică şi
nesingulară, atunci, fără a considera erorile de aproximare, X = inv(A)*B ar trebui
MATLAB în ingineria mecanică 75

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)

Funcţia se utilizează frecvent pentru rezolvarea sistemelor de ecuaţii liniare


A*X=B, sau X*A=B soluţia sistemului este X=inv(A)*B, respectiv X=B*inv(A).

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

Matricile rectangulare (tablourile de valori), nu admit inverse şi nici


calculul determinanţilor. Pentru acest tip de matrici se poate utiliza pseudo- inversa
Moore-Penrose, care se calculează cu funcţia pinv(). De exemplu, pentru matricea
9 4
 
C =  2 8  se va calcula pseudoinversa cu următoarea secvenţă MATLAB :
 6 7 
»C=[9,4;2,8;6,7] ;
»P=pinv(C)
P=
0.1159 -0.0729 0.0171
-0.0534 0.1152 0.0418
76 MATLAB

Printr-un calcul simplu se poate observa că produsul P*C reprezintă


matricea unitate de ordinul doi:

»I=P*C
I=
1.0000 0.0000
0.0000 1.0000

în timp ce, produsul C*P este o matrice de ordinul 3x3, dar nu matricea unitate :

»Q=C*P
Q=
0.8293 -0.1958 0.3213
-0.1958 0.7754 0.3685
0.3213 0.3685 0.3952

RANGUL MATRICEI

O matrice X (m,n), nenulă, are rangul k, dacă matricea X are un


determinant « minor », de ordin k, nenul, iar toţi minorii de ordin mai mare decât k
(dacă există) sunt nuli. Rangul unei matrici este, prin urmare, un scalar 1 ≤ k ≤
min(m,n).Rangul unei matrici reprezintă numărul de linii sau coloane liniar
independente, şi se determină cu funcţia rank( ). Se apelează cu una dintre
sintaxele:

r = rank (X) r = rank (X, tol)

Funcţia rank, apelată cu sintaxa r = rank (X, tol), returnează numărul de


valori singulare ale lui X, mai mari decât parametrul opţional tol.

Ex.:
3 2 −5 4 

Să se determine rangul matricei A =  3 − 1 
3 − 3 .
 3 5 − 13 11 

Din algebra elementară se cunoaşte că întrucât toţi minorii de ordinul al


treilea ai matricei A sunt nuli:
MATLAB în ingineria mecanică 77

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

Acest rezultat se obţine Cu secvenţa MATLAB următoare, rezultă:


» A = [3,2,-5,4;3,-1,3,-3;3,5,-13,11];
» k = rank(A)
k=
2

CONDITIONAREA UNEI MATRICI

Importanţa cunoaşterii condiţionării unei matrici decurge din faptul că


rezultatele obţinute prin calcul numeric corespund întotdeauna unei probleme
perturbate, aceasta datorându-se, în special erorilor de rotunjire, a calculelor cu
precizie ridicată, respectiv, se datorează sensibilităţii preciziei de calcul în timpul
rezolvării sistemelor liniare. Determinarea condiţionării are la bază teoria
matematică a perturbaţiilor. Se spune că o funcţie f(x) este rău- condiţionată dacă
pentru un x1 "apropiat" de x, funcţia f(x1) diferă "mult" de f(x). Altfel, o funcţie se
spune că este bine condiţionată dacă pentru un x1 "apropiat" de x, funcţia f(x1) este
"apropiată" de f(x). Trebuie remarcat că termenii "apropiat" şi "mult" sunt vagi,
motiv pentru care este necesară utilizarea numerelor de condiţionare.
Numărul de condiţionare indică sensibilitatea soluţiei unui sistem de
ecuaţii liniare faţă de perturbaţiile generate de calculele cu coeficienţii ecuaţiilor
(calculul inversei matricei coeficienţilor necunoscutelor, de exemplu), şi dă
indicaţii asupra preciziei rezultatelor la inversarea matricelor şi rezolvarea
ecuaţiilor liniare. O matrice bine-condiţionată este o matrice relativ insensibilă la
mici perturbaţii.
Pentru un sistem de ecuaţii liniare Ax=B, dacă matricea A este cunoscută şi
nu este afectată de erori, dar vectorul B, este afectat, atunci, considerând o
perturbare a acestuia evaluată la mărimea δB (vectorul perturbaţiilor), vectorul
soluţie x devine x + δx , iar sistemul perturbat este :

A(x + δx ) = B + δB , sau δx = A −1 δB , deci δx ≤ A −1 δB


78 MATLAB

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 ,

şi, folosind câteva calcule simple de înmulţire şi identificare, se obţine


(presupunând că B ≠ 0 ) :

δ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

În aceste condiţii, relaţia de estimare a erorii soluţiei devine :

δ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

Dacă vectorul termenilor liberi este determinat exact şi neafectat de erori,


iar matricea A are coeficienţi perturbaţi de erori, atunci sistemul Ax=B devine :

(A + δA )(x + δx ) = B ,
de unde rezultă :

(x + δx ) = (A + δA )−1 B [
sau δx = (A + δA )−1 − A −1 B ]
Ultima relaţie, aranjată, devine :

δx = − A −1 (δA )(x + δx ) ,

pentru care, dacă se aplică norma, se obţine :

δx δA
δx ≤ A -1 δA x + δx sau ≤ cond. (A )
x + δx A

Din această relaţie se observă că incertitudinea din vectorul soluţie x,


relativă la x + δx , este mărginită de incertitudinea relativă a matricei A, înmulţită
cu numărul de condiţionare al matricei A.
În concluzie, dacă numărul de condiţionare cond(A) este mare, atunci
perturbaţiile mici introduse de A şi/sau B pot introduce perturbaţii mari în x
(problema liniară este slab condiţionată, adică soluţiile sistemului de ecuaţii sunt
foarte evident influenţate de erorile de calcul ale matricei A, respectiv de datele
masurate, adică elementele vectorului B). Dacă numărul de condiţionare cond(A)
este mic, atunci perturbaţii reduse introduse de A şi/sau B pot induce perturbaţii
mici în vectorul soluţiei x (problema liniară este bine condiţionată, adică soluţiile
sistemului de ecuaţii sunt neinfluenţate de erorile de calcul ale matricei A). Aceste
elemente servesc la corectarea soluţiei obţinute din calcul, la alegerea metodei de
calcul (ţinând seama de numărul şi ordinea operaţiilor de executat), la modul de
reprezentare a informaţiei numerice în calculator (în virgulă mobilă, virgulă fixă
sau zecimal), la tipul de aritmetică cerut în programul de calcul, precum şi la
precizia impusă calculelor.

Numărul de condiţionare se determină, în MATLAB, cu funcţia cond() şi


se apelează cu sintaxa:

» cond(X)
80 MATLAB

O funcţie mai performantă care permite calculul numărului de condiţionare


este rcond() şi se apelează cu sintaxa:

» rcond(X)

Funcţia MATLAB rcond(X) returnează estimarea numărului de


condiţionare al unei matrici X, determinat prin subrutinele LAPACK- Linear
Algebra PACKage (exemple de subrutine de tip LAPACK : DLANGE, DGETRF,
DGECON, dacă matricea este reală, respectiv ZLANGE, ZGETRF, ZGECON,
dacă matricea este complexă), care reprezintă o bibliotecă de subrutine FORTRAN,
utilizate de MATLAB pentru rezolvarea problemelor de algebră lineară. În
completare la LAPACK, MATLAB utilizează şi subrutinele BLAS- Basic Linear
Algebra Subroutines, care au şi rolul de a amplifica viteza de calcul şi manevrare a
matricilor mari, respectiv ale subrutinelor LAPACK. Funcţiile LAPACK sau
BLAS pot fi apelate prin fişiere MEX ale utilizatorului.

Dacă matricea X este bine condiţionată, rcond are valoarea aproximativ


1.0, iar dacă este slab condiţionată, atunci rcond este aproximativ 0,0.
Estimarea celui mai mic număr de condiţionare se face cu funcţia
condest(), şi se apelează cu sintaxa:
» condest(X)
Ex.:
Calculaţi numerele de condiţionare pentru sistemul « iniţial » de ecuaţii:

şi pentru sistemul "perturbat":

În MATLAB:

• -matricea sistemului iniţial:


» A1=[6 6.917;1 1.152];

• matricea sistemului « perturbat » :


» A2=[6 6.912;1 1.152];
MATLAB în ingineria mecanică 81

• -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

De aici, rezultă că sistemul este slab condiţionat. Acest lucru se


verifică şi prin rezolvarea celor două sisteme, cu valori "apropiate" ale
coeficienţilor (pentru care există diferenţă la a patra cifră) :

» A1=[6 6.917;1 1.152];


» A2=[6 6.912;1 1.152];
» B=[6.543; 1.095];
» X1=A1\B
X1=[ 7.3158 -5.4000]

» X2=A2\B
X2=[-8.1041 7.0348]*1.0e+013

Condiţionarea slabă a matricei se reflectă în diferenţele foarte mari ale


soluţiilor: de exemplu, prima soluţie, pentru sistemul ne-perturbat, este x1=7,3158,
în timp ce pentru sistemulperturbat, soluţia x1= - 8,1041 · 1013.

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

În Matlab, problema se rezolvă cu următoarea secvenţă:


» a=[45,23.123;1,15]; a1=[45,23.124;1,15];
82 MATLAB

»d=condest(a)
d=
4.8071

» d1=condest(a1)
d1 =
4.8072

» r1=rcond(a)
r1 =
0.2435

» r2=rcond(a1)
r2 =
0.2434

Se poate, observa că sistemul este bine condiţionat, rezistent la


„perturbaţii”, iar numerele de condiţionare reflectă acest lucru, prin valorile
apropiate, până la cifra zecimală de ordinul patru. Rezolvând sistemul de ecuaţii, în
cele două variante, se obţin vectorii x1, respectiv x2:

» b=[2.34;3.45];
» x1=a\b
x1 =
-0.0685
0.2346

» x2=a1\b
x2 =
-0.0685
0.2346

După rezolvarea sistemelor de ecuaţii (iniţial şi perturbat), s-a obţinut, practic,


aceeaşi soluţie.
MATLAB în ingineria mecanică 83

FACTORIZAREA MATRICILOR

Factorizarea reprezintă operaţia de trecere de la o mulţime la mulţimea


claselor de echivalenţă, în raport cu o relaţie de echivalenţă dată. Factorizarea se
aplică, la rezolvarea sistemelor de ecuaţii liniare. In esenţă, factorizarea este o
procedură de transformare a unei matrici, în general pătratice, într-o matrice
superior triunghiulară (elementele superioare diagonalei principale sunt diferite de
zero, în timp ce, elementele inferioare acesteia sunt toate egale cu zero) sau una
inferior triunghiulară (elementele inferioare diagonalei principale sunt diferite de
zero, în timp ce, elementele superioare acesteia sunt toate egale cu zero). Metodele
directe pentru rezolvarea sistemelor (de forma Ax=B), cele mai utilizate, sunt
metodele bazate pe procesul de eliminare sau descompunerea matricei
coeficienţilor (matricea A). Astfel, pentru un sistem Ax=B:

 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.

Prima transformare aplicată sistemului Ax=B, are ca efect eliminarea


necunoscutei x1 din celelalte n-1 ecuaţii, adunând prima ecuaţie la următoarele n-1,
 − a (1) 
înmulţită cu  (1i)1  , obţinându-se un nou sistem de ecuaţii: A (1) x = B (1) . În a
 a 
 11 
doua transformare, se foloseşte a doua ecuaţie, din sistemul A (1) x = B (1) , înmulţită
 − a (2 ) 
cu  (2i 2)  , pentru eliminarea necunoscutei x2 din ultimele n-2 ecuaţii ale acestui
 a 
 22 
sistem, obţinându-se un nou sistem: A (2 )x = B (2 ) . Se observă că înainte de
eliminarea necunoscutei xk, sistemul echivalent, obţinut după eliminarea
necunoscutelor x1, x2, …, xk-1, poate fi scris sub forma:
A (k )x = B (k ) , k=1,2, …, n
84 MATLAB

a cărui descriere analitică este:


b (k ) 
 1(k ) 
( (k)
( ) (
A = a i , j , B =  2  , iar elementele matricei A (k ) sunt:
k) k) b
 ⋮ 
 (k ) 
b n 

 (k − 1)
 ai , j , i≤k −1
( k) 
a i , j =  0, k,ij≥≤ k - 1 , respectiv, elementele
 a (k −1)
 a (i k, j−1) − i ,k − 1 − ak(k−−11, j) , i ≥ k, j ≥ k

 ak(k−−11,k) − 1

vectorului B (k ) , se calculează cu relaţiile:

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

Pentru k=n, sistemul nou obţinut este:

 a (1)x 1 + a (1)x 2 + … + a (1)x k + … + a (1)x n = b (1)


 11 12 1k 1n 1
( 2 ) x + … + a (2 ) x + … + a ( 2 ) x = b (2 )
 a 22 2 2k k 2n n 2
 ⋮
 (k )x + … + a (k )x = b (k )
 a kk k kn n k
 ⋮
 (n )x = b (n )
 a nn n n

Această metodă presupune realizarea unui număr mare de operaţii de


înmulţire, respectiv de împărţire sau pentru aflarea necunoscutelor, dar nu este
folosită o mare parte a memoriei calculatorului pentru aceste calcule.
Se cunoaşte că o matrice A ∈ ℜ nxn poate fi scrisă sub forma uni produs
L·U de două matrice, unde matricea L este inferior triunghiulară şi U superior
MATLAB în ingineria mecanică 85

 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 

Dacă se relizează produsul dintre cele două matrici L şi U şi se face


identificarea termenilor, se obţin n2 ecuaţii neliniare cu n2 necunoscute. Se observă
că :
u 11 = a 11 , u 12 = a 12 , … , u 1n = a 1n

iar, dacă se determină elementele primei coloane de sub diagonala principală, se


obţin ecuaţiile:

l 21s 11 = a 21 ; l 31s 11 = a 21 , … , l n1s 11 = a n1

Forma generală a ecuaţiilor din care rezultă elementele liniei k, din


matricea U, este:

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

Elementele coloanei k a matricei L (inferioare diagonalei principale), sunt


date de ecuaţiile:

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 

MATLAB foloseşte trei metode de bază, pentru factorizarea matricilor:


• Factorizarea Cholesky-pentru matrici simetrice, pozitiv definite
• Factorizarea Lower Upper (LU)-eliminarea Gauss, pentru matrici pătratice
• Factorizarea ortogonală (QR)- pentru matrici rectangulare

Toate aceste metode de factorizare se apelează, în MATLAB, utilizând


funcţiile specifice: chol(), lu() respectiv qr(). Caracteristica, valabilă în toate
metodele, o constituie utilizarea matricei triunghiulare ale carei elemente, situate
deasupra sau sub diagonala principală, sunt toate egale cu zero. Toate sistemele de
ecuaţii liniare, care permit utilizarea matricilor triunghiulare (factorizări), se
rezolvă uşor folosind pre- sau post-substituţia.

FACTORIZAREA CHOLESKY

Factorizarea Cholesky este o metodă utilizată pentru rezolvarea unui


sistem de ecuaţii liniare de forma: SX=B, unde S este o matrice pozitiv definită (o
matrice este pozitiv definită dacă elementele diagonalei principale sunt toate
pozitive, iar celelalte elemente componente ale matricei nu sunt “prea mari”).
Reprezentarea schematică, a factorizării Cholesky, este prezentată în figura
alăturată, cu ajutorul blocurilor de calcul DSP (Digital Signal Processing), proiectate,
special pentru procesarea semnalelor digitale, pentru a fi folosite în mediile de
simulare dinamică în SIMULINK (versiunea MATLAB superioară versiunii 5.3):
MATLAB în ingineria mecanică 87

Prin factorizare Cholesky, o matrice S, simetrică şi pozitiv definită, se


exprimă ca produsul dintre o matrice superior triunghiulară, L (elementele
superioare diagonalei principale, sunt diferite cu zero), şi transpusa acesteia, L’:

S=L’*L

Factorizarea Cholesky se realizează cu funcţia MATLAB chol(), care se


apelează cu una din sintaxele :

L=chol(S)
[L,P]=chol(S)

Pentru exemplificare, se va folosi ca matrice “de intrare”, matricea pascal


de ordinul 7:

» 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

Condiţiile pentru factorizarea Cholesky sunt:

i. Matricea S să fie pozitiv definită


ii. S= (Lt )* (L) şi det(S)>0 (At este notaţia pentru
matricea transpusă matricei A);
iii. Există o matrice unică L, superior triunghiulară,
nesingulară, care satisface relaţia:S=Lt*L

Un sistem de ecuaţii lineare S·X=B devine:

Rt·R·X=B

iar soluţia acestuia presupune rezolvarea succesivă a sistemelor:

RtY=B şi RX=Y.

Întrucât, operatorul MATLAB “împărţire la stânga” (backslash)


recunoaşte ca operanzi matricile triunghiulare, rezolvarea sistemelor de ecuaţii
lineare se poate realiza folosind:

»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

Soluţiile acestui sistem, folosind factorizarea Cholesky, se găsesc prin


următoarea secvenţă:
» A=[9,-1,2;-1,8,-5;2,-5,7]; B=[1;-2;-1];
MATLAB în ingineria mecanică 89

»L=chol(A);
»X=L\(L’\B)
X=
0.1846
-0.6308
-0.6462

În Matlab (versiuni superioare versiunii 5.3) este posibilă rezolvarea


sistemelor simetrice, prin metoda Cholesky, folosind Solver-ul Cholesky din
pachetul de programe DSP Blockset Simulink. De exemplu, pentru rezolvarea
 9x 1 − x 2 + 2x = 1
3

sistemeului de ecuaţii liniare dat prin:  − x1 + 8x 2 − 5x 3 = −2 , se foloseşte
 2 x − 5 x + 7 x = −1
 1 2 3

următorul “model” de rezolvare (solver):

Ex.: Se cere factorul Cholesky al matricei:


9 1 −1 0 
 
1 9 0 − 1
A=
− 1 0 9 1
 
 0 −1 1 9
Cu secvenţa MATLAB următoare, rezultă:
»A=[9,1,-1,0;1,9,0,-1;-1,0,9,-1;0,-1,1,9];
» [r,p]=chol(A)
r=
3,0000 0,3333 − 0,3333 0
0 2,9814 0,0373 − 0,3354
0 0 2,9812 0,3396
0 0 0 2,9618
90 MATLAB

p=0 (matrice pozitiv definită)

Soluţie dată folosind pachetul de programe DSP Blockset din Simulink:

 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

Soluţia sistemului, folosind pachetul de programe DSP Blockset din


Simulink:

Solverul Cholesky va realiza, în acest caz o rezolvare a sistemului de


ecuaţii, dar activarea “simulării” va avea ca rezultat afişarea în linia de comandă a
MATLAB în ingineria mecanică 91

MATLAB, a mesajului “Warning: Input matrix to block 'Model de


rezolvare/Solverul Cholesky /Cholesky Factorization' is not positive definite.”.
Acest mesaj avertizează utilizatorul asupra faptului că matricea de intrare, din
fişierul “model” Model de rezolvare, nu este pozitiv definită. În acest caz soluţia
dată prin Solverul Cholesky este eronată, întrucât matricea coeficienţilor nu este
pozitiv definită. Totuşi, rădăcinile verifică prima ecuaţie, cu eroare la a patra
zecimală.
Rezolvarea sistemului prin determinarea matricei inverse (matricea
coeficienţilor fiind nesingulară, iar rangul matricei extinse este egal cu rangul
matricei coeficienţilor, aşadar sistemul admite soluţie unică), are ca rezultat
vectorul soluţie: X=[ -5; 2; 6; -4;]. Această soluţie verifică toate ecuaţiile
sistemului.

Notă:-Dacă se încearcă determinarea factorului Cholesky, prin funcţia MATLAB


chol([1,2,1,1;2,1,3,3;1,1,1,1;2,7,2,3]), va fi afişat un mesaj de eroare:
(??? Error using ==> chol
Matrix must be positive definite.)
??? Eroare la utilizarea operatorului chol
Matricea trebuie să fie pozitiv definită

întrucât matricea de la argumentul funcţiei chol() are elemente cu “mult diferite”.

FACTORIZAREA LOWER-UPPER (LU)

Prin factorizarea lower-upper (lu), o matrice pătratică este descompusă


sub forma produsului a două matrici triunghiulare: una inferior triunghiulară
(lower), permutată (o matrice permutată, după o anumită regulă este o matrice în
care liniile sunt pivotate între ele), cu elementele, de pe diagonala principală, egale
cu unitatea (matricea L) şi cealaltă, o matrice superior triunghiulară (upper),
(matricea U). În MATLAB, factorizarea lu este utilizată pentru obţinerea inversei
unei matrici cu funcţia inv() (inversa unei matrici A, se calculează ca produsul
dintre inversa matricei inferior triunghiulară L, calculată prin eliminare Gauss, şi
inversa matricei superior triunghiulară U, calculată prin aceeaşi metodă), respectiv
pentru calculul determinantului matricelor cu funcţia det() (ca produs dintre
determinanul matricei inferior triunghiulară L şi determinanul matricei superior
triunghiulară U). Este, totodată, baza rezolvării ecuaţiilor liniare prin "împărţirea
matricelor" obţinută cu operatorii „ \ „ şi „ / „.
Permutarea liniilor sau coloanelor unei matrici se poate exemplifica foarte
sugestiv printr-o schemă cu blocuri DSP. Presupunem ca se doreşte permutarea
92 MATLAB

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:

Factorizarea lower-upper se realizează după următoarea schemă generalizată:


MATLAB în ingineria mecanică 93

Factorizarea unei matrici, prin metoda lower-upper, se realizează cu


funcţia lu() şi se apelează cu una dintre sintaxele:

1. [LU]=lu(S) - cu un singur parametru de ieşire, matricea [LU]


2. [L,U]=lu(S) – returnează o matrice superior triunghiulară, U, şi o
matrice inferior triunghiulară permutată, L, astfel încât S=L*U
3. [L,U,P]=lu(X) – returnează o matrice superior triunghiulară în U,
inferior triunghiulară în L şi permutarea matriceală în P, astfel încât
L*P=P*S

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ă

unde, matricea L, este o permutare a matricei inferior triunghiulare, iar U este o


matrice superior triunghiulară.
Apelarea funcţiei lu() cu trei parametri de ieşire, are ca rezultat:

» [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

În Matlab (versiuni superioare versiunii 5.3) este posibilă factorizarea


matricilor pătratice prin metoda lower-upper folosind pachetul de programe DSP
1 − 2 3
Blockset din Simulink. De exemplu, pentru matricea A =  4 0 6 , folosind
 2 − 1 3
pachetul DSP Blockset se obţine matricea compusă din matricea L, inferior
triunghiulară, şi matricea superior triunghiulară:

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

Pentru a observa modul în care sunt determinate matricile L şi U, se va


apela funcţia MATLAB lu(A) în toate cele trei variante posibile:

» 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

Rezolvarea sistemelor de ecuaţii AX=B prin factorizarea lower upper


presupune următoarele etape:

i. determinarea matricelor L şi U cu funcţia MATLAB

»[L,U]=lu(A);

ii. determinarea vectorilor Y şi X (obligatoriu în această


ordine):
»Y=L\B şi »X=U\Y ;

Etapa ii., poate fi realizată şi compact cu instruţiunea: » X=U\ (L\B)

De exemplu, pentru sistemul de 3 ecuaţii şi 3 necunoscute


 x − 2 y + 3z = 1

 4x + 6z = −2 , se foloseşte următoarea secvenţă MATLAB:
 2x − y + 3z = − 1

»A=[1,-2,3;4,0,6;2,-1,3];B=[1;-2;-1];
»[L,U]=lu(A);X=U\(L\B)

obţinându-se soluţia sistemului :

X=
-2
0
1

Dacă factorizarea se realizează prin apelarea cu trei parametri de ieşire,


atunci se obţin rădăcinile permutate ale sistemului dat :

»[L,U,P]=lu(C); X=U\(L\B)
X=
-0.5000
1.5000
0.5000

În MATLAB 6 este posibilă rezolvarea sistemelor liniare cu n ecuaţii şi n


necunoscute prin metoda lower-upper folosind pachetul de programe DSP
MATLAB în ingineria mecanică 97

Blockset din Simulink. De exemplu, pentru rezolvarea sistemului 3x3


 x − 2y + 3z = 1

 4x + 6z = −2 , se foloseşte următorul model Simulink :
 2x − y + 3z = − 1

FACTORIZAREA q-r

Prin factorizare Q-R, o matrice se exprimă ca produs între o matrice


ortogonală, Q, şi o matrice superior triunghiulară, R.
Matricea ortogonală, sau matricea cu coloane ortonormale, este acea
matrice reală care are toate coloanele de lungime unitară, şi sunt perpendiculare.
Dacă o matrice Q este ortogonală, atunci :
Q’*Q=1
Dacă matricea este complexă, atunci termenul corespunzător este matrice unitară.
Matricea ortogonală şi matricea unitară sunt uşor de utilizat, în plus, nu introduc şi
nu amplifică erorile de calcul. Din acest motiv, aceste matrici sunt utilizate in
calcule specifice analizei numerice.
Factorizarea Q-R, se realizează după urmatoarea schemă generalizată :
98 MATLAB

În linia de comandă, factorizarea Q-R se apelează în următoarele variante :

[Q,R] = qr(A) (matrice complet definită, sau matricea dispersiilor)


[Q,R] = qr(A,0) ( matrice complet definită, sau matricea dispersiilor)
[Q,R,E] = qr(A) (matrice complet definită)
[Q,R,E] = qr(A,0) (matrice complet definită)
X = qr(A) (matrice complet definită)
R = qr(A) (matricea dispersiilor)
[C,R] = qr(A,B) (matricea dispersiilor)
R = qr(A,0) (matricea dispersiilor)
[C,R] = qr(A,B,0) (matricea dispersiilor)

În MATLAB (versiuni superioare versiunii 5.3) este posibilă factorizarea


matricilor pătratice prin metoda q-r, folosind pachetul de programe DSP Blockset
 1 −1 2 
din Simulink. De exemplu, pentru matricea A =  − 1 8 − 5 , folosind
 2 − 5 7 
pachetul DSP Blockset se obţine:

Ex.:
1 2 3
Să se determine descompunerea qr a matricei A =  4 5 6 
7 8 0 
MATLAB în ingineria mecanică 99

Cu secvenţa MATLAB următoare, rezultă:

»A=[1,2,3;4,5,6;7,8,0];
» [Q,R]=qr(A)
Q=
-0.1231 0.9045 0.4082
-0.4924 0.3015 -0.8165
-0.8616 -0.3015 0.4082

R=
-8.1240 -9.6011 -3.3235
0 0.9045 4.5227
0 0 -3.6742

Factorizarea q-r se utilizează pentru rezolvarea sistemelor de ecuaţii liniare


cu mai multe ecuaţii decât necunoscute (sisteme supra-determinate). Cea mai bună
soluţie a unor astfel de sisteme, în sensul celor mai mici pătrate, este calculată cu
instrucţiunea: X=A\B, care utilizează această factorizare. Prin utilizarea factorizării
q-r, soluţia x este calculată în două etape:

1. Y=(Q-1)*B
2. X=R\Y

Aceeaşi soluţie se obţine folosind următoarea secvenţă MATLAB, scrisă compact:

»[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

Folosind pachetul DSP Blockset, din Simulink, se obţine:


100 MATLAB

Folosind o secvenţă MATLAB, similară, soluţia sistemului


 x − 2y + z − t = 1

 2 x − y + 3 z − 3t = 6
 se obţine prin factorizare q-r:
 x+y+z−t=7
 2x + 7 y + 2z + 8t = 0

» 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

Vectorul X conţine rădăcinile sistemului: X={x,y,z,t}, x=7; y=2; z=-4,4;


t=-2,4.

Folosind pachetul DSP Blockset, din Simulink, se obţine:


MATLAB în ingineria mecanică 101

VALORI ŞI VECTORI PROPRII

În general, în aplicaţiile inginereşti, există un interes deosebit pentru


determinarea valorilor proprii reale şi complexe ale unei matrici reale. Analiza
metodelor de calcul ale valorilor proprii pentru matricile reale poate fi extinsă la
matricile cu elemente complexe. Asemănător rezolvării sistemelor de ecuaţii, şi în
cazul determinării valorilor şi vectorilor proprii există două tipuri de metode:
metode directe şi metode indirecte. Folosirea metodelor directe sau indirecte
depinde mai mult de natura soluţiei cerute decât de forma matricei.
Există aplicaţii în care se pot cere n valori proprii şi n vectori proprii ai
unei matrici de ordinul n şi alte aplicaţii în care se cere doar un număr k<n de
valori şi vectori proprii, precum şi aplicaţii la care se cere valoarea proprie maximă
(minimă) în valoare absolută. În cazul în care se cere o valoare proprie, sau un
număr redus de valori proprii k<n, se pot aplica metodele indirecte (iterative), iar
în cazul în care se cer toate, sau aproape toate valorile propii, este preferabil să se
folosească metodele directe care implică transformările similare ce reduc matricea
iniţială A la o matrice similară B de o formă particulară (reducându-se astfel
algoritmul de calcul propriu-zis).
Problema valorilor şi vectorilor proprii apare într-o mare varietate de
aplicaţii şi se scrie sub forma Ax=λx, sau, în general, Ax=λBx : vibraţiile
corpurilor elastice, difuzia masică, sisteme oscilatorii.
În studiul sistemelor fizice este, adesea, necesară rezolvarea unor
sisteme de ecuaţii liniare având forma algebrică generală :

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.

A. Presupunând necesar studiul vibraţiilor libere ale unui sistem constând


din trei corpuri solide de masă, 2m, 4m, 6m, respectiv, fixate pe o bară elastică, la
distanţă egală, l, unul de altul, respectiv de reazemele de încastrare ale barei, acesta
conduce la scrierea ecuaţiilor mişcării şi la formularea unei probleme de valori
proprii:

 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

Pentru oscilaţiile naturale sistemul va oscila la o frecvenţă unică ω n ,


obţinându-se oscilaţii sinusoidale de amplitudine y şi unghi de defazaj θ . În acest
caz expresiile celor două deplasări sunt:

x 1 = y 1 sin( ω n t − θ), x 2 = y 2 sin( ω n t − θ)

Dacă se înlocuiesc aceste expresii ale deplasărilor, în sistemul ecuaţiilor de


mişcare, după ordonare, rezultă sistemul

− 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

Pentru m 1 = m 2 = m, k 1 = k 2 = k 3 = k şi frecvenţa adimensională λ = mω n2 / k ,


sistemul devine:

( 2 − λ )y 1 − y 2 = 0 

− y 1 + ( 2 − λ )y 2 = 0

Sistemul omogen, în necunoscutele y 1 , y 2 , are soluţia banală


y 1 = y 2 = 0 , pentru orice valoare λ, fapt neinteresant din punct de vedere fizic.
Astfel se impune condiţia ca det A ≠ 0 (A fiind matricea sistemului), rezultând
ecuaţia polinomială în λ :

2 − λ − 1 
P2 (λ ) ≡ det   ≡ λ − 4λ + 3 = 0; λ 1 = 1, λ 2 = 3
2
 − 1 2 − λ

Gradul polinomului caracteristic P2 (λ ) reprezintă numărul gradelor de libertate


ale sistemului fizic, precum şi numărul valorilor proprii. Fiecărei valori proprii îi
corespunde cel puţin un vector propriu, în cazul de faţă existând doi vectori proprii:

 y 11   y 12 
y (1) =   → λ 1 , y ( 2) =   → λ 2
 y 12   y 22 

Din punct de vedere fizic, y 1 şi y 2 reprezintă frecvenţe naturale în forma


adimensională pentru sistemul considerat:
104 MATLAB

mω12
λ1 = = 1, ω1 = k / m
k
mω 22
λ2 = = 3, ω 2 = 3k / m
k

Dacă se rezolvă sistemul omogen în y 11 şi y 12 pentru λ 1 = 1 şi în y 12 , y 22


pentru λ = 3 , rezultă vectorii proprii y (1) şi y ( 2 ) :

 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.

Valorile şi vectorii proprii ai unei matrici pătratice se calculează, în


MATLAB, cu funcţia eig() şi se apelează cu una din sitaxele:

V=eig(A)
V=eig(A,B)
[V,D]=eig(A)
[V,D]=eig(A,B)
[V,D]=eig(A,'nobalance')

Prin apelarea funcţiei MATLAB eig(), în aceste variante, se obţin


următoarele rezultate

 V=eig(A) returnează un vector care conţine valorile proprii ale matricei


A;
 [V,D]=eig(A) returnează o matrice V ale cărei coloane sunt vectorii
proprii corespunzători valorilor proprii şi, o matrice diagonală D care conţine
valorile proprii ale matricei A astfel încât: A*V=V*D
MATLAB în ingineria mecanică 105

 [V,D]=eig(A,'nobalance') returnează valorile şi vectorii proprii fără a


executa în prealabil o echilibrare (aproximare). Dacă matricea conţine
elemente mici, comparabile cu erorile de rotunjire, balansarea se scalează,
făcându-le la fel de semnificative ca celelalte elemente ale matricei originale.
Acest lucru conduce în final la vectori proprii incorecţi. În astfel de situaţii se
utilizează noţiunea de "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

Valorile şi vectorii proprii generalizaţi determină soluţiile nebanale ale ecuaţiei:

λ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=λ

Calculul vectorilor şi valorilor proprii generalizate se realizează cu funcţia


MATLAB eig() şi se apelează cu una dintre sintaxele:

» V=eig(A,B)

• returnează un vector care conţine valorile proprii generalizate, dacă A şi B


sunt matrici pătratice ;

» [V,D]=eig(A,B)

• returnează o matrice V ale cărei coloane sunt vectorii proprii corespunzători


şi, o matrice diagonală D ce conţine valorile proprii generalizate, astfel
încât: A*V=B*V*D
106 MATLAB

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

Aplicând funcţia MATLAB eig(), sistemelor de ecuaţii ale mişcării, pentru


cele două sisteme fizice, tratate teoretic, la începutul acestui paragraf, se obţin
următoarele rezultate :

A.- pentru primul sistem:

»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

B.—pentru cel de-al doilea sistem :

»A=[2,-1;-1,2];
» [V,D]=eig(A)
V=
-0.7071 -0.7071
-0.7071 0.7071
D=
1 0
0 3

»V=eig(A)
V=
1
3

CALCULUL VALORILOR SINGULARE

O valoare singulară corespunzătoare unei matrici rectangulare este


valoarea scalarului σ , iar vectorii singulari corespunzători aceleiaşi matrici sunt
vectorii u şi v, care respectă relaţia de interdependenţă : A ⋅ v = σ ⋅ u , A T ⋅ u = σ ⋅ v
(aici, notaţia VT reprezintă transpusa matricei V). Calculul acestor valori este un
mijloc sigur pentru determinarea rangului unei matrici de formă generală.
Dacă, valorile singulare σ , sunt folosite pentru a forma o matrice
diagonală Σ , iar cu elementele vectorilor singulari, corespunzători, se formează
matricile ortogonale U şi V, se poate scrie :

A⋅V = U⋅Σ
AT ⋅ U = V ⋅ Σ

Dacă U şi V sunt ortogonale (UT * U =1, VT * V=1), atunci acestea reprezintă


rezultatul descompunerii în valori singulare a matricei A :

A = U ⋅ Σ ⋅ VT

Descompunerea completă, în valori singulare, a unei matrici de tipul Amxn,


are ca rezultat o matrice Umxm, una Σ mxn , respectiv o matrice Vnxn (adică matricile
U şi V sunt patratice, în timp ce Σ are ordinul matricei A). Dacă matricea A are
numărul de linii mai mare decât numărul de coloane, atunci descompunerea în
108 MATLAB

valori singulare va avea ca rezultat o matrice U de dimensiuni mari, dar ultimele


»m-n » coloane sunt înmulţite cu zero, în matricea Σ . În această situaţie, economia
în mărimea descompunerii, are efecte în timpul de calcul şi în spaţiul de memorie
necesar stocării rezultatelor, prin renunţarea la calculul acelor elemente care,
oricum sunt eliminate prin înmulţirea cu zero, şi eliminarea acelor coloane din
reprezentarea matricei U. În acest mod, va fi determinată şi afişată o matrice U cu
dimensiunea mxn, o matrice Σ , de ordinul nxn respectiv, matricea V, de aceeaşi
dimensiune . Dacă matricea A este pătratică, simetrică şi pozitiv definită, atunci
descompunerea în valori şi vectori proprii este identică descompunerii în valori
singulare. De remarcat că rezultatele descompunerii în valori singulare a unei
matrici reale sunt întotdeauna reale, în timp ce, descompunerea în valori şi vectori
proprii, a unei matrici reale, poate fi complexă.
Descompunerea în valori singulare a matricei A, se poate face, în
MATLAB, folosind funcţia specifică svd(). Funcţia svd() se apelează cu una din
sintaxele:
• D=svd(A) – returnează un vector care conţine valorile singulare
• [U,S,V]=svd(A) – returnează o matrice diagonală S cu aceleaşi dimensiuni
ca A, având elementele diagonale nenegative (care sunt şi valori singulare)
în ordine descrescătoare şi matricele U şi V care satisfac relaţia: X=U*S*V
• [U,S,V]=svd(X,0) – efectuează un calcul mai rapid al valorilor singulare,

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

8: Calculaţi determinanţii următoarelor matrici:

 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

STRUCTURI ŞI TABLOURI DE VALORI


Structurile, sau tablourile de valori, sunt extensii ale matricilor bi-
dimensionale. Structurile sunt utile pentru construirea tabelelor de valori. De
exemplu, considerând vectorul:

» n = (0:9)';

atunci, cu secvenţele următoare, se pot genera două tabele de valori:

» tabel_puteri = [n n.^2 2.^n] <Enter>


tabel_puteri =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512

» x = (1:0.1:2)'; logaritmi_si_exponentiale = [x log10(x) log(x) exp(x)]


logaritmi_si_exponentiale =
1.0000 0 0 2.7183
1.1000 0.0414 0.0953 3.0042
1.2000 0.0792 0.1823 3.3201
1.3000 0.1139 0.2624 3.6693
1.4000 0.1461 0.3365 4.0552
1.5000 0.1761 0.4055 4.4817
1.6000 0.2041 0.4700 4.9530
1.7000 0.2304 0.5306 5.4739
1.8000 0.2553 0.5878 6.0496
1.9000 0.2788 0.6419 6.6859
2.0000 0.3010 0.6931 7.3891
114 MATLAB

STRUCTURI MULTIDIMENSIONALE

Structurile multidimensionale se deosebesc de matrici şi tablouri de


valori prin numărul de dimensiuni. In timp ce matricile şi tablourile de
valori sunt caracterizate prin două dimensiuni (linii şi coloane), structurile
multidimensionale dimensiuni suplimentare: paginile. De exemplu, cu
secvenţa următoare generează o reţea cu 3 linii, 4 coloane şi 5 pagini:

» 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

se generează o reţea cu 4 linii, 4 coloane şi 24 pagini. Această reţea este


reprezentată succint în figura următoare (la rularea secvenţei anterioare se vor afişa
toate paginile structurii M, pentru fiecare valoare a indexului k):

OPERAŢIILE ARITMETICE
CU TABLOURI DE VALORI

Tablourile sunt seturi de valori ordonate, după sistemul “matricial”:linii şi


coloane. MATLAB operează în mod diferit cu tablourile faţă de matrici,
deosebirile evidente se observă la înmulţire şi împărţire, iar condiţia esenţială
pentru realizarea unei operaţii cu tablouri de valori este aceea că tablourile trebuie
să fie de aceeaşi dimensiune.
Operaţiile cu tablouri sunt operaţii aritmetice (înmulţire, împărţire, ridicare
la putere, etc.) între elementele situate în aceeaşi poziţie a tablourilor, cunoscute
sub numele de operaţii element cu element.
Dacă, în loc de unul dintre operanzi este un scalar, acesta operează cu
fiecare element al tabloului.
Pentru a preciza că operaţiile de înmulţire, împărţire, ridicare la putere
(exclus adunarea şi scăderea) se efectuează element cu element între componentele
a două tablouri de valori (matrici, seturi ordonate de valori, etc.) de aceleaşi
dimensiuni, se utilizează operatorul pentru operaţia dorită, precedat de caracterul
punct (exclus cazul adunării şi scăderii, care sunt similare celor pentru matrici):

• pentru înmulţire- “ .* ”
• pentru împărţire – “ ./ “ sau “ .\ “
• pentru ridicare la putere – “ .^ “
116 MATLAB

ADUNAREA ŞI SCĂDEREA
TABLOURILOR DE VALORI

Pentru ca adunarea şi scăderea să se poată efectua este necesară


îndeplinirea condiţiei de identitate a dimensiunilor tablourilor care operează.

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 

Să se calculeze: a-b; a-c; c-a; c-b; a+d


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=[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

În cazul E=a+d, MATLAB returnează un mesaj de eroare, întrucât nu este


îndeplinită condiţia de corespondenţă a dimensiunilor celor doi operanzi:

»E= a+d
??? Error using ==> +
Matrix dimensions must agree..
??? Eroare la utilizarea operatorului « + »
Matricile trebuie să aibă aceleaşi dimensiuni

ÎNMULŢIREA TABLOURILOR DE VALORI

Pentru ca înmulţirea a două tablouri de valori să se poată realiza, este


obligatorie condiţia ca acestea să fie strict de aceeaşi dimensiune :

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

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=[7^(1/3),exp(1);exp(2)/(log(3)-8),6];

» 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

În cazul E=a.*d, MATLAB returnează un mesaj de eroare, întrucât cele


două tablouri au dimensiuni diferite:

» E=a.*d
??? Error using ==> .*
Matrix dimensions must agree.
??? Eroare la utilizarea operatorului « + »
Matricele trebuie să aibă aceleaşi dimensiuni

ÎMPĂRŢIREA “LA DREAPTA” A


TABLOURILOR DE VALORI

Împărţirea la dreapta, a două tablouri, este simbolizată prin caracterul


combinat “ ./ “ (punct + slash):

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

ÎMPĂRŢIREA “LA STÂNGA”

Operaţia de împărţire la stânga, între două tablouri, având aceleaşi


dimensiuni, este simbolizată cu operatorul “ .\ ” (punct + backslash): x=y.\z, şi
reprezintă câtul dintre elementul z(i,j) şi elementul y(i,j), adică: x=y.\z ≡ z./y.

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:

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 4.0000 1.0472
2.2500 0.4472 0.5000

» 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

Operaţia de ridicare la putere a tablourilor de valori este simbolizată prin


caracterul combinat (« .^ « ). Astfel, instrucţiunea A=B.^C, reprezintă calculul
puterii unui element al matricei B, unde exponentul este elementul de pe poziţia
corespunzătoare din matricea C: adică elementul A(i,j) este obţinut prin ridicarea la
puterea C(i,j) a elementului B(i,j).

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:

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.0000e+000 2.5600e+002 3.1544e+001
2.6214e+005 3.6555e+001 2.1600e+002

» 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=

0.0000 0.1000 0.0000


1.0000 0.0000 0.0000

Notă: Afişarea “expresiei numerice” 1.0e+009 * “


(numărul 109) în faţa unei matrici, are semnificaţia
următoare: elementele matricei sunt înmulţite cu acel
număr. Aceasta este o metodă practică de a “scurta”
formatul unui număr.

TRANSPUNEREA TABLOURILOR DE VALORI

Operaţia de transpunere a unui tablou este simbolizată de operatorul


combinat “.’ “ (punct-apostrof). În acest mod liniile tabloului devin coloane şi
invers.

Ex.:
1 3 π − 6 0
Să se determine transpusa tabloului a =  .
 i 3 − 2i 1 + 11 7 9

Cu secvenţa MATLAB următoare, rezultă:

» a=[1, sqrt(3),pi,-6,0;I,3-2*I,1+sqrt(11),7,9]; [Enter]


» a1=a.’ [Enter]
a1 =
1.0000 0 + 1.0000i
1.7321 3.0000 - 2.0000i
3.1416 4.3166
-6.0000 7.0000
0 9.0000
122 MATLAB

ŞIRURI DE CARACTERE;
MATRICI DIN ŞIRURI DE CARACTERE

Un tip, aparte, de date utilizate de MATLAB îl constituie şirurile de


caractere. Acestea pot fi manipulate ca oricare alt tip de date stocate de orice
limbaj de programare. Figura următoare prezintă tipurile de date utilizate de
MATLAB.

CREAREA MATRICIOR CU
ŞIRURI DE CARACTERE

Şirurile de caractere sunt stocate în MATLAB ca tablouri de valori,


reprezentate prin coduri numerice (codul numeric ASCII). Datele de tip şir de
caractere sunt introduse prin plasarea caracterelor respective între două caractere
apostrof ( « ’caractere’ » ). Codurile ASCII sunt afişate cu funcţia MATLAB
double() :
» coduri_ASCII_litere_mici=double('abcdefghijklmnopqrstuvwxz')
coduri_ASCII_litere_mici =
Columns 1 through 11
97 98 99 100 101 102 103 104 105 106 107
Columns 12 through 22
108 109 110 111 112 113 114 115 116 117 118
Columns 23 through 25
119 120 122
MATLAB în ingineria mecanică 123

»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

De exemplu, urmatoarea secvenţă MATLAB introduce tabloul “nume”,


având dimensiunea 1x17 şi matricea “functia” cu dimensiunea 1x24:

» nume='Popescu J. Eduard'
nume =
Popescu J. Eduard

» functia='Director General Adjunct'


functia =
Director General Adjunct

Caracteristicile matricei nume, se listează cu funcţia whos:

» whos nume
Name Size Bytes Class

nume 1x17 34 char array

adica : matricea nume are dimensiunea 1x17, se stochează în memorie ocupând 34


biţi şi este din classa char array (tablou de caractere).

Matricile de caractere se pot concatena pentru crearea unei noi matrici,


folosind funcţia MATLAB strcat() sau operatorul MATLAB de concatenare [ ].
De exemplu, pentru concatenarea celor două tablouri de mai sus, se foloseşte
secvenţa MATLAB :

» 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

Concatenarea a două tablouri pentru transformarea într-o matrice cu două


linii, foloseşte algoritmul de introducere a datelor ca matrice (paranteze drepte):

» numele_si_functia=['Popescu J. Eduard ';'Director


General Adjunct']
numele_si_functia =
Popescu J. Eduard
Director General Adjunct

» whos numele_si_functia
Name Size Bytes Class
numele_si_functia 2x24 96 char array
Grand total is 48 elements using 96 bytes

Se observă diferenţa faţă de cazul afişării textului intr-o singură


linie:matricea nouă având dimensiunea 2x24, faţă de o linie cu 42 elemente, la
prima variantă, iar pentru stocare sunt ocupaţi 96 biţi de memorie, faţă de 84 în
prima variantă, classa este aceeaşi char array.

CONVERSIA ŞIRURILOR DE CARACTERE


ÎN CODURI NUMERICE

Matricile cu şiruri de caractere stochează fiecare caracter în coduri


numerice pe 16 biţi. Codurile ASCII ale caracterelor alfanumerice sunt prezentate
în tabelul următor :

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

6. ♣ 33. ▼ 60. 9 87. S 114. m


7. ♠ 34. (blank) 61. : 88. T 115. n
8. ● 35. ! 62. ; 89. U 116. o
9. ◘ 36. " 63. < 90. V 117. p
10. ○ 37. # 64. = 91. W 118. q
11. ◙ 38. $ 65. > 92. X 119. r
12. ♂ 39. % 66. ? 93. Y 120. s
13. ♀ 40. & 67. @ 94. Z 121. t
14. ♪ 41. ' 68. A 95. [ 122. u
15. ♫ 42. ( 69. B 96. \ 123. v
16. ☼ 43. ) 70. C 97. ] 124. w
17. ► 44. * 71. D 98. ^ 125. x
18. ◄ 45. + 72. E 99. _ 126. y
19. ↨ 46. , 73. F 100. ` 127. z
20. ‼ 47. - 74. G 101. a 128. {
21. ¶ 48. . 75. H 102. b 129. |
22. § 49. / 76. I 103. c 130. }
23. ― 50. 0 77. J 104. d 131. ~
24. ↕ 51. 1 78. K 105. e 132. ∆
25. ↑ 52. 2 79. L 106. f
26. ↓ 53. 3 80. M 107. g

MATLAB utilizează funcţia double() pentru convertirea şirului de


caractere în codurile numerice ale acestora, respectiv funcţia char() pentru
reprezentarea acestor valori în şir de caractere:

» 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

Se observă că matricea “nume_si_functia” (cu 2 linii şi 24 coloane) a


fost convertită într-o matrice cu aceleaşi dimensiuni dar în reprezentare numerică,
nume_si_functia_numeric. De exemplu, pentru verificare, se poate folosi
următoarea secvenţă:

»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

Pentru revenirea la forma anterioară (matrice cu caractere) se foloseşte


secvenţa:
» nume_si_functia=char(nume_si_functia_numeric)
nume_si_functia =
Popescu J. Eduard
Director General Adjunct

Codurile ASCII, sunt convertite în caractere folosind funcţia MATLAB


char() :

» char(65:75)
ans =
ABCDEFGHIJK

Se pot folosi funcţiile char() şi double() pentru a genera şiruri identice de


caractere, adica:

» char(ones(4,20)*double('#'))
ans =
####################
####################
####################
####################

Această instrucţiune se execută astfel :


• -funcţia ones(4,20) generează patru linii şi 20 de coloane în care elementele
sunt cifrele 1;
• -multiplicând prin double('#') această matrice, elementele “1” sunt înlocuite
cu codul ASCII al unui caracter oarecare (în acest caz este codul
caracterului “#”), iar funcţia char() converteşte aceste coduri în caractere
(caracterul “#”).

Dacă o variabilă- caracter este implicată într-o operaţie aritmetică,


MATLAB utilizează codul ASCII al caracterului, pentru efectuarea calculelor.

Astfel, dacă :

» p=’m’;
atunci expresia:
MATLAB în ingineria mecanică 127

» p+2
returnează rezultatul:
ans =
111

Operaţiile cu matrici şi tablouri de valori pot fi extinse la şirurile de


caractere. De exemplu, dacă p este un şir de caractere (în cazul de faţă m), atunci
expresia char(p+1) returnează litera următoare din alfabet:

» char(p+1)
ans =
n

Relaţia dintre caractere şi codurile ASCII, ale acestora, permite efectuarea


operaţiilor aritmetice cu acestea. De exemplu, instrucţiunea următoare va realiza
împărţirea numărului reprezentând codul ASCII al caracterului « < » (cod 60), la
numărul reprezentând codul ASCII al caracterului « x » (120) :

» double('<')/double('x')
ans =
0.5000

Şirurile de caractere pot fi afişate folosind funcţia MATLAB fprintf(), cu


specificatorul de format « %s », fiind posibilă, de asemenea, aranjarea « la
dreapta », « la stânga » sau « egal distanţată » (« justified »), respectiv
« trunchiată ». Cu instrucţiunile următoare se afişează cuvintele « IMPARATUL
NAPOLEON I », în diferite variante :

» fprintf('%40s I\n','IMPARATUL NAPOLEON')


IMPARATUL NAPOLEON I

» fprintf('%-40s I\n','IMPARATUL NAPOLEON')


IMPARATUL NAPOLEON I

» fprintf('%20s I\n','IMPARATUL NAPOLEON')


IMPARATUL NAPOLEON I

» fprintf('%-20s I\n','IMPARATUL NAPOLEON')


IMPARATUL NAPOLEON I
128 MATLAB

COMPARAREA ŞIRURILOR DE CARACTERE

Şirurile de caractere se compară prin codurile ASCII. Astfel, şirurile


« ann” şi « ban », se compară folosind operatorii relaţionali (<, <=, >, >=, ==,
~=), similar matricilor, fiind afişat rezultatul “1”, dacă rezultatul comparării este
“adevarat”, respectiv, rezultatul “zero”, dacă rezultatul comparării este fals:

»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

??? Error using ==> >


Array dimensions must match for binary array op.

??? Eroare la utilizarea operatorului >


Dimensiunile structurilor trebuie sa corespundă
pentru efectuarea operaţiilor binare

Compararea şirurilor cu dimensiuni diferite se realizează cu funcţia


MATLAB strcmp(si,sj), care va afişa valoarea logică 1, dacă cele două şiruri sunt
identice, respectiv, valoarea logică 0, dacă cele două şiruri au valori diferite ale
codurilor ASCII:

» strcmp(s2,s3)
ans =
0

Funcţiile specifice operaţiilor şi operaţiunilor cu şiruri de caractere sunt


prezentate folosind : » help matlab\strfun.
MATLAB în ingineria mecanică 129

ŞIRURI DE CARACTERE BIDIMENSIONALE

Şirurile de caractere bi-dimensionale se pot crea exact ca şi matricile, cu


excepţia faptului că fiecare linie trebuie să aibă acelaşi număr de caractere (acelaşi
număr de coloane), în caz contrar se va afişa un mesaj de eroare care avertizează
utilizatorul asupra acestui aspect (rezolvarea problemei este simplă dacă se
introduce un număr necesar de spaţii libere, blank-uri) :

» nume_si_adresa=['Albert Durrer ';'21 Bruxelles Ave';'New


York ']
nume_si_adresa =
Albert Durrer
21 Bruxelles Ave
New York

» numesiadresa=['Albert Durrer';'21 Bruxelles Ave';'New


York']
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.

??? Eroare la utilizarea vertcat(concatenarea verticală)


Toate liniile, din parantezele drepte, trebuie sa aibă acelaşi
număr de coloane

O metodă simplă pentru realizarea structurilor bi-dimensionale, cu şiruri de


caractere, este aceea folosind funcţia MATLAB char(), care setează automat
numărul de coloane necesare pe fiecare linie:

nume_si_adresa=char('Albert Durrer','21 Bruxelles Ave','New


York')
nume_si_adresa =
Albert Durrer
21 Bruxelles Ave
New York

De observat că dacă structura nume_si_adresa se apelează cu subscript,


pentru extragerea elementelor, acestea sunt afişate în ordinea clasică a vectorilor
liniari (vectori coloană), elementele fiind « citite » pe coloană începând cu primul
element al coloanei întâi :
130 MATLAB

» numesiadresa=['Albert Durrer ';'21 Bruxelles Ave';'New


York ']
numesiadresa =
Albert Durrer
21 Bruxelles Ave
New York

» numesiadresa(1:3)
ans =
A2N

» numesiadresa(1:4)
ans =
A2Nl

» numesiadresa(1:20)
ans =
A2Nl1eb weB rrYtuo x

EVALUAREA ŞIRURILOR DE CARACTERE

Dacă o expresie MATLAB este « codată » ca şir de caractere de variabilă


« t », de exemplu, atunci funcţia eval(t) va genera evaluarea expresiei în « t »
(adică, şirul de caractere va fi interpretat). Această facilitate se numeşte text
macro. De exemplu, instrucţiunea următoare :

» s='x=-b/(2*a)';b=8;a=7;
» eval(s)
x=
-0.5714

Utilizarea funcţiei eval() este foarte practică în situaţii în care sunt


solicitate date de intrare, cum ar fi cazul unor reprezentări grafice :

» x=0:0.01:10;
» f=input('Introduceti functia de variabila x pentru reprezentare
grafica:','s')
MATLAB în ingineria mecanică 131

Introduceti functia de variabila x pentru reprezentare grafica:

exp(-0.5*x).*sin(x);

» plot(x,eval(f)),grid

După introducerea funcţiei MATLAB input() apare linia de comandă « de


aşteptare », prin care utilizatorul este invitat să introducă expresia funcţiei de
variabilă « x » :

Introduceti functia de variabila x pentru reprezentare grafica:

Dacă utilizatorul introduce o expresie în care nu există date care pot fi


evaluate, MATLAB afişează un mesaj de eroare, altfel este evaluată expresia în
variabilă « x » , şi reprezentată grafic pentru valorile date :

Structurile definite, până acum, în MATLAB, au avut elementele date ori


numai ca numere, ori numai ca şiruri de caractere. MATLAB permite definirea
structurilor de date prin introducerea diferitelor tipuri de date în diferite câmpuri.
De exemplu, se poate crea o structură, numită « student » (de exemplu), cu un
câmp alocat numelui :

» student.nume=’Juan Antonio Cajigal’;


132 MATLAB

un alt câmp pentru seria şi numărul de legitimaţie:

» student.legitimatie='JUANCA0123';

respectiv, un câmp pentru calificativele primite :

» student.calificative=[7 9 6 5];

Pentru a vedea întreaga structură, se introduce, de la tastatură, în linia de


comandă, numele acesteia:

» student
student =
nume: 'Juan Antonio Cajigal'
legitimatie: 'JUANCA0123'
calificative: [7 9 6 5]

Apelarea unui element al structurii se realizează folosind aceeaşi


metodologie ca şi în cazul matricilor şi tablourilor de valori. De exemplu, afişarea
celei de-a doua note, respectiv a celei de-a patra, este realizabilă prin introducerea
de la tastatură, în linia de comandă, a numelui câmpului, şi ca subscript (în
paranteze, pentru stabilirea poziţiei în matricea linie), poziţia acesteia în matricea
respectivă, student.calificative(i):

» student.calificative(2)
ans =
9

» student.calificative(4)
ans =
5

De notat că folosirea caracterului “.”, pentru separarea numelui unei


structuri, la crearea sau apelarea acesteia, este esenţială.
Pentru adăugarea unor elemente suplimentare la structura creată, se vor
folosi indici de subscriere, după numele structurii:

» student(2).nume='Luis Jimenez';
» student(2).legitimatie='LUJIM0012';
» student(2).calificative=[7 5];
MATLAB în ingineria mecanică 133

În structura cu numele”student” câmpurile alocate primului nume, vor


putea fi accesate folosind indicele de subscriere 1, după numele structurii
”student”:

» student(1)
ans =
nume: 'Juan Antonio Cajigal'
legitimatie: 'JUANCA0123'
calificative: [7 9 6 5]

Este de observat că nu este necesar ca o structură să aibă dimensiunile


câmpurilor identice: câmpul “calificative” are dimensiunea 4 la “student(1)”, în
timp ce, la “student(2)” câmpul are dimensiunea 2.
Structura cu numele “student”, are acum dimensiunea 1x2:are două
elemente (“student(1)” şi “student(2)”), fiecare dintre acestea având câte 3
câmpuri. Dacă o structură are definite mai multe elemente, MATLAB nu afişează
conţinutul fiecărui câmp, atunci când aceasta este apelată cu numele simplu. Astfel,
dacă structura “student” se apelează în linia de comandă, simplu, fără subscript,
atunci se va afişa un sumar exhaustiv:

»student
student =
1x2 struct array with fields:
nume
legitimatie
calificative

Un sumar asemănător este afişat dacă se apelează funcţia MATLAB


fieldnames():
» fieldnames(student)
ans =
'nume'
'legitimatie'
'calificative'

Pre-alocarea câmpurilor şi definirea unei structuri se poate realiza folosind


şi funcţia MATLAB struct().
Câmpul unei structuri poate conţine orice tip de date, chiar şi o altă
structură. De exemplu, se poate crea o structură, fie numele acesteia “cursuri”,
care să conţină date privind cursurile susţinute de studenţi, în care un câmp va fi
alocat titlului cursului, şi alt câmp va conţine structura “student”, creată anterior:
134 MATLAB

» cursuri.titlu='Metode numerice';
» cursuri.grupa=student;
» cursuri
cursuri =
titlu: 'Metode numerice'
grupa: [1x2 struct]

Se poate aloca un al doilea element structurii “cursuri”, să presupunem,


pentru un alt curs:
» cursuri(2).titlu='Metode numerice IMT';
» cursuri(2).grupa=student;

Pentru a afişa titlurile cursurilor se foloseşte instrucţiunea:


» cursuri(1:2).titlu
ans =
Metode numerice
ans =
Metode numerice IMT

Pentru a se afişa numele studenţilor participanţi la cursuri, se foloseşte


instrucţiunea:

» cursuri(1).grupa(1:2).nume
ans =
Juan Antonio Cajigal
ans =
Luis Jimenez

MATLAB permite generarea unei liste cu “variabile separate prin virgulă”,


prin extragerea acestora din câmpurile structurii, folosind funcţia specifică deal().
De exemplu, pentru crearea unei liste conţinând numele studenţilor participanţi la
cursuri, se foloseşte instrucţiunea:
» [nume1,nume2]=deal(cursuri(1).grupa(1:2).nume)
nume1 =
Juan Antonio Cajigal
nume2 =
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

Celula este entitatea cea mai comună în MATLAB. Celula poate fi


asimilată cu un “conteiner de date” care poate conţine orice tip de date:tablouri de
valori numerice, sau şiruri de caractere, structuri sau celule.

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 ]

În această grupare de instrucţiuni, parantezele rotunde din partea stângă a


semnului de atribuire (“=”), au acelaşi rol ca şi în cazul tablourilor de valori, sau al
matricilor, având semnificaţia de referire la un anumit element al structurii
celulare. Ceea ce diferenţiază structurile celulare de tablourile de valori, este
utilizarea parantezelor acolade (“{ }”), în partea dreaptă a semnului de atribuire.
Aceste caractere (“{ }”), folosite numai în partea dreaptă a semnului de atribuire,
arată conţinutul unei celule, având rol de constructori ai structurii celulare. Dacă
aceste caractere (“{ }”), sunt folosite în alte situaţii, atunci acestea se referă la
elementul specificat în interiorul parantezelor. De exemplu, instrucţiunea:

»cellplot(c)

afişează, într-o figură separată, structura celulară “c”:


136 MATLAB

iar instrucţiunea:

»celldisp(c)

afişează, în fereastra de comandă, structura celulară “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

Apelarea, în linia de comandă, a elementelor structurii celulare, se


realizează folosind parantezele acolade, în combinaţii cu parantezele rotunde, sau
MATLAB în ingineria mecanică 137

drepte. Astfel, apelarea celulei de pe poziţia 1, respectiv afişarea conţinutului


acestei celule, se realizează cu instrucţiunea:

» c{1}
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214

Elementul de pe poziţia (2,3), al celulei 1, se apelează cu instrucţiunea:

» 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

De observat că elementele unei structuri celulare sunt “citite” pe coloană.

STRUCTURI CELULARE MULTIDIMENSIONALE

Structurile celulare multidimensionale, în MATLAB, sunt extensii normale


ale matricilor bi-dimensionale.
138 MATLAB

Trebuie reamintit faptul că matricile sunt caracterizate prin cele două


dimensiuni:numărul de linii şi numărul de coloane. Astfel, în figura de mai jos
se poate vedea că, dacă fiecare locaţie a grilei reprezintă un element al matricei,
atunci, un element al matricei poate fi accesat prin apelarea sa cu doi indici
reprezentând numărul liniei, respectiv al coloanei pe care acesta se regăseşte în
matricea dată. Structurile multidimensionale utilizează indici suplimentari pentru
apelarea unui element. Astfel, o structură tri-dimensională utilizează trei indici de
apel:
 Primul indice reprezintă linia;
 Al doilea indice reprezintă coloana;
 Al treilea indice reprezintă pagina.
Reprezentarea schematică a unei structuri multidimensionale se regăseşte în figura
următoare:

Dimensiunile structurii multidimensionale

De exemplu, pentru apelarea


unui element de pe linia 2, coloana 3
şi pagina 2 (schema alăturată ), se vor
folosi trei indici de acces (2,3,2).
Dacă se adaugă dimensiuni
suplimentare unei structuri, atunci şi
elementele vor fi accesate prin indici
suplimentari. De exemplu, pentru o
reţea cu patru dimensiuni se vor folosi
patru indici:primii doi pentru perechea
linie-coloană şi ultimii doi pentru a
treia şi a patra dimensiune.
MATLAB în ingineria mecanică 139

CREAREA STRUCTURILOR
CELULARE MULTIDIMENSIONALE

Pentru crearea structurilor celulare multidimensionale se folosesc, în


principiu, tehnici similare celor pentru generarea matricilor bi-dimensionale. În
plus, specific structurilor multidimensionale, MATLAB dispune de funcţii
speciale de concatenare. Generarea structurilor celulare multidimensionale este
posibilă prin:

A). Utilizarea indexării ;


B). Utilizarea funcţiilor MATLAB ;
C). Utilizarea funcţiei cat().

A). Generarea structurilor celulare multidimensionale prin indexare

O cale, simplă, pentru crearea structurilor multidimensionale, este de a


genera o matrice bidimensională şi apoi aceasta sa fie extinsă. De exemplu, pentru
a suplimenta, dimensiunile unei matrici, cu o pagină nouă, se procedează astfel:
 5 7 8
Considerând matricea A = 0 1 9 cu dimensiunea 3x3,
4 3 6
1. –se introduce de la tastatură matricea A:
» A = [5 7 8; 0 1 9; 4 3 6];

2. –se suplimentează dimensiunea matricei A, adăugând o pagină:

» 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

Se pot foslosi funcţiile MATLAB, cum ar fi randn(), zeros(), ones(),


pentru generarea structurilor multidimensionale, exact ca în cazul matricilor bi-
140 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

C). Generarea structurilor multidimensionale


cu funcţia MATLAB cat()

O metodă simplă pentru generarea structurilor celulare multidimensionale


o constituie utilizarea funcţiei cat(), care concatenează o listă de alte structuri pe
mai multe dimensiuni. Forma generală a funcţiei este: B = cat(dim,A1,A2...), în
care A1,A2..., reprezintă lista de structuri celulare multidimensionale, iar dim, este
dimensiunea:
» B = cat(3,[2 8 4 9;1 0 5 3],[1 3 3 5 ; 4 7 9 7])
B(:,:,1) =
2 8 4 9
1 0 5 3

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

» a = magic(3); b = pascal(3); c = cat(5,a,b)


c(:,:,1,1,1) =
8 1 6
3 5 7
4 9 2
c(:,:,1,1,2) =
1 1 1
1 2 3
1 3 6

MODIFICAREA FORMEI STRUCTURILOR


CELULARE MULTIDIMENSIONALE

Dacă nu se solicită schimbarea formei sau dimensiunilor, o reţea


multidimensională îşi păstrează caracteristicile specificate atunci când a fost creată.
Dimensiunile structurii se pot modifica prin ştergerea sau adăugarea unor elemente,
iar forma structurii se poate schimba prin specificarea unui număr diferit de linii,
coloane sau pagini. Forma generală a funcţiei MATLAB pentru modificarea formei
unei structuri este:
R=reshape(A,[s1,s2,s3,…]),

în care A este structura a cărei formă urmează a fi schimbată, iar s1,s2,s3,…,


reprezintă noile dimensiuni ale structurii cu forma schimbată. Schema de lucru a
funcţiei reshape() este reprezentată în schiţele de mai jos: (functia reshape() se
foloseste şi pentru tablouri mxn-dimensionale, respectiv în cazul Sistemelor de
Control sau ca bloc sursă pentru crearea schemelor Simulink).

Schimbarea formei structurilor


142 MATLAB

ORGANIZAREA DATELOR ÎN STRUCTURILE


CELULARE MULTIDIMENSIONALE

Structurile multidimensionale pot fi utilizate pentru stocarea şi


reprezentarea datelor în două moduri:
 Ca plane sau pagini cu date bi-dimensionale. Acestea pot fi tratate ca
matrici bi-dimensionale;
 Ca date multivariabile sau multidimensionale. De exemplu, se pot
reprezenta structuri 4-dimensionale în care fiecare element corespunde
temperaturii sau presiunii aerului măsurate într-un set de puncte ale unei
incinte.
De exemplu, dacă se consideră o imagine RGB, a cărei matrice de culoare
poate fi reprezentată ca în figura de mai jos:

sau mulţimea temperaturilor măsurate într-un număr egal de puncte:


MATLAB în ingineria mecanică 143

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 

Să se calculeze: a-b; a-c; c-a; c-b; a+d

[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

Să se calculeze : ab; ac; ca; cb.

[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

UTILIZAREA OPERATORILOR RELAŢIONALI

Mediul de programare MATLAB utilizează, pentru compararea a două


matrici cu dimensiuni identice, “element cu element”, şase operatori relaţionali:

Operatori relaţionali Semnificaţia


< Mai mic decât …
<= Mai mic sau egal cu …
> Mai mare decât …
>= Mai mare sau egal cu …
== Identic cu …
~= Diferit de …

După executarea operaţiei, MATLAB afişează o matrice, identică


dimensional cu cele comparate, având ca elemente “simbolurile” 1(unu) respectiv
0(zero), după cum relaţia dintre elementele comparate este “ADEVĂRATĂ”
(TRUE) respectiv “FALSĂ” (FALSE). Forma generală a sintaxei este:

Rezultat=expresie_1 operator relaţional expresie_2


În care :
-Rezultat- este o matrice cu elementele 0 şi 1, obţinută prin
compararea celor două expresii;

-expresie_1
-expresie_2- matricele sau expresiile matriceale care se compară ;

-operator relaţional- operatorii relaţionali definiţi în tabelul anterior.

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

MATLAB utilizează trei operatori logici principali şi unul auxiliar:

Operatori logici Simbolizare Semnificaţie Prioritate


NU ~ NOT 1
ŞI & AND 2
SAU | OR 3
SAU, exclus ŞI XOR 4
148 MATLAB

Aceşti operatori lucrează ca şi cei relaţionali, element cu element, dar


numai cu matrici sau tablouri având elemente logice: 0 sau 1. Dacă elementele unei
matrici sunt zero şi 1 sau valori diferite de zero, atunci cele diferite de zero se
setează, automat, la valoarea logică 1.

Obs: Operatorii logici nu pot fi folosiţi în


combinarea a două expresii simbolice (“syms”).

PRECEDENŢA OPERATORILOR

Precedenţa operatorilor determină ordinea în care MATLAB realizează


evaluarea expresiilor. Ordinea în care sunt executate operaţiile şi prioritatea
operatorilor, în MATLAB, este caracterizată de următoarele nivele, ordonate
dinspre nivelul superior spre nivelul inferior:
1. Parantezele ( )
2. Transpunerea (.‘), puterea (.^), transpunerea conjugată
complexă (‘), puterea matricilor (^);
3. Adunarea unară (+), scăderea unară (-), negarea logică (~);
4. Înmulţirea (.*), împărţirea la dreapta (./), împărţirea la stânga
(.\), înmulţirea matricilor (*), împărţirea la dreapta a
matricilor (./), împărţirea la stânga a matricilor (.\);
5. Adunarea (+), scăderea (-);
6. Operatorul columnar (:);
7. Operatorii relaţionali: mai mic decât (<), mai mic sau egal
decât (<=), mai mare decât (>),mai mare sau egal decât (>=),
egal cu (==), diferit de (~=);
8. Operatorul logic ŞI (&);
9. Operatorul logic SAU (|);

Prioritatea maximă o are operatorul NU, ceilalţi operatori logici având


prioritate egală, execuţia acestora fiind dată de regula “de la stânga la dreapta”.
Prioritatea “de la stânga la dreapta” generează echivalenţa între două expresii
relaţionale. Astfel, expresia a|b&c este echivalentă cu (a|b)&c. Oricum, în cele
mai multe dintre limbaje, expresia a|b&c este echivalentă cu a|(b&c), ceea ce
denotă, de altfel, prioritatea operatorului & faţă de |. Pentru a exista
compatibilitatea cu viitoarele versiuni MATLAB este indicat ca utilizatorul sa
folosească paranteze pentru a se specifica prioritatea de execuţie a operatorilor &
respectiv |. Următoarele două expresii ilustrează prioritatea operatorilor:
MATLAB în ingineria mecanică 149

1|0&0=0
0&0|1=1

Tabelul de adevăr al acestor operatori este:

Date de intrare and Or xor not


A B A&B A|B xor(A,B) ~A ~B
0 0 0 0 0 1 1
0 1 0 1 1 1 0
1 0 0 1 1 0 1
1 1 1 1 0 0 0

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

INSTRUCŢIUNILE “if “, “else”, “elseif”

Instrucţiunea ”if” (“dacă”) poate fi implementată în “format” simplu sau


în asociere cu clauzele “else” (“altfel”) respectiv “elseif” (“altfel … dacă”).
Acţiunea instrucţiunii ”if” trebuie sa se finalizeze, întotdeauna, cu instrucţiunea
”end” (“sfârşit”). Forma generală a sintaxei este:
a) if expresie_logică
grup_de_instrucţiuni
end

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

Diferenţa dintre else şi elseif se poate vedea în exemplul următor :


Instrucţiunea if- else Instrucţiunea if- elseif

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

Ex.: Să se calculeze valoarea expresiei :



 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

Rezultatul afişat de MATLAB este următorul∗:

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

INSTRUCŢIUNEA DE CICLARE « for »

Sintaxa pentru forma generală este:

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 :

n= »valoare iniţială « : « pas » : « valoare finală »

“De la …” “Până la …”

Regulile specifice buclei « for » sunt:


1) –dacă expresia atribuită indexului este un scalar, bucla se execută o
singură dată, valoarea indexului fiind valoarea scalarului
2) –dacă expresia indexului este un vector linie, bucla se execută de
« n » ori, unde « n » reprezintă dimensiunea vectorului ;
3) –dacă expresia este o matrice, indexul va « lua » toate valorile
matricei « pe coloană » ;
4) –dacă expresia este de forma : »valoare iniţială « : « pas » :
« valoare finală », iar pasul are valoare pozitivă, atunci valoarea
iniţială trebuie sa fie mai mică decât valoarea finală ;
5) –dacă expresia este de forma : »valoare iniţială « : « pas » :
« valoare finală », iar pasul are valoare negativă, atunci valoarea
iniţială trebuie sa fie mai mare decât valoarea finală ;
6) –dacă expresia este de forma : »valoare iniţială « : « valoare
finală », atunci pasul de indexare este, implicit, 1 (unu).

Un exemplu foarte simplu pentru utilitatea instrucţiunii de ciclare for, ar fi


calculul factorialului unui număr natural. Dacă se cere calculul numărului de
permutări (factorialul), aferente lui n=10, se foloseşte următoarea secvenţă de
instrucţiuni:
MATLAB în ingineria mecanică 153

n = 10;
fact = 1;
for k = 1:n
fact = k * fact;
disp( [k fact] )
end
% FINAL PROGRAM

Rezultatul afişat în fereastra de comandă, la apăsarea tastei ENTER, este:


1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800

Multe probleme în inginerie presupun dezvoltarea unui model matematic


pentru caracterizarea unui proces, în care variabila principală este actualizată ciclic
de-a lungul unei perioade de timp. Această operaţie se numeşte actualizare. Pentru
a exemplifica, se consideră un proces de actualizare a temperaturii unui corp, a
cărui temperatură iniţială este 25 oC, amplasat într-un mediu a cărui temperatură
este 10 oC, după un interval de menţinere la temperatura mediului, de 100 minute.
Modul de abordare a acestui tip de probleme este o cale standard:
 se divide intervalul de timp în sub-intervale egale (paşi), de lungime dt;
 dacă temperatura de start este Ti, atunci se va folosi următorul model
matematic, pentru calculul temperaturii la un moment i+1, Ti+1:

Ti +1 = Ti − K ⋅ dt ⋅ (Ti − Tf )

în care, K este un coeficient (valoarea K=0,05) care ţine seama de


imperfecţiunile mediului, iar Tf este temperatura finală (Tf=10 oC). Fişierul script
realizat pentru rezolvarea problemei de actualizare, stabileşte valoarea iniţială a
intervalului de timp (a=0), respectiv finală (b=100 minute). Dacă intervalul de
afişare nu este un multiplu de pasul de calcul, se va afişa un mesaj de eroare
“Intervalul de afisare nu este un multiplu de dt !”:

K = 0.05;
154 MATLAB

Tf = 10; %temperatura finala


a = 0; % momentul initial
b = 100; % intervalul de timp
Timp_initial = a; % initializarea intervalului de timp
T = 25; % initializarea temperaturii
dt = input( 'dt: ' ); % intervalul de calcul (pasul)
Intervalul_de_afisare = input('Afisarea rezultatelor la interval de
(minute):' );
if Intervalul_de_afisare/dt ~= fix(Intervalul_de_afisare/dt)
disp( 'Intervalul de afisare nu este un multiplu de dt !' );
end
format bank
disp( ' Timp Temperatura' );
disp( [Timp_initial T] ) % afiseaza momentul actualizarii si temperatura
for Timp_actualizare = a+dt : dt : b
T = T - K * dt * (T - Tf);
if abs(rem(Timp_actualizare, Intervalul_de_afisare)) < 1e-6
disp( [Timp_actualizare T] )
end
end
%FINAL PROGRAM

După ultima linie de instrucţiuni, end, (la apăsarea tastei ENTER), se


afişează, în linia de comandă un mesaj prin care se cere utilizatorului să introducă
pasul dt, apoi se cere stabilirea intervalului de afişare a rezultatelor, după un
interval de timp: “Afisarea rezultatelor la interval de (minute):”. Pentru
exemplificare, se va rula, acest fişier, în două variante (dt=0.2 şi
Intervalul_de_afisare=5, respectiv dt=0.3 şi Intervalul_de_afisare=1.33),
rezultatele fiind:

Varianta I (dt=0.2 şi Intervalul_de_afisare=5 )


dt: .2
Afisarea rezultatelor la interval de (minute): 5
Timp Temperatura
0 25.00
5.00 21.67
10.00 19.08
15.00 17.06
20.00 15.49
25.00 14.27
MATLAB în ingineria mecanică 155

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

Varianta II (dt=0.3 şi Intervalul_de_afisare=1.33 )


dt: .3
Afisarea rezultatelor la interval de (minute): 1.33
Intervalul de afisare nu este un multiplu de dt !
Timp Temperatura
0 25.00
39.90 12.01
79.80 10.27

Ex. : Să se calculeze şi să se reprezinte grafic funcţiile :


a) f = sin x dacă x ∈ [− 2π ,2π ] , cu pasul de indexare de 0,1;

 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

b) Pentru funcţia g se foloseşte secventa de program:


» m=25:-0.3:-10;
» for k=1:length(m) 25

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)

Se obţin valorile indexate ale funcţiei g∗ şi graficul din figura alăturată :

Ex.: Un fişier script care generează « petale » :


theta = -pi:0.01:pi;
rho(1,:) = 2*sin(5*theta).^2;
rho(2,:) = cos(10*theta).^3;
rho(3,:) = sin(theta).^2;
rho(4,:) = 5*cos(3.5*theta).^3;
for i = 1:4
polar(theta,rho(i,:))
pause
end


nu s-au prezentat aici valorile funcţiei, pentru acurateţea lucrării
MATLAB în ingineria mecanică 157

Ex.: O secvenţă de instrucţiuni care generează zone de culoare cu intensităţi


diferite :
[x,y,z] = peaks;
contour(x,y,z,20,'k')
hold on
pcolor(x,y,z)
shading interp
hold off

Ex. 7 O secvenţă de instrucţiuni care împarte o figură în mai multe părţi:


t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(4*cos(t));
subplot(2,2,1); mesh(X)
subplot(2,2,2); mesh(Y)
subplot(2,2,3); mesh(Z)
subplot(2,2,4); mesh(X,Y,Z)

Ex.: O secvenţă de instrucţiuni care generează o matrice:

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

Dacă se tastează numele matricei (“A”), se afişează următorul rezultat:

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

Ex. : Un fişier script de operare cu matrici:

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

Ex. : Un fişier script de operare cu matrici:

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

Ex.: Un fişier script de operare cu matrici:


coord(1,1)=-0.6;
coord(1,2)=0;
coord(2,1)=-0.9;
coord(2,2)=1.5;
coord(3,1)=-1.6;
coord(3,2)=1.8;
coord(4,1)=0;
coord(4,2)=2.7;
coord(5,1)=1.6;
coord(5,2)=1.8;
coord(6,1)=0.9;
coord(6,2)=1.5;
coord(7,1)=0.6;
coord(7,2)=0;
c(1,1)=1;
c(1,2)=2;
c(2,1)=2;
c(2,2)=3;
c(3,1)=3;
c(3,2)=4;
c(4,1)=4;
c(4,2)=5;
c(5,1)=5;
c(5,2)=6;
c(6,1)=6;
c(6,2)=7;
MATLAB în ingineria mecanică 161

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

Acest fişier script, rulat în MATLAB, la apăsarea tastei ENTER, va avea


ca efect afişarea următoarelor rezultate:

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

plot(Distanta_pe_x, Inaltimea_pe_y,'k'), grid on; hold on

După rularea fişierului se afişează invitaţia adresată operatorului de a


introduce datele de iniţializare (unghiul de lansare), şi realizarea calculelor
necesare reprezentării grafice a traiectoriei proiectilului:
Pentru cinci unghiuri de lansare diferite, rezultă graficul din figură.
164 MATLAB

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 :

[x y ] = meshgrid(-8 : 0.5 : 8);


r = sqrt(x.^2 + y.^2) + eps;
z = sin(r) ./ r;
surf(x,y,z,'facecolor','interp','edgecolor','none', ...
'facelighting','phong')
MATLAB în ingineria mecanică 169

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

bar(x,sin(x),'w'), shading faceted


subplot(3,3,6)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted
subplot(3,3,7)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted
subplot(3,3,8)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted
subplot(3,3,9)
x = 0:pi/20:pi;
bar(x,sin(x),'w'), shading faceted

[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

CALCULE NUMERICE CU POLINOAME

Pentru operarea cu polinoame, MATLAB utilizează funcţiile standard din


tabelul următor:

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

Polinoamele sunt reprezentate, in MATLAB, ca vectori linie, conţinând


coeficienţii ordonaţi după puterile descrescătoare ale variabilei. Forma generală a
polinoamelor, în scrierea algebrică:
f(x) = anxn+an-1xn-1+.....+a2x2+a1x+a0
iar reprezentarea acestuia, în MATLAB, este dată prin vectorul linie f=[a_n,a-
_n_1,...,a2,a1,a0], în care elementele sunt reprezentate de coeficienţii polinomului
de grad n. De exemplu, polinomul p(x)=x4 +7x3+x-8 se introduce astfel:

»p=[1,7,0,1,-8]

Ex. Fie polinoamele: f(x) = x3+2x2+0,5x-6,5 ; h(x)=x5+2x2-6 3 5


Aceste polinoame se scriu, în MATLAB:
»f = [1,2, 0.5, -6.5];
»h=[1,0,0,2,0,-6*(5^(1/3))];

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

Produsul a două polinoame se realizează, în MATLAB, folosind funcţia


conv() :
»c = conv(a, b)
unde :
a, b - vectorii coeficienţilor polinoamelor care se înmulţesc

Ex.:

Să se calculeze produsul : g(x) = (x2+x-2)(x+1)

-î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

Pentru realizarea împărţirii a două polinoame se foloseşte funcţia


MATLAB deconv() :

» [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 .

Determinarea rădăcinilor unui polinom

Determinarea rădăcinilor unui polinom, se realizează folosind funcţia


MATLAB roots() :
174 MATLAB

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

⇒ se obţine vectorul coloană al rădăcinilor

r=
2+i
2-i
-2

DETERMINAREA COEFICIENTILOR POLINOAMELOR


DACĂ SE CUNOSC RĂDĂCINILE

Determinarea unui polinom, dacă se cunosc rădăcinile acestuia, se


utilizează funcţia MATLAB poly():

» 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.

Problema se va rezolva prin două metode:


a)-algebric-clasic:folosind sumele Viète
b)-în MATLAB: folosind funcţia poly()
MATLAB în ingineria mecanică 175

a) Soluţia algebrică:

Folosind relaţiile Viète, se obţin sumele:

S1 = x1+x2+x3 ⇒ S1= 9
S2 = x1x2+x1x3+x2x3 ⇒ S2=26
S3 = x1x2x3 ⇒ S3= 24

Polinomul cu rădăcinile x1; x2; x3 se scrie, folosind forma generală a unui


polinom (pentru care se cunosc sumele Viète p(x)=xn-S1xn-1+S2xn-2-......-Sn )
devine: p(x) = x3-9x2+26x-24.

b) Rezolvare cu funcţia poly():

Folosind funcţia MATLAB poly(), rezolvarea este imediată:

» b=[2;3;4];
» p=poly(b)
p=
1 -9 26 -24

Polinomul p(x), în format algebric, uzual, se scrie p(x) = x3-9x2+26x-24 .


Cu funcţia poly(), se determină şi coeficienţii polinomului caracteristic al
unei matrici pătratice. De exemplu, cu secvenţa următoare, se determină polinomul
ale carui rădăcini (se mai numesc şi rădăcini caracteristice) sunt valorile proprii
ale matricei (valorile proprii ale matricei se determină cu funcţia MATLAB eig()):

» A = [1.2 3 -0.9; 5 1.75 6; 9 0 1];


» p=poly(A)
p=
1.0000 -3.9500 -1.8500 -163.2750
»radacini=roots(p)
radacini =
7.2826
-1.6663 + 4.4321i
-1.6663 - 4.4321i
» valorile_proprii=eig(A)
valorile_proprii =
7.2826
-1.6663 + 4.4321i
-1.6663 - 4.4321i
176 MATLAB

EVALUAREA NUMERICĂ A UNUI POLINOM

1) Evaluarea simplă:

Se foloseşte în cazul în care polinomul are o expresie simplă şi valoarea


atribuită variabilei este un scalar.

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

2) Evaluarea numerică element cu element

Când variabila în care se evaluează polinomul este un vector sau o matrice


problema se rezolvă respectând regulile de calcul cu matrici şi tablouri de valori:
a)- dacă variabila este un vector (linie sau coloană), calculul valorii
polinomului se poate realiza numai dacă expresia polinomului este
introdusă de la tastatură utilizând regulile pentru calculul cu
tablouri de valori (variabila este considerată de MATLAB un
tablou de valori, deci se va folosi caracterul „ . ” –punct, pentru
operaţiile în care este implicată variabila) altfel, MATLAB afişează
un mesaj de eroare:
??? Error using ==> ^
Matrix must be square.
??? Eroare la utilizarea ^
Matricile trebuie sa fie pătratice

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

Obs.:Dacă polinomul este introdus fără caracterul punct „ . „ în


faţa operatorului pentru ridicare la putere:

» f = 3*x^4-5*x^3+3*x-1

MATLAB afişează mesajul:


??? Error using ==> ^
Matrix must be square.

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

b)- dacă variabila este o matrice pătrată, iar expresia ce urmează a


fi evaluată este introdusă de la tastatură neţinând cont de modul de
lucru cu tablouri de valori, expresia este calculată astfel: se
determină „puterile” matricei după care sunt înmulţite cu
coeficienţii, rezultatele acestor înmulţiri fiind, apoi, însumate
algebric, soluţia fiind, evident, o matrice de aceeaşi dimensiune ca
şi variabila. În acest caz, polinomul f(x) devine f(X), iar termenul
liber a0 devine a0*I (unde I este matricea unitate de ordin egal cu
ordinul matricei X):

Ex.:
» x=[1,2;3,4];
» f = 3*x^4-5*x^3+3*x-1
f=
414 605
908 1323
178 MATLAB

c)- dacă variabila este un tablou de valori (numărul de linii diferit


de numărul de coloane), expresia de evaluat trebuie introdusă de la
tastatură folosind regulile de calcul specifice tablourilor de valori
(operatorii: „ .^ „ sau „ .* „) altfel MATLAB afişează un mesaj de
eroare:

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)

Evaluarea expresiilor polinomiale, în MATLAB, se poate realiza folosind


funcţia polyval():

» 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

Dacă se cere evaluarea unui polinom pe un interval în n puncte:


- se împarte intervalul în n puncte, după o regulă prestabilită;
- se evaluează polinomul folosind funcţia MATLAB polyval().

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

Derivata polinomului se calculează folosind funcţia MATLAB polyder():


» D = polyder(c)
în care:
c - vectorul linie al coeficienţilor

Ex.:
Să se calculeze derivata polinomului A(x) = x3+2x2-x+2

» A = [1 2 -1 2]
» D = polyder(A)
D=
3 4 -1

DERIVATA PRODUSULUI A DOUĂ POLINOAME

Prin definiţie, derivata produsului a două polinoame este tot un polinom,


obţinut prin relaţia:
( A(x) · B(x) )' = A'(x) · B(x) + A(x) · B'(x). Aşadar, calculul acestei derivate
implică folosirea aceleiaşi funcţii MATLAB polyder(), în care, argumentul de
intrare (înscris, întotdeauna, între paranteze rotunde), este format din vectorii linie
ai coeficienţilor celor două polinoame:

» 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

DERIVATA CÂTULUI A DOUĂ POLINOAME

Se cunoaşte faptul că derivata câtului a două polinoame este o expresie


raţională. În consecinţă, funcţia MATLAB, pentru calculul derivatei câtului a două
polinoame se introduce cu parametri de ieşire (parametrii de ieşire, în acest caz
numărătorul respectiv numitorul expresiei raţionale rezultaţi ca urmare a
calculului derivatei, se introduc în linia de comandă între paranteze drepte, în
partea stângă a semnului de atribuire, „ = „ ). Pentru calculul derivatei câtului a
două polinoame se foloseşte funcţia MATLAB polyder():

» [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

ADUNAREA ŞI SCĂDEREA POLINOAMELOR

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.

În MATLAB, întrucât polinomul h(x) are gradul III, acesta va fi „adus” la


gradul IV corespunzător polinomului g(x) prin impunerea unui coeficient „fals”
(zero):

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

DESCOMPUNEREA ÎN FRACŢII SIMPLE

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

Obs.: Dacă polul pj are ordinul m de multiplicitate expresia se scrie:


MATLAB în ingineria mecanică 183

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

În MATLAB (se vor calcula, pentru comparaţie, câtul polinoamelor A(x),


B(x); câtul respectiv restul împărţirii polinoamelor A(x), B(x) şi apoi, se va
descompune în fracţii simple expresia A(x)/ B(x)) :

» A = [1 -6 11 -6]; B = [1 -9 20];

» [Catul,Restul]=deconv(A,B)

Catul =
1 3

Restul =
0 0 18 -66

» [reziduuri_partiale, polii_fractiei, coeficientii_catului] = residue(A,B)

reziduuri_partiale =
24
-6
184 MATLAB

polii_fractiei =
5
4

coeficientii_catului =
1 3

Acest rezultat poate fi transcris, în format algebric, astfel:

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

CĂUTAREA DATELOR ÎN TABELE

a.) CĂUTAREA DATELOR ÎN TABELE UNIDIMENSIONALE

Căutarea datelor în tabele este o operaţiune utilă în situaţiile în care sunt


necesare verificări ale elementelor unei matrici sau unei serii de elemente ordonate
crescător în prima coloană. Versiunile anterioare versiunii MATLAB 5.3 dispun de
o funcţie specifică de căutare în tabele, funcţia table1(tabel, xi), în timp ce,
versiunile recente ale MATLAB dispun funcţii specifice care realizează această
operaţiune (de căutare în tablouri de date) prin interpolare. Tabelul de date trebuie
să fie organizat ca o matrice astfel încât în prima coloană se găsesc valorile lui x
(abscisa ordonată crescător) iar în celelalte coloane sunt valorile y corespunzătoare,
printre care pot fi căutate valori intermediare.

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:

» tablou_original =[-2,6; -1,2; 0,3; 2,1; 4,7];


»y1= table1(tablou_original,-1)
y1 = 2

»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

b.) CĂUTAREA DATELOR ÎN TABELE BIDIMENSIONALE

În cazul tablourilor de valori bi- dimensionale (aceste tablouri se caracterizează


prin următoarea particularitate:elementele sunt aranjate după două direcţii x şi y,
acestei perechi îi corespunde o a treia valoare z ), funcţia MATLAB utilizată pentru
căutarea valorilor z corespunzătoare unei perechi (x,y) este:

»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

versiunilor superioare ale MATLAB apare mesajul de avertizare


: „Warning: TABLE2 is obsolete and will be removed in future
versions. Use INTERP2 instead.” („Atenţie:TABLE2 este
depăşită şi va fi înlocuită în viitoarele versiuni. Folosiţi INTERP2
pentru acelaşi scop!”)

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ă;

Celelalte elemente ale matricei sunt valorile z (obţinute prin măsurători,


calcule, etc.).

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

Să se găsească valorile corespunzătoare perechilor (x,y): (-3,7); (-3,6.5); (-2,6);


(50,8); (99,9.9); (-4,8); (2,11).

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)

??? Error using ==> table2


x0 smaller than all values in first column
??? Eroare la utilizarea ==> table2
x0 este inferioară valorilor din prima coloană

»z7=table2(tablou_original_2,2,11)

??? Error using ==> table2


x0 larger than all values in first column
??? Eroare la utilizarea ==> table2
x0 este superioară valorilor din prima coloană
MATLAB în ingineria mecanică 189

INTERPOLAREA ŞI REGRESIA

În foarte multe aplicaţii practice apare necesitatea evaluării


aproximative a unei funcţii f : [a, b ] → ℜ , [a, b ] ⊂ ℜ . Problema aproximării
funcţiilor intervine în situaţii de o mare diversitate, multitudinea formulărilor şi
metodelor de rezolvare asociate constituind o reflectare directă a acestei
diversităţi.
În aplicaţii este frecvent necesară utilizarea unor funcţii pentru care sunt
cunoscute doar valorile corespunzatoare unui set discret de valori ale
argumentelor. Astfel de dependenţe pot reprezenta, spre exemplu, tabelarea unor
funcţii matematice sau a unor mărimi fizice măsurate sau calculate. Pentru
simplitatea discuţiei ne limităm în cele ce urmează la funcţii reale de o
variabilă reală. În toate cazurile, pentru funcţia considerată
[ ]
f : a, b → ℜ , [ ]
a, b ⊂ ℜ sunt specificate valorile y i într-un numar de puncte
de reţea x i ∈ [a, b ] , adică

f (x i ) = y i , i = 1, 2, 3, … , n

Prelucrarea numerică ulterioară a acestor funcţii impune adesea şi


utilizarea unor valori corespunzatoare unor argumente diferite de cele tabelate.
În multe situaţii, însă, obţinerea unor informaţii suplimentare este dificilă, dacă
nu chiar imposibilă. Astfel, chiar dacă este cunoscut algoritmul de calcul al
funcţiei, complexitatea acestuia poate face uneori ineficientă utilizarea lui pentru
detalierea iuformaţiei. Pe de alta parte, dacă valorile tabelate provin din
observaţii, ele sunt, în general, afectate de erori de măsură.
În toate situaţiile menţionate, pentru a sintetiza informaţia asupra
funcţiei tabelate f şi a o putea utiliza eficient în calcule, se impune aproximarea
ei printr-o funcţie continuă, numită funcţie model, F = F (x; a 1 , … , a m ) , care
depinde în general de un numar de parametri ajustabili, aj,-, numiţi parametri de
model. Forma funcţiei F şi valorile parametrilor aj trebuie determinate astfel
încât funcţia discretă f să fie aproximată optim într-un anumit sens.
Alegerea formei concrete a funcţiei model F este o problema netrivială
şi ea trebuie să aibă la bază o fundamentare riguroasă. În linii mari, stau la
dispoziţie urmatoarele opţiuni:
 funcţia model se alege dintr-o clasă convenabilă de funcţii (cum ar fi:
polinoame, funcţii gaussiene etc.), care oferă simplitate şi eficienţă în
prelucrări ulterioare;
 funcţia model este derivată dintr-o teorie, în cadrul careia parametrii de
190 MATLAB

model au o semnificaţie bine stabilită;


 funcţia model rezultă dintr-un compromis între constrângerile şi avantajele
opţiunilor anterioare.

Pentru a putea determina, practic, valorile optime ale parametrilor de


model, trebuie definită o funcţională care să reflecte gradul în care funcţia model
F aproximează funcţia tabelată f pentru o alegere particulară, a parametrilor.
Admiţând ca f şi F aparţin spaţiului C 2 [a, b ] al funcţiilor de pătrat sumabil pe
[a,b], o măsură sugestivă a abaterii modelului faţă de funcţia modelată este dată
de distanţa dintre cele două funcţii:

1
 b  2
d(f , F ) =  [f (x ) − F (x; a )]2 ⋅ dx 

 a 

unde s-a utilizat notaţia vectorială a ≡ (a 1 , a 2 , …) . Evident, această definiţie nu


este utilizabilă ca atare, deoarece implică şi cunoaşterea expresiei anâlitice a
funcţiei f. Se poate utiliza, însă, o definiţie mai puţin riguroasă, dar aplicabilă.
pentru funcţii discrete:
1
 n  2
d(f , F ) =  [f (x i ) − F (x i ; a )]2 

 i =1 

Aproximarea pe baza acestei distanţe este numită aproxirnare în medie


pătratică şşi este utilizată în douăa dintre cele mai importante metode de mode-
lare a funcţiilor tabelate: mterpolarea şi regresia.
Dacă, valorile tabelate y i = f (x i ) sunt considerate exacte (neafectate
de erori), este firesc să se impună anularea distanţei dintre funcţiile f şi F:

d(f , F ) = 0

Aceasta revine la construirea unei funcţii model, aparţinând unei


anumite clase, care să ia, în punctele de tabelare x i , aceleaşi valori ca şi
funcţia f(x):
F (x; a ) = y i , i = 1, 2, … , n
MATLAB în ingineria mecanică 191

Funcţia care satisface aceste condiţii este utilizată, în mod normal,


pentru aproximarea funcţiei f(x) pe intervalul [x 1 , x n ] iar procedeul se numeşte
interpolare. Funcţia F(x; a ) poartă numele de funcţie de interpolare sau
interpolant, iar nodurile x i se mai numesc şi puncte de interpolare. Geometric,
interpolarea implică găsirea unei curbe y = F(x; a ) care trece prin toate
punctele M i ( x i , y i ) . De exemplu, presupunând funcţia y=sinx, reprezentată grafic
în punctele x ∈ [− π , π ] , interpolarea în şapte puncte echidistante, ale intervalului,
este realizată cu o funcţie MATLAB specifică, şi surprinsă în imaginea alăturată.
Dacă, argumentele pentru care se evaluează interpolantul se află înafara
intervalului [x 1 , x n ] procedeul se numeşte extrapolare.
Cu un asemenea enunţ, general însă, problema poate avea o infinitate de
soluţii sau nici una, în funcţie de clasa căreia îi aparţine funcţia model.
Problema interpolarii devine neambiguă dacă în locul unei funcţii
model arbitrare căutăm un polinom Pm(x) de grad nu mai mare decat (n — 1),
care satisface condiţiile de interpolare.
Din acest set de condiţii se pot determina
cei (m+1) coeficienţi ai polinomului şi
metoda se numeşte interpolare
polinomială.Funcţiile de interpolare
polinomiale sunt cele mai utilizate în
practică. Dintre acestea amintim funcţia
Lagrange şi interpolanţii spline şi Akima
(netezi pe porţiuni). Totuşi, în anumite
cazuri se dovedesc utile şi funcţiile de
interpolare raţionale. La randul lor,
funcţiile trigonometrice conduc la aşa-
numita interpolare trigonometrică, şi la
metodele Fourier înrudite.
192 MATLAB

Dacă valorile tabelate y i = f (x i ) provin din observaţii, ele sunt


afectate în general de erori de măsurare, imprecizia fiecărei valori fiind
specificată de obicei prin deviaţia standard σ i asociată:
În astfel de cazuri, funcţia model F = F(x; a) este cu atât mai bună cu

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

nu anularea ei riguroasă ca în cazul interpolării. În mod concret, aceasta


revine la determinarea celor m parametri, a j , ai funcţiei model F(x; a),
aparţinând unei anumite clase, care minimizează suma abaterilor pătratice
punctuale ale funcţiei model faţă de datele tabelate:

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

contribuţiilor ponderate cu σ i2 de la fiecare valoare discretă yi:

2
n
∂a j 

σ a2
j
= ∑
=
i 1
σ i2 
∂ y
 i

Creşterea fără o justificare teoretică clară a numărului de parametri de


model în ideea descrierii cât mai exacte a datelor, eventual chiar a interpolării lor,
nu face funcţia model "mai bună" chiar dacă reduce valoarea funcţiei de merit, ci,
pe lângă lipsa de semnificaţie a modelului şi a parametrilor adăugaţi, poate
conduce la apariţia unor fenomene numerice greu de controlat. Interpolarea nu
trebuie privită deci, în nici un caz, ca o limită ideală a regresiei, cele două metode
de aproximare având semnificaţii diferite şi fiind aplicabile în situaţii distincte.

În general, datele experimentale reprezintă valori discrete determinate prin


diferite metode. Aceste date pot reprezenta analitic o relaţie matematică dintre
diferitele date experimentale observate şi se exprimă prin funcţii ai căror
coeficienţi se determină, în general, prin rezolvarea unor sisteme de ecuaţii lineare.
De exemplu, considerând că s-au măsurat, la momentele t = [0 .3 .8 1.1 1.6 2.3]',
valorile y = [0.5 0.82 1.14 1.25 1.35 1.40]', se reprezintă grafic dependenţa y(t) al
cărei grafic este o curbă convexă.
MATLAB în ingineria mecanică 195

METODA CELOR MAI MICI PĂTRATE


Majoritatea metodelor de aproximare, ajustare, interpolare sau extrapolare,
utilizează ca metodă de calcul a coeficienţilor, metoda celor mai mici pătrate.
Această metodă minimizează suma pătratelor reziduurilor:
n n
S= ∑ ri2 = ∑ (y i − ŷ i )2 . Reziduum-ul este calculat ca diferenţa dintre valoarea
=
i 1 =
i 1
„observată” y i şi valoarea previzionată ŷ i : r = y − ŷ i . MATLAB recunoaşte
patru tipuri de metode aplicative variante ale metodei celor mai mici pătrate:
 Metoda lineara a celor mai mici pătrate;
 Metoda ponderată a celor mai mici pătrate;
 Metoda robustă a celor mai mici pătrate;
 Metoda nelineară a celor mai mici pătrate.

METODA LINEARĂ A CELOR MAI MICI PĂTRATE

Această metodă foloseşte un model matematic linear (o funcţie de gradul


întâi) pentru aproximarea datelor: y = p 1 ⋅ x + p 2 , în care cei doi coeficienţi
urmează a fi determinaţi. Metoda se numeşte „lineară” întrucât funcţia, care
defineşte modelul matematic de aproximare, este de gradul întâi în coeficienţi.
Pentru a ilustra procesul de aproximare prin această metodă, este suficient a arăta
modul în care este rezolvată ecuaţia de gradul întâi y = p 1 ⋅ x + p 2 , în
necunoscutele p 1 şi p 2 , dacă se consideră n puncte cunoscute. Dacă se scriu cele
n ecuaţii corespunzătoare datelor cunoscute, se obţine un sistem de n ecuaţii care
n
urmează a fi rezolvat: S = ∑ (y i − (p 1 ⋅ x i + p 2 ))2 . Diferenţiind în raport cu cele
=
i 1
două necunoscute p 1 şi p 2 , întrucât metoda minimizează suma pătratelor
reziduurilor, se obţin două expresii suplimentare:

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

Aceste ecuaţii sunt rezolvabile în raport cu cele două necunoscute:


 n n n
p 1 ⋅
 i =1

x i2 + p 2 ⋅
i =1
xi = ∑
i =1

xi ⋅ y i
 n n
ale cărui soluţii

 p1 ⋅ ∑
xi + n ⋅ p2 = yi ∑
 i =1 i =1
sunt:

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 

Ceea ce se poate constata uşor, este faptul că utilizarea acestei metode


pentru aproximare şi ajustare, înseamnă doar calcule algebrice simple.
În forma matriceală, metoda lineara a celor mai mici pătrate este dată de
formula:

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

în care, XT reprezintă transpusa matricei X.


Această ecuaţie poate fi rezolvată folosind operatorul „\” (împărţire la stânga),
respectiv, folosind factorizarea QR.
Soluţia de răspuns, previzionată, ŷ , se determină cu relaţia:

ŷ = X ⋅ b = H ⋅ y ,
unde:

H = X ⋅ XT ⋅ X ( )−1
⋅ XT

In aceste condiţii, reziduurile sunt date de relaţia:

r = y − ŷ = (1 − H ) ⋅ y

METODA PONDERATĂ, A CELOR MAI MICI PĂTRATE

În evaluarea rezultatelor experimentale, a măsurătorilor, în general, se


presupune că, datele obţinute au aceeaşi „calitate”, deci şi varianţa este constantă.
Dacă această presupunere nu este validă, fiind prezente perturbaţii evidente, atunci
procesul de ajustare a reprezentărilor grafice ale datelor obţinute, este „perturbat” şi
conţine erori. În consecinţă, pentru creşterea calitătii aproximării, se poate folosi
metoda, ponderată, a celor mai mici pătrate, metodă care introduce un factor de
pondere. Această metodă minimizează eroarea estimată

n
S= ∑ w (y
i =1
i i − ŷ i )
2
198 MATLAB

în care, w i reprezintă ponderea reziduală. Această mărime arată magnitudinea


influenţei pe care o are fiecare răspuns în evaluarea finală a parametrului măsurat.
Ponderarea este recomandată acolo unde se cunosc mărimile ponderilor, sau acolo
unde este justificată o anumită comportare a acestora.
Ponderile modifică expresia vectorului b, astfel:

(
b = βˆ = X T ⋅ W ⋅ X )−1
⋅ XT ⋅ W ⋅ y ,

unde, W, este dat de elementele de pe diagonala principală a matricei ponderilor w.


Ponderile utilizate trebuie să transforme varianţa răspunsurilor în valori
constante. Dacă este cunoscută varianţa datelor, ponderea este dată prin:

1
wi =
σ2

în timp ce, dacă nu se cunoaşte varianţa, ponderile se vor aproxima cu relaţia:

−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 ROBUSTĂ, A CELOR MAI MICI PĂTRATE

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

de curbă au o pondere ridicată, iar punctele „îndepărtate” de curbă, dau


ponderi reduse (valori apropiate de zero).

Metoda ponderilor bipătrate este preferată metodei reziduurilor absolute,


întrucât prima metodă minimizează efectul valorilor extreme.
Metoda, robustă, a celor mai mici pătrate, varianta ponderilor bipătrate
utilizează un algoritm de ponderare, şi urmăreşte următoarea procedură:
1. Aproximează modelul prin ponderarea celor mai mici pătrate;

2. Se determină reziduurile ajustate, şi se „actualizează”. Reziduurile


ajustate, se determină cu relaţia:

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

în care DMA reprezintă deviaţia medie absolută a reziduurilor;

3. Calculul ponderilor robuste ca funcţie de u. Ponderile bipătrate sunt date


prin:

wi = 
 ( )
1 − (u i )2 , u i < 1
2

0, ui > 1

4. Dacă aproximarea este convergentă atunci rezultatul este corect, altfel, se


trece la o nouă iteraţie a ajustării, prin reîntoarcerea la primul pas al
procedurii.
200 MATLAB

METODA NELINEARĂ A CELOR MAI MICI PĂTRATE

MATLAB dispune de o variantă a metodei celor mai mici pătrate care


utilizează o formulare neliniară pentru aproximarea datelor. Un model nelinear este
definit printr-o ecuaţie neliniară în coeficienţi, sau o combinaţie liniară şi neliniară
(aproximarea Gauss sau aproximarea raţională de polinoame).
În forma matriceală, modelul neliniar este dat de formula:

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

Modelele nelineare sunt, în general, mai dificil de ajustat decât modelele


lineare, întrucât coeficienţii nu pot fi estimaţi prin metode matriciale simple. De
aceea, abordarea tehnicilor iterative trebuie să adopte următoarele etape:
1. Startul cu o estimare iniţială pentru fiecare coeficient;
2. Se realizează ajustarea pentru coeficienţii determinaţi. Răspunsul
aproximat este dat de relaţia:

ŷ = f ( X, β )

care implică şi calculul Jacobianului funcţiei f ( X, β ) (Jacobianul este


definit prin derivatele parţiale ale matricei în raport cu coeficienţii );
3. Ajustarea coeficienţilor şi evaluarea aproximării (în MATLAB
sunt disponibili algoritmii: a)-Trust region; b)-Levenberg-
Marquardt; c)-Gauss-Newton);
4. Iterarea procesului, prin saltul la pasul 2., atâta timp cât nu este
realizată convergenţa aproximării.

Datorită naturii procesului de aproximare în sine, nici un algoritm nu este


perfect pentru modelul neliniar al metodei celor mai mici pătrate. Din acest motiv,
atunci când rezultatele obţinute nu sunt cele aşteptate, sau apropiate de cele
aşteptate, se ia decizia schimbării metodei implicite de aproximare, mai ales că
metodele neliniare sunt sensibile la punctul de start al aproximării.
MATLAB în ingineria mecanică 201

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.

În figurile următoare se poate observa, în principiu, efectul procesului de


interpolare, pentru un set de semnale măsurate.

Semnalul original Semnalul interpolat

Fie f : [a, b ] → ℜ , [a, b ] ⊂ ℜ . Se pune problema determinării unei


funcţii F, care să aproximeze funcţia f în intervalul [a,b]. Se recurge la această
aproximare în două cazuri:
1. -când nu se cunoaşte expresia analitică a lui f, dar se
cunosc valorile sale într-un număr finit de puncte;
2. -când expresia analitică a lui f este destul de complicată şi
cu ajutorul acesteia 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, 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 numite puncte de interpolare. De asemenea se poate cere ca
202 MATLAB

anumite derivate ale lui F(x) să ia aceleaş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(a ) = f k (a ), k = 0,1,2,..., n .
(k )

MODELE PARAMETRICE
În MATLAB sunt disponibile câteva modele parametrice consacrate,
pentru interpolarea şi aproximarea datelor:

1. Funcţii exponenţiale

Există două variante ale acestui model parametric:


 Modelul exponenţial cu un termen: y = a ⋅ e bx ;
 Modelul exponenţial cu doi termeni: y = a ⋅ e bx + c ⋅ e dx ;
Funcţiile exponenţiale sunt utilizate atunci când rata modificării unei mărimi
este proporţională cu dimensiunea iniţială a acestei mărimi. În funcţie de
semnul exponentului, y este o funcţie descrescătoare (exponent negativ), sau o
funcţie crescătoare (exponent pozitiv);

2. Serii Fourier

Sunt modele reprezentate prin sume de funcţii trigonometrice


n
simple: y = a 0 + ∑=
i 1
a i ⋅ cos(nωx ) + b i ⋅ sin(nωx )

3. Modelul Gauss

Acest model este utilizat pentru aproximarea valorilor „de varf”. De


exemplu, aproximarea liniei spectrale de emisie pentru analiza concentraţiei
MATLAB în ingineria mecanică 203

chimice, poate fi descrisă printr-o aproximare Gauss. Modelul matematic


asociat, este dat de ecuaţia:
  2
 −  x −bi 
 
n   c i 
∑   
y= ai ⋅ e ,
i 1 =

unde a este amplitudinea, b este centroidul, c este dat de lăţimea relativă a


„vârfului”, iar n este numărul de „vârfuri” ce urmează a fi aproximate (
1≤ n ≤ 8 )

4. Modelul polinomial

n
Ecuaţia caracteristică acestui model este: y = ∑=
i 1
+ −
p i ⋅ x n 1 i , în care (n+1)

reprezintă ordinul polinomului, (n) reprezintă gradul polinomului. Ordinul


polinomului dă numărul de coeficienţi ce urmează a fi aproximaţi, iar gradul
polinomului arată puterea variabilei previzionate. Modelele polinomiale sunt
folosite atunci când sunt necesare aproximări empirice simple. Acestea pot fi
utilizate în cazul interpolărilor sau extrapolărilor seturilor de date.

5. Serii de puteri

Sunt disponibile două variante ale acestui model, ca şi în cazul modelului


funcţiilor exponenţiale:
 Modelul seriilor de puteri cu un termen: y = a ⋅ x b ;
 Modelul exponenţial cu doi termeni: y = a + b ⋅ x c ;

6. Expresii raţionale

Expresiile raţionale sunt date de modele matematice descrise de ecuaţii de


n

∑ 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

respectiv gradul numitorului 1 ≤ m ≤ 5 , iar coeficientul lui x m este,


întotdeauna, unu. Modelele raţionale sunt avantajoase datorită flexibilităţii
mari în cazul structurilor de date complicate, dar prezintă dezavantajul
instabilităţii accentuate atunci cănd numitorul ia valori aproape de zero.

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

Acest model este utilizat în analiza datelor statistice legate de fiabilitatea şi


de durata de viaţă a produselor. Expresia matematică
b
este: y = a ⋅ b ⋅ x b −1 ⋅ e −a⋅x , în care a este parametrul de scară iar b este
factorul de formă. Modelul matematic poate conţine un parametru suplimentar
c, centroidul, atunci când x este înlocuit cu x-c. De remarcat că distribuţia
Weibull nu aproximează datele unui set de date, ci aproximează curbele astfel
încât acestea sâ aibă forma apropiată de forma distribuţiei Weibull.

9. Modele utilizator

Modelele matematice, definite implicit, nu sunt cele mai bune modele în


toate cazurile. Din acest motiv, uneori, este necesar a se defini ecuaţii specifice
unei anumite aplicaţii. Aceste ecuaţii sunt avantajoase întrucât coeficienţii
punctului de start al iteraţiei se aleg aleatoriu din intervalul [0,1], iar pentru
calculul Jacobianului se foloseşte diferenţiala totală.

FUNCŢIILE MATLAB PENTRU INTERPOLAREA DATELOR

În tabelul următor sunt prezentate selectiv funcţiile MATLAB, utilizate


pentru interpolarea datelor:
MATLAB în ingineria mecanică 205

Funcţia MATLAB DESCRIERE


1 2
table1 - căutare în tabele şi interpolare lineară în
tabele uni-dimensionale
 În versiunile superioare ale
MATLAB este înlocuită cu funcţia
interp1
table2 - căutare în tabele şi interpolare lineară în
tabele bi-dimensionale
 În versiunile superioare ale
MATLAB este înlocuită cu funcţia
interp2
1. spline(x,y,xx) 1. interpolare spline cubică în tabele uni-
2. spline(x,y) dimensionale
2. determină componentele polinomiale ale
curbei spline de aproximare, pentru
utilizarea cu funcţia MATLAB ppval()
1. interpft(x,n) - interpolează prin metoda Transormatei
2. interpft(x,n,dim) Fourier rapide (fft)
1 2
1. interp1(x,Y,xi) - interpolează linear, spline sau cubic în tabele
2. interp1(Y,xi) uni-dimensionale
3. interp1(x,Y,xi,metoda) - căutare în tabele uni-dimensionale
1. interp2(X,Y,Z,XI,YI) - interpolează bi-linear, cubic-spline sau bi-
2. interp2(Z,XI,YI) cubic în tabele bidimensionale
3. interp2(X,Y,Z,XI,YI,metoda) - căutare în tabele bi-dimensionale
1. interp3(X,Y,Z,V,XI,YI,ZI) - interpolează date în trei dimensiuni
2. interp3(...,metoda) - căutare în tabele
1. interpn(X1,X2,X3,V,Y1,Y2,Y3,..) - interpolare lineară, spline, spline-cubică a
2. interpn(V,Y1,Y2,Y3,...) datelor multi-dimensionale
3. interpn(...,metoda) - căutare în tabele
1. griddata(x,y,z,XI,YI) - aproximează şi ajustează o suprafaţă z=f(x,y)
2. griddata(x,y,z,xi,yi) la datele vectorului tridimensional (x,y,z),
3. griddata(...,metoda) neuniform spaţiat, prin interpolarea la punctele
specificate (XI,YI), cu condiţia ca suprafaţa sa
treacă, întotdeauna, prin punctele date.
1. griddata3(x,y,z,v,xi,yi,zi) - aproximează şi ajustează o suprafaţă
2. griddata3(...,'metoda') w=f(x,y,z) dată de vectorul spaţial neuniform
(x,y,z,v), prin interpolare în punctele
specificate (xi,yi,zi)
interpstreamspeed(X,Y,Z,U,V,W,vertic - interpolează liniile de câmp prin vertex-uri,
es) pe baza datelor specificate în vectorii U,V,W,
ale căror coordonate sunt date de matricile
X,Y,Z.
206 MATLAB

INTERPOLAREA LINEARĂ

Interpolarea este o operaţie similară „căutării în tabele”. Funcţia MATLAB


interp1() interpolează între punctele date, găsind valorile unei funcţii uni-
dimensionale f(x) pe baza acestor puncte. În figura de mai jos este prezentată
schematic relaţia dintre vectorii x, Y, xi, yi.
Prin interpolarea cu funcţia MATLAB interp1() se caută elementele xi în
vectorul x, şi, pe baza locaţiilor acestora, se returnează valorile yi interpolate
printre elementele vectorului y.
În MATLAB 6 sunt disponibile mai multe variante ale funcţiei interp1():

yi = interp1(x,Y,xi)
yi = interp1(Y,xi)
yi = interp1(x,Y,xi,metoda)
yi = interp1(x,Y,xi,metoda,extrapolata)

Toate variantele de apelare a funcţiei interp1() returnează un vector yi


conţinând elementele corespunzătoare elementelor vectorului xi determinate prin
interpolarea vectorilor x şi Y. Vectorul x specifică punctele în care sunt date
valorile Y. Dacă Y este o matrice, atunci interpolarea este realizată pentru fiecare
coloană a matricei Y. Pentru realizarea corectă a interpolării este necesară
corespondenţa între dimensiunile vectorului xi şi dimensiunea matricei Y (în sensul
că aceste două entităţi să aibă acelaşi număr de linii).
Varianta yi = interp1(x,Y,xi,metoda), permite realizarea interpolării
folosind metode alternative:

'
n
e
a
r
e
s
t
'


i
n
MATLAB în ingineria mecanică 207

Dacă un element al vectorului xi se găseşte în exteriorul intervalului


cuprins de x, atunci, metoda de interpolare specificată, va fi utilizată pentru
extrapolare.

Ex. :
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];

Se cere estimarea populaţiei Statelor Unite ale Americii corespunzătoare


anului 1975, apoi să se estimeze populaţia pe fiecare an în parte începând din 1900
208 MATLAB

şi până în 2000, reprezentând grafic rezultatul obţinut.

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Ă

Interpolarea bi-dimensională se realizează prin funcţia MATLAB interp2()


care se poate apela în următoarele variante :

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)

• Oricare dintre aceste variante returnează o matrice ZI care conţine


elementele corespunzătoare punctelor (XI,YI) şi determinate prin
MATLAB în ingineria mecanică 209

interpolare în matricile X, Y şi Z, (Z este definită ca funcţie bi-dimensională


de elementele matricilor X şi Y);

• Matricile X şi Y trebuie să fie ordonate monoton crescător, şi sa fie în


acelaşi format;

• Matricile X şi Y definesc punctele în care este dată matricea Z;

• XI şi YI pot fi matrici, caz în care, funcţia interp2(), determină valorile


matricei Z corespunzătoare punctelor (XI(i,j), YI(i,j));

• Dacă funcţia interp2 este apelată cu varianta ZI = interp2(Z,XI,YI), atunci


se interpretează, automat de către MATLAB, că X = 1:n şi Y = 1:m, unde
[n, m]=size(Z);

• Varianta ZI = interp2(Z,de_n_ori) specifică repetarea interpolării bi-


dimensionale, de n ori;

• Varianta ZI = interp2(X,Y,Z,XI,YI,metoda) specifică metoda alternativă


de interpolare:
 ‘linear’ -pentru interpolare bi-lineară
 'nearest' -pentru interpolarea pe vecinătăţi
 'spline' -pentru interpolarea spline cubică
 'cubic' - pentru interpolarea bi-cubică

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

De exemplu, se cere interpolarea, pe o reţea [X,Y], a funcţiei MATLAB


peaks() (această funcţie, de două variabile, este obţinută prin translatarea şi
scalarea distribuţiilor GAUSS), pe o reţea [XI,YI] mai fină decât [X,Y] .
Soluţia este :

» [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Ă

Interpolarea tridimensională, în MATLAB, se realizează cu funcţia


interp3() care se poate apela în următoarele variante :

» 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

Oricare dintre aceste variante realizează interpolarea prin căutarea valorilor


matricei VI, reprezentând valorile intermediare ale funcţiei tridimensionale V în
punctele reţelei date de matricile XI, YI şi ZI. Matricile, sau vectorii, XI, YI şi ZI
trebuie sa fie de aceeaşi dimensiune, respectiv să fie ordonate monoton.
De exemplu, folosind şi funcţia MATLAB slice(), se interpolează datele
reţelei tri-dimensionale [x,y,z,v] = flow(10), pentru a găsi valorile corespunzătoare
punctelor [xi,yi,zi] :

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

INTERPOLAREA SPLINE, CUBICĂ

Curba spline cubică este o curbă netedă, definită de un set de polinoame


de gradul trei. Curba, « de conectare lină », dintre fiecare set de puncte este definită
printr-un polinom de gradul trei, determinat astfel încât să conducă la tranziţii
netede de la un polinom de gradul III la altul. Spre exemplu, trei puncte sunt
conectate cu două curbe de gradul trei, diferite, ceea ce constituie o funcţie netedă
între toate cele trei puncte.
Obs. : De reţinut : diferenţa dintre metoda de interpolare lineară şi interpolarea
spline, care constă în aceea că metoda spline permite « extrapolarea »,
adică se pot estima valori care nu se găsesc în setul ordonat.
212 MATLAB

Interpolarea spline cubică se face în MATLAB cu funcţia:

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

În MATLAB (considerând că au fost deja introduşi vectorii x şi y):

»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).

Cele două valori, în care se cere interpolarea vor fi introduse de la tastatură


între paranteze drepte, deci ca o matrice cu o singură linie (vector linie):

»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Ă

Funcţia MATLAB utilizată:

»interp1(x,y,xi,’regula’)

în care, argumentele au semnificaţia cunoscută, iar ‘regula’ este cuvântul cheie:

‘linear’ – interpolare lineară;


‘spline’ – interpolare spline;
‘cubic’ – interpolare cubică.

Toate „regulile” necesită ca x să fie ordonat crescător, în plus, metoda


‘cubic’ impune ca punctele x să fie egal distanţate.
MATLAB în ingineria mecanică 215

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Ă

Datele stocate în vectorul y se pot modela, de exemplu, printr-un polinom


de gradul II, ceea ce ar putea fi reprezentat analitic prin funcţia:
y = a 0 + a 1 ⋅ t + a 2 ⋅ t 2 , coeficienţii a0, a1 şi a2 determinându-se dintr-un sistem de
 y 1  1 t 1 t 12 
   2
 y 2  1 t 2 t 2  a 
 y 3  1 t 3 t 23   0 
6 ecuaţii (vectorul y are 6 elemente) cu 3 necunoscute:   =  2
 ⋅ a1  .
 y 4  1 t 4 t 4  a 
 y  1 t 2  2
 5  5 t5 
 y 6  1 t 6 t 6 
2

Presupunând că sunt date elementele vectorului t şi ale vectorului


corespondent, y, se formează matricea X, a coeficienţilor sistemului, în funcţie de
dimensiunea vectorului t, în raport de puterile întâi şi a doua ale elementelor
acestui vector:
» t = [0, 0.3, 0.8, 1.1, 1.6, 2.3]'; y = [0.5, 0.82, 1.14, 1.25, 1.35, 1.40]';X=
[ones(size(t)) t t.^2]
216 MATLAB

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

Soluţia acestui sistem este:


» a=X\y
a=
0.5318
0.9191
-0.2387

»T = (0:0.1:2.5)'; Y = [ones(size(T)) T
T.^2]*a; plot(T,Y,'-',t,y,'o'), grid on

Cu aceste date se formează


modelul matematic polinomial de ordinul
II: Y = 0,5318 + 0,9191 ⋅ t − 0,2387 ⋅ t 2 care interpolează valorile vectorului y.
Reprezentând grafic acest polinom de gradul II, suprapunând cu graficul anterior,
se obţine figura alăturată.
În această reprezentare, polinomul de interpolare este reprezentat cu „linie
continuă”, în timp ce valorile „date” sunt reprezentate cu simbolul grafic „o”.
Este evident că această curbă nu aproximează foarte exact datele
experimentale, de aceea se poate creşte gradul polinomului de aproximare, sau se
pot folosi alte metode de aproximare.

REGRESIA EXPONENŢIALĂ

Considerând ca model de aproximare o funcţie exponenţială


−t −t
y = a 0 + a1 ⋅ e + a 2 ⋅ t ⋅ e , în care parametrii ce urmează a fi determinaţi sunt
coeficienţii, aceştia se determină prin metoda celor mai mici pătrate. În acest sens,
se construieşte, şi se rezolvă sistemul de ecuatii folosind matricea X, a regresiilor:

» t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]';


» X=[ones(size(t)) exp(-t) t.*exp(-t)];
MATLAB în ingineria mecanică 217

» 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

Din această figură se observă că aproximarea cu o curbă exponenţială este


mult mai „aproape” de valorile vectorului y = [0.5 0.82 1.14 1.25 1.35 1.40]'.
218 MATLAB

REGRESIA MULTIPLĂ

În cazul în care y este o funcţie de mai multe variabile independente,


ecuaţiile matriceale, care exprimă relaţia dintre variabile, pot fi definite pentru a
include şi datele adiţionale. Astfel, dacă se presupune că, pentru doi parametri
diferiţi, definiţi vectorial, x1 = [.2 .5 .6 .8 1.0 1.1]' şi x2 = [.1 .3 .4 .9 1.1 1.4]', s-au
determinat experimental, statistic sau prin altă metodă, valorile funcţiei, şi acestea
sunt cuprinse în vectorul y = [0.17 0.26 0.28 0.23 0.27 0.24]', atunci, funcţia-
model matematic lineară, care ar putea exprima relaţia între parametri, este:
y = a 0 + a1 ⋅ x1 + a 2 ⋅ x 2 , în care ai reprezintă parametrii lineari ce urmează a fi
determinaţi. Regresia multiplă determină soluţia {a 0 , a 1 , a 2 } folosind metoda celor
mai mici pătrate. Pentru aceasta, se construieşte matricea regresiilor, X, şi se găsesc
coeficienţii necunoscuţi (a=[a0; a1; a2]):

» x1 = [3.2 4.5 7.6 8.8 1.0 3.1]'; x2 = [2.1 4.3 5.4 8.9 1.1 1.4]';
» y = [2.5 3.3 4.5 5.2 8.9 4.7]';
» X = [ones(size(x1)) x1 x2];

» a = X\y
a=
6.4905
-1.0243
0.8208

Cu aceste valori, funţia- model devine:

» y_model=6.4905-1.0243.*x1+0.8208.*x2
y_model =
4.9364
5.4106
3.1381
4.7818
6.3691
4.4643

Pentru a valida acest model, se determină valoarea maximă absolută a


deviaţiei datelor modelului faţa de datele observate:

» Y=X*a;
» eroarea_maxima=max(abs(Y-y))
MATLAB în ingineria mecanică 219

eroarea_maxima =
2.5309

Această eroare este suficient de mare pentru a invalida modelul adoptat.


Repetând raţionamentul şi calculele pentru alte valori ale vectorilor x1, x2 şi y se
obţin următoarele rezultate:

» 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

Această eroare denotă faptul că modelul poate fi validat în această variantă.

APROXIMAREA POLINOMIALĂ DE GRADUL n

Funcţia MATLAB polyfit(), determină aproximarea polinomială, în sensul


celor mai mici pătrate, a unui set de date. Sintaxa funcţiei MATLAB este:

a) » p = polyfit(x,y,n)
b) » [p,S] = polyfit(x,y,n)
c) » [p,S,miu] = polyfit(x,y,n)
220 MATLAB

Descriere:

Apelată în varianta a), funcţia p=polyfit(x,y,n), determină coeficienţii unui


polinom de gradul n, p(x), care aproximează valorile (x(i)) la y(i), în sensul celor
mai mici pătrate. Rezultatul, p, este un vector linie cu n+1 coloane, conţinând
coeficienţii polinomiali, în ordine descendentă:

p(x ) = p 1 ⋅ x n + p 2 ⋅ x n −1 + ... + p n ⋅ x + p n +1

Dacă funcţia polyfit este apelată în varianta b), cu parametrii de ieşire p şi


S, atunci, se returnează coeficienţii polinomiali în vectorul linie p, şi o structură S,
care poate fi utilizată, cu funcţia polyval, pentru estimarea erorilor de previzionare.
Apelarea cu varianta c), funcţia polyfit, determină obţinerea coeficienţilor
x − µ1
polinomului p, în variabila x̂ = , în care µ 1 = mean(x ) este valoarea medie
µ2
a variabilei x, respectiv µ 2 = std(x ) deviaţia standard, calculată cu relaţia
n n
s=
1
⋅ ∑ (x i − x )2 1
, în care x = ⋅ ∑x i ,iar miu ( parametrul de ieşire, în
n−1 =
i 1
n i =1
cazul celei de-a treia variante de apelare a funcţiei polyfit), este vectorul
miu = [µ 1 , µ 2 ] .
De exemplu, dacă se consideră setul de date măsurate x-y, şi se doreşte
aproximarea datelor cu o curbă polinomială de gradul III, atunci secvenţa
MATLAB următoare, determină afişarea grafică a rezultatelor aproximării:

» x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4];


» p = polyfit(x,y,3)
p=
-0.1917 31.5821 -60.3262 35.3400

Polinomul de aproximare este:

p(x ) = −0,1917 ⋅ x 3 + 31,5821 ⋅ x 2 − 60,3262 ⋅ x + 35,34

» 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

Reprezentarea grafică a acestei aproximări este redată în figură:

Valoare aproximată
X2aproximat=4,5
Y2aproximat=385.9449

Valoare
măsurată
x=2
y=43,1

EROAREA APROXIMĂRII

Orice aproximare numerică implică şi existenţa erorilor. O discuţie privind


erorile de aproximare trebuie sa înceapă avand ca suport asumarea presupunerii că
erorile apar doar în răspunsuri, niciodată în setul de date previzionate, respectiv
presupunerea că erorile au o distribuţie normală (distribuţie Gauss), faţă de zero
(ca medie) şi cu varianţa constantă (de valoare σ 2 ).
Presupunerea ca distribuţia erorilor să fie normală, trebuie să fie validă
întrucât aproximarea, prin orice metodă, este adecvată doar în cazul unei distribuţii
normale a cantităţilor aproximate. Această presupunere are la bază faptul că
probabilitatea existenţei unor valori extreme în setul de date este mică şi metoda de
aproximare prin cele mai mici pătrate are aplicabilitate validă.
Media zero a erorilor înseamnă că acestea au o apariţie pur aleatoare. Dacă
media erorilor nu este zero aceasta se poate datora faptului că modelul ales nu este
cel convenabil, sau că erorile nu sunt aleatorii, respectiv că există erori sistematice.
222 MATLAB

Varianţa constantă arată faptul că erorile au o împrăştiere constatntă.


Datele cu aceeaşi varianţă se numesc date de aceeaşi calitate. Presupunerea că
varianţa datelor este constantă nu implică şi o ponderare în sensul aproximării celor
mai mici pătrate. Aceasta se poate observa şi din procedura de aproximare, unde se
presupune că există diferite nivele ale ponderilor, deci calităţi diferite ale datelor.
Din acest motiv se utilizează ponderile în metoda celor mai mici pătrate, pentru a
ajusta influenţa fiecărei valori din setul de date şi a corecta coeficienţii aproximării.
Pentru determinarea varianţei există două relaţii analitice de calcul:

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

În MATLAB eroarea de aproximare este determinată cu funcţia specifică


erf(x). Matematic această funcţie este dată de relaţia: erf ( x ) = 2 ⋅ Φ( x 2 ) − 1 , în
care Φ( x ) este o funcţională ce determină analitic distribuţia normală standard
după o relaţie empirică:

− ( x − µ )2
1 2σ 2
Φ( x, µ , σ ) = ⋅e
σ ⋅ 2π

în care simbolurile utilizate au semnificaţia definită în cazul aproximării şi


regresiei polinomiale, respectiv în cazul metodei celor mai mici pătrate.
Funcţia MATLAB erf(x) determină valoarea erorii de aproximare a
funcţiei model, pentru fiecare valoare a elementelor matricei x. Această eroare este
determinată prin integrala definită a distribuţiei normale, când media normată este
setată la zero, iar valoarea varianţei este 1/2:

x
2 2
erf ( x ) =
π ∫0
⋅ e − t ⋅ dt

Pentru a se demonstra limitele procedeului de aproximare, printr-o funcţie


polinomială, se va prezenta un exemplu, ilustrativ. Se generează un vector, uniform
spaţiat, x=0:0.1:2.5, şi se determină, cu funcţia MATLAB erf(), distribuţia Gauss a
erorilor
» x = (0: 0.1:2.5)';
» y = erf(x);
MATLAB în ingineria mecanică 223

Coeficienţii polinomului de aproximare, de gradul VI, sunt determinaţi cu


funcţia MATLAB polyfit():

»p = polyfit(x,y,6)
»p=
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004

Pentru a determina cât de apropiată este ajustarea polinomială, se va evalua


polinomul p(x) în punctele vectorului x, şi se afişează tabelar valorile:x, y, valorile
polinomului de aproximare, abaterea valorilor polinomului faţă de valorile y:

» 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

Se poate observa că, pe acest interval, ajustarea polinomială este relativ


corespunzătoare, dar, dacă se extinde intervalul (vectorul x devine x=0:0.1:5),
reprezentarea grafică arată ca aproximarea devine neconformă, aceasta
deteriorându-se rapid:

»x = (0: 0.1: 7)';


» y = erf(x);
» f = polyval(p,x);
» plot(x,y,'x',x,f,'-.'),axis([0 5 0 2])

Folosind o altă facilitate oferită de MATLAB, polytool(x,y), care este o


aproximare polinomială de grad n interactivă, se pot observa, în urma câtorva
manevre simple şi intuitive, schimbările intervenite în aproximarea prin polinoame
de diferite grade. Această facilitate oferă un instrument deosebit în analiza erorilor
şi curbelor de aproximare polinomiale, fiind uşor de observat care model
polinomial este cel mai adecvat în aproximarea pe un anumit interval finit.
Interfaţa grafică polytool realizează aproximarea între un vector coloană x
şi corespondentul y al acestuia. Interfaţa se activează prin introducerea de la
MATLAB în ingineria mecanică 225

tastatură a vectorilor „ţintă”, x şi y, respectiv a funcţiei specifice polytool(x,y).


Modificarea gradului polinomului de aproximare prin regresie este posibilă în
caseta Degree, în care este necesară înscrierea gradului polinomului ( 1 ≤ n ≤ 10 ).
Valorile interpolate sunt afişate în mod curent, pentru cele două axe, dacă
reprezentarea grafică este bi-dimensională, respectiv în coordonate 3D, dacă din
meniul Tools, se modifică aspectul imaginii. Presupunând vectorul x = (0: 0.1: 7)',
şi valorile funcţiei y=erf(x), se va realiza aproximarea interactivă cu instrucţiunile:

» x = (0: 0.1:7)';
» y = erf(x);
» polytool(x,y,6)

obţinându-se imaginea:

Aceeaşi figură transpusă şi rotită 3D:


226 MATLAB

Există şi alte funcţii MATLAB specifice, pentru aproximare interactivă,


precum aoctool care este sinonimă funcţiei polytool, obiectivul principal al
acesteia fiind, însă, analiza covarianţei modelului de aproximare.
MATLAB în ingineria mecanică 227

CAPITOLUL VII

AJUSTAREA ŞI APROXIMAREA DATELOR

NOŢIUNI GENERALE

Observaţiile experimentale sunt, în general, seturi de date discrete care, pot


fi organizate ca vectori coloană sau matrici, în care, liniile reprezintă rezultatele şi
observaţiile la un moment dat. De exemplu, dacă se presupune că, în anumite
momente ale zilei s-a determinat frecvenţa traficului de autovehicule, în trei puncte
diferite, ale unei localităţi, aceste date ar putea fi stocate tabelar. Datele stocate în
tabelul alăturat pot fi, de asemenea, aranjate, într-o matrice cu dimensiunea 24x3:

»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

Matricea trafic, a observaţiilor zilnice, poate fi utilizată în analize şi


prelucrări matematice ulterioare. În acest sens, presupunând necesară reprezentarea
grafică, pentru vizualizarea traficului, la un moment dat (considerând reperele orare
date de vectorul t=1:24), se foloseşte următoarea secvenţă 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)

In practica inginerească este necesar, atât în analiza rezultatelor


experimentale, cât şi pentru emiterea unor concluzii, ca datele obţinute să fie
aproximate prin curbe polinomiale, exponenţiale sau de altă natură.
MATLAB în ingineria mecanică 229

UTILIZAREA GUI (GRAPHICAL USER


INTERFACE- INTERFAŢA GRAFICĂ UTILIZATOR)
PENTRU AJUSTAREA DATELOR

Cea mai rapidă şi eficientă procedură de ajustare, aproximare, interpolare


şi extrapolare a datelor experimentale, este Interfaţa Grafică Utilizator
(Graphical User Interface-GUI ), disponibilă în MATLAB, versiunile superioare
(Release 12 sau 13). Informaţii complete, privind această procedură, se regăsesc în
documentaţia de ajutor din meniul Help opţiunea Full Product Family Help.
Accesarea interfeţei grafice (pentru simplificarea exprimării se va folosi, în
continuare, sintagma GUI) pentru ajustarea datelor, se introduce, în fereastra de
comandă MATLAB, comanda:

» cftool

Această comandă are ca efect activarea interfeţei grafice Curve Fitting Tool
(Instrument de ajustare a curbelor):

Dacă în fereastra de comandă a MATLAB, exista vectori coloană de


aceeaşi dimensiune, aceştia vor fi selectaţi automat de editorul de ajustare şi stocaţi
în vederea prelucrării. Altfel, se impune introducerea sau importarea datelor în
vectori coloană.
230 MATLAB

PROCEDURA DE AJUSTARE

Procedura de ajustare va fi prezentată aici pentru un caz specific: ajustarea


datelor cuprinse în doi vectori coloană y şi t. Se presupune că în linia de comandă
s-au introdus vectorii y şi t:

» t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]';

1. -se introduce comanda pentru activarea interfeţei grafice a ajustării:

» cftool

• -Se accesează butonul Data... care activează o interfaţă grafică ce permite


selectarea valorilor care urmează a fi ajustate pe axa X, respectiv pe axa
Y şi ponderea acestor date (dacă aceasta este „None” valoarea ponderii
este implicit 1 ). Atunci cănd se selectează un anumit vector pe o axă, în
medalion se reprezintă grafic valorile vectorului respectiv. De asemenea
această interfaţă permite definirea unui set nou de valori, un vector în
funcţie de altul, de exemplu, prin accesarea butonului Create Data Set.

• Se închide sesiunea acestei interfeţe grafice cu butonul Close.

2. -Din interfaţa grafică Curve Fitting Tool se accesează butonul Fitting... al


cărui efect este deschiderea editorului de ajustare compus din două părţi
distincte: editorul propriu-zis, Fit Editor, şi tabloul ajustărilor, Table of
Fits.

Editorul ajustării , Fit Editor, permite acţiuni pentru:

 Specificarea numelui ajustării curente, setarea datelor curente şi stabilirea


regulii de excludere;

 Explorarea diferitelor metode de ajustare ale seturilor de date curente,


folosind o bibliotecă de ecuaţii, metode de ajustare spline şi interpolanţi;

 Suprareglarea opţiunilor implicite de ajustare (cum ar fi metoda


identificării coeficienţilor);

 Compararea rezultatelor ajustării;


MATLAB în ingineria mecanică 231

Tabloul ajustărilor , Table of Fits, permite


 Monitorizarea datelor şi ajustărilor anterioare;
 Afişarea unui sumar al rezultatelor ajustării;
 Salvarea sau anularea rezultatelor ajustării.
Se accesează butonul New fit care alocă automat un nume implicit
ajustăriii curente. Presupunem că aceasta se va numi ajustarea_1, iar cu
următoarea opţiune, Data set, se defineşte setul de date (presupunem că acesta este
setul t vs. y, adică vectorul t, în funcţie de y) care va fi ajustat în cele ce urmează şi
va fi numit, în continuare, ajustarea_1. Se selectează un alt set de date, definit
anterior (presupunem că acesta este setul y vs. t, adică vectorul y, în funcţie de t),
şi acesta va fi numit în continuare ajustarea_2. Se alege aproximarea polinomială,
iar în următoarea secţiune se va selecta ajustarea polinomială cuadratică (printr-un
232 MATLAB

polinom de gradul doi: f(x) = p1*x^2 + p2*x + p3). Se validează opţiunea


Immediate apply, ceea ce va avea drept efect afişarea rezultatelor în caseta
Results. În paralel MATLAB prelucrează datele în funcţie de opţiunile setate şi
selecţiile operate, fiind afişate, în fereastra interfeţei grafice Curve Fitting Tool
reprezentările grafice ale celor două seturi de date, atât cele discrete cât şi cele
previzionate, ajustate.

3. Din meniul View al interfeţei grafice Curve Fitting Tool se selectează


opţiunea Residuals-Line Plot:
MATLAB în ingineria mecanică 233

care permite, şi realizează, reprezentarea grafică a reziduurilor ajustării, fiind dată


o măsură reală a mărimii erorilor de aproximare, în diferite puncte ale seturilor de
date ajustate. Reprezentarea grafică a reziduurilor arată că o ajustare mai bună este
posibilă, sau nu. În funcţie de mărimea erorilor de calcul şi a distanţei faţă de
valorile discrete efective, se poate lua decizia unei ajustări ulterioare, pentru
creşterea calităţii aproximării, prin metode şi tehnici multiple.

DETERMINARTEA CELEI MAI BUNE AJUSTĂRI

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ă:

Din aceste reprezentări


se poate deduce că este dificil a
decide care dintre
polinoameoferă cele mai bune
rezultate pentru aproximare sau
ajustare, întrucât diferenţele
234 MATLAB

reziduale sunt nesemnificative, iar, prin comparaţie, ajustarea exponenţială cu un


singur termen este evident neacoperitoare, datorită gradului mare de
incompatibilitate şi concordanţă cu datele discrete.Setul de date ajustate se poate
vizualiza accesând butonul Data..., caseta Data sets, opţiunea View:

În continuare, se foloseşte interfaţa grafică Curve Fitting Tool, butonul


Plotting... pentru a elimina metoda de ajustare printr-o funcţie exponenţială,
invalidând caseta corespunzătoare, această metodă dovedindu-se a fi neconcludentă
pentru ajustarea datelor celor doi vectori:
MATLAB în ingineria mecanică 235

Pentru a examina, datele extrapolate prin cele trei expresii polinomiale de


diferite grade, se vor modifica limitele axelor folosind meniul Tools, opţiunea Axis
Limit, prin modificarea limitei superioare a limitei X Upper Limit la valoarea
2050, ceea ce va permite extrapolarea, prin cele trei expresii polinomiale, a valorii
vectorului populatia_USA corespunzătoare acestui an:

Se constată că extrapolarea printr-un polinom de gradul 7 va genera o


valoare extrapolată, pe baza datelor existente, mult diferită de celelalte valori,
demonstrând neconcordanţa evidentă cu datele extrapolate prin celelalte expresii
polinomiale.
Acest exemplu ilustrează, foarte clar, că alegerea unei metode de
extrapolare trebuie făcută cu mare atenţie, în funcţie de mai mulţi factori care ar
putea influenţa asupra corectitudinii rezultatelor.
236 MATLAB

EXAMINAREA REZULTATELOR NUMERICE

Examinarea reprezentărilor grafice ale aproximărilor, din exemplul


anterior, demonstrează că este necesară o procedură suplimentară pentru a decide
care dintre variantele alese pentru ajustarea datelor din vectorul populatia_USA
este varianta cea mai apropiată de varianta corectă. Pentru aceasta este nevoie de
studiul rezultatelor numerice, care sunt asociate procedurii de aproximare propriu-
zisă. MATLAB oferă două tipuri de rezultate numerice, afişate in interfaţa grafică
Curve Fitting Tool -
>Fitting ->Results şi
Table of Fits: concordanţa
rezultatelor aproximării
respectiv intervalul de
confidenţă. Concordanţa
rezultatelor arată cât de
bine sunt aproximate
datele, iar intervalul de
confidenţă reflectă precizia
rezultatelor. Pentru a
evidenţia rezultatele
numerice ale ajustării
datelor, se consideră
ajustarea polinomială de
grad 2, 3, 4, 5 şi 6,
respectiv aproximarea
exponenţială cu un singur
termen, a datelor conţinute
în vectorul
populatia_USA, relativ la
vectorul anii_de_referinta,
pentru care s-au obţinut
rezultatele numerice din
figura alăturată:

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

În această sesiune sunt validate titlurile coloanelor care vor apărea în


tabelul Table of Fits. Opţiunea SSE (Sum of Squares Due to Error), este o
marime statistică ce se referă la mărimea deviaţiei valorii de răspuns a ajustării,
faţă de valoarea dată, calculată ca suma pătratelor erorilor în funcţie de mărimea
n
reziduurilor. Acest parametru este definit prin ecuaţia SSE = ∑ ω i (y i − ŷ i ) , în
2

=
i 1
care ω i reprezintă mărimea reziduului (determinate, şi afişate, în MATLAB, cu
opţiunea Residuals din meniul View):
238 MATLAB

iar yi şi ŷ i sunt datele aproximate respectiv previzionate. Valorile reziduale se pot


1
determina dacă se cunoaşte varianţa datelor ( σ ), cu relaţia ω i = 2 , sau se poate
σ
−1
1 n 
aproxima cu relaţia ω i = 
n
( y i − y i )2  , dacă nu se cunoaşte varianţa
∑ 
 i =1 
datelor, în care y i reprezintă valoare medie evaluată statistic.
R-square reprezintă raportul dintre suma pătratelor regresiilor (sum of
squares of the regression -SSR) şi suma totală a pătratelor (total sum of squares
n

∑ ω 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

valoarea calculată a coeficientului este 0.006541, limita inferioară 0.006124


respectiv limita superioară 0.006958. Implicit, nivelul de siguranţă este 95%, şi se
poate modifica din interfaţa Curve Fitting Tool meniul View, opţiunea
Confidence level. Limitele de siguranţă pot fi calculate şi afişate grafic din
interfaţa Curve Fitting Tool meniul View, opţiunea Prediction Bounds, sau cu
opţiunea Analysis din interfaţa Curve Fitting Tool.

SALVAREA REZULTATELOR AJUSTĂRII

Din interfaţa Fitting, accesând butonul Save to workspace..., se salvează


întregul proces de ajustare, prin validarea celor trei opţiuni:

• prima opţiune salvează ajustarea ca obiect MATLAB


240 MATLAB

• a doua opţiune salvează, într-o structură multidimensională,


concordanţa ajustării:

• cea de-a treia opţiune salvează rezultatele ajustării, oferind informaţii


asupra parametrilor numerici ai ajustării
MATLAB în ingineria mecanică 241

ANALIZA REZULTATELOR AJUSTĂRII

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

Rezultatele extrapolării se pot salva, similar procesului de ajustare propriu-


zisă

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

»x = [4:0.1:7 9:0.2:12]' ;c = [8 -5 13 12]; y = c(1) + c(2)*x + c(3)*x.^2 +


c(4)*x.^3 + (rand(size(x))-0.5);
»cftool

Urmând procedura enunţată, se realizează ajustarea cu cele trei curbe


polinomiale. Analiza rezultatelor permite, din interfaţa Curve Fitting Analysis,
manevre ale reprezentării grafice, utilizând facilităţile de prelucrare şi animaţie a
figurilor, permise de MATLAB Release 12 şi superioare acesteia:
MATLAB în ingineria mecanică 243
244 MATLAB

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

Folosind butonul Table options..., se validează parametrii numerici ai


ajustării, parametri care vor fi cuprinşi în tabelul Table of Fits. Afişarea
rezultatelor şi reziduurilor ajustării se realizează selectând opţiunea Residuals-Plot
line, din meniul View al interfeţei grafice Curve Fitting Tool:

Este uşor de observat că sunt „zone” în care aproximarea nu este


acoperitoare: lipsesc parametrii şi rezultatele ajustării:
246 MATLAB

Se încearcă, în consecinţă o altă ajustare, de tipul raţională polinomială cu


polinoame de gradul III, atât la numărător cât şi la numitor:

Acest tip de aproximare, se observă din interfaţa Fit Editor câmpul


Results, este neconvergentă, ceea ce anulează posibilitatea alegerii unei astfel de
ajustări pentru acest set de date, fiind, astfel necesară o altă ajustare.
MATLAB în ingineria mecanică 247

Modificarea expresiei raţionale de ajustare, astfel încât polinomul de la


numărător să fie de gradul III, iar cel de la numitor, de gradul II, are ca rezultat o
aproximare mult îmbunătăţită, reziduurile fiind aleatoriu distribuite faţă de valoarea
zero, ceea ce înseamnă o ajustare realistă:

În câmpul Results al interfeţei Fit Editor, sunt prezentaţi parametrii


ajustării, şi coeficienţii modelului matematic al acesteia. Interfaţa Curve Fitting
Tool, prezintă, în câmpul Residuals, dispersia cvasi-uniformă a reziduurilor, în
raport cu „linia zero”. Acest aspect al dispersiei este o măsură a unei aproximări
corecte şi valabilă pentru acest set de date.

Aprecierea unei ajustări este relativ dificil de realizat pentru un număr


mare de date pentru un set aleatoriu de curbe de ajustare. Astfel, în acest proces
este foarte posibil să apară şi rutina examinării concordanţei, respectiv auto-
suficienţa utilizatorului. Din acest motiv, după evaluarea ajustării prin examinarea
graficelor rezultate, foarte importantă este evaluarea numerică a ajustării, ceea ce
presupune:
• evaluarea reziduurilor;
• evaluarea concordanţei;
• aprecierea confidenţei rezultatelor şi previzionarea limitelor de varianţă.
248 MATLAB

Aceste aspecte sunt determinante în aprecierea calităţii unei ajustări


numerice corecte şi conforme, în proporţie determinantă, cu datele măsurate şi
ajustate.
Aceste operaţii pot fi grupate în două categorii: numerice şi grafice. În
timp ce reziduurile şi predicţia limitelor de varianţă sunt măsuri grafice,
concordanţa, respectiv predicţia limitelor de varianţă sunt determinări numerice.
Metodele grafice de apreciere a ajustării sunt mult mai expresive şi uşor de
evaluat calitativ, nefiind necesară o pregătire deosebită în acest sens, în timp ce
analiza numerică a ajustării este mai puţin comprehensivă datorită faptului că
valorile numerice pot include multe informaţii greu de diferenţiat în cazuri
specifice. Este evident că sunt posibile multe situaţii în care ambele tipuri de
metode să fie folosite pentru evaluarea aceleiaşi ajustări. Adoptarea uneia dintre
metode în defavoarea alteia este determinatîn, primul rând, de înţelegerea
procesului de ajustare, apoi de modelul parametric de ajustare ales. Semnificaţia
fizică a coeficienţilor unui anume model matematic este esenţial a fi corect
înţeleasă, fiind nevoie, în plus, de evaluarea prin mai multe metode şi modele de
ajustare, pentru aflarea celei mai apropiate soluţii.
Anterior, a fost prezentată metodica afişării reziduurilor unei ajustări,
respectiv a fost prezentat modul de calcul al mai multor coeficienţi şi parametri ai
ajustării. Printre aceştia, unul dintre cei mai importanţi paşi ai evaluării unei
ajustări, este calculul limitelor de varianţă. Aceste limite sunt calculate pentru două
variante: predicţia simultană, respectiv predicţia nesimultană. Predicţia simultană
se referă la confidenţa tuturor rezultatelor ajustate, în timp ce confidenţa unui
anume parametru generează o predicţie nesimultană.
Evaluarea metodelor de ajustare, prin estimarea, calitativă sau cantitativă, a
erorilor de aproximare şi prin cuantizarea numerică, sau nu, a reziduurilor, este,
aşadar, o operaţiune care implică o bună pregătire a întregului proces de
aproximare sau ajustare. Nu pot exista valori sau coeficienţi de corecţie pentru
estimarea erorilor de ajustare sau aproximare. Aceste limite sunt definite, sau
prescrise de către utilizator, şi depind, în cea mai mare măsură de ceea ce se
urmăreşte prin întregul proces de aproximare sau ajustare. Ne-existând reţete
pentru acest tip de operaţiuni, se impune, de la sine, o concluzie: pregătirea unei
baze solide în domeniul ajustării numerice, prin orice metodă, se constituie ca fiind
cheia unor rezultate eficiente şi corecte.

Notă: În Anexă este prezentat un fişier script, demonstrativ, care


surprinde o multitudine de funcţii MATLAB, şi care realizează
estimarea parametrilor tehnologici şi de transformare, ai legii de
deformare superplastică.
MATLAB în ingineria mecanică 249

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

[15] LEWIS, P.E.,ş.a. - The Finite element Method. Principles and


Applications, Addison Wesley Publishing Company, London, 1991 .
[16] LUNGU, N. - Matematici cu aplicaţii tehnice, Editura Tehnică,
Bucureşti,1990 .
[17] MARCIUK, G.I - Metode de analiză numerică, Editura Academiei
Române, Bucureşti, 1983, trad. din lb. rusă .
[18] MARINESCU, GH. et al. –Probleme de analiză numerică, Ed. Didactică şi
Pedagogică, Bucureşti, i978.
[19] MOSZYNSKI, K.-Metode numerice de rezolvare a ecuaţiilor diferenţiale
ordinare, Ed. Tehnică, Bucureşti, 1973.
[20] MUNTEANU, M. - Metoda elementului finit, Reprografia
Universităţii « Transilvania », Braşov,1997.
[21] PASCARIU, I -Elemente finite. Concepte, aplcaţii, Editura
Militară,Bucureşti, 1985.
[22] POTERAŞU, V.F.,ş.a..-Metode numerice în elasticitate şi plasticitate,vol.
I, Editura Academiei Române, Bucureşti, 1993 .
[23] OLARIU, V.,ş.a.. - Modelare numerică cu elemente finite, Editura
Tehnică, Bucureşti, 1986 .
[24] SALVADORI, M.-Metode numerice în algebră, Editura Tehnică,
Bucureşti, 1972
[25] SAWCZUK, A.,ş.a. - Teoria plasticităţii, Editura Tehnică, Bucureşti,
1970, trad. de prof. dr. ing. N. Cristescu .
[26] SIMIONESCU, I. et al.-Metode numerice în tehnică, Ed. Tehnică,
Bucureşti, 1995.
[27] VOINEA, R.,ş.a. -Introducere în mecanica soliduli cu aplicaţii în
inginerie, Editura Academiei Române, Bucureşti, 1989 .
MATLAB în ingineria mecanică 251

ANEXĂ

PROGRAM PENTRU DETERMINAREAPARAMETRILOR


DE INTRARE AI SIMULĂRII PROCESULUI DE
DEFORMARE SUPERPLASTICĂ

Programul este astfel realizat încât să nu fie necesare comenzi suplimentare


pentru executarea încărcării datelor experimentale, pentru plotarea graficelor pe
baza calculelor, respectiv pentru executarea unor opţiuni.
Comanda programului poate fi realizată atât din fereastra de
comandă(Command Window) cât şi prin intermediul casetelor de dialog(msgdlg
sau msgbox) sau al butoanelor.
Programul determină prin calcul direct parametrii tehnologici ai deformării
superplastice pentru diferite situaţii impuse, fiind organizat astfel:
-liniile de ajutor şi informaţii sunt de culoare verde;
-şirurile de caractere sunt marcate cu culoarea roşie;
-buclele if- else- end sau buclele for- end, sunt marcate cu culoare
albastră, ca de altfel toate instrucţiunile Matlab.

%Program de analiza a dependentei


%dintre parametrii deformarii superplastice.
%Programul foloseste ca date de intrare
%rezultate experimentale stocate
%in fisierul "date.dat";
%Pentru exemplificare s-au introdus cele sase matrici cu valori
%experimentale in cadrul programului
% Incarcarea datelor
%(liniile 12 -17 sunt transformate in "comentarii"
%in cazul exemplificarii; altfel sunt linii de program)
%load k;
%load temp;
%load mar_gr;
%load eps;
%load m;
%load sigma;
%matricea conţinând valorile consistenţei mecanice;
k=[ 2780 3550 4005 4530 5110 5780 6140 6730 ;
1810 2310 2780 3140 3770 4005 4260 4530 ;
570 870 1180 1510 1810 2180 2610 2950 ;
60 90 140 210 350 540 730 1420 ;
2410 3070 3680 4410 4980 5620 5970 6740 ;
252 MATLAB

1160 1670 2130 2720 3260 3680 4150 4690 ;


200 290 390 560 860 1160 1400 1670 ;
70 100 150 260 420 560 860 1160 ;
390 530 710 970 1490 2140 2910 3710 ;
180 250 320 470 710 970 1400 2020 ;
110 170 220 300 470 630 910 1320 ;
55 85 120 170 250 390 560 860 ];
%matricea conţinând valorile temperaturii
temp=[ 299 299 299 299 299 299 299 299 ;
333 333 333 333 333 333 333 333 ;
393 393 393 393 393 393 393 393 ;
443 443 443 443 443 443 443 443 ;
299 299 299 299 299 299 299 299 ;
333 333 333 333 333 333 333 333 ;
393 393 393 393 393 393 393 393 ;
443 443 443 443 443 443 443 443 ;
299 299 299 299 299 299 299 299 ;
341 341 341 341 341 341 341 341 ;
363 363 363 363 363 363 363 363 ;
393 393 393 393 393 393 393 393 ];
%matricea continand dimensiunea grauntilor;
mar_gr=[ 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5
7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5;
7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5;
7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5;
5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5;
5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5;
5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5;
5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5;
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0;
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0;
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0;
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0];

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

0.5 0.4 0.36 0.29 0.21 0.17 0.15 0.13;


0.26 0.49 0.65 0.54 0.46 0.39 0.3 0.22;
0.45 0.58 0.63 0.62 0.58 0.53 0.46 0.38;
0.29 0.41 0.47 0.5 0.51 0.48 0.44 0.37;
0.37 0.43 0.46 0.49 0.51 0.51 0.5 0.48;
0.44 0.43 0.45 0.47 0.5 0.52 0.52 0.51;
0.45 0.51 0.52 0.53 0.53 0.55 0.57 0.59];
%matricea rezistenţelor la deformare;
sigma=[ 19.167544 24.47654 27.613674 31.233444 35.232428 39.851944
42.334072 46.402004;
12.479588 15.926988 19.167544 21.649672 25.993396 27.613674
29.371848 31.233444;
3.930036 5.998476 8.135864 10.411148 12.479588 15.030664
17.995428 20.33966;
0.413688 0.620532 0.965272 1.447908 2.41318 3.723192
5.033204 9.790616;
16.616468 21.167036 25.372864 30.406068 34.336104 38.748776
41.161956 46.470952;
7.997968 11.514316 14.685924 18.753856 22.477048 25.372864
28.61342 32.336612;
1.37896 1.999492 2.688972 3.861088 5.929528 7.997968
9.65272 11.514316;
0.482636 0.68948 1.03422 1.792648 2.895816 3.861088
5.929528 7.997968;
2.688972 3.654244 4.895308 6.687956 10.273252 14.754872
20.063868 25.579708;
1.241064 1.7237 2.206336 3.240556 4.895308 6.687956
9.65272 13.927496;
0.758428 1.172116 1.516856 2.06844 3.240556 4.343724
6.274268 9.101136;
0.379214 0.586058 0.827376 1.172116 1.7237 2.688972
3.861088 5.929528];

% se incarca un set de 6 matrici : temp = temperatura,


% mar_gr = marimea grauntilor, eps = viteza de deformare, m = coef. de
sensibilitate,
% sigma = rezistenta la deformare, k = consistenta.
% Afisarea grafica a parametrilor:

MESAJ1(1)={'DORITI SA AFLATI COORDONATELE UNOR PUNCTE DE PE


GRAFIC?'};
MESAJ1(2)={'AFIRMATIV: apasati tasta "1", urmata de
"ENTER"\NEGATIV:apasati "0", "ENTER"'};
MESAJ2(1)={'ALEGETI PUNCTELE...'};
MESAJ2(2)={'Folositi mouse-ul pentru a selecta punctele!\Pentru incheiere apasati
"ENTER"'};
MESAJ3(1)={'C O O R D O N A T E L E S U N T A F I S A T E '};
MESAJ3(2)={'I N M A T L A B W O R K S P A C E'};
MESAJ4(1)={'APASATI ORICE TASTA PENTRU A CONTINUA'};
MESAJ4(2)={'APASATI TASTELE [Ctrl + C] PENTRU A RENUNTA'};
254 MATLAB

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

msgbox('APASATI ORICE TASTA PENTRU A CONTINUA!','!!! CONTI


NUARE !!!')

msgbox('PENTRU INTRERUPEREA EXECUTARII PROGRAMULUI(in


orice moment!), SI REVENIREA IN "COMMAND WINDOW" APASATI
COMBINATIA DE TASTE [Ctrl+C] !','!!! H E L P !!!')

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)

msgbox('URMARITI MESAJELE DE LA BAZA FIGURII','!! I M P O R T A N


T !!')
zoom on
msgbox('Pentru "ZOOM- IN" folositi butonul stang al mouse- ului...Pentru
"ZOOM- OUT" folositi butonul drept!','!!! Z O O M A C T I V !!!')

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;
delete(h)

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')
256 MATLAB

helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE


IN WORKSPACE ! VALORILE AFISATE AU EROAREA DATORATA
POZITIONARII POINTERULUI PE GRAFIC !','!! VERIFICARE !!')
elseif (r~=1)&(r~=0)
disp('!! EROARE!! NU ATI APASAT NICI TASTA "1" SI NICI
TASTA "0" ! ACESTA ESTE MOTIVUL PENTRU CARE PRACTIC S-A
PIERDUT O ETAPA A PROGRAMULUI !! PENTRU A REVENI
APASATI [Ctrl+C] DUPA CARE INTRODUCETI <nume_fisier> IN
COMMAND WINDOW !' )
errordlg('NU ATI APASAT NICI TASTA "1" SI NICI TASTA"0"! ACESTA
ESTE MOTIVUL PENTRU CARE PRACTIC S-A PIERDUT O ETAPA A
PROGRAMULUI !! PENTRU A REVENI APASATI [Ctrl+C] DUPA CARE
INTRODUCETI <nume_fisier> IN COMMAND WINDOW ! PENTRU A
CONTINUA APASATI ORICE TASTA !','!!! EROARE UTILIZATOR !!!')
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');
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

set(title('GRAFICUL VALORILOR CALCULATE PENTRU REZISTENTA DE


DEFORMARE'),'color','r')
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"');
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

disp(' A S T E P T A T I V A R O G !... ')


258 MATLAB

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)

% Aplicarea metodei celor mai mici patrate:

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;

% Bucla de cautare a valorii lui M


% pentru care 'expresie' se apropie de zero in limita 'erorii'

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;

if abs(expresie) < eroare


conditie = 0
end
end
K1 = sum((eps1.^M).*sigma1)/sum(eps1.^(2*M));
K2 = sum((eps2.^M).*sigma2)/sum(eps2.^(2*M));
K3 = sum((eps3.^M).*sigma3)/sum(eps3.^(2*M));
K4 = sum((eps4.^M).*sigma4)/sum(eps4.^(2*M));
K5 = sum((eps5.^M).*sigma5)/sum(eps5.^(2*M));
K6 = sum((eps6.^M).*sigma6)/sum(eps6.^(2*M));
K7 = sum((eps7.^M).*sigma7)/sum(eps7.^(2*M));
K8 = sum((eps8.^M).*sigma8)/sum(eps8.^(2*M));
K9 = sum((eps9.^M).*sigma9)/sum(eps9.^(2*M));
K10 = sum((eps10.^M).*sigma10)/sum(eps10.^(2*M));
K11 = sum((eps11.^M).*sigma11)/sum(eps11.^(2*M));
K12 = sum((eps12.^M).*sigma12)/sum(eps12.^(2*M));

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

% Trasare grafic curba calculata

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

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');

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('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
l=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ3,...
'BackgroundColor','c','ForegroundColor','k','FontWeight','bold','HorizontalAlignme
nt','center');

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,1)
plot(eps3,sigma_calc3,'g')
set(title('SIGMA CALCULAT-3'),'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');
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('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');
MATLAB în ingineria mecanică 267

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('Apasati orice tasta pentru a continua')


disp('Apasati [Ctrl + C] pentru a renunta')
end

disp(blanks(1)')
268 MATLAB

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(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

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');

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('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');

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('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');
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');

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...


'BackgroundColor','g','ForegroundColor','r','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

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...


'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme
nt','left');

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('Apasati orice tasta pentru a continua')


disp('Apasati [Ctrl + C] pentru a renunta')
end

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('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');

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('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');

pause

% Trasare grafic puncte experimentale


subplot(2,1,1)
plot(eps1,sigma1,'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"');
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('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');

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

disp('Apasati orice tasta pentru a continua')


disp('Apasati [Ctrl + C] pentru a renunta')
MATLAB în ingineria mecanică 281

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');

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

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');

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('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');

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('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');

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

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,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('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');

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('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');

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('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');

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('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');
MATLAB în ingineria mecanică 291

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(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('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');

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

S-ar putea să vă placă și