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 soluiile acestora sunt exprimate folosind notaii 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 reprezentri grafice n inginerie; Dezvoltarea soft-urilor aplicative folosind metode de creare a interfeelor grafice interactive(GUI). MATLAB este un sistem interactiv care folosete, ca element definitoriu, matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix i LABoratory. MATLAB ofer faciliti multiple prin familiile de aplicaii specifice numite toolbox-uri. Toolbox-urile sunt colecii de funcii MATLAB (fiiere .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, reele neuronale, simulare. Mediul MATLAB se compune din cinci pri principale: Mediul de dezvoltare-un set de faciliti i instrumente matematice (interfee grafice) cu ajutorul crora se pot manevra fiierele i funciile MATLAB. Aceste instrumente includ: desktop-ul MATLAB, Command Window (Fereastra de Comand), un sistem de urmrire a comenzilor precum i browser-e pentru afiarea instruciunilor de Help (ajutor), spaiului de lucru; Biblioteca de funcii MATLAB-un set de funcii i algoritmi de calcul (pornind de la cele mai simple, pentru calculul funciilor trigonometrice, de exemplu, i pn 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 declaraiilor, funciilor, structurilor de date, intrrilor/ieirilor i cu faciliti 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, animaiilor i reprezentrilor grafice n general;

MATLAB n ingineria mecanic

Interfaa aplicativ MATLAB (API)- este o bibliotec de instrumente i funcii specifice, care permite dezvoltarea programelor n limbaj C i Fortran, limbaje care interacioneaz cu MATLAB. Aceast bibliotec include faciliti pentru utilizarea i apelarea unor rutine i subrutine pentru MATLAB (dynamic linking), folosind MATLAB ca un mediu de calcul ct i pentru citirea / scrierea fiierelor .mat.

NOIUNI ELEMENTARE Programul se lanseaz, n execuie, din mediul Windows, prin selecia 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 fiierul executabil matlab.exe ce se gsete n calea C:\MATLAB\BIN din unitatea c:\ ( presupunnd ca c:\ reprezint unitatea de pe hard-ul sistemului de calcul, unde se gsete instalat MATLAB). Se vor prezenta, n continuare, noiuni 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 reprezentri grafice (Figure). Ambele tipuri de ferestre dispun de meniuri si submeniuri independente, cu observaia ca, n fereastra Figure, se reprezint grafic comanda din Command Window. FEREASTRA DE COMENZI (Command Window) Fereastra de comenzi este prezentat n imaginea alturat. 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

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 selecia putndu-se face fie cu mouse-ul, fie cu ajutorul sgeilor prin deplasarea zonei active, fie prin tastarea literei marcate special n fiecare subcomand a respectivului meniu. GESTIONAREA FIIERELOR Selectnd comanda File din meniul principal, prin [Alt] + F, sau prin poziionarea mouse-ului n dreptul cuvntului File, se obine un submeniu ca cel prezentat n figura alturat. Meniul File conine o suma de submeniuri, dintre care prezentm: New provoac deschiderea unui sub-submeniu, care are opiunile: M-file, Figure i Model. Alegerea opiunii M-file va deschide o fereastr de editare a unui fiier, cu extensia .m, n timp ce opiunea Figure deschide o fereastr grafic. Open deschide o fereastr de dialog care permite selectarea i deschiderea unui fiier. Open Selected analizeaz fiierele pentru selectare i deschide pe cel selectat. Run Script- permite rularea unui fiier script care are definit calea (Path) Save Workspace As deschide o fereastr de dialog pentru a salva datele din spaiul de lucru ntr-un fiier, al crui nume trebuie precizat. Set Path - deschide o caset de dialog care permite setarea cii de acces la un anumit fiier de pe hard- disc sau de pe unitile mobile :floppy disc sau CD ROM. Preferences- permite configurarea formatului numeric, alegerea tipului caracterelor, mrimea caracterelor etc.;

MATLAB n ingineria mecanic

Print Setup i Print- Comenzile de tiprire a documentului; Print i Print Setup, apar n acelai meniu de gestionare a fiierelor. Comanda Print permite tiprirea documentului, iar Print Setup configureaz pagina, marginile, tipul de imprimant etc. Exit MATLAB- comanda al crei efect este prsirea aplicaiei. Comanda de prsire a aplicaiei (echivalent opiunii Exit MATLAB din meniul File) poate fi validat i prin apsarea simultan a tastelor [Ctrl]+ Q. EDITAREA PROGRAMELOR Selectnd comanda Edit din meniul principal al Command Window, apare submeniul prezentat n figura alturat. Modul de lucru n acest meniu este intuitiv, identic meniului Edit Windows sau oricrui editor de texte care lucreaz sub Windows: dup selectarea unui text, din mediul MATLAB sau din alt document, acesta se poate prelucra folosind opiunile Cut, Copy i Paste. tergerea sesiunii de lucru se realizez cu comanda Clear Session (efectul acestei comenzi constituindu-se n curirea complet a spaiului de lucru). ALEGEREA OPIUNILOR Selectnd comanda Options din bara de meniuri, se afieaz caseta de submeniuri prezentat n figura alturat. Submeniurile sunt: Numeric Format este un submeniu care permite selectarea unuia dintre formatele de afiare: Short (5 cifre) / Long (15 cifre) / Hex (hexazecimal) / Bank / Plus (+, - i blanc) / Short e (5 cifre + exponeniala) / Long e (15 cifre + exponeniala) / Rational (fracii), precum i a distanelor dintre rndurile succesive: Loose (distanat)/ Compact.

MATLAB n ingineria mecanic


Turn Echo este un comutator (on/off) care permite afiarea liniilor programului MATLAB, n timpul rulrii acestuia. Enable Background Process este un comutator (on/off) care permite rularea programelor MATLAB, n background, n timp ce calculatorul poate efectua i alte operaii. Command Window Font- deschide o fereastr de dialog pentru selectarea fonturilor (tip, mrime i culoare) care se vor utiliza n fereastra de comand curent a sesiunii de lucru MATLAB. Uicontrols Font - permite setarea fonturilor (tip, mrime i culoare) pentru interfee 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, afieaz submeniul prezentat n figura alturat. 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). DOCUMENTAIA DE AJUTOR Comanda Help din meniul principal afieaz submeniul prezentat n figura alturat. Submeniurile acestui meniu sunt: Table of Contents. Afieaz o list senzitiv cu toi subdirectorii din corpul principal al MATLAB. La plasarea sgeii mouse-ului pe unul dintre subdirectorii listai, acesta se transform ntr-o mn care permite, prin selectare, afiarea help-ului grupei de funcii respective.

MATLAB n ingineria mecanic

Index furnizeaz o list cu subdirectorii principali ai MATLAB-ului. Selectarea subdirectorului dorit afieaz coninutul acestuia i apoi informaii despre un anumit fiier sau funcie. Help Selected afieaz documentaia Help pentru funcia MATLAB ce a fost selectat cu mouse-ul. About-afieaz versiunea, licena etc. FEREASTRA DE REPREZENTRI GRAFICE N MATLAB (Figure) Fereastra grafic este o form elevat de reprezentare a graficelor. De menionat c pot exista mai multe ferestre grafice deschise n acelai timp, una fiind curent, dar o singur fereastr de comenzi. GESTIONAREA FERESTRELOR GRAFICE Din meniul File- submeniul New- opiunea Figure se deschide o fereastr, cu titlul Figure 1, avnd o configuraie apropiat de cea a Command Window, cu bar de meniuri : File, Edit, Windows, Help, ale cror opiuni sunt similare celor ale ferestrei de comenzi.

EDITAREA GRAFICELOR Selectnd meniul Edit din bara de meniuri a ferestrei grafice, sunt posibile cteva opiuni pentru modificarea reprezentrilor grafice: Copy- copiaz figura n Clipboard; Copy Options- copiaz figura curent n format meta sau bitmap(vezi formatele fiierelor grafice n Windows), existnd i posibilitatea alegerii

MATLAB n ingineria mecanic

unei culori pentru fundalul (background) figurii (inversarea ntre alb i negru; implicit este negru); Clear Figure terge figura curent, fr s nchid fereastra grafic. TIPURI DE DATE UTILIZATE N MATLAB
DATE single EXEMPLU 3*10^38 DESCRIERE Reele numerice cu simpl precizie. Simpla precizie necesit spaiu de stocare mai mic dect dubla precizie. Acest tip de date nu poate fi utilizat n operaii matematice Reele numerice cu dubl precizie. Este cel mai util;izat tip de variabile n MATLAB. Matrice compact bi-dimensional cu dubl precizie. Matricile compacte stocheaz doar elementele nenule, necesitnd mai puin memorie. Reele de ntregi cu i fr semn cu lungimea de 8, 16, 32 de bii. Permit manevrarea cantitilor ntregi ntr-un mod eficient. Aceste date nu pot fi utilizate n operaii matematice. Reea de caractere(fiecare caracter are 16 bii). Aceste reele sunt numite, n general, iruri de caractere. Reea celular. Elementele celulelor pot conine alte reele.Celulele pot colecta date i informaii de factur i mrime diferit. Reea structural. Reelele structurii se numesc cmpuri.Cmpurile pot conine alte reele. Ca i celulele, structurile pot colecta date i informaii de factur i mrime diferit. Classa MATLAB. Aceast classa este creat de utilizator, folosind funcii MATLAB. Classa Java. Se pot utiliza appleturi Java deja existente sau se pot crea appleturi proprii. Manipulator al funciei MATLAB.

double sparse int8, uint8, int16, uint16, int32, uint32 char cell structure

3*10^300 5+6*i speye(5) uint8(magic(5))

Pachet de programe {25 Pachet eye(2)} A.ziua=12; A.culoare=rou; A.matrice=magic(3) ; inline(sin(x)) java.awt.Frame @humps

user class java class Function 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 urmtoarele tipuri: Variabile Numere Operatori Funcii

10

MATLAB n ingineria mecanic

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 spaiu de stocare corespunztor. 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 printro nou atribuire. Dac, o nou variabil, cu acelai nume, este declarat, n linia de comand, sau ntr-un fiier-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 oricte litere sau numere, dar MATLAB reine doar primele 31 de caractere. ntruct, MATLAB este case sensitive, acesta face distincie 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 ctre utilizator, sunt interpretate i evaluate secvenial, la accesarea tastei [Enter]. Expresiile pot fi: iruri de caractere (care reprezint, de cele mai multe ori, numele unui fiier script sau al unui fiier funcie), instruciuni, funcii dedicate (specifice limbajului MATLAB). Instruciunile MATLAB sunt, de cele mai multe ori, de forma general: variabila=expresie [Enter] Atenie: simbolul , nu trebuie introdus de ctre utilizator, simbolul este afisat automat de MATLAB, n Command Window, acesta fiind prompterul din fereastra de lucru, Workspace. n forma general, a instruciunii: variabila - reprezint numele expresiei, si poate fi o niruire de caractere alfa-numerice, exceptnd caracterele speciale (^,&,*,(,),+,/ etc.) cu condiia 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 instruciunea 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 funcii, fiind memorat de MATLAB. De asemenea, instruciunile pot avea i urmtoarea form, simplificat: expresie [Enter]

MATLAB n ingineria mecanic

11

ceea ce permite execuia imediat a expresiei, la accesarea tastei [Enter], MATLAB atribuind, automat, numele ans valorii acestei expresii , ca n exemplul urmtor: 1/4 [Enter] returneaz rezultatul: ans = 0.2500 Atenie MATLAB recunoate sistemul britanic de scriere a numerelor ( fraciile 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 funcii i cifre, respectiv expresii logice. Orice instruciune, scris n cmpul de lucru, este n mod normal ncheiat cu accesarea tastei [Enter]. Dac ultimul caracter, al instruciunii, este caracterul punct-virgul ; , atunci instruciunea este executat, valoarea acesteia este stocat n memoria MATLAB, dar afiarea rezultatului este suprimat (excepie cazul n care instruciunea genereaz o eroare). Utilizarea acestui caracter la sfritul unei instruciuni n fiiere- .m este necesar n situaiile n care nu se dorete afiarea datelor intermediare. De exemplu, matricea 1 2 3 A = 4 5 6 , se introduce de la tastatur folosind urmtoarea convenie de 7 8 9 scriere:

A=[1 2 3; 4 5 6; 7 8 9]
Accesarea tastei [Enter], va avea ca rezultat afiarea matricei A:

A= 1 4 7

2 5 8

3 6 9

Dac, aceeai matrice se introduce, folosind caracterul punct i virgul ; , rezultatul nu va fi afiat. Tastarea numelui unei variabile urmat de Enter afieaz valoarea acesteia, dac aceasta a fost, n prealabil, executat sau introdus de la tastatur. De exemplu, daca matricea A a fost introdus in spaiul de lucru MATLAB, i este dorit afiarea ei, pentru aceasta este nevoie doar de introducerea numelui acesteia (adic A):

12

MATLAB n ingineria mecanic

A [Enter] A= 1 4 7 2 5 8 3 6 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 instruciunea continu pe linia urmtoare. Astfel instruciunea:

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. Spaiile dintre semnele =, +, - i numere sunt opionale, dar caracterul , este obligatoriu a fi introdus, ntotdeauna, dup un operator, dup o virgul sau dup o parantez, altfel se afieaz un mesaj de eroare. De exemplu, dac ntr-o instruciune 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 afieaz 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 eps realmax realmin pi i, j inf NaN - ultimul rspuns - precizia relativ, n virgul mobil - cel mai mare numr pozitiv, n virgul mobil - cel mai mic numr pozitiv, n virgul mobil - 3.1415926535897.... - unitatea imaginar ( 1 ) - infinit - Not-a-Number (nu este numr)

MATLAB n ingineria mecanic


isnan isinf isfinite why - valoarea de adevr pentru NaN - valoarea de adevr pentru infinit - valoarea de adevr pentru valori finite - rspuns succint

13

NUMERE
Formatul numerelor utilizabile n MATLAB este cel convenional cu punct 6 = 0,1714 , va fi recunoszecimal (scrierea britanic). Astfel, fracia zecimal 35 cut ca atare, n expresiile MATLAB, dac aceasta este scris:

0.1714
Formatul numerelor se declar n linia de comand, sau din meniul FilePreferencesCommand WindowNumeric 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 NUMERELOR short short e short g long long e long g bank rat + hex COMANDA format short format short e format short g format long format long e format long g format bank format rat format + format hex DESCRIEREA FORMATULUI -formatul scurt cu 5 cifre semnificative, cu aproximare la ultima cifr zecimal -formatul scurt n 5 cifre semnificative, aproximat prin adaos sau lips -formatul scurt cu 5 cifre semnificative, cu cea mai bun aproximare -formatul lung cu 15 cifre semnificative -formatul lung cu 15 cifre semnificative aproximat prin adaos sau lips -formatul lung cu 15 cifre semnificative, cu cea mai bun aproximare -formatul cu dou cifre zecimale semnificative, aproximat prin adaos, sau prin lips -formatul raional (raport) -afieaz semnul numrului -formatul hexazecimal

5 1,23456789012345678901 De exemplu, vectorul linie a = 3

, n

care = 1.77245385090552 , poate fi afiat n diferite formate. Pentru aceasta, se va introduce, n linia de comand, mai nti, vectorul a:

14

MATLAB n ingineria mecanic

a=[5/3,1.23456789012345678901,sqrt(pi)];
apoi, se introduc instruciunile pentru schimbarea afirii numerelor (Atenie! Dup fiecare instruciune de schimbare a formatului, se introduce, n linia de comand, fnumele variabilei care se dorete a fi afiat, 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 format bank a= 1.67 1.23 format rat a= 5/3 100/81 format + a= +++

1.23456789012346

1.77245385090552

1.77

296/167

MATLAB n ingineria mecanic

15

O mare atenie trebuie acordat scrierii fraciilor zecimale. Dac aceeai fracie zecimal este scris n linia de comand cu caracterul virgul (,), atunci se va afia un rezultat dublu. De exemplu, dac se introduce numarul 0,1714, i se dorete afiarea acestuia n format scurt, se vor folosi urmtoarele instruciuni:

format short 0.1714 ans = 0.1714 n timp ce, dac, acelai numr, se introduce n scriere est-european (cu caracterul virgul, pentru separarea fraciei zecimale), se vor afia dou rspunsuri: 0,1714 ans = 0 ans = 1714
De observat c sunt afiate dou variabile, cu acelai nume, ans, dar cu valori diferite. n acest caz MATLAB va utiliza n evaluri, ulterioare acestei secvene, ultima valoare a variabilei ans (adic 1714). Numerele complexe, scrise n forma algebric, sunt acceptate de MATLAB, dac se folosete 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 n ingineria mecanic

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 funciilor speciale (de exemplu pentru calculul rdcinii ptrate a numrului x, se folosete, uneori, funcia specific MATLAB: x =sqrt(x), n timp ce, pentru calculul radicalului de ordinul trei se poate folosi calculul cu puteri raionale: 3 3 =3^(1/3)) sau a parantezelor, pentru scrierea acestora, atunci este necesar folosirea operatorului aritmetic de nmulire (*), pentru evidenierea prii imaginare a numrului complex, n caz contrar, va fi afiat un mesaj de eroare. De exemplu, numerele c = 3 + i 7 , e = 3 + i 2 , f = 1 + ( 2 + 3 )i scrise fr operatorul *, afieaz urmtoarele mesaje de eroare:

c=3+sqrt(7)i ??? a=3+sqrt(7)i | Error: Missing operator, comma, or semicolon. Eroare:Lipsete 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


f=1+(2+sqrt(3))i ??? f=1+(2+sqrt(3))i | Error: Missing operator, comma, or semicolon.

17

Numrul 3 + 2 este un numr complex, pentru care MATLAB afieaz valoarea explicit: -3.0000 + 1.4142i Numerele utilizate n MATLAB trebuie sa fie cuprinse ntre 10 308 i 10 308 .

OPERATORI ARITMETICI
MATLAB utilizeaz urmtorii operatori aritmetici: + adunarea scderea * nmulirea / mprirea la dreapta \ mprirea la stnga ^ ridicarea la putere transpunerea () specificarea ordinii evalurii expresiilor Exist dou simboluri pentru mprire, utilizate n mod special pentru operaiile cu matrici. Pentru expresiile scalare 1/4 i 4\1 se obine acelai rezultat (0.25). ntr-o expresie, parantezele sunt utilizate pentru a preciza ordinea executrii operaiilor.

FUNCII
n MATLAB sunt predefinite funciile matematice elementare standard. O list complet a funciilor matematice elementare se afieaz folosind comanda help elfun, help specfun, respectiv help elmat, n linia de comand. Acestea sunt: Funcii trigonometrice sin sinh asin asinh cos cosh - sinus - sinus hiperbolic - inversa sinusului (arcsin) - inversa sinusului hiperbolic - cosinus - cosinus hiperbolic

18

MATLAB n ingineria mecanic

acos acosh tan tanh atan atan2 atanh sec sech asec asech csc csch acsc acsch cot coth acot acoth

- inversa cosinusului - inversa cosinusului hiperbolic - tangenta - tangenta hiperbolic - arctangenta - arctangenta n cadranul patru - arctangenta hiperbolic - secanta - secanta hiperbolic -arcsecanta - arcsecanta hiperbolic - cosecanta - cosecanta hiperbolic - arccosecanta - arccosecanta hiperbolic - cotangenta - cotangenta hiperbolic - arccotangent - arccotangenta hiperbolic

Funcii exponeniale exp log log10 log2 pow2 sqrt nextpow2 - exponeniala simpl ( e x ) - logaritmul natural ( ln x ) - logaritmul n baza zece ( lg x ) - logaritmul n baza doi ( log 2 x ) - puterile lui 2 ( 2 x ) - radical de ordin 2 (
x )

- puterea urmtoare a lui 2 ( 2 p abs( N ) )

Funcii complexe abs angle complex conj imag real - valoarea absolut ( x ) - unghiul de faz ( z = R e i ) - creeaz numrul complex din partea real i imaginar, date - conjugatul numrului complex - partea imaginar a numrului complex - partea real a numrului complex

MATLAB n ingineria mecanic


unwrap isreal - corecteaz unghiul de faz - valoarea de adevr

19

Aproximri i resturi fix floor ceil round mod rem sign - aproximare prin lips - aproximare spre cel mai mic ntreg - aproximare spre ntregul mai mare sau egal - aproximare spre cel mai apropiat ntreg - rest modulo - restul mpririi - signum

Funcii matematice speciale besselj bessely besselh besseli besselk beta - f. Bessel de ordinul I ( x 2

d2y
2

dx - funcia Bessel de ordinul II - funcia Bessel de ordinul III (funcia Hankel) - funcia Bessel de ordinul I, modificat - funcia Bessel de ordinul II, modificat
- funcia Beta complet ( B( z , w ) =

+ x

dy (x 2 + 2 ) y = 0 dx

t 0

z 1

(1 t ) w 1 dt )

betainc betaln ellipj

1 -funcia Beta incompl. ( I x ( z , w ) = t z 1 (1 t ) w 1 dt ) B( z , w )

- logaritmul natural al funciei Beta - funcia Jacobi eliptic (

(1 m sin 2 ) ) 0
[(1 t
0 1 2

ellipke

- funcia eliptic integral (

)(1 mt 2 )]

1 2

dt )

erf

- funcia eroare ( erf ( x ) =

e
0

t2

dt )

20

MATLAB n ingineria mecanic

erfc erfinv expint

- funcia eroare complementar ( erfc( x ) = - funcia eroare invers - funcia integral exponenial (

e
0

t 2

dt )

e t dt ) t

gamma

- funcia Gamma ( (a ) = e t t a1dt )


0

gammainc gammaln legendre

1 - funcia Gamma incomplet ( e t t a1dt ) (a )

- logaritmul natural al funciei Gamma - funcia Legendre asociat


m m ( Pn ( x ) = ( 1) m (1 x 2 ) 2 n dm 1 dn 2 x 1 ) dx n 2 n n! dx

cross dot

- produs vectorial al doi vectori - produs scalar al doi vectori

Funcii specifice teoriei numerelor factor isprime primes gcd lcm rat - descompunerea n factori primi - valoarea de adevr, pentru numere prime - genereaz lista numerelor prime, mai mici sau egale cu nr. dat - cel mai mare divizor comun - cel mai mic multiplu comun n 1 - descompunere raional ( = d 1 + ) 1 d d2 + 1 d3 + K + dk - aproximarea raional cu afiarea rezultatului n format raional - afieaz toate permutrile posibile n! - combinri de n luate cte k C k = n (n k )!n! - factorial (n!)

rats perms nchoosek factorial

MATLAB n ingineria mecanic


Funcii specifice operaiunilor cu matrici Matrici elementare
zeros ones eye repmat rand randn linspace logspace freqspace meshgrid : - matricea zerourilor - matricea unitar - matricea unitate - repetarea matricei originale - matrici cu elemente aleatorii uniform distribuite - numere normal distribuite - creeaz un vector linie spaiat linear egal - creeaz un vector linie egal spaiat logaritmic - spaierea frecvenei - transform vectorii liniari n matrici bi-dimensionale - spaierea regulat

21

Caracteristici elementare ale matricilor size length ndims disp isempty isequal isnumeric islogical logical - dimensiunea matricei - lungimea vectorului - numrul de dimensiuni ale structurii - afieaz o matrice sau un text - valoarea de adevr pentru matricea goal - valoarea de adevr pentru matrici egale - valoarea de adevr pentru matrici numerice - valoarea de adevr pentru matrici logice - convertete valori numerice n valori logice

Operaiuni cu matrici reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find end sub2ind - schimb dimensiunea matricei - matrici diagonale i diagonala matricilor - creeaz o matrice diagonal cu elementele date - extrage matricea diagonal inferioar - extrage matricea diagonal superioar - inverseaz ordinea coloanelor, de la stnga la dreapta - inverseaz liniile - inverseaz liniile sau coloanele dup dimensiunea cerut - rotete matricea cu multiplu de 90o - afieaz indicele poziiei elementelor diferite de zero - ultimul index valabil - transform indicii multipli n indici singulari

22

MATLAB n ingineria mecanic

Matrici speciale compan gallery hadamard hankel hilb invhilb magic pascal toeplitz vander wilkinson - matricea companion - testarea tipului matricei - matricea Hadamard - matricea Hankel - matricea Hilbert - matricea invers Hilbert - matricea magic ptratic - matricea Pascal - matricea Toeplitz - matricea Vandermonde - testarea matricei Wilkinson

MATRICI, VECTORI I SCALARI


NOTAII
MATLAB este un pachet de programe care lucreaz numai cu un singur tip de entiti, matrici rectangulare, cu elemente reale sau complexe.n acest sens, scalarii sunt asimilai matricilor cu o linie i o coloan (1x1), iar vectorii sunt asimilai matricilor cu o linie i n coloane (1x n) sau o coloan i n linii (nx1). Operaiile i comenzile n MATLAB sunt aproape naturale, n sens matricial, asemntor modului de calcul obinuit. Astfel, entitile : 2 0 1 1 1 2 0 1 5 A= ; B= 2 7 9 ; C= 2 ; D= 3 2 1 5 ; E=[1 3 5 7] , 3 4 5 7 9 7 3 sunt toate matrici n accepiunea 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 notaiile: Aij, A[i,j], A(i,j) etc. i semnific elementul de la intersecia liniei i cu coloana j. Ultima notaie, 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 numrul de linii i coloane ale matricei respective: D este o matrice 3x4; iar o matrice cu o singur linie sau o singur coloan se numete vector linie (matricea E din exemplul anterior) sau vector coloan (matricea C din exemplul anterior),

MATLAB n ingineria mecanic

23

elementele acestora putnd 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 intersecia 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 fcut 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 poziia (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 urmtoarele metode: 1. introducerea explicit a listei de elementelor; 2. generarea prin instruciuni i funcii; 3. crearea fiierelor .m; 4. ncrcare din fiiere de date externe.

24

MATLAB n ingineria mecanic

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, respectnd conveniile de scriere. La introducerea unei astfel de liste trebuie respectate urmtoarele reguli:

a) elementele matricei sunt cuprinse ntre paranteze drepte [ ] b) elementele unei linii trebuie separate prin spaii libere (blanc-uri ) sau virgule; c) liniile se separ prin semnul punct-virgul ; ;

1 2 Astfel, matricea A= , se introduce de la tastatur cu secvena: 3 4 A= [1 2 ; 3 4] [Enter] A= 1 2 3 4


Obs. n acest exemplu: elementele unei linii sunt separate printr-un spaiu liber ((blank): 1 2 respectiv 3 4 ;

[Enter]- reprezint tasta cu acelai nume;

Acelai rezultat se obine 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 fiier 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 apsare a tastei [Enter], ca n exemplul urmtor:

MATLAB n ingineria mecanic


A=[1,2[Enter] 3,4[Enter] 5,6] [Enter]
i se afieaz:

25

A= 1 3 5

2 4 6

Un alt mod de definire a unei matrici const n apelarea numelui unui fiier de date aflat n memoria sistemului de calcul. Acest fiier 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 gsete un fiier cu numele matricea_A.m care conine urmtoarele linii de text:

instruciunea care citete fiierul (i genereaz matricea A) este: matricea_A ceea ce va avea ca rezultat afiarea matricei A: A= 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 Afiarea matricei coninut n fiierul matricea_A.mat, este posibil, la tastarea numelui acestui fiier, numai n cazul n care acest fiier este salvat n directorul curent. Posibilitatea de a importa date din alte programe va fi abordat n seciuni ulterioare.

26

MATLAB n ingineria mecanic

GENERAREA MATRICILOR PRIN INSTRUCIUNI I FUNCII


n MATLAB se pot defini matricile folosind instruciuni i funcii specifice, existnd, deasemenea, predefinite matrici implicite. Generarea matricilor prin instruciuni i funcii utilizeaz facilitile 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 secvena urmtoare se obine matricea F:

F=0.1:0.1:0.5 [Enter] F= 0.1000 0.2000 0.3000

0.4000 0.5000

Matricile predefinite, prin funcii MATLAB, sunt: A). Matricea unitate eye(n), eye(n,m) Prin secvana urmtoare se genereaz matricile unitate avnd elementele diagonalei principale 1 (Atenie! Pentru afiarea matricilor I2, I3 respectiv I34, este necesar introducerea numelui acesteia, la prompterul MATLAB, ntruct definirea acestora se ncheie cu caracterul ; care blocheaz afiarea!):

I2=eye(2);I3=eye(3);I34=eye(3,4); [Enter] I2 = 1 0 I3 = 1 0 0 0 1 0 1 0 0 0 1

MATLAB n ingineria mecanic


I34 = 1 0 0 1 0 0

27

0 0 1

0 0 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 obin 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 puin, una dintre dimensiuni egal cu zero, deci fr elemente definite, dar matricea exist ca structur matematic:

A=[]

28

MATLAB n ingineria mecanic

E). Matricea aleatoare: rand(n), rand(n,m), rand(n,m,p) Funcia rand() genereaz matrici ale cror elemente sunt numere uniform distribuite n intervalul de valori (0,1) . Cu secvena urmtoare 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 obinute rezultatele: B3 = 0.4514 0.3127 0.0439 0.0129 0.0272 0.3840

0.6831 0.0928 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


B345(:,:,5) = 0.0099 0.4302 0.6873 0.1370 0.8903 0.3461 0.8188 0.7349 0.1660 0.1556 0.1911 0.4225

29

F). Matricea dispersiilor:sparse (A), sparse(i,j,s,m,n) Funcia sparse() genereaz o matrice dispersat n raport cu argumentul. 1 0 3 9 4 Astfel, dac se d matricea C = , atunci funcia 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 reinute doar elementele diferite de valoarea zero din matricea C de la argumentul funciei sparse. Aceast funcie 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 funcia sinonim hadamard(n) cu condiia 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 regsete n combinatoric, procesarea semnalelor i analiz numeric. Cu secvena urmtoare se obin 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 n ingineria mecanic

H). Matricea Hilbert Matricea Hilbert este un exemplu notabil de matrice slab condiionat. Elementele matricei Hilbert sunt de forma H(i, j) = 1/(i+j-1), i se genereaz cu funcia 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 ptratic Matricea magic ptratic este generat cu funcia MATLAB magic(n) i este construit din ntregii cuprini ntre 1 i n2 cu condiia ca suma elementelor de pe orice rnd 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 condiiei de egalitate ntre suma elementelor pe linie cu suma elementelor pe coloan, respectiv cu suma elementelor pe diagonal, se realizeaz suma corespunztoare, folosind o funcie 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


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 suma_elementelor_pe_coloana =sum(M4') suma_elementelor_pe_coloana = 34 34 34 suma_elementelor_pe_diagonala= sum(diag(M4)) suma_elementelor_pe_diagonala = 34 34

31

34

Pentru afiarea matricilor M3 respectiv M4, se tasteaz numele acesteia. J). Matricea Pascal Matricea Pascal se genereaz cu funcia MATLAB, specific, pascal(n), este o matrice de ordinul n, pozitiv definita, simetric, cu elemntele, numere ntregi, preluate din Triunghiul lui Pascal (format din coeficienii 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 P3 = 1 1 1 1 2 3 1 3 6 1 2

32

MATLAB n ingineria mecanic

P4 = 1 1 1 1 P5 = 1 1 1 1 1 1 1 1 1 2 3 4 5 3 6 10 15 4 10 20 35 5 15 35 70 1 1 1 2 3 4 3 6 10 4 10 20

K). Matricea Wilkinson Cu funcia MATLAB wilkinson(n) se genereaz matricea sinonim, care este o matrice ptratic 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 construiete matricea Wilkinson se prezint, mai jos, matricele corespunztoare, 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 1 0.5 1 0 1 0.5 0 0 1

0 0 1 1.5

MATLAB n ingineria mecanic


cinci=wilkinson(5) cinci = 2 1 0 1 1 1 0 1 0 0 0 1 0 0 0 sase=wilkinson(6) sase = 2.5 1 1 1.5 0 1 0 0 0 0 0 0

33

0 0 1 1 1

0 0 0 1 2

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 FIIERELOR SCRIPT


O facilitate oferit de MATLAB, pentru generarea matricilor, este crearea fiierelor 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 fiierul matricea_A.m astfel: Din meniul File New M-file se creaz fiierul matricea_A care va conine 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 fiier se salveaz (din meniul File Save As ) cu numele matricea_A, acestuia fiindu-i atribuit, implicit, extensia .m

34

MATLAB n ingineria mecanic

Dac se dorete apelarea fiierului (pentru a fi utilizat n alte fiiere, sau n Workspace), n linia de comand MATLAB, se tasteaz numele fiierului, matricea_A, rezultatul fiind afiarea matricei A: matricea_A A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

GENERAREA MATRICILOR PRIN NCRCAREA DIN FIIERE EXTERNE


O alt posibilitate de a accesa date din fiiere 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 solicitnd utilizatorului date suplimentare privind calea fiierului ce urmeaz a fi importat. De exemplu, pentru a importa fiierul matrice, care se gsete pe hard-disc, n partiia D:/ a acestuia, D:/MATLAB-6/work/matrice, se va deschide fereastra de dialog din figur:

Accesnd butonul Next, iar, dup validarea operaiei, Finish, n spaiul de lucru, poate fi, oricnd, afiat i utilizat matricea salvat n acest fiier. Comanda load citete fiierele binare coninnd matrici generate n sesiuni de lucru anterioare. Aceeai comand citete fiiere- text coninnd date numerice. Fiierul

MATLAB n ingineria mecanic

35

text trebuie sa fie organizat ca tabel bi-dimensional (linii i coloane), separate prin spaii libere (blancuri), cu un rnd pe fiecare linie i numr egal de elemente n fiecare rnd (tabelul trebuie sa aib acelasi numr de coloane pe fiecare linie). De exemplu, dac, intr-un editor de text (acest editor poate fi extern MATLAB-ului), se creeaz fiierul text coninnd urmtoarele patru linii de text:

16 5 9 4

3 10 6 15

2 11 7 14

13 8 12 1

i se salveaz fiierul cu numele, matrice, de exemplu, atunci, acest fiier poate fi apelat folosind urmtoarea succesiune de operaiuni, n Workspace (acest fiier poate fi apelat i de alte fiiere sau funcii MATLAB). De exemplu, presupunnd c n calcule este necesar ca datele cuprinse n fiierul 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 5 10 9 6 4 15

2 13 11 8 7 12 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 folosete scrierea: 5

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


rezult:

[Enter]

x= -1.3000 1.7321 4.8000

36

MATLAB n ingineria mecanic

Obs. De remarcat faptul c pentru numrul raional -1,3 s-a folosit formatul britanic: s-a folosit caracterul . pentru separarea prii ntregi de partea fracionar a numrului. De asemenea, sqrt(3), pentru numrul 3 , elementul x(3) fiind afiat 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 cuprini ntre paranteze rotunde ( ) , cifrele reprezentnd identificatorii de linie, respectiv de coloan ai elementului apelat. De exemplu, cu instruciunea urmtoare, se cere afiarea elementului al doilea al vectorului x:

a = x(2) [Enter] a= 1.7321


n timp ce, cu instruciunea urmtoare se modific elementul al cinci-lea al aceluiai 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) ) x= -1.3000

[Enter]

1.7321

4.8000

1.3000

(adic, elementul al 5-lea al vectorului x este egal cu valoarea absolut a elementului de pe poziia 1 a vectorului x), ceea ce returneaz rezultatul: Obs:De remarcat c se atribuie o valoare unui element care ocup o poziie 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 poziie, ntr-o matrice, nu exist un element i se definete, folosind o regul oarecare, un element de pe o poziie urmtoare, elementul care lipsete se nlocuiete automat de ctre MATLAB, cu valoarea 0 (zero).In acest sens, instruciunea urmtoare adaug un element pe poziia (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


A= 1 2 0 0 3 4 0 6
(adic elementul din linia 2 coloana 4, al matricei A=

37

1 2 este definit, de 3 4

acum nainte, ca fiind numrul ntreg 6,(Atenie! Nu trebuie nlocuite elementele care lipsesc: A13 , A14, A23, acest lucru este realizat automat de ctre 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 nct s se realizeze tablouri rectangulare complete. Fie A1 i A2 cele dou matrici utilizate. Cu secvena urmtoare:

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


se obine rezultatul:

A= 1 3 5 7 2 4 6 8

O matrice cu dimensiuni reduse poate fi extras din matrici mai mari utiliznd semnul : (dou puncte). De exemplu:

B=A(2,3, :) [Enter]
extrage liniile doi i trei (2:3) i toate coloanele din matricea curent A, obinndu-se matricea B:

B= 3 5 4 6

n acest exemplu, caracterul dou puncte ( : ), folosit n instruciunea B=A(2:3, :), are urmtoarea semnificaie:se extrag elementele aflate la intersecia liniilor 2, 3 cu toate coloanele matricei A.

38

MATLAB n ingineria mecanic

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 , se paranteze drepte, [ ]. De exemplu, fiind dat matricea A = 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 (considernd c matricea A este stocat n memorie), se introduce, de la tastatur, urmtoarea 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=

A+48

21 7 6 3 69 55 54 51

4 9 7 5 52 57 55 53

8 0 8 7 56 48 56 55

2 8 9 9 50 56 57 57

53 39 38 35 37 23 22 19

36 41 39 37 20 25 23 21

40 32 40 39 24 16 24 23

34 40 41 41 18 24 25 25

A+32

A+16

MATLAB n ingineria mecanic

39

Un alt exemplu, asamblarea acelorai 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 A+48 54 55 56 57 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 , se poate folosi urmtoarea secven: A= 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 obine o nou matrice x :

x= 21 7 6 3

8 0 8 7

2 8 9 9

40

MATLAB n ingineria mecanic

Pentru tergerea unui singur element (de exemplu, tot al treilea element s fie ters, considernd elementele matricei scrise pe coloan) se poate folosi urmtoarea 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

Se observ c, elementele matricei au fost citite pe coloan, i tot al treilea element, ncepnd 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, cuprini ntre paranteze rotunde separai prin virgul. Primul indice semnific linia, iar al doilea coloana n care se gsete elementul apelat. De

21 7 exemplu, considernd matricea A = 6 3

4 9 7 5

8 0 8 7

2 8 9 9

stocat n memoria

calculatorului, atunci cu instruciunea: 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 obine o alt matrice la care elementul din linia 6, coloana 5: A(6,5), al matricei A, este obinut 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 pri 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 -1 0 -1 1 10 2 3 4 5 6 7 2 3 -4 5 -6 7 2 0 4 0 6 0 2 -3 4 -5 6 -7 2 3 0 0 0 7 9 8 7 6 5 4 8 -8 8 8 8 3 9 9 0 -9 9 2 10 -10 10 10 10 1

atunci, cu instruciunea urmtoare, se extrage submatricea B cu dimensiunea 5x1, format cu elementele liniilor 1, 2, 3, 4, 5 (notaia 1:5 arat c sunt apelate toate liniile: 1 pn 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, instruciunea urmtoare, 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 instruciunea:

D1=M(:,3) [Enter]

42

MATLAB n ingineria mecanic

extrage din matricea M, o submatrice D1 cu elementele extrase din matricea M (toate liniile i numai coloana 3) avnd urmtoarea configuraie:

D1 = 3 3 0 -3 3 8
n timp ce, instruciunea:

E1=M(1:5,:) [Enter]
extrage submatricea matricei M: E1 = 1 -1 0 -1 1

E1 care conine liniile de la 1 la 5 ale tuturor coloanelor 2 2 2 2 2 3 4 5 6 7 8 3 -4 5 -6 7 -8 0 4 0 6 0 8 -3 4 - 5 6 -7 8 3 0 0 0 7 8 9 10 9 -10 0 10 -9 10 9 10

UTILIZAREA SIMBOLURILOR
MATLAB, n variantele recente, folosete Symbolic Math Toolbox (grup de instrumente matematice simbolice) pentru crearea variabilelor i obiectelor simbolice. Aceast colecie de instrumente MATLAB, nu trebuie confundat cu facilitatea oferita, tot de MATLAB, pentru utilizarea simbolurilor literale. n calcule inginereti se utilizeaz frecvent, in locul expresiilor numerice, supradimensionate, n general n cazul calculelor numerice cu matrici i de analiz numeric, expresii simbolice. Nucleul computaional este format pe baza kernelului MAPLE, dezvoltat la University of Waterloo, Canada, i la Eidgenssiche Technische Hochschule, Zrich, Elveia. Sunt disponibile dou categorii de toolbox-uri: o colecie de baz, numit Symbolic Math Toolbox, respectiv, o colecie de funcii extinse, numit Extended Symbolic Math Toolbox. Simbolurile matematice se creeaza cu funcia MATLAB sym(), respectiv cu funcia syms. Diferena dintre aceste dou funcii const n faptul c prima

MATLAB n ingineria mecanic

43

creeaz o variabil simbolic, n timp ce, a doua, creaz o mulime finit de variabile, prin declararea acestora, la nceputul sesiunii de lucru. Trebuie fcut o difereniere 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 greceti, precum i caractere speciale folosite ca simboluri pentru operatori matematici, se folosesc proprietile disponibile n MATLAB, pentru inserarea acestora. n tabelul alturat sunt cuprinse toate simbolurile literale i caracterele speciale, pentru care MATLAB ofer faciliti de inserare n text:
DENUMIREA SIMBOLULUI \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \vartheta \iota \kappa \lambda \mu \nu \xi \pi \rho \sigma \varsigma \tau \nabla \perp \cap \otimes SIMBOL

DENUMIREA SIMBOLULUI \upsilon \phi \chi \psi \omega \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega \forall \exists \ni \cong \copyright \langle \cup \oplus

SIMBOL

DENUMIREA SIMBOLULUI \sim \leq \infty \leftrightarrow \leftarrow \rightarrow \uparrow \downarrow \circ \pm \geq \partial \div \neq \equiv \Im \Re \supset \subset \int \in \rangle \supseteq \oslash

SIMBOL

Introducerea simbolurilor literale, respectiv a caracterelor speciale, n texte sau iruri de caractere este o operaiune distinct a MATLAB, din acest motiv, aceasta va fi tratat ntr-o seciune consacrat acestui subiect. Raiunea

44

MATLAB n ingineria mecanic

pentru care aceste observaii, referitoare la diferena 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 dorete eliminarea unei posibiliti de apariie 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 spaiului de lucru MATLAB. Funcia MATLAB sym(x), permite atribuirea, variabilei x, caracterul de simbol. Astfel, cu comanda:
c = sym('variabila_simbolica')
se creaz variabila simbolica c , care va afia, atunci cnd 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, presupunnd c se dorete folosirea repetat a unei expresii matematice, relativ complicat, ca editare, n expresii diferite, atunci se poate folosi urmtorul algoritm: se declar expresia simbolic, dup care aceasta se poate utiliza n calcule i expresii ca o valoare numeric sau simbolic de sine-stttoare. Fie expresia: 12 4 3 12 3 5 3 14 + 5 34 ln 23 8 log 5 125 _ 55 E9 = (1 + 2 + 3) : 8 11 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 afiarea 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^23*E+log(E), de exemplu), este posibil, folosind urmtoarea 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 operaiile aritmetice cu expresii simbolice, n MATLAB, s se poat realiza, este necesar declararea tuturor variabilelor dintr-o expresie matematic. De exemplu, rezolvarea unei ecuaii parametrice, cu parametrul a , i variabila x , declarat, este posibil dac, n prealabil, s-a declarat simbol, parametrul respectiv, folosind, pentru aceasta funcia syms. Astfel, pentru rezolvarea ecuaiei 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 rdcini ale ecuaiei date.

CALCULE SIMBOLICE Diferenierea


Pentru calculul diferenialei unei funcii, 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 n ingineria mecanic

2. se aplic funcia diff() expresiei simbolice, creat anterior, f: diff(f) ans = 3*a*x^2+2*b*x+c
Difereniala se calculeaza, implicit, n raport cu variabila x, indiferent de ordinea declarrii simbolurilor. Dac, de exemplu, se cere difereniala n raport cu o alt variabil, atunci funcia MATLAB pentru calculul diferenialei se apeleaz cu doi parametri:

diff(f,a) ans = x^3


n mod similar se determin difereniala de ordinul n(n2) n raport cu o variabil. Funcia MATLAB diff() se apeleaz, atunci, cu doi sau trei parametri, ntre acetia, ultimul parametru fiind ordinul de difereniere:

diff(f,x,2) ans = 6*a*x+2*b difereniala de ordinul doi n raport cu x diff(f,2) ans = 6*a*x+2*b - difereniala de ordinul doi n raport cu x diff(f,3) ans = 6*a - difereniala de ordinul trei n raport cu x diff(f,a,2) ans = 0- difereniala de ordinul doi n raport cu a
Difereniala matricei se determin n mod similar diferenialelor funciilor 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


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

47

Derivatele pariale se determin folosind funcia MATLAB jacobian(), n funcie de variabilele funciilor. Astfel, derivata unei funcii f (u, v ) , n raport cu funciile u( x, y ) , respectiv v( x, y ) , se determin cu urmtoarea 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 funcii:

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 funciilor simbolice


Calculul limitei unei funcii, definit simbolic presupune existena, n primul rnd, limitei funciei respective ntr-un punct. ntruct se definesc limitele laterale (la stnga sau la dreapta), MATLAB permite calculul difereniat al acestora prin specificarea sensului de calcul. Limitele se calculeaz folosind funcia MATLAB limit(f(x),xo), cu parametrii de intrare, f(x) i xo n funcie de tipul xx ax , cnd x limitei. De exemplu, dac se cere calculul limitei funciei f ( x ) = x a aa tinde spre a, se procedeaz astfel:

48

MATLAB n ingineria mecanic

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 folosete secvena MATLAB:

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


Limitele laterale se determin folosind aceeai funcie MATLAB, pentru care paramatrii de intrare sunt:funcia (scris simbolic), variabila, punctul n care se cere limita respectiv sensul (left-stnga; right-dreapta), dup cum limita se calculeaz, la stnga, sau la dreapta punctului de acumulare. De exemplu, pentru calculul limitelor laterale
1 xa lim e x a

1 xa lim e x a +

se procedeaz astfel:

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


Pentru calculul sumelor de tipul

a
k =1

, n care irul a k este definit

MATLAB n ingineria mecanic

49

simbolic, se folosete funcia MATLAB symsum( a k ,k,ko,kn). De exemplu, pentru calculul sumei

k
k =1

1
2

+k

, se folosete secvena:

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), funcia MATLAB trebuie sa fie explicit definit prin parametrii de intrare. Astfel, dac se cere calculul sumelor infinite

(k
n k =0

+ 1 x k i

(x
n k =0

+ y k , se folosete secvena:

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 funcii n serie Taylor are o aplicabilitate deosebit n calculele numerice. Fie f : [a, b] R . Se pune problema determinii unei

funcii F, care s aproximeze funcia f n intervalul [a,b]. Se recurge la aceast aproximare n dou cazuri: 1) cnd nu se cunoate expresia analitic a lui f, dar se cunosc valorile sale ntr-un numr finit de puncte i 2) cnd expresia analitic a lui f este destul de complicat i cu ajutorul acesteia

50

MATLAB n ingineria mecanic

calculele sunt destul de dificile. Pentru evaluarea lui f(x) se caut o alt funcie F(x) relativ simpl astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumit clas de funcii, de exemplu din clasa polinoamelor de grad n sau mai mic, pentru un anume n, atunci trebuie ca F(x) s ia aceeai 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 acelai valori cu valorile derivatelor corespunztoare ale lui f(x) n anumite puncte de interpolare. Se poate arta 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:
k F((a )) = f k (a ),

k = 0,1,2,..., n

Forma general a dezvoltarii funciei f(x), n serie Taylor, n jurul unui f (n ) (a ) punct x=a este: (x a )n . Funcia MATLAB, pentru calculul primilor n n! n=0

termeni ai dezvoltrii, se utilizeaz funcia taylor(f(x), n, a). De exemplu, pentru determinarea primilor 4 termeni ai dezvoltrii funciei f ( x ) = e x , n jurul punctului x=3, se va folosi urmtoarea secven:
2

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 seciune a acestei lucrri.

REZOLVAREA ECUAIILOR SIMBOLICE


ECUAII ALGEBRICE
Rezolvarea ecuaiilor 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 operaii i calcule matematice. Funcia MATLAB folosit pentru rezolvarea direct a ecuaiilor algebrice, este solve(), n care parametrii de intrare sunt ecuaiile simbolice. Dac ecuaia are forma f(x)=0, atunci funcia MATLAB se apeleaz n forma simpl: solve(f(x)), n timp ce, pentru ecuaii de forma f(x)=g(x), funcia MATLAB se apeleaz cu parametrii de intrare marcai ca iruri de caractere: solve(f(x)=g(x)). n cazul sistemelor de ecuaii, se respect ultima regul de scriere a parametrilor de intrare, ecuaiile 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]

Rezolvarea sistemului de ecuaii cu urmtoarea secven: syms x y

x = 2 y -2 - 2 2ln(x + 7) = yln3

este realizabil

[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 soluiei acestui sistem de ecuaii, MATLAB folosete transformarea ln 16 =2,7726. Astfel, soluia sistemului se mai poate scrie sub forma consacrat {x = 2; y = 4} .

52

MATLAB n ingineria mecanic

Rezolvarea ecuaiilor parametrice sau a sistemelor cu numar mare de ecuaii, MATLAB afieaz un cmp S al soluiilor. Extragerea soluiilor din acest cmp se realizeaz folosind o instruciune simpl:S.(nume_soluie). Pentru ilustrarea acestor situaii, se studiaz rezolvarea 2 ( x + y ) = 3z 1 2 x + ax + (a + 1)y + a = 0 ( y + z ) 2 = 3u 1 ; . Secvena urmtoare sistemelor: 2 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]


Cmpul soluiilor sistemului, S, este o matrice simbolic format din cele dou linii i o coloan a soluiilor pentru x, respectiv pentru y. Afiarea desfurat a soluiilor, se poate realiza cu instruciunea, 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 folosete secvena:

syms x y z u S=solve('(x+y)^2=3*z-1','(y+z)^2=3*u-1','(z+u)^2=3*x1','(u+x)^2=3*y-1')

MATLAB n ingineria mecanic


S= u: [2x1 sym] x: [2x1 sym] y: [2x1 sym] z: [2x1 sym]
iar afiarea detaliat a soluiilor este dat cu comanda:

53

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 ECUAIILOR DIFERENIALE


Rezolvarea ecuaiilor difereniale ordinare este posibil n MATLAB, folosind funcia dedicat dsolve(), n care, parametrii de intrare sunt ecuaia diferenial, scris simbolic (folosind convenia de scriere a irurilor de caractere), respectiv condiiile la limit, dac acestea exist. Parametrii de intrare se separ prin caracterul virgul. Difereniala de ordinul n se specific n ecuaie prin simbolul Dny, n care, D reprezint simbolizarea diferenialei, n reprezint ordinul acesteia, iar y este integrala funciei, sau variabila dependent (de exemplu, D2y reprezint difereniala de ordinul doi a funciei y). Variabila independent implicit, recunoscut de MATLAB, este t. Aceast variabil poate fi schimbat, prin adugarea, ca parametru de intrare, n irul parametrilor funciei MATLAB dsolve(ecuatie,cond_la_lim_1,con_la_lim_2,variabila_indep_noua). De 0.9 y , y ( 0) = 1 , respectiv exemplu, rezolvarea ecuaiilor difereniale: y = 1 + 2t 0.9 y = y , y (0) = 1 , este similar, cu observaia 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. Secvena MATLAB, pentru rezolvarea acestor ecuaii difereniale, 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 n ingineria mecanic

respectiv, pentru a doua ecuaie:

y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x') y2 = 1/(1+2*x)^(9/20)
Rezolvarea ecuaiei a doua, fr 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 convenia de scriere comun, soluiile sunt: y 1 = (1 + 2t )0.45 ;

y 2 = (1 + 2x )

0.45

respectiv y 3 = e

0.9 t 1+ 2 x

EXEMPLE DE UTILIZARE A OPERATORILOR I FUNCIILOR MATLAB DE BAZ


1).-Calculul puterii unui numr:

S se calculeze:

1 44

+ 83

n MATLAB, se folosete algoritmul: E1=3^5-4^(1/4)+8^(-3) ceea ce are ca rezultat: E1 = 241.5877 2).-Calculul expresiilor cu numere iraionale S se calculeze expresiile:
2

E 2 = 15 ;

E 3 = 43,56 ;

2 E 4 = 3 18 45 + 23 8 99 88,9

MATLAB n ingineria mecanic


n MATLAB, se folosete algoritmul:

55

E2=15^(1/3) [Enter] E2 = 2.4662 E3=sqrt(43.56) [Enter] E3 = 6.6000 E4=((18-45*(2/88.9))^(1/3)+sqrt(23))^2-99^(1/8) [Enter] E4 = 52.4891


3).- Calculul expresiilor exponeniale i logaritmice S se calculeze :

E 5 = e 5

3 1 ; E 8 = log 4 90 4 3 ; E 6 = ln 9 ; E 7 = lg 3 2002 13 5 2

E9 =

1 2 3 4 e

12 3 5 3 12 4 3 E 10 = (1 + 2 + 3 ) : 14 + 5 34 ln 23 8 log 5 125 _ 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 n ingineria mecanic

E8 = 3.2353
1 2 3 4 e

Pentru calculul expresiei E 9 =

, se procedeaz astfel :

-se introduce, de la tastatur:

x=[1,2;3,4];
-se determin valoarea expresiei, folosind funcia 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 funciei MATLAB exp(), matricei

1 2 : 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 OBSERVAII:

Pentru calculul expresiilor iraionale (radicali cu indice diferit de 2: a sau


a

bc

) se folosete algoritmul pentru calculul puterilor cu exponent


1 a b

raional :

sau

c a b

Pentru calculul exponenialei (

ex

) nu se folosete operatorul putere (^);

MATLAB n ingineria mecanic

57

Pentru calculul expresiilor logaritmice cu logaritmi n alt baz dect baza natural ( ln x) sau 10 ( lg x ) se folosete formula de schimbare a bazei log c b logaritmului : log a b = log c a MATLAB dispune de o serie de combinaii, implicite, de taste pentru crearea comenzilor rapide (conform tabelului):
COMBINAIA DE TASTE Ctrl+p Ctrl+n Ctrl+b Ctrl+f Ctrl+r Ctrl+l Ctrl+a Ctrl+e Ctrl+u Ctrl+d Ctrl+h Ctrl+k SEMNIFICAIA
Readuce linia anterioar (prin acionarea repetata a tastei sgeat sus se readuc toate liniile anterioare, n linia curent) Readuce linia urmtoare (prin acionarea repetat a tastei sgeat jos se readuc toate liniile urmtoare, n linia curent) Salt la stnga cu un caracter Salt la dreapta cu un caracter Salt la dreapta, peste un cuvnt Salt la stnga, peste un cuvnt Salt la nceputul liniei de comand Salt la sfritul liniei de comand terge linia curent terge caracterul din dreapta cursorului terge caracterul din stnga cursorului terge de la cursor pn la sfritul liniei de comand curente.

TASTA

Ctrl+

Ctrl+ Home End Esc Del Backspace

APLICAII

S se introduc de la tastatur, urmtoarele matrici :

1 A= 3

2 3 4
2 D= 3 5

e lg 9 0 ln 5 B= 2 ln 7 lg 18 6 9 0 2 3 3 1 4 6 5 ln 9 7

1 C= 2 3

58

MATLAB n ingineria mecanic

S se scrie numrul :

123,456789012345678901 n formatele: scurt, lung, cu virgul mobil scurt = eng. scurt, cu virgul mobil lung =eng. lung, raional, cu dou zecimale exacte.
Fiind dat matricea : 3 2 A = e log 3 5 5

ln 4
4

log 3 2002 e ln 4 4

3 123 1.2 e 3 4 1 4 ln 12 1 2

23 5

s se determine (n MATLAB) matricea format astfel: A1-din elementele de pe poziiile: (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 conveniilor 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:


lg 8 3

e E=

15 ln 6 2 x 2 ln x + 23 lg 23 , pentru x= log 3 e 3 ln 5 + 16 . 6 3+ 8

MATLAB n ingineria mecanic

59

CAPITOLUL II
OPERAIILE ARITMETICE CU MATRICI
n MATLAB operaiile aritmetice cu matrici (considerm matricile date A i B) au urmtoarea sintax:

A+B A-B A*B A/B A\B A^B A'

-adunare -scdere -nmulire -mprire la dreapta -mprire la stnga -ridicare la putere -transpunere

iar, operaiile aritmetice cu tablouri de valori (considerm tablourile de valori A i B) au urmtoarea sintax: A.*B -nmulire A./B -mprire la dreapta A.\B -mprire la stnga A.^B -ridicare la putere A.' -transpunere Versiunea MATLAB 6 dispune de funcii specifice pentru realizarea operaiilor aritmetice cu matrici, respectiv, cu tablouri de valori: a)-Funcii MATLAB specifice operaiilor cu matrici

A+B A-B A*B A/B A\B A^B A'

- plus(A,B) - minus(A,B) - mtimes(A,B) - mrdivide(A,B) - mldivide(A,B) - mpower(A,B) - ctranspose(A)

b)- Funcii MATLAB specifice operaiilor cu tablouri de valori

A.*B

- times(A,B)

60

MATLAB n ingineria mecanic

A./B A.\B A.^B A.'

- rdivide(A,B) - ldivide(A,B) - power(A,B) - transpose(A)

ADUNAREA I SCDEREA MATRICILOR


Aceste operaii se pot realiza dac este respectat condiia ca matricile s aib aceeai dimensiune (exclus cazul n care se dorete adunarea sau scderea dintre o matrice i un scalar, unde MATLAB realizeaz operaia n modul urmtor: scalarul este adunat fiecrui element al matricei, fiind respectat regula de baz, din algebra elementar, n acest caz).

Ex.: 1 2 5 6 a= b= ; ; c=2. 3 4 7 8 S se calculeze:a+b; a-b;a+c.


Fie: Rezolvare:Cu secvena MATLAB urmtoare, 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.:


Fie:

1 2 m= ; 3 4

n= lg 8 e

4 ln 7 1 e 2
3

MATLAB n ingineria mecanic


S se calculeze: M=m+n

61

Rezolvare: Cu secvena 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 afiat 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 cror 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 secvena MATLAB urmtoare 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 n ingineria mecanic

Not: De observat modul de afiare 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 dect pentru matrici. Astfel doi vectori (a, b), avnd aceeai lungime, se pot inmuli n orice ordine : a*b, respectiv b*a. De exemplu, considernd doi vectori dai 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 dai simbolic: syms a11 a21 a31 b11 b12 b13 a_simbolic=[a11 ;a21; a31] a_simbolic = [ a11] [ a21] [ a31]

MATLAB n ingineria mecanic


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]

63

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, apsate simultan, sau caracterul corespunztor de pe tastatura numeric). Pentru ca produsul a dou matrici s se poat realiza este necesar a se ndeplini urmtoarea condiie esenial: numrul de coloane ale primei matrici s fie egal cu numrul de linii ale celei de-a doua matrici. Astfel, dac se nmulesc dou matrici a(m,n) i b(n,p) se obine o matrice c(m,p), aceast regul aplicnduse i n cazul nmulirii unei matrici cu un vector-linie sau vector-coloan). Ex.: 1 2 3 3 2i 1 2i 7 3 4 ; b= Fie: a= ; c=2. 5 8 9 0 1 6 8 i S se calculeze produsele : ab; ba; ac; bc. Rezolvare:Cu secvena MATLAB urmtoare, 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 37.1962 31.2877 25.1327+1.7321i 15 27 10.4558 28.2743-3i 2i 6i 10i -2 3 - 2i 7 - 6i 7.8284 -10i 5.1416+i 19 45 51.9706 18.8496+7i

64

MATLAB n ingineria mecanic

a2=b*a [Enter] ??? Error using Inner matrix dimensions must agree. Eroare la utilizarea operatorului * Matricile trebuie s respecte condiia dimensional a3=a*c [Enter] a3 = 2.0000 6.0000 10.0000 0 + 2.0000i a4=b*c [Enter] a4 = 3.4641 -6 16.0000 18
Observaie: mesajul:

4.0000 8.0000 5.6569 6.2832

4i 0

2 - 4i 2

14 12

n cazul produsului a2=b*a, MATLAB afieaz ??? Error using ==> * Inner matrix dimensions must agree. (ntruct dimensiunile matricelor implicate n produs nu respect condiia impus !

nmulirea

dou

matrici

simbolice,

a 11 A = a 21 a 31

a 12 a 22 a 32

a 13 a 23 a 33

b 11 B = b 21 b 31

b 12 b 22 b 32

b 13 b 23 ., se realizeaz astfel: 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


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 secvena MATLAB urmtoare se determin matricea-produs X=A*B:

65

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]

MPRIREA LA DREAPTA
mprirea 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 condiia impus nmulirii 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 condiia m==j. mparirea la dreapta, a dou matrici, const, de fapt, n rezolvarea ecuaiei X*a=b. Not :Se cunoate faptul c o matrice admite invers numai dac aceasta este ptratic i determinantul este nenul.

Ex.:
Fie:

1 2 5 6 a= b= ; ; 3 4 7 8 S se calculeze:a/b; b/a. Cu secvena MATLAB urmtoare, rezult: a=[1,2;3,4];b=[5,6;7,8]; a1=a/b [Enter]

66

MATLAB n ingineria mecanic

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): 3 1 2 Fie: a= ; b= 8 3 4 3 2i 1 2i 7 . 9 0 1 6

S se calculeze ctul : d=a/b. Cu secvena MATLAB urmtoare, 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 afia urmtorul rspuns: ??? Error using ==> / Matrix dimensions must agree. ???Eroare la utilizarea operatorului / Dimensiunile matricilor trebuie sa fie adecvate
a Pentru mparirea la dreapta, a dou matrici simbolice, A = 11 a 21 B = [b 1 b 2 ] , se procedeaz astfel: a 12 i a 22

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


B=[b1 b2] B= [ b1 b2]
Cu secvena,MATLAB, urmtoare se determin matricea- X=B/A:

67

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 Soluiile sistemului de ecuaii: 1 11 x 1 a 21 + x 2 a 22 = b 1 urmtoarele comenzi

se obin cu

x1 = X(1) x1 = -(a21*b2-b1*a22)/(a11*a22-a12*a21) x2 = X(2) x2 = (a11*b2-a12*b1)/(a11*a22-a12*a21)

MPRIREA LA STNGA
Operaia de mprire la stnga este simbolizat cu operatorul \ (backslash), reprezentnd, n termeni aritmetici, produsul dintre inversa primei matrici i cea de-a doua matrice. Astfel, condiia necesar (dar nu suficient) pentru ca o matrice A s se mpart la stnga prin matricea B, este ca matricea A s admit invers i n plus aceast invers trebuie s ndeplineasc i condiia necesar ca dou matrici s se poat nmuli. Ca o concluzie, se va ncerca mprirea la stnga, sau la dreapta, a dou matrici, numai n cazul n care cele dou matrici sunt ptratice, i dac matricea, la care se mparte, este nesingular, condiia pentru nmulire s fie ndeplinit (numrul de coloane ale primei matrici egal cu numrul de linii ale celei de-a doua matrici ).

Ex.6:
Fie:

1 2 5 6 A= B= ; ; 3 4 7 8 S se calculeze:A\B; B\A.

68

MATLAB n ingineria mecanic

Cu secvena MATLAB urmtoare, 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 mprirea unor matrici ale cror elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie dou matrici, A i B, ale cror elemente sunt date simbolic a 12 b 11 b 12 b 13 a A(2x2)=[aij], B(2x3)=[bik]: A = 11 . Se cere i B = b a 21 a 22 21 b 22 b 23 matricea X=B/A. Cu secvena MATLAB urmtoare se determin matricea X, ca fiind ctul 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 crei exprimare este 1 pentru i = k dat de: ik = ). Aceast matrice este utilizat n calculul pentru i k 0 tensorial, n teoria deformrii elastice, n teoria deformrii plastice, respectiv n

MATLAB n ingineria mecanic

69

calculele aferente analizei cu elemente finite a proceselor de deformare plastic i elasto-vsco-plastic a materialelor. Vectorii spaiali, definii pe spaiul cu trei dimensiuni 3 , reprezint mrimi reale, de exemplu mrimi fizice, care conin trei informaii (trei scalari). Descrierea unui vector v n baze diferite ai i bi prin coordonatele respective, nu schimb valoarea sa intrinsec (v se numete i mrime invariant):
i i v = va ai = vb bi

Toate mrimile invariante se numesc tensori (un exemplu tensorul tensiunilor care, dat prin componente, se reprezint x xy componentelor, ntr-un sistem de axe x, y, z: T = xy y xz yz

de tensor este prin matricea xz yz , acesta z

caracteriznd starea de eforturi unitare, a unui punct situat pe o suprafa oarecare a corpului supus aciunii unor fore exterioare). Un scalar este tensor, dac poate fi scris ca produsul scalar uv 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: 0 0 m + + [S ] = 0 m 0 ; m = x y z ; 3 0 0 m

Deviatorul tensiunilor: xy m x [D ] = y x y m zy zx [T ] = [S r ] + [D ] ; xz yz z m ;

70

MATLAB n ingineria mecanic

Invarianii 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 funcie de tensiunile normale principale 1 , 2 , 3 , sunt : 1 = 1 + 2 + 3

2 = 1 2 + 2 3 + 3 1 3 = 1 2 3

Tensorul deformaiilor specifice: 1 xy x 2 [T ] = 1 y x y 2 1 1 2 zx 2 zy

1 xz 2 1 yz 2 z

Tensorul sferic al deformaiilor:


m [S ] = 0 0

0
m

0 x + y + z ; 0 ; m = 3 m

Deviatorul deformaiilor specifice:


x m [D ] = 1 y x 2 1 2 zx

1 xy 2
y m

1 zy 2

; z m

1 xz 2 1 yz 2

MATLAB n ingineria mecanic

71

Produsul Kronecker se realizeaz cu funcia MATLAB kron(X,Y), rezultatul fiind obinut dup urmtoarea regul de calcul:

X(1,1) * Y X(1,2) * Y K X(1, n ) * Y K X(m,1) * Y X(m,2) * Y K 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 4 5 6 3 6 9 12 15 18

2 4 6 8 10 12 4 8 12 16 20 24

FUNCIA PUTERE ATAAT UNEI MATRICI


Operaia 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 nsi: b^c=b*b*b**b de c ori

72

MATLAB n ingineria mecanic

Dac b este un scalar iar c este o matrice atunci calculul puterii realizeaz folosind valorile proprii ale matricei c respectiv ale scalarului b.

bc

se

Obs. Operaia are sens numai dac matricea b este ptratic iar c un scalar.

Ex.7:
Fie: a=

1 2 ; 3 4

b=3;c= - 3. S se calculeze:a^b; b^a; a^c

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 urmtoarea 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 operaiei, caracterul apostrof : . De exemplu, pentru matricea x : x=[1,2,3;4,5,6] ; transpusa x1 este determinat Cu secvena MATLAB urmtoare, rezult:

MATLAB n ingineria mecanic


x1=x x1 = 1 2 3
[Enter]

73

4 5 6

Determinantul unei matrici


Obs. Numai matricile ptratice permit calculul determinantului, n timp ce, matricele cu numr de linii diferit de numrul de coloane, tablourile , permit doar calculul minorilor . Calculul determinantului unei matrici se realizeaz cu funcia det( ) i se apeleaz cu sintaxa:

D = det(X) Ex:
S se calculeze determinanii urmtoarelor matrici:

1 2 A= 3 4

1 2 3 3 B = 4 5 6 C = 8 7 8 9

3 2i 1 2i 7 . 9 0 1 6

Cu secvena MATLAB urmtoare, 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 urmtorul mesaj de eroare (datorat dimensiunii matricei C): ??? Error using ==> det Matrix must be square. ??? Eroare la utilizarea funciei det () Matricea trebuie s fie ptratic

74

MATLAB n ingineria mecanic

n MATLAB(versiunile superioare versiunii 5.3), este disponibil calculul determinantului unei matrici ale crei elemente sunt simboluri literale declarate cu a b funcia syms. De exemplu, pentru calculul determinantului matricei D = se c d poate utiliza urmtoarea secven :

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


care returneaz urmtoarea valoare:

D1= a*d - b*c 2 / 3 1 / 3 Similar este cazul matricei A = , unde se poate utiliza 1 1 urmtoarea 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 consideraii teoretice i n anumite tipuri de calcule simbolice, dar este, datorit scalrii i erorilor de aproximare, mai puin utilizabil n calcule numerice.

CALCULUL INVERSEI
Dac o matrice A este ptratic i nesingular (determinantul matricei este nenul), ecuaiile AX = I i XA = I (matricea I fiind matricea unitate) au aceeai soluie, X. Aceast soluie se numete inversa matricei A, se noteaz cu A-1 i se calculeaz folosind funcia MATLAB inv(A). Dac matricea A este ptratic i nesingular, atunci, fr 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 mprire la stnga i mprire la dreapta este preferat utilizrii inversei matricei, datorit timpului de calcul mai redus, a. volumului de memorie cerut i a unor proprieti de detecie a erorilor mai bune. Prin definiie, inversa unei matrici ptratice A(i,i), este matriea A-1, care satisface relaia:( 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 funcia MATLAB inv (), i se apeleaz cu sintaxa: Y = inv(X) Funcia se utilizeaz frecvent pentru rezolvarea sistemelor de ecuaii liniare A*X=B, sau X*A=B soluia sistemului este X=inv(A)*B, respectiv X=B*inv(A).

Ex. : 2 1 Se cere inversa matricei: A = . 1 1 Cu secvena MATLAB urmtoare, 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 determinanilor. Pentru acest tip de matrici se poate utiliza pseudo- inversa Moore-Penrose, care se calculeaz cu funcia pinv(). De exemplu, pentru matricea 9 4 C = 2 8 se va calcula pseudoinversa cu urmtoarea 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 n ingineria mecanic

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 toi minorii de ordin mai mare dect k (dac exist) sunt nuli. Rangul unei matrici este, prin urmare, un scalar 1 k min(m,n).Rangul unei matrici reprezint numrul de linii sau coloane liniar independente, i se determin cu funcia rank( ). Se apeleaz cu una dintre sintaxele:

r = rank (X)

r = rank (X, tol)

Funcia rank, apelat cu sintaxa r = rank (X, tol), returneaz numrul de valori singulare ale lui X, mai mari dect parametrul opional tol.

Ex.: 5 4 3 2 3 3 . S se determine rangul matricei A = 3 1 3 5 13 11


Din algebra elementar se cunoate c ntruct toi minorii de ordinul al treilea ai matricei A sunt nuli:

MATLAB n ingineria mecanic


5 3 3 =3 13 5 3 5 3 13

77
4 3 =0 11 3 2 =-90, 3 1

3 2 3 1 3 5

4 3 2 4 2 3 = 3 1 3 = 1 11 3 5 11 5

3 13

i, deoarece, exist minori de ordinul al doilea nenuli, de exemplu rezult c rangul matricei A este:

rang A = 2

Acest rezultat se obine Cu secvena MATLAB urmtoare, rezult: A = [3,2,-5,4;3,-1,3,-3;3,5,-13,11]; k = rank(A) k= 2

CONDITIONAREA UNEI MATRICI


Importana cunoaterii condiionrii unei matrici decurge din faptul c rezultatele obinute prin calcul numeric corespund ntotdeauna unei probleme perturbate, aceasta datorndu-se, n special erorilor de rotunjire, a calculelor cu precizie ridicat, respectiv, se datoreaz sensibilitii preciziei de calcul n timpul rezolvrii sistemelor liniare. Determinarea condiionrii are la baz teoria matematic a perturbaiilor. Se spune c o funcie f(x) este ru- condiionat dac pentru un x1 "apropiat" de x, funcia f(x1) difer "mult" de f(x). Altfel, o funcie se spune c este bine condiionat dac pentru un x1 "apropiat" de x, funcia f(x1) este "apropiat" de f(x). Trebuie remarcat c termenii "apropiat" i "mult" sunt vagi, motiv pentru care este necesar utilizarea numerelor de condiionare. Numrul de condiionare indic sensibilitatea soluiei unui sistem de ecuaii liniare fa de perturbaiile generate de calculele cu coeficienii ecuaiilor (calculul inversei matricei coeficienilor necunoscutelor, de exemplu), i d indicaii asupra preciziei rezultatelor la inversarea matricelor i rezolvarea ecuaiilor liniare. O matrice bine-condiionat este o matrice relativ insensibil la mici perturbaii. Pentru un sistem de ecuaii liniare Ax=B, dac matricea A este cunoscut i nu este afectat de erori, dar vectorul B, este afectat, atunci, considernd o perturbare a acestuia evaluat la mrimea B (vectorul perturbaiilor), vectorul soluie x devine x + x , iar sistemul perturbat este :

A(x + x ) = B + B , sau x = A 1 B , deci x A 1

78

MATLAB n ingineria mecanic

Egalitatea din ultima relaie, se obine numai pentru anumii vectori B . Aplicnd norma ambilor membri ai egalitii Ax=B, se obine :

B A

x ,

i, folosind cteva calcule simple de nmulire i identificare, se obine (presupunnd c B 0 ) :

x x

A -1

B B

n care A-1 este matricea invers a lui A, obinut prin calcule (afectate de erori de rotunjire, adic AA -1 I ). Astfel, pentru o matrice nesingular A, pozitiv definit, se definete numrul de condiionare calculat ca raportul dintre cea mai mare i cea mai mic valoare proprie a acesteia :

cond.( A ) = A

A -1 =

1 1 2

n aceste condiii, relaia de estimare a erorii soluiei devine :


x x cond.( A ) B B

n care

B B

msoar incertitudinea relativ existent n vectorul B (de exemplu,

dac elementele vectorului B sunt date cu trei cifre semnificative, atunci de ordinul 10-3 sau 10-4), iar

B B

este

x x

reprezint incertitudinea relativ existent n

vectorul x, i este determinat de incertitudinea existent n vectorul B. Dac, att matricea A ct 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 coeficieni perturbai de erori, atunci sistemul Ax=B devine :

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

(x + x ) = (A + A )1 B
Ultima relaie, aranjat, devine :

sau x = (A + A )1 A 1 B

x = A 1 (A )(x + x ) ,
pentru care, dac se aplic norma, se obine :

x A -1

A x + x sau

x x + x

cond. (A )

A A

Din aceast relaie se observ c incertitudinea din vectorul soluie x, relativ la x + x , este mrginit de incertitudinea relativ a matricei A, nmulit cu numrul de condiionare al matricei A. n concluzie, dac numrul de condiionare cond(A) este mare, atunci perturbaiile mici introduse de A i/sau B pot introduce perturbaii mari n x (problema liniar este slab condiionat, adic soluiile sistemului de ecuaii sunt foarte evident influenate de erorile de calcul ale matricei A, respectiv de datele masurate, adic elementele vectorului B). Dac numrul de condiionare cond(A) este mic, atunci perturbaii reduse introduse de A i/sau B pot induce perturbaii mici n vectorul soluiei x (problema liniar este bine condiionat, adic soluiile sistemului de ecuaii sunt neinfluenate de erorile de calcul ale matricei A). Aceste elemente servesc la corectarea soluiei obinute din calcul, la alegerea metodei de calcul (innd seama de numrul i ordinea operaiilor de executat), la modul de reprezentare a informaiei 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. Numrul de condiionare se determin, n MATLAB, cu funcia cond() i se apeleaz cu sintaxa:

cond(X)

80

MATLAB n ingineria mecanic

O funcie mai performant care permite calculul numrului de condiionare este rcond() i se apeleaz cu sintaxa:

rcond(X)
Funcia MATLAB rcond(X) returneaz estimarea numrului de condiionare 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. Funciile LAPACK sau BLAS pot fi apelate prin fiiere MEX ale utilizatorului. Dac matricea X este bine condiionat, rcond are valoarea aproximativ 1.0, iar dac este slab condiionat, atunci rcond este aproximativ 0,0. Estimarea celui mai mic numr de condiionare se face cu funcia condest(), i se apeleaz cu sintaxa:

condest(X) Ex.:
Calculai numerele de condiionare pentru sistemul iniial de ecuaii:

i pentru sistemul "perturbat":

n MATLAB:

-matricea sistemului iniial: A1=[6 6.917;1 1.152]; matricea sistemului perturbat : A2=[6 6.912;1 1.152];

MATLAB n ingineria mecanic

81

-numerele de condiionare : 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 condiionat. Acest lucru se verific i prin rezolvarea celor dou sisteme, cu valori "apropiate" ale coeficienilor (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
Condiionarea slab a matricei se reflect n diferenele foarte mari ale soluiilor: de exemplu, prima soluie, pentru sistemul ne-perturbat, este x1=7,3158, n timp ce pentru sistemulperturbat, soluia x1= - 8,1041 1013.

Ex.: Se vor determina numerele de condiionare pentru sistemul iniial de ecuaii: 45x 1 + 23,123x 2 = 2,34 + 15x 2 = 3,45 x1
respectiv pentru sistemul "perturbat": 45x 1 + 23,124x 2 = 2,34 + 15x 2 = 3,45 x1 n Matlab, problema se rezolv cu urmtoarea secven: a=[45,23.123;1,15]; a1=[45,23.124;1,15];

82

MATLAB n ingineria mecanic

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 condiionat, rezistent la perturbaii, iar numerele de condiionare reflect acest lucru, prin valorile apropiate, pn la cifra zecimal de ordinul patru. Rezolvnd sistemul de ecuaii, n cele dou variante, se obin 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 ecuaii (iniial i perturbat), s-a obinut, practic, aceeai soluie.

MATLAB n ingineria mecanic


FACTORIZAREA MATRICILOR

83

Factorizarea reprezint operaia de trecere de la o mulime la mulimea claselor de echivalen, n raport cu o relaie de echivalen dat. Factorizarea se aplic, la rezolvarea sistemelor de ecuaii liniare. In esen, factorizarea este o procedur de transformare a unei matrici, n general ptratice, 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 coeficienilor (matricea A). Astfel, pentru un sistem Ax=B:

K a 1n K a 2n , este M a n 2 K a nn x1 b1 x b matricea coeficienilor; x = 2 este vectorul necunoscutelor; B = 2 este M M xn b n vectorul termenilor liberi, ai sistemului, metoda general de transformare ntr-un sistem echivalent, Metoda de eliminare a lui Gauss, se prezint n continuare.

a 11 x 1 + a 12 x 2 a 21 x 1 + a 22 x 2 a n1 x 1 + a n 2 x 2

+ K + a 1n x n = b 1 + K + a 2n x n = b 2 , n care M + K + a nn x n = b n

a 11 a A = 21 a n1

a 12 a 22

Prima transformare aplicat sistemului Ax=B, are ca efect eliminarea necunoscutei x1 din celelalte n-1 ecuaii, adunnd prima ecuaie la urmtoarele n-1, a (1) 1 nmulit cu (1i) , obinndu-se un nou sistem de ecuaii: A (1) x = B (1) . n a a 11 doua transformare, se folosete a doua ecuaie, din sistemul A (1)x = B (1) , nmulit

a (2 ) i cu (2 2 , pentru eliminarea necunoscutei x2 din ultimele n-2 ecuaii ale acestui a ) 22 sistem, obinndu-se un nou sistem: A (2 )x = B (2 ) . Se observ c nainte de

eliminarea necunoscutei xk, sistemul echivalent, obinut dup eliminarea necunoscutelor x1, x2, , xk-1, poate fi scris sub forma: A (k ) x = B (k ) , k=1,2, , n

84

MATLAB n ingineria mecanic

a crui descriere analitic este:

b (k ) 1k ) ( (k ) = a (k ) , B (k ) = b 2 , iar elementele matricei A (k ) sunt: A i,j M (k ) b n

( )

(k 1) ik 1 ai , j , (k ) = 0, ai , j k,ij k - 1 (k 1) a ( ( ) a i kj 1) i ,k 1 akk 1j , i k, j k , 1, (k 1) a k 1, k 1
vectorului B (k ) , se calculeaz cu relaiile:

, respectiv, elementele

b (k 1) , i (k ) = a (k 11) (k 1) bi (k 1) i ,k (k 1) b k 1 , bi a k 1,k 1
Pentru k=n, sistemul nou obinut este:

i k 1 ik

a (1) x 1 + a (1) x 2 + K + a (1) x k + K + a (1)x n = b (1) 1k 1n 1 12 11 a (2 ) x 2 + K + a (2 ) x k + K + a (2 ) x n = b (2 ) 2 2n 2k 22 M (k (k ( a kk) x k + K + a kn) x n = b kk ) M (n ) x = b (n ) a nn n n


Aceast metod presupune realizarea unui numr mare de operaii de nmulire, respectiv de mprire sau pentru aflarea necunoscutelor, dar nu este folosit o mare parte a memoriei calculatorului pentru aceste calcule. Se cunoate c o matrice A nxn poate fi scris sub forma uni produs LU de dou matrice, unde matricea L este inferior triunghiular i U superior

MATLAB n ingineria mecanic

85

a 12 a det[a 11 ] 0, det 11 0, K , 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 K a 1n a 21 a 22 K a 2n = A = LU = M a n1 a n 2 K a nn 0 0 0 0 u 11 u 12 u 13 K u 1n 1 0 0 0 0 u 22 u 23 K u 2n l 21 1 0 0 0 = l 31 l 32 1 0 u 33 K u 3n M M l n1 l n 2 K l n ,n 1 1 0 0 0 0 u nn
triunghiular, dac Dac se relizeaz produsul dintre cele dou matrici L i U i se face identificarea termenilor, se obin n2 ecuaii neliniare cu n2 necunoscute. Se observ c : u 11 = a 11 , u 12 = a 12 , K , u 1n = a 1n iar, dac se determin elementele primei coloane de sub diagonala principal, se obin ecuaiile:

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


Forma general a ecuaiilor din care rezult elementele liniei k, din matricea U, este:

j=1

k 1

l kju j,k + u k ,k +1 = a kk l kju j,k +1 + u k ,k +1 = a k ,k +1


M

j=1
k 1

k 1

l kju jn + u kn = a kn j=1

u k ,k = a k ,k

l kju jk j=1 l kju j,k +1 j=1


k 1

k 1

u k ,k +1 = a k ,k +1
k 1

u kn = a kn

l kju jn j=1

86

MATLAB n ingineria mecanic

Elementele coloanei k a matricei L (inferioare diagonalei principale), sunt date de ecuaiile:

l k 2,ju j,k + l k 2,k u k ,k = a k 2,k j 1


+ + + =

= k 1

l k 1, ju j,k + l k 1,k u k ,k = a k 1,k j 1


+ + +

k 1

l n, ju j,k + l n,k u k ,k = a n,k j 1


=

k 1

k 1 1 a l k +1, ju jk l k +1,k = k + 1,k u k ,k j=1 k 1 1 l k + 2,k = a k + 2,k l k + 2, j u jk u k ,k j=1 M k 1 l n ,k = 1 a n ,k l n , j u jk u k ,k j=1

MATLAB folosete trei metode de baz, pentru factorizarea matricilor:

Factorizarea Cholesky-pentru matrici simetrice, pozitiv definite Factorizarea Lower Upper (LU)-eliminarea Gauss, pentru matrici ptratice Factorizarea ortogonal (QR)- pentru matrici rectangulare

Toate aceste metode de factorizare se apeleaz, n MATLAB, utiliznd funciile 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 ecuaii liniare, care permit utilizarea matricilor triunghiulare (factorizri), se rezolv uor folosind pre- sau post-substituia.

FACTORIZAREA CHOLESKY
Factorizarea Cholesky este o metod utilizat pentru rezolvarea unui sistem de ecuaii 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 factorizrii Cholesky, este prezentat n figura alturat, 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 funcia 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 2 3 1 3 6 1 4 10 1 5 15 1 6 21 1 7 28 L=chol(S)

1 1 1 1 4 5 6 7 10 15 21 28 20 35 56 84 35 70 126 210 56 126 252 462 84 210 462 924

88

MATLAB n ingineria mecanic

L= 1 0 0 0 0 0 0

1 1 0 0 0 0 0

1 2 1 0 0 0 0

1 3 3 1 0 0 0

1 1 1 4 5 6 6 10 15 4 10 20 1 5 15 0 1 6 0 0 1

Condiiile pentru factorizarea Cholesky sunt: i. Matricea S s fie pozitiv definit ii. S= (Lt )* (L) i det(S)>0 (At este notaia pentru matricea transpus matricei A); iii. Exist o matrice unic L, superior triunghiular, nesingular, care satisface relaia:S=Lt*L Un sistem de ecuaii lineare SX=B devine:

RtRX=B
iar soluia acestuia presupune rezolvarea succesiv a sistemelor:

RtY=B i RX=Y.
ntruct, operatorul MATLAB mprire la stnga (backslash) recunoate ca operanzi matricile triunghiulare, rezolvarea sistemelor de ecuaii lineare se poate realiza folosind:

X=R\(R\B) Ex.:
Fie sistemul de ecuaii:

9x 1 x 2 + 2x = 1 3 x 1 + 8x 2 5x 3 = 2 2x 5 x + 7 x = 1 2 3 1
Soluiile acestui sistem, folosind factorizarea Cholesky, se gsesc prin urmtoarea secven: A=[9,-1,2;-1,8,-5;2,-5,7]; B=[1;-2;-1];

MATLAB n ingineria mecanic


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

89

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 ecuaii liniare dat prin: x1 + 8x 2 5x 3 = 2 , se folosete 2x 5 x + 7 x = 1 2 3 1 urmtorul model de rezolvare (solver):

Ex.: Se cere factorul Cholesky al matricei: 1 1 0 9 1 9 0 1 A= 1 0 9 1 9 0 1 1 Cu secvena MATLAB urmtoare, 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 n ingineria mecanic

p=0 (matrice pozitiv definit)


Soluie 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 2 x + 7 y + 2 z + 3t = 4


Soluia sistemului, folosind pachetul de programe DSP Simulink:

Blockset din

Solverul Cholesky va realiza, n acest caz o rezolvare a sistemului de ecuaii, dar activarea simulrii va avea ca rezultat afiarea 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 fiierul model Model de rezolvare, nu este pozitiv definit. n acest caz soluia dat prin Solverul Cholesky este eronat, ntruct matricea coeficienilor nu este pozitiv definit. Totui, rdcinile verific prima ecuaie, cu eroare la a patra zecimal. Rezolvarea sistemului prin determinarea matricei inverse (matricea coeficienilor fiind nesingular, iar rangul matricei extinse este egal cu rangul matricei coeficienilor, aadar sistemul admite soluie unic), are ca rezultat vectorul soluie: X=[ -5; 2; 6; -4;]. Aceast soluie verific toate ecuaiile sistemului. Not:-Dac se ncearc determinarea factorului Cholesky, prin funcia MATLAB chol([1,2,1,1;2,1,3,3;1,1,1,1;2,7,2,3]), va fi afiat un mesaj de eroare: (??? Error using ==> chol Matrix must be positive definite.) ??? Eroare la utilizarea operatorului chol Matricea trebuie s fie pozitiv definit ntruct matricea de la argumentul funciei chol() are elemente cu mult diferite.

FACTORIZAREA LOWER-UPPER

(LU)

Prin factorizarea lower-upper (lu), o matrice ptratic 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 obinerea inversei unei matrici cu funcia 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 aceeai metod), respectiv pentru calculul determinantului matricelor cu funcia det() (ca produs dintre determinanul matricei inferior triunghiular L i determinanul matricei superior triunghiular U). Este, totodat, baza rezolvrii ecuaiilor liniare prin "mprirea matricelor" obinut cu operatorii \ i / . Permutarea liniilor sau coloanelor unei matrici se poate exemplifica foarte sugestiv printr-o schem cu blocuri DSP. Presupunem ca se dorete permutarea

92

MATLAB n ingineria mecanic

1 2 liniilor unei matrici A = 4 5 7 8 respectiv permutarea coloanelor, schema bloc este urmtoarea:

3 6 dup urmtorul index: P=[2,1,3,3,2,2,], 0


dup urmtoarea regul:Q=[2,1,3,2,2]. Atunci,

Factorizarea lower-upper se realizeaz dup urmtoarea schem generalizat:

MATLAB n ingineria mecanic

93

Factorizarea unei matrici, prin metoda lower-upper, se realizeaz cu funcia lu() i se apeleaz cu una dintre sintaxele:

1. [LU]=lu(S) - cu un singur parametru de ieire, matricea [LU] 2. [L,U]=lu(S) returneaz o matrice superior triunghiular, U, i o matrice inferior triunghiular permutat, L, astfel nct 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 nct L*P=P*S Ex.: 1 2 3 S se factorizeze matricea A = 4 5 6 prin metoda lower-upper. 7 8 0 Cu secvena 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 0,5714 0,5000 1,0000 1,0000 0 0
U= 7,0000 8,0000 0 0

Matricea triunghiular permutat

0 0,8571 3,0000 0 4,5000

Matricea superior triunghiular

unde, matricea L, este o permutare a matricei inferior triunghiulare, iar U este o matrice superior triunghiular. Apelarea funciei lu() cu trei parametri de ieire, are ca rezultat:

[L,U,P]=lu(A)

94

MATLAB n ingineria mecanic

L= 1.0000 0.1429 0.5714 U= 7.0000 0 0 P= 0 1 0 0 0 1 1 0 0

0 1.0000 0.5000 8.0000 0.8571 0

0 0 1.0000 0 3.0000 4.5000

n Matlab (versiuni superioare versiunii 5.3) este posibil factorizarea matricilor ptratice 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 obine matricea compus din matricea L, inferior triunghiular, i matricea superior triunghiular:

Matricea Ap, (linia 2 pivotat, astfel nct 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


0 0 6 1 4 0 sunt: L = 0.25 1 0 , respectiv U = 0 2 1 .5 0 .5 0 .5 1 0 0 0.75

95

Pentru a observa modul n care sunt determinate matricile L i U, se va apela funcia 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 0 0 6.0000 -2.0000 1.5000 0 -0.7500

[L,U,P]=lu(A) L= 1.0000 0 0.2500 1.0000 0.5000 0.5000 U= 4.0000 0 0 P= 0 1 0 1 0 0 0 0 1 0 -2.0000 0

0 0 1.0000 6.0000 1.5000 -0.7500

96

MATLAB n ingineria mecanic

Rezolvarea sistemelor de ecuaii AX=B prin factorizarea lower upper presupune urmtoarele etape: i. determinarea matricelor L i U cu funcia 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 instruiunea:

X=U\ (L\B)
necunoscute

De exemplu, pentru sistemul de 3 ecuaii i 3 x 2y + 3 z = 1 + 6z = 2 , se folosete urmtoarea secven MATLAB: 4x 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)
obinndu-se soluia sistemului :

X= -2 0 1
Dac factorizarea se realizeaz prin apelarea cu trei parametri de ieire, atunci se obin rdcinile 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 ecuaii 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 + 3 z = 1 + 6z = 2 , se folosete urmtorul model Simulink : 4x 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 corespunztor este matrice unitar. Matricea ortogonal i matricea unitar sunt uor 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 ingineria mecanic

n linia de comand, factorizarea Q-R se apeleaz n urmtoarele variante :

[Q,R] = qr(A) [Q,R] = qr(A,0) [Q,R,E] = qr(A) [Q,R,E] = qr(A,0) X = qr(A) R = qr(A) [C,R] = qr(A,B) R = qr(A,0) [C,R] = qr(A,B,0)

(matrice complet definit, sau matricea dispersiilor) ( matrice complet definit, sau matricea dispersiilor) (matrice complet definit) (matrice complet definit) (matrice complet definit) (matricea dispersiilor) (matricea dispersiilor) (matricea dispersiilor) (matricea dispersiilor)

n MATLAB (versiuni superioare versiunii 5.3) este posibil factorizarea matricilor ptratice 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 obine:

Ex.: 1 2 3 S se determine descompunerea qr a matricei A = 4 5 6 7 8 0

MATLAB n ingineria mecanic


Cu secvena MATLAB urmtoare, rezult:

99

A=[1,2,3;4,5,6;7,8,0]; [Q,R]=qr(A) Q= -0.1231 0.9045 0.4082 -0.4924 0.3015 -0.8165 -0.8616 -0.3015 0.4082 R= -8.1240 -9.6011 -3.3235 0 0.9045 4.5227 0 0 -3.6742
Factorizarea q-r se utilizeaz pentru rezolvarea sistemelor de ecuaii liniare cu mai multe ecuaii dect necunoscute (sisteme supra-determinate). Cea mai bun soluie a unor astfel de sisteme, n sensul celor mai mici ptrate, este calculat cu instruciunea: X=A\B, care utilizeaz aceast factorizare. Prin utilizarea factorizrii q-r, soluia x este calculat n dou etape:

1. Y=(Q-1)*B 2. X=R\Y
Aceeai soluie se obine folosind urmtoarea secven MATLAB, scris compact:

[Q,R]=qr(A); X=R\(inv(Q)*B) x 2 y = 2 x + 2y = 3 De exemplu, soluia sistemului liniar , se obine, folosind urmtoarea 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 obine:

100

MATLAB n ingineria mecanic

Folosind o secven MATLAB, similar, x 2y + z t = 1 2 x y + 3 z 3t = 6 se obine prin factorizare q-r: x+y+zt=7 2 x + 7 y + 2 z + 8t = 0

soluia

sistemului

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 conine rdcinile sistemului: X={x,y,z,t}, x=7; y=2; z=-4,4;

t=-2,4.
Folosind pachetul DSP Blockset, din Simulink, se obine:

MATLAB n ingineria mecanic VALORI I VECTORI PROPRII

101

n general, n aplicaiile inginereti, 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. Asemntor rezolvrii sistemelor de ecuaii, i n cazul determinrii valorilor i vectorilor proprii exist dou tipuri de metode: metode directe i metode indirecte. Folosirea metodelor directe sau indirecte depinde mai mult de natura soluiei cerute dect de forma matricei. Exist aplicaii n care se pot cere n valori proprii i n vectori proprii ai unei matrici de ordinul n i alte aplicaii n care se cere doar un numr k<n de valori i vectori proprii, precum i aplicaii la care se cere valoarea proprie maxim (minim) n valoare absolut. n cazul n care se cere o valoare proprie, sau un numr 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 transformrile similare ce reduc matricea iniial A la o matrice similar B de o form particular (reducndu-se astfel algoritmul de calcul propriu-zis).

Problema valorilor i vectorilor proprii apare ntr-o mare varietate de aplicaii i se scrie sub forma Ax=x, sau, n general, Ax=Bx : vibraiile
corpurilor elastice, difuzia masic, sisteme oscilatorii.

n studiul sistemelor fizice este, adesea, necesar rezolvarea unor sisteme de ecuaii liniare avnd forma algebric general :
a 12 a 13 a 11 a 22 a 23 a 21 a 31 a 32 a 33 a n1 a n2 a n3
K K K M K a nn

a 1n a 2n a 3n

x1 x 2 x 3 = 0 M x n

unde A este o matrice simetric real, x este vectorul variabilelor independente iar un parametru scalar denumit valoare caracteristic sau valoare proprie. Problema rezolvrii sistemului const n determinarea parametrului i a vectorului x corespunztor, vector cunoscut sub denumirea de vector caracteristic sau vector propriu. n determinarea soluiilor nebanale ale sistemului de ecuaii :AX=X, unde : A este matrice ptratic de ordinul n, X este vector coloan de ordinul n, - este un scalar,

102

MATLAB n ingineria mecanic

valorile X, respectiv , care satisfac ecuaia de mai sus se numesc vectori proprii, respectiv valori proprii. Pentru a evidenia semnificaia fizic a valorilor i vectorilor proprii se consider urmtoarele exemple.

A. Presupunnd necesar studiul vibraiilor libere ale unui sistem constnd 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 ecuaiilor micrii i la formularea unei probleme de valori proprii:
2k 2m 2 k 0 k 2k 4m 2 k x 1 x 2 = 0 k 2k 6m 2 x 3 0

unde reprezint frecvena, x vectorul deplasare i k=s/l (s- tensiunea n bar, 4llungimea barei). Dac se realizeaz substituia = m 2 / k , sistemul de ecuaii ale micrii, 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, avnd coeficienii de elasticitate k 1 , k 2 , k 3 , este descris matematic prin sistemul de ecuaii difereniale ordinare: 2 dx 1 m 1 2 = k 1 x1 + 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 deplasrile pe orizontal fa de starea de echilibru, iar t este timpul.

MATLAB n ingineria mecanic

103

Pentru oscilaiile naturale sistemul va oscila la o frecven unic n , obinndu-se oscilaii sinusoidale de amplitudine y i unghi de defazaj . n acest caz expresiile celor dou deplasri sunt:

x 1 = y 1 sin( n t ),

x 2 = y 2 sin( n t )

Dac se nlocuiesc aceste expresii ale deplasrilor, n sistemul ecuaiilor de micare, dup ordonare, rezult sistemul
2 m1n y 1 k 1y 1 + k 2 y 1 k 2 y 2 = 0 2 m 2 n y 2 k 2 y 2 + k 3 y 2 k 2 y 1 = 0 2 Pentru m 1 = m 2 = m, k 1 = k 2 = k 3 = k i frecvena adimensional = m n / k , sistemul devine:

( 2 )y 1 y 2 = 0 y 1 + ( 2 )y 2 = 0
Sistemul omogen, n necunoscutele y 1 , y 2 , are soluia banal y 1 = y 2 = 0 , pentru orice valoare , fapt neinteresant din punct de vedere fizic. Astfel se impune condiia ca det A 0 (A fiind matricea sistemului), rezultnd ecuaia polinomial n :

2 1 2 P2 ( ) det 4 + 3 = 0; 1 = 1, 2 = 3 1 2
Gradul polinomului caracteristic P2 ( ) reprezint numrul gradelor de libertate ale sistemului fizic, precum i numrul valorilor proprii. Fiecrei valori proprii i corespunde cel puin un vector propriu, n cazul de fa existnd doi vectori proprii:

y 1 1 y (1 ) = 1 , y 1 2

2 y 1 y ( 2) = 2 y 2 2

Din punct de vedere fizic, y 1 i y 2 reprezint frecvene naturale n forma adimensional pentru sistemul considerat:

104

MATLAB n ingineria mecanic

1 = 2 =

2 m 1 = 1, k

1 = k / m 2 = 3k / m

m 2 2 = 3, k

2 Dac se rezolv sistemul omogen n y 1 i y 1 pentru 1 = 1 i n y 1 , y 2 1 2 2

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

y 1 1 1 y (1 ) = = 1 ; y 1 1 2

y 1 1 2 y ( 2) = = 2 y 2 1 2

Se observ c 1 este frecvena cea mai joas iar 2 este frecvena cea mai nalt pentru sistemul considerat, respectiv, faptul c la frecvena 1 cele dou corpuri se deplaseaz la fel i n aceeai direcie, iar la frecvena 2 cele dou mase se deplaseaz cu aceeai mrime dar n sensuri opuse. Cele dou exemple prezentate au menirea s evidenieze faptul c valorile proprii i vectorii proprii descriu modul de comportare al unui sistem fizic, reprezentnd o serie de mrimi ce descriu comportarea sistemului. Valorile i vectorii proprii ai unei matrici ptratice se calculeaz, n MATLAB, cu funcia 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 funciei MATLAB eig(), n aceste variante, se obin urmtoarele rezultate V=eig(A) returneaz un vector care conine valorile proprii ale matricei A; [V,D]=eig(A) returneaz o matrice V ale crei coloane sunt vectorii proprii corespunztori valorilor proprii i, o matrice diagonal D care conine valorile proprii ale matricei A astfel nct: A*V=V*D

MATLAB n ingineria mecanic

105

[V,D]=eig(A,'nobalance') returneaz valorile i vectorii proprii fr a executa n prealabil o echilibrare (aproximare). Dac matricea conine elemente mici, comparabile cu erorile de rotunjire, balansarea se scaleaz, fcndu-le la fel de semnificative ca celelalte elemente ale matricei originale. Acest lucru conduce n final la vectori proprii incoreci. n astfel de situaii se utilizeaz noiunea de "nobalance". Dac matricea are valori proprii de ordinul nti (valorile proprii sunt distincte), atunci vectorii proprii sunt independeni. Dac vectorii proprii nu sunt independeni, atunci matricea original nu este neregulat. Chiar dac o matrice este neregulat, soluia funciei eig() satisface ecuaia:

A*X=X*D
Valorile i vectorii proprii generalizai determin soluiile nebanale ale ecuaiei:

AX=BX
unde A i B sunt matrici ptratice de ordinul n, iar este un scalar. Valorile lui care satisfac ecuaia se numesc valori proprii generalizate i valorile X corespunztoare sunt vectorii proprii generalizai. 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, ntruct ecuaia este echivalent cu:

B-1AX=X
Calculul vectorilor i valorilor proprii generalizate se realizeaz cu funcia MATLAB eig() i se apeleaz cu una dintre sintaxele:

V=eig(A,B)
returneaz un vector care conine valorile proprii generalizate, dac A i B sunt matrici ptratice ;

[V,D]=eig(A,B)
returneaz o matrice V ale crei coloane sunt vectorii proprii corespunztori i, o matrice diagonal D ce conine valorile proprii generalizate, astfel nct: A*V=B*V*D

106

MATLAB n ingineria mecanic

Ex.: 0 2 1 S se determine valorile i vectorii proprii ai matricei A = 1 2 1 0 1 2


Cu secvena MATLAB : A=[-2 1 0; 1 -2 1; 0 1 -2] [V,D]=eig(A) V= 0.5000 -0.7071 -0.7071 0.0000 0.5000 0.7071 D= -3.4142 0 0 -2.0000 0 0 -

-0.5000 -0.7071 -0.5000 0 0 0.5858

Aplicnd funcia MATLAB eig(), sistemelor de ecuaii ale micrii, pentru cele dou sisteme fizice, tratate teoretic, la nceputul acestui paragraf, se obin urmtoarele 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


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

107

CALCULUL VALORILOR SINGULARE


O valoare singular corespunztoare unei matrici rectangulare este valoarea scalarului , iar vectorii singulari corespunztori aceleiai matrici sunt vectorii u i v, care respect relaia de interdependen : A v = u , A T u = v (aici, notaia 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, corespunztori, se formeaz matricile ortogonale U i V, se poate scrie :

AV = 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 numrul de linii mai mare dect numrul de coloane, atunci descompunerea n

108

MATLAB n ingineria mecanic

valori singulare va avea ca rezultat o matrice U de dimensiuni mari, dar ultimele m-n coloane sunt nmulite cu zero, n matricea . n aceast situaie, economia n mrimea descompunerii, are efecte n timpul de calcul i n spaiul de memorie necesar stocrii rezultatelor, prin renunarea la calculul acelor elemente care, oricum sunt eliminate prin nmulirea cu zero, i eliminarea acelor coloane din reprezentarea matricei U. n acest mod, va fi determinat i afiat o matrice U cu dimensiunea mxn, o matrice , de ordinul nxn respectiv, matricea V, de aceeai dimensiune . Dac matricea A este ptratic, 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 funcia specific svd(). Funcia svd() se apeleaz cu una din sintaxele: D=svd(A) returneaz un vector care conine valorile singulare [U,S,V]=svd(A) returneaz o matrice diagonal S cu aceleai dimensiuni ca A, avnd elementele diagonale nenegative (care sunt i valori singulare) n ordine descresctoare i matricele U i V care satisfac relaia: 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 secvena 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


Ex. :

109

1 7 5 3 , n valori singulare, folosind toate S se descompun matricea A = 8 1 4 9 variantele de apelare ale funciei MATLAB svd(). Rezolvarea este imediat, cu urmtoarea 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 n ingineria mecanic

APLICAII

1:
Fie:

e4 2 lg 8 a= 4 ; 5 3 e lg 4 S se calculeze:a+b; a-b;a+c.

7 5 ln 6 b= ; c=2. lg 7 3 8

2: 3 21 sin 20 sin 3 Fie: m= ; n= log 5 log 8 arctg 3 e 3 e 6 S se calculeze: M=m+n 3: 2 1 4 7 3 5 35 3 45 ;b= Fie: a= 3 5 8 9 4 82 log 4 6 sin 61 3 S se calculeze produsele : ab; ba; ac; bc. 4: ln 2 1 a= log 5 9 ; lg 3 4e S se calculeze:a/b; b/a.
Fie:
sin 5 tg6 b= ; log 5 7 ln 8 2i 1 2i 7e log 6 8 ; c=2. 0 1 log 5 6 4
3

5 2 ln 7

6 1 e log5 7
3

5: 5 6 3 2e 1 Fie: a= ; c= 5 8 ln 3 lg 4 S se calculeze ctul : d=a/b. 7 3


4

2i 1 2i 0 1

7e . log 4 6 3

MATLAB n ingineria mecanic


6: 1 2 log6 7 a= ; 4e 3 3 S se calculeze:a\b; b\a.
Fie:

111

5 3 5 b= 7

log 4 6 ; 8

7: 1 2e ln 6 a= 5 ; 3 ln 4 S se calculeze:a^b; b^a; a^c


Fie:

b=3;c= - 3

8: Calculai determinanii urmtoarelor matrici: e A = 3 lg 5 3


9:

2e 4e lg 6

1 B = 7 4 7e

2
5

84

3 ln 5 3 ln 6 C = 8 e9

3 2i 1 2i 7 . 9 0 1 6

3 log8 9 5 Calculai inversa matricei: A = 2e 11e 10: 53 S se determine rangul matricei A = 3 63 5 13 11:

10 ln 4 . 12 log 6 9

2 1 5

4 23 3 . 13 11 5
6

S se descompun, prin factorizare Choleski, Lower-Upper, respectiv, QR, matricile:

e A = 3 lg 5 3

2e 4e lg 6

1 B = 7 4 7e

2
5

e 84

3 ln 5 3 ln 6 C = 8 e9

3 2i 1 2i 7 9 0 1 6

112

MATLAB n ingineria mecanic

12:
S se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, urmtoarele sisteme de ecuaii lineare:

3x + 2y z = 10 x + 3y + 2z = 5 ; x y z = 1
13:

x 2y + z t + 2u = 1 2 x y + 3 z 3t u = 6 x + y + z t + 3u = 7 2x + 7 y + 2z + 8t 2u = 0

S se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, urmtoarele sisteme de ecuaii lineare:

6x 2y + z 3t = 21 2x 3y + z 3t = 11 5 x + 7 y + 3 z 2t = 8 2x + y + 2z + 4t = 10 14:

9x 1 x 2 + 2x = 1 3 x 1 + 8 x 2 5 x 3 = 2 2x 5 x + 7 x = 1 2 3 1

S se gseasc valorile i vectorii proprii ai matricelor

1 1 2 A = 1 8 5 2 5 7

1 2 3 B = 4 5 6 7 8 0

1 1 0 9 1 9 0 1 C= 1 0 9 1 9 0 1 1

MATLAB n ingineria mecanic

113

CAPITOLUL III
STRUCTURI I TABLOURI DE VALORI
Structurile, sau tablourile de valori, sunt extensii ale matricilor bidimensionale. Structurile sunt utile pentru construirea tabelelor de valori. De exemplu, considernd vectorul:

n = (0:9)';
atunci, cu secvenele urmtoare, se pot genera dou tabele de valori:

tabel_puteri = [n tabel_puteri = 0 1 2 3 4 5 6 7 8 9

n.^2 2.^n] <Enter> 0 1 1 2 4 4 9 8 16 16 25 32 36 64 49 128 64 256 81 512

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


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

114

MATLAB n ingineria mecanic

STRUCTURI MULTIDIMENSIONALE
Structurile multidimensionale se deosebesc de matrici i tablouri de valori prin numrul 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 secvena urmtoare genereaz o reea 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 secvena: 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 reea cu 4 linii, 4 coloane i 24 pagini. Aceast reea este reprezentat succint n figura urmtoare (la rularea secvenei anterioare se vor afia toate paginile structurii M, pentru fiecare valoare a indexului k):

OPERAIILE 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 nmulire i mprire, iar condiia esenial pentru realizarea unei operaii cu tablouri de valori este aceea c tablourile trebuie s fie de aceeai dimensiune. Operaiile cu tablouri sunt operaii aritmetice (nmulire, mprire, ridicare la putere, etc.) ntre elementele situate n aceeai poziie a tablourilor, cunoscute sub numele de operaii element cu element. Dac, n loc de unul dintre operanzi este un scalar, acesta opereaz cu fiecare element al tabloului. Pentru a preciza c operaiile de nmulire, mprire, ridicare la putere (exclus adunarea i scderea) se efectueaz element cu element ntre componentele a dou tablouri de valori (matrici, seturi ordonate de valori, etc.) de aceleai dimensiuni, se utilizeaz operatorul pentru operaia dorit, precedat de caracterul punct (exclus cazul adunrii i scderii, care sunt similare celor pentru matrici):

pentru nmulire- .* pentru mprire ./ sau .\ pentru ridicare la putere .^

116

MATLAB n ingineria mecanic

ADUNAREA I SCDEREA TABLOURILOR DE VALORI


Pentru ca adunarea i scderea s se poat efectua este necesar ndeplinirea condiiei de identitate a dimensiunilor tablourilor care opereaz.

Ex.11: 1 2 3 Fie : a = , 4 5 6 37 e . d= e 2 6 ln 3 8 1 b= 9 8 5 , 3 c=10,

S se calculeze: a-b; a-c; c-a; c-b; a+d Cu secvena MATLAB urmtoare, 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 B= -9 -8 -7 -6 -5 -4 C=c-a C= 9 8 6 5
[Enter]

[Enter]

7 4

[Enter] D=c-b 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, ntruct nu este ndeplinit condiia de coresponden a dimensiunilor celor doi operanzi:

E= a+d ??? Error using ==> + Matrix dimensions must agree.. ??? Eroare la utilizarea operatorului + Matricile trebuie s aib aceleai dimensiuni

NMULIREA TABLOURILOR DE VALORI


Pentru ca nmulirea a dou tablouri de valori s se poat realiza, este obligatorie condiia ca acestea s fie strict de aceeai dimensiune :

Ex.: 1 2 Fie : a = 4 5 37 d = e2 ln 3 8 3 , 6 e . 6 1 b= 9 8 5 , 3 c=10,

S se calculeze: produsele:ab;ac;ca;cb; ad Cu secvena MATLAB urmtoare, 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


[Enter] B=a.*c B= 10 20 30 40 50 60

118

MATLAB n ingineria mecanic

C=c.*a [Enter] C= 10 20 30 40 50 60 D=c.*b [Enter] D= -10.0000 80.0000 31.4159 90.0000 22.3607 30.0000
n cazul E=a.*d, MATLAB returneaz un mesaj de eroare, ntruct cele dou tablouri au dimensiuni diferite: E=a.*d ??? Error using ==> .* Matrix dimensions must agree. ??? Eroare la utilizarea operatorului + Matricele trebuie s aib aceleai dimensiuni

MPRIREA LA DREAPTA A TABLOURILOR DE VALORI


mprirea la dreapta, a dou tablouri, este simbolizat prin caracterul combinat ./ (punct + slash):

Ex.: 1 2 3 1 Fie : a = b= , 4 5 6 9 S se calculeze: a:b;a:c;c:a;c:b.


Rezolvare: Cu secvena MATLAB urmtoare, 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

8 5

, 3

c=10.

MATLAB n ingineria mecanic


e=a./c [Enter] e= 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
[Enter] f=c./a f= 10.0000 5.0000 3.3333 2.5000 2.0000 1.6667 [Enter] g=c./b g= -10.0000 1.2500 3.1831 1.1111 4.4721 3.3333

119

MPRIREA LA STNGA
Operaia de mprire la stnga, ntre dou tablouri, avnd aceleai dimensiuni, este simbolizat cu operatorul .\ (punct + backslash): x=y.\z, i reprezint ctul dintre elementul z(i,j) i elementul y(i,j), adic: x=y.\z z./y.

Ex.: 1 2 3 1 Fie : a = b= , 4 5 6 9 S se calculeze:a.\b;a.\c;c.\a;c.\b. Soluie:


Cu secvena MATLAB urmtoare, 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 [Enter] e=a.\c e= 10.0000 5.0000 3.3333 2.5000 2.0000 1.6667

8 5

, 3

c=10.

120

MATLAB n ingineria mecanic

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


Operaia de ridicare la putere a tablourilor de valori este simbolizat prin caracterul combinat ( .^ ). Astfel, instruciunea A=B.^C, reprezint calculul puterii unui element al matricei B, unde exponentul este elementul de pe poziia corespunztoare din matricea C: adic elementul A(i,j) este obinut prin ridicarea la puterea C(i,j) a elementului B(i,j).

Ex.: 1 2 3 Fie : a = , 4 5 6 S se calculeze : ab; ac; ca; cb.


Rezolvare: Cu secvena MATLAB urmtoare, 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

1 b= 9

8 5

, 3

c=10.

e=a.^c e= 1 1048576

[Enter]

1024 9765625

59049 60466176

MATLAB n ingineria mecanic


f=c.^a [Enter] f= 10 100 1000 10000 100000 1000000 [Enter] g=c.^b g= 0.0000 0.1000 0.0000 1.0000 0.0000 0.0000

121

Not: Afiarea expresiei numerice 1.0e+009 * (numrul 109) n faa unei matrici, are semnificaia urmtoare: elementele matricei sunt nmulite cu acel numr. Aceasta este o metod practic de a scurta formatul unui numr.

TRANSPUNEREA TABLOURILOR DE VALORI


Operaia de transpunere a unui tablou este simbolizat de operatorul combinat . (punct-apostrof). n acest mod liniile tabloului devin coloane i invers.

Ex.: 1 6 0 3 S se determine transpusa tabloului a = . i 3 2i 1 + 11 7 9


Cu secvena MATLAB urmtoare, rezult:

a=[1, sqrt(3),pi,-6,0;I,3-2*I,1+sqrt(11),7,9]; 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

[Enter]

122

MATLAB n ingineria mecanic

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 urmtoare 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 afiate cu funcia 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 Columns 12 through 22 76 77 78 79 80 81 82 83 84 85 Columns 23 through 25 87 88 90

75 86

De exemplu, urmatoarea secven MATLAB introduce tabloul nume, avnd 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 funcia whos:

whos nume Name nume Size 1x17 Bytes 34 Class char array

adica : matricea nume are dimensiunea 1x17, se stocheaz n memorie ocupnd 34 bii i este din classa char array (tablou de caractere). Matricile de caractere se pot concatena pentru crearea unei noi matrici, folosind funcia MATLAB strcat() sau operatorul MATLAB de concatenare [ ]. De exemplu, pentru concatenarea celor dou tablouri de mai sus, se folosete secvena MATLAB :

Nume_si_Functia=strcat(nume,',',functia) Nume_si_Functia = Popescu J. Eduard,Director General Adjunct

124

MATLAB n ingineria mecanic

whos Nume_si_Functia Name Size Bytes Class ans 1x42 84 char array Grand total is 42 elements using 84 bytes
Concatenarea a dou tablouri pentru transformarea ntr-o matrice cu dou linii, folosete 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 numele_si_functia 2x24 96 Grand total is 48 elements using 96 bytes Class char array

Se observ diferena fa de cazul afirii textului intr-o singur linie:matricea nou avnd dimensiunea 2x24, fa de o linie cu 42 elemente, la prima variant, iar pentru stocare sunt ocupai 96 bii de memorie, fa de 84 n prima variant, classa este aceeai char array.

CONVERSIA IRURILOR DE CARACTERE N CODURI NUMERICE


Matricile cu iruri de caractere stocheaz fiecare caracter n coduri numerice pe 16 bii. Codurile ASCII ale caracterelor alfanumerice sunt prezentate n tabelul urmtor :
Cod 0. 1. 2. 3. 4. 5. Caracter (zero) Cod 27. 28. 29. 30. 31. 32. Caracter Cod 54. 55. 56. 57. 58. 59. Caracter 4 5 6 7 8 Cod 81. 82. 83. 84. 85. 86. Caracter N O P Q R Cod 108. 109. 110. 111. 112. 113. Caracter h i j k l

MATLAB n ingineria mecanic


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

125

MATLAB utilizeaz funcia double() pentru convertirea irului de caractere n codurile numerice ale acestora, respectiv funcia 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 68 105 114 101 99 Columns 13 through 24 100 117 97 114 100 101 114 97 108 32 99 117 32 74 46 32 69 116 111 114 32 71 101 110 32 32 32 32 32 32 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 aceleai dimensiuni dar n reprezentare numeric, nume_si_functia_numeric. De exemplu, pentru verificare, se poate folosi urmtoarea 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 n ingineria mecanic

Pentru revenirea la forma anterioar (matrice cu caractere) se folosete secvena: nume_si_functia=char(nume_si_functia_numeric) nume_si_functia = Popescu J. Eduard Director General Adjunct Codurile ASCII, sunt convertite n caractere folosind funcia MATLAB

char() : char(65:75) ans = ABCDEFGHIJK


Se pot folosi funciile char() i double() pentru a genera iruri identice de caractere, adica:

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


Aceast instruciune se execut astfel : -funcia ones(4,20) genereaz patru linii i 20 de coloane n care elementele sunt cifrele 1; -multiplicnd prin double('#') aceast matrice, elementele 1 sunt nlocuite cu codul ASCII al unui caracter oarecare (n acest caz este codul caracterului #), iar funcia char() convertete aceste coduri n caractere (caracterul #). Dac o variabil- caracter este implicat ntr-o operaie aritmetic, MATLAB utilizeaz codul ASCII al caracterului, pentru efectuarea calculelor. Astfel, dac :

p=m; atunci expresia:

MATLAB n ingineria mecanic


p+2 returneaz rezultatul: ans = 111

127

Operaiile 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 urmtoare din alfabet:

char(p+1) ans = n
Relaia dintre caractere i codurile ASCII, ale acestora, permite efectuarea operaiilor aritmetice cu acestea. De exemplu, instruciunea urmtoare va realiza mprirea numrului reprezentnd codul ASCII al caracterului < (cod 60), la numrul reprezentnd codul ASCII al caracterului x (120) :

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


irurile de caractere pot fi afiate folosind funcia MATLAB fprintf(), cu specificatorul de format %s , fiind posibil, de asemenea, aranjarea la dreapta , la stnga sau egal distanat ( justified ), respectiv trunchiat . Cu instruciunile urmtoare se afieaz 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 n ingineria mecanic

COMPARAREA IRURILOR DE CARACTERE


irurile de caractere se compar prin codurile ASCII. Astfel, irurile ann i ban , se compar folosind operatorii relaionali (<, <=, >, >=, ==, ~=), similar matricilor, fiind afiat rezultatul 1, dac rezultatul comparrii este adevarat, respectiv, rezultatul zero, dac rezultatul comparrii este fals:

s1='ann'; s2='ban'; s1<s2 ans = 1 0 0 n acest exemplu, caracterul de pe prima poziie, din irul s1 are valoare mai mic dect caracterul corespunztor din irul s2, rezultatul afiat fiind, n consecin 1, n timp ce, celelalte elemente ale irului s1 sunt mai mari sau egale dect valorile caracterelor de pe poziiile corespunztoare ale irului s2, rezultatul afiat fiind 0, ntruct rezultatul comparrii este fals. Dac irurile nu au aceeai dimensiune (acelai numr de caractere), folosirea operatorilor relaionali este improprie, MATLAB afind 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 operaiilor binare
Compararea irurilor cu dimensiuni diferite se realizeaz cu funcia MATLAB strcmp(si,sj), care va afia 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
Funciile specifice operaiilor i operaiunilor cu iruri de caractere sunt prezentate folosind : help matlab\strfun.

MATLAB n ingineria mecanic


IRURI DE CARACTERE BIDIMENSIONALE

129

irurile de caractere bi-dimensionale se pot crea exact ca i matricile, cu excepia faptului c fiecare linie trebuie s aib acelai numr de caractere (acelai numr de coloane), n caz contrar se va afia un mesaj de eroare care avertizeaz utilizatorul asupra acestui aspect (rezolvarea problemei este simpl dac se introduce un numr necesar de spaii 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 acelai numr de coloane O metod simpl pentru realizarea structurilor bi-dimensionale, cu iruri de caractere, este aceea folosind funcia MATLAB char(), care seteaz automat numrul 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 afiate n ordinea clasic a vectorilor liniari (vectori coloan), elementele fiind citite pe coloan ncepnd cu primul element al coloanei nti :

130

MATLAB n ingineria mecanic

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 funcia eval(t) va genera evaluarea expresiei n t (adic, irul de caractere va fi interpretat). Aceast facilitate se numete text macro. De exemplu, instruciunea urmtoare :

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


Utilizarea funciei eval() este foarte practic n situaii n care sunt solicitate date de intrare, cum ar fi cazul unor reprezentri grafice :

x=0:0.01:10; f=input('Introduceti functia de variabila x pentru reprezentare grafica:','s')

MATLAB n ingineria mecanic


Introduceti functia de variabila x pentru reprezentare grafica: exp(-0.5*x).*sin(x); plot(x,eval(f)),grid

131

Dup introducerea funciei MATLAB input() apare linia de comand de ateptare , prin care utilizatorul este invitat s introduc expresia funciei 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 afieaz un mesaj de eroare, altfel este evaluat expresia n variabil x , i reprezentat grafic pentru valorile date :

Structurile definite, pn 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 cmpuri. De exemplu, se poate crea o structur, numit student (de exemplu), cu un cmp alocat numelui :

student.nume=Juan Antonio Cajigal;

132

MATLAB n ingineria mecanic

un alt cmp pentru seria i numrul de legitimaie:

student.legitimatie='JUANCA0123';
respectiv, un cmp 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 aceeai metodologie ca i n cazul matricilor i tablourilor de valori. De exemplu, afiarea celei de-a doua note, respectiv a celei de-a patra, este realizabil prin introducerea de la tastatur, n linia de comand, a numelui cmpului, i ca subscript (n paranteze, pentru stabilirea poziiei n matricea linie), poziia 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 esenial. Pentru adugarea 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 numelestudent cmpurile 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 cmpurilor identice: cmpul calificative are dimensiunea 4 la student(1), n timp ce, la student(2) cmpul are dimensiunea 2. Structura cu numele student, are acum dimensiunea 1x2:are dou elemente (student(1) i student(2)), fiecare dintre acestea avnd cte 3 cmpuri. Dac o structur are definite mai multe elemente, MATLAB nu afieaz coninutul fiecrui cmp, atunci cnd aceasta este apelat cu numele simplu. Astfel, dac structura student se apeleaz n linia de comand, simplu, fr subscript, atunci se va afia un sumar exhaustiv:

student student = 1x2 struct array with fields: nume legitimatie calificative
Un sumar asemntor este afiat dac se apeleaz funcia MATLAB fieldnames(): fieldnames(student) ans = 'nume' 'legitimatie' 'calificative' Pre-alocarea cmpurilor i definirea unei structuri se poate realiza folosind i funcia MATLAB struct(). Cmpul unei structuri poate conine orice tip de date, chiar i o alt structur. De exemplu, se poate crea o structur, fie numele acesteia cursuri, care s conin date privind cursurile susinute de studeni, n care un cmp va fi alocat titlului cursului, i alt cmp va conine structura student, creat anterior:

134

MATLAB n ingineria mecanic

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 afia titlurile cursurilor se folosete instruciunea: cursuri(1:2).titlu ans = Metode numerice ans = Metode numerice IMT Pentru a se afia numele studenilor participani la cursuri, se folosete instruciunea:

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 cmpurile structurii, folosind funcia specific deal(). De exemplu, pentru crearea unei liste coninnd numele studenilor participani la cursuri, se folosete instruciunea: [nume1,nume2]=deal(cursuri(1).grupa(1:2).nume) nume1 = Juan Antonio Cajigal nume2 = Luis Jimenez Pentru tergerea sau anularea unor cmpuri ale structurii create se folosete funcia MATLAB rmfield().

MATLAB n ingineria mecanic


STRUCTURI CELULARE

135

Celula este entitatea cea mai comun n MATLAB. Celula poate fi asimilat cu un conteiner de date care poate conine orice tip de date:tablouri de valori numerice, sau iruri de caractere, structuri sau celule.

Definirea celulelor
Indexare: Considernd 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 instruciuni, parantezele rotunde din partea stng a semnului de atribuire (=), au acelai rol ca i n cazul tablourilor de valori, sau al matricilor, avnd semnificaia de referire la un anumit element al structurii celulare. Ceea ce difereniaz 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 coninutul unei celule, avnd rol de constructori ai structurii celulare. Dac aceste caractere ({ }), sunt folosite n alte situaii, atunci acestea se refer la elementul specificat n interiorul parantezelor. De exemplu, instruciunea:

cellplot(c)
afieaz, ntr-o figur separat, structura celular c:

136

MATLAB n ingineria mecanic

iar instruciunea:

celldisp(c)
afieaz, 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 combinaii cu parantezele rotunde, sau

MATLAB n ingineria mecanic

137

drepte. Astfel, apelarea celulei de pe poziia 1, respectiv afiarea coninutului acestei celule, se realizeaz cu instruciunea:

c{1} ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214
Elementul de pe poziia (2,3), al celulei 1, se apeleaz cu instruciunea:

c{1}(2,3) ans = 0.0185


n mod similar, sunt afiate 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 n ingineria mecanic

Trebuie reamintit faptul c matricile sunt caracterizate prin cele dou dimensiuni:numrul de linii i numrul de coloane. Astfel, n figura de mai jos se poate vedea c, dac fiecare locaie a grilei reprezint un element al matricei, atunci, un element al matricei poate fi accesat prin apelarea sa cu doi indici reprezentnd numrul liniei, respectiv al coloanei pe care acesta se regsete 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 regsete n figura urmtoare:

Dimensiunile structurii multidimensionale


De exemplu, pentru apelarea unui element de pe linia 2, coloana 3 i pagina 2 (schema alturat ), 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 reea 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


CREAREA STRUCTURILOR CELULARE MULTIDIMENSIONALE

139

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 funcii speciale de concatenare. Generarea structurilor celulare multidimensionale este posibil prin: A). Utilizarea indexrii ; B). Utilizarea funciilor MATLAB ; C). Utilizarea funciei 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 Considernd 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, adugnd 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 funcii MATLAB
Se pot foslosi funciile MATLAB, cum ar fi randn(), zeros(), ones(), pentru generarea structurilor multidimensionale, exact ca n cazul matricilor bi-

140

MATLAB n ingineria mecanic

dimensionale:

retea_arbitrara = randn(6,5,2) retea_arbitrara(:,:,1) = -0.1199 -0.0793 0.0359 0.1326 -0.0653 1.5352 -0.6275 1.5929 0.4853 -0.6065 0.5354 1.0184 -0.5955 -1.3474 0.5529 -1.5804 -0.1497 0.4694 -0.2037 -0.0787 -0.4348 -0.9036 -2.0543 -0.6817 retea_arbitrara(:,:,2) = -0.4650 1.0378 1.9574 0.3710 -0.3898 0.5045 0.7283 -1.3813 1.8645 2.1122 0.3155 -0.3398 -1.3573 1.5532 -1.1398 -1.0226 0.7079 -0.2111 1.1902 -1.1162 0.6353 -0.6014 0.5512 -1.0998

-1.0246 -1.2344 0.2888 -0.4293 0.0558 -0.3679 0.0860 -2.0046 -0.4931 0.4620 -0.3210 1.2366

C). Generarea structurilor multidimensionale cu funcia MATLAB cat()


O metod simpl pentru generarea structurilor celulare multidimensionale o constituie utilizarea funciei cat(), care concateneaz o list de alte structuri pe mai multe dimensiuni. Forma general a funciei 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


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

141

MODIFICAREA FORMEI STRUCTURILOR CELULARE MULTIDIMENSIONALE


Dac nu se solicit schimbarea formei sau dimensiunilor, o reea multidimensional i pstreaz caracteristicile specificate atunci cnd a fost creat. Dimensiunile structurii se pot modifica prin tergerea sau adugarea unor elemente, iar forma structurii se poate schimba prin specificarea unui numr diferit de linii, coloane sau pagini. Forma general a funciei MATLAB pentru modificarea formei unei structuri este: R=reshape(A,[s1,s2,s3,]), n care A este structura a crei form urmeaz a fi schimbat, iar s1,s2,s3,, reprezint noile dimensiuni ale structurii cu forma schimbat. Schema de lucru a funciei reshape() este reprezentat n schiele 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 n ingineria mecanic

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 msurate ntr-un set de puncte ale unei incinte. De exemplu, dac se consider o imagine RGB, a crei matrice de culoare poate fi reprezentat ca n figura de mai jos:

sau mulimea temperaturilor msurate ntr-un numr egal de puncte:

MATLAB n ingineria mecanic

143

APLICAII

[1]: e2 Fie: a = 4 4 6 2e 5
1 3 ln 5 ,b = 5 6e lg 5 9 log 4 7 8e 5 2 ,c=2 6 3

37 d = e2 ln 3 8

e 6

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

[2]: 1 0,1 2 3 5 Fie: a = 5 , b = lg 7 5 6 ln 4 4 9 37 c=10, d= e 2 ln 3 8 e 6 . 8 5 5


log 4 7

3 , 3e

S se calculeze: produsele:ab;ac;ca;cb; ad

[3]: 1 2 3 Fie : a = , 4 5 6 1 b= 9 8 5 , 3 c=10.

S se calculeze: a:b;a:c;c:a;c:b.

144

MATLAB n ingineria mecanic

[4]: 1 2 3 1 8 Fie : a = b= , 5 4 5 6 9 S se calculeze:a.\b;a.\c;c.\a;c.\b. [5]: 1 2 3 Fie : a = , 4 5 6 1 b= 9 8 5 , 3 c=10. , 3 c=10.

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 RELAIONALI


Mediul de programare MATLAB utilizeaz, pentru compararea a dou matrici cu dimensiuni identice, element cu element, ase operatori relaionali:

Operatori relaionali < <= > >= == ~=

Semnificaia Mai mic dect Mai mic sau egal cu Mai mare dect Mai mare sau egal cu Identic cu Diferit de

Dup executarea operaiei, MATLAB afieaz o matrice, identic dimensional cu cele comparate, avnd ca elemente simbolurile 1(unu) respectiv 0(zero), dup cum relaia dintre elementele comparate este ADEVRAT (TRUE) respectiv FALS (FALSE). Forma general a sintaxei este: Rezultat=expresie_1 operator relaional expresie_2 n care : -Rezultateste o matrice cu elementele 0 i 1, obinut prin compararea celor dou expresii; -expresie_1 -expresie_2-

matricele sau expresiile matriceale care se compar ;


operatorii relaionali definii n tabelul anterior.

-operator relaional-

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 secvana MATLAB urmtoare:

146

MATLAB n ingineria mecanic

A=[1,2,3;4,5,6;7,8,9]; B=exp(2)-log(5)/log(3); A<=B ans = 1 1 1 1 1 0 0 0 0 A>=B ans =

0 0 1
A==B ans =

0 0 1

0 1 1

0 0 0
A~=B ans =

0 0 0

0 0 0

1 1 1 Ex.:

1 1 1

1 1 1

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 secvena MATLAB urmtoare, rezult: A=[-1,2,4;3,0,5;2,1,3];B=[2,-1,3;3,-2,2;5,-4,1];


se obin rezultatele: A<B ans =

1 0 1

0 0 0

0 0 0

MATLAB n ingineria mecanic


A<=B ans =

147

1 1 1 A>B ans = 0 0 0 A>=B ans = 0 1 0 A==B ans = 0 1 0 A~=B ans = 1 0 1

0 0 0

0 0 0

1 1 1

1 1 1

1 1 1

1 1 1

0 0 0

0 0 0

1 1 1

1 1 1

OPERATORI LOGICI
MATLAB utilizeaz trei operatori logici principali i unul auxiliar:
Operatori logici NU I SAU SAU, exclus I Simbolizare ~ & | Semnificaie NOT AND OR XOR Prioritate 1 2 3 4

148

MATLAB n ingineria mecanic

Aceti operatori lucreaz ca i cei relaionali, element cu element, dar numai cu matrici sau tablouri avnd 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 folosii n combinarea a dou expresii simbolice (syms).

PRECEDENA OPERATORILOR
Precedena operatorilor determin ordinea n care MATLAB realizeaz evaluarea expresiilor. Ordinea n care sunt executate operaiile i prioritatea operatorilor, n MATLAB, este caracterizat de urmtoarele nivele, ordonate dinspre nivelul superior spre nivelul inferior: 1. Parantezele ( ) 2. Transpunerea (.), puterea (.^), transpunerea conjugat complex (), puterea matricilor (^); 3. Adunarea unar (+), scderea unar (-), negarea logic (~); 4. nmulirea (.*), mprirea la dreapta (./), mprirea la stnga (.\), nmulirea matricilor (*), mprirea la dreapta a matricilor (./), mprirea la stnga a matricilor (.\); 5. Adunarea (+), scderea (-); 6. Operatorul columnar (:); 7. Operatorii relaionali: mai mic dect (<), mai mic sau egal dect (<=), mai mare dect (>),mai mare sau egal dect (>=), egal cu (==), diferit de (~=); 8. Operatorul logic I (&); 9. Operatorul logic SAU (|); Prioritatea maxim o are operatorul NU, ceilali operatori logici avnd prioritate egal, execuia acestora fiind dat de regula de la stnga la dreapta. Prioritatea de la stnga la dreapta genereaz echivalena ntre dou expresii relaionale. 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 execuie a operatorilor & respectiv |. Urmtoarele dou expresii ilustreaz prioritatea operatorilor:

MATLAB n ingineria mecanic

149

1|0&0=0 0&0|1=1
Tabelul de adevr al acestor operatori este:

Date de intrare A 0 0 1 1 B 0 1 0 1

and 0 0 0 1

Or 0 1 1 1

xor 0 1 1 0 1 1 0 0

not 1 0 1 0

A&B A|B xor(A,B) ~A ~B

CUVINTE CHEIE
MATLAB rezerv o list de cuvinte cheie, list care poate fi afiat, pentru evitarea erorilor de evaluare i de redactare a expresiilor logice, cu funcia 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 n ingineria mecanic

INSTRUCIUNILE if , else, elseif


Instruciunea if (dac) poate fi implementat n format simplu sau n asociere cu clauzele else (altfel) respectiv elseif (altfel dac). Aciunea instruciunii if trebuie sa se finalizeze, ntotdeauna, cu instruciunea end (sfrit). Forma general a sintaxei este: a) if expresie_logic grup_de_instruciuni end b) if expresie_logic_1 grup_de_instruciuni_A else grup_de_instruciuni_B end c) if expresie_logic_1 grup_de_instruciuni_A elseif expresie_logic_2 grup_de_instruciuni_B end d) if expresie_logic_1 grup_de_instruciuni_A elseif expresie_logic_2 grup_de_instruciuni_B else grup_de_instruciuni_C end Diferena dintre else i elseif se poate vedea n exemplul urmtor : Instruciunea if- else Instruciunea if- elseif

if A x=a else if B x=b else if C x=c

if A x=a elseif B x=b elseif C x=c else x=d

MATLAB n ingineria mecanic


else x=d end end end Ex.: S se calculeze valoarea expresiei : end

151

e x 3 4 dac 6 x < 4 3 , pentru valorile ntregi ale f = log 5 x 2 + 2 + x 4 + 3 dac 4 x 10 5 3 dac 10 < x 15 2 x 4 +5 0,456 e variabilei x. Se va folosi urmtoarea secven MATLAB (pentru simplificare se va utiliza funcia length(x) i o bucl repetitiv for, care va fi prezentat n seciunea urmtoare):

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 afiat de MATLAB este urmtorul :

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 acurateea prezentrii

152

MATLAB n ingineria mecanic

INSTRUCIUNEA DE CICLARE for


Sintaxa pentru forma general este:

for index=expresie
grup_de_instruciuni

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 iniial : pas : valoare final

De la

Pn 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 iniial : pas : valoare final , iar pasul are valoare pozitiv, atunci valoarea iniial trebuie sa fie mai mic dect valoarea final ; 5) dac expresia este de forma : valoare iniial : pas : valoare final , iar pasul are valoare negativ, atunci valoarea iniial trebuie sa fie mai mare dect valoarea final ; 6) dac expresia este de forma : valoare iniial : valoare final , atunci pasul de indexare este, implicit, 1 (unu). Un exemplu foarte simplu pentru utilitatea instruciunii de ciclare for, ar fi calculul factorialului unui numr natural. Dac se cere calculul numrului de permutri (factorialul), aferente lui n=10, se folosete urmtoarea secven de instruciuni:

MATLAB n ingineria mecanic


n = 10; fact = 1; for k = 1:n fact = k * fact; disp( [k fact] ) end % FINAL PROGRAM

153

Rezultatul afiat n fereastra de comand, la apsarea 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 operaie se numete actualizare. Pentru a exemplifica, se consider un proces de actualizare a temperaturii unui corp, a crui temperatur iniial este 25 oC, amplasat ntr-un mediu a crui temperatur este 10 oC, dup un interval de meninere 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 (pai), de lungime dt; dac temperatura de start este Ti, atunci se va folosi urmtorul 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 imperfeciunile mediului, iar Tf este temperatura final (Tf=10 oC). Fiierul script realizat pentru rezolvarea problemei de actualizare, stabilete valoarea iniial a intervalului de timp (a=0), respectiv final (b=100 minute). Dac intervalul de afiare nu este un multiplu de pasul de calcul, se va afia un mesaj de eroare Intervalul de afisare nu este un multiplu de dt !:

K = 0.05;

154

MATLAB n ingineria mecanic

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 instruciuni, end, (la apsarea tastei ENTER), se afieaz, n linia de comand un mesaj prin care se cere utilizatorului s introduc pasul dt, apoi se cere stabilirea intervalului de afiare a rezultatelor, dup un interval de timp: Afisarea rezultatelor la interval de (minute):. Pentru exemplificare, se va rula, acest fiier, 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


30.00 35.00 40.00 45.00 50.00 55.00 60.00 65.00 70.00 75.00 80.00 85.00 90.00 95.00 100.00 13.32 12.58 12.01 11.56 11.22 10.95 10.74 10.57 10.45 10.35 10.27 10.21 10.16 10.13 10.10

155

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 funciile : a) f = sin x dac x [ 2 ,2 ] , cu pasul de indexare de 0,1; e m + 2 daca m [ 10,2] 2 daca m (2,8] cu pasul de indexare de 0,3. b) g = 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 n ingineria mecanic

se obin valorile funciei f, care vor fi afiate dac se tasteaz, n linia de comand, numele acesteia, i, ntr-o fereastr grafic Figure 1 reprezentarea funciei f :
1 0 .8 0 .6 0 .4 0 .2 0 -0 .2 -0 .4 -0 .6 -0 .8 -1 -8

-6

-4

-2

b) Pentru funcia g se folosete secventa de program: m=25:-0.3:-10; for k=1:length(m) if (m(k)>=-10)&(m(k)<=2) g(k)=exp(m(k))+2 elseif (m(k)>2)&(m(k)<=8) g(k)=-2 elseif (m(k)>8)&(m(k)<=25) g(k)=(log(m(k)^25^(1/7))+19)/log(3) end end plot(m,g)

25

20

15

10

-5 -10

-5

10

15

20

25

Se obin valorile indexate ale funciei g i graficul din figura alturat :

Ex.: Un fiier 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 funciei, pentru acurateea lucrrii

MATLAB n ingineria mecanic

157

Ex.: O secven de instruciuni care genereaz zone de culoare cu intensiti 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 instruciuni care mparte o figur n mai multe pri: 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 instruciuni 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.5000 0.3333 0.2500 0.3333 0.2500 0.2000 0.2500 0.2000 0.1667 0.2000 0.1667 0.1429

0.2500 0.2000 0.1667 0.1429 0.1250

0.2000 0.1667 0.1429 0.1250 0.1111

0.1667 0.1429 0.1250 0.1111 0.1000

0.1429 0.1250 0.1111 0.1000 0.0909

0.1250 0.1111 0.1000 0.0909 0.0833

158

MATLAB n ingineria mecanic

Ex.: Un fiier care genereaz o matrice (s-au introdus, aici, i linii de help, folosind modul de scriere MATLAB, linia de text, care conine informaia, 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 faa 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 afieaz urmtorul rezultat:

A= 1 2 0 0 0 0 0 0 0 0

5 1 2 0 0 0 0 0 0 0

0 5 1 2 0 0 0 0 0 0

0 0 5 1 2 0 0 0 0 0

0 0 0 5 1 2 0 0 0 0

0 0 0 0 5 1 2 0 0 0

0 0 0 0 0 5 1 2 0 0

0 0 0 0 0 0 5 1 2 0

0 0 0 0 0 0 0 5 1 2

0 0 0 0 0 0 0 0 5 1

Ex. : Un fiier 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


a= -4 1 0 1 0 0 0 0 0 1 -4 1 0 1 0 0 0 0 0 1 -4 0 0 1 0 0 0 1 0 0 -4 1 0 1 0 0 0 1 0 1 -4 1 0 1 0 0 0 1 0 1 -4 0 0 1 0 0 0 1 0 0 -4 1 0 0 0 0 0 1 0 1 -4 1 0 0 0 0 0 1 0 1 -4

159

b= -100 -100 -100 0 0 0 0 0 0

ans = 42.8571 52.6786 42.8571 18.7500 25.0000 18.7500 7.1429 9.8214 7.1429

Ex. : Un fiier 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 n ingineria mecanic

b= 0.3500 -0.2000 -0.1000

1.0000
x= 0.3471 0.5176 0.7647 1.0000

m= 2.5000 -1.0000 0 0

-1.0000 2.5000 -1.5000 0

0 -1.5000 3.5000 0

0 0 -2.0000 1.0000

Ex.: Un fiier 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


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

161

162

MATLAB n ingineria mecanic

Acest fiier script, rulat n MATLAB, la apsarea tastei ENTER, va avea ca efect afiarea urmtoarelor 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


Ex.:

163

Un fiier pentru calculul elementelor traiectoriei unui proiectil (vitez, inlime, distan) lansat sub un anumit unghi fa de orizontal, sub aciunea gravitaiei:

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 fiierului se afieaz invitaia adresat operatorului de a introduce datele de iniializare (unghiul de lansare), i realizarea calculelor necesare reprezentrii grafice a traiectoriei proiectilului: Pentru cinci unghiuri de lansare diferite, rezult graficul din figur.

164

MATLAB n ingineria mecanic

APLICAII
[1]:

1 2 4 S se compare elementele matricei A = 3 0 5 cu scalarul B= ; 2 1 3


[2]:
S se compare elementele matricei

2 1 3 C = 3 2 2 5 4 1

cu elementele

1 2 4 matricei A = 3 0 5 ; 2 1 3
[3]:

1 2 8 13 S se compare elementele matricelor D = ; E = 4 7 ; 3 8


[4]:

4 S se compare elementele matricelor X = 3 2


scalarul x = log 4 7 ; 3

2 1 3 ; Y = 3 2 2 cu 5 4 1

[5]:
S se realizeze un fiier script pentru afiarea unei matrici cu dimensiunea 3x4 n care elementele primei linii s difere printr-o constant, numr natural, elementele celei de-a doua linii s difere prin constanta e2, iar elementele ultimei linii sa difere prin ln8.

MATLAB n ingineria mecanic


[6]:

165

S se actualizeze fiierul de mai jos astfel nct s se afieze 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 fiierul de mai jos astfel nct s se afieze 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 n ingineria mecanic

[8]:
S se actualizeze fiierul de mai jos astfel nct s se afieze 8, 12, 24 de petale: x = 0:pi/40:2*pi; polar(x, sin(2*x)),grid

MATLAB n ingineria mecanic


[9]:
S se actualizeze fiierul de mai jos astfel nct s se solicite utilizatorului s introduc diametrul desenului:

167

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 fiierul de mai jos astfel nct 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' afieaz numai


punctele curente

% ' none' afieaz 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 n ingineria mecanic

[11]:
S se actualizeze fiierul de mai jos astfel nct sombrero-ul s fie nclinat spre stnga 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


colormap jet daspect([10 5 1]) axis tight view(-50, 30) camlight right

169

[12]:
S se actualizeze fiierul de mai jos astfel nct imaginea reprezentrii 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 n ingineria mecanic

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 fiierul de mai jos astfel nct utilizatorul s fie solicitat s introduc viteza iniial i timpul total al micrii

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 funciile standard din tabelul urmtor:
Funcia conv(p,q) [C,R]=deconv(p,q) 1. 2. 1. 2. 3. 1. 2. 3. poly(r) poly(A) polyder(p) polyder(p,q) [A,B]=polyder(p,q) polyfit(x,y,n) [p,S]=polyfit(x,y,n) [p,S,miu]=polyfit(x,y, n) polyval(p,x) polyval(p,q) Descriere -produsul polinoamelor p i q -Ctul, C, i restul R al mpririi polinoamelor p i q 1. -determin polinoamele cu rdcini date n vectorul coloan r 2. -determin coeficienii polinomului caracteristic ai matricei ptratice A 1. -derivata polinomului p 2. -derivata produsului polinoamelor p i q 3. -derivata fraciei raionale p/q 1. aproximeaz un set de date x i y cu un polinom de gradul n 2. aproximeaz un set de date x i y cu un polinom de gradul n 3. aproximeaz un set de date x i y cu un polinom de gradul n 1. evaluarea polinomului p n punctul x, sau pe intervalul x 2. evaluarea polinomului p n punctele vectorului q -evaluarea polinomului n elementele matricei ptratice A -descompunerea raportului a dou polinoame a i b n fracii simple, avnd ca rezultat vectorul coloan al reziduurilor, r, vectorul coloan al polilor, p, i k - vectorul linie al polinomului ct (A/B) -calculeaz rdcinile unui polinom p

1. 2.

polyvalm(A) [r,p,k]=residue(a,b)

roots(p)

172

MATLAB n ingineria mecanic

REPREZENTAREA POLINOAMELOR
Polinoamele sunt reprezentate, in MATLAB, ca vectori linie, coninnd coeficienii ordonai dup puterile descresctoare 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 coeficienii 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) coeficienii lui x4, x3 respectiv x, care lipsesc, sunt nlocuii 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 coeficienii 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 funcia

conv() :
c = conv(a, b) unde :

a, b - vectorii coeficienilor polinoamelor care se nmulesc 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


g = [1 2 -1 -2] care n form algebric uzual se scrie : g(x) = x3+2x2-x-2

173

MPRIREA POLINOAMELOR
Pentru realizarea mpririi a dou polinoame se folosete funcia MATLAB deconv() : [c, r] = deconv(a, b) n care :

c - vectorul coeficienilor polinomului ct r - vectorul coeficienilor polinomului rest Polinoamele c(x) i r(x) respect teorema mpririi cu rest (p(x)=d(x)*c(x)+r(x), n care p(x) este polinomul- demprit, d(x) reprezint p( x ) r( x) = c( x ) + ) polinomul- mpritor : d( x ) d( x )
S se calculeze ctul i restul mpririi polinoamelor h1(x)= x3+2x2-2 i h2(x)= x2+x, folosind o funcie MATLAB. -n MATLAB:

Ex.:

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 ctul mpririi este: c(x)=x+1, iar restul r(x)= -x-2 .

Determinarea rdcinilor unui polinom


Determinarea rdcinilor unui polinom, se realizeaz folosind funcia MATLAB roots() :

174

MATLAB n ingineria mecanic

r = roots(a) n care:

a - vector linie al coeficienilor polinomului Ex.:


f(x)=0. -n MATLAB Fie polinomul f(x) = x3-2x2-3x+10. S se determine rdcinile ecuaiei

f = [1 -2 -3 10] r=roots(f)

se obine vectorul coloan al rdcinilor


r= 2+i 2-i -2

DETERMINAREA COEFICIENTILOR POLINOAMELOR DAC SE CUNOSC RDCINILE


Determinarea unui polinom, dac se cunosc rdcinile acestuia, se utilizeaz funcia MATLAB poly(): p = poly(z) n care:

z vectorul- coloan al rdcinilor Ex.:


Fie rdcinile unui polinom : x1=2; x2=3; x3=4. S se determine polinomul cu rdcinile x1; x2; x3. Problema se va rezolva prin dou metode: a)-algebric-clasic:folosind sumele Vite b)-n MATLAB: folosind funcia poly()

MATLAB n ingineria mecanic


a) Soluia algebric: Folosind relaiile Vite, se obin sumele: S1 = x1+x2+x3 S1= 9 S2 = x1x2+x1x3+x2x3 S2=26 S3 = x1x2x3 S3= 24

175

Polinomul cu rdcinile x1; x2; x3 se scrie, folosind forma general a unui polinom (pentru care se cunosc sumele Vite p(x)=xn-S1xn-1+S2xn-2-......-Sn ) devine: p(x) = x3-9x2+26x-24.

b) Rezolvare cu funcia poly():


Folosind funcia 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 funcia poly(), se determin i coeficienii polinomului caracteristic al unei matrici ptratice. De exemplu, cu secvena urmtoare, se determin polinomul ale carui rdcini (se mai numesc i rdcini caracteristice) sunt valorile proprii ale matricei (valorile proprii ale matricei se determin cu funcia 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 n ingineria mecanic

EVALUAREA NUMERIC A UNUI POLINOM


1) Evaluarea simpl:
Se folosete n cazul n care polinomul are o expresie simpl i valoarea atribuit variabilei este un scalar.

Ex.: 2.

S se calculeze valoarea polinomului f(x) = 3x4-5x3+3x-1 n punctul x =

n MATLAB, se declar, mai nti, 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


Cnd variabila n care se evalueaz polinomul este un vector sau o matrice problema se rezolv respectnd 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 utiliznd regulile pentru calculul cu tablouri de valori (variabila este considerat de MATLAB un tablou de valori, deci se va folosi caracterul . punct, pentru operaiile n care este implicat variabila) altfel, MATLAB afieaz un mesaj de eroare: ??? Error using ==> ^ Matrix must be square. ??? Eroare la utilizarea ^ Matricile trebuie sa fie ptratice

Ex. 1)-variabila este un vector linie: x= [1 2 0];

MATLAB n ingineria mecanic


f = 3*x.^4-5*x.^3+3*x-1 f= 0 13 -1

177

Obs.:Dac polinomul este introdus fr caracterul punct . n faa operatorului pentru ridicare la putere:

f = 3*x^4-5*x^3+3*x-1
MATLAB afieaz 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 ptrat, iar expresia ce urmeaz a fi evaluat este introdus de la tastatur neinnd cont de modul de lucru cu tablouri de valori, expresia este calculat astfel: se determin puterile matricei dup care sunt nmulite cu coeficienii, rezultatele acestor nmuliri fiind, apoi, nsumate algebric, soluia fiind, evident, o matrice de aceeai 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 n ingineria mecanic

c)- dac variabila este un tablou de valori (numrul de linii diferit de numrul de coloane), expresia de evaluat trebuie introdus de la tastatur folosind regulile de calcul specifice tablourilor de valori (operatorii: .^ sau .* ) altfel MATLAB afieaz 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


Dac expresia f(x) se introduce: f = 3*x^4-5*x^3+3*x-1 MATLAB afieaz mesajul : ??? Error using ==> ^ Matrix must be square. Obs.:

EVALUAREA POLINOAMELOR CU FUNCIA MATLAB POLYVAL(P, Q)


Evaluarea expresiilor polinomiale, n MATLAB, se poate realiza folosind funcia polyval(): f = polyval(p, q) sau

f=polyvalm(p,q)
n care:

p - vectorul linie al coeficienilor 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


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

179

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 863

287 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 funcia MATLAB polyval().

Ex.: S se determine valoarea polinomului p(x)=3x4+x3+2x2-1, pentru valorile x [0,5] n punctele fixe distanate la 0,2 uniti. n MATLAB: x = 0:0.2:5; p = [3 1 2 0 -1]; f = polyval(p, x)

180

MATLAB n ingineria mecanic

f=
1.0e+003 * Columns 1 through 10 -0.0010 -0.0009 -0.0005 0.0003 Columns 11 through 20 0.0630 0.0896 0.1239 0.1672 Columns 21 through 26 0.8630 1.0419 1.2473 1.4819 0.0020 0.0050 0.0098 0.0172 0.0279 0.2210 0.2870 0.3668 0.4623 0.5755 1.7482 2.0490 0.0428 0.7083

CALCULUL DERIVATEI Derivata polinomului


Derivata polinomului se calculeaz folosind funcia MATLAB polyder(): D = polyder(c) n care:

c - vectorul linie al coeficienilor 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 definiie, derivata produsului a dou polinoame este tot un polinom, obinut prin relaia: ( A(x) B(x) )' = A'(x) B(x) + A(x) B'(x). Aadar, calculul acestei derivate implic folosirea aceleiai funcii MATLAB polyder(), n care, argumentul de intrare (nscris, ntotdeauna, ntre paranteze rotunde), este format din vectorii linie ai coeficienilor celor dou polinoame: D = polyder(A, B)

Ex.:

S se determine derivata produsului (x3+2x2-x+2) (x-1).

MATLAB n ingineria mecanic


n MATLAB: A = [1 2 -1 2]; B = [1 -1]; D_prod = polyder(A, B) D_prod = 4 3

181

-6

DERIVATA CTULUI A DOU POLINOAME


Se cunoate faptul c derivata ctului a dou polinoame este o expresie raional. n consecin, funcia MATLAB, pentru calculul derivatei ctului a dou polinoame se introduce cu parametri de ieire (parametrii de ieire, n acest caz numrtorul respectiv numitorul expresiei raionale rezultai ca urmare a calculului derivatei, se introduc n linia de comand ntre paranteze drepte, n partea stng a semnului de atribuire, = ). Pentru calculul derivatei ctului a dou polinoame se folosete funcia MATLAB polyder(): [M, N] = polyder(A, B) n care: -M i N sunt polinoamele de la numrtorul respectiv numitorul expresiei derivate; -A i B sunt polinoamele de la numrtorul respectiv numitorul expresiei ce urmeaz a fi derivat.

Ex.:
S se determine derivata expresiei raionale: n MATLAB:

x 3 + 2x 2 x + 2 x1

A = [1 2 -1 2]; B = [1 -1]; [M, N] = polyder(A, B) M= 2 -1 -4 -1 N= 1 -2 1


n format algebric uzual, rezultatul se scrie:

2 x 3 x 2 4x 1

(x 1)2

182

MATLAB n ingineria mecanic

ADUNAREA I SCDEREA POLINOAMELOR


Aceste operaii se pot executa numai dac polinoamele au acelai grad, prin urmare polinoamele trebuie transformate, prin extindere spre stnga, astfel nct acestea s fie de acelai grad. Dup uniformizarea gradului, adunarea algebric a polinoamelor se realizeaz, n MATLAB, ca o nsumare a doi vectori de aceeai dimensiune.

Ex.:

S se calculeze suma i diferena polinoamelor: g(x) = x4-5x2+6x-1 i h(x) = x3+3x-2. n MATLAB, ntruct polinomul h(x) are gradul III, acesta va fi adus la gradul IV corespunztor 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 FRACII SIMPLE


A( x ) se poate descompune n fracii simple, B( x ) dup rdcinile polinomului de la numitor (soluiile numitorului se numesc poli):
Orice expresie raional,

r3 r1 r2 rn A(x ) = + + + ... + + 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


rj rj + 1 A(x ) = + B(x ) x p j x pj rj + 2 rj + m 1

183

) (

)2 (x p j )3

+ ... +

(x p j )m

ntruct descompunerea n fracii simple are ca rezultat trei vectori, funcia MATLAB residue(), se introduce cu parametri de ieire. Funcia MATLAB pentru descompunerea n fracii 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 ct (A/B) Ex.:
S se descompun n fracii simple expresia:

A(x ) x 3 6x 2 + 11x 6 = . B(x ) x 2 9x + 20

n MATLAB (se vor calcula, pentru comparaie, ctul polinoamelor A(x), B(x); ctul respectiv restul mpririi polinoamelor A(x), B(x) i apoi, se va descompune n fracii 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 n ingineria mecanic

polii_fractiei = 5 4 coeficientii_catului = 1 3
Acest rezultat poate fi transcris, n format algebric, astfel:

x 3 6x 2 + 11x 6 x 9x + 20
2

( 6) + (x + 3) 24 + x5 x4

MATLAB n ingineria mecanic

185

CAPITOLUL VI
CUTAREA DATELOR N TABELE
a.)

CUTAREA DATELOR N TABELE UNIDIMENSIONALE

Cutarea datelor n tabele este o operaiune util n situaiile n care sunt necesare verificri ale elementelor unei matrici sau unei serii de elemente ordonate cresctor n prima coloan. Versiunile anterioare versiunii MATLAB 5.3 dispun de o funcie specific de cutare n tabele, funcia table1(tabel, xi), n timp ce, versiunile recente ale MATLAB dispun funcii specifice care realizeaz aceast operaiune (de cutare n tablouri de date) prin interpolare. Tabelul de date trebuie s fie organizat ca o matrice astfel nct n prima coloan se gsesc valorile lui x (abscisa ordonat cresctor) iar n celelalte coloane sunt valorile y corespunztoare, printre care pot fi cutate valori intermediare. Obs.: Dac x se gsete ntre dou valori din tabel funcia table1() returneaz o valoare interpolat liniar; Funcia MATLAB table1() este nlocuit n versiunile superioare ale MATLAB(ulterioare versiunii 5.3) cu funciile 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 gseasc valorile y corespunztoare pentru x1 = -1; x2 = 3; x3 = 3.5; x4 = 0.5; x5 = 3.75; x6 = -0.573. Soluie: -se organizeaz perechile de numere (x,y) ca matrice cu 2 coloane, apoi se folosete funcia table1(), pentru a gsi 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 n ingineria mecanic

y3=table1(tablou_original,3.5) y3 = 5.5 y4=table1(tablou_original,0.5) y4 = 2.5 y5=table1(tablou_original,3.75) y5 = 6.25 y6=table1(tablou_original,-0.573) y6 = 2.427


Atenie ! Coloana I trebuie s fie monoton (elementele trebuie s fie ordonate cresctor) ! Valorile cutate trebuie s se ncadreze ntre cea mai mic i cea mai mare valoare a lui x, altfel, se afieaz un mesaj de eroare. Astfel, dac se cere s se gseasc valoarea corespunztoare lui y atunci cnd x=5, MATLAB afieaz urmtorul 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 dect toate valorile primei coloane

b.)

CUTAREA DATELOR N TABELE BIDIMENSIONALE

n cazul tablourilor de valori bi- dimensionale (aceste tablouri se caracterizeaz prin urmtoarea particularitate:elementele sunt aranjate dup dou direcii x i y, acestei perechi i corespunde o a treia valoare z ), funcia MATLAB utilizat pentru cutarea valorilor z corespunztoare unei perechi (x,y) este:

table2(tab,x,y)
Obs.: Funcia MATLAB table2() este nlocuit n versiunile superioare versiunii MATLAB 5.3 cu funcia 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. (Atenie:TABLE2 este depit i va fi nlocuit n viitoarele versiuni. Folosii INTERP2 pentru acelai scop!) Condiii:

-tabelul tab este organizat ca o matrice, cu n linii i m coloane, ntotdeauna avnd, pe poziia (1,1), elementul 0 ; -numrul de linii este dat de numrul valorilor argumentului x, la care se adaug o linie pentru introducerea valorilor argumentului y, iar numrul de coloane este dat de numrul valorilor lui y; -valorile x-ilor se plaseaz pe prima coloan, n ordine cresctoare, ncepnd cu a 2-a linie; -valorile y-ilor se plaseaz pe prima linie, n ordine cresctoare, ncepnd cu a 2-a coloan;

Celelalte elemente ale matricei sunt valorile z (obinute prin msurtori, calcule, etc.).

Ex.: Fiind date tripletele:

x
0 -3 2 8 100 1 0 9 -8 0 2 1 3 9 0 3 2 1 1 1 4 4 7 0 7 5 8 6 2 2

y
6 7 5 -8 8 7 11 3 2 1 8 0 1 1 2 9 1 0 0 1 10 1 -3 1 0

S se gseasc valorile corespunztoare perechilor (x,y): (-3,7); (-3,6.5); (-2,6); (50,8); (99,9.9); (-4,8); (2,11). Soluie:

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 n ingineria mecanic

z2=table2(tablou_original_2,-3,6.5) z2=9 z3=table2(tablou_original_2,-2,6) z3=6.6 z4=table2(tablou_original_2,50,8) z4=1.4565 z5=table2(tablou_original_2,99,9.9) z5=0.1087 z6=table2(tablou_original_2,-4,8)


??? 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 aplicaii practice apare necesitatea evalurii aproximative a unei funcii f : [a, b ] , [a, b] . Problema aproximrii
funciilor intervine n situaii de o mare diversitate, multitudinea formulrilor i metodelor de rezolvare asociate constituind o reflectare direct a acestei diversiti. n aplicaii este frecvent necesar utilizarea unor funcii pentru care sunt cunoscute doar valorile corespunzatoare unui set discret de valori ale argumentelor. Astfel de dependene pot reprezenta, spre exemplu, tabelarea unor funcii matematice sau a unor mrimi fizice msurate sau calculate. Pentru simplitatea discuiei ne limitm n cele ce urmeaz la funcii reale de o variabil real. n toate cazurile, pentru funcia considerat f : [a, b ] , [a, b] sunt specificate valorile y i ntr-un numar de puncte de reea x i [a, b ] , adic

f (x i ) = y i ,

i = 1, 2, 3, K , n

Prelucrarea numeric ulterioar a acestor funcii impune adesea i utilizarea unor valori corespunzatoare unor argumente diferite de cele tabelate. n multe situaii, ns, obinerea unor informaii suplimentare este dificil, dac nu chiar imposibil. Astfel, chiar dac este cunoscut algoritmul de calcul al funciei, complexitatea acestuia poate face uneori ineficient utilizarea lui pentru detalierea iuformaiei. Pe de alta parte, dac valorile tabelate provin din observaii, ele sunt, n general, afectate de erori de msur. n toate situaiile menionate, pentru a sintetiza informaia asupra funciei tabelate f i a o putea utiliza eficient n calcule, se impune aproximarea ei printr-o funcie continu, numit funcie model, F = F (x; a 1 , K , a m ) , care depinde n general de un numar de parametri ajustabili, aj,-, numii parametri de model. Forma funciei F i valorile parametrilor aj trebuie determinate astfel nct funcia discret f s fie aproximat optim ntr-un anumit sens. Alegerea formei concrete a funciei model F este o problema netrivial i ea trebuie s aib la baz o fundamentare riguroas. n linii mari, stau la dispoziie urmatoarele opiuni: funcia model se alege dintr-o clas convenabil de funcii (cum ar fi: polinoame, funcii gaussiene etc.), care ofer simplitate i eficien n prelucrri ulterioare; funcia model este derivat dintr-o teorie, n cadrul careia parametrii de

190

MATLAB n ingineria mecanic

model au o semnificaie bine stabilit; funcia model rezult dintr-un compromis ntre constrngerile i avantajele opiunilor anterioare. Pentru a putea determina, practic, valorile optime ale parametrilor de model, trebuie definit o funcional care s reflecte gradul n care funcia model F aproximeaz funcia tabelat f pentru o alegere particular, a parametrilor. Admind ca f i F aparin spaiului C 2 [a, b ] al funciilor de ptrat sumabil pe [a,b], o msur sugestiv a abaterii modelului fa de funcia modelat este dat de distana dintre cele dou funcii:

b 2 d(f , F ) = [f (x ) F(x; a )]2 dx a

unde s-a utilizat notaia vectorial a (a 1 , a 2 , K) . Evident, aceast definiie nu este utilizabil ca atare, deoarece implic i cunoaterea expresiei anlitice a funciei f. Se poate utiliza, ns, o definiie mai puin riguroas, dar aplicabil. pentru funcii discrete:

n 2 d(f , F ) = [f (x i ) F (x i ; a )]2 i =1

Aproximarea pe baza acestei distane este numit aproxirnare n medie ptratic i este utilizat n doua dintre cele mai importante metode de modelare a funciilor tabelate: mterpolarea i regresia. Dac, valorile tabelate y i = f (x i ) sunt considerate exacte (neafectate de erori), este firesc s se impun anularea distanei dintre funciile f i F:

d(f , F ) = 0
Aceasta revine la construirea unei funcii model, aparinnd unei anumite clase, care s ia, n punctele de tabelare x i , aceleai valori ca i funcia f(x): F(x; a ) = y i , i = 1, 2, K , n

MATLAB n ingineria mecanic

191

Funcia care satisface aceste condiii este utilizat, n mod normal, pentru aproximarea funciei f(x) pe intervalul [x 1 , x n ] iar procedeul se numete interpolare. Funcia F(x; a ) poart numele de funcie de interpolare sau interpolant, iar nodurile x i se mai numesc i puncte de interpolare. Geometric, interpolarea implic gsirea unei curbe y = F(x; a ) care trece prin toate punctele M i ( x i , y i ) . De exemplu, presupunnd funcia y=sinx, reprezentat grafic n punctele x [ , ] , interpolarea n apte puncte echidistante, ale intervalului, este realizat cu o funcie MATLAB specific, i surprins n imaginea alturat. Dac, argumentele pentru care se evalueaz interpolantul se afl nafara intervalului [x 1 , x n ] procedeul se numete extrapolare. Cu un asemenea enun, general ns, problema poate avea o infinitate de soluii sau nici una, n funcie de clasa creia i aparine funcia model. Problema interpolarii devine neambigu dac n locul unei funcii model arbitrare cutm un polinom Pm(x) de grad nu mai mare decat (n 1), care satisface condiiile de interpolare. Din acest set de condiii se pot determina cei (m+1) coeficieni ai polinomului i metoda se numete interpolare polinomial.Funciile de interpolare polinomiale sunt cele mai utilizate n practic. Dintre acestea amintim funcia Lagrange i interpolanii spline i Akima (netezi pe poriuni). Totui, n anumite cazuri se dovedesc utile i funciile de interpolare raionale. La randul lor, funciile trigonometrice conduc la aanumita interpolare trigonometric, i la metodele Fourier nrudite.

192

MATLAB n ingineria mecanic

Dac valorile tabelate y i = f (x i ) provin din observaii, ele sunt afectate n general de erori de msurare, imprecizia fiecrei valori fiind specificat de obicei prin deviaia standard i asociat: n astfel de cazuri, funcia model F = F(x; a) este cu att mai bun cu

ct sunt mai elaborate considerentele pe baza carora i s-a stabilit forma (cu ct este mai puin empiric). Avnd n vedere imprecizia datelor, nu este de asteptat ca funcia model s interpoleze punctele tabelate (chiar dac acest lucru este teoretic posibil) i este deci firesc s se impun minimizarea distanei d(f, F) n raport cu valorile parametrilor:

d(f , F ) = min im
aj

nu anularea ei riguroas ca n cazul interpolrii. n mod concret, aceasta revine la determinarea celor m parametri, a j , ai funciei model F(x; a), aparinnd unei anumite clase, care minimizeaz suma abaterilor ptratice punctuale ale funciei model fa de datele tabelate:

S=

[y F(x ;a)]
i i i=1

Acest procedeu se numete regresie sau ajustare prin metoda celor mai mici ptrate. Termenul preluat din limba englez este fitare (de la "to fit"a potrivi), desemnnd procesul de ajustare a parametrilor curbei de regresie.

MATLAB n ingineria mecanic


n

193

Intr-un context mai larg, funcionala S =

[y F(x ;a)]
i i i=1

reprezint

aa-numita funcie de merit a procesului de ajustare. Pentru o apreciere mai nuanat a gradului n care funcia model aproximeaz datele msurate, n practic se utilizeaz funcii de merit mai elaborate. Oricum, deoarece n mod conventional funcia de merit este construit astfel nct valori mici s corespunda unor abateri reduse ale modelului fa de funcia 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 funcia de merit "hi-patrat":

2 =

i=1

1
2 i

[yi F(xi ;a)]2

Spre deosebire de funcionala S =

[yi F(xi;a)]2 , funcia de merit i =1

"hi-patrat", atribuie ponderi diferite punctelor de tabelare individuale, i anume depinznd de inversul deviaiei standard i asociate. n acest fel crete ponderea relativ a punctelor afectate de erori mici, funcia model fiind forat n procesul ajustrii parametrilor s minimizeze cu precdere distana fa de aceste puncte n detrimentul distanei fa de punctele mai imprecise (cu i mari). n cazul n care deviaiile i sunt egale sau nu sunt cunoscute, formalismul se simplific i revine la regresia cu ajutorul funciei de merit S. Extremum- ul
2 funcionalei =

i2 [yi F(xi ;a)]2 i=1

n raport cu parametrii aj este

caracterizat prin relaiile: 2 = 0, j=1, 2, , m a j sau

i2 [yi F(xi ;a)] i=1

F(xi ;a) = 0, a j

j=1, 2, , m

194

MATLAB n ingineria mecanic

din care pot fi determinai parametrii aj. Ajustarea pe baza funciei 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 ), minimiznd funcionala 2 . Deoarece erorile de msurare ale datelor induc imprecizii n determinarea parametrilor de model, informaia furnizat de procesul de ajustare nu este complet fr estimarea acestor erori. Admind c datele sunt independente, considerente de propagare a erorilor arat. c variana (imprecizia
2 probabil patratic.) a
j

asociat parametrului aj rezult prin

cumularea

contribuiilor ponderate cu i2 de la fiecare valoare discret yi:


2 a j

i =1

i2

a j y i

Creterea fr o justificare teoretic clar a numrului de parametri de model n ideea descrierii ct mai exacte a datelor, eventual chiar a interpolrii lor, nu face funcia model "mai bun" chiar dac reduce valoarea funciei de merit, ci, pe lng lipsa de semnificaie a modelului i a parametrilor adugai, poate conduce la apariia 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 avnd semnificaii diferite i fiind aplicabile n situaii distincte. n general, datele experimentale reprezint valori discrete determinate prin diferite metode. Aceste date pot reprezenta analitic o relaie matematic dintre diferitele date experimentale observate i se exprim prin funcii ai cror coeficieni se determin, n general, prin rezolvarea unor sisteme de ecuaii lineare. De exemplu, considernd c s-au msurat, 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 dependena y(t) al crei grafic este o curb convex.

MATLAB n ingineria mecanic

195

METODA CELOR MAI MICI PTRATE


Majoritatea metodelor de aproximare, ajustare, interpolare sau extrapolare, utilizeaz ca metod de calcul a coeficienilor, metoda celor mai mici ptrate. Aceast metod minimizeaz suma ptratelor reziduurilor:
S=

i =1

ri2

(y i y i )2 . Reziduum-ul este calculat ca diferena dintre valoarea i =1

observat y i i valoarea previzionat y i : r = y y i . MATLAB recunoate patru tipuri de metode aplicative variante ale metodei celor mai mici ptrate: Metoda lineara a celor mai mici ptrate; Metoda ponderat a celor mai mici ptrate; Metoda robust a celor mai mici ptrate; Metoda nelinear a celor mai mici ptrate.
METODA LINEAR A CELOR MAI MICI PTRATE
Aceast metod folosete un model matematic linear (o funcie de gradul nti) pentru aproximarea datelor: y = p 1 x + p 2 , n care cei doi coeficieni urmeaz a fi determinai. Metoda se numete linear ntruct funcia, care definete modelul matematic de aproximare, este de gradul nti n coeficieni. Pentru a ilustra procesul de aproximare prin aceast metod, este suficient a arta modul n care este rezolvat ecuaia de gradul nti y = p 1 x + p 2 , n necunoscutele p 1 i p 2 , dac se consider n puncte cunoscute. Dac se scriu cele n ecuaii corespunztoare datelor cunoscute, se obine un sistem de n ecuaii care urmeaz a fi rezolvat: S =

(y
i =1

(p 1 x i + p 2 ))2 . Difereniind n raport cu cele

dou necunoscute p 1 i p 2 , ntruct metoda minimizeaz suma ptratelor reziduurilor, se obin dou expresii suplimentare:

S = 2 x i (y i (p 1 x i + p 2 )) = 0 p 1 i =1

S = 2 (y i (p 1 x i + p 2 )) = 0 p 2 i =1

196

MATLAB n ingineria mecanic

Aceste ecuaii sunt rezolvabile n raport cu cele dou necunoscute: n n n x i2 + p 2 xi = xi y i p 1 i =1 i =1 i =1 ale crui soluii n n p1 xi + n p2 = yi i =1 i =1

sunt:

n p1 =

x
i =1

yi

x y
i i =1

n n x i2 xi i =1 i =1

i =1 2

respectiv p 2 =

n n 1 y i p1 xi . n i =1 i =1

Ceea ce se poate constata uor, este faptul c utilizarea acestei metode pentru aproximare i ajustare, nseamn doar calcule algebrice simple. n forma matriceal, metoda lineara a celor mai mici ptrate este dat de formula:

y = X +
unde: -y este un vector coloan (n linii ), al rspunsurilor; - este un vector coloan (m linii), al coeficienilor; -X este o matrice nxm, a valorilor previzionate; - este vectorul coloan (n linii ), al erorilor. Pentru un polinom de gradul nti, cele n ecuaii cu dou necunoscute, exprimate n funcie de y, X i sunt:

y 1 x1 1 y 2 x 2 1 p y 3 = x 3 1 x 1 p 2 M M y n x n 1

MATLAB n ingineria mecanic

197

Soluia problemei, dat prin metoda celor mai mici patrate, este un vector b, care conine vectorul coeficienilor . Ecuaiile generalizate ataate acestui sistem sunt reprezentate prin:

(X
cu soluia generalizat:

X b = XT y ,

b = XT X

XT y

n care, XT reprezint transpusa matricei X. Aceast ecuaie poate fi rezolvat folosind operatorul \ (mprire la stnga), respectiv, folosind factorizarea QR. Soluia de rspuns, previzionat, y , se determin cu relaia:

y = Xb = Hy,
unde:

H = X XT X

XT

In aceste condiii, reziduurile sunt date de relaia:

r = y y = (1 H ) y

METODA PONDERAT, A CELOR MAI MICI PTRATE


n evaluarea rezultatelor experimentale, a msurtorilor, n general, se presupune c, datele obinute au aceeai calitate, deci i variana este constant. Dac aceast presupunere nu este valid, fiind prezente perturbaii evidente, atunci procesul de ajustare a reprezentrilor grafice ale datelor obinute, este perturbat i conine erori. n consecin, pentru creterea calittii aproximrii, se poate folosi metoda, ponderat, a celor mai mici ptrate, metod care introduce un factor de pondere. Aceast metod minimizeaz eroarea estimat
S= w i (y i y i )2 i =1
n

198

MATLAB n ingineria mecanic

n care, w i reprezint ponderea rezidual. Aceast mrime arat magnitudinea influenei pe care o are fiecare rspuns n evaluarea final a parametrului msurat. Ponderarea este recomandat acolo unde se cunosc mrimile ponderilor, sau acolo unde este justificat o anumit comportare a acestora. Ponderile modific expresia vectorului b, astfel:

b = = XT W X

XT W y ,

unde, W, este dat de elementele de pe diagonala principal a matricei ponderilor w. Ponderile utilizate trebuie s transforme variana rspunsurilor n valori constante. Dac este cunoscut variana datelor, ponderea este dat prin:

wi =

n timp ce, dac nu se cunoate variana, ponderile se vor aproxima cu relaia:

1 wi = n

(y
i =1

y)

Aceast relaie este acoperitoare pentru calculul ponderilor, dac setul de date conine valori identice (repetiii). n acest caz, n reprezint numrul de replici identice.

METODA ROBUST, A CELOR MAI MICI PTRATE


Metoda celor mai mici ptrate, n general, este sensibil la valorile ieite din setul de valori, adic din modul n care evolueaz acest set de date. Minimizarea influenei ieirilor este realizabil prin metoda, robust, a celor mai mici ptrate. 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 diferena absolut a reziduurilor, n raport cu diferena ptratelor acestora. Din acest motiv, valorile extreme au o influen redus. 2. Metoda ponderilor biptrate Aceast variant a metodei minimizeaz suma ptratelor ponderilor, n care ponderea reprezint distana lacare se gsete fiecare punct fa de linia de aproximare. Astfel, punctele apropiate

MATLAB n ingineria mecanic

199

de curb au o pondere ridicat, iar punctele ndeprtate de curb, dau ponderi reduse (valori apropiate de zero). Metoda ponderilor biptrate este preferat metodei reziduurilor absolute, ntruct prima metod minimizeaz efectul valorilor extreme. Metoda, robust, a celor mai mici ptrate, varianta ponderilor biptrate utilizeaz un algoritm de ponderare, i urmrete urmtoarea procedur: 1. Aproximeaz modelul prin ponderarea celor mai mici ptrate; 2. Se determin reziduurile ajustate, i se actualizeaz. Reziduurile ajustate, se determin cu relaia:

radj =

ri 1 hi

n care ri este reziduul ptratic uzual, iar hi este rotunjirea care ajusteaz reziduurile prin lips. Actualizarea se realizeaz prin:

u=

radj K s

unde K este o constant de reglaj K=4.685. i s este variana robust dat prin relaia: DMA s= 0,6745 n care DMA reprezint deviaia medie absolut a reziduurilor; 3. Calculul ponderilor robuste ca funcie de u. Ponderile biptrate sunt date prin: 2 1 (u i )2 , u i < 1 wi = ui > 1 0,

4. Dac aproximarea este convergent atunci rezultatul este corect, altfel, se trece la o nou iteraie a ajustrii, prin rentoarcerea la primul pas al procedurii.

200

MATLAB n ingineria mecanic

METODA NELINEAR A CELOR MAI MICI PTRATE


MATLAB dispune de o variant a metodei celor mai mici ptrate care utilizeaz o formulare neliniar pentru aproximarea datelor. Un model nelinear este definit printr-o ecuaie neliniar n coeficieni, sau o combinaie liniar i neliniar (aproximarea Gauss sau aproximarea raional de polinoame). n forma matriceal, modelul neliniar este dat de formula:

y = f ( X, ) +
unde

y este vectorul coloan al rspunsurilor (n linii); f este o funcie de i X; este vectorul coloan al coeficienilor (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 dect modelele lineare, ntruct coeficienii nu pot fi estimai prin metode matriciale simple. De aceea, abordarea tehnicilor iterative trebuie s adopte urmtoarele etape: 1. Startul cu o estimare iniial pentru fiecare coeficient; 2. Se realizeaz ajustarea pentru coeficienii determinai. Rspunsul aproximat este dat de relaia:

y = f ( X, )
care implic i calculul Jacobianului funciei f ( X, ) (Jacobianul este definit prin derivatele pariale ale matricei n raport cu coeficienii ); 3. Ajustarea coeficienilor i evaluarea aproximrii (n MATLAB sunt disponibili algoritmii: a)-Trust region; b)-LevenbergMarquardt; c)-Gauss-Newton); 4. Iterarea procesului, prin saltul la pasul 2., atta timp ct nu este realizat convergena aproximrii. Datorit naturii procesului de aproximare n sine, nici un algoritm nu este perfect pentru modelul neliniar al metodei celor mai mici ptrate. Din acest motiv, atunci cnd rezultatele obinute nu sunt cele ateptate, sau apropiate de cele ateptate, se ia decizia schimbrii metodei implicite de aproximare, mai ales c metodele neliniare sunt sensibile la punctul de start al aproximrii.

MATLAB n ingineria mecanic

201

INTERPOLAREA DATELOR, FOLOSIND MATLAB


Interpolarea, aa 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 corespunztoare datelor cunoscute. Interpolarea are aplicaii deosebit de importante n procesarea imaginilor i a semnalelor (achiziiei de date). Se disting :metode de interpolare linear, bi-dimensional, Spline, Fourier, bi-linear, bi-armonic, bi-cubic, multi-dimensional, prin triangularizare. n figurile urmtoare se poate observa, n principiu, efectul procesului de interpolare, pentru un set de semnale msurate.

Semnalul original

Semnalul interpolat

Fie f : [a, b ] , [a, b] . Se pune problema determinrii unei funcii F, care s aproximeze funcia f n intervalul [a,b]. Se recurge la aceast aproximare n dou cazuri: 1. -cnd nu se cunoate expresia analitic a lui f, dar se cunosc valorile sale ntr-un numr finit de puncte; 2. -cnd 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 funcie F(x) relativ simpl astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumit clas de funcii, de exemplu din clasa polinoamelor de grad n sau mai mic, atunci trebuie ca F(x) s ia aceeai 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 n ingineria mecanic

anumite derivate ale lui F(x) s ia aceleai valori cu valorile derivatelor corespunztoare ale lui f(x) n anumite puncte de interpolare. Se poate arta 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 )

k = 0,1,2,..., n .

MODELE PARAMETRICE
n MATLAB sunt disponibile cteva modele parametrice consacrate, pentru interpolarea i aproximarea datelor: 1. Funcii exponeniale Exist dou variante ale acestui model parametric: Modelul exponenial cu un termen: y = a e bx ; Modelul exponenial cu doi termeni: y = a e bx + c e dx ; Funciile exponeniale sunt utilizate atunci cnd rata modificrii unei mrimi este proporional cu dimensiunea iniial a acestei mrimi. n funcie de semnul exponentului, y este o funcie descresctoare (exponent negativ), sau o funcie cresctoare (exponent pozitiv); 2. Serii Fourier Sunt modele
n

reprezentate
i

prin

sume

de

funcii

trigonometrice

simple: y = a 0 +

a
i =1

cos(nx ) + b i sin(nx )

3. Modelul Gauss Acest model este utilizat pentru aproximarea valorilor de varf. De exemplu, aproximarea liniei spectrale de emisie pentru analiza concentraiei

MATLAB n ingineria mecanic

203

chimice, poate fi descris printr-o aproximare Gauss. Modelul matematic asociat, este dat de ecuaia:

y=

a
i =1

x bi ci

unde a este amplitudinea, b este centroidul, c este dat de limea relativ a vrfului, iar n este numrul de vrfuri ce urmeaz a fi aproximate ( 1 n 8 ) 4. Modelul polinomial Ecuaia caracteristic acestui model este: y =

p
i =1

x n +1 i , n care (n+1)

reprezint ordinul polinomului, (n) reprezint gradul polinomului. Ordinul polinomului d numrul de coeficieni ce urmeaz a fi aproximai, iar gradul polinomului arat puterea variabilei previzionate. Modelele polinomiale sunt folosite atunci cnd sunt necesare aproximri empirice simple. Acestea pot fi utilizate n cazul interpolrilor sau extrapolrilor seturilor de date. 5. Serii de puteri Sunt disponibile dou variante ale acestui model, ca i n cazul modelului funciilor exponeniale: Modelul seriilor de puteri cu un termen: y = a x b ; Modelul exponenial cu doi termeni: y = a + b x c ;

6. Expresii raionale Expresiile raionale sunt date de modele matematice descrise de ecuaii de
n

forma: y =

p
i =1

x n + 1 i
, n care gradul numrtorului, 0 n 5 ,
i

q
i =1

mi

204

MATLAB n ingineria mecanic

respectiv gradul numitorului 1 m 5 , iar coeficientul lui x m este, ntotdeauna, unu. Modelele raionale sunt avantajoase datorit flexibilitii mari n cazul structurilor de date complicate, dar prezint dezavantajul instabilitii accentuate atunci cnd numitorul ia valori aproape de zero. 7. Sume de sinus Modelul matematic este dat de relaia: y =

a
i =1

sin(b i x + c i ) , n care

a este amplitudinea, b, este frecvena, iar c este constanta de faz pentru fiecare termen al sumei de sinusi ( 1 n 8 ).
8. Distribuia Weibull Acest model este utilizat n analiza datelor statistice legate de fiabilitatea i de durata de via a produselor. Expresia matematic este: y = a b x b 1 e ax , n care a este parametrul de scar iar b este factorul de form. Modelul matematic poate conine un parametru suplimentar c, centroidul, atunci cnd x este nlocuit cu x-c. De remarcat c distribuia Weibull nu aproximeaz datele unui set de date, ci aproximeaz curbele astfel nct acestea s aib forma apropiat de forma distribuiei 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 ecuaii specifice unei anumite aplicaii. Aceste ecuaii sunt avantajoase ntruct coeficienii punctului de start al iteraiei se aleg aleatoriu din intervalul [0,1], iar pentru calculul Jacobianului se folosete difereniala total.
b

FUNCIILE MATLAB PENTRU INTERPOLAREA DATELOR


n tabelul urmtor sunt prezentate selectiv funciile MATLAB, utilizate pentru interpolarea datelor:

MATLAB n ingineria mecanic

205

Funcia MATLAB 1 table1

DESCRIERE 2 - cutare n tabele i interpolare linear n tabele uni-dimensionale n versiunile superioare ale MATLAB este nlocuit cu funcia interp1 - cutare n tabele i interpolare linear n tabele bi-dimensionale n versiunile superioare ale MATLAB este nlocuit cu funcia interp2 1. interpolare spline cubic n tabele unidimensionale 2. determin componentele polinomiale ale curbei spline de aproximare, pentru utilizarea cu funcia MATLAB ppval() - interpoleaz prin metoda Transormatei Fourier rapide (fft) 2 - interpoleaz linear, spline sau cubic n tabele uni-dimensionale - cutare n tabele uni-dimensionale - interpoleaz bi-linear, cubic-spline sau bicubic n tabele bidimensionale - cutare n tabele bi-dimensionale - interpoleaz date n trei dimensiuni - cutare n tabele - interpolare linear, spline, spline-cubic a datelor multi-dimensionale - cutare n tabele - aproximeaz i ajusteaz o suprafa z=f(x,y) la datele vectorului tridimensional (x,y,z), neuniform spaiat, prin interpolarea la punctele specificate (XI,YI), cu condiia ca suprafaa sa treac, ntotdeauna, prin punctele date. - aproximeaz i ajusteaz o suprafa w=f(x,y,z) dat de vectorul spaial neuniform (x,y,z,v), prin interpolare n punctele specificate (xi,yi,zi) - interpoleaz liniile de cmp prin vertex-uri, pe baza datelor specificate n vectorii U,V,W, ale cror coordonate sunt date de matricile X,Y,Z.

table2

1. spline(x,y,xx) 2. spline(x,y)

1. interpft(x,n) 2. interpft(x,n,dim) 1 1. interp1(x,Y,xi) 2. interp1(Y,xi) 3. interp1(x,Y,xi,metoda) 1. interp2(X,Y,Z,XI,YI) 2. interp2(Z,XI,YI) 3. interp2(X,Y,Z,XI,YI,metoda) 1. interp3(X,Y,Z,V,XI,YI,ZI) 2. interp3(...,metoda) 1. interpn(X1,X2,X3,V,Y1,Y2,Y3,..) 2. interpn(V,Y1,Y2,Y3,...) 3. interpn(...,metoda) 1. griddata(x,y,z,XI,YI) 2. griddata(x,y,z,xi,yi) 3. griddata(...,metoda)

1. griddata3(x,y,z,v,xi,yi,zi) 2. griddata3(...,'metoda')

interpstreamspeed(X,Y,Z,U,V,W,vertic es)

206

MATLAB n ingineria mecanic

INTERPOLAREA LINEAR
Interpolarea este o operaie similar cutrii n tabele. Funcia MATLAB interp1() interpoleaz ntre punctele date, gsind valorile unei funcii unidimensionale f(x) pe baza acestor puncte. n figura de mai jos este prezentat schematic relaia dintre vectorii x, Y, xi, yi. Prin interpolarea cu funcia MATLAB interp1() se caut elementele xi n vectorul x, i, pe baza locaiilor acestora, se returneaz valorile yi interpolate printre elementele vectorului y. n MATLAB 6 sunt disponibile mai multe variante ale funciei 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 funciei interp1() returneaz un vector yi coninnd elementele corespunztoare 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 interpolrii este necesar corespondena ntre dimensiunile vectorului xi i dimensiunea matricei Y (n sensul c aceste dou entiti s aib acelai numr de linii). Varianta yi = interp1(x,Y,xi,metoda), permite realizarea interpolrii folosind metode alternative:

' n e a r e s t ' i n

MATLAB n ingineria mecanic

207

Dac un element al vectorului xi se gsete 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 numr mai mare de abscise:
Soluie: 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 reprezentnd deceniile 1 pn la 9 ale secolului trecut, cel de-al doilea reprezentnd populaia 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 populaiei Statelor Unite ale Americii corespunztoare anului 1975, apoi s se estimeze populaia pe fiecare an n parte ncepnd din 1900

208

MATLAB n ingineria mecanic

i pn n 2000, reprezentnd grafic rezultatul obinut. Soluie: Prin interpolare:

populatia_in_1975=interp1(t,p,1975)
se obine rezultatul:

populatia_in_1975= 214.8585
Interpolnd ntre anii 1900 i 2000 se obin rezultatele, respectiv, graficul evoluiei populaiei 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 funcia MATLAB interp2() care se poate apela n urmtoarele 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 conine elementele corespunztoare punctelor (XI,YI) i determinate prin

MATLAB n ingineria mecanic

209

interpolare n matricile X, Y i Z, (Z este definit ca funcie bi-dimensional de elementele matricilor X i Y);

Matricile X i Y trebuie s fie ordonate monoton cresctor, i sa fie n acelai format; Matricile X i Y definesc punctele n care este dat matricea Z;

XI i YI pot fi matrici, caz n care, funcia interp2(), determin valorile matricei Z corespunztoare punctelor (XI(i,j), YI(i,j));
Dac funcia interp2 este apelat cu varianta ZI = interp2(Z,XI,YI), atunci se interpreteaz, automat de ctre MATLAB, c X = 1:n i Y = 1:m, unde [n, m]=size(Z); Varianta ZI = interp2(Z,de_n_ori) specific repetarea interpolrii bidimensionale, 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 vecinti 'spline' -pentru interpolarea spline cubic 'cubic' - pentru interpolarea bi-cubic

CONCLUZIE : Oricare dintre aceste variante interpoleaz ntre punctele unei reele bidimensionale, fiind gsite valorile unei funcii f(x,y) care face conexiunea ntre punctele intermediare.

210

MATLAB n ingineria mecanic

De exemplu, se cere interpolarea, pe o reea [X,Y], a funciei MATLAB peaks() (aceast funcie, de dou variabile, este obinut prin translatarea i scalarea distribuiilor GAUSS), pe o reea [XI,YI] mai fin dect [X,Y] . Soluia 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 funcia interp3() care se poate apela n urmtoarele 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 cutarea valorilor matricei VI, reprezentnd valorile intermediare ale funciei tridimensionale V n punctele reelei date de matricile XI, YI i ZI. Matricile, sau vectorii, XI, YI i ZI trebuie sa fie de aceeai dimensiune, respectiv s fie ordonate monoton. De exemplu, folosind i funcia MATLAB slice(), se interpoleaz datele reelei tri-dimensionale [x,y,z,v] = flow(10), pentru a gsi valorile corespunztoare 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 nct s conduc la tranziii 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 funcie neted ntre toate cele trei puncte. Obs. : De reinut : diferena 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 gsesc n setul ordonat.

212

MATLAB n ingineria mecanic

Interpolarea spline cubic se face n MATLAB cu funcia:

yy = spline(x,y,xx) pp = spline(x,y)
unde: -

x,y sunt vectori linie ce conin abscisele, respectiv ordonatele punctelor; xi este vector ce conine 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 (considernd c au fost deja introdui vectorii x i y):

y1=spline(x,y,2.7) y1=67.4340 Ex.:


Folosind aceiai 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 funcia 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 reea de patru ori mai fin (x=0:10; y=sin x)
Soluie:

x = 0:10; y = sin(x); xi = 0:0.25:10; yi = spline(x,y,xi); plot(x,y,o,xi,yi)

214

MATLAB n ingineria mecanic

b) Folosind, pentru x pasul iterrii 0.5 iar funcia y=tgx+sinx, s se reprezinte pe acelai grafic valorile funciei (y- cu linie punctat de culoare roie), 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
Funcia MATLAB utilizat: interp1(x,y,xi,regula) n care, argumentele au semnificaia cunoscut, iar regula este cuvntul cheie:

linear interpolare linear; spline interpolare spline; cubic interpolare cubic.


Toate regulile necesit ca x s fie ordonat cresctor, n plus, metoda cubic impune ca punctele x s fie egal distanate.

MATLAB n ingineria mecanic


Ex.:

215

S se determine prin interpolare linear, spline i cubic, i apoi sa se reprezinte grafic punctele corespunztoare 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).


Soluie : 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 funcia:

y = a 0 + a 1 t + a 2 t 2 , coeficienii a0, a1 i a2 determinndu-se dintr-un sistem de


2 t1 t2 2 a 0 t3 t2 3 a1 . 2 t4 t4 a 2 2 t5 t5 2 t6 t6 Presupunnd c sunt date elementele vectorului t i ale vectorului corespondent, y, se formeaz matricea X, a coeficienilor sistemului, n funcie de dimensiunea vectorului t, n raport de puterile nti 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]

y 1 1 y 2 1 y 3 1 6 ecuaii (vectorul y are 6 elemente) cu 3 necunoscute: = y 4 1 y 5 1 y 6 1

t1 t2

216

MATLAB n ingineria mecanic

X= 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0 0.3000 0.8000 1.1000 1.6000 2.3000 0 0.0900 0.6400 1.2100 2.5600 5.2900

Soluia 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. Reprezentnd grafic acest polinom de gradul II, suprapunnd cu graficul anterior, se obine figura alturat. 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 crete gradul polinomului de aproximare, sau se pot folosi alte metode de aproximare.

REGRESIA EXPONENIAL
Considernd ca model de aproximare o funcie exponenial y = a 0 + a1 e t + a 2 t e t , n care parametrii ce urmeaz a fi determinai sunt coeficienii, acetia se determin prin metoda celor mai mici ptrate. n acest sens, se construiete, 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


a=X\y a= 1.3974

217

-0.8988 0.4097 Modelul matematic de aproximare se formeaz cu aceste valori determinate prin rezolvarea sistemului de ecuaii: 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 exponenial este mult mai aproape de valorile vectorului y = [0.5 0.82 1.14 1.25 1.35 1.40]'.

218

MATLAB n ingineria mecanic

REGRESIA MULTIPL
n cazul n care y este o funcie de mai multe variabile independente, ecuaiile matriceale, care exprim relaia dintre variabile, pot fi definite pentru a include i datele adiionale. Astfel, dac se presupune c, pentru doi parametri diferii, definii 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 funciei, i acestea sunt cuprinse n vectorul y = [0.17 0.26 0.28 0.23 0.27 0.24]', atunci, funciamodel matematic linear, care ar putea exprima relaia ntre parametri, este: y = a 0 + a1 x1 + a 2 x 2 , n care ai reprezint parametrii lineari ce urmeaz a fi determinai. Regresia multipl determin soluia {a 0 , a 1 , a 2 } folosind metoda celor mai mici ptrate. Pentru aceasta, se construiete matricea regresiilor, X, i se gsesc coeficienii necunoscui (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, funia- 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 deviaiei datelor modelului faa de datele observate:

Y=X*a; eroarea_maxima=max(abs(Y-y))

MATLAB n ingineria mecanic


eroarea_maxima = 2.5309

219

Aceast eroare este suficient de mare pentru a invalida modelul adoptat. Repetnd raionamentul i calculele pentru alte valori ale vectorilor x1, x2 i y se obin urmtoarele 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


Funcia MATLAB polyfit(), determin aproximarea polinomial, n sensul celor mai mici ptrate, a unui set de date. Sintaxa funciei MATLAB este:

a) b) c)

p = polyfit(x,y,n) [p,S] = polyfit(x,y,n) [p,S,miu] = polyfit(x,y,n)

220

MATLAB n ingineria mecanic

Descriere: Apelat n varianta a), funcia p=polyfit(x,y,n), determin coeficienii unui polinom de gradul n, p(x), care aproximeaz valorile (x(i)) la y(i), n sensul celor mai mici ptrate. Rezultatul, p, este un vector linie cu n+1 coloane, coninnd coeficienii polinomiali, n ordine descendent:

p(x ) = p 1 x n + p 2 x n 1 + ... + p n x + p n +1
Dac funcia polyfit este apelat n varianta b), cu parametrii de ieire p i S, atunci, se returneaz coeficienii polinomiali n vectorul linie p, i o structur S, care poate fi utilizat, cu funcia polyval, pentru estimarea erorilor de previzionare. Apelarea cu varianta c), funcia polyfit, determin obinerea coeficienilor x 1 , n care 1 = mean(x ) este valoarea medie polinomului p, n variabila x = 2 a variabilei x, respectiv

2 = std(x )

deviaia standard, calculat cu relaia

1 s= n1

(x
i =1

x)

1 , n care x = n

x i ,iar miu ( parametrul de ieire, n i =1

cazul celei de-a treia variante de apelare a funciei polyfit), este vectorul miu = [ 1 , 2 ] . De exemplu, dac se consider setul de date msurate x-y, i se dorete aproximarea datelor cu o curb polinomial de gradul III, atunci secvena MATLAB urmtoare, determin afiarea grafic a rezultatelor aproximrii:

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


Reprezentarea grafic a acestei aproximri este redat n figur:

221

Valoare aproximat X2aproximat=4,5 Y2aproximat=385.9449

Valoare msurat x=2 y=43,1

EROAREA APROXIMRII
Orice aproximare numeric implic i existena erorilor. O discuie privind erorile de aproximare trebuie sa nceap avand ca suport asumarea presupunerii c erorile apar doar n rspunsuri, niciodat n setul de date previzionate, respectiv presupunerea c erorile au o distribuie normal (distribuie Gauss), fa de zero (ca medie) i cu variana constant (de valoare 2 ). Presupunerea ca distribuia erorilor s fie normal, trebuie s fie valid ntruct aproximarea, prin orice metod, este adecvat doar n cazul unei distribuii normale a cantitilor aproximate. Aceast presupunere are la baz faptul c probabilitatea existenei unor valori extreme n setul de date este mic i metoda de aproximare prin cele mai mici ptrate are aplicabilitate valid. Media zero a erorilor nseamn c acestea au o apariie 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 n ingineria mecanic

Variana constant arat faptul c erorile au o mprtiere constatnt. Datele cu aceeai varian se numesc date de aceeai calitate. Presupunerea c variana datelor este constant nu implic i o ponderare n sensul aproximrii celor mai mici ptrate. Aceasta se poate observa i din procedura de aproximare, unde se presupune c exist diferite nivele ale ponderilor, deci caliti diferite ale datelor. Din acest motiv se utilizeaz ponderile n metoda celor mai mici ptrate, pentru a ajusta influena fiecrei valori din setul de date i a corecta coeficienii aproximrii. Pentru determinarea varianei exist dou relaii analitice de calcul:
2 =

1 n

(x i x )2 , sau 2 =
i =1

1 n1

(x i x )2 , unde
i =1

x=

ni . i =1

n MATLAB eroarea de aproximare este determinat cu funcia specific

erf(x). Matematic aceast funcie este dat de relaia: erf ( x ) = 2 ( x 2 ) 1 , n care ( x ) este o funcional ce determin analitic distribuia normal standard dup o relaie empiric: 1 2
( x )2

( x, , ) =

2 2

n care simbolurile utilizate au semnificaia definit n cazul aproximrii i regresiei polinomiale, respectiv n cazul metodei celor mai mici ptrate. Funcia MATLAB erf(x) determin valoarea erorii de aproximare a funciei model, pentru fiecare valoare a elementelor matricei x. Aceast eroare este determinat prin integrala definit a distribuiei normale, cnd media normat este setat la zero, iar valoarea varianei este 1/2:

erf ( x ) =

e t dt
0

Pentru a se demonstra limitele procedeului de aproximare, printr-o funcie polinomial, se va prezenta un exemplu, ilustrativ. Se genereaz un vector, uniform spaiat, x=0:0.1:2.5, i se determin, cu funcia MATLAB erf(), distribuia Gauss a erorilor x = (0: 0.1:2.5)'; y = erf(x);

MATLAB n ingineria mecanic

223

Coeficienii polinomului de aproximare, de gradul VI, sunt determinai cu funcia 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 ct de apropiat este ajustarea polinomial, se va evalua polinomul p(x) n punctele vectorului x, i se afieaz 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 n ingineria mecanic

Se poate observa c, pe acest interval, ajustarea polinomial este relativ corespunztoare, dar, dac se extinde intervalul (vectorul x devine x=0:0.1:5), reprezentarea grafic arat ca aproximarea devine neconform, aceasta deteriorndu-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 ctorva manevre simple i intuitive, schimbrile intervenite n aproximarea prin polinoame de diferite grade. Aceast facilitate ofer un instrument deosebit n analiza erorilor i curbelor de aproximare polinomiale, fiind uor de observat care model polinomial este cel mai adecvat n aproximarea pe un anumit interval finit. Interfaa grafic polytool realizeaz aproximarea ntre un vector coloan x i corespondentul y al acestuia. Interfaa se activeaz prin introducerea de la

MATLAB n ingineria mecanic

225

tastatur a vectorilor int, x i y, respectiv a funciei 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 afiate 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. Presupunnd vectorul x = (0: 0.1: 7)', i valorile funciei y=erf(x), se va realiza aproximarea interactiv cu instruciunile:

x = (0: 0.1:7)'; y = erf(x); polytool(x,y,6)


obinndu-se imaginea:

Aceeai figur transpus i rotit 3D:

226

MATLAB n ingineria mecanic

Exist i alte funcii MATLAB specifice, pentru aproximare interactiv, precum aoctool care este sinonim funciei polytool, obiectivul principal al acesteia fiind, ns, analiza covarianei modelului de aproximare.

MATLAB n ingineria mecanic

227

CAPITOLUL VII
AJUSTAREA I APROXIMAREA DATELOR
NOIUNI GENERALE
Observaiile experimentale sunt, n general, seturi de date discrete care, pot fi organizate ca vectori coloan sau matrici, n care, liniile reprezint rezultatele i observaiile la un moment dat. De exemplu, dac se presupune c, n anumite momente ale zilei s-a determinat frecvena traficului de autovehicule, n trei puncte diferite, ale unei localiti, aceste date ar putea fi stocate tabelar. Datele stocate n tabelul alturat 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 7 14 11 43 38 61 75 38 28 12 18 18 17 19 32 42 57 44 114 35 11 13 10 11 13 17 13 51 46 132 135 88 36 12 27 19 15 36 47 65 66 55 145 58 12 9 9 9 11 20 9 69 76 186 180 115 55 14 30 29 18 48 10 92 151 90 257 68 15 15 7 Ora nregistrrii 01 h 00 min 02 h 00 min 03 h 00 min 04 h 00 min 05 h 00 min 06 h 00 min 07 h 00 min 08 h 00 min 09 h 00 min 10 h 00 min 11 h 00 min 12 h 00 min 13 h 00 min 14 h 00 min 15 h 00 min 16 h 00 min 17 h 00 min 18 h 00 min 19 h 00 min 20 h 00 min 21 h 00 min 22 h 00 min 23 h 00 min 24 h 00 min Pct. A 11 7 14 11 43 38 61 75 38 28 12 18 18 17 19 32 42 57 44 114 35 11 13 10 Pct. B 11 13 17 13 51 46 132 135 88 36 12 27 19 15 36 47 65 66 55 145 58 12 9 9 Pct. C 9 11 20 9 69 76 186 180 115 55 14 30 29 18 48 10 92 151 90 257 68 15 15 7

228

MATLAB n ingineria mecanic

Matricea trafic, a observaiilor zilnice, poate fi utilizat n analize i prelucrri matematice ulterioare. n acest sens, presupunnd necesar reprezentarea grafic, pentru vizualizarea traficului, la un moment dat (considernd reperele orare date de vectorul t=1:24), se folosete urmtoarea 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, att n analiza rezultatelor experimentale, ct i pentru emiterea unor concluzii, ca datele obinute s fie aproximate prin curbe polinomiale, exponeniale sau de alt natur.

MATLAB n ingineria mecanic


UTILIZAREA GUI (GRAPHICAL USER INTERFACE- INTERFAA GRAFIC UTILIZATOR) PENTRU AJUSTAREA DATELOR

229

Cea mai rapid i eficient procedur de ajustare, aproximare, interpolare i extrapolare a datelor experimentale, este Interfaa Grafic Utilizator (Graphical User Interface-GUI ), disponibil n MATLAB, versiunile superioare (Release 12 sau 13). Informaii complete, privind aceast procedur, se regsesc n documentaia de ajutor din meniul Help opiunea Full Product Family Help. Accesarea interfeei grafice (pentru simplificarea exprimrii 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 interfeei grafice Curve Fitting Tool (Instrument de ajustare a curbelor):

Dac n fereastra de comand a MATLAB, exista vectori coloan de aceeai dimensiune, acetia vor fi selectai automat de editorul de ajustare i stocai n vederea prelucrrii. Altfel, se impune introducerea sau importarea datelor n vectori coloan.

230

MATLAB n ingineria mecanic

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 interfeei grafice a ajustrii: 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 cnd 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 funcie de altul, de exemplu, prin accesarea butonului Create Data Set. Se nchide sesiunea acestei interfee grafice cu butonul Close. 2. -Din interfaa grafic Curve Fitting Tool se acceseaz butonul Fitting... al crui efect este deschiderea editorului de ajustare compus din dou pri distincte: editorul propriu-zis, Fit Editor, i tabloul ajustrilor, Table of Fits.
Editorul ajustrii , Fit Editor, permite aciuni pentru: Specificarea numelui ajustrii curente, setarea datelor curente i stabilirea regulii de excludere; Explorarea diferitelor metode de ajustare ale seturilor de date curente, folosind o bibliotec de ecuaii, metode de ajustare spline i interpolani; Suprareglarea opiunilor implicite de ajustare (cum ar fi metoda identificrii coeficienilor); Compararea rezultatelor ajustrii;

MATLAB n ingineria mecanic

231

Tabloul ajustrilor , Table of Fits, permite Monitorizarea datelor i ajustrilor anterioare; Afiarea unui sumar al rezultatelor ajustrii; Salvarea sau anularea rezultatelor ajustrii. Se acceseaz butonul New fit care aloc automat un nume implicit ajustriii curente. Presupunem c aceasta se va numi ajustarea_1, iar cu urmtoarea opiune, Data set, se definete setul de date (presupunem c acesta este setul t vs. y, adic vectorul t, n funcie 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 funcie de t), i acesta va fi numit n continuare ajustarea_2. Se alege aproximarea polinomial, iar n urmtoarea seciune se va selecta ajustarea polinomial cuadratic (printr-un

232

MATLAB n ingineria mecanic

polinom de gradul doi: f(x) = p1*x^2 + p2*x + p3). Se valideaz opiunea Immediate apply, ceea ce va avea drept efect afiarea rezultatelor n caseta Results. n paralel MATLAB prelucreaz datele n funcie de opiunile setate i seleciile operate, fiind afiate, n fereastra interfeei grafice Curve Fitting Tool reprezentrile grafice ale celor dou seturi de date, att cele discrete ct i cele previzionate, ajustate.

3. Din meniul View al interfeei grafice Curve Fitting Tool se selecteaz opiunea Residuals-Line Plot:

MATLAB n ingineria mecanic

233

care permite, i realizeaz, reprezentarea grafic a reziduurilor ajustrii, fiind dat o msur real a mrimii 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 funcie de mrimea erorilor de calcul i a distanei fa de valorile discrete efective, se poate lua decizia unei ajustri ulterioare, pentru creterea calitii aproximrii, prin metode i tehnici multiple.

DETERMINARTEA CELEI MAI BUNE AJUSTRI


Pentru a determina cea mai bun ajustare sau aproximare trebuie avute n vedere att rezultatele grafice ct 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 cuprini 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 ajustri folosind expresii polinomiale de diferite grade (2, 4 i 7) respectiv o ajustare exponenial de un singur termen, a*exp(b*x) (adic

a e bx ), i s-au obinut reprezentrile grafice (ale rezultatelor ajustrii, respectiv ale reziduurilor), din figur:
Din aceste reprezentri se poate deduce c este dificil a decide care dintre polinoameofer cele mai bune rezultate pentru aproximare sau ajustare, ntruct diferenele

234

MATLAB n ingineria mecanic

reziduale sunt nesemnificative, iar, prin comparaie, ajustarea exponenial cu un singur termen este evident neacoperitoare, datorit gradului mare de incompatibilitate i concordan cu datele discrete.Setul de date ajustate se poate vizualiza accesnd butonul Data..., caseta Data sets, opiunea View:

n continuare, se folosete interfaa grafic Curve Fitting Tool, butonul Plotting... pentru a elimina metoda de ajustare printr-o funcie exponenial, invalidnd caseta corespunztoare, 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, opiunea 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 corespunztoare 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, demonstrnd neconcordana evident cu datele extrapolate prin celelalte expresii polinomiale. Acest exemplu ilustreaz, foarte clar, c alegerea unei metode de extrapolare trebuie fcut cu mare atenie, n funcie de mai muli factori care ar putea influena asupra corectitudinii rezultatelor.

236

MATLAB n ingineria mecanic

EXAMINAREA REZULTATELOR NUMERICE


Examinarea reprezentrilor grafice ale aproximrilor, 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 propriuzis. MATLAB ofer dou tipuri de rezultate numerice, afiate in interfaa grafic Curve Fitting Tool i >Fitting ->Results Table of Fits: concordana rezultatelor aproximrii respectiv intervalul de confiden. Concordana rezultatelor arat ct de bine sunt aproximate datele, iar intervalul de confiden reflect precizia rezultatelor. Pentru a evidenia rezultatele numerice ale ajustrii datelor, se consider ajustarea polinomial de grad 2, 3, 4, 5 i 6, respectiv aproximarea exponenial cu un singur termen, a datelor coninute n vectorul populatia_USA, relativ la vectorul anii_de_referinta, pentru care s-au obinut rezultatele numerice din figura alturat: Parametrii numerici ai ajustrii se pot seta din interfaa 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 aprea n tabelul Table of Fits. Opiunea SSE (Sum of Squares Due to Error), este o marime statistic ce se refer la mrimea deviaiei valorii de rspuns a ajustrii, fa de valoarea dat, calculat ca suma ptratelor erorilor n funcie de mrimea reziduurilor. Acest parametru este definit prin ecuaia SSE =
i (y i y i )2 , n i =1
n

care i reprezint mrimea reziduului (determinate, i afiate, n MATLAB, cu opiunea Residuals din meniul View):

238

MATLAB n ingineria mecanic

iar yi i y i sunt datele aproximate respectiv previzionate. Valorile reziduale se pot 1 determina dac se cunoate variana datelor ( ), cu relaia i = 2 , sau se poate
(y i y i ) , dac nu se cunoate variana i =1 datelor, n care y i reprezint valoare medie evaluat statistic. R-square reprezint raportul dintre suma ptratelor regresiilor (sum of squares of the regression -SSR) i suma total a ptratelor (total sum of squares 1 aproxima cu relaia i = n

-SST): R square =

i (y i y i )2 i 1

i (y i y i ) i 1
=

= n

. R-square poate lua valori cuprinse ntre 0

i 1, o valoare mai aproape de 1 are semnificaia unei bune aproximri. De exemplu, o valoare R-square=0,99871 (n cazul ajustrii polinomiale de gradul II) arat c exist o variaie de pn la 99,87 % fa de valoarea medie calculat. Parametrul DFE (Degrees of Freedom Adjusted R-Square) folosete parametrul R-square, definit anterior, i ajusteaz aceast valoare pe baza gradelor de libertate ale reziduurilor. Gradele de libertate ale reziduurilor se reprezint diferena dintre numrul valorilor de raspuns i numrul coeficienilor de aproximare: v=n-m. n aceast relaie, v reprezint numrul datelor independente din totalul de n puncte necesare calculrii sumei de ptrate, iar m este numrul de coeficieni ai ecuaiei de aproximare. Modelul matematic, se consider ca fiind un bun indicator statistic al calitii aproximrii cnd sunt adugai coeficieni suplimentari n ecuaia aproximrii. Parametrul RMSE (Root Mean Squared Error) este cunoscut ca eroarea standard a aproximrii i ca eroarea standard a regresiilor. Se determin cu

relaia: RMSE =

SSE = v

(y
i i =1

y i )2
. O valoare apropiat de 0 nseamn

o bun aproximare. Validarea parametrului #Coeff are ca efect afiarea numrului de coeficieni folosii pentru aproximarea datelor. Intervalul de confiden (de siguran) reprezint limitele, inferioar respectiv superioar, ale coeficienilor ecuaiei aproximrii. Formatul afiat 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 interfaa Curve Fitting Tool meniul View, opiunea Confidence level. Limitele de siguran pot fi calculate i afiate grafic din interfaa Curve Fitting Tool meniul View, opiunea Prediction Bounds, sau cu opiunea Analysis din interfaa Curve Fitting Tool.

SALVAREA REZULTATELOR AJUSTRII


Din interfaa Fitting, accesnd butonul Save to workspace..., se salveaz ntregul proces de ajustare, prin validarea celor trei opiuni:

prima opiune salveaz ajustarea ca obiect MATLAB

240

MATLAB n ingineria mecanic

a doua opiune salveaz, concordana ajustrii:

ntr-o

structur

multidimensional,

cea de-a treia opiune salveaz rezultatele ajustrii, oferind informaii asupra parametrilor numerici ai ajustrii

MATLAB n ingineria mecanic


ANALIZA REZULTATELOR AJUSTRII

241

Din interfaa Curve Fitting Tool, butonul Analysis se pot realiza analize ale parametrilor ajustrii, n funcie de datele originale. Se pot interpola, extrapola date, se pot diferenia i integra curbele de variaie ale ajustrii, ntre anumite limite. Pentru aceasta, se scceseaz vectorul Xi dorit, din cmpul Analyze at Xi, se selecteaz caseta aferent evalurii Evaluate fit at Xi, pentru afiarea 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 identificrii datelor ajustrii folosind ajustarea polinomial, pentru populaia corespunztoare anului 2025, se va modifica ultima valoare din cmpul Analyze at Xi, la valoarea 2025:

242

MATLAB n ingineria mecanic

Rezultatele extrapolrii se pot salva, similar procesului de ajustare propriuzis

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 crui coeficieni 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


Urmnd procedura enunat, se realizeaz ajustarea cu cele trei curbe polinomiale. Analiza rezultatelor permite, din interfaa Curve Fitting Analysis, manevre ale reprezentrii grafice, utiliznd facilitile de prelucrare i animaie a figurilor, permise de MATLAB Release 12 i superioare acesteia:

MATLAB n ingineria mecanic

243

244

MATLAB n ingineria mecanic

Ex.:
Se va ajusta o curb de variaie 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 msurate experimental, pentru coeficientul de dilatare, pentru aceste temperaturi, stocate n vectorul coloan coef_CU. Se va realiza o aproximare raional, cu o funcie avnd atat numrtorul ct i numitorul, polinoame de gradul doi. Dup ce sunt introduse datele, n fereastra de comand (prin una din opiunile posibile:de la tastatur, import, ncarcare etc.), se activeaz procesul de ajustare, cu funcia cftool, apoi se seteaz parametrii de aproximare din interfaa Fitting..., selectnd, din cmpul Type of fit, opiunea Rational. Apoi, se nominalizeaz tipul polinomului de la numrtor (Numerator), respectiv de la numitorul expresiei raionale (Denominator):

MATLAB n ingineria mecanic

245

Folosind butonul Table options..., se valideaz parametrii numerici ai ajustrii, parametri care vor fi cuprini n tabelul Table of Fits. Afiarea rezultatelor i reziduurilor ajustrii se realizeaz selectnd opiunea Residuals-Plot line, din meniul View al interfeei grafice Curve Fitting Tool:

Este uor de observat c sunt zone n care aproximarea nu este acoperitoare: lipsesc parametrii i rezultatele ajustrii:

246

MATLAB n ingineria mecanic

Se ncearc, n consecin o alt ajustare, de tipul raional polinomial cu polinoame de gradul III, att la numrtor ct i la numitor:

Acest tip de aproximare, se observ din interfaa Fit Editor cmpul Results, este neconvergent, ceea ce anuleaz posibilitatea alegerii unei astfel de ajustri pentru acest set de date, fiind, astfel necesar o alt ajustare.

MATLAB n ingineria mecanic

247

Modificarea expresiei raionale de ajustare, astfel nct polinomul de la numrtor s fie de gradul III, iar cel de la numitor, de gradul II, are ca rezultat o aproximare mult mbuntit, reziduurile fiind aleatoriu distribuite fa de valoarea zero, ceea ce nseamn o ajustare realist:

n cmpul Results al interfeei Fit Editor, sunt prezentai parametrii ajustrii, i coeficienii modelului matematic al acesteia. Interfaa Curve Fitting Tool, prezint, n cmpul Residuals, dispersia cvasi-uniform a reziduurilor, n raport cu linia zero. Acest aspect al dispersiei este o msur a unei aproximri corecte i valabil pentru acest set de date. Aprecierea unei ajustri este relativ dificil de realizat pentru un numr mare de date pentru un set aleatoriu de curbe de ajustare. Astfel, n acest proces este foarte posibil s apar i rutina examinrii concordanei, respectiv autosuficiena utilizatorului. Din acest motiv, dup evaluarea ajustrii prin examinarea graficelor rezultate, foarte important este evaluarea numeric a ajustrii, ceea ce presupune: evaluarea reziduurilor; evaluarea concordanei; aprecierea confidenei rezultatelor i previzionarea limitelor de varian.

248

MATLAB n ingineria mecanic

Aceste aspecte sunt determinante n aprecierea calitii unei ajustri numerice corecte i conforme, n proporie determinant, cu datele msurate i ajustate. Aceste operaii pot fi grupate n dou categorii: numerice i grafice. n timp ce reziduurile i predicia limitelor de varian sunt msuri grafice, concordana, respectiv predicia limitelor de varian sunt determinri numerice. Metodele grafice de apreciere a ajustrii sunt mult mai expresive i uor de evaluat calitativ, nefiind necesar o pregtire deosebit n acest sens, n timp ce analiza numeric a ajustrii este mai puin comprehensiv datorit faptului c valorile numerice pot include multe informaii greu de difereniat n cazuri specifice. Este evident c sunt posibile multe situaii n care ambele tipuri de metode s fie folosite pentru evaluarea aceleiai ajustri. Adoptarea uneia dintre metode n defavoarea alteia este determinatn, primul rnd, de nelegerea procesului de ajustare, apoi de modelul parametric de ajustare ales. Semnificaia fizic a coeficienilor unui anume model matematic este esenial a fi corect neleas, fiind nevoie, n plus, de evaluarea prin mai multe metode i modele de ajustare, pentru aflarea celei mai apropiate soluii. Anterior, a fost prezentat metodica afirii reziduurilor unei ajustri, respectiv a fost prezentat modul de calcul al mai multor coeficieni i parametri ai ajustrii. Printre acetia, unul dintre cei mai importani pai ai evalurii unei ajustri, este calculul limitelor de varian. Aceste limite sunt calculate pentru dou variante: predicia simultan, respectiv predicia nesimultan. Predicia simultan se refer la confidena tuturor rezultatelor ajustate, n timp ce confidena unui anume parametru genereaz o predicie nesimultan. Evaluarea metodelor de ajustare, prin estimarea, calitativ sau cantitativ, a erorilor de aproximare i prin cuantizarea numeric, sau nu, a reziduurilor, este, aadar, o operaiune care implic o bun pregtire a ntregului proces de aproximare sau ajustare. Nu pot exista valori sau coeficieni de corecie pentru estimarea erorilor de ajustare sau aproximare. Aceste limite sunt definite, sau prescrise de ctre utilizator, i depind, n cea mai mare msur de ceea ce se urmrete prin ntregul proces de aproximare sau ajustare. Ne-existnd reete pentru acest tip de operaiuni, se impune, de la sine, o concluzie: pregtirea unei baze solide n domeniul ajustrii numerice, prin orice metod, se constituie ca fiind cheia unor rezultate eficiente i corecte. Not: n Anex este prezentat un fiier script, demonstrativ, care surprinde o multitudine de funcii MATLAB, i care realizeaz estimarea parametrilor tehnologici i de transformare, ai legii de deformare superplastic.

MATLAB n ingineria mecanic


BIBLIOGRAFIE
[1] [2] [3]

249

[4] [5] [6] [7] [8] [9] [10]

[11]

[12] [13] [14]

BEJU, I., et al.. -Tehnici de calcul tensorial euclidian cu aplicaii, Editura Tehnic, Bucureti, 1977 . BEU, T. A. Calcul numeric n C, Ed. Albastr, Cluj-Napoca, 1999. 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. BROWN, E.E.& col.- Superalloys Processing 2nd. Int.Conf. on Superalloys, Publ.AIME, 1972, pag. L1-L12. BUDIANSKY, B. & col.- Mechanics of Solids, Ed. H.G.Hopkins & M.J.Sewell, publ. Pergamon Press Oxford, 1982, pag. 13. DODESCU, GH. -Metode numerice n algebr, Editura Tehnic, Bucureti, 1979 . FORRAY, M.J. - Calculul variaional n tiin i tehnic, Editura Tehnic, Bucureti, 1975 . GHINEA, M. -MATLAB- Calcul numeric, grafic, aplicaii, Editura Teora, Bucureti, 1997. GREBENIAN, G. Metod de optimizare numeric a parametrilor deformrii superplastice, Sesiunea anual de comunicri tiinifice, Oradea, 1999 GREBENIAN, G. Program dezvoltat n mediul MATLAB 5.3, pentru determinarea analitic a parametrilor tehnologici la deformarea superplastic (partea I-Consideraii teoretice), Simpozion Materiale avansate, tratamente termice i calitatea managementului, Editura Politehnica, Timioara, 2001. GREBENIAN, G. - Program dezvoltat n mediul MATLAB 5.3, pentru determinarea analitic a parametrilor tehnologici la deformarea superplastic (partea II-Aplicaie), Simpozion Materiale avansate, tratamente termice i calitatea managementului, Editura Politehnica, Timioara, 2001. GREBENIAN, G. Parametrii tehnologici ai deformrii superplasticeprogram de calcul n MATLAB-studiu de caz, Sesiunea anual de comunicri tiinifice, Oradea, 2002. HAHN, B.D. Essential MATLAB for Scientists and Engineers, Ed. By

Butterworth-Heinemann, Cape Town, 2002.


KOBAYASHI, S. -Metal Forming and the Finite Element Method, Oxford Universitz Press, New York, 1989.

250

MATLAB n ingineria mecanic

[15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27]

LEWIS, P.E.,.a. - The Finite element Method. Principles and Applications, Addison Wesley Publishing Company, London, 1991 . LUNGU, N. - Matematici cu aplicaii tehnice, Editura Tehnic, Bucureti,1990 . MARCIUK, G.I Metode de analiz numeric, Editura Academiei Romne, Bucureti, 1983, trad. din lb. rus . MARINESCU, GH. et al. Probleme de analiz numeric, Ed. Didactic i Pedagogic, Bucureti, i978. MOSZYNSKI, K.-Metode numerice de rezolvare a ecuaiilor difereniale ordinare, Ed. Tehnic, Bucureti, 1973. MUNTEANU, M. - Metoda elementului finit, Reprografia Universitii Transilvania , Braov,1997. PASCARIU, I -Elemente finite. Concepte, aplcaii, Editura Militar,Bucureti, 1985. POTERAU, V.F.,.a..-Metode numerice n elasticitate i plasticitate,vol. I, Editura Academiei Romne, Bucureti, 1993 . OLARIU, V.,.a.. - Modelare numeric cu elemente finite, Editura Tehnic, Bucureti, 1986 . SALVADORI, M.-Metode numerice n algebr, Editura Tehnic, Bucureti, 1972 SAWCZUK, A.,.a. - Teoria plasticitii, Editura Tehnic, Bucureti, 1970, trad. de prof. dr. ing. N. Cristescu . SIMIONESCU, I. et al.-Metode numerice n tehnic, Ed. Tehnic, Bucureti, 1995. VOINEA, R.,.a. -Introducere n mecanica soliduli cu aplicaii n inginerie, Editura Academiei Romne, Bucureti, 1989 .

MATLAB n ingineria mecanic

251

ANEX
PROGRAM PENTRU DETERMINAREAPARAMETRILOR DE INTRARE AI SIMULRII PROCESULUI DE DEFORMARE SUPERPLASTIC
Programul este astfel realizat nct s nu fie necesare comenzi suplimentare pentru executarea ncrcrii datelor experimentale, pentru plotarea graficelor pe baza calculelor, respectiv pentru executarea unor opiuni. Comanda programului poate fi realizat att din fereastra de comand(Command Window) ct i prin intermediul casetelor de dialog(msgdlg sau msgbox) sau al butoanelor. Programul determin prin calcul direct parametrii tehnologici ai deformrii superplastice pentru diferite situaii impuse, fiind organizat astfel: -liniile de ajutor i informaii sunt de culoare verde; -irurile de caractere sunt marcate cu culoarea roie; -buclele if- else- end sau buclele for- end, sunt marcate cu culoare albastr, ca de altfel toate instruciunile 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 coninnd valorile consistenei mecanice;
k=[ 2780 1810 570 60 2410 3550 2310 870 90 3070 4005 2780 1180 140 3680 4530 3140 1510 210 4410 5110 3770 1810 350 4980 5780 4005 2180 540 5620 6140 4260 2610 730 5970 6730 ; 4530 ; 2950 ; 1420 ; 6740 ;

252

MATLAB n ingineria mecanic

1160 200 70 390 180 110 55 temp=[ 299 333 393 443 299 333 393 443 299 341 363 393

1670 290 100 530 250 170 85 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0

2130 390 150 710 320 220 120 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0

2720 560 260 970 470 300 170 299 333 393 443 299 333 393 443 299 341 363 393 299 333 393 443 299 333 393 443 299 341 363 393

3260 860 420 1490 710 470 250 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5; 7.5; 7.5; 5.5; 5.5; 5.5; 5.5; 2.0; 2.0; 2.0; 2.0]; ; ; ; ; ; ; ; ; ; ; ; ];

3680 1160 560 2140 970 630 390

4150 1400 860 2910 1400 910 560

4690 ; 1670 ; 1160 ; 3710 ; 2020 ; 1320 ; 860 ];

%matricea coninnd valorile temperaturii

%matricea continand dimensiunea grauntilor;


mar_gr=[ 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0 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 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.0000318 0.0000328 0.0000318 0.0000318 0.0000318 0.0000793 0.0000299 0.0000318 0.0000318 0.0000309 m=[ 0.31 0.24 0.6 0.58 0.31 0.22 0.28 0.44 0.58 0.27 0.000077 0.000077 0.0000793 0.0000793 0.0000746 0.0000746 0.000155 0.0000746 0.000077 0.000077 0.0000746 0.19 0.25 0.37 0.6 0.24 0.000155 0.000155 0.000155 0.000155 0.000155 0.000146 0.000285 0.000137 0.000146 0.000146 0.000146 0.17 0.21 0.31 0.62 0.21 0.000285 0.000285 0.000285 0.000285 0.000303 0.000268 0.000711 0.000277 0.000285 0.000285 0.000268 0.15 0.14 0.26 0.61 0.017 0.000669 0.000669 0.000711 0.000711 0.000711 0.000649 0.00139 0.000629 0.00069 0.00069 0.000669 0.13 0.11 0.23 0.59 0.14 0.00131 0.00131 0.00139 0.00139 0.00139 0.00116 0.00272 0.00131 0.00135 0.00135 0.00123 0.11 0.08 0.2 0.54 0.12 0.00256 0.00256 0.00256 0.00256 0.00256 0.00226 0.00637 0.00233 0.00248 0.00248 0.0024 0.08; 0.07; 0.15; 0.37; 0.1; 0.00637 ; 0.00637 ; 0.00637 ; 0.0000947; 0.00599 ; 0.00499 ; 0.0117 ; 0.0047 ; 0.00564 ; 0.00547 ; 0.00547 ];

%matricea coeficientilor de sensibilitate a vitezei de deformare;

MATLAB n ingineria mecanic


0.5 0.26 0.45 0.29 0.37 0.44 0.45 0.4 0.49 0.58 0.41 0.43 0.43 0.51 0.36 0.65 0.63 0.47 0.46 0.45 0.52 0.29 0.54 0.62 0.5 0.49 0.47 0.53 0.21 0.46 0.58 0.51 0.51 0.5 0.53 27.613674 19.167544 8.135864 0.965272 25.372864 14.685924 2.688972 1.03422 4.895308 2.206336 1.516856 0.827376 0.17 0.39 0.53 0.48 0.51 0.52 0.55 31.233444 21.649672 10.411148 1.447908 30.406068 18.753856 3.861088 1.792648 6.687956 3.240556 2.06844 1.172116 0.15 0.3 0.46 0.44 0.5 0.52 0.57 0.13; 0.22; 0.38; 0.37; 0.48; 0.51; 0.59]; 35.232428 25.993396 12.479588 2.41318 34.336104 22.477048 5.929528 2.895816 10.273252 4.895308 3.240556 1.7237 39.851944 27.613674 15.030664 3.723192 38.748776 25.372864 7.997968 3.861088 14.754872 6.687956 4.343724 2.688972

253

%matricea rezistenelor la deformare;


sigma=[ 19.167544 24.47654 42.334072 46.402004; 12.479588 15.926988 29.371848 31.233444; 3.930036 5.998476 17.995428 20.33966; 0.413688 0.620532 5.033204 9.790616; 16.616468 21.167036 41.161956 46.470952; 7.997968 11.514316 28.61342 32.336612; 1.37896 1.999492 9.65272 11.514316; 0.482636 0.68948 5.929528 7.997968; 2.688972 3.654244 20.063868 25.579708; 1.241064 1.7237 9.65272 13.927496; 0.758428 1.172116 6.274268 9.101136; 0.379214 0.586058 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 n ingineria mecanic

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!','!!! NUARE !!!') CONTI

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


subplot(2,3,6);plot(k/1000000,'k'); %set(title('CONSISTENTA [N/mm^2]'),'color','k') legend('consistenta',1)

255

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 n ingineria mecanic

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 n ingineria mecanic

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


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

259

260

MATLAB n ingineria mecanic

eps11 = eps(81:88); m11 = m(81:88); sigma11 = sigma(81:88); k11 = k(81:88); temp12 = temp(89:96); mar_gr12 = mar_gr(89:96); eps12 = eps(89:96); m12 = m(89:96); sigma12 = sigma(89:96); k12 = k(89:96); % Cu majuscule se vor nota valorile calculate ale lui 'm' si 'k' prin metoda numerica conditie = 1; pas = 0.001; eroare = 0.000001; expresie = 0; M = 0; i = 0; % 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


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;

261

262

MATLAB n ingineria mecanic

s10 = sum(eps10.^(2*M)); s20 = sum((eps10.^M).*sigma10.*log(eps10)); s30 = sum((eps10.^M).*sigma10); s40 = sum((eps10.^(2.*M)).*sigma10.*log(eps10)); expresie = s10*s20-s30*s40; s111 = sum(eps11.^(2*M)); s211 = sum((eps11.^M).*sigma11.*log(eps11)); s311 = sum((eps11.^M).*sigma11); s411 = sum((eps11.^(2.*M)).*sigma11.*log(eps11)); expresie = s111*s211-s311*s411; s112 = sum(eps12.^(2*M)); s212 = sum((eps12.^M).*sigma12.*log(eps12)); s312 = sum((eps12.^M).*sigma12); s412 = sum((eps12.^(2.*M)).*sigma12.*log(eps12)); xpresie = s112*s212-s312*s412; 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


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

263

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 n ingineria mecanic

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


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

265

disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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 n ingineria mecanic

disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left');

MATLAB n ingineria mecanic


pause

267

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 n ingineria mecanic

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 n ingineria mecanic

disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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 n ingineria mecanic

disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); 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 ingineria mecanic

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


disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') pause

275

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 n ingineria mecanic

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


disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)')

277

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 n ingineria mecanic

if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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 n ingineria mecanic

pause subplot(2,1,1) plot(eps3,sigma3,'b') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta')

MATLAB n ingineria mecanic


end

281

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 n ingineria mecanic

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


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

283

disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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 n ingineria mecanic

disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); 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 ingineria mecanic

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 n ingineria mecanic

disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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


if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...

289

'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 n ingineria mecanic

disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('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 n ingineria mecanic

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