+ All Categories
Home > Documents > MATLAB IN MECANICA

MATLAB IN MECANICA

Date post: 08-Aug-2015
Category:
Upload: nicu-dan-pop
View: 260 times
Download: 22 times
Share this document with a friend
Description:
MATLAB folosit pentru inginerie mecanica
290
CAPITOLUL I INTRODUCERE ÎN MATLAB MATLAB este un mediu de programare şi calcul tehnic ce însumează calculul, vizualizarea şi programarea într-un mediu compact, unde problemele şi soluţiile acestora sunt exprimate folosind notaţii matematice familiare. Utilizarea acestui mediu este frecventă în domeniile: Matematică şi calcule matematice; Dezvoltarea algoritmilor de calcul şi programare; Modelare, simulare şi prototipare; Analiza, studiul şi vizualizarea datelor; Diagrame şi reprezentări grafice în inginerie; Dezvoltarea soft-urilor aplicative folosind metode de creare a interfeţelor grafice interactive(GUI). MATLAB este un sistem interactiv care foloseşte, ca element definitoriu, matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix şi LABoratory. MATLAB oferă facilităţi multiple prin familiile de aplicaţii specifice numite toolbox-uri. Toolbox-urile sunt colecţii de funcţii MATLAB (fişiere “.m”) care extind utilizarea mediului MATLAB, la rezolvarea unor clase de probleme specifice. Toolbox-urile sunt utilizate intensiv în domeniile: procesarea sunetelor, sisteme de control, reţele neuronale, simulare. Mediul MATLAB se compune din cinci părţi principale: Mediul de dezvoltare-un set de facilităţi şi instrumente matematice (interfeţe grafice) cu ajutorul cărora se pot manevra fişierele şi funcţiile MATLAB. Aceste instrumente includ: desktop-ul MATLAB, Command Window (Fereastra de Comandă), un sistem de urmărire a comenzilor precum şi browser-e pentru afişarea instrucţiunilor de Help (ajutor), spaţiului de lucru; Biblioteca de funcţii MATLAB-un set de funcţii şi algoritmi de calcul (pornind de la cele mai simple, pentru calculul funcţiilor trigonometrice, de exemplu, şi până la cele mai complicate, cum ar fi cele pentru calculul transformatei Fourier); Limbajul MATLAB-un limbaj de nivel înalt, bazat pe manevrarea matricilor, cu control asupra declaraţiilor, funcţiilor, structurilor de date, intrărilor/ieşirilor şi cu facilităţi de programare orientată pe obiecte. Manevrarea graficelor - acesta reprezintă partea grafică a sistemului MATLAB. Acest sistem include comenzi pentru vizualizarea datelor bi- şi tridimensionale, de procesare a imaginilor, animaţiilor şi reprezentărilor grafice în general;
Transcript
Page 1: MATLAB IN MECANICA

CAPITOLUL I

INTRODUCERE ÎN MATLAB

MATLAB este un mediu de programare şi calcul tehnic ce însumează calculul, vizualizarea şi programarea într-un mediu compact, unde problemele şi soluţiile acestora sunt exprimate folosind notaţii matematice familiare. Utilizarea acestui mediu este frecventă în domeniile:

Matematică şi calcule matematice; Dezvoltarea algoritmilor de calcul şi programare; Modelare, simulare şi prototipare; Analiza, studiul şi vizualizarea datelor; Diagrame şi reprezentări grafice în inginerie; Dezvoltarea soft-urilor aplicative folosind metode de creare a

interfeţelor grafice interactive(GUI). MATLAB este un sistem interactiv care foloseşte, ca element definitoriu,

matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix şi LABoratory. MATLAB oferă facilităţi multiple prin familiile de aplicaţii specifice numite toolbox-uri. Toolbox-urile sunt colecţii de funcţii MATLAB (fişiere “.m”) care extind utilizarea mediului MATLAB, la rezolvarea unor clase de probleme specifice. Toolbox-urile sunt utilizate intensiv în domeniile: procesarea sunetelor, sisteme de control, reţele neuronale, simulare. Mediul MATLAB se compune din cinci părţi principale:

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

(interfeţe grafice) cu ajutorul cărora se pot manevra fişierele şi funcţiile MATLAB. Aceste instrumente includ: desktop-ul MATLAB, Command Window (Fereastra de Comandă), un sistem de urmărire a comenzilor precum şi browser-e pentru afişarea instrucţiunilor de Help (ajutor), spaţiului de lucru;

• Biblioteca de funcţii MATLAB-un set de funcţii şi algoritmi de calcul (pornind de la cele mai simple, pentru calculul funcţiilor trigonometrice, de exemplu, şi până la cele mai complicate, cum ar fi cele pentru calculul transformatei Fourier);

• Limbajul MATLAB-un limbaj de nivel înalt, bazat pe manevrarea matricilor, cu control asupra declaraţiilor, funcţiilor, structurilor de date, intrărilor/ieşirilor şi cu facilităţi de programare orientată pe obiecte.

• Manevrarea graficelor - acesta reprezintă partea grafică a sistemului MATLAB. Acest sistem include comenzi pentru vizualizarea datelor bi- şi tridimensionale, de procesare a imaginilor, animaţiilor şi reprezentărilor grafice în general;

Page 2: MATLAB IN MECANICA

MATLAB în ingineria mecanică

4

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

NOŢIUNI ELEMENTARE

Programul se lansează, în execuţie, din mediul Windows, prin selecţia pictogramei MATLAB (dublu-clic asupra icon-ului Matlab), sau, din afara mediului Windows (de exemplu, DOS), direct cu o comandă de forma:

win c:\Matlab\bin\matlab

care, accesează fişierul executabil “matlab.exe” ce se găseşte în calea “C:\MATLAB\BIN” din unitatea c:\ ( presupunând ca c:\ reprezintă unitatea de pe hard-ul sistemului de calcul, unde se găseşte instalat MATLAB).

Se vor prezenta, în continuare, noţiuni generale ale mediului de programare MATLAB 5.2, cu referiri la versiunea MATLAB 6.0.0.88 Release 12.

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

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

FEREASTRA DE COMENZI (Command Window)

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

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

Page 3: MATLAB IN MECANICA

MATLAB în ingineria mecanică

5

adică tasta [Alt] şi tasta [F])sau prin clic cu mouse – ul asupra comenzii dorite. Fiecare comandă din meniul principal furnizează un submeniu specific, în

cadrul acestuia selecţia putându-se face fie cu mouse-ul, fie cu ajutorul săgeţilor prin deplasarea zonei active, fie prin tastarea literei marcate special în fiecare subcomandă a respectivului meniu. GESTIONAREA FIŞIERELOR

Selectând comanda File din meniul principal, prin [Alt] + F, sau prin poziţionarea mouse-ului în dreptul cuvântului File, se obţine un submeniu ca cel prezentat în figura alăturată.

Meniul File conţine o suma de submeniuri, dintre care prezentăm:

• New provoacă deschiderea unui sub-submeniu, care are opţiunile: “M-file”, “Figure” şi Model. Alegerea opţiunii “M-file” va deschide o fereastră de editare a unui fişier, cu extensia “.m”, în timp ce opţiunea “Figure” deschide o fereastră grafică.

• Open … deschide o fereastră de dialog care permite selectarea şi deschiderea unui fişier.

• Open Selected analizează fişierele pentru selectare şi deschide pe cel selectat.

• Run Script…- permite rularea unui fişier script care are definită calea (Path)

• Save Workspace As… deschide o fereastră de dialog pentru a salva datele din spaţiul de lucru într-un fişier, al cărui nume trebuie precizat.

• Set Path …- deschide o casetă de dialog care permite setarea căii de acces la un anumit fişier de pe hard- disc sau de pe unităţile mobile :floppy disc sau CD ROM.

• Preferences- permite configurarea formatului numeric, alegerea tipului caracterelor, mărimea caracterelor etc.;

Page 4: MATLAB IN MECANICA

MATLAB în ingineria mecanică

6

• Print Setup… şi Print…- Comenzile de tipărire a documentului; Print şi Print Setup, apar în acelaşi meniu de gestionare a fişierelor. Comanda “Print…” permite tipărirea documentului, iar ”Print Setup…” configurează pagina, marginile, tipul de imprimantă etc.

• Exit MATLAB- comanda al cărei efect este părăsirea aplicaţiei. Comanda de părăsire a aplicaţiei (echivalentă opţiunii Exit MATLAB din meniul File) poate fi validată şi prin apăsarea simultană a tastelor [Ctrl]+ Q.

EDITAREA PROGRAMELOR

Selectând comanda Edit din meniul principal al Command Window, apare submeniul prezentat în figura alăturată.

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

Selectând comanda Options din bara de meniuri, se afişează caseta de submeniuri prezentată în figura alăturată. Submeniurile sunt:

• Numeric Format este un submeniu care permite selectarea unuia dintre formatele de afişare: Short (5 cifre) / Long (15 cifre) / Hex (hexazecimal) / Bank / Plus (+, - şi blanc) / Short e (5 cifre + exponenţiala) / Long e (15 cifre + exponenţiala) / Rational (fracţii), precum şi a distanţelor dintre rândurile succesive: Loose (distanţat)/ Compact.

Page 5: MATLAB IN MECANICA

MATLAB în ingineria mecanică

7

• Turn Echo este un comutator (on/off) care permite afişarea liniilor programului MATLAB, în timpul rulării acestuia.

• Enable Background Process este un comutator (on/off) care permite rularea programelor MATLAB, în background, în timp ce calculatorul poate efectua şi alte operaţii.

• Command Window Font…- deschide o fereastră de dialog pentru selectarea fonturilor (tip, mărime şi culoare) care se vor utiliza în fereastra de comandă curentă a sesiunii de lucru MATLAB.

• Uicontrols Font - permite setarea fonturilor (tip, mărime şi culoare) pentru interfeţe grafice, butoane etc.

• Editor Preference… - selectează editorul de texte cu care se vor scrie programele MATLAB, implicit este NOTEPAD.EXE.

SELECTAREA FERESTRELOR CURENTE DE LUCRU

Comanda Windows, din bara de meniuri, afişează submeniul prezentat în figura alăturată.

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

Comanda Help din meniul principal afişează submeniul prezentat în figura alăturată. Submeniurile acestui meniu sunt:

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

Page 6: MATLAB IN MECANICA

MATLAB în ingineria mecanică

8

Index furnizează o listă cu subdirectorii principali ai MATLAB-ului. Selectarea subdirectorului dorit afişează conţinutul acestuia şi apoi informaţii despre un anumit fişier sau funcţie. • Help Selected afişează

documentaţia Help pentru funcţia MATLAB ce a fost selectată cu mouse-ul.

• About…-afişează versiunea, licenţa etc. FEREASTRA DE REPREZENTĂRI GRAFICE ÎN MATLAB (Figure)

Fereastra grafică este o formă elevată de reprezentare a graficelor. De menţionat că pot exista mai multe ferestre grafice deschise în acelaşi timp, una fiind curentă, dar o singură fereastră de comenzi. GESTIONAREA FERESTRELOR GRAFICE

Din meniul File- submeniul

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

EDITAREA GRAFICELOR

Selectând meniul Edit din bara de meniuri a ferestrei grafice, sunt posibile câteva opţiuni pentru modificarea reprezentărilor grafice:

• Copy- copiază figura în Clipboard; • Copy Options…- copiază figura curentă în format meta sau bitmap(vezi

formatele fişierelor grafice în Windows), existând şi posibilitatea alegerii

Page 7: MATLAB IN MECANICA

MATLAB în ingineria mecanică

9

unei culori pentru fundalul (background) figurii (inversarea între alb şi negru; implicit este negru);

• Clear Figure şterge figura curentă, fără să închidă fereastra grafică. TIPURI DE DATE UTILIZATE ÎN MATLAB

DATE EXEMPLU DESCRIERE single 3*10^38 Reţele numerice cu simplă precizie. Simpla precizie necesită

spaţiu de stocare mai mic decât dubla precizie. Acest tip de date nu poate fi utilizat în operaţii matematice

double 3*10^300 5+6*i

Reţele numerice cu dublă precizie. Este cel mai util;izat tip de variabile în MATLAB.

sparse speye(5) Matrice compactă bi-dimensională cu dublă precizie. Matricile compacte stochează doar elementele nenule, necesitând mai puţină memorie.

int8, uint8, int16, uint16, int32, uint32

uint8(magic(5)) Reţele de întregi cu şi fără semn cu lungimea de 8, 16, 32 de biţi. Permit manevrarea cantităţilor întregi într-un mod eficient. Aceste date nu pot fi utilizate în operaţii matematice.

char ‘Pachet de programe’

Reţea de caractere(fiecare caracter are 16 biţi). Aceste reţele sunt numite, în general, şiruri de caractere.

cell {25 ‘Pachet’ eye(2)} Reţea celulară. Elementele celulelor pot conţine alte reţele.Celulele pot colecta date şi informaţii de factură şi mărime diferită.

structure A.ziua=12; A.culoare=’roşu’; A.matrice=magic(3);

Reţea structurală. Reţelele structurii se numesc câmpuri.Câmpurile pot conţine alte reţele. Ca şi celulele, structurile pot colecta date şi informaţii de factură şi mărime diferită.

user class inline(‘sin(x)’) Classa MATLAB. Această classa este creată de utilizator, folosind funcţii MATLAB.

java class java.awt.Frame Classa Java. Se pot utiliza appleturi Java deja existente sau se pot crea appleturi proprii.

Function handle

@humps Manipulator al funcţiei MATLAB.

FORMATUL NUMERELOR. OPERATORI ŞI EXPRESII ARITMETICE MATLAB utilizează, ca orice limbaj de programare, expresii matematice, dar, spre deosebire de majoritatea limbajelor de programare, aceste expresii, în MATLAB, sunt matrici. Expresiile MATLAB sunt de următoarele tipuri:

Variabile Numere Operatori Funcţii

Page 8: MATLAB IN MECANICA

MATLAB în ingineria mecanică

10

VARIABILE Pentru variabile, MATLAB nu solicită un, anume, tip de declarare a acestora, nici o configurare dimensională. În MATLAB, variabilele se creează automat prin declararea numelui acesteia, fiindu-i alocat un spaţiu de stocare corespunzător. De exemplu, prin atribuirea: »fun=123; variabila cu numele fun are “valoarea 123”. Această “valoare” va fi utilizată de MATLAB, pe tot parcursul sesiunii de lucru, dacă aceasta nu este schimbată printr-o nouă atribuire. Dacă, o nouă variabilă, cu acelaşi nume, este declarată, în linia de comandă, sau într-un fişier-program, atunci “vechea” valoare este înlocuită cu noua valoare. Variabilele sunt matrici. De exemplu, fun, reprezintă o matrice cu o linie şi o coloană. Numele variabilei trebuie sa înceapă, obligatoriu cu o literă, urmată de oricâte litere sau numere, dar MATLAB reţine doar primele 31 de caractere. Întrucât, MATLAB este case sensitive, acesta face distincţie între literele majuscule şi literele minuscule. De exemplu, variabila fun, este diferită de oricare dintre variabilele Fun, fUn, fuN, FUn, FuN, fUN sau FUN. Expresiile introduse de la tastatură, de către utilizator, sunt interpretate şi evaluate secvenţial, la accesarea tastei [Enter]. Expresiile pot fi: şiruri de caractere (care reprezintă, de cele mai multe ori, numele unui fişier script sau al unui fişier funcţie), instrucţiuni, funcţii dedicate (specifice limbajului MATLAB).

Instrucţiunile MATLAB sunt, de cele mai multe ori, de forma generală: » variabila=expresie [Enter]

Atenţie: simbolul “ »”, nu trebuie introdus de către utilizator, simbolul este afisat automat de MATLAB, în Command Window, acesta fiind prompterul din fereastra de lucru, Workspace.

În forma generală, a instrucţiunii: “variabila” - reprezintă numele expresiei, si poate fi o înşiruire de

caractere alfa-numerice, exceptând caracterele speciale (^,&,*,(,),+,/ etc.) cu condiţia ca primul caracter sa nu fie o cifră;

“ = “ – reprezintă semnul de atribuire (“egalitatea” dintre două expresii se reprezintă, în MATLAB, cu semnul egal dublu : “ = = “);

“ expresie “ – reprezintă instrucţiunea propriu- zisă, adică aceea care urmează a fi evaluată, după accesarea tastei [Enter]. Valoarea “ expresiei “ va fi atribuită automat “variabilei “, aceasta poate fi folosită în expresii şi funcţii, fiind memorată de MATLAB.

De asemenea, instrucţiunile pot avea şi următoarea formă, simplificată: » expresie [Enter]

Page 9: MATLAB IN MECANICA

MATLAB în ingineria mecanică

11

ceea ce permite execuţia imediată a expresiei, la accesarea tastei [Enter], MATLAB atribuind, automat, numele “ans “ valorii acestei “expresii “, ca în exemplul următor: » 1/4 [Enter] returnează rezultatul:

» ans = 0.2500 Atenţie MATLAB recunoaşte sistemul britanic de scriere a numerelor ( fracţiile zecimale se exprimă folosind ca separator caracterul punct “ . “ şi nu caracterul virgulă “,”, ca în sistemul european, continental) !

Expresiile sunt compuse din operatori sau caractere speciale, din funcţii şi cifre, respectiv expresii logice. Orice instrucţiune, scrisă în câmpul de lucru, este în mod normal încheiată cu accesarea tastei [Enter]. Dacă ultimul caracter, al instrucţiunii, este caracterul punct-virgulă “ ; “, atunci instrucţiunea este executată, valoarea acesteia este stocată în memoria MATLAB, dar afişarea rezultatului este suprimată (excepţie cazul în care instrucţiunea generează o eroare). Utilizarea acestui caracter la sfârşitul unei instrucţiuni în fişiere- “ .m “ este necesară în situaţiile în care nu se doreşte afişarea datelor intermediare. De exemplu, matricea

⎥⎥⎥

⎢⎢⎢

⎡=

987654321

A , se introduce de la tastatură folosind următoarea convenţie de

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

A = 1 2 3 4 5 6 7 8 9

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

Page 10: MATLAB IN MECANICA

MATLAB în ingineria mecanică

12

»A [Enter] » A = 1 2 3 4 5 6 7 8 9 Dacă expresia, ce urmează a fi evaluată, este supra-dimensionată, şi nu

încape pe o singură linie, se utilizează semnul “…” (trei puncte), urmat de “[Enter]”, pentru a preciza că instrucţiunea continuă pe linia următoare. Astfel instrucţiunea: » S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+… 19+20; evaluează suma celor 20 de numere şi valoarea acesteia este atribuită variabilei S. Spaţiile dintre semnele “=”, “+”, “-“ şi numere sunt opţionale, dar caracterul “…”, este obligatoriu a fi introdus, întotdeauna, după un operator, după o virgulă sau după o paranteză, altfel se afişează un mesaj de eroare. De exemplu, dacă într-o instrucţiune simplă, caracterul “…” (“ trei puncte”) se introduce, nu imediat după operatori, caractere separatoare, paranteze (ca mai jos):

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

atunci se afişează un mesaj de eroare : ??? S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18… | Error: Missing operator, comma, or semicolon. VARIABILE SPECIALE ŞI CONSTANTE ans - ultimul răspuns eps - precizia relativă, în virgulă mobilă realmax - cel mai mare număr pozitiv, în virgulă mobilă realmin - cel mai mic număr pozitiv, în virgulă mobilă pi - 3.1415926535897.... i, j - unitatea imaginară ( 1− ) inf - infinit NaN - Not-a-Number (nu este număr)

Page 11: MATLAB IN MECANICA

MATLAB în ingineria mecanică

13

isnan - valoarea de adevăr pentru NaN isinf - valoarea de adevăr pentru infinit isfinite - valoarea de adevăr pentru valori finite why - răspuns succint NUMERE Formatul numerelor utilizabile în MATLAB este cel convenţional cu punct

zecimal (scrierea britanică). Astfel, fracţia zecimală 1714,0356

= , va fi recunos-

cută ca atare, în expresiile MATLAB, dacă aceasta este scrisă: » 0.1714 Formatul numerelor se declară în linia de comandă, sau din meniul File→Preferences→Command Window→Numeric format. Declararea formatului numerelor în linia de comandă, din fereastra de lucru, se realizează folosind comanda format urmată de tipul formatului numerelor (conform tabelului):

De exemplu, vectorul linie ⎥⎦⎤

⎢⎣⎡ π= 23456789012345678901,1

35a , în

care 0905521.77245385=π , poate fi afişat în diferite formate. Pentru aceasta, se va introduce, în linia de comandă, mai întâi, vectorul a:

FORMATUL NUMERELOR

COMANDA DESCRIEREA FORMATULUI

short »format short -formatul scurt cu 5 cifre semnificative, cu aproximare la ultima cifră zecimală

short e »format short e -formatul scurt în 5 cifre semnificative, aproximat prin adaos sau lipsă

short g »format short g -formatul scurt cu 5 cifre semnificative, cu cea mai bună aproximare

long »format long -formatul lung cu 15 cifre semnificative long e »format long e -formatul lung cu 15 cifre semnificative aproximat prin

adaos sau lipsă long g »format long g -formatul lung cu 15 cifre semnificative, cu cea mai bună

aproximare bank »format bank -formatul cu două cifre zecimale semnificative, aproximat

prin adaos, sau prin lipsă rat »format rat -formatul raţional (raport) + »format + -afişează semnul numărului hex »format hex -formatul hexazecimal

Page 12: MATLAB IN MECANICA

MATLAB în ingineria mecanică

14

» a=[5/3,1.23456789012345678901,sqrt(pi)]; apoi, se introduc instrucţiunile pentru schimbarea afişării numerelor (Atenţie! După fiecare instrucţiune de schimbare a formatului, se introduce, în linia de comandă, fnumele variabilei care se doreşte a fi afişată, în formatul respectiv): » format short a = 1.6667 1.2346 1.7725 » format short e a = 1.6667e+000 1.2346e+000 1.7725e+000 » format short g a = 1.6667 1.2346 1.7725 » format long a = 1.66666666666667 1.23456789012346 1.77245385090552 » format long e a = 1.666666666666667e+000 1.234567890123457e+000 1.772453850905516e+000 »format long g a = 1.66666666666667 1.23456789012346 1.77245385090552 » format bank a = 1.67 1.23 1.77 » format rat a = 5/3 100/81 296/167 » format + a = +++

Page 13: MATLAB IN MECANICA

MATLAB în ingineria mecanică

15

O mare atenţie trebuie acordată scrierii fracţiilor zecimale. Dacă aceeaşi fracţie zecimală este scrisă în linia de comandă cu caracterul virgulă (,), atunci se va afişa un rezultat dublu. De exemplu, dacă se introduce numarul 0,1714, şi se doreşte afişarea acestuia în format scurt, se vor folosi următoarele instrucţiuni: » format short »0.1714 ans = 0.1714 în timp ce, dacă, acelaşi număr, se introduce în “scriere est-europeană” (cu caracterul virgulă, pentru separarea fracţiei zecimale), se vor afişa două răspunsuri: »0,1714 ans = 0 ans = 1714 De observat că sunt afişate două variabile, cu acelaşi nume, ans, dar cu valori diferite. În acest caz MATLAB va utiliza în evaluări, ulterioare acestei secvenţe, ultima valoare a variabilei ans (adică 1714). Numerele complexe, scrise în forma algebrică, sunt acceptate de MATLAB, dacă se foloseşte simbolul i sau j, pentru valoarea 1− . Astfel,

numerele complexe: i2a = , j2b = , 7i3c += , i323d += , 2i3e += , se pot

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

Page 14: MATLAB IN MECANICA

MATLAB în ingineria mecanică

16

b = 0 + 2.0000i »c=3+sqrt(7)*i c = 3.0000 + 2.6458i »d=3+2/3i d = 3.0000 - 0.6667i »e=3+sqrt(2)*i e = 3.0000 + 1.4142i »e=3+2^(1/2)*i e = 3.0000 + 1.4142i Dacă numerele complexe necesită folosirea funcţiilor speciale (de exemplu pentru calculul rădăcinii pătrate a numărului x, se foloseşte, uneori, funcţia specifică MATLAB: x =sqrt(x), în timp ce, pentru calculul radicalului de ordinul trei se poate folosi calculul cu puteri raţionale: 3 3 =3^(1/3)) sau a parantezelor, pentru scrierea acestora, atunci este necesară folosirea operatorului aritmetic de înmulţire (*), pentru evidenţierea părţii imaginare a numărului complex, în caz contrar, va fi afişat un mesaj de eroare. De exemplu, numerele 7i3c += , 2i3e += , i)32(1f ++= scrise fără operatorul “*”, afişează următoarele mesaje de eroare: » c=3+sqrt(7)i ??? a=3+sqrt(7)i | Error: Missing operator, comma, or semicolon. Eroare:Lipseşte operatorul, virgula, sau paranteza dreaptă »e=3+2^(1/2)i ??? a=3+2^(1/2)i | Error: Missing operator, comma, or semicolon.

Page 15: MATLAB IN MECANICA

MATLAB în ingineria mecanică

17

»f=1+(2+sqrt(3))i ??? f=1+(2+sqrt(3))i | Error: Missing operator, comma, or semicolon. Numărul 23 −+− este un număr complex, pentru care MATLAB afişează valoarea explicită: -3.0000 + 1.4142i Numerele utilizate în MATLAB trebuie sa fie cuprinse între 30810− şi 30810 . OPERATORI ARITMETICI MATLAB utilizează următorii operatori aritmetici: + adunarea

- scăderea * înmulţirea / împărţirea la dreapta \ împărţirea la stânga ^ ridicarea la putere ‘ transpunerea ( ) specificarea ordinii evaluării expresiilor

Există două simboluri pentru împărţire, utilizate în mod special pentru operaţiile cu matrici. Pentru expresiile scalare 1/4 şi 4\1 se obţine acelaşi rezultat (0.25). Într-o expresie, parantezele sunt utilizate pentru a preciza ordinea executării operaţiilor. FUNCŢII În MATLAB sunt predefinite funcţiile matematice elementare standard. O listă completă a funcţiilor matematice elementare se afişează folosind comanda help elfun, help specfun, respectiv help elmat, în linia de comandă. Acestea sunt: Funcţii trigonometrice sin - sinus sinh - sinus hiperbolic asin - inversa sinusului (arcsin) asinh - inversa sinusului hiperbolic cos - cosinus cosh - cosinus hiperbolic

Page 16: MATLAB IN MECANICA

MATLAB în ingineria mecanică

18

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

exp - exponenţiala simplă ( xe ) log - logaritmul natural ( ln x ) log10 - logaritmul în baza zece ( lg x ) log2 - logaritmul în baza doi ( xlog2 )

pow2 - puterile lui 2 ( x2 ) sqrt - radical de ordin 2 ( x ) nextpow2 - puterea următoare a lui 2 ( )N(abs2p ≥ ) Funcţii complexe abs - valoarea absolută ( x )

angle - unghiul de fază ( ieRz θ⋅= ) complex - creează numărul complex din partea reală şi imaginară, date conj - conjugatul numărului complex imag - partea imaginară a numărului complex real - partea reală a numărului complex

Page 17: MATLAB IN MECANICA

MATLAB în ingineria mecanică

19

unwrap - corectează unghiul de fază isreal - valoarea de adevăr Aproximări şi resturi fix - aproximare prin lipsă floor - aproximare spre cel mai mic întreg ceil - aproximare spre întregul mai mare sau egal round - aproximare spre cel mai apropiat întreg mod - rest modulo rem - restul împărţirii sign - signum Funcţii matematice speciale

besselj - f. Bessel de ordinul I ( 0y)x(dxdyx

dxydx 222

22 =⋅ν+−⋅+⋅

bessely - funcţia Bessel de ordinul II besselh - funcţia Bessel de ordinul III (funcţia Hankel) besseli - funcţia Bessel de ordinul I, modificată besselk - funcţia Bessel de ordinul II, modificată

beta - funcţia Beta completă ( ∫ −− −=1

0

1w1z dt)t1(t)w,z(B )

betainc -funcţia Beta incompl. ( ∫ −− −=1

0

1w1zx dt)t1(t

)w,z(B1)w,z(I )

betaln - logaritmul natural al funcţiei Beta

ellipj - funcţia Jacobi eliptică ( ∫φ

θ−

θ

02 )sinm1(

d )

ellipke - funcţia eliptică integrală ( dt)]mt1)(t1[(21

1

0

22−

∫ −− )

erf - funcţia eroare ( ∫ −

π=

x

0

t dte2)x(erf2

)

Page 18: MATLAB IN MECANICA

MATLAB în ingineria mecanică

20

erfc - funcţia eroare complementară ( ∫∞

π=

0

t dte2)x(erfc2

)

erfinv - funcţia eroare inversă

expint - funcţia integrală exponenţială ( dtt

e

x

t

∫∞ −

)

gamma - funcţia Gamma ( ∫∞

−−=Γ0

1at dtte)a( )

gammainc - funcţia Gamma incompletă ( ∫ −−

Γ

x

0

1at dtte)a(

1 )

gammaln - logaritmul natural al funcţiei Gamma legendre - funcţia Legendre asociată

( ( )⎟⎟⎠

⎞⎜⎜⎝

⎥⎥⎦

⎢⎢⎣

⎡−−−=

n2n

nn

m2m

2mmn 1x

dxd

!n21

dxd)x1()1()x(P )

cross - produs vectorial al doi vectori dot - produs scalar al doi vectori Funcţii specifice teoriei numerelor factor - descompunerea în factori primi isprime - valoarea de adevăr, pentru numere prime primes - generează lista numerelor prime, mai mici sau egale cu nr. dat gcd - cel mai mare divizor comun lcm - cel mai mic multiplu comun

rat - descompunere raţională (

⎟⎟⎠

⎞⎜⎜⎝

⎛++

++=

k3

2

1

d1d

1d

1ddn

K

)

rats - aproximarea raţională cu afişarea rezultatului în format raţional perms - afişează toate permutările posibile

nchoosek - combinări de n luate câte k !n)!kn(

!nCkn ⋅−=

factorial - factorial (n!)

Page 19: MATLAB IN MECANICA

MATLAB în ingineria mecanică

21

Funcţii specifice operaţiunilor cu matrici Matrici elementare zeros - matricea zerourilor ones - matricea unitară eye - matricea unitate repmat - repetarea matricei originale rand - matrici cu elemente aleatorii uniform distribuite randn - numere normal distribuite linspace - creează un vector linie spaţiat linear egal logspace - creează un vector linie egal spaţiat logaritmic freqspace - spaţierea frecvenţei meshgrid - transformă vectorii liniari în matrici bi-dimensionale : - spaţierea regulată Caracteristici elementare ale matricilor size - dimensiunea matricei length - lungimea vectorului ndims - numărul de dimensiuni ale structurii disp - afişează o matrice sau un text isempty - valoarea de adevăr pentru matricea “goală” isequal - valoarea de adevăr pentru matrici egale isnumeric - valoarea de adevăr pentru matrici numerice islogical - valoarea de adevăr pentru matrici logice logical - converteşte valori numerice în “valori” logice Operaţiuni cu matrici reshape - schimbă dimensiunea matricei diag - matrici diagonale şi diagonala matricilor blkdiag - creează o matrice diagonală cu elementele date tril - extrage matricea diagonală inferioară triu - extrage matricea diagonală superioară fliplr - inversează ordinea coloanelor, de la stânga la dreapta flipud - inversează liniile flipdim - inversează liniile sau coloanele după dimensiunea cerută rot90 - roteşte matricea cu multiplu de 90o

find - afişează indicele poziţiei elementelor diferite de zero end - ultimul index valabil sub2ind - transformă indicii multipli în indici singulari

Page 20: MATLAB IN MECANICA

MATLAB în ingineria mecanică

22

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

MATRICI, VECTORI ŞI SCALARI

NOTAŢII

MATLAB este un pachet de programe care lucrează numai cu un singur tip de entităţi, matrici rectangulare, cu elemente reale sau complexe.În acest sens, scalarii sunt asimilaţi matricilor cu o linie şi o coloană (1x1), iar vectorii sunt asimilaţi matricilor cu o linie şi n coloane (1x n) sau o coloană şi n linii (nx1). Operaţiile şi comenzile în MATLAB sunt aproape naturale, în sens matricial, asemănător modului de calcul obişnuit. Astfel, entităţile :

A= ⎥⎦

⎤⎢⎣

⎡4321

; B= ⎥⎦

⎤⎢⎣

⎡972510

; C=⎥⎥⎥

⎢⎢⎢

321

; D=⎥⎥⎥

⎢⎢⎢

⎡ π

79755123102

; E=[1 3 5 7] ,

sunt toate matrici în accepţiunea MATLAB: A este o matrice 2x2, B are dimensiunea 2x3, C este 3x1, D este o matrice 3x4 şi E este un vector linie 1x4. Elementele unei matrici, pot fi identificate prin una dintre notaţiile: Aij, A[i,j], A(i,j) etc. şi semnifică elementul de la intersecţia liniei “i” cu coloana “j”. Ultima notaţie, A(i,j), este cea care a fost adoptată şi în MATLAB şi va fi folosită în continuare. Dimensiunea unei matrici este precizată de o pereche de numere, care arată numărul de linii şi coloane ale matricei respective: D este o matrice 3x4; iar o matrice cu o singură linie sau o singură coloană se numeşte vector linie (matricea E din exemplul anterior) sau vector coloană (matricea C din exemplul anterior),

Page 21: MATLAB IN MECANICA

MATLAB în ingineria mecanică

23

elementele acestora putând fi identificate cu un singur indice. O matrice cu o singură linie şi o singură coloană este un scalar. Pentru a face referire la un element A(i,j), (adică elementul aflat la intersecţia liniei i cu coloana j ) al unei matrici A, sunt necesari doi indici, indicele de linie şi indicele de coloană, în această ordine. Referirea la un element al unui vector poate fi făcută numai cu un singur indice.

Astfel, dacă se introduce de la tastatură, la promptul MATLAB, (promptul are simbolul grafic “ » “) matricile A, B, C, D şi E:

»A=[1,2;3,4];B=[0,1,5;2,7,9];C=[1,2,3];D=[sqrt(2),0,pi,1;3,2,1,… 5;5,7,9,7];E=[1,3,5,7] De exemplu, elementul de pe poziţia (2,1), al matricei A, poate fi apelat cu

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

3

Dacă se repetă exemplul, pentru matricile B, D, E: »B(1,3) [Enter] ans =

5;

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

7;

»E(4) [Enter] ans =

7

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

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

Page 22: MATLAB IN MECANICA

MATLAB în ingineria mecanică

24

DEFINIREA MATRICILOR SIMPLE PRIN INTRODUCEREA LISTEI DE ELEMENTE Cea mai simplă metodă de definire a matricilor mici constă în utilizarea unei

liste explicite, a elementelor acesteia, respectând convenţiile de scriere. La introducerea unei astfel de liste trebuie respectate următoarele reguli:

a) elementele matricei sunt cuprinse între paranteze drepte “ [ ] “ b) elementele unei linii trebuie separate prin spaţii libere (blanc-uri ) sau

virgule; c) liniile se separă prin semnul punct-virgulă “ ; “ ;

Astfel, matricea A= ⎥⎦

⎤⎢⎣

⎡4321

, se introduce de la tastatură cu secvenţa:

»A= [ ]43;21 [Enter] A= 1 2 3 4 Obs. –În acest exemplu:

• elementele unei linii sunt separate printr-un spaţiu liber ((blank): {21 respectiv {43 ;

• [Enter]- reprezintă tasta cu acelaşi nume;

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

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

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

într-un fişier de date pentru o folosire ulterioară (tipul fisierelor de date este .mat). Pentru matricile mari, la care datele de intrare nu încap pe o singură linie,

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

Page 23: MATLAB IN MECANICA

MATLAB în ingineria mecanică

25

A=[1,2[Enter] 3,4[Enter] 5,6] [Enter] şi se afişează: A = 1 2 3 4 5 6 Un alt mod de definire a unei matrici constă în apelarea numelui unui fişier de date aflat în memoria sistemului de calcul. Acest fişier trebuie să fi fost salvat, în prealabil, pe hard-disc, în format ASCII (text), organizat ca o matrice rectangulară (completă) şi trebuie să aibă extensia “ .m “. Astfel, de exemplu, dacă pe hard-disc se găseşte un fişier cu numele matricea_A.m care conţine următoarele linii de text:

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

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

Page 24: MATLAB IN MECANICA

MATLAB în ingineria mecanică

26

GENERAREA MATRICILOR PRIN INSTRUCŢIUNI ŞI FUNCŢII

În MATLAB se pot defini matricile folosind instrucţiuni şi funcţii specifice, existând, deasemenea, predefinite matrici implicite. Generarea matricilor prin instrucţiuni şi funcţii utilizează facilităţile acestui mediu de programare. De exemplu, matricile [ ]4321E = şi

[ ]5,04,03,02,01,0F = se generează astfel: » E=1:4 [Enter] E =

1 2 3 4

iar cu secvenţa următoare se obţine matricea F: » F=0.1:0.1:0.5 [Enter] F =

0.1000 0.2000 0.3000 0.4000 0.5000

Matricile predefinite, prin funcţii MATLAB, sunt:

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

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

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

I2 = 1 0 0 1 I3 = 1 0 0 0 1 0 0 0 1

Page 25: MATLAB IN MECANICA

MATLAB în ingineria mecanică

27

I34 = 1 0 0 0 0 1 0 0 0 0 1 0

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

Matricea identică are toate elementele egale cu cifra 1: » Y2= ones(2); Y34= ones(3,4);

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

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

C). Matricea zero : zeros(n), zeros(n,m) Matricea zero are toate elementele egale cu 0 (nu este matricea nulă): »Z3=zeros(3) Z3 =

0 0 0 0 0 0 0 0 0

D). Matricea vidă: [ ]

Matricea “vidă” este o matrice cu, cel puţin, una dintre dimensiuni egală cu zero, deci fără elemente definite, dar matricea există ca structură matematică:

»A=[]

Page 26: MATLAB IN MECANICA

MATLAB în ingineria mecanică

28

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

Funcţia rand() generează matrici ale căror elemente sunt numere uniform distribuite în intervalul de valori (0,1) . Cu secvenţa următoare se generează matricile arbitrare B3 (cu dimensiunea 3x3), B34(cu dimensiunea 3x4) şi B345(cu dimensiunea 3x4 în 5 variante, disponibilă numai în versiunile MATLAB superioare versiunii 5.3 ):

»B3=rand(3);B34=rand(3,4);B345=rand(3,4,5);

fiind obţinute rezultatele: B3 = 0.4514 0.3127 0.6831 0.0439 0.0129 0.0928 0.0272 0.3840 0.0353 B34 = 0.6124 0.0164 0.0576 0.7176 0.6085 0.1901 0.3676 0.6927 0.0158 0.5869 0.6315 0.0841 B345(:,:,1) = 0.4544 0.1536 0.7275 0.1210

0.4418 0.6756 0.4784 0.4508 0.3533 0.6992 0.5548 0.7159

B345(:,:,2) = 0.8928 0.8656 0.9084 0.0498

0.2731 0.2324 0.2319 0.0784 0.2548 0.8049 0.2393 0.6408

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

0.0381 0.9342 0.8729 0.9669 0.4586 0.2644 0.2379 0.6649 0.8699 0.1603 0.6458 0.8704

Page 27: MATLAB IN MECANICA

MATLAB în ingineria mecanică

29

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

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

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

Astfel, dacă se dă matricea ⎥⎦

⎤⎢⎣

⎡−

=89006,0

49301C , atunci funcţia sparse (C),

generează matricea: »C=[1,0,3,9,4;0.6,0,0,9,8]; » sparse (C) ans =

(1,1) 1.0000 (2,1) 0.6000 (1,3) 3.0000 (1,4) 9.0000 (2,4) 9.0000 (1,5) 4.0000 (2,5) -8.0000

adică, sunt reţinute doar elementele diferite de valoarea zero din matricea C de la argumentul funcţiei sparse. Această funcţie este utilă pentru stocarea în memoria calculatorului a matricilor cu m linii şi n coloane, unde m şi n sunt valori mari.

G). Matricea Hadamard

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

»H4=hadamard(4)

H4 = 1 1 1 1 1 -1 1 -1 1 1 -1 -1

1 -1 -1 1

Page 28: MATLAB IN MECANICA

MATLAB în ingineria mecanică

30

H). Matricea Hilbert

Matricea Hilbert este un exemplu notabil de matrice slab condiţionată. Elementele matricei Hilbert sunt de forma H(i, j) = 1/(i+j-1), şi se generează cu funcţia MATLAB hilb(n). De exemplu:

»H3=hilb(3) H3 =

1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000

I). Matricea magică pătratică

Matricea magică pătratică este generată cu funcţia MATLAB magic(n) şi este construită din întregii cuprinşi între 1 şi n2 cu condiţia ca suma elementelor de pe orice rând să fie egală cu suma elementelor de pe oricare coloană respectiv cu suma elementelor de pe diagonala principală, iar n trebuie să fie un scalar mai mare sau egal cu 3:

»M3=magic(3) [Enter] M3 =

8 1 6 3 5 7 4 9 2

Pentru verificarea condiţiei de egalitate între suma elementelor pe linie cu suma elementelor pe coloană, respectiv cu suma elementelor pe diagonală, se realizează suma corespunzătoare, folosind o funcţie Matlab (sum() )

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

15 15 15

» suma_elementelor_pe_coloana= sum(M3') [Enter] suma_elementelor_pe_coloana =

15 15 15

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

15

Page 29: MATLAB IN MECANICA

MATLAB în ingineria mecanică

31

»M4=magic(4) M4 =

16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

» suma_elementelor_pe_linie= sum(M4) suma_elementelor_pe_linie =

34 34 34 34

» suma_elementelor_pe_coloana =sum(M4') suma_elementelor_pe_coloana =

34 34 34 34

» suma_elementelor_pe_diagonala= sum(diag(M4)) suma_elementelor_pe_diagonala =

34

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

J). Matricea Pascal

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

»P2=pascal(2);P3=pascal(3);P4=pascal(4);P5=pascal(5); P2 =

1 1 1 2

P3 = 1 1 1 1 2 3 1 3 6

Page 30: MATLAB IN MECANICA

MATLAB în ingineria mecanică

32

P4 = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20

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

K). Matricea Wilkinson

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

»doi=wilkinson(2) doi =

0.5000 1.0000 1.0000 0.5000

»trei=wilkinson(3) trei = 1 1 0 1 0 1 0 1 1 »patru=wilkinson(4) patru = 1.5 1 0 0 1 0.5 1 0 0 1 0.5 1 0 0 1 1.5

Page 31: MATLAB IN MECANICA

MATLAB în ingineria mecanică

33

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

GENERAREA MATRICILOR PRIN CREAREA FIŞIERELOR SCRIPT O facilitate oferită de MATLAB, pentru generarea matricilor, este crearea fişierelor script. De exemplu, pentru matricea “A”, dată sub forma algebrică,

⎥⎥⎥⎥

⎢⎢⎢⎢

=

0.10.140.150.40.120.70.60.90.80.110.100.50.130.20.30.16

A ,

se realizează fişierul matricea_A.m astfel:

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

• A = [ ... 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0 ] • Acest fişier se salvează (din meniul File →Save As … ) cu numele

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

Page 32: MATLAB IN MECANICA

MATLAB în ingineria mecanică

34

Dacă se doreşte apelarea fişierului (pentru a fi utilizat în alte fişiere, sau în Workspace), în linia de comandă MATLAB, se tastează numele fişierului, matricea_A, rezultatul fiind afişarea matricei A: »matricea_A »A =

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

GENERAREA MATRICILOR PRIN ÎNCĂRCAREA DIN FIŞIERE EXTERNE O altă posibilitate de a accesa date din fişiere în format text sau binar, în MATLAB-6, este aceea de a folosi calea File→ Import Data … care utilizează un Import Wizard (Asistent pentru import date), acesta solicitând utilizatorului date suplimentare privind calea fişierului ce urmează a fi importat. De exemplu, pentru a importa fişierul “matrice”, care se găseşte pe hard-disc, în partiţia D:/ a acestuia, D:/MATLAB-6/work/matrice, se va deschide fereastra de dialog din figură:

Accesând butonul Next, iar, după validarea operaţiei, Finish, în spaţiul de lucru, poate fi, oricând, afişată şi utilizată matricea salvată în acest fişier. Comanda load citeşte fişierele binare conţinând matrici generate în sesiuni de lucru anterioare. Aceeaşi comandă citeşte fişiere- text conţinând date numerice. Fişierul

Page 33: MATLAB IN MECANICA

MATLAB în ingineria mecanică

35

text trebuie sa fie organizat ca tabel bi-dimensional (linii şi coloane), separate prin spaţii libere (blancuri), cu un rând pe fiecare linie şi număr egal de elemente în fiecare rând (tabelul trebuie sa aibă acelasi număr de coloane pe fiecare linie). De exemplu, dacă, intr-un editor de text (acest editor poate fi extern MATLAB-ului), se creează fişierul text conţinând următoarele patru linii de text: 16 3 2 13

5 10 11 8 9 6 7 12 4 15 14 1

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

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

ELEMENTELE MATRICILOR Elementele matricilor pot fi numere reale sau complexe, sau orice altă expresie MATLAB. De exemplu, pentru introducerea matricei

( ) ⎥⎦⎤

⎢⎣⎡ ⋅++−=

5432133,1x se foloseşte scrierea:

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

» x= -1.3000 1.7321 4.8000

Page 34: MATLAB IN MECANICA

MATLAB în ingineria mecanică

36

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

Elementele unei matrici pot fi referite (se pot apela, sau se poate edita) cu indici cuprinşi între paranteze rotunde “ ( ) “, cifrele reprezentând identificatorii de linie, respectiv de coloană ai elementului apelat.

De exemplu, cu instrucţiunea următoare, se cere afişarea elementului “al doilea” al vectorului x:

» a = x(2) [Enter] a = 1.7321 în timp ce, cu instrucţiunea următoare se modifică elementul al cinci-lea al aceluiaşi vector x (dacă acest element nu exista în varianta originală a vectorului x, atunci, MATLAB atribuie automat valoarea înscrisă în partea dreaptă a semnului “=”, de atribuire): » x(5) = abs(x(1) ) [Enter]

x= -1.3000 1.7321 4.8000 0 1.3000 (adică, elementul al 5-lea al vectorului x este egal cu valoarea absolută a elementului de pe poziţia 1 a vectorului x), ceea ce returnează rezultatul:

Obs:De remarcat că se atribuie o valoare unui element care ocupă o poziţie în afara dimensiunii maxime a matricei sau vectorului referit, iar elementele nedefinite sunt setate la valoarea zero.

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

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

Page 35: MATLAB IN MECANICA

MATLAB în ingineria mecanică

37

A= 1 2 0 0 3 4 0 6

(adică elementul din linia 2 coloana 4, al matricei A= ⎥⎦

⎤⎢⎣

⎡4321

este definit, de-

acum înainte, ca fiind numărul întreg 6,(Atenţie! Nu trebuie înlocuite elementele care lipsesc: A13 , A14, A23, acest lucru este realizat automat de către mediul MATLAB )). O modalitate de a construi matrici mari constă în folosirea matricilor mici ca elemente, şi concatenarea (“legarea”) acestora. Spre exemplu, din două matrici 2x3 se poate construi o matrice 4x3; dimensiunile matricilor utilizate trebuind să fie astfel alese încât să se realizeze tablouri rectangulare complete. Fie A1 şi A2 cele două matrici utilizate. Cu secvenţa următoare: » A1=[ 1 2 ; 3 4]; A2=[5 6 ; 7 8]; A =[ A1 ; A2] [Enter] se obţine rezultatul:

»A= 1 2 3 4 5 6 7 8

O matrice cu dimensiuni reduse poate fi extrasă din matrici mai mari utilizând semnul “ : “ (două puncte). De exemplu:

»B=A(2,3, :) [Enter]

extrage liniile doi şi trei (“2:3”) şi toate coloanele din matricea curentă A, obţinându-se matricea B: B= 3 4

5 6

În acest exemplu, caracterul “două puncte” ( “ : “ ), folosit în instrucţiunea »B=A(2:3, :), are următoarea semnificaţie:”se extrag elementele aflate la intersecţia liniilor 2, 3 cu toate coloanele matricei A”.

Page 36: MATLAB IN MECANICA

MATLAB în ingineria mecanică

38

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

paranteze drepte, [ ]. De exemplu, fiind dată matricea ⎥⎥⎥⎥

⎢⎢⎢⎢

=

97539876809728421

A , se

poate genera o altă matrice B, prin suplimentarea liniilor şi coloanelor matricei A, astfel:

• Matricea B va avea două “linii” şi două “coloane” • “Elementul” B(1,1) este matricea A; • “Elementul” B(1,2) este format din elementele matricei A, la care se adună

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

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

scalarul 16.

Pentru a realiza acest deziderat, în linia de comandă (considerând că matricea A este stocată în memorie), se introduce, de la tastatură, următoarea secvenţă: » A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9]; » B = [A, A+32; A+48, A+16] B =

21 4 8 2 53 36 40 34 7 9 0 8 39 41 32 40 6 7 8 9 38 39 40 41 3 5 7 9 35 37 39 41 69 52 56 50 37 20 24 18 55 57 48 56 23 25 16 24 54 55 56 57 22 23 24 25 51 53 55 57 19 21 23 25

A+32

A+48 A+16

A

Page 37: MATLAB IN MECANICA

MATLAB în ingineria mecanică

39

Un alt exemplu, asamblarea aceloraşi matrici, prin aranjarea acestora “în coloană” : »B1 = [A ;A+32; A+48; A+16]

B1 = 21 4 8 2 7 9 0 8 6 7 8 9 3 5 7 9 53 36 40 34 39 41 32 40 38 39 40 41 35 37 39 41 69 52 56 50 55 57 48 56 54 55 56 57 51 53 55 57 37 20 24 18 23 25 16 24 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ă:

⎥⎥⎥⎥

⎢⎢⎢⎢

=

97539876809728421

A , se poate folosi următoarea secvenţă:

» A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A; x(:,2)=[] se obţine o nouă matrice x :

x = 21 8 2 7 0 8 6 8 9 3 7 9

A

A+32

A+48

A+16

Page 38: MATLAB IN MECANICA

MATLAB în ingineria mecanică

40

Pentru ştergerea unui singur element (de exemplu, tot al treilea element să fie şters, considerând elementele matricei scrise “pe coloană”) se poate folosi următoarea secvenţă: » A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A; » x(1:3:16) =[]

x = 7 6 4 9 5 8 8 7 8 9

Se observă că, elementele matricei au fost “citite” pe coloană, şi tot al treilea element, începând cu primul, a fost eliminat, rezultatul fiind un vector linie. EXTRAGEREA SUBMATRICILOR PRIN INDICI

Elementele individuale ale unei matrici se apelează cu numele acesteia, urmat de doi indici, cuprinşi între paranteze rotunde separaţi prin virgulă. Primul indice semnifică linia, iar al doilea coloana în care se găseşte elementul apelat. De

exemplu, considerând matricea

⎥⎥⎥⎥

⎢⎢⎢⎢

=

97539876809728421

A stocată în memoria

calculatorului, atunci cu instrucţiunea: » A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];A(6,5)=A(1,2)+A(3,1) [Enter] se obţine o altă matrice la care elementul din linia 6, coloana 5: A(6,5), al matricei A, este obţinut ca suma dintre elementul de pe linia 1 –coloana 2 (A(1,2)) şi elementul de pe linia 3, coloana 1 (A(3,1)), celelalte elemente fiind înlocuite cu valoarea zero:

» A = 21 4 8 2 0 7 9 0 8 0 6 7 8 9 0 3 5 7 9 0 0 0 0 0 0 0 0 0 0 10

Indicii pot fi scalari sau vectori. Indicii vectori permit definirea unor submatrici, procedeu prin care se pot referi părţi disparate dintr-o matrice. Spre exemplu, dacă se presupune că matricea M6x10 există deja salvată pe disc,

Page 39: MATLAB IN MECANICA

MATLAB în ingineria mecanică

41

»M=[1,2,3,4,5,6,7,8,9,10;-1,2,3,-4,5,-6,7,-8,9,-10;0,2,0,4,0,6,0,8,0,10; -1,2,-3,4,-5,6,-7,8,-9,10;1,2,3,0,0,0,7,8,9,10;10,9,8,7,6,5,4,3,2,1];

M = 1 2 3 4 5 6 7 8 9 10 -1 2 3 -4 5 -6 7 -8 9 -10 0 2 0 4 0 6 0 8 0 10 -1 2 -3 4 -5 6 -7 8 -9 10 1 2 3 0 0 0 7 8 9 10 10 9 8 7 6 5 4 3 2 1

atunci, cu instrucţiunea următoare, se extrage submatricea B cu dimensiunea 5x1, formată cu elementele liniilor 1, 2, 3, 4, 5 (notaţia “1:5” arată că sunt apelate toate liniile: 1 până la 5) şi coloana a 3-a a matricei M: »B1=M(1:5,3) [Enter] B1 = 3 3 0 - 3 3 în timp ce, instrucţiunea următoare, extrage submatricea C, de dimensiunea 5x4, constituită din elementele primelor 5 liniii şi ale ultimelor 4 coloane (coloanele 7, 8, 9, 10) ale matricei M: »C1=M(1:5, 7:10) [Enter]

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

Utilizarea, numai a caracterului “:” (“două puncte”) în locul indicilor pentru linii sau pentru coloane, presupune considerarea tuturor elementelor pe linii, respectiv pe coloane. Astfel instrucţiunea:

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

Page 40: MATLAB IN MECANICA

MATLAB în ingineria mecanică

42

extrage din matricea M, o submatrice D1 cu elementele extrase din matricea M (toate liniile şi numai coloana 3) având următoarea configuraţie:

»D1 = 3 3 0 - 3 3 8 în timp ce, instrucţiunea: »E1=M(1:5,:) [Enter] extrage submatricea E1 care conţine liniile de la 1 la 5 ale tuturor coloanelor matricei M:

»E1 = 1 2 3 4 5 6 7 8 9 10 -1 2 3 -4 5 -6 7 -8 9 -10 0 2 0 4 0 6 0 8 0 10 -1 2 -3 4 - 5 6 -7 8 -9 10 1 2 3 0 0 0 7 8 9 10

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

Page 41: MATLAB IN MECANICA

MATLAB în ingineria mecanică

43

creează o variabilă simbolică, în timp ce, a doua, crează o mulţime finită de variabile, prin declararea acestora, la începutul sesiunii de lucru. Trebuie făcută o diferenţiere exactă între simbolurile literale (ale literelor din alfabetul grecesc, de exemplu) şi simbolurile matematice folosite pentru reprezentarea variabilelor în MATLAB. De exemplu, pentru introducerea unui text, de la tastatură, în care intervin simboluri matematice sau caractere greceşti, precum şi caractere speciale folosite ca simboluri pentru operatori matematici, se folosesc proprietăţile disponibile în MATLAB, pentru inserarea acestora. În tabelul alăturat sunt cuprinse toate simbolurile literale şi caracterele speciale, pentru care MATLAB oferă facilităţi de inserare în text: DENUMIREA SIMBOLULUI

SIMBOL DENUMIREA SIMBOLULUI

SIMBOL DENUMIREA SIMBOLULUI

SIMBOL

\alpha α \upsilon υ \sim ≈ \beta β \phi φ \leq ≤

\gamma γ \chi χ \infty ∞ \delta δ \psi ψ \leftrightarrow ↔ \epsilon ε \omega ω \leftarrow ← \zeta ζ \Gamma Γ \rightarrow →

\eta η \Delta Δ \uparrow ↑ \theta θ \Theta Θ \downarrow ↓ \vartheta ϑ \Lambda Λ \circ o

\iota ι \Xi Ξ \pm ± \kappa κ \Pi Π \geq ≥ \lambda λ \Sigma Σ \partial ∂ \mu μ \Upsilon Υ \div ÷ \nu ν \Phi Φ \neq ≠ \xi ξ \Psi Ψ \equiv ≡

\pi π \Omega Ω \Im ℑ \rho ρ \forall ∀ \Re ℜ \sigma σ \exists ∃ \supset ⊃ \varsigma ς \ni ∋ \subset ⊂ \tau τ \cong ≅ \int ∫ \nabla ∇ \copyright © \in ∈

\perp ⊥ \langle ⟨ \rangle ⟩ \cap ∩ \cup ∪ \supseteq ⊇ \otimes ⊗ \oplus ⊕ \oslash Ø

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

Page 42: MATLAB IN MECANICA

MATLAB în ingineria mecanică

44

pentru care aceste observaţii, referitoare la diferenţa dintre simbolurile matematice, folosite în MATLAB ca orice alt tip de variabilă şi simbolurile literale, folosite ca şiruri de caractere (text) rezidă în aceea că se doreşte eliminarea unei posibilităţi de apariţie a confuziilor nedorite, în tratarea calculului simbolic. DEFINIREA ŞI CREAREA EXPRESIILOR SIMBOLICE Variabilele şi expresiile simbolice se definesc cu comanda sym, în linia de comanda a spaţiului de lucru MATLAB. Funcţia MATLAB sym(x), permite atribuirea, variabilei “x”, caracterul de “simbol”. Astfel, cu comanda: »c = sym('variabila_simbolica') se crează variabila simbolica “ c “, care va afişa, atunci când este accesată, expresia “ variabila_simbolica “:

c = variabila_simbolica

O expresie matematică poate fi reprezentată printr-un simbol alfanumeric, fiind posibilă utilizarea acesteia, ulterior, în calcule şi expresii numerice complexe. De exemplu, presupunând că se doreşte folosirea repetată a unei expresii matematice, relativ complicată, ca editare, în expresii diferite, atunci se poate folosi următorul algoritm: se declară expresia simbolică, după care aceasta se poate utiliza în calcule şi expresii ca o valoare numerică sau simbolică de sine-stătătoare. Fie expresia:

( )8

41255_823ln341411

312:3219E3

125log3 55

5 −⋅

⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

⋅⎥⎥⎦

⎢⎢⎣

⎡−+−

−++=

Declararea acesteia ca variabila simbolica se realizează cu comanda:

»E=sym( ' (((1+2+3)/((12-3^5)/11)-(14+(34)^(1/5)- log(23))^(1/3))*8… ^((log(125))/(log(5))))-sqrt(55)*(12-4^3)/(8) ' )

ceea ce are ca rezultat afişarea expresiei simbolice: E = (((1+2+3)/((12-3^5)/11)-(14+(34)^(1/5)- log(23))^(1/3))*8^((log(125))/(log(5))))-sqrt(55)*(12-4^3)/(8)

Page 43: MATLAB IN MECANICA

MATLAB în ingineria mecanică

45

Utilizarea acestei expresii, în calcule, (pentru determinarea valorii expresiei f=E^2-3*E+log(E), de exemplu), este posibilă, folosind următoarea secvenţă MATLAB: » f=E^2-3*E+log(E) f =((-2/7-(14+34^(1/5)- log(23))^(1/3))*8^(log(125)/log(5))+ 13/2*55^(1/2))^2-3*(-2/7-(14+34^(1/5)-log(23))^(1/3))*8^(log(125)/ log(5))-39/2*55^(1/2)+log((-2/7-(14+34^(1/5)-log(23))^(1/3))* 8^(log(125)/log(5))+13/2*55^(1/2)) Pentru ca operaţiile aritmetice cu expresii simbolice, în MATLAB, să se poată realiza, este necesară declararea tuturor variabilelor dintr-o expresie matematică. De exemplu, rezolvarea unei ecuaţii parametrice, cu parametrul “ a ”, şi variabila “ x ”, declarată, este posibilă dacă, în prealabil, s-a declarat simbol, parametrul respectiv, folosind, pentru aceasta funcţia syms. Astfel, pentru rezolvarea ecuaţiei ( ) 0xf = , unde 7ax2x)x(f 2 +−= , se procedează astfel: »syms x a »f=x^2-2*a*x+7 f = x^2-2*a*x+7 » solve(f) ans = [ a+(a^2-7)^(1/2)] [ a-(a^2-7)^(1/2)] elementele matricei “simbolice” “ans” fiind cele două rădăcini ale ecuaţiei date.

CALCULE SIMBOLICE

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

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

» syms x a b c » f=a*x^3+b*x^2+c*x f = a*x^3+b*x^2+c*x

Page 44: MATLAB IN MECANICA

MATLAB în ingineria mecanică

46

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

» diff(f) ans = 3*a*x^2+2*b*x+c Diferenţiala se calculeaza, implicit, în raport cu variabila “x”, indiferent de ordinea declarării simbolurilor. Dacă, de exemplu, se cere diferenţiala în raport cu o altă variabilă, atunci funcţia MATLAB pentru calculul diferenţialei se apelează cu doi parametri: » diff(f,a) ans = x^3 În mod similar se determină diferenţiala de ordinul ”n”(n≥2) în raport cu o variabilă. Funcţia MATLAB diff() se apelează, atunci, cu doi sau trei parametri, între aceştia, ultimul parametru fiind ordinul de diferenţiere: »diff(f,x,2) ans = 6*a*x+2*b –diferenţiala de ordinul doi în raport cu “x” » diff(f,2) ans = 6*a*x+2*b - diferenţiala de ordinul doi în raport cu “x” » diff(f,3) ans = 6*a - diferenţiala de ordinul trei în raport cu “x” » diff(f,a,2) ans =

0- diferenţiala de ordinul doi în raport cu “a”

Diferenţiala matricei se determină în mod similar diferenţialelor funcţiilor simple: » syms x k pi » A=[ (k*x)^2, (pi*x)^3;k^2*x, (x^2+1)^(1/2)]; » diff(A)

Page 45: MATLAB IN MECANICA

MATLAB în ingineria mecanică

47

ans = [ 2*k^2*x, 3*pi^3*x^2] [ k^2, 1/(x^2+1)^(1/2)*x] Derivatele parţiale se determină folosind funcţia MATLAB jacobian(), în funcţie de variabilele funcţiilor. Astfel, derivata unei funcţii )v,u(f , în raport cu funcţiile )y,x(u , respectiv )y,x(v , se determină cu următoarea secvenţă: » syms x y u v » u=2*x^4-log(x^2+4);v=exp(x^2-8)+4*log(3*x^3-2); » Der_partiala=jacobian([u;v],[x,y]) Der_partiala = [8*x^3-2*x/(x^2+4)-(2*x+2*y^3)/(x^2+2*x*y^3-5*y),- (6*x*y^2-5)/(x^2+2*x*y^3-5*y)] [ 2*x*exp(x^2-8*y^3+6*y^2)+36*x^2/(3*x^3-2*y),(-24*y^2+12*y)*exp(x^2-8*y^3+6*y^2)-8/(3*x^3-2*y)] respectiv, pentru alte două funcţii: » syms x y u v a b c d » u=cos(a*x+b*y);v=sin(c*x-d*y); » Der_partiala=jacobian([u;v],[x,y]) Der_partiala = [ -sin(a*x+b*y)*a, -sin(a*x+b*y)*b] [ cos(c*x-d*y)*c, -cos(c*x-d*y)*d] Calculul limitelor funcţiilor simbolice Calculul limitei unei funcţii, definită simbolic presupune existenţa, în primul rând, limitei funcţiei respective într-un punct. Întrucât se definesc limitele laterale (la stânga sau la dreapta), MATLAB permite calculul diferenţiat al acestora prin specificarea “sensului” de calcul. Limitele se calculează folosind funcţia MATLAB limit(f(x),xo), cu parametrii de intrare, f(x) şi xo în funcţie de tipul

limitei. De exemplu, dacă se cere calculul limitei funcţiei ax

xx

aaax)x(f

−= , când x

tinde spre a, se procedează astfel:

Page 46: MATLAB IN MECANICA

MATLAB în ingineria mecanică

48

»syms a x »limit((x^x-a^x)/(a^x-a^a),a) ans = 1/log(a) Pentru calculul limitei şirului 0a),aa(nx 1nn2

n >−⋅= + , se foloseşte secvenţa MATLAB: »syms n a » limit((n^2)*(a^(1/n)-a^(1/(n+1))),n,inf) ans = log(a) Limitele laterale se determină folosind aceeaşi funcţie MATLAB, pentru care paramatrii de intrare sunt:funcţia (scrisă simbolic), variabila, punctul în care se cere limita respectiv “sensul” (“left”-stânga; “right”-dreapta), după cum limita se calculează, la stânga, sau la dreapta punctului de acumulare. De exemplu, pentru

calculul limitelor laterale −→−

axax

1

elim şi +→−

axax

1

elim 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 ∑=

n

1kka , în care şirul ka este definit

Page 47: MATLAB IN MECANICA

MATLAB în ingineria mecanică

49

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

calculul sumei ∑= +

n

1k2 kk1 , se foloseşte secvenţa:

» syms k n » symsum(1/(k^2+k),1,n) ans = -1/(n+1)+1 În cazul în care indexul de sumare nu este implicit (în expresia simbolică, şirul fiind definit cu mai multe variabile), funcţia MATLAB trebuie sa fie explicit definită prin parametrii de intrare. Astfel, dacă se cere calculul sumelor infinite

( )∑=

⋅+n

0k

k2 x1k şi ( )∑=

+n

0k

kk yx , se foloseşte secvenţa:

» syms k x y n »symsum((x^k)*(k^2+1),k,0,inf) ans = -(2*x^2-x+1)/(x-1)^3 respectiv, pentru cea de-a doua sumă: » syms k x y n »symsum(x^k+y^k,k,0,inf) ans = -1/(x-1)-1/(y-1) Calculul seriilor Taylor Dezvoltarea unei funcţii în serie Taylor are o aplicabilitate deosebită în calculele numerice. Fie .R]b,a[:f → Se pune problema determinăii unei funcţii F, care să aproximeze funcţia f în intervalul [a,b]. Se recurge la această aproximare în două cazuri: 1) când nu se cunoaşte expresia analitică a lui f, dar se cunosc valorile sale într-un număr finit de puncte şi 2) când expresia analitică a lui f este destul de complicată şi cu ajutorul acesteia

Page 48: MATLAB IN MECANICA

MATLAB în ingineria mecanică

50

calculele sunt destul de dificile. Pentru evaluarea lui f(x) se caută o altă funcţie F(x) relativ simplă astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumită clasă de funcţii, de exemplu din clasa polinoamelor de grad n sau mai mic, pentru un anume n, atunci trebuie ca F(x) să ia aceeaşi valoare cu f(x) pentru anumite valori ale lui x. Aceste valori ale lui x sunt adesea referite ca puncte de interpolare. De asemenea se poate cere ca anumite derivate ale lui F(x) să ia acelaşi valori cu valorile derivatelor corespunzătoare ale lui f(x) în anumite puncte de interpolare. Se poate arăta că dacă F(x) este suma a n+1 termeni ai seriei Taylor pentru f(x) în punctul x=a, atunci F(x) poate fi considerată ca un polinom de interpolare pentru f(x) de grad n sau mai mic, deoarece: n,...,2,1,0k),a(fF k)k(

)a( ==

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

punct x=a este: ( ) ( ) ( )n

0n

nax

!naf

−⋅∑∞

=

. Funcţia MATLAB, pentru calculul primilor n

termeni ai dezvoltării, se utilizează funcţia taylor(f(x), n, a). De exemplu, pentru

determinarea primilor 4 termeni ai dezvoltării funcţiei 2xe)x(f = , în jurul

punctului x=3, se va folosi următoarea secvenţă: » syms x » taylor(exp(x^2),4,3) ans = exp(9)+6*exp(9)*(x-3)+19*exp(9)*(x-3)^2+42*exp(9)*(x-3)^3 Problemele legate de aproximarea folosind seriile Taylor vor fi abordate într-o altă secţiune a acestei lucrări. REZOLVAREA ECUAŢIILOR SIMBOLICE ECUAŢII ALGEBRICE Rezolvarea ecuaţiilor algebrice simple comportă, în MATLAB, un volum de lucru redus, dar necesită un efort de calcul relativ mare pentru sistemul de

Page 49: MATLAB IN MECANICA

MATLAB în ingineria mecanică

51

calcul, comparativ cu alte operaţii şi calcule matematice. Funcţia MATLAB folosită pentru rezolvarea directă a ecuaţiilor algebrice, este solve(), în care parametrii de intrare sunt ecuaţiile simbolice. Dacă ecuaţia are forma f(x)=0, atunci funcţia MATLAB se apelează în forma simplă: solve(f(x)), în timp ce, pentru ecuaţii de forma f(x)=g(x), funcţia MATLAB se apelează cu parametrii de intrare marcaţi ca şiruri de caractere: solve(‘f(x)=g(x)’). În cazul sistemelor de ecuaţii, se respectă ultima regulă de scriere a parametrilor de intrare, ecuaţiile fiind considerate şiruri de caractere separate prin caracterul virgulă: solve(‘f1(x)=g1(x)’, ‘f2(x)=g2(x)’, ‘f3(x)=g3(x)’, …,‘fn(x)=gn(x)’). În continuare se prezintă exemple ilustrative: » syms a x » solve(x^4-7*x^3+19*x^2-23*x+10) ans = [ 1] [ 2] [ 2+i] [ 2-i] » solve(‘x^2=6*x-5’) ans = [ 1] [ 5]

Rezolvarea sistemului de ecuaţii ⎪⎩

⎪⎨⎧

=+=

yln37)2ln(x2-2x 2-y

este realizabilă

cu următoarea secvenţă: »syms x y » [x,y]=solve('x=2^(y-2)-2','2*log(x+7)=y*log(3)') x = 1/4*exp(2.7726)-2 y = 2.7726/log(2) În scrierea soluţiei acestui sistem de ecuaţii, MATLAB foloseşte transformarea ln 16 =2,7726. Astfel, soluţia sistemului se mai poate scrie sub forma consacrată { }4y;2x == .

Page 50: MATLAB IN MECANICA

MATLAB în ingineria mecanică

52

Rezolvarea ecuaţiilor parametrice sau a sistemelor cu numar mare de ecuaţii, MATLAB afişează un “câmp” “S” al soluţiilor. “Extragerea” soluţiilor din acest “câmp” se realizează folosind o instrucţiune simplă:S.(nume_soluţie). Pentru ilustrarea acestor situaţii, se studiază rezolvarea

sistemelor:⎪⎩

⎪⎨⎧

=++++=++++

0ax)1a(ayy0ay)1a(axx

2

2;

⎪⎪⎩

⎪⎪⎨

−=+−=+−=+−=+

1y3)xu(1x3)uz(1u3)zy(1z3)yx(

2

2

2

2

. Secvenţa următoare

rezolvă primul sistem: »syms x y a » S=solve('x^2+a*x+(a+1)*y=-a','y^2+a*y+(a+1)*x=-a') S = x: [4x1 sym] y: [4x1 sym] “Câmpul” soluţiilor sistemului, S, este o matrice simbolică formată din cele două linii şi o coloană a soluţiilor pentru x, respectiv pentru y. Afişarea “desfăşurată” a soluţiilor, se poate realiza cu instrucţiunea, dată în linia de comandă: » Solutiile=[S.x,S.y] Solutiile = [ 1/2-1/2*(-3-8*a)^(1/2), 1/2+1/2*(-3-8*a)^(1/2)] [ 1/2+1/2*(-3-8*a)^(1/2), 1/2-1/2*(-3-8*a)^(1/2)] [-a-1/2+1/2*(4*a^2+1)^(1/2),-a-1/2+1/2*(4*a^2+1)^(1/2)] [ -a-1/2-1/2*(4*a^2+1)^(1/2), -a-1/2-1/2*(4*a^2+1)^(1/2)] Pentru rezolvarea celui de-al doilea sistem se foloseşte secvenţa: » syms x y z u »S=solve('(x+y)^2=3*z-1','(y+z)^2=3*u-1','(z+u)^2=3*x- 1','(u+x)^2=3*y-1')

Page 51: MATLAB IN MECANICA

MATLAB în ingineria mecanică

53

S = u: [2x1 sym] x: [2x1 sym] y: [2x1 sym] z: [2x1 sym] iar afişarea detaliată a soluţiilor este dată cu comanda: » solutii=[S.x,S.y,S.z,S.u] solutii = [3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2)] [3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2)]

REZOLVAREA ECUAŢIILOR DIFERENŢIALE Rezolvarea ecuaţiilor diferenţiale ordinare este posibilă în MATLAB, folosind funcţia dedicată dsolve(), în care, parametrii de intrare sunt ecuaţia diferenţială, scrisă simbolic (folosind convenţia de scriere a şirurilor de caractere), respectiv condiţiile la limită, dacă acestea există. Parametrii de intrare se separă prin caracterul virgulă. Diferenţiala de ordinul n se specifică în ecuaţie prin simbolul Dny, în care, D reprezintă simbolizarea diferenţialei, n reprezintă ordinul acesteia, iar y este integrala funcţiei, sau variabila dependentă (de exemplu, D2y reprezintă diferenţiala de ordinul doi a funcţiei y). Variabila independentă implicită, recunoscută de MATLAB, este t. Această variabilă poate fi schimbată, prin adăugarea, ca parametru de intrare, în şirul parametrilor funcţiei MATLAB dsolve(‘ecuatie’,’cond_la_lim_1’,’con_la_lim_2’,’variabila_indep_noua’). De

exemplu, rezolvarea ecuaţiilor diferenţiale: 1)0(y,yt21

9.0y =+

−=′ , respectiv

1)0(y,yx21

9.0y =+

−=′ , este similară, cu observaţia că, în cel de-al doilea caz,

este necesară marcarea ca variabilă independentă, a variabilei x. Acest lucru se va observa, în linia de comandă, în şirul parametrilor de intrare. Secvenţa MATLAB, pentru rezolvarea acestor ecuaţii diferenţiale, este: » syms x y t » y1=dsolve('Dy=-y*(0.9/(1+2*t))','y(0)=1') y1 = 1/(1+2*t)^(9/20)

Page 52: MATLAB IN MECANICA

MATLAB în ingineria mecanică

54

respectiv, pentru a doua ecuaţie: » y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x') y2 = 1/(1+2*x)^(9/20) Rezolvarea ecuaţiei a doua, fără a specifica faptul ca x este variabilă independentă, are ca rezultat: » y3=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1') y3 = exp(-9/10/(1+2*x)*t) Folosind convenţia de scriere comună, soluţiile sunt: ( ) 45.0

1 t21y −+= ;

( ) 45.02 x21y −+= respectiv

tx21

9.0

3 ey⋅

+−

= .

EXEMPLE DE UTILIZARE A OPERATORILOR ŞI FUNCŢIILOR MATLAB DE BAZĂ

1).-Calculul puterii unui număr:

Să se calculeze: 341

5 843 −+− În MATLAB, se foloseşte algoritmul:

» E1=3^5-4^(1/4)+8^(-3) ceea ce are ca rezultat:

E1 = 241.5877

2).-Calculul expresiilor cu numere iraţionale Să se calculeze expresiile:

;15E 32 = ;56,43E3 = 8

2

34 99239,88

24518E −⎥⎥⎦

⎢⎢⎣

⎡+⋅−=

Page 53: MATLAB IN MECANICA

MATLAB în ingineria mecanică

55

În MATLAB, se foloseşte algoritmul: » E2=15^(1/3) [Enter] E2 = 2.4662 » E3=sqrt(43.56) [Enter] E3 = 6.6000 » E4=((18-45*(2/88.9))^(1/3)+sqrt(23))^2-99^(1/8) [Enter] E4 = 52.4891 3).- Calculul expresiilor exponenţiale şi logaritmice Să se calculeze :

( )448

376

355 390logE;

51132002lgE;

239lnE;eE −=⎟

⎟⎠

⎞⎜⎜⎝

⎛⋅−=⎟

⎠⎞

⎜⎝⎛ −== −

⎥⎦

⎤⎢⎣

= 4321

9 eE

( )8

41255_823ln341411

312:321E3

125log3 55

105 −

⋅⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

⋅⎥⎥⎦

⎢⎢⎣

⎡−+−

−++=

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

Page 54: MATLAB IN MECANICA

MATLAB în ingineria mecanică

56

E8 = 3.2353

Pentru calculul expresiei ⎥⎦

⎤⎢⎣

= 4321

9 eE , se procedează astfel : -se introduce, de la tastatură: »x=[1,2;3,4]; -se determină valoarea expresiei, folosind funcţia exp »E9=exp(x) E9 =

2.7183 7.3891 20.0855 54.5982

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

funcţiei MATLAB exp(), matricei ⎥⎦

⎤⎢⎣

⎡4321

:

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

De observat că rezultatul este o matrice cu două linii şi două coloane, exact ca şi exponentul. Expresia E10 se calculează astfel:

»E10=(((1+2+3)/((12-3^5)/11)-(14+(34)^(1/5)… -log(23))^(1/3))*8^((log(125))/(log(5))))-sqrt(55)*(12-4^3)/(8) E10 = -1.2985e+003

OBSERVAŢII:

• Pentru calculul expresiilor iraţionale (radicali cu indice diferit de 2: a b

sau a cb ) se foloseşte algoritmul pentru calculul puterilor cu exponent

raţional : a1

b sau ac

b ;

• Pentru calculul exponenţialei ( xe ) nu se foloseşte operatorul putere (“^“);

Page 55: MATLAB IN MECANICA

MATLAB în ingineria mecanică

57

• Pentru calculul expresiilor logaritmice cu logaritmi în altă bază decât baza naturală ( ln x) sau 10 ( lg x ) se foloseşte formula de schimbare a bazei

logaritmului : alogblog

blogc

ca =

• MATLAB dispune de o serie de combinaţii, implicite, de taste pentru crearea comenzilor rapide (conform tabelului):

TASTA COMBINAŢIA

DE TASTE SEMNIFICAŢIA

↑ Ctrl+p Readuce linia anterioară (prin acţionarea repetata a tastei “săgeată sus” se

readuc toate liniile anterioare, în linia curentă)

↓ Ctrl+n Readuce linia următoare (prin acţionarea repetată a tastei “săgeată jos” se

readuc toate liniile “următoare”, în linia curentă) ← Ctrl+b Salt la stânga cu un caracter

→ Ctrl+f Salt la dreapta cu un caracter

Ctrl+→ Ctrl+r Salt la dreapta, peste un cuvânt

Ctrl+← Ctrl+l Salt la stânga, peste un cuvânt Home Ctrl+a Salt la începutul liniei de comandă End Ctrl+e Salt la sfârşitul liniei de comandă Esc Ctrl+u Şterge linia curentă Del Ctrl+d Şterge caracterul din dreapta cursorului Backspace Ctrl+h Şterge caracterul din stânga cursorului Ctrl+k Şterge de la cursor până la sfârşitul liniei de comandă curente.

APLICAŢII

• Să se introducă de la tastatură, următoarele matrici :

A= ⎥⎦

⎤⎢⎣

⎡3 4321

B=⎥⎥⎥

⎢⎢⎢

π6

9lg

918lg7ln2

5lne0 C=⎥⎥⎥

⎢⎢⎢

321

D=⎥⎥⎥

⎢⎢⎢

⎡ π

79ln355623102

3

4

Page 56: MATLAB IN MECANICA

MATLAB în ingineria mecanică

58

• Să se scrie numărul : 123,456789012345678901

în formatele: “scurt”, “lung”, “cu virgulă mobilă – scurt = eng. scurt”, “cu virgulă mobilă – lung =eng. lung”, “raţional”, “cu două zecimale exacte”.

• Fiind dată matricea :

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

π−−

⎟⎠⎞

⎜⎝⎛ −

=

2112ln

4e5

5412002loge

23e432.11234ln2

A4ln

43

5log

33

3

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

A1-din elementele de pe poziţiile: (1,5), (2,3), (2,5), (3,1), (3,3), (3,5), aranjate în toate variantele posibile(2 linii / 3 coloane; 3 linii / 2 coloane; 1 linie / 6 coloane; 6 linii / 1 coloană);

A2-din elementele de pe liniile 1 şi 3 coloanele 1, 3, 5; A3-din elementele de pe “diagonalele principale” cu 3 elemente; A4-din elementele de pe “diagonalele secundare” cu 2 elemente;

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

M=[1,2,3,4,5,6,7,8,9,10;-1,2,3,-4,5,-6,7,-8,9,-10;0,2,0,4,0,6,0,8,0,10;... -1,2,-3,4,-5,6,-7,8,-9,10;1,2,3,0,0,0,7,8,9,10;10,9,8,7,6,5,4,3,2,1]

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

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

ordine)

• Să se calculeze valoarea expresiei E:

23lg23xln2x83

6ln15eE 263

8lg+−⎟⎟

⎞⎜⎜⎝

+

−= , pentru x= ( )16elog 5ln3

3 +− .

Page 57: MATLAB IN MECANICA

MATLAB în ingineria mecanică

59

CAPITOLUL II

OPERAŢIILE ARITMETICE CU MATRICI

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

» A+B -adunare » A - B -scădere » A*B -înmulţire » A/B -împărţire la dreapta » A\B -împărţire la stânga » A^B -ridicare la putere » A' -transpunere

iar, operaţiile aritmetice cu tablouri de valori (considerăm tablourile de valori A şi B) au următoarea sintaxă:

» A.*B -înmulţire » A./B -împărţire la dreapta » A.\B -împărţire la stânga » A.^B -ridicare la putere » A.' -transpunere

Versiunea MATLAB 6 dispune de funcţii specifice pentru realizarea operaţiilor aritmetice cu matrici, respectiv, cu tablouri de valori:

a)-Funcţii MATLAB specifice operaţiilor cu matrici » A+B - plus(A,B) » A - B - minus(A,B) » A*B - mtimes(A,B) » A/B - mrdivide(A,B) » A\B - mldivide(A,B) » A^B - mpower(A,B) » A' - ctranspose(A) b)- Funcţii MATLAB specifice operaţiilor cu tablouri de valori A.*B - times(A,B)

Page 58: MATLAB IN MECANICA

MATLAB în ingineria mecanică

60

A./B - rdivide(A,B) A.\B - ldivide(A,B) A.^B - power(A,B) A.' - transpose(A)

ADUNAREA ŞI SCĂDEREA MATRICILOR Aceste operaţii se pot realiza dacă este respectată condiţia ca matricile să aibă aceeaşi dimensiune (exclus cazul în care se doreşte adunarea sau scăderea dintre o matrice şi un scalar, unde MATLAB realizează operaţia în modul următor: scalarul este adunat fiecărui element al matricei, fiind respectată regula de bază, din algebra elementară, în acest caz). Ex.:

Fie: a= ⎥⎦

⎤⎢⎣

⎡4321

; b= ⎥⎦

⎤⎢⎣

⎡8765

; c=2.

Să se calculeze:a+b; a-b;a+c. Rezolvare:Cu secvenţa MATLAB următoare, rezultă: » a=[1,2;3,4];b=[5,6;7,8];c=2; » a1=a+b [Enter] a1 = 6 8 10 12 » a2=a-b [Enter] a2 = -4 -4 -4 -4 » a3=a+c [Enter] a3 = 3 4 5 6

Ex.:

Fie: m= ⎥⎦

⎤⎢⎣

⎡4321

; n=⎥⎥⎦

⎢⎢⎣

−π

e17lne42

8lg

3

Page 59: MATLAB IN MECANICA

MATLAB în ingineria mecanică

61

Să se calculeze: M=m+n

Rezolvare: Cu secvenţa MATLAB » m=[1,2;3,4];n=[pi,sqrt(2),4^(1/3);exp(log10(8)),log(7),1-exp(1)] ; » M=m+n Rezultatul afişat de MATLAB este: ??? Error using ==> + Matrix dimensions must agree.

(Eroare la utilizarea operatorului ==> “ + “ Dimensiunile matricelor trebuie să fie identice) În MATLAB, versiunea 6 este posibilă adunarea unor matrici ale căror elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie două

matrici : ⎥⎥⎥

⎢⎢⎢

⎡=

333231

232221

131211

aaaaaaaaa

A şi ⎥⎥⎥

⎢⎢⎢

⎡=

333231

232221

131211

bbbbbbbbb

B . Pentru a se calcula

suma X=B+A, se declară elementele matricelor, ca simboluri literale: » syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21 b22 b23 b31 b32 b33; apoi se declară matricele A, respectiv B: » A = [a11 a12 a13; a21 a22 a23; a31 a32 a33] A = [ a11, a12, a13] [ a21, a22, a23] [ a31, a32, a33] » B=[b11 b12 b13; b21 b22 b23; b31 b32 b33] B = [ b11, b12, b13] [ b21, b22, b23] [ b31, b32, b33] Cu secvenţa MATLAB următoare se determină matricea X: » X=A+B X = [ a11+b11, a12+b12, a13+b13] [ a21+b21, a22+b22, a23+b23] [ a31+b31, a32+b32, a33+b33]

Page 60: MATLAB IN MECANICA

MATLAB în ingineria mecanică

62

Notă: De observat modul de afişare a matricilor simbolice: fiecare linie este încadrată între paranteze drepte. PRODUSUL VECTORIAL SI PRODUSUL SCALAR AL DOI VECTORI Produsul vectorilor (matrici cu o singura linie, respectiv o singură coloană), este definit diferit decât pentru matrici. Astfel doi vectori (a, b), având aceeaşi lungime, se pot inmulţi în orice ordine : a*b, respectiv b*a. De exemplu, considerând doi vectori daţi prin componente : » a=[1;2;3] a = 1 2 3 » b=[5,6,7] b = 5 6 7 produsul vectorial al acestora este : » prod_vect=a*b prod_vect = 5 6 7 10 12 14 15 18 21 iar produsul scalar al celor doi vectori este : » prod_scalar=b*a prod_scalar = 38 Dacă vectorii (a, b) sunt daţi simbolic: » syms a11 a21 a31 b11 b12 b13 » a_simbolic=[a11 ;a21; a31] a_simbolic = [ a11] [ a21] [ a31]

Page 61: MATLAB IN MECANICA

MATLAB în ingineria mecanică

63

» b_simbolic=[b11,b12,b13] b_simbolic = [ b11, b12, b13] atunci produsul vectorial, respectiv produsul scalar, al celor doi vectori sunt: » prod_vect_simbolic=a_simbolic*b_simbolic prod_vect_simbolic = [ a11*b11, a11*b12, a11*b13] [ a21*b11, a21*b12, a21*b13] [ a31*b11, a31*b12, a31*b13] » prod_scalar_simbolic=b_simbolic*a_simbolic prod_scalar_simbolic = a11*b11+a21*b12+a31*b13 PRODUSUL MATRICILOR Produsul a două matrici se simbolizează cu caracterul “ * “ (tastele “ Shift + 8 “ de pe tastatura literală, apăsate simultan, sau caracterul corespunzător de pe tastatura numerică).

Pentru ca produsul a două matrici să se poată realiza este necesar a se îndeplini următoarea condiţie esenţială: numărul de coloane ale primei matrici să fie egal cu numărul de linii ale celei de-a doua matrici. Astfel, dacă se înmulţesc două matrici a(m,n) şi b(n,p) se obţine o matrice c(m,p), această regulă aplicându-se şi în cazul înmulţirii unei matrici cu un vector-linie sau vector-coloană). Ex.:

Fie: ⎥⎥⎥⎥

⎢⎢⎢⎢

π

=

i85

4321

a ; ⎥⎥⎦

⎢⎢⎣

⎡ −−=

610987i21i233b ; c=2.

Să se calculeze produsele : a·b; b·a; a·c; b·c. Rezolvare:Cu secvenţa MATLAB următoare, rezultă: »a=[1,2;3,4;5,sqrt(8);i,pi];b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6];c=2; » a1=a*b [Enter] a1 = 17.7321 15 2i 3 - 2i 19 37.1962 27 6i 7 - 6i 45 31.2877 10.4558 10i 7.8284 -10i 51.9706 25.1327+1.7321i 28.2743-3i -2 5.1416+i 18.8496+7i

Page 62: MATLAB IN MECANICA

MATLAB în ingineria mecanică

64

» a2=b*a [Enter] ??? Error using Inner matrix dimensions must agree. Eroare la utilizarea operatorului * Matricile trebuie să respecte condiţia dimensională

» a3=a*c [Enter] a3 = 2.0000 4.0000 6.0000 8.0000 10.0000 5.6569 0 + 2.0000i 6.2832 » a4=b*c [Enter] a4 = 3.4641 -6 4i 2 - 4i 14 16.0000 18 0 2 12

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

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

Înmulţirea a două matrici simbolice, ⎥⎥⎥

⎢⎢⎢

⎡=

333231

232221

131211

aaaaaaaaa

A şi

⎥⎥⎥

⎢⎢⎢

⎡=

333231

232221

131211

bbbbbbbbb

B ., se realizează astfel:

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

Page 63: MATLAB IN MECANICA

MATLAB în ingineria mecanică

65

» A = [a11 a12 a13; a21 a22 a23; a31 a32 a33] A = [ a11, a12, a13] [ a21, a22, a23] [ a31, a32, a33] » B=[b11 b12 b13; b21 b22 b23; b31 b32 b33] B = [ b11, b12, b13] [ b21, b22, b23] [ b31, b32, b33] Cu secvenţa MATLAB următoare se determină matricea-produs X=A*B: » X=A*B X= [a11*b11+b21*a12+a13*b31,b12*a11+a12*b22+a13*b32,b13*a11+b23*a12+a13*b33] [a21*b11+b21*a22+a23*b31,b12*a21+a22*b22+a23*b32,b13*a21+b23*a22+a23*b33] [a31*b11+b21*a32+a33*b31,b12*a31+a32*b22+a33*b32,b13*a31+b23*a32+a33*b33] ÎMPĂRŢIREA LA DREAPTA

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

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

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

Ex.:

Fie: a= ⎥⎦

⎤⎢⎣

⎡4321

; b= ⎥⎦

⎤⎢⎣

⎡8765

;

Să se calculeze:a/b; b/a. Cu secvenţa MATLAB următoare, rezultă: » a=[1,2;3,4];b=[5,6;7,8]; » a1=a/b [Enter]

Page 64: MATLAB IN MECANICA

MATLAB în ingineria mecanică

66

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

Fie: a= ⎥⎦

⎤⎢⎣

⎡4321

; b=⎥⎥⎦

⎢⎢⎣

⎡ −−610987i21i233 .

Să se calculeze câtul : d=a/b. Cu secvenţa MATLAB următoare, rezultă:

» a=[1,2;3,4] ; b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6] ; » d=a/b [Enter] MATLAB va afişa următorul răspuns:

??? Error using ==> / Matrix dimensions must agree. ???Eroare la utilizarea operatorului /

Dimensiunile matricilor trebuie sa fie adecvate

Pentru împarţirea la dreapta, a două matrici simbolice, ⎥⎦

⎤⎢⎣

⎡=

2221

1211

aaaa

A şi

[ ]21 bbB = , se procedează astfel:

• se declară elementele matricelor, ca simboluri literale » syms a11 a12 a21 a22 b1 b2;

• se declară matricile A, respectiv B: » A = [a11 a12; a21 a22] A = [ a11, a12] [ a21, a22]

Page 65: MATLAB IN MECANICA

MATLAB în ingineria mecanică

67

» B=[b1 b2] B = [ b1 b2] Cu secvenţa,MATLAB, următoare se determină matricea- X=B/A: » X=B/A X = [ -(a21*b2-b1*a22)/(a11*a22-a12*a21), (a11*b2-a12*b1)/(a11*a22-a12*a21)]

Soluţiile sistemului de ecuaţii:⎩⎨⎧

=⋅+⋅=⋅+⋅

1222211

1122111

baxaxbaxax

se obţin cu

următoarele comenzi » x1 = X(1) x1 = -(a21*b2-b1*a22)/(a11*a22-a12*a21) » x2 = X(2) x2 = (a11*b2-a12*b1)/(a11*a22-a12*a21) ÎMPĂRŢIREA LA STÂNGA Operaţia de împărţire la stânga este simbolizată cu operatorul “\” (backslash), reprezentând, în termeni aritmetici, produsul dintre inversa primei matrici şi cea de-a doua matrice. Astfel, condiţia necesară (dar nu suficientă) pentru ca o matrice A să se “ împartă “ la stânga prin matricea B, este ca matricea A să admită inversă şi în plus această inversă trebuie să îndeplinească şi condiţia necesară ca două matrici să se poată înmulţi. Ca o concluzie, se va încerca împărţirea la stânga, sau la dreapta, a două matrici, numai în cazul în care cele două matrici sunt pătratice, şi dacă matricea, la care se împarte, este nesingulară, condiţia pentru înmulţire să fie îndeplinită (numărul de coloane ale primei matrici egal cu numărul de linii ale celei de-a doua matrici ). Ex.6:

Fie: A= ⎥⎦

⎤⎢⎣

⎡4321

; B= ⎥⎦

⎤⎢⎣

⎡8765

;

Să se calculeze:A\B; B\A.

Page 66: MATLAB IN MECANICA

MATLAB în ingineria mecanică

68

Cu secvenţa MATLAB următoare, rezultă: » A=[1,2;3,4];b=[5,6;7,8]; » A1=A\B [Enter] A1 = -3.0000 -4.0000 4.0000 5.0000 » A2=B\A [Enter] A2 = 5.0000 4.0000 -4.0000 -3.0000

În MATLAB (versiuni superioare versiunii 5.3) este posibilă împărţirea unor matrici ale căror elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie două matrici, A şi B, ale căror elemente sunt date simbolic

A(2x2)=[aij], B(2x3)=[bik]: ⎥⎦

⎤⎢⎣

⎡=

2221

1211

aaaa

A şi ⎥⎦

⎤⎢⎣

⎡=

232221

131211

bbbbbb

B . Se cere

matricea X=B/A. Cu secvenţa MATLAB următoare se determină matricea X, ca fiind câtul simbolic al matricilor A şi B:

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

PRODUSUL KRONECKER Produsul Kronecker este cea mai mare matrice formată din toate produsele posibile realizate între elementele a două matrici (nu trebuie confundat “Produsul Kronecker” cu “simbolul Kronecker” sau “delta Kronecker”, a cărei exprimare este

dată de:⎩⎨⎧

≠=

=δkipentru0kipentru1

ik ). Această matrice este utilizată în calculul

tensorial, în teoria deformării elastice, în teoria deformării plastice, respectiv în

Page 67: MATLAB IN MECANICA

MATLAB în ingineria mecanică

69

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

ibi

ia bvavv ⋅=⋅=

Toate mărimile invariante se numesc tensori (un exemplu de tensor este tensorul tensiunilor care, dat prin componente, se reprezintă prin matricea

componentelor, într-un sistem de axe x, y, z: ⎥⎥⎥

⎢⎢⎢

στττστττσ

zyzxz

yzyxy

xzxyx

T , acesta

caracterizând starea de eforturi unitare, a unui punct situat pe o suprafaţă oarecare a corpului supus acţiunii unor forţe exterioare). Un scalar este tensor, dacă poate fi scris ca produsul scalar u·v a doi vectori:

( )

)vector(1ordinuldetensorgTT

)scalar(0ordinuldetensorvuT

ii)1(

0

−=

−⋅=,

unde iT sunt coordonatele tensorului în raport cu baza gi. Alte exemple de tensori şi deviatori:

• Tensorul sferic al tensiunilor:

[ ]⎥⎥⎥

⎢⎢⎢

σσ

σ=σ

m

m

m

000000

S ;3

zyxm

σ+σ+σ=σ ;

• Deviatorul tensiunilor:

[ ]⎥⎥⎥⎥

⎢⎢⎢⎢

σ−στττα−στττσ−σ

mzyzxz

zymyxy

zxyxmx

D ;

[ ] [ ] [ ]σσ += DST r ;

Page 68: MATLAB IN MECANICA

MATLAB în ingineria mecanică

70

• Invarianţii eforturilor unitare: zyx1 σ+σ+σ=Δ ( )xz

2zy

22yxxzzyyx2 τ+τ+τ−σσ+σσ+σσ=Δ

2

yxz2

zxy2

zyxxzzyyxzyx3 2 σσ−σσ−σσ−σσσ+σσσ=Δ care, în funcţie de tensiunile normale principale 321 , , σσσ , sunt :

3213

1332212

3211

σσσ=Δ

σσ+σσ+σσ=Δ

σ+σ+σ=Δ

• Tensorul deformaţiilor specifice:

[ ]

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

εγγ

γωεγ

γγε

zyzxz

zyyxy

zxyxx

21

21

21

21

21

21

T

• Tensorul sferic al deformaţiilor:

[ ]⎥⎥⎥

⎢⎢⎢

εε

ε=ε

m

m

m

000000

S ; 3

zyxm

ε+ε+ε=ε ;

• Deviatorul deformaţiilor specifice:

[ ]

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

ε−εγγ

γε−εγ

γγε−ε

mzyzxz

zymyxy

zxyxmx

21

21

21

21

21

21

D ;

Page 69: MATLAB IN MECANICA

MATLAB în ingineria mecanică

71

Produsul Kronecker se realizează cu funcţia MATLAB kron(X,Y), rezultatul fiind obţinut după următoarea regulă de calcul:

⎥⎥⎥

⎢⎢⎢

Y*)n,m(XY*)2,m(XY*)1,m(X

Y*)n,1(XY*)2,1(XY*)1,1(X

K

K

K

De exemplu, produsul Kronecker al două matrici ⎥⎦

⎤⎢⎣

⎡=

654321

X ,

⎥⎦

⎤⎢⎣

⎡=

4321

Y este:

» X=[1,2,3;4,5,6]; Y=[1,2;3,4]; » kron(X,Y) ans = 1 2 2 4 3 6 3 4 6 8 9 12 4 8 5 10 6 12 12 16 15 20 18 24 » kron(Y,X) ans = 1 2 3 2 4 6 4 5 6 8 10 12 3 6 9 4 8 12 12 15 18 16 20 24 FUNCŢIA PUTERE ATAŞATĂ UNEI MATRICI Operaţia de calcul a puterii unei matrici se simbolizează cu operatorul “^” (Shift + 6;):

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

Page 70: MATLAB IN MECANICA

MATLAB în ingineria mecanică

72

Dacă b este un scalar iar c este o matrice atunci calculul puterii cb se realizează folosind valorile proprii ale matricei c respectiv ale scalarului b. Obs. Operaţia are sens numai dacă matricea b este pătratică iar c un scalar. Ex.7:

Fie: a= ⎥⎦

⎤⎢⎣

⎡4321

; 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 următoarea ordine: se determină inversa matricei a după care rezultatul se ridică la puterea |c| (valoarea absolută a scalarului c). TRANSPUNEREA MATRICILOR

Transpusa unei matrici x(i, j) (i linii şi j coloane), este matricea x1(j, i) (j linii şi i coloane), şi se determină, în MATLAB, folosind, pentru simbolizarea ope- raţiei, caracterul apostrof : “ ‘ “. De exemplu, pentru matricea x :

» x=[1,2,3;4,5,6] ; transpusa x1 este determinată Cu secvenţa MATLAB următoare, rezultă:

Page 71: MATLAB IN MECANICA

MATLAB în ingineria mecanică

73

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

Determinantul unei matrici

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

ce, matricele cu număr de linii diferit de numărul de coloane, « tablourile », permit doar calculul « minorilor ».

Calculul determinantului unei matrici se realizează cu funcţia det( ) şi se apelează cu sintaxa:

D = det(X)

Ex: Să se calculeze determinanţii următoarelor matrici:

⎥⎦

⎤⎢⎣

⎡=

4321

A ⎥⎥⎥

⎢⎢⎢

⎡=

987654321

B ⎥⎥⎦

⎢⎢⎣

⎡ −−=

610987i21i233C .

Cu secvenţa MATLAB următoare, rezultă: » A= [1,2;3,4];B=[1,2,3;4,5,6 ;7,8,9];C=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6]; » A1 = det(A) A1 = -2; » B1 = det(B) B1 = 0 » C1 = det(C) În cazul C1 = det(C), MATLAB returnează următorul mesaj de eroare (datorat dimensiunii matricei C): ??? Error using ==> det Matrix must be square. ??? Eroare la utilizarea funcţiei det () Matricea trebuie să fie pătratică

Page 72: MATLAB IN MECANICA

MATLAB în ingineria mecanică

74

În MATLAB(versiunile superioare versiunii 5.3), este disponibil calculul determinantului unei matrici ale cărei elemente sunt simboluri literale declarate cu

funcţia syms. De exemplu, pentru calculul determinantului matricei ⎥⎦

⎤⎢⎣

⎡=

dcba

D se

poate utiliza următoarea secvenţă : » syms a b c d; »D1= det([a, b; c, d]) care returnează următoarea “valoare”: »D1= a*d - b*c

Similar este cazul matricei ⎥⎦

⎤⎢⎣

⎡=

113/13/2

A , unde se poate utiliza

următoarea secvenţă:

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

[ 2/3, 1/3] [ 1, 1]

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

Obs : Determinantul unei matrici este utilizabil în consideraţii teoretice şi în anumite tipuri de calcule simbolice, dar este, datorită scalării şi erorilor de aproximare, mai puţin utilizabil în calcule numerice.

CALCULUL INVERSEI

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

Page 73: MATLAB IN MECANICA

MATLAB în ingineria mecanică

75

sa fie, cel putin teoretic, identică cu X = A\B iar, Y = B*inv(A) să fie identică cu Y = B/A. Utilizarea operatorilor aritmetici « împărţire la stânga » şi « împărţire la dreapta » este preferată utilizării inversei matricei, datorită timpului de calcul mai redus, a. volumului de memorie cerută şi a unor proprietăţi de detecţie a erorilor mai bune. Prin definiţie, inversa unei matrici pătratice A(i,i), este matriea A-1, care satisface relaţia:( A)*(A-1)=I, unde I este matricea unitate (matricea cu elementele de pe diagonala principală egale cu unitatea, respectiv celelalte elemente egale cu zero). Inversa unei matrici se calculează cu funcţia MATLAB inv (), şi se apelează cu sintaxa: Y = inv(X) Funcţia se utilizează frecvent pentru rezolvarea sistemelor de ecuaţii liniare A*X=B, sau X*A=B soluţia sistemului este X=inv(A)*B, respectiv X=B*inv(A). Ex. :

Se cere inversa matricei: A = ⎥⎦

⎤⎢⎣

⎡− 11

12.

Cu secvenţa MATLAB următoare, rezultă: » A = [2, 1 ; -1, 1] ; » B = inv(A) B=

0.3333 -0.3333 0.3333 0.6667

PSEUDO- INVERSA

Matricile rectangulare (tablourile de valori), nu admit inverse şi nici calculul determinanţilor. Pentru acest tip de matrici se poate utiliza pseudo- inversa Moore-Penrose, care se calculează cu funcţia pinv(). De exemplu, pentru matricea

⎥⎥⎥

⎢⎢⎢

⎡=

768249

C se va calcula pseudoinversa cu următoarea secvenţă MATLAB :

»C=[9,4;2,8;6,7] ; »P=pinv(C)

P = 0.1159 -0.0729 0.0171 -0.0534 0.1152 0.0418

Page 74: MATLAB IN MECANICA

MATLAB în ingineria mecanică

76

Printr-un calcul simplu se poate observa că produsul P*C reprezintă matricea unitate de ordinul doi: »I=P*C I= 1.0000 0.0000 0.0000 1.0000 în timp ce, produsul C*P este o matrice de ordinul 3x3, dar nu matricea unitate : »Q=C*P Q= 0.8293 -0.1958 0.3213 -0.1958 0.7754 0.3685 0.3213 0.3685 0.3952 RANGUL MATRICEI

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

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

Funcţia rank, apelată cu sintaxa r = rank (X, tol), returnează numărul de valori singulare ale lui X, mai mari decât parametrul opţional tol. Ex.:

Să se determine rangul matricei A = ⎥⎥⎥

⎢⎢⎢

−−−

1113533313

4523.

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

treilea ai matricei A sunt nuli:

Page 75: MATLAB IN MECANICA

MATLAB în ingineria mecanică

77

1353313523

−−

−=

11133333

453

−−

−=

1153313

423−− =

11135331

452

−−−

− = 0

şi, deoarece, există minori de ordinul al doilea nenuli, de exemplu 13

23−

=-9≠0,

rezultă că rangul matricei A este: rang A = 2 Acest rezultat se obţine Cu secvenţa MATLAB următoare, rezultă: » A = [3,2,-5,4;3,-1,3,-3;3,5,-13,11];

» k = rank(A) k = 2

CONDITIONAREA UNEI MATRICI

Importanţa cunoaşterii condiţionării unei matrici decurge din faptul că rezultatele obţinute prin calcul numeric corespund întotdeauna unei probleme perturbate, aceasta datorându-se, în special erorilor de rotunjire, a calculelor cu precizie ridicată, respectiv, se datorează sensibilităţii preciziei de calcul în timpul rezolvării sistemelor liniare. Determinarea condiţionării are la bază teoria matematică a perturbaţiilor. Se spune că o funcţie f(x) este rău- condiţionată dacă pentru un x1 "apropiat" de x, funcţia f(x1) diferă "mult" de f(x). Altfel, o funcţie se spune că este bine condiţionată dacă pentru un x1 "apropiat" de x, funcţia f(x1) este "apropiată" de f(x). Trebuie remarcat că termenii "apropiat" şi "mult" sunt vagi, motiv pentru care este necesară utilizarea numerelor de condiţionare.

Numărul de condiţionare indică sensibilitatea soluţiei unui sistem de ecuaţii liniare faţă de perturbaţiile generate de calculele cu coeficienţii ecuaţiilor (calculul inversei matricei coeficienţilor necunoscutelor, de exemplu), şi dă indicaţii asupra preciziei rezultatelor la inversarea matricelor şi rezolvarea ecuaţiilor liniare. O matrice bine-condiţionată este o matrice relativ insensibilă la mici perturbaţii.

Pentru un sistem de ecuaţii liniare Ax=B, dacă matricea A este cunoscută şi nu este afectată de erori, dar vectorul B, este afectat, atunci, considerând o perturbare a acestuia evaluată la mărimea Bδ (vectorul perturbaţiilor), vectorul soluţie x devine xx δ+ , iar sistemul perturbat este :

( ) BBxxA δ+=δ+ , sau BAx 1δ=δ − , deci B Ax 1 δ≤δ −

Page 76: MATLAB IN MECANICA

MATLAB în ingineria mecanică

78

Egalitatea din ultima relaţie, se obţine numai pentru anumiţi vectori Bδ . Aplicând norma ambilor membri ai egalităţii A·x=B, se obţine : x AB ≤ , şi, folosind câteva calcule simple de înmulţire şi identificare, se obţine (presupunând că 0B ≠ ) :

BB

A Axx 1- δ

≤δ

în care A-1 este matricea inversă a lui A, obţinută prin calcule (afectate de erori de rotunjire, adică IAA-1 ≠ ). Astfel, pentru o matrice nesingulară A, pozitiv definită, se defineşte numărul de condiţionare calculat ca raportul dintre cea mai mare şi cea mai mică valoare proprie a acesteia :

1A A)A.(cond2

11- ≥λλ

==

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

BB

)A.(condxx δ

⋅≤δ

în care BBδ

măsoară incertitudinea relativă existentă în vectorul B (de exemplu,

dacă elementele vectorului B sunt date cu trei cifre semnificative, atunci BBδ

este

de ordinul 10-3 sau 10-4), iar xxδ

reprezintă incertitudinea relativă existentă în

vectorul x, şi este determinată de incertitudinea existentă în vectorul B. Dacă, atât matricea A cât şi vectorul B sunt afectati de erori, atunci sistemul se scrie sub forma : ( )( ) BBxxAA δ+=δ+δ+ ⇒ ( ) ( )AxBAAx 1 δ−δδ+=δ −

Page 77: MATLAB IN MECANICA

MATLAB în ingineria mecanică

79

Dacă vectorul termenilor liberi este determinat exact şi neafectat de erori, iar matricea A are coeficienţi perturbaţi de erori, atunci sistemul Ax=B devine : ( )( ) BxxAA =δ+δ+ , de unde rezultă : ( ) ( ) BAAxx 1−δ+=δ+ sau ( )[ ]BAAAx 11 −− −δ+=δ Ultima relaţie, aranjată, devine : ( )( )xxAAx 1 δ+δ−=δ − , pentru care, dacă se aplică norma, se obţine :

xx A A x -1 δ+δ≤δ sau ( ) AA

A cond. xx

x δ≤

δ+δ

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

» cond(X)

Page 78: MATLAB IN MECANICA

MATLAB în ingineria mecanică

80

O funcţie mai performantă care permite calculul numărului de condiţionare este rcond() şi se apelează cu sintaxa:

» rcond(X)

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

Dacă matricea X este bine condiţionată, rcond are valoarea aproximativ 1.0, iar dacă este slab condiţionată, atunci rcond este aproximativ 0,0.

Estimarea celui mai mic număr de condiţionare se face cu funcţia condest(), şi se apelează cu sintaxa:

» condest(X) Ex.:

Calculaţi numerele de condiţionare pentru sistemul « iniţial » de ecuaţii:

şi pentru sistemul "perturbat":

În MATLAB:

• -matricea sistemului iniţial: » A1=[6 6.917;1 1.152];

• matricea sistemului « perturbat » : » A2=[6 6.912;1 1.152];

Page 79: MATLAB IN MECANICA

MATLAB în ingineria mecanică

81

• -numerele de condiţionare :

» C1=cond(A1); c2=cond(A2) C1=1.7234e+004 c2=inf

» D1=condest(A1); d2=condest(A2) D1=2,0845e+004 d2=2.7129e+017

» R1=rcond(A1); r2=rcond(A2); R1=5.4453e-005 r2=4.1842-018

De aici, rezultă că sistemul este slab condiţionat. Acest lucru se verifică şi prin rezolvarea celor două sisteme, cu valori "apropiate" ale coeficienţilor (pentru care există diferenţă la a patra cifră) :

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

X1=[ 7.3158 -5.4000]

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

Condiţionarea slabă a matricei se reflectă în diferenţele foarte mari ale soluţiilor: de exemplu, prima soluţie, pentru sistemul ne-perturbat, este x1=7,3158, în timp ce pentru sistemulperturbat, soluţia x1= - 8,1041 · 1013. Ex.: Se vor determina numerele de condiţionare pentru sistemul « iniţial » de ecuaţii:

⎩⎨⎧

=+=+

45,3x15x34,2x123,23x45

21

21

respectiv pentru sistemul "perturbat":

⎩⎨⎧

=+=+

45,3x15x34,2x124,23x45

21

21

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

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

Page 80: MATLAB IN MECANICA

MATLAB în ingineria mecanică

82

»d=condest(a) d = 4.8071 » d1=condest(a1) d1 = 4.8072 » r1=rcond(a) r1 = 0.2435 » r2=rcond(a1) r2 = 0.2434

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

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

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

Page 81: MATLAB IN MECANICA

MATLAB în ingineria mecanică

83

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

⎪⎪⎩

⎪⎪⎨

=+++

=+++=+++

nnnn22n11n

2nn2222121

1nn1212111

bxaxaxa

bxaxaxabxaxaxa

K

M

K

K

, în care ⎥⎥⎥⎥

⎢⎢⎢⎢

=

nn2n1n

n22221

n11211

aaa

aaaaaa

A

K

M

K

K

, este

matricea coeficienţilor; ⎥⎥⎥⎥

⎢⎢⎢⎢

=

n

2

1

x

xx

xM

este vectorul necunoscutelor; ⎥⎥⎥⎥

⎢⎢⎢⎢

=

n

2

1

b

bb

BM

este

vectorul termenilor liberi, ai sistemului, metoda generală de transformare într-un sistem echivalent, “Metoda de eliminare a lui Gauss”, se prezintă în continuare. Prima transformare aplicată sistemului Ax=B, are ca efect eliminarea necunoscutei x1 din celelalte n-1 ecuaţii, adunând prima ecuaţie la următoarele n-1,

înmulţită cu ( )

( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛ −1

11

11i

a

a, obţinându-se un nou sistem de ecuaţii: ( ) ( )11 BxA = . În a

doua transformare, se foloseşte a doua ecuaţie, din sistemul ( ) ( )11 BxA = , înmulţită

cu ( )

( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛ −2

22

22i

a

a, pentru eliminarea necunoscutei x2 din ultimele n-2 ecuaţii ale acestui

sistem, obţinându-se un nou sistem: ( ) ( )22 BxA = . Se observă că înainte de eliminarea necunoscutei xk, sistemul echivalent, obţinut după eliminarea necunoscutelor x1, x2, …, xk-1, poate fi scris sub forma: ( ) ( )kk BxA = , k=1,2, …, n

Page 82: MATLAB IN MECANICA

MATLAB în ingineria mecanică

84

a cărui descriere analitică este:

( ) ( )( )kkj,iaA = , ( )

( )( )

( ) ⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

=

kn

k2

k1

k

b

bb

BM

, iar elementele matricei ( )kA sunt:

( )( )

( )( )

( )( )

⎪⎪⎪

⎪⎪⎪

≥≥−−

≤≥−≤

=

−−−

−−

−−−

kj k,i ,aa

aa

1-kj k, i ,01ki ,a

a

1kj,1k1k

1k,1k

1k1k,i1k

j,i

1kj,i

kj,i , respectiv, elementele

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

( )

( )

( )( )

( )( )

⎪⎪⎩

⎪⎪⎨

≥−

−≤

= −−−

−−

−−−

ki,ba

ab

1ki,bb 1k

1k1k1k,1k

1k1k,i1k

i

1ki

ki

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

( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( )

( ) ( ) ( )

( ) ( )⎪⎪⎪⎪

⎪⎪⎪⎪

=

=++

=++++=+++++

nnn

nnn

kkn

kknk

kkk

22n

2n2k

2k22

222

11n

1n1k

1k12

1121

111

bxa

bxaxa

bxaxaxa bxaxaxaxa

MK

M

KK

KK

Această metodă presupune realizarea unui număr mare de operaţii de înmulţire, respectiv de împărţire sau pentru aflarea necunoscutelor, dar nu este folosită o mare parte a memoriei calculatorului pentru aceste calcule. Se cunoaşte că o matrice nxnA ℜ∈ poate fi scrisă sub forma uni produs L·U de două matrice, unde matricea L este inferior triunghiulară şi U superior

Page 83: MATLAB IN MECANICA

MATLAB în ingineria mecanică

85

triunghiulară, dacă [ ] [ ] 0Adet , ,0aaaa

det ,0adet2221

121111 ≠≠⎥

⎤⎢⎣

⎡≠ K .

Descompunerea este unică dacă elementele matricei L sau U, de pe diagonala principală sunt specificate astfel:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

=

⎥⎥⎥⎥

⎢⎢⎢⎢

==

− nn

n333

n22322

n1131211

1n,n2n1n

3231

21

nn2n1n

n22221

n11211

u0000

uu00uuu0uuuu

1lll

001ll0001l00001

aaa

aaaaaa

LUA

M

K

K

K

K

M

K

M

K

K

Dacă se relizează produsul dintre cele două matrici L şi U şi se face identificarea termenilor, se obţin n2 ecuaţii neliniare cu n2 necunoscute. Se observă că : n11n12121111 au , ,au ,au === K iar, dacă se determină elementele primei coloane de sub diagonala principală, se obţin ecuaţiile: 1n11n1211131211121 asl , ,asl ;asl === K Forma generală a ecuaţiilor din care rezultă elementele liniei k, din matricea U, este:

=

=+++

=

=

=+++

=+

−=

−=

−=

⎪⎪⎪⎪⎪

⎪⎪⎪⎪⎪

=+

=+

=+

1k

1jjnkjknkn

1k

1j1k,jkj1k,k1k,k

1k

1jjkkjk,kk,k

1k

1jknknjnkj

1k

1j1k,k1k,k1k,jkj

1k

1jkk1k,kk,jkj

ulau

ulau

ulau

auul

auul

auul

MM

Page 84: MATLAB IN MECANICA

MATLAB în ingineria mecanică

86

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

⎟⎟

⎜⎜

⎛−=

⎟⎟

⎜⎜

⎛−=

⎟⎟

⎜⎜

⎛−=

⎪⎪⎪⎪⎪

⎪⎪⎪⎪⎪

=+

=+

=+

=

=+++

=+++

=

=+++

=+++

1k

1jjkj,nk,n

k,kk,n

1k

1jjkj,2kk,2k

k,kk,2k

1k

1jjkj,1kk,1k

k,kk,1k

1k

1jk,nk,kk,nk,jj,n

1k

1jk,2kk,kk,2kk,jj,2k

1k

1jk,1kk,kk,1kk,jj,1k

ulau

1l

ulau

1l

ulau

1l

aulul

aulul

aulul

MM

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

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

Toate aceste metode de factorizare se apelează, în MATLAB, utilizând funcţiile specifice: chol(), lu() respectiv qr(). Caracteristica, valabilă în toate metodele, o constituie utilizarea matricei triunghiulare ale carei elemente, situate deasupra sau sub diagonala principală, sunt toate egale cu zero. Toate sistemele de ecuaţii liniare, care permit utilizarea matricilor triunghiulare (factorizări), se rezolvă uşor folosind pre- sau post-substituţia. FACTORIZAREA CHOLESKY Factorizarea Cholesky este o metodă utilizată pentru rezolvarea unui sistem de ecuaţii liniare de forma: SX=B, unde S este o matrice pozitiv definită (o matrice este pozitiv definită dacă elementele diagonalei principale sunt toate pozitive, iar celelalte elemente componente ale matricei nu sunt “prea mari”). Reprezentarea schematică, a factorizării Cholesky, este prezentată în figura alăturată, cu ajutorul blocurilor de calcul DSP (Digital Signal Processing), proiectate, special pentru procesarea semnalelor digitale, pentru a fi folosite în mediile de simulare dinamică în SIMULINK (versiunea MATLAB superioară versiunii 5.3):

Page 85: MATLAB IN MECANICA

MATLAB în ingineria mecanică

87

Prin factorizare Cholesky, o matrice S, simetrică şi pozitiv definită, se exprimă ca produsul dintre o matrice superior triunghiulară, L (elementele superioare diagonalei principale, sunt diferite cu zero), şi transpusa acesteia, L’: S=L’*L Factorizarea Cholesky se realizează cu funcţia MATLAB chol(), care se apelează cu una din sintaxele :

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

Pentru exemplificare, se va folosi ca matrice “de intrare”, matricea pascal de ordinul 7: » S=pascal(7)

S = 1 1 1 1 1 1 1 1 2 3 4 5 6 7 1 3 6 10 15 21 28 1 4 10 20 35 56 84 1 5 15 35 70 126 210 1 6 21 56 126 252 462 1 7 28 84 210 462 924 » L=chol(S)

Page 86: MATLAB IN MECANICA

MATLAB în ingineria mecanică

88

L = 1 1 1 1 1 1 1 0 1 2 3 4 5 6 0 0 1 3 6 10 15 0 0 0 1 4 10 20 0 0 0 0 1 5 15 0 0 0 0 0 1 6 0 0 0 0 0 0 1

Condiţiile pentru factorizarea Cholesky sunt:

i. Matricea S să fie pozitiv definită ii. S= (Lt )* (L) şi det(S)>0 (At este notaţia pentru

matricea transpusă matricei A); iii. Există o matrice unică L, superior triunghiulară,

nesingulară, care satisface relaţia:S=Lt*L

Un sistem de ecuaţii lineare S·X=B devine: Rt·R·X=B iar soluţia acestuia presupune rezolvarea succesivă a sistemelor:

RtY=B şi RX=Y.

Întrucât, operatorul MATLAB “împărţire la stânga” (backslash) recunoaşte ca operanzi matricile triunghiulare, rezolvarea sistemelor de ecuaţii lineare se poate realiza folosind: »X=R\(R’\B) Ex.: Fie sistemul de ecuaţii:

⎪⎩

⎪⎨

−=+−−=−+−

=+−

1x7x5x22x5x8x

1x2xx9

321

321

321

Soluţiile acestui sistem, folosind factorizarea Cholesky, se găsesc prin următoarea secvenţă:

» A=[9,-1,2;-1,8,-5;2,-5,7]; B=[1;-2;-1];

Page 87: MATLAB IN MECANICA

MATLAB în ingineria mecanică

89

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

În Matlab (versiuni superioare versiunii 5.3) este posibilă rezolvarea sistemelor simetrice, prin metoda Cholesky, folosind Solver-ul Cholesky din pachetul de programe DSP Blockset Simulink. De exemplu, pentru rezolvarea

sistemeului de ecuaţii liniare dat prin: ⎪⎩

⎪⎨

−=+−−=−+−

=+−

1x7x5x22x5x8x

1x2xx9

321

321

321

, se foloseşte

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

Ex.: Se cere factorul Cholesky al matricei:

⎥⎥⎥⎥

⎢⎢⎢⎢

−−

−−

=

911019011091

0119

A

Cu secvenţa MATLAB următoare, rezultă: »A=[9,1,-1,0;1,9,0,-1;-1,0,9,-1;0,-1,1,9]; » [r,p]=chol(A)

9618,20003396,09812,2003354,00373,09814,20

03333,03333,00000,3r

−−

=

Page 88: MATLAB IN MECANICA

MATLAB în ingineria mecanică

90

p=0 (matrice pozitiv definită) Soluţie dată folosind pachetul de programe DSP Blockset din Simulink:

Temă:Să se rezolve sistemul:

⎪⎪⎩

⎪⎪⎨

=+++−=+++−=+++

=+++

4t3z2y7x21tzyx

2t3z3yx21tzy2x

prin factorizare Choleski.

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

Simulink:

Solverul Cholesky va realiza, în acest caz o rezolvare a sistemului de ecuaţii, dar activarea “simulării” va avea ca rezultat afişarea în linia de comandă a

Page 89: MATLAB IN MECANICA

MATLAB în ingineria mecanică

91

MATLAB, a mesajului “Warning: Input matrix to block 'Model de rezolvare/Solverul Cholesky /Cholesky Factorization' is not positive definite.”. Acest mesaj avertizează utilizatorul asupra faptului că matricea de intrare, din fişierul “model” Model de rezolvare, nu este pozitiv definită. În acest caz soluţia dată prin Solverul Cholesky este eronată, întrucât matricea coeficienţilor nu este pozitiv definită. Totuşi, rădăcinile verifică prima ecuaţie, cu eroare la a patra zecimală. Rezolvarea sistemului prin determinarea matricei inverse (matricea coeficienţilor fiind nesingulară, iar rangul matricei extinse este egal cu rangul matricei coeficienţilor, aşadar sistemul admite soluţie unică), are ca rezultat vectorul soluţie: X=[ -5; 2; 6; -4;]. Această soluţie verifică toate ecuaţiile sistemului. Notă:-Dacă se încearcă determinarea factorului Cholesky, prin funcţia MATLAB chol([1,2,1,1;2,1,3,3;1,1,1,1;2,7,2,3]), va fi afişat un mesaj de eroare: (??? Error using ==> chol Matrix must be positive definite.) ??? Eroare la utilizarea operatorului chol Matricea trebuie să fie pozitiv definită întrucât matricea de la argumentul funcţiei chol() are elemente cu “mult diferite”. FACTORIZAREA LOWER-UPPER (LU) Prin factorizarea lower-upper (lu), o matrice pătratică este descompusă sub forma produsului a două matrici triunghiulare: una inferior triunghiulară (lower), permutată (o matrice permutată, după o anumită regulă este o matrice în care liniile sunt pivotate între ele), cu elementele, de pe diagonala principală, egale cu unitatea (matricea L) şi cealaltă, o matrice superior triunghiulară (upper), (matricea U). În MATLAB, factorizarea lu este utilizată pentru obţinerea inversei unei matrici cu funcţia inv() (inversa unei matrici A, se calculează ca produsul dintre inversa matricei inferior triunghiulară L, calculată prin eliminare Gauss, şi inversa matricei superior triunghiulară U, calculată prin aceeaşi metodă), respectiv pentru calculul determinantului matricelor cu funcţia det() (ca produs dintre determinanul matricei inferior triunghiulară L şi determinanul matricei superior triunghiulară U). Este, totodată, baza rezolvării ecuaţiilor liniare prin "împărţirea matricelor" obţinută cu operatorii „ \ „ şi „ / „. Permutarea liniilor sau coloanelor unei matrici se poate exemplifica foarte sugestiv printr-o schemă cu blocuri DSP. Presupunem ca se doreşte permutarea

Page 90: MATLAB IN MECANICA

MATLAB în ingineria mecanică

92

liniilor unei matrici ⎥⎥⎥

⎢⎢⎢

⎡=

087654321

A după următorul index: P=[2,1,3,3,2,2,],

respectiv permutarea coloanelor, după următoarea regulă:Q=[2,1,3,2,2]. Atunci, schema bloc este următoarea:

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

Page 91: MATLAB IN MECANICA

MATLAB în ingineria mecanică

93

Factorizarea unei matrici, prin metoda lower-upper, se realizează cu funcţia lu() şi se apelează cu una dintre sintaxele:

1. [LU]=lu(S) - cu un singur parametru de ieşire, matricea [LU] 2. [L,U]=lu(S) – returnează o matrice superior triunghiulară, U, şi o

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

inferior triunghiulară în L şi permutarea matriceală în P, astfel încât L*P=P*S

Ex.:

Să se factorizeze matricea ⎥⎥⎥

⎢⎢⎢

⎡=

087654321

A prin metoda lower-upper.

Cu secvenţa MATLAB »A=[1,2,3;4,5,6;7,8,0]; »[L]=lu(A) L= 7.0000 8.0000 0 0.1429 0.8571 3.0000 0.5714 0.5000 4.5000 »[L,U]=lu(A)

000000,10000,15000,05714,0

00000,11429,0L =

5000,4000000,38571,00

00000,80000,7U =

unde, matricea L, este o permutare a matricei inferior triunghiulare, iar U este o matrice superior triunghiulară. Apelarea funcţiei lu() cu trei parametri de ieşire, are ca rezultat: » [L,U,P]=lu(A)

Matricea triunghiulară permutată

Matricea superior triunghiulară

Page 92: MATLAB IN MECANICA

MATLAB în ingineria mecanică

94

L = 1.0000 0 0 0.1429 1.0000 0 0.5714 0.5000 1.0000 U = 7.0000 8.0000 0 0 0.8571 3.0000 0 0 4.5000 P = 0 0 1 1 0 0 0 1 0 În Matlab (versiuni superioare versiunii 5.3) este posibilă factorizarea matricilor pătratice prin metoda lower-upper folosind pachetul de programe DSP

Blockset din Simulink. De exemplu, pentru matricea ⎥⎥⎥

⎢⎢⎢

−=

312604321

A , folosind

pachetul DSP Blockset se obţine matricea compusă din matricea L, inferior triunghiulară, şi matricea superior triunghiulară:

Matricea Ap, (linia 2 pivotată, astfel încât aceasta devine linia 1 ) este

⎥⎥⎥

⎢⎢⎢

−−=

312321604

Ap , iar matricile triunghiulare L (nepivotată) respectiv matricea U

Page 93: MATLAB IN MECANICA

MATLAB în ingineria mecanică

95

sunt:⎥⎥⎥

⎢⎢⎢

⎡=

15.05.00125.0001

L , respectiv ⎥⎥⎥

⎢⎢⎢

−−=

75.0005.120

604U

Pentru a observa modul în care sunt determinate matricile L şi U, se va apela funcţia MATLAB lu(A) în toate cele trei variante posibile: » A=[1,-2,3;4,0,6;2,-1,3]; » [L]=lu(A) L = 4.0000 0 6.0000 0.2500 -2.0000 1.5000 0.5000 0.5000 -0.7500 » [L,U]=lu(A) L = 0.2500 1.0000 0 1.0000 0 0 0.5000 0.5000 1.0000 U = 4.0000 0 6.0000 0 -2.0000 1.5000 0 0 -0.7500 » [L,U,P]=lu(A) L = 1.0000 0 0 0.2500 1.0000 0 0.5000 0.5000 1.0000 U = 4.0000 0 6.0000 0 -2.0000 1.5000 0 0 -0.7500 P = 0 1 0 1 0 0 0 0 1

Page 94: MATLAB IN MECANICA

MATLAB în ingineria mecanică

96

Rezolvarea sistemelor de ecuaţii AX=B prin factorizarea lower upper presupune următoarele etape:

i. determinarea matricelor L şi U cu funcţia MATLAB »[L,U]=lu(A);

ii. determinarea vectorilor Y şi X (obligatoriu în această ordine): »Y=L\B şi »X=U\Y ;

Etapa ii., poate fi realizată şi compact cu instruţiunea: » X=U\ (L\B) De exemplu, pentru sistemul de 3 ecuaţii şi 3 necunoscute

⎪⎩

⎪⎨

−=+−−=+

=+−

1z3yx22z6x41z3y2x

, se foloseşte următoarea secvenţă MATLAB:

»A=[1,-2,3;4,0,6;2,-1,3];B=[1;-2;-1]; »[L,U]=lu(A);X=U\(L\B) obţinându-se soluţia sistemului : X =

-2 0 1

Dacă factorizarea se realizează prin apelarea cu trei parametri de ieşire, atunci se obţin rădăcinile permutate ale sistemului dat : »[L,U,P]=lu(C); X=U\(L\B) X = -0.5000 1.5000 0.5000 În MATLAB 6 este posibilă rezolvarea sistemelor liniare cu n ecuaţii şi n necunoscute prin metoda lower-upper folosind pachetul de programe DSP

Page 95: MATLAB IN MECANICA

MATLAB în ingineria mecanică

97

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

⎪⎩

⎪⎨

−=+−−=+

=+−

1z3yx22z6x41z3y2x

, se foloseşte următorul model Simulink :

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

Page 96: MATLAB IN MECANICA

MATLAB în ingineria mecanică

98

În linia de comandă, factorizarea Q-R se apelează în următoarele variante : [Q,R] = qr(A) (matrice complet definită, sau matricea dispersiilor) [Q,R] = qr(A,0) ( matrice complet definită, sau matricea dispersiilor) [Q,R,E] = qr(A) (matrice complet definită) [Q,R,E] = qr(A,0) (matrice complet definită) X = qr(A) (matrice complet definită) R = qr(A) (matricea dispersiilor) [C,R] = qr(A,B) (matricea dispersiilor) R = qr(A,0) (matricea dispersiilor) [C,R] = qr(A,B,0) (matricea dispersiilor)

În MATLAB (versiuni superioare versiunii 5.3) este posibilă factorizarea matricilor pătratice prin metoda q-r, folosind pachetul de programe DSP Blockset

din Simulink. De exemplu, pentru matricea ⎥⎥⎥

⎢⎢⎢

−−−

−=

752581

211A , folosind

pachetul DSP Blockset se obţine:

Ex.:

Să se determine descompunerea qr a matricei ⎥⎥⎥

⎢⎢⎢

⎡=

087654321

A

Page 97: MATLAB IN MECANICA

MATLAB în ingineria mecanică

99

Cu secvenţa MATLAB următoare, rezultă: »A=[1,2,3;4,5,6;7,8,0];

» [Q,R]=qr(A) Q = -0.1231 0.9045 0.4082 -0.4924 0.3015 -0.8165 -0.8616 -0.3015 0.4082 R = -8.1240 -9.6011 -3.3235 0 0.9045 4.5227 0 0 -3.6742 Factorizarea q-r se utilizează pentru rezolvarea sistemelor de ecuaţii liniare

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

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

Aceeaşi soluţie se obţine folosind următoarea secvenţă MATLAB, scrisă compact: »[Q,R]=qr(A); X=R\(inv(Q)*B)

De exemplu, soluţia sistemului liniar

⎪⎪⎩

⎪⎪⎨

=+=−=+−=−

11yx27yx33y2x2y2x

, se obţine, folosind următoarea

secvenţă: » A=[1,-2;1,2;3,-1;2,1]; B=[-2;3;7;11]; [Q,R]=qr(A);

» X=R\(inv(Q)*B) X =

3.0470 1.7047

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

Page 98: MATLAB IN MECANICA

MATLAB în ingineria mecanică

100

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

⎪⎪⎩

⎪⎪⎨

=+++=−++=−+−=−+−

0t8z2y7x27tzyx

6t3z3yx21tzy2x

se obţine prin factorizare q-r:

» A=[1,-2,1,-1;2,-1,3,-3;1,1,1,-1;2,7,2,8]; B=[1;6;7;0]; [Q,R]=qr(A);

» X=R\(inv(Q)*B) X = 7.0000 2.0000 -4.4000 -2.4000

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

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

Page 99: MATLAB IN MECANICA

MATLAB în ingineria mecanică

101

VALORI ŞI VECTORI PROPRII

În general, în aplicaţiile inginereşti, există un interes deosebit pentru determinarea valorilor proprii reale şi complexe ale unei matrici reale. Analiza metodelor de calcul ale valorilor proprii pentru matricile reale poate fi extinsă la matricile cu elemente complexe. Asemănător rezolvării sistemelor de ecuaţii, şi în cazul determinării valorilor şi vectorilor proprii există două tipuri de metode: metode directe şi metode indirecte. Folosirea metodelor directe sau indirecte depinde mai mult de natura soluţiei cerute decât de forma matricei.

Există aplicaţii în care se pot cere n valori proprii şi n vectori proprii ai unei matrici de ordinul n şi alte aplicaţii în care se cere doar un număr k<n de valori şi vectori proprii, precum şi aplicaţii la care se cere valoarea proprie maximă (minimă) în valoare absolută. În cazul în care se cere o valoare proprie, sau un număr redus de valori proprii k<n, se pot aplica metodele indirecte (iterative), iar în cazul în care se cer toate, sau aproape toate valorile propii, este preferabil să se folosească metodele directe care implică transformările similare ce reduc matricea iniţială A la o matrice similară B de o formă particulară (reducându-se astfel algoritmul de calcul propriu-zis). Problema valorilor şi vectorilor proprii apare într-o mare varietate de aplicaţii şi se scrie sub forma Ax=λx, sau, în general, Ax=λBx : vibraţiile corpurilor elastice, difuzia masică, sisteme oscilatorii. În studiul sistemelor fizice este, adesea, necesară rezolvarea unor sisteme de ecuaţii liniare având forma algebrică generală :

0

x

xxx

aaaa

aaaaaaaaaaaa

n

3

2

1

nn3n2n1n

n3333231

n2232221

n1131211

=

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

λ−

λ−λ−

λ−

M

K

M

K

K

K

unde A este o matrice simetrică reală, x este vectorul variabilelor independente iar λ un parametru scalar denumit valoare caracteristică sau valoare proprie. Problema rezolvării sistemului constă în determinarea parametrului λ şi a vectorului x corespunzător, vector cunoscut sub denumirea de vector caracteristic sau vector propriu. În determinarea soluţiilor nebanale ale sistemului de ecuaţii :AX=λX, unde :

A – este matrice pătratică de ordinul n, X – este vector coloană de ordinul n, λ - este un scalar,

Page 100: MATLAB IN MECANICA

MATLAB în ingineria mecanică

102

valorile X, respectiv λ, care satisfac ecuaţia de mai sus se numesc vectori proprii, respectiv valori proprii. Pentru a evidenţia semnificaţia fizică a valorilor şi vectorilor proprii se consideră următoarele exemple.

A. Presupunând necesar studiul vibraţiilor libere ale unui sistem constând din trei corpuri solide de masă, 2m, 4m, 6m, respectiv, fixate pe o bară elastică, la distanţă egală, l, unul de altul, respectiv de reazemele de încastrare ale barei, acesta conduce la scrierea ecuaţiilor mişcării şi la formularea unei probleme de valori proprii:

0xxx

m6k2k0

km4k2k

0km2k2

3

2

1

2

2

2

=⎥⎥⎥

⎢⎢⎢

⎡⋅

⎥⎥⎥⎥

⎢⎢⎢⎢

ω−−

−ω−−

−ω−

unde ω reprezintă frecvenţa, x vectorul deplasare şi k=s/l (s- tensiunea în bară, 4l- lungimea barei). Dacă se realizează substituţia k/m 2ω=λ , sistemul de ecuaţii ale mişcării, devine:

⎥⎥⎥

⎢⎢⎢

⎡⋅

⎥⎥⎥

⎢⎢⎢

⎡λ=

⎥⎥⎥

⎢⎢⎢

⎡⋅

⎥⎥⎥

⎢⎢⎢

−−−

3

2

1

3

2

1

xxx

600040002

xxx

210121

012

B. Un sistem fizic format din două corpuri solide de mase m1, respectiv m2, legate între ele prin trei arcuri elastice elicoidale, având coeficienţii de elasticitate 321 k,k,k , este descris matematic prin sistemul de ecuaţii diferenţiale ordinare:

⎪⎪⎭

⎪⎪⎬

−−−=

−+−=

231222

22

2

122112

21

1

xk)xx(kdtdx

m

)xx(kxkdtdx

m

unde 21 x,x sunt deplasările pe orizontală faţă de starea de echilibru, iar t este timpul.

Page 101: MATLAB IN MECANICA

MATLAB în ingineria mecanică

103

Pentru oscilaţiile naturale sistemul va oscila la o frecvenţă unică nω , obţinându-se oscilaţii sinusoidale de amplitudine y şi unghi de defazaj θ . În acest caz expresiile celor două deplasări sunt: )tsin(yx),tsin(yx n22n11 θ−ω=θ−ω= Dacă se înlocuiesc aceste expresii ale deplasărilor, în sistemul ecuaţiilor de mişcare, după ordonare, rezultă sistemul

⎪⎭

⎪⎬⎫

=−+−ω−

=−+−ω−

0ykykykym

0ykykykym

12232222n2

22121112n1

Pentru kkkk,mmm 32121 ===== şi frecvenţa adimensională k/m 2

nω=λ , sistemul devine:

⎭⎬⎫

=λ−+−

=−λ−

0y)2(y0yy)2(

21

21

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

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

3,1;03421

12det)(P 21

22 =λ=λ=+λ−λ≡⎥

⎤⎢⎣

⎡λ−−

−λ−≡λ

Gradul polinomului caracteristic )(P2 λ reprezintă numărul gradelor de libertate ale sistemului fizic, precum şi numărul valorilor proprii. Fiecărei valori proprii îi corespunde cel puţin un vector propriu, în cazul de faţă existând doi vectori proprii:

222

21)2(

112

11)1(

y

yy,

y

yy λ→

⎥⎥⎦

⎢⎢⎣

⎡=λ→

⎥⎥⎦

⎢⎢⎣

⎡=

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

Page 102: MATLAB IN MECANICA

MATLAB în ingineria mecanică

104

m/k3,3k

m

m/k,1k

m

2

22

2

1

21

1

=ω=ω

=ω=ω

Dacă se rezolvă sistemul omogen în 1

1y şi 12y pentru 11 =λ şi în 2

221 y,y

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

222

12)2(

112

11)1(

11

y

yy;

11

y

yy λ→⎥

⎤⎢⎣

⎡−

=⎥⎥⎦

⎢⎢⎣

⎡=λ→⎥

⎤⎢⎣

⎡=

⎥⎥⎦

⎢⎢⎣

⎡=

Se observă că 1ω este frecvenţa cea mai joasă iar 2ω este frecvenţa cea mai înaltă pentru sistemul considerat, respectiv, faptul că la frecvenţa 1ω cele două corpuri se deplasează la fel şi în aceeaşi direcţie, iar la frecvenţa 2ω cele două mase se deplasează cu aceeaşi mărime dar în sensuri opuse. Cele două exemple prezentate au menirea să evidenţieze faptul că valorile proprii şi vectorii proprii descriu modul de comportare al unui sistem fizic, reprezentând o serie de mărimi ce descriu comportarea sistemului. Valorile şi vectorii proprii ai unei matrici pătratice se calculează, în MATLAB, cu funcţia eig() şi se apelează cu una din sitaxele:

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

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

V=eig(A) returnează un vector care conţine valorile proprii ale matricei A; [V,D]=eig(A) returnează o matrice V ale cărei coloane sunt vectorii

proprii corespunzători valorilor proprii şi, o matrice diagonală D care conţine valorile proprii ale matricei A astfel încât: A*V=V*D

Page 103: MATLAB IN MECANICA

MATLAB în ingineria mecanică

105

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

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

Dacă matricea are valori proprii de ordinul întâi (valorile proprii λ sunt distincte), atunci vectorii proprii sunt independenţi. Dacă vectorii proprii nu sunt independenţi, atunci matricea originală nu este neregulată. Chiar dacă o matrice este neregulată, soluţia funcţiei eig() satisface ecuaţia:

A*X=X*D Valorile şi vectorii proprii generalizaţi determină soluţiile nebanale ale ecuaţiei:

AX=λBX unde A şi B sunt matrici pătratice de ordinul n, iar λ este un scalar. Valorile lui λ care satisfac ecuaţia se numesc valori proprii generalizate şi valorile X corespunzătoare sunt vectorii proprii generalizaţi. Dacă B este o matrice nesingulară (det(B)≠0, adică matricea este inversabilă), problema calculului valorilor şi vectorilor proprii se reduce la o problemă standard cu valori proprii prin înlocuirea lui A cu B-1A, întrucât ecuaţia este echivalentă cu:

B-1AX=λX Calculul vectorilor şi valorilor proprii generalizate se realizează cu funcţia MATLAB eig() şi se apelează cu una dintre sintaxele:

» V=eig(A,B)

• returnează un vector care conţine valorile proprii generalizate, dacă A şi B sunt matrici pătratice ;

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

• returnează o matrice V ale cărei coloane sunt vectorii proprii corespunzători şi, o matrice diagonală D ce conţine valorile proprii generalizate, astfel încât: A*V=B*V*D

Page 104: MATLAB IN MECANICA

MATLAB în ingineria mecanică

106

Ex.:

Să se determine valorile şi vectorii proprii ai matricei ⎥⎥⎥

⎢⎢⎢

−−

−=

210121012

A

Cu secvenţa MATLAB : » A=[-2 1 0; 1 -2 1; 0 1 -2]

» [V,D]=eig(A) V = 0.5000 -0.7071 -0.5000 -0.7071 0.0000 -0.7071 0.5000 0.7071 -0.5000 D = -3.4142 0 0 0 -2.0000 0 0 0 - 0.5858 Aplicând funcţia MATLAB eig(), sistemelor de ecuaţii ale mişcării, pentru cele două sisteme fizice, tratate teoretic, la începutul acestui paragraf, se obţin următoarele rezultate : A.- pentru primul sistem: »A=[2,-1,0;-1,2,-1;0,-1,2] »[V,D]=eig(A) V = 0.5000 -0.7071 -0.5000 0.7071 0.0000 0.7071 0.5000 0.7071 -0.5000 D = 0.5858 0 0 0 2.0000 0 0 0 3.4142 »V=eig(A) V = 0.5858 2.0000 3.4142

Page 105: MATLAB IN MECANICA

MATLAB în ingineria mecanică

107

B.—pentru cel de-al doilea sistem : »A=[2,-1;-1,2]; » [V,D]=eig(A) V = -0.7071 -0.7071 -0.7071 0.7071 D = 1 0 0 3 »V=eig(A) V = 1 3 CALCULUL VALORILOR SINGULARE O valoare singulară corespunzătoare unei matrici rectangulare este valoarea scalarului σ , iar vectorii singulari corespunzători aceleiaşi matrici sunt vectorii u şi v, care respectă relaţia de interdependenţă : uvA ⋅σ=⋅ , vuAT ⋅σ=⋅ (aici, notaţia VT reprezintă transpusa matricei V). Calculul acestor valori este un mijloc sigur pentru determinarea rangului unei matrici de formă generală. Dacă, valorile singulare σ , sunt folosite pentru a forma o matrice diagonală Σ , iar cu elementele vectorilor singulari, corespunzători, se formează matricile ortogonale U şi V, se poate scrie : Σ⋅=⋅ UVA Σ⋅=⋅ VUAT Dacă U şi V sunt ortogonale (UT * U =1, VT * V=1), atunci acestea reprezintă rezultatul descompunerii în valori singulare a matricei A : TVUA ⋅Σ⋅= Descompunerea completă, în valori singulare, a unei matrici de tipul Amxn, are ca rezultat o matrice Umxm, una mxnΣ , respectiv o matrice Vnxn (adică matricile U şi V sunt patratice, în timp ce Σ are ordinul matricei A). Dacă matricea A are numărul de linii mai mare decât numărul de coloane, atunci descompunerea în

Page 106: MATLAB IN MECANICA

MATLAB în ingineria mecanică

108

valori singulare va avea ca rezultat o matrice U de dimensiuni mari, dar ultimele »m-n » coloane sunt înmulţite cu zero, în matricea Σ . În această situaţie, economia în mărimea descompunerii, are efecte în timpul de calcul şi în spaţiul de memorie necesar stocării rezultatelor, prin renunţarea la calculul acelor elemente care, oricum sunt eliminate prin înmulţirea cu zero, şi eliminarea acelor coloane din reprezentarea matricei U. În acest mod, va fi determinată şi afişată o matrice U cu dimensiunea mxn, o matrice Σ , de ordinul nxn respectiv, matricea V, de aceeaşi dimensiune . Dacă matricea A este pătratică, simetrică şi pozitiv definită, atunci descompunerea în valori şi vectori proprii este identică descompunerii în valori singulare. De remarcat că rezultatele descompunerii în valori singulare a unei matrici reale sunt întotdeauna reale, în timp ce, descompunerea în valori şi vectori proprii, a unei matrici reale, poate fi complexă. Descompunerea în valori singulare a matricei A, se poate face, în MATLAB, folosind funcţia specifică svd(). Funcţia svd() se apelează cu una din sintaxele:

• D=svd(A) – returnează un vector care conţine valorile singulare • [U,S,V]=svd(A) – returnează o matrice diagonală S cu aceleaşi dimensiuni

ca A, având elementele diagonale nenegative (care sunt şi valori singulare) în ordine descrescătoare şi matricele U şi V care satisfac relaţia: X=U*S*V

• [U,S,V]=svd(X,0) – efectuează un calcul mai rapid al valorilor singulare,

Ex. :

Să se descompună, în valori singulare, matricea ⎥⎦

⎤⎢⎣

⎡=

3451

A

Rezolvare : Cu secvenţa MATLAB » A=[1 5; 4 3]; » D=svd(A) D = 6.6713 2.5482 » [U,S,V]=svd(A) U = -0.7163 -0.6977 -0.6977 0.7163 S = 6.6713 0 0 2.5482 V = -0.5257 0.8507 -0.8507 -0.5257

Page 107: MATLAB IN MECANICA

MATLAB în ingineria mecanică

109

Ex. :

Să se descompună matricea ⎥⎥⎥⎥

⎢⎢⎢⎢

=

94183571

A , în valori singulare, folosind toate

variantele de apelare ale funcţiei MATLAB svd(). Rezolvarea este imediată, cu următoarea secvenţă:

» A=[1,7;5,3;8,1;4,9] » D=svd(A)

D = 13.8259 7.4058

» [U,S,V]=svd(A) U = -0.4445 0.4723 -0.0336 -0.7604 -0.3930 -0.2855 -0.8693 0.0909 -0.4116 -0.7711 0.4125 -0.2566 -0.6917 0.3176 0.2701 0.5897 S = 13.8259 0 0 7.4058 0 0 0 0 V = -0.6126 -0.7904 -0.7904 0.6126 » [U,S,V]=svd(A,0) U = -0.4445 0.4723 -0.3930 -0.2855 -0.4116 -0.7711 -0.6917 0.3176 S = 13.8259 0 0 7.4058 V = -0.6126 -0.7904 -0.7904 0.6126

Page 108: MATLAB IN MECANICA

MATLAB în ingineria mecanică

110

APLICAŢII

1:

Fie: a=⎥⎥⎦

⎢⎢⎣

4lge32e54

8lg4; b=

⎥⎥⎦

⎢⎢⎣

⎡3

7

87lg6ln5 ; c=2.

Să se calculeze:a+b; a-b;a+c. 2:

Fie: m=⎥⎥⎦

⎢⎢⎣

⎡5log

3

3e3arctg20sin21 ; n=

⎥⎥⎥

⎢⎢⎢

π

7log8log

33

656 e17lne

4253

sin

Să se calculeze: M=m+n

3:

Fie: a=⎥⎥⎥⎥

⎢⎢⎢⎢

π 6log

3

74

4361sin

8545321

;b=⎥⎥⎦

⎢⎢⎣

⎡ −−6log10982

e7i21i235354

4

8log5 6; c=2.

Să se calculeze produsele : ab; ba; ac; bc. 4:

Fie: a= ⎥⎦

⎤⎢⎣

⎡9log5e43lg

2ln1; b= ⎥

⎤⎢⎣

⎡8ln7log6tg5sin

5;

Să se calculeze:a/b; b/a.

5:

Fie: a= ⎥⎦

⎤⎢⎣

⎡4lg3lne21

; c=⎥⎥⎦

⎢⎢⎣

⎡ −−6log1098

e7i21i233643

45

75.

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

Page 109: MATLAB IN MECANICA

MATLAB în ingineria mecanică

111

6:

Fie: a=⎥⎥⎦

⎢⎢⎣

e4321

3

7log6; b=

⎥⎥⎦

⎢⎢⎣

⎡ −87

6log53 45

;

Să se calculeze:a\b; b\a. 7:

Fie: a=⎥⎥⎦

⎢⎢⎣

4ln3e21

5

6ln; b=3;c= - 3

Să se calculeze:a^b; b^a; a^c

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

⎥⎦

⎤⎢⎣

⎡= 6lg3 5lg e43

e2eA

⎥⎥⎥

⎢⎢⎢

=9

57

4

e84e76lne45ln321

B ⎥⎥⎦

⎢⎢⎣

⎡ −−=

610987i21i233C .

9 :

Calculaţi inversa matricei: A = ⎥⎥⎦

⎢⎢⎣

− 9log12e114ln10e2

6

3 9log85

.

10:

Să se determine rangul matricei A = ⎥⎥⎥

⎢⎢⎢

−−−

11135133231634523

5

3

65

.

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

⎥⎦

⎤⎢⎣

⎡= 6lg3 5lg e43

e2eA

⎥⎥⎥

⎢⎢⎢

=9

57

4

e84e76lne45ln321

B ⎥⎥⎦

⎢⎢⎣

⎡ −−=

610987i21i233C

Page 110: MATLAB IN MECANICA

MATLAB în ingineria mecanică

112

12: Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, următoarele sisteme de ecuaţii lineare:

⎪⎩

⎪⎨

−=−−=++−=−+

1zyx5z2y3x10zy2x3

;

⎪⎪⎩

⎪⎪⎨

=−+++=+−++

=−−+−=+−+−

0u2t8z2y7x27u3tzyx

6ut3z3yx21u2tzy2x

13: Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, următoarele sisteme de ecuaţii lineare:

⎪⎪⎩

⎪⎪⎨

=+++=−++=−+−=−+−

10t4z2yx28t2z3y7x5

11t3zy3x221t3zy2x6

⎪⎩

⎪⎨

−=+−−=−+−

=+−

1x7x5x22x5x8x

1x2xx9

321

321

321

14: Să se găsească valorile şi vectorii proprii ai matricelor

⎥⎥⎥

⎢⎢⎢

−−−

−=

752581

211A

⎥⎥⎥

⎢⎢⎢

⎡=

087654321

B ⎥⎥⎥⎥

⎢⎢⎢⎢

−−

−−

=

911019011091

0119

C

Page 111: MATLAB IN MECANICA

MATLAB în ingineria mecanică

113

CAPITOLUL III STRUCTURI ŞI TABLOURI DE VALORI Structurile, sau tablourile de valori, sunt extensii ale matricilor bi-dimensionale. Structurile sunt utile pentru construirea tabelelor de valori. De exemplu, considerând vectorul: » n = (0:9)'; atunci, cu secvenţele următoare, se pot genera două tabele de valori: » tabel_puteri = [n n.^2 2.^n] <Enter>

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

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

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

Page 112: MATLAB IN MECANICA

MATLAB în ingineria mecanică

114

STRUCTURI MULTIDIMENSIONALE

Structurile multidimensionale se deosebesc de matrici şi tablouri de valori prin numărul de dimensiuni. In timp ce matricile şi tablourile de valori sunt caracterizate prin două dimensiuni (linii şi coloane), structurile multidimensionale dimensiuni suplimentare: paginile. De exemplu, cu secvenţa următoare generează o reţea cu 3 linii, 4 coloane şi 5 pagini: » R = randn(3,4,5) R(:,:,1) = 0.0000 -1.8740 0.7310 0.6771 -0.3179 0.4282 0.5779 0.5689 1.0950 0.8956 0.0403 -0.2556 R(:,:,2) = -0.3775 -0.2340 1.4435 0.7990 -0.2959 0.1184 -0.3510 0.9409 -1.4751 0.3148 0.6232 -0.9921 R(:,:,3) = 0.2120 -0.7420 0.3899 -0.5596 0.2379 1.0823 0.0880 0.4437 -1.0078 -0.1315 -0.6355 -0.9499 R(:,:,4) = 0.7812 -0.2656 0.9863 0.2341 0.5690 -1.1878 -0.5186 0.0215 -0.8217 -2.2023 0.3274 -1.0039 R(:,:,5) = -0.9471 -1.0559 -1.2173 -1.3493 -0.3744 1.4725 -0.0412 -0.2611 -1.1859 0.0557 -1.1283 0.9535 iar cu secvenţa:

» p = perms(1:4); A = magic(4); M = zeros(4,4,24); » for k = 1:24

M(:,:,k) = A(:,p(k,:)) End

Page 113: MATLAB IN MECANICA

MATLAB în ingineria mecanică

115

se generează o reţea cu 4 linii, 4 coloane şi 24 pagini. Această reţea este reprezentată succint în figura următoare (la rularea secvenţei anterioare se vor afişa toate paginile structurii M, pentru fiecare valoare a indexului k):

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

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

Page 114: MATLAB IN MECANICA

MATLAB în ingineria mecanică

116

ADUNAREA ŞI SCĂDEREA TABLOURILOR DE VALORI Pentru ca adunarea şi scăderea să se poată efectua este necesară îndeplinirea condiţiei de identitate a dimensiunilor tablourilor care operează. Ex.11:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10,

d=⎥⎥⎥

⎢⎢⎢

−6

83lne

e72

3

.

Să se calculeze: a-b; a-c; c-a; c-b; a+d Cu secvenţa MATLAB următoare, rezultă: » a=[1,2,3;4,5,6];b=[-1,8,pi;9,sqrt(5),3];c=10; » d=[7^(1/3),exp(1);exp(2)/(log(3)-8),6] » A=a-b [Enter] A = 2.0000 -6.0000 -0.1416 -5.0000 2.7639 3.0000 » B=a-c [Enter] B = -9 -8 -7 -6 -5 -4 » C=c-a [Enter] C = 9 8 7 6 5 4 » D=c-b [Enter] D = 11.0000 2.0000 6.8584 1.0000 7.7639 7.0000 » E=a+d Enter]

Page 115: MATLAB IN MECANICA

MATLAB în ingineria mecanică

117

În cazul E=a+d, MATLAB returnează un mesaj de eroare, întrucât nu este îndeplinită condiţia de corespondenţă a dimensiunilor celor doi operanzi:

»E= a+d ??? Error using ==> + Matrix dimensions must agree..

??? Eroare la utilizarea operatorului « + » Matricile trebuie să aibă aceleaşi dimensiuni

ÎNMULŢIREA TABLOURILOR DE VALORI

Pentru ca înmulţirea a două tablouri de valori să se poată realiza, este obligatorie condiţia ca acestea să fie strict de aceeaşi dimensiune :

Ex.:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , ⎥⎦

⎤⎢⎣

⎡ π−=

35981

b , c=10,

⎥⎥⎥

⎢⎢⎢

=6

83lne

e7d 2

3

.

Să se calculeze: produsele:ab;ac;ca;cb; ad Cu secvenţa MATLAB următoare, rezultă: »a=[1,2,3;4,5,6];b=[-1,8,pi;9,sqrt(5),3];c=10; » d=[7^(1/3),exp(1);exp(2)/(log(3)-8),6];

» A=a.*b [Enter] A = -1.0000 16.0000 9.4248 36.0000 11.1803 18.0000 » B=a.*c [Enter] B = 10 20 30 40 50 60

Page 116: MATLAB IN MECANICA

MATLAB în ingineria mecanică

118

» C=c.*a [Enter] C = 10 20 30 40 50 60 » D=c.*b [Enter] D = -10.0000 80.0000 31.4159 90.0000 22.3607 30.0000 În cazul E=a.*d, MATLAB returnează un mesaj de eroare, întrucât cele două tablouri au dimensiuni diferite: » E=a.*d

??? Error using ==> .* Matrix dimensions must agree.

??? Eroare la utilizarea operatorului « + » Matricele trebuie să aibă aceleaşi dimensiuni

ÎMPĂRŢIREA “LA DREAPTA” A TABLOURILOR DE VALORI Împărţirea la dreapta, a două tablouri, este simbolizată prin caracterul combinat “ ./ “ (punct + slash): Ex.:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

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

Cu secvenţa MATLAB următoare, rezultă: » a=[1,2,3;4,5,6]; b=[-1,8,pi;9,sqrt(5),3]; c=10; » d=a./b [Enter] d = -1.0000 0.2500 0.9549 0.4444 2.2361 2.0000

Page 117: MATLAB IN MECANICA

MATLAB în ingineria mecanică

119

» e=a./c [Enter] e = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 » f=c./a [Enter] f = 10.0000 5.0000 3.3333 2.5000 2.0000 1.6667 » g=c./b [Enter] g = -10.0000 1.2500 3.1831 1.1111 4.4721 3.3333 ÎMPĂRŢIREA “LA STÂNGA” Operaţia de împărţire la stânga, între două tablouri, având aceleaşi dimensiuni, este simbolizată cu operatorul “ .\ ” (punct + backslash): x=y.\z, şi reprezintă câtul dintre elementul z(i,j) şi elementul y(i,j), adică: x=y.\z ≡ z./y. Ex.:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

Să se calculeze:a.\b;a.\c;c.\a;c.\b. Soluţie: Cu secvenţa MATLAB următoare, rezultă: » a=[1,2,3;4,5,6]; b=[-1,8,pi;9,sqrt(5),3]; c=10; » d=a.\b [Enter] d = -1.0000 4.0000 1.0472 2.2500 0.4472 0.5000 » e=a.\c [Enter] e = 10.0000 5.0000 3.3333 2.5000 2.0000 1.6667

Page 118: MATLAB IN MECANICA

MATLAB în ingineria mecanică

120

» f=c.\a [Enter] f = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 » g=c.\b [Enter] g = -0.1000 0.8000 0.3142 0.9000 0.2236 0.3000 RIDICAREA LA PUTERE A TABLOURILOR DE VALORI Operaţia de ridicare la putere a tablourilor de valori este simbolizată prin caracterul combinat (« .^ « ). Astfel, instrucţiunea A=B.^C, reprezintă calculul puterii unui element al matricei B, unde exponentul este elementul de pe poziţia corespunzătoare din matricea C: adică elementul A(i,j) este obţinut prin ridicarea la puterea C(i,j) a elementului B(i,j). Ex.:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

Să se calculeze : ab; ac; ca; cb. Rezolvare: Cu secvenţa MATLAB următoare, rezultă: » a=[1,2,3;4,5,6]; b=[-1,8,pi;9,sqrt(5),3]; c=10; » d=a.^b [Enter] d = 1.0000e+000 2.5600e+002 3.1544e+001 2.6214e+005 3.6555e+001 2.1600e+002 » e=a.^c [Enter] e = 1 1024 59049 1048576 9765625 60466176

Page 119: MATLAB IN MECANICA

MATLAB în ingineria mecanică

121

» f=c.^a [Enter] f = 10 100 1000 10000 100000 1000000 » g=c.^b [Enter] g = 0.0000 0.1000 0.0000 1.0000 0.0000 0.0000 Notă: Afişarea “expresiei numerice” 1.0e+009 * “ (numărul 109) în faţa unei matrici, are semnificaţia următoare: elementele matricei sunt înmulţite cu acel număr. Aceasta este o metodă practică de a “scurta” formatul unui număr. TRANSPUNEREA TABLOURILOR DE VALORI Operaţia de transpunere a unui tablou este simbolizată de operatorul combinat “.’ “ (punct-apostrof). În acest mod liniile tabloului devin coloane şi invers. Ex.:

Să se determine transpusa tabloului ⎥⎥⎦

⎢⎢⎣

+−−π

=97111i23i0631a .

Cu secvenţa MATLAB următoare, rezultă: » a=[1, sqrt(3),pi,-6,0;I,3-2*I,1+sqrt(11),7,9]; [Enter] » a1=a.’ [Enter] a1 = 1.0000 0 + 1.0000i 1.7321 3.0000 - 2.0000i 3.1416 4.3166 -6.0000 7.0000 0 9.0000

Page 120: MATLAB IN MECANICA

MATLAB în ingineria mecanică

122

ŞIRURI DE CARACTERE; MATRICI DIN ŞIRURI DE CARACTERE

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

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

CREAREA MATRICIOR CU ŞIRURI DE CARACTERE

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

Page 121: MATLAB IN MECANICA

MATLAB în ingineria mecanică

123

»coduri_ASCII_majuscule=double('ABCDEFGHIJKLMNOPQRSTU VWXZ') coduri_ASCII_ majuscule = Columns 1 through 11 65 66 67 68 69 70 71 72 73 74 75 Columns 12 through 22 76 77 78 79 80 81 82 83 84 85 86 Columns 23 through 25 87 88 90 De exemplu, urmatoarea secvenţă MATLAB introduce tabloul “nume”, având dimensiunea 1x17 şi matricea “functia” cu dimensiunea 1x24: » nume='Popescu J. Eduard' nume = Popescu J. Eduard

» functia='Director General Adjunct' functia = Director General Adjunct

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

Name Size Bytes Class nume 1x17 34 char array

adica : matricea nume are dimensiunea 1x17, se stochează în memorie ocupând 34 biţi şi este din classa char array (tablou de caractere). Matricile de caractere se pot concatena pentru crearea unei noi matrici, folosind funcţia MATLAB strcat() sau operatorul MATLAB de concatenare [ ]. De exemplu, pentru concatenarea celor două tablouri de mai sus, se foloseşte secvenţa MATLAB : » Nume_si_Functia=strcat(nume,',',functia) Nume_si_Functia =

Popescu J. Eduard,Director General Adjunct

Page 122: MATLAB IN MECANICA

MATLAB în ingineria mecanică

124

» whos Nume_si_Functia Name Size Bytes Class ans 1x42 84 char array Grand total is 42 elements using 84 bytes

Concatenarea a două tablouri pentru transformarea într-o matrice cu două linii, foloseşte algoritmul de introducere a datelor ca matrice (paranteze drepte): » numele_si_functia=['Popescu J. Eduard ';'Director General Adjunct']

numele_si_functia = Popescu J. Eduard Director General Adjunct

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

Se observă diferenţa faţă de cazul afişării textului intr-o singură linie:matricea nouă având dimensiunea 2x24, faţă de o linie cu 42 elemente, la prima variantă, iar pentru stocare sunt ocupaţi 96 biţi de memorie, faţă de 84 în prima variantă, classa este aceeaşi char array.

CONVERSIA ŞIRURILOR DE CARACTERE ÎN CODURI NUMERICE

Matricile cu şiruri de caractere stochează fiecare caracter în coduri numerice pe 16 biţi. Codurile ASCII ale caracterelor alfanumerice sunt prezentate în tabelul următor :

Cod Caracter Cod Caracter Cod Caracter Cod Caracter Cod Caracter

0. (zero) 27. → 54. 4 81. N 108. h 1. ☺ 28. ← 55. 5 82. O 109. i 2. ☻ 29. └ 56. 6 83. P 110. j 3. 30. ↔ 57. 7 84. Q 111. k 4. 31. 58. 85. 112. 5. ◊ 32. ▲ 59. 8 86. R 113. l

Page 123: MATLAB IN MECANICA

MATLAB în ingineria mecanică

125

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

MATLAB utilizează funcţia double() pentru convertirea şirului de caractere în codurile numerice ale acestora, respectiv funcţia char() pentru reprezentarea acestor valori în şir de caractere: » nume_si_functia_numeric=double(nume_si_functia)

nume_si_functia_numeric = Columns 1 through 12 80 111 112 101 115 99 117 32 74 46 32 69 68 105 114 101 99 116 111 114 32 71 101 110 Columns 13 through 24 100 117 97 114 100 32 32 32 32 32 32 32 101 114 97 108 32 65 100 106 117 110 99 116

Se observă că matricea “nume_si_functia” (cu 2 linii şi 24 coloane) a fost convertită într-o matrice cu aceleaşi dimensiuni dar în reprezentare numerică, nume_si_functia_numeric. De exemplu, pentru verificare, se poate folosi următoarea secvenţă: »valoarea_numerica_a_literei_P=double('P')

valoarea_numerica_a_literei_P = 80

»valoarea_numerica_a_literei_o=double('o') valoarea_numerica_a_literei_o =

111

Page 124: MATLAB IN MECANICA

MATLAB în ingineria mecanică

126

Pentru revenirea la forma anterioară (matrice cu caractere) se foloseşte secvenţa: » nume_si_functia=char(nume_si_functia_numeric) nume_si_functia =

Popescu J. Eduard Director General Adjunct

Codurile ASCII, sunt convertite în caractere folosind funcţia MATLAB char() : » char(65:75) ans = ABCDEFGHIJK Se pot folosi funcţiile char() şi double() pentru a genera şiruri identice de caractere, adica: » char(ones(4,20)*double('#')) ans = #################### #################### #################### #################### Această instrucţiune se execută astfel :

• -funcţia ones(4,20) generează patru linii şi 20 de coloane în care elementele sunt cifrele 1;

• -multiplicând prin double('#') această matrice, elementele “1” sunt înlocuite cu codul ASCII al unui caracter oarecare (în acest caz este codul caracterului “#”), iar funcţia char() converteşte aceste coduri în caractere (caracterul “#”).

Dacă o variabilă- caracter este implicată într-o operaţie aritmetică, MATLAB utilizează codul ASCII al caracterului, pentru efectuarea calculelor. Astfel, dacă : » p=’m’; atunci expresia:

Page 125: MATLAB IN MECANICA

MATLAB în ingineria mecanică

127

» p+2 returnează rezultatul: ans = 111 Operaţiile cu matrici şi tablouri de valori pot fi extinse la şirurile de caractere. De exemplu, dacă p este un şir de caractere (în cazul de faţă m), atunci expresia char(p+1) returnează litera următoare din alfabet: » char(p+1) ans = n Relaţia dintre caractere şi codurile ASCII, ale acestora, permite efectuarea operaţiilor aritmetice cu acestea. De exemplu, instrucţiunea următoare va realiza împărţirea numărului reprezentând codul ASCII al caracterului « < » (cod 60), la numărul reprezentând codul ASCII al caracterului « x » (120) : » double('<')/double('x') ans = 0.5000 Şirurile de caractere pot fi afişate folosind funcţia MATLAB fprintf(), cu specificatorul de format « %s », fiind posibilă, de asemenea, aranjarea « la dreapta », « la stânga » sau « egal distanţată » (« justified »), respectiv « trunchiată ». Cu instrucţiunile următoare se afişează cuvintele « IMPARATUL NAPOLEON I », în diferite variante : » fprintf('%40s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I » fprintf('%-40s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I » fprintf('%20s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I » fprintf('%-20s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I

Page 126: MATLAB IN MECANICA

MATLAB în ingineria mecanică

128

COMPARAREA ŞIRURILOR DE CARACTERE Şirurile de caractere se compară prin codurile ASCII. Astfel, şirurile « ann” şi « ban », se compară folosind operatorii relaţionali (<, <=, >, >=, ==, ~=), similar matricilor, fiind afişat rezultatul “1”, dacă rezultatul comparării este “adevarat”, respectiv, rezultatul “zero”, dacă rezultatul comparării este fals: »s1='ann'; s2='ban'; »s1<s2 ans = 1 0 0 În acest exemplu, caracterul de pe prima poziţie, din şirul s1 are “valoare” mai mică decât caracterul corespunzător din şirul s2, rezultatul afişat fiind, în consecinţă “1”, în timp ce, celelalte “elemente ” ale şirului s1 sunt mai mari sau egale decât “valorile” caracterelor de pe poziţiile corespunzătoare ale şirului s2, rezultatul afişat fiind “0”, întrucât rezultatul comparării este fals. Dacă şirurile nu au aceeaşi dimensiune (acelaşi număr de caractere), folosirea operatorilor relaţionali este improprie, MATLAB afişând un mesaj de eroare : » s3='anna'; s2='ban'; » s3>s2 ??? Error using ==> > Array dimensions must match for binary array op. ??? Eroare la utilizarea operatorului > Dimensiunile structurilor trebuie sa corespundă pentru efectuarea operaţiilor binare Compararea şirurilor cu dimensiuni diferite se realizează cu funcţia MATLAB strcmp(si,sj), care va afişa valoarea logică 1, dacă cele două şiruri sunt identice, respectiv, valoarea logică 0, dacă cele două şiruri au valori diferite ale codurilor ASCII: » strcmp(s2,s3) ans = 0 Funcţiile specifice operaţiilor şi operaţiunilor cu şiruri de caractere sunt prezentate folosind : » help matlab\strfun.

Page 127: MATLAB IN MECANICA

MATLAB în ingineria mecanică

129

ŞIRURI DE CARACTERE BIDIMENSIONALE Şirurile de caractere bi-dimensionale se pot crea exact ca şi matricile, cu excepţia faptului că fiecare linie trebuie să aibă acelaşi număr de caractere (acelaşi număr de coloane), în caz contrar se va afişa un mesaj de eroare care avertizează utilizatorul asupra acestui aspect (rezolvarea problemei este simplă dacă se introduce un număr necesar de spaţii libere, blank-uri) : » nume_si_adresa=['Albert Durrer ';'21 Bruxelles Ave';'New York '] nume_si_adresa = Albert Durrer 21 Bruxelles Ave New York » numesiadresa=['Albert Durrer';'21 Bruxelles Ave';'New York'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. ??? Eroare la utilizarea vertcat(concatenarea verticală) Toate liniile, din parantezele drepte, trebuie sa aibă acelaşi număr de coloane O metodă simplă pentru realizarea structurilor bi-dimensionale, cu şiruri de caractere, este aceea folosind funcţia MATLAB char(), care setează automat numărul de coloane necesare pe fiecare linie: nume_si_adresa=char('Albert Durrer','21 Bruxelles Ave','New York') nume_si_adresa = Albert Durrer 21 Bruxelles Ave New York De observat că dacă structura nume_si_adresa se apelează cu subscript, pentru extragerea elementelor, acestea sunt afişate în ordinea clasică a vectorilor liniari (vectori coloană), elementele fiind « citite » pe coloană începând cu primul element al coloanei întâi :

Page 128: MATLAB IN MECANICA

MATLAB în ingineria mecanică

130

» numesiadresa=['Albert Durrer ';'21 Bruxelles Ave';'New York '] numesiadresa = Albert Durrer 21 Bruxelles Ave New York » numesiadresa(1:3) ans = A2N » numesiadresa(1:4) ans = A2Nl » numesiadresa(1:20) ans = A2Nl1eb weB rrYtuo x EVALUAREA ŞIRURILOR DE CARACTERE Dacă o expresie MATLAB este « codată » ca şir de caractere de variabilă « t », de exemplu, atunci funcţia eval(t) va genera evaluarea expresiei în « t » (adică, şirul de caractere va fi interpretat). Această facilitate se numeşte text macro. De exemplu, instrucţiunea următoare : » s='x=-b/(2*a)';b=8;a=7; » eval(s) x = -0.5714 Utilizarea funcţiei eval() este foarte practică în situaţii în care sunt solicitate date de intrare, cum ar fi cazul unor reprezentări grafice : » x=0:0.01:10; » f=input('Introduceti functia de variabila x pentru reprezentare grafica:','s')

Page 129: MATLAB IN MECANICA

MATLAB în ingineria mecanică

131

Introduceti functia de variabila x pentru reprezentare grafica: exp(-0.5*x).*sin(x); » plot(x,eval(f)),grid După introducerea funcţiei MATLAB input() apare linia de comandă « de aşteptare », prin care utilizatorul este invitat să introducă expresia funcţiei de variabilă « x » : Introduceti functia de variabila x pentru reprezentare grafica: Dacă utilizatorul introduce o expresie în care nu există date care pot fi evaluate, MATLAB afişează un mesaj de eroare, altfel este evaluată expresia în variabilă « x » , şi reprezentată grafic pentru valorile date :

Structurile definite, până acum, în MATLAB, au avut elementele date ori numai ca numere, ori numai ca şiruri de caractere. MATLAB permite definirea structurilor de date prin introducerea diferitelor tipuri de date în diferite câmpuri. De exemplu, se poate crea o structură, numită « student » (de exemplu), cu un câmp alocat numelui : » student.nume=’Juan Antonio Cajigal’;

Page 130: MATLAB IN MECANICA

MATLAB în ingineria mecanică

132

un alt câmp pentru seria şi numărul de legitimaţie: » student.legitimatie='JUANCA0123'; respectiv, un câmp pentru calificativele primite : » student.calificative=[7 9 6 5]; Pentru a vedea întreaga structură, se introduce, de la tastatură, în linia de comandă, numele acesteia: » student student = nume: 'Juan Antonio Cajigal' legitimatie: 'JUANCA0123' calificative: [7 9 6 5] Apelarea unui element al structurii se realizează folosind aceeaşi metodologie ca şi în cazul matricilor şi tablourilor de valori. De exemplu, afişarea celei de-a doua note, respectiv a celei de-a patra, este realizabilă prin introducerea de la tastatură, în linia de comandă, a numelui câmpului, şi ca subscript (în paranteze, pentru stabilirea poziţiei în matricea linie), poziţia acesteia în matricea respectivă, student.calificative(i): » student.calificative(2) ans = 9 » student.calificative(4) ans = 5 De notat că folosirea caracterului “.”, pentru separarea numelui unei structuri, la crearea sau apelarea acesteia, este esenţială. Pentru adăugarea unor elemente suplimentare la structura creată, se vor folosi indici de subscriere, după numele structurii: » student(2).nume='Luis Jimenez'; » student(2).legitimatie='LUJIM0012'; » student(2).calificative=[7 5];

Page 131: MATLAB IN MECANICA

MATLAB în ingineria mecanică

133

În structura cu numele”student” câmpurile alocate primului nume, vor putea fi accesate folosind indicele de subscriere 1, după numele structurii ”student”: » student(1) ans = nume: 'Juan Antonio Cajigal' legitimatie: 'JUANCA0123' calificative: [7 9 6 5] Este de observat că nu este necesar ca o structură să aibă dimensiunile câmpurilor identice: câmpul “calificative” are dimensiunea 4 la “student(1)”, în timp ce, la “student(2)” câmpul are dimensiunea 2. Structura cu numele “student”, are acum dimensiunea 1x2:are două elemente (“student(1)” şi “student(2)”), fiecare dintre acestea având câte 3 câmpuri. Dacă o structură are definite mai multe elemente, MATLAB nu afişează conţinutul fiecărui câmp, atunci când aceasta este apelată cu numele simplu. Astfel, dacă structura “student” se apelează în linia de comandă, simplu, fără subscript, atunci se va afişa un sumar exhaustiv: »student student = 1x2 struct array with fields: nume legitimatie calificative Un sumar asemănător este afişat dacă se apelează funcţia MATLAB fieldnames(): » fieldnames(student) ans = 'nume' 'legitimatie' 'calificative' Pre-alocarea câmpurilor şi definirea unei structuri se poate realiza folosind şi funcţia MATLAB struct(). Câmpul unei structuri poate conţine orice tip de date, chiar şi o altă structură. De exemplu, se poate crea o structură, fie numele acesteia “cursuri”, care să conţină date privind cursurile susţinute de studenţi, în care un câmp va fi alocat titlului cursului, şi alt câmp va conţine structura “student”, creată anterior:

Page 132: MATLAB IN MECANICA

MATLAB în ingineria mecanică

134

» cursuri.titlu='Metode numerice'; » cursuri.grupa=student; » cursuri cursuri = titlu: 'Metode numerice' grupa: [1x2 struct] Se poate aloca un al doilea element structurii “cursuri”, să presupunem, pentru un alt curs: » cursuri(2).titlu='Metode numerice IMT'; » cursuri(2).grupa=student; Pentru a afişa titlurile cursurilor se foloseşte instrucţiunea: » cursuri(1:2).titlu ans = Metode numerice ans = Metode numerice IMT Pentru a se afişa numele studenţilor participanţi la cursuri, se foloseşte instrucţiunea: » cursuri(1).grupa(1:2).nume ans = Juan Antonio Cajigal ans = Luis Jimenez MATLAB permite generarea unei liste cu “variabile separate prin virgulă”, prin extragerea acestora din câmpurile structurii, folosind funcţia specifică deal(). De exemplu, pentru crearea unei liste conţinând numele studenţilor participanţi la cursuri, se foloseşte instrucţiunea: » [nume1,nume2]=deal(cursuri(1).grupa(1:2).nume) nume1 = Juan Antonio Cajigal nume2 = Luis Jimenez Pentru ştergerea sau anularea unor câmpuri ale structurii create se foloseşte funcţia MATLAB rmfield().

Page 133: MATLAB IN MECANICA

MATLAB în ingineria mecanică

135

STRUCTURI CELULARE Celula este entitatea cea mai comună în MATLAB. Celula poate fi asimilată cu un “conteiner de date” care poate conţine orice tip de date:tablouri de valori numerice, sau şiruri de caractere, structuri sau celule. Definirea celulelor

Indexare: Considerând că structura “student”, creată în paragraful anterior, există stocată în memoria calculatorului, se poate defini o structură celulară (“2x2”) prin atribuirea datelor din celulele specificate: » c(1,1)={rand(3)}; » c(1,2)={char('Bonzai','Makay')}; » c(2,1)={13}; » c(2,2)={student}; » c c = [ 3x3 double ] [ 2x6 char ] [ 13] [ 1x2 struct ] În această grupare de instrucţiuni, parantezele rotunde din partea stângă a semnului de atribuire (“=”), au acelaşi rol ca şi în cazul tablourilor de valori, sau al matricilor, având semnificaţia de referire la un anumit element al structurii celulare. Ceea ce diferenţiază structurile celulare de tablourile de valori, este utilizarea parantezelor acolade (“{ }”), în partea dreaptă a semnului de atribuire. Aceste caractere (“{ }”), folosite numai în partea dreaptă a semnului de atribuire, arată conţinutul unei celule, având rol de constructori ai structurii celulare. Dacă aceste caractere (“{ }”), sunt folosite în alte situaţii, atunci acestea se referă la elementul specificat în interiorul parantezelor. De exemplu, instrucţiunea: »cellplot(c) afişează, într-o figură separată, structura celulară “c”:

Page 134: MATLAB IN MECANICA

MATLAB în ingineria mecanică

136

iar instrucţiunea: »celldisp(c) afişează, în fereastra de comandă, structura celulară “c”: c{1,1} = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 c{2,1} = 13 c{1,2} = Bonzai Makay c{2,2} = 1x2 struct array with fields: nume legitimatie calificative Apelarea, în linia de comandă, a elementelor structurii celulare, se realizează folosind parantezele acolade, în combinaţii cu parantezele rotunde, sau

Page 135: MATLAB IN MECANICA

MATLAB în ingineria mecanică

137

drepte. Astfel, apelarea celulei de pe poziţia 1, respectiv afişarea conţinutului acestei celule, se realizează cu instrucţiunea: » c{1} ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 Elementul de pe poziţia (2,3), al celulei 1, se apelează cu instrucţiunea: » c{1}(2,3) ans = 0.0185 În mod similar, sunt afişate celelalte celule ale structurii celulare “c”: » c{2} ans = 13 » c{3} ans = Bonzai Makay » c{4} ans = 1x2 struct array with fields: nume legitimatie calificative De observat că elementele unei structuri celulare sunt “citite” pe coloană. STRUCTURI CELULARE MULTIDIMENSIONALE Structurile celulare multidimensionale, în MATLAB, sunt extensii normale ale matricilor bi-dimensionale.

Page 136: MATLAB IN MECANICA

MATLAB în ingineria mecanică

138

Trebuie reamintit faptul că matricile sunt caracterizate prin cele două dimensiuni:numărul de linii şi numărul de coloane. Astfel, în figura de mai jos se poate vedea că, dacă fiecare locaţie a grilei reprezintă un element al matricei, atunci, un element al matricei poate fi accesat prin apelarea sa cu doi indici reprezentând numărul liniei, respectiv al coloanei pe care acesta se regăseşte în matricea dată. Structurile multidimensionale utilizează indici suplimentari pentru apelarea unui element. Astfel, o structură tri-dimensională utilizează trei indici de apel:

Primul indice reprezintă linia; Al doilea indice reprezintă coloana; Al treilea indice reprezintă pagina.

Reprezentarea schematică a unei structuri multidimensionale se regăseşte în figura următoare:

Dimensiunile structurii multidimensionale

De exemplu, pentru apelarea unui element de pe linia 2, coloana 3 şi pagina 2 (schema alăturată ), se vor folosi trei indici de acces (2,3,2). Dacă se adaugă dimensiuni suplimentare unei structuri, atunci şi elementele vor fi accesate prin indici suplimentari. De exemplu, pentru o reţea cu patru dimensiuni se vor folosi patru indici:primii doi pentru perechea linie-coloană şi ultimii doi pentru a treia şi a patra dimensiune.

Page 137: MATLAB IN MECANICA

MATLAB în ingineria mecanică

139

CREAREA STRUCTURILOR CELULARE MULTIDIMENSIONALE Pentru crearea structurilor celulare multidimensionale se folosesc, în principiu, tehnici similare celor pentru generarea matricilor bi-dimensionale. În plus, specific structurilor multidimensionale, MATLAB dispune de funcţii speciale de concatenare. Generarea structurilor celulare multidimensionale este posibilă prin:

A). Utilizarea indexării ; B). Utilizarea funcţiilor MATLAB ; C). Utilizarea funcţiei cat().

A). Generarea structurilor celulare multidimensionale prin indexare O cale, simplă, pentru crearea structurilor multidimensionale, este de a genera o matrice bidimensională şi apoi aceasta sa fie extinsă. De exemplu, pentru a suplimenta, dimensiunile unei matrici, cu o pagină nouă, se procedează astfel:

Considerând matricea ⎥⎥⎥

⎢⎢⎢

⎡=

634910875

A cu dimensiunea 3x3,

1. –se introduce de la tastatură matricea A: » A = [5 7 8; 0 1 9; 4 3 6];

2. –se suplimentează dimensiunea matricei A, adăugând o pagină:

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

5 7 8 0 1 9 4 3 6

A(:,:,2) = 1 0 4 3 5 6 9 8 7

B). Generarea structurilor multidimensionale prin funcţii MATLAB Se pot foslosi funcţiile MATLAB, cum ar fi randn(), zeros(), ones(), pentru generarea structurilor multidimensionale, exact ca în cazul matricilor bi-

Page 138: MATLAB IN MECANICA

MATLAB în ingineria mecanică

140

dimensionale: » retea_arbitrara = randn(6,5,2)

retea_arbitrara(:,:,1) = -0.1199 -0.0793 0.0359 0.1326 -1.0246 -0.0653 1.5352 -0.6275 1.5929 -1.2344 0.4853 -0.6065 0.5354 1.0184 0.2888 -0.5955 -1.3474 0.5529 -1.5804 -0.4293 -0.1497 0.4694 -0.2037 -0.0787 0.0558 -0.4348 -0.9036 -2.0543 -0.6817 -0.3679 retea_arbitrara(:,:,2) = -0.4650 1.0378 1.9574 1.1902 0.0860 0.3710 -0.3898 0.5045 -1.1162 -2.0046 0.7283 -1.3813 1.8645 0.6353 -0.4931 2.1122 0.3155 -0.3398 -0.6014 0.4620 -1.3573 1.5532 -1.1398 0.5512 -0.3210 -1.0226 0.7079 -0.2111 -1.0998 1.2366

C). Generarea structurilor multidimensionale cu funcţia MATLAB cat() O metodă simplă pentru generarea structurilor celulare multidimensionale o constituie utilizarea funcţiei cat(), care concatenează o listă de alte structuri pe mai multe dimensiuni. Forma generală a funcţiei este: B = cat(dim,A1,A2...), în care A1,A2..., reprezintă lista de structuri celulare multidimensionale, iar dim, este dimensiunea: » B = cat(3,[2 8 4 9;1 0 5 3],[1 3 3 5 ; 4 7 9 7]) B(:,:,1) =

2 8 4 9 1 0 5 3

B(:,:,2) =

1 3 3 5 4 7 9 7

» a = magic(3); b = pascal(3); c = cat(2,a,b) c =

8 1 6 1 1 1 3 5 7 1 2 3 4 9 2 1 3 6

Page 139: MATLAB IN MECANICA

MATLAB în ingineria mecanică

141

» a = magic(3); b = pascal(3); c = cat(5,a,b) c(:,:,1,1,1) =

8 1 6 3 5 7 4 9 2

c(:,:,1,1,2) = 1 1 1 1 2 3 1 3 6

MODIFICAREA FORMEI STRUCTURILOR CELULARE MULTIDIMENSIONALE Dacă nu se solicită schimbarea formei sau dimensiunilor, o reţea multidimensională îşi păstrează caracteristicile specificate atunci când a fost creată. Dimensiunile structurii se pot modifica prin ştergerea sau adăugarea unor elemente, iar forma structurii se poate schimba prin specificarea unui număr diferit de linii, coloane sau pagini. Forma generală a funcţiei MATLAB pentru modificarea formei unei structuri este: R=reshape(A,[s1,s2,s3,…]), în care A este structura a cărei formă urmează a fi schimbată, iar s1,s2,s3,…, reprezintă noile dimensiuni ale structurii cu forma schimbată. Schema de lucru a funcţiei reshape() este reprezentată în schiţele de mai jos: (functia reshape() se foloseste şi pentru tablouri mxn-dimensionale, respectiv în cazul Sistemelor de Control sau ca bloc sursă pentru crearea schemelor Simulink).

Schimbarea formei structurilor

Page 140: MATLAB IN MECANICA

MATLAB în ingineria mecanică

142

ORGANIZAREA DATELOR ÎN STRUCTURILE CELULARE MULTIDIMENSIONALE Structurile multidimensionale pot fi utilizate pentru stocarea şi reprezentarea datelor în două moduri:

Ca plane sau pagini cu date bi-dimensionale. Acestea pot fi tratate ca matrici bi-dimensionale;

Ca date multivariabile sau multidimensionale. De exemplu, se pot reprezenta structuri 4-dimensionale în care fiecare element corespunde temperaturii sau presiunii aerului măsurate într-un set de puncte ale unei incinte.

De exemplu, dacă se consideră o imagine RGB, a cărei matrice de culoare poate fi reprezentată ca în figura de mai jos:

sau mulţimea temperaturilor măsurate într-un număr egal de puncte:

Page 141: MATLAB IN MECANICA

MATLAB în ingineria mecanică

143

APLICAŢII [1]:

Fie:⎥⎥⎦

⎢⎢⎣

⎡= 5lg4

2

e65645ln3e2ea ,

⎥⎥⎦

⎢⎢⎣

⎡ π−= 65

4

e

357log9281b ,c=2

⎥⎥⎥

⎢⎢⎢

=6

83lne

e7d 2

3

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

[2]:

Fie:⎥⎥⎦

⎢⎢⎣

⎡ −π=

4ln6545321,0a 5 ,

⎥⎥⎦

⎢⎢⎣

⎡ π−=

e3593581b 7log7lg 4

,

c=10, d=⎥⎥⎥

⎢⎢⎢

−6

83lne

e72

3

.

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

[3]:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

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

Page 142: MATLAB IN MECANICA

MATLAB în ingineria mecanică

144

[4]:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

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

[5]:

Fie : ⎥⎦

⎤⎢⎣

⎡=

654321

a , b= ⎥⎦

⎤⎢⎣

⎡ π−359

81, c=10.

Să se calculeze : ab; ac; ca; cb.

[6]:

Să se determine transpusa tabloului ⎥⎥⎦

⎢⎢⎣

+−−π

=97111i23i0631a .

Page 143: MATLAB IN MECANICA

MATLAB în ingineria mecanică

145

matricele sau expresiile matriceale care se compară ;

CAPITOLUL IV

UTILIZAREA OPERATORILOR RELAŢIONALI Mediul de programare MATLAB utilizează, pentru compararea a două

matrici cu dimensiuni identice, “element cu element”, şase operatori relaţionali:

Operatori relaţionali Semnificaţia < Mai mic decât …

<= Mai mic sau egal cu … > Mai mare decât …

>= Mai mare sau egal cu … == Identic cu … ~= Diferit de …

După executarea operaţiei, MATLAB afişează o matrice, identică dimensional cu cele comparate, având ca elemente “simbolurile” 1(unu) respectiv 0(zero), după cum relaţia dintre elementele comparate este “ADEVĂRATĂ” (TRUE) respectiv “FALSĂ” (FALSE). Forma generală a sintaxei este:

Rezultat=expresie_1 operator relaţional expresie_2 În care :

-Rezultat- este o matrice cu elementele 0 şi 1, obţinută prin compararea celor două expresii;

-expresie_1 -expresie_2-

-operator relaţional- operatorii relaţionali definiţi în tabelul anterior.

Ex.:

Să se compare elementele matricei ⎟⎟⎟

⎜⎜⎜

⎛=

987654321

A cu scalarul 5logeB 32 −= .

Folosind secvanţa MATLAB următoare:

Page 144: MATLAB IN MECANICA

MATLAB în ingineria mecanică

146

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

1 1 1 1 1 0 0 0 0

» A>=B ans =

0 0 0 0 0 1 1 1 1

» A==B ans =

0 0 0 0 0 0 0 0 0

» A~=B ans =

1 1 1 1 1 1 1 1 1

Ex.:

Să se compare matricele ⎥⎥⎥

⎢⎢⎢

⎡−=

312503421

A şi ⎥⎥⎥

⎢⎢⎢

−−−

=145223312

B .

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

» A=[-1,2,4;3,0,5;2,1,3];B=[2,-1,3;3,-2,2;5,-4,1]; se obţin rezultatele:

» A<B ans =

1 0 0 0 0 0 1 0 0

Page 145: MATLAB IN MECANICA

MATLAB în ingineria mecanică

147

» A<=B ans =

1 0 0 1 0 0 1 0 0

» A>B ans =

0 1 1 0 1 1 0 1 1

» A>=B ans =

0 1 1 1 1 1 0 1 1

» A==B ans =

0 0 0 1 0 0 0 0 0

» A~=B ans =

1 1 1 0 1 1 1 1 1

OPERATORI LOGICI

MATLAB utilizează trei operatori logici principali şi unul auxiliar:

Operatori logici Simbolizare Semnificaţie Prioritate NU ~ NOT 1 ŞI & AND 2

SAU | OR 3 SAU, exclus ŞI XOR 4

Page 146: MATLAB IN MECANICA

MATLAB în ingineria mecanică

148

Aceşti operatori lucrează ca şi cei relaţionali, element cu element, dar numai cu matrici sau tablouri având elemente logice: 0 sau 1. Dacă elementele unei matrici sunt zero şi 1 sau valori diferite de zero, atunci cele diferite de zero se setează, automat, la valoarea logică 1.

Obs: Operatorii logici nu pot fi folosiţi în combinarea a două expresii simbolice (“syms”).

PRECEDENŢA OPERATORILOR Precedenţa operatorilor determină ordinea în care MATLAB realizează evaluarea expresiilor. Ordinea în care sunt executate operaţiile şi prioritatea operatorilor, în MATLAB, este caracterizată de următoarele nivele, ordonate dinspre nivelul superior spre nivelul inferior:

1. Parantezele ( ) 2. Transpunerea (.‘), puterea (.^), transpunerea conjugată

complexă (‘), puterea matricilor (^); 3. Adunarea unară (+), scăderea unară (-), negarea logică (~); 4. Înmulţirea (.*), împărţirea la dreapta (./), împărţirea la stânga

(.\), înmulţirea matricilor (*), împărţirea la dreapta a matricilor (./), împărţirea la stânga a matricilor (.\);

5. Adunarea (+), scăderea (-); 6. Operatorul columnar (:); 7. Operatorii relaţionali: mai mic decât (<), mai mic sau egal

decât (<=), mai mare decât (>),mai mare sau egal decât (>=), egal cu (==), diferit de (~=);

8. Operatorul logic ŞI (&); 9. Operatorul logic SAU (|);

Prioritatea maximă o are operatorul NU, ceilalţi operatori logici având prioritate egală, execuţia acestora fiind dată de regula “de la stânga la dreapta”. Prioritatea “de la stânga la dreapta” generează echivalenţa între două expresii relaţionale. Astfel, expresia a|b&c este echivalentă cu (a|b)&c. Oricum, în cele mai multe dintre limbaje, expresia a|b&c este echivalentă cu a|(b&c), ceea ce denotă, de altfel, prioritatea operatorului & faţă de |. Pentru a exista compatibilitatea cu viitoarele versiuni MATLAB este indicat ca utilizatorul sa folosească paranteze pentru a se specifica prioritatea de execuţie a operatorilor & respectiv |. Următoarele două expresii ilustrează prioritatea operatorilor:

Page 147: MATLAB IN MECANICA

MATLAB în ingineria mecanică

149

1 | 0 & 0 = 0 0 & 0 | 1 = 1 Tabelul de adevăr al acestor operatori este:

Date de intrare and Or xor not A B A&B A|B xor(A,B) ~A ~B0 0 0 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 0 0 0

CUVINTE CHEIE MATLAB rezervă o listă de cuvinte cheie, listă care poate fi afişată, pentru evitarea erorilor de evaluare şi de redactare a expresiilor logice, cu funcţia iskeyword, în linia de comandă MATLAB:

» [Cuvinte_cheie]=iskeyword Cuvinte_cheie = 'break' 'case' 'catch' 'continue' 'else' 'elseif' 'end' 'for' 'function' 'global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'

Page 148: MATLAB IN MECANICA

MATLAB în ingineria mecanică

150

INSTRUCŢIUNILE “if “, “else”, “elseif”

Instrucţiunea ”if” (“dacă”) poate fi implementată în “format” simplu sau în asociere cu clauzele “else” (“altfel”) respectiv “elseif” (“altfel … dacă”). Acţiunea instrucţiunii ”if” trebuie sa se finalizeze, întotdeauna, cu instrucţiunea ”end” (“sfârşit”). Forma generală a sintaxei este:

a) if expresie_logică grup_de_instrucţiuni end

b) if expresie_logică_1 grup_de_instrucţiuni_A else grup_de_instrucţiuni_B

end c) if expresie_logică_1

grup_de_instrucţiuni_A elseif expresie_logică_2 grup_de_instrucţiuni_B end

d) if expresie_logică_1 grup_de_instrucţiuni_A elseif expresie_logică_2 grup_de_instrucţiuni_B else grup_de_instrucţiuni_C end Diferenţa dintre else şi elseif se poate vedea în exemplul următor : Instrucţiunea if- else Instrucţiunea if- elseif

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

Page 149: MATLAB IN MECANICA

MATLAB în ingineria mecanică

151

else end x = d end end end

Ex.: Să se calculeze valoarea expresiei :

⎪⎪⎪⎪

⎪⎪⎪⎪

≤<+

π

≤≤−⎟⎟⎠

⎞⎜⎜⎝

⎛+++

−<≤−−

=

15x10dacă5e456,0

3

10x4dacă3x2xlog

4x6dacă4e

f

4x

5

3 425

3x

2

, pentru valorile întregi ale

variabilei x. Se va folosi următoarea secvenţă MATLAB (pentru simplificare se va utiliza funcţia length(x) şi o buclă repetitivă for, care va fi prezentată în secţiunea următoare):

» x=-6:15; » for k=1:length(x)

if x(k)<-4 f(k)=exp(x(k)-3)-4 elseif (x(k)>=-4)&(x(k)<=10) f(k)=(log(x(k)^2+(2+sqrt(x(k)^4+3))^(1/3))) else f(k)=det([pi,3^(1/5);0.456,exp(x(k)^2-4)]) end

end

Rezultatul afişat de MATLAB este următorul∗: f = 1.0e+096 * Columns 1 through 7 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

∗ se prezintă aici numai valoarea « finală » a expresiei f, valorile intermediare fiind omise, pentru acurateţea prezentării

Page 150: MATLAB IN MECANICA

MATLAB în ingineria mecanică

152

INSTRUCŢIUNEA DE CICLARE « for »

Sintaxa pentru forma generală este: for index=expresie

grup_de_instrucţiuni end

în care : index –reprezintă contorul de iterare expresie- este o matrice, un scalar sau, de cele mai multe ori, o expresie de forma : n= »valoare iniţială « : « pas » : « valoare finală » Regulile specifice buclei « for » sunt:

1) –dacă expresia atribuită indexului este un scalar, bucla se execută o singură dată, valoarea indexului fiind valoarea scalarului

2) –dacă expresia indexului este un vector linie, bucla se execută de « n » ori, unde « n » reprezintă dimensiunea vectorului ;

3) –dacă expresia este o matrice, indexul va « lua » toate valorile matricei « pe coloană » ;

4) –dacă expresia este de forma : »valoare iniţială « : « pas » : « valoare finală », iar pasul are valoare pozitivă, atunci valoarea iniţială trebuie sa fie mai mică decât valoarea finală ;

5) –dacă expresia este de forma : »valoare iniţială « : « pas » : « valoare finală », iar pasul are valoare negativă, atunci valoarea iniţială trebuie sa fie mai mare decât valoarea finală ;

6) –dacă expresia este de forma : »valoare iniţială « : « valoare finală », atunci pasul de indexare este, implicit, 1 (unu).

Un exemplu foarte simplu pentru utilitatea instrucţiunii de ciclare for, ar fi calculul factorialului unui număr natural. Dacă se cere calculul numărului de permutări (factorialul), aferente lui n=10, se foloseşte următoarea secvenţă de instrucţiuni:

“De la …” “Până la …”

Page 151: MATLAB IN MECANICA

MATLAB în ingineria mecanică

153

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

Rezultatul afişat în fereastra de comandă, la apăsarea tastei ENTER, este: 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 Multe probleme în inginerie presupun dezvoltarea unui model matematic pentru caracterizarea unui proces, în care variabila principală este actualizată ciclic de-a lungul unei perioade de timp. Această operaţie se numeşte actualizare. Pentru a exemplifica, se consideră un proces de actualizare a temperaturii unui corp, a cărui temperatură iniţială este 25 oC, amplasat într-un mediu a cărui temperatură este 10 oC, după un interval de menţinere la temperatura mediului, de 100 minute. Modul de abordare a acestui tip de probleme este o cale standard:

se divide intervalul de timp în sub-intervale egale (paşi), de lungime dt; dacă temperatura de start este Ti, atunci se va folosi următorul model

matematic, pentru calculul temperaturii la un moment i+1, Ti+1: ( )fii1i TTdtKTT −⋅⋅−=+ în care, K este un coeficient (valoarea K=0,05) care ţine seama de

imperfecţiunile mediului, iar Tf este temperatura finală (Tf=10 oC). Fişierul script realizat pentru rezolvarea problemei de actualizare, stabileşte valoarea iniţială a intervalului de timp (a=0), respectiv finală (b=100 minute). Dacă intervalul de afişare nu este un multiplu de pasul de calcul, se va afişa un mesaj de eroare “Intervalul de afisare nu este un multiplu de dt !”:

K = 0.05;

Page 152: MATLAB IN MECANICA

MATLAB în ingineria mecanică

154

Tf = 10; %temperatura finala a = 0; % momentul initial b = 100; % intervalul de timp Timp_initial = a; % initializarea intervalului de timp T = 25; % initializarea temperaturii dt = input( 'dt: ' ); % intervalul de calcul (pasul) Intervalul_de_afisare = input('Afisarea rezultatelor la interval de (minute):' ); if Intervalul_de_afisare/dt ~= fix(Intervalul_de_afisare/dt)

disp( 'Intervalul de afisare nu este un multiplu de dt !' ); end

format bank disp( ' Timp Temperatura' ); disp( [Timp_initial T] ) % afiseaza momentul actualizarii si temperatura for Timp_actualizare = a+dt : dt : b T = T - K * dt * (T - Tf); if abs(rem(Timp_actualizare, Intervalul_de_afisare)) < 1e-6 disp( [Timp_actualizare T] ) end end %FINAL PROGRAM

După ultima linie de instrucţiuni, end, (la apăsarea tastei ENTER), se afişează, în linia de comandă un mesaj prin care se cere utilizatorului să introducă pasul dt, apoi se cere stabilirea intervalului de afişare a rezultatelor, după un interval de timp: “Afisarea rezultatelor la interval de (minute):”. Pentru exemplificare, se va rula, acest fişier, în două variante (dt=0.2 şi Intervalul_de_afisare=5, respectiv dt=0.3 şi Intervalul_de_afisare=1.33), rezultatele fiind: Varianta I (dt=0.2 şi Intervalul_de_afisare=5 ) dt: .2 Afisarea rezultatelor la interval de (minute): 5 Timp Temperatura 0 25.00 5.00 21.67 10.00 19.08 15.00 17.06 20.00 15.49 25.00 14.27

Page 153: MATLAB IN MECANICA

MATLAB în ingineria mecanică

155

30.00 13.32 35.00 12.58 40.00 12.01 45.00 11.56 50.00 11.22 55.00 10.95 60.00 10.74 65.00 10.57 70.00 10.45 75.00 10.35 80.00 10.27 85.00 10.21 90.00 10.16 95.00 10.13 100.00 10.10 Varianta II (dt=0.3 şi Intervalul_de_afisare=1.33 ) dt: .3 Afisarea rezultatelor la interval de (minute): 1.33 Intervalul de afisare nu este un multiplu de dt ! Timp Temperatura 0 25.00 39.90 12.01 79.80 10.27 Ex. : Să se calculeze şi să se reprezinte grafic funcţiile : a) xsinf = dacă [ ]ππ−∈ 2,2x , cu pasul de indexare de 0,1;

b) [ ]( ]

( ) ( ]⎪⎩

⎪⎨

∈+−∈−

−∈+=

25,8mdaca195mlog8,2mdaca2

2,10mdaca2eg

723

m

cu pasul de indexare de –0,3.

a) Cu sintaxa Matlab : » x=-2*pi:0.1:2*pi; » f=sin(x); » plot(x,f)

Page 154: MATLAB IN MECANICA

MATLAB în ingineria mecanică

156

se obţin valorile funcţiei f, care vor fi afişate dacă se tastează, în linia de comandă, numele acesteia, şi, într-o fereastră grafică Figure 1 reprezentarea funcţiei f :

b) Pentru funcţia g se foloseşte 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)^2-

5^(1/7))+19)/log(3) end end » plot(m,g)

Se obţin valorile indexate ale funcţiei g∗ şi graficul din figura alăturată : Ex.: Un fişier script care generează « petale » : theta = -pi:0.01:pi; rho(1,:) = 2*sin(5*theta).^2; rho(2,:) = cos(10*theta).^3; rho(3,:) = sin(theta).^2; rho(4,:) = 5*cos(3.5*theta).^3; for i = 1:4 polar(theta,rho(i,:)) pause end

∗ nu s-au prezentat aici valorile funcţiei, pentru acurateţea lucrării

- 8 - 6 - 4 - 2 0 2 4 6 8- 1

- 0 . 8

- 0 . 6

- 0 . 4

- 0 . 2

0

0 . 2

0 . 4

0 . 6

0 . 8

1

-10 -5 0 5 10 15 20 25-5

0

5

10

15

20

25

Page 155: MATLAB IN MECANICA

MATLAB în ingineria mecanică

157

Ex.: O secvenţă de instrucţiuni care generează zone de culoare cu intensităţi diferite : [x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading interp hold off Ex. 7 O secvenţă de instrucţiuni care împarte o figură în mai multe părţi: t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X) subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z) Ex.: O secvenţă de instrucţiuni care generează o matrice: m=4;n=3; for i = 1:m for j = 1:n A(i,j) = 1/(i + j - 1); end end A = Columns 1 through 8 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833

Page 156: MATLAB IN MECANICA

MATLAB în ingineria mecanică

158

Ex.: Un fişier care generează o matrice (s-au introdus, aici, şi linii de help, folosind modul de scriere MATLAB, linia de text, care conţine informaţia, este precedată de caracterul “%”): for i = 1:10 A(i,i) = 1; % se introduce cifra “ 1”, pe diagonala principală if (i > 1) A(i,i-1) = 2; % se introduce cifra “ 2”, în faţa diagonalei principale, dar numai pe ultimele 9 linii, end if (i < 10) A(i,i+1) = 5; % se introduce cifra “ 5”, în dreapta diagonalei principale, dar numai pe primele 9 linii, end end Dacă se tastează numele matricei (“A”), se afişează următorul rezultat: A = 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 5 0 0 0 0 0 0 0 0 2 1 Ex. : Un fişier script de operare cu matrici: m1=[-4 1 0; 1 -4 1; 0 1 -4] m2=eye(3) m3=zeros(3,3) a=[m1 m2 m3; m2 m1 m2; m3 m2 m1] b=[-100; -100; -100; 0; 0; 0; 0; 0; 0] a\b

Page 157: MATLAB IN MECANICA

MATLAB în ingineria mecanică

159

b = ans = -100 42.8571 -100 52.6786 -100 42.8571 0 18.7500 0 25.0000 0 18.7500 0 7.1429 0 9.8214 0 7.1429

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 Ex. : Un fişier script de operare cu matrici: k(1)=1.5; k(2)=1; k(3)=1.5; k(4)=2; l(1)=0.3; l(2)=0.1; l(3)=0.2; l(4)=0.2; b=zeros(4,1); for i=1:3 b(i)=k(i)*l(i)-k(i+1)*l(i+1); end b(4)=1; m=zeros(4,4); for i=1:3 m(i,i)=k(i)+k(i+1); m(i+1,i)=-k(i+1); m(i,i+1)=-k(i+1); end m(4,4)=1; m(4,3)=0; b m x=m\b Rezultatele sunt :

Page 158: MATLAB IN MECANICA

MATLAB în ingineria mecanică

160

Ex.: Un fişier script de operare cu matrici: coord(1,1)=-0.6; coord(1,2)=0; coord(2,1)=-0.9; coord(2,2)=1.5; coord(3,1)=-1.6; coord(3,2)=1.8; coord(4,1)=0; coord(4,2)=2.7; coord(5,1)=1.6; coord(5,2)=1.8; coord(6,1)=0.9; coord(6,2)=1.5; coord(7,1)=0.6; coord(7,2)=0; c(1,1)=1; c(1,2)=2; c(2,1)=2; c(2,2)=3; c(3,1)=3; c(3,2)=4; c(4,1)=4; c(4,2)=5; c(5,1)=5; c(5,2)=6; c(6,1)=6; c(6,2)=7;

b = 0.3500 -0.2000 -0.1000

1.0000

m = 2.5000 -1.0000 0 0 -1.0000 2.5000 -1.5000 0 0 -1.5000 3.5000 -2.0000 0 0 0 1.0000

x = 0.3471 0.5176 0.7647

1.0000

Page 159: MATLAB IN MECANICA

MATLAB în ingineria mecanică

161

c(7,1)=7; c(7,2)=8; m=zeros(7,7); for i=1:7 if c(i,1)~=1 if c(i,1)==8 dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; elseif c(i,1)==7 dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; m(11,i)=(coord(c(i,1),1)-coord(c(i,2),1))/dist; else dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; m(2*c(i,1)-3,i)=(coord(c(i,1),1)-coord(c(i,2),1))/dist; m(2*c(i,1)-2,i)=(coord(c(i,1),2)-coord(c(i,2),2))/dist; end end if c(i,2)~=1 if c(i,2)==8 dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; elseif c(i,2)==7 dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; m(11,i)=(coord(c(i,2),1)-coord(c(i,1),1))/dist; else dist=((coord(c(i,1),1)-coord(c(i,2),1))^2+(coord(c(i,1),2)- coord(c(i,2),2))^2)^0.5; m(2*c(i,2)-3,i)=(coord(c(i,2),1)-coord(c(i,1),1))/dist; m(2*c(i,2)-2,i)=(coord(c(i,2),2)-coord(c(i,1),2))/dist; end end end m b=zeros(11,1); b(4,1)=-10; b d=m\b % FINAL PROGRAM

Page 160: MATLAB IN MECANICA

MATLAB în ingineria mecanică

162

Acest fişier script, rulat în MATLAB, la apăsarea tastei ENTER, va avea ca efect afişarea următoarelor rezultate: m = -0.1961 0.9191 0 0 0 0 0 0.9806 -0.3939 0 0 0 0 0 0 -0.9191 -0.8716 0 0 0 0 0 0.3939 -0.4903 0 0 0 0 0 0 0.8716 -0.8716 0 0 0 0 0 0.4903 0.4903 0 0 0 0 0 0 0.8716 0.9191 0 0 0 0 0 -0.4903 0.3939 0 0 0 0 0 0 -0.9191 0.1961 0 0 0 0 0 -0.3939 0.9806 0 0 0 0 0 0 -0.1961 0.3714 b = 0 0 0 -10 0 0 0 0 0 0 0 d = -2.1265 -3.7535 3.8868 1.1340 -0.4106 -0.2326 -0.1228

Page 161: MATLAB IN MECANICA

MATLAB în ingineria mecanică

163

Ex.: Un fişier pentru calculul elementelor traiectoriei unui proiectil (viteză, inălţime, distanţă) lansat sub un anumit unghi faţă de orizontală, sub acţiunea gravitaţiei: dt = 0.1; g = 9.8; u = 60; Alfa = input( 'Introduceti unghiul de lansare al proiectilului: ' ); Radian = Alfa * pi / 180; % conversia in radiani x_initial = zeros(1); y_initial = zeros(1); % initializare y = 0; t = 0; i = 1; % initial vector subscript while y >= 0 t = t + dt; i = i + 1; y = u * sin(Radian) * t - g * t^2 / 2; if y >= 0 Distanta_pe_x(i) = u * cos(Radian) * t; Inaltimea_pe_y(i) = y; end end plot(Distanta_pe_x, Inaltimea_pe_y,'k'), grid on; hold on După rularea fişierului se afişează invitaţia adresată operatorului de a introduce datele de iniţializare (unghiul de lansare), şi realizarea calculelor necesare reprezentării grafice a traiectoriei proiectilului: Pentru cinci unghiuri de lansare diferite, rezultă graficul din figură.

Page 162: MATLAB IN MECANICA

MATLAB în ingineria mecanică

164

APLICAŢII [1]:

Să se compare elementele matricei ⎥⎥⎥

⎢⎢⎢

⎡−=

312503421

A cu scalarul B= π ;

[2]:

Să se compare elementele matricei

⎥⎥⎥

⎢⎢⎢

−−−

=145223312

C cu elementele

matricei ⎥⎥⎥

⎢⎢⎢

⎡−=

312503421

A ;

[3]:

Să se compare elementele matricelor ⎥⎦

⎤⎢⎣

⎡−−

=⋅⎥⎦

⎤⎢⎣

⎡−−

=74

138E;

8321

D ;

[4]:

Să se compare elementele matricelor ⎥⎥⎥

⎢⎢⎢

−−−

=⎥⎥⎥

⎢⎢⎢

⎡=

145223312

Y;234

X cu

scalarul 7logx 43= ;

[5]:

Să se realizeze un fişier script pentru afişarea unei matrici cu dimensiunea 3x4 în care elementele primei linii să difere printr-o constantă, număr natural, elementele celei de-a doua linii să difere prin constanta e2, iar elementele ultimei linii sa difere prin ln8.

Page 163: MATLAB IN MECANICA

MATLAB în ingineria mecanică

165

[6]: Să se actualizeze fişierul de mai jos astfel încât să se afişeze încă două

butoane la alegere : k=0;

while k~=3 k=menu('Faceti clic pe una dintre optiuni','Fa asta','Fa alta',

'Iesire'); if k==1

disp('Fa asta...Apasa orice cheie pentru a continua...') pause

elseif k==2 disp('Fa alta...Apasa orice cheie pentru a

continua...') pause

end end

[7]: Să se actualizeze fişierul de mai jos astfel încât să se afişeze încă două subgrafice, cu titlurile (c) şi (d): subplot(2,2,1) plot(rand(1, 20)),title('(a)') subplot(2,2,2) axis([0 4 0 4]) plot([0 4], [0 0], [1 1 2 3 3], [0 2 3 2 0]),title('(b)')

Page 164: MATLAB IN MECANICA

MATLAB în ingineria mecanică

166

[8]: Să se actualizeze fişierul de mai jos astfel încât să se afişeze 8, 12, 24 de „petale”:

x = 0:pi/40:2*pi; polar(x, sin(2*x)),grid

Page 165: MATLAB IN MECANICA

MATLAB în ingineria mecanică

167

[9]: Să se actualizeze fişierul de mai jos astfel încât să se solicite

utilizatorului să introducă diametrul „desenului”: n=1:200; d = 137.51; th = pi*d*n/180; r = sqrt(n); plot(r.*cos(th), r.*sin(th), '*') axis square

[10]: Să se actualizeze fişierul de mai jos astfel încât “pasul de desenare” să fie mai mic, respectiv, în altă variantă, să fie mai mare:

x = 0; y = 0; dx = pi/100; p = plot(x, y, 'o', 'EraseMode', 'none'); % 'xor' afişează numai punctele curente % ' none' afişează toate punctele axis([0 20*pi -2 2]) for x = dx:dx:20*pi; x = x + dx; y = sin(x); set(p, 'XData', x, 'YData', y) pause(0.05) end

Page 166: MATLAB IN MECANICA

MATLAB în ingineria mecanică

168

[11]: Să se actualizeze fişierul de mai jos astfel încât “sombrero-ul” să fie înclinat spre stânga sau spre dreapta, şi “lumina” să “cadă” din dreapta :

[x y ] = meshgrid(-8 : 0.5 : 8); r = sqrt(x.^2 + y.^2) + eps; z = sin(r) ./ r; surf(x,y,z,'facecolor','interp','edgecolor','none', ... 'facelighting','phong')

Page 167: MATLAB IN MECANICA

MATLAB în ingineria mecanică

169

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

[12]: Să se actualizeze fişierul de mai jos astfel încât imaginea reprezentării grafice să fie amplasată pe o “matrice” grafică de 3 linii şi 3 coloane (ca în figură): subplot(3,3,1) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted, subplot(3,3,2) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted, subplot(3,3,3) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,4) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,5) x = 0:pi/20:pi;

Page 168: MATLAB IN MECANICA

MATLAB în ingineria mecanică

170

bar(x,sin(x),'w'), shading faceted subplot(3,3,6) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,7) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,8) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,9) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted [13]: Să se actualizeze fişierul de mai jos astfel încât utilizatorul să fie solicitat să introducă viteza iniţială şi timpul total al mişcării g = 9.8; v0 = 60; t = 0 : 0.1 : 12.3; s = v0 * t - g / 2 * t .^ 2; plot(t, s), title( 'Miscarea pe verticala sub actiunea gravitatiei' ) xlabel( 'Timpul' ), ylabel( 'Inaltimea' ), grid disp( [t' s'] )

Page 169: MATLAB IN MECANICA

MATLAB în ingineria mecanică

171

CAPITOLUL V

CALCULE NUMERICE CU POLINOAME Pentru operarea cu polinoame, MATLAB utilizează funcţiile standard din tabelul următor:

Funcţia Descriere conv(p,q) -produsul polinoamelor p şi q [C,R]=deconv(p,q) -Câtul, C, şi restul R al împărţirii

polinoamelor p şi q 1. poly(r) 2. poly(A)

1. -determină polinoamele cu rădăcini date în vectorul coloană r

2. -determină coeficienţii polinomului caracteristic ai matricei pătratice A

1. polyder(p) 2. polyder(p,q) 3. [A,B]=polyder(p,q)

1. -derivata polinomului p 2. -derivata produsului polinoamelor p

şi q 3. -derivata fracţiei raţionale p/q

1. polyfit(x,y,n) 2. [p,S]=polyfit(x,y,n) 3. [p,S,miu]=polyfit(x,y,

n)

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. polyval(p,x) 2. polyval(p,q)

1. evaluarea polinomului p în punctul x, sau pe intervalul x

2. evaluarea polinomului p în punctele vectorului q

polyvalm(A) -evaluarea polinomului în elementele matricei pătratice A

[r,p,k]=residue(a,b) -descompunerea raportului a două polinoame a şi b în fracţii simple, având ca rezultat vectorul coloană al reziduurilor, r, vectorul coloană al polilor, p, şi k - vectorul linie al polinomului cât (A/B)

roots(p) -calculează rădăcinile unui polinom p

Page 170: MATLAB IN MECANICA

MATLAB în ingineria mecanică

172

REPREZENTAREA POLINOAMELOR Polinoamele sunt reprezentate, in MATLAB, ca vectori linie, conţinând coeficienţii ordonaţi după puterile descrescătoare ale variabilei. Forma generală a polinoamelor, în scrierea algebrică: f(x) = anxn+an-1xn-1+.....+a2x2+a1x+a0 iar reprezentarea acestuia, în MATLAB, este dată prin vectorul linie f=[a_n,a-_n_1,...,a2,a1,a0], în care elementele sunt reprezentate de coeficienţii polinomului de grad n. De exemplu, polinomul p(x)=x4 +7x3+x-8 se introduce astfel: »p=[1,7,0,1,-8] Ex. Fie polinoamele: f(x) = x3+2x2+0,5x-6,5 ; h(x)=x5+2x2-6 3 5 Aceste polinoame se scriu, în MATLAB: »f = [1,2, 0.5, -6.5]; »h=[1,0,0,2,0,-6*(5^(1/3))];

Obs.: În polinomul h(x) coeficienţii lui x4, x3 respectiv x, care lipsesc, sunt înlocuiţi cu valoarea 0 (zero). Altfel, MATLAB va introduce un polinom de grad inferior celui real (de exemplu, dacă h(x) ar fi introdus de la tastatură numai cu coeficienţii h=[1,2,-6*(5^(1/3))] acesta reprezintă polinomul h(x)=x2+2x--6 3 5 ) PRODUSUL POLINOAMELOR Produsul a două polinoame se realizează, în MATLAB, folosind funcţia conv() :

»c = conv(a, b) unde :

a, b - vectorii coeficienţilor polinoamelor care se înmulţesc Ex.: Să se calculeze produsul : g(x) = (x2+x-2)(x+1)

-în MATLAB: »g1 = [1 1 -2];g2 = [1 1];

»g = conv(g1, g2)

Page 171: MATLAB IN MECANICA

MATLAB în ingineria mecanică

173

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

ÎMPĂRŢIREA POLINOAMELOR Pentru realizarea împărţirii a două polinoame se foloseşte funcţia MATLAB deconv() :

» [c, r] = deconv(a, b)

în care : c - vectorul coeficienţilor polinomului cât r - vectorul coeficienţilor polinomului rest

Polinoamele c(x) şi r(x) respectă teorema împărţirii cu rest (p(x)=d(x)*c(x)+r(x), în care p(x) este polinomul- „deîmpărţit”, d(x) reprezintă

polinomul- „împărţitor” : )x(d)x(r)x(c

)x(d)x(p

+= )

Ex.: Să se calculeze câtul şi restul împărţirii polinoamelor h1(x)= x3+2x2-2 şi h2(x)= x2+x, folosind o funcţie MATLAB. -în MATLAB: »h1 = [1 2 0 -2]; »h2 = [1 1 0]; »[c, r] = deconv(h1, h2)

c = 1 1

r = 0 0 -1 -2 În format algebric uzual cătul împărţirii este: c(x)=x+1, iar restul r(x)= -x-2 .

Determinarea rădăcinilor unui polinom Determinarea rădăcinilor unui polinom, se realizează folosind funcţia

MATLAB roots() :

Page 172: MATLAB IN MECANICA

MATLAB în ingineria mecanică

174

»r = roots(a) în care: a - vector linie al coeficienţilor polinomului Ex.: Fie polinomul f(x) = x3-2x2-3x+10. Să se determine rădăcinile ecuaţiei f(x)=0. -în MATLAB »f = [1 -2 -3 10] »r=roots(f) ⇒ se obţine vectorul coloană al rădăcinilor

r = 2+i 2-i -2

DETERMINAREA COEFICIENTILOR POLINOAMELOR

DACĂ SE CUNOSC RĂDĂCINILE

Determinarea unui polinom, dacă se cunosc rădăcinile acestuia, se utilizează funcţia MATLAB poly(): » p = poly(z) în care: z – vectorul- coloană al rădăcinilor Ex.:

Fie rădăcinile unui polinom : x1=2; x2=3; x3=4. Să se determine polinomul cu rădăcinile x1; x2; x3.

Problema se va rezolva prin două metode: a)-algebric-clasic:folosind sumele Viète b)-în MATLAB: folosind funcţia poly()

Page 173: MATLAB IN MECANICA

MATLAB în ingineria mecanică

175

a) Soluţia algebrică: Folosind relaţiile Viète, se obţin sumele:

S1 = x1+x2+x3 ⇒ S1= 9 S2 = x1x2+x1x3+x2x3 ⇒ S2=26 S3 = x1x2x3 ⇒ S3= 24

Polinomul cu rădăcinile x1; x2; x3 se scrie, folosind forma generală a unui polinom (pentru care se cunosc sumele Viète p(x)=xn-S1xn-1+S2xn-2-......-Sn ) devine: p(x) = x3-9x2+26x-24. b) Rezolvare cu funcţia poly():

Folosind funcţia MATLAB poly(), rezolvarea este imediată:

» b=[2;3;4]; » p=poly(b) p =

1 -9 26 -24 Polinomul p(x), în format algebric, uzual, se scrie p(x) = x3-9x2+26x-24 .

Cu funcţia poly(), se determină şi coeficienţii polinomului caracteristic al unei matrici pătratice. De exemplu, cu secvenţa următoare, se determină polinomul ale carui rădăcini (se mai numesc şi rădăcini caracteristice) sunt valorile proprii ale matricei (valorile proprii ale matricei se determină cu funcţia MATLAB eig()):

» A = [1.2 3 -0.9; 5 1.75 6; 9 0 1];

» p=poly(A) p = 1.0000 -3.9500 -1.8500 -163.2750 »radacini=roots(p) radacini =

7.2826 -1.6663 + 4.4321i -1.6663 - 4.4321i

» valorile_proprii=eig(A) valorile_proprii =

7.2826 -1.6663 + 4.4321i -1.6663 - 4.4321i

Page 174: MATLAB IN MECANICA

MATLAB în ingineria mecanică

176

EVALUAREA NUMERICĂ A UNUI POLINOM

1) Evaluarea simplă: Se foloseşte în cazul în care polinomul are o expresie simplă şi valoarea

atribuită variabilei este un scalar.

Ex.: Să se calculeze valoarea polinomului f(x) = 3x4-5x3+3x-1 în punctul x = 2. În MATLAB, se declară, mai întâi, valoarea variabilei, apoi se introduce polinomul de evaluat, folosind regulile standard: » x = 2; » f = 3*(x^4)-5*(x^3)+3*x-1

f = 13

2) Evaluarea numerică element cu element Când variabila în care se evaluează polinomul este un vector sau o matrice

problema se rezolvă respectând regulile de calcul cu matrici şi tablouri de valori: a)- dacă variabila este un vector (linie sau coloană), calculul valorii polinomului se poate realiza numai dacă expresia polinomului este introdusă de la tastatură utilizând regulile pentru calculul cu tablouri de valori (variabila este considerată de MATLAB un tablou de valori, deci se va folosi caracterul „ . ” –punct, pentru operaţiile în care este implicată variabila) altfel, MATLAB afişează un mesaj de eroare: ??? Error using ==> ^ Matrix must be square. ??? Eroare la utilizarea ^ Matricile trebuie sa fie pătratice

Ex. 1)-variabila este un vector linie:

» x= [1 2 0];

Page 175: MATLAB IN MECANICA

MATLAB în ingineria mecanică

177

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

0 13 -1

Obs.:Dacă polinomul este introdus fără caracterul punct „ . „ în faţa operatorului pentru ridicare la putere:

» f = 3*x^4-5*x^3+3*x-1 MATLAB afişează mesajul:

??? Error using ==> ^ Matrix must be square.

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

» f = 3*x.^4-5*x.^3+3*x-1 f = 0 13 -1 b)- dacă variabila este o matrice pătrată, iar expresia ce urmează a fi evaluată este introdusă de la tastatură neţinând cont de modul de lucru cu tablouri de valori, expresia este calculată astfel: se determină „puterile” matricei după care sunt înmulţite cu coeficienţii, rezultatele acestor înmulţiri fiind, apoi, însumate algebric, soluţia fiind, evident, o matrice de aceeaşi dimensiune ca şi variabila. În acest caz, polinomul f(x) devine f(X), iar termenul liber a0 devine a0*I (unde I este matricea unitate de ordin egal cu ordinul matricei X):

Ex.: » x=[1,2;3,4];

» f = 3*x^4-5*x^3+3*x-1 f = 414 605 908 1323

Page 176: MATLAB IN MECANICA

MATLAB în ingineria mecanică

178

c)- dacă variabila este un tablou de valori (numărul de linii diferit de numărul de coloane), expresia de evaluat trebuie introdusă de la tastatură folosind regulile de calcul specifice tablourilor de valori (operatorii: „ .^ „ sau „ .* „) altfel MATLAB afişează un mesaj de eroare:

Ex.: » x=[1,2,3;4,5,6];

» f = 3*x.^4-5*x.^3+3*x-1 f = 0 13 116 459 1264 2825

Obs.: Dacă expresia f(x) se introduce:

» f = 3*x^4-5*x^3+3*x-1 MATLAB afişează mesajul :

??? Error using ==> ^ Matrix must be square.

EVALUAREA POLINOAMELOR CU FUNCŢIA MATLAB POLYVAL(P, Q)

Evaluarea expresiilor polinomiale, în MATLAB, se poate realiza folosind

funcţia polyval():

» f = polyval(p, q) sau »f=polyvalm(p,q) în care:

p - vectorul linie al coeficienţilor polinomului; q – vectorul , respectiv, matricea în care se evaluează polinomul p.

Ex.: Să se determine valoarea polinomului p(x)=3x4+x3+2x2-1 în punctele

vectorului q=[1,2,3,4,0], respectiv ale matricelor Q = [1 2 ; 3 4] şi R = [1 2 3 ; 3 4 5].

Page 177: MATLAB IN MECANICA

MATLAB în ingineria mecanică

179

În MATLAB: » p = [3 1 2 0 -1]; » q = [1 2 3 4 0]; Q = [1 2 ; 3 4]; R = [1 2 3 ; 3 4 5]; » f1=polyval(p,q) f 1= 5 63 287 863 -1 » f2=polyval(p,Q) f2 = 5 63 287 863 » f3=polyvalm(p,Q) f3 = 647 944

1416 2063

» f4=polyval(p,R) f4 = 5 63 287 287 863 2049 » f5=polyvalm(p,R) ??? Error using ==> polyvalm Matrix must be square.

EVALUAREA PE INTERVALE

Dacă se cere evaluarea unui polinom pe un interval în n puncte: - se împarte intervalul în n puncte, după o regulă prestabilită; - se evaluează polinomul folosind funcţia MATLAB polyval().

Ex.: Să se determine valoarea polinomului p(x)=3x4+x3+2x2-1, pentru valorile

x∈[0,5] în punctele fixe distanţate la 0,2 unităţi. În MATLAB:

» x = 0:0.2:5; » p = [3 1 2 0 -1]; » f = polyval(p, x)

Page 178: MATLAB IN MECANICA

MATLAB în ingineria mecanică

180

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

CALCULUL DERIVATEI Derivata polinomului

Derivata polinomului se calculează folosind funcţia MATLAB polyder(): » D = polyder(c) în care:

c - vectorul linie al coeficienţilor

Ex.: Să se calculeze derivata polinomului A(x) = x3+2x2-x+2

» A = [1 2 -1 2]

» D = polyder(A) D =

3 4 -1 DERIVATA PRODUSULUI A DOUĂ POLINOAME

Prin definiţie, derivata produsului a două polinoame este tot un polinom, obţinut prin relaţia: ( A(x) · B(x) )' = A'(x) · B(x) + A(x) · B'(x). Aşadar, calculul acestei derivate implică folosirea aceleiaşi funcţii MATLAB polyder(), în care, argumentul de intrare (înscris, întotdeauna, între paranteze rotunde), este format din vectorii linie ai coeficienţilor celor două polinoame: » D = polyder(A, B) Ex.: Să se determine derivata produsului (x3+2x2-x+2) · (x-1).

Page 179: MATLAB IN MECANICA

MATLAB în ingineria mecanică

181

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

DERIVATA CÂTULUI A DOUĂ POLINOAME

Se cunoaşte faptul că derivata câtului a două polinoame este o expresie raţională. În consecinţă, funcţia MATLAB, pentru calculul derivatei câtului a două polinoame se introduce cu parametri de ieşire (parametrii de ieşire, în acest caz numărătorul respectiv numitorul expresiei raţionale rezultaţi ca urmare a calculului derivatei, se introduc în linia de comandă între paranteze drepte, în partea stângă a semnului de atribuire, „ = „ ). Pentru calculul derivatei câtului a două polinoame se foloseşte funcţia MATLAB polyder():

» [M, N] = polyder(A, B) în care: -M şi N sunt polinoamele de la numărătorul respectiv numitorul expresiei derivate; -A şi B sunt polinoamele de la numărătorul respectiv numitorul expresiei ce urmează a fi derivată. Ex.:

Să se determine derivata expresiei raţionale:1x

2xx2x 23

−+−+ .

În MATLAB: » 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

23

1x1x4xx2

−−−

Page 180: MATLAB IN MECANICA

MATLAB în ingineria mecanică

182

ADUNAREA ŞI SCĂDEREA POLINOAMELOR Aceste operaţii se pot executa numai dacă polinoamele au acelaşi grad, prin

urmare polinoamele trebuie transformate, prin extindere spre stânga, astfel încât acestea să fie de acelaşi grad. După uniformizarea gradului, adunarea algebrică a polinoamelor se realizează, în MATLAB, ca o însumare a doi vectori de aceeaşi dimensiune.

Ex.: Să se calculeze suma şi diferenţa polinoamelor: g(x) = x4-5x2+6x-1 şi h(x) = x3+3x-2. În MATLAB, întrucât polinomul h(x) are gradul III, acesta va fi „adus” la gradul IV corespunzător polinomului g(x) prin impunerea unui coeficient „fals” (zero): Astfel:

» g = [1 0 -5 6 -1]; h = [0 1 0 3 -2]; » suma = g+h suma = 1 1 -5 9 -3 » dif = g-h dif = 1 -1 -5 3 1

DESCOMPUNEREA ÎN FRACŢII SIMPLE

Orice expresie raţională, )x(B)x(A se poate descompune în fracţii simple,

după rădăcinile polinomului de la numitor (soluţiile numitorului se numesc poli):

( )( ) )x(k

pxr

...px

rpx

rpx

rxBxA

n

n

3

3

2

2

1

1 +−

++−

+−

+−

=

Obs.: Dacă polul pj are ordinul m de multiplicitate expresia se scrie:

Page 181: MATLAB IN MECANICA

MATLAB în ingineria mecanică

183

( )( ) ( ) ( ) ( ) ( )mj

1mj3

j

2j2

j

1j

j

j

px

r...

px

r

px

rpx

rxBxA

−++

−+

−+

−= −+++

Întrucât descompunerea în fracţii simple are ca rezultat trei vectori, funcţia

MATLAB residue(), se introduce cu parametri de ieşire. Funcţia MATLAB pentru descompunerea în fracţii simple este:

» [r, p, k] = residue(A, B)

în care: r - vectorul coloană al reziduurilor; p - vectorul coloană al polilor; k - vectorul linie al polinomului cât (A/B)

Ex.:

Să se descompună în fracţii simple expresia:( )( ) 20x9x

6x11x6xxBxA

2

23

+−

−+−= .

În MATLAB (se vor calcula, pentru comparaţie, câtul polinoamelor A(x), B(x); câtul respectiv restul împărţirii polinoamelor A(x), B(x) şi apoi, se va descompune în fracţii simple expresia A(x)/ B(x)) :

» A = [1 -6 11 -6]; B = [1 -9 20]; » [Catul,Restul]=deconv(A,B) Catul = 1 3 Restul = 0 0 18 -66 » [reziduuri_partiale, polii_fractiei, coeficientii_catului] = residue(A,B) reziduuri_partiale = 24 -6

Page 182: MATLAB IN MECANICA

MATLAB în ingineria mecanică

184

polii_fractiei = 5 4 coeficientii_catului = 1 3

Acest rezultat poate fi transcris, în format algebric, astfel:

( ) ( )3x

4x6

5x24

20x9x6x11x6x

2

23++

−−

+−

=+−

−+−

Page 183: MATLAB IN MECANICA

MATLAB în ingineria mecanică

185

CAPITOLUL VI

CĂUTAREA DATELOR ÎN TABELE a.) CĂUTAREA DATELOR ÎN TABELE UNIDIMENSIONALE Căutarea datelor în tabele este o operaţiune utilă în situaţiile în care sunt necesare verificări ale elementelor unei matrici sau unei serii de elemente ordonate crescător în prima coloană. Versiunile anterioare versiunii MATLAB 5.3 dispun de o funcţie specifică de căutare în tabele, funcţia table1(tabel, xi), în timp ce, versiunile recente ale MATLAB dispun funcţii specifice care realizează această operaţiune (de căutare în tablouri de date) prin interpolare. Tabelul de date trebuie să fie organizat ca o matrice astfel încât în prima coloană se găsesc valorile lui x (abscisa ordonată crescător) iar în celelalte coloane sunt valorile y corespunzătoare, printre care pot fi căutate valori intermediare.

Obs.: Dacă x se găseşte între două valori din tabel funcţia

table1() returnează o valoare interpolată liniar; Funcţia MATLAB table1() este înlocuită în versiunile

superioare ale MATLAB(ulterioare versiunii 5.3) cu funcţiile interp1(),interp2(), interp3(), interpft(), interplat(), interplon(), interpm(), interpn().

Ex.: Fiind date perechile de numere (x,y) : (-2,6); (-1,2); (0,3); (2,1); (4,7) ,se cere să se găsească valorile y corespunzătoare pentru x1 = -1; x2 = 3; x3 = 3.5; x4 = 0.5; x5 = 3.75; x6 = -0.573. Soluţie:

-se organizează perechile de numere (x,y) ca matrice cu 2 coloane, apoi se foloseşte funcţia table1(), pentru a găsi valorile cerute: » tablou_original =[-2,6; -1,2; 0,3; 2,1; 4,7]; »y1= table1(tablou_original,-1) y1 = 2 »y2=table1(tablou_original,3) y2 = 4

Page 184: MATLAB IN MECANICA

MATLAB în ingineria mecanică

186

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

y6 = 2.427 Atenţie !

Coloana I trebuie să fie monotonă (elementele trebuie să fie ordonate crescător) !

Valorile căutate trebuie să se încadreze între cea mai mică şi cea mai mare valoare a lui x, altfel, se afişează un mesaj de eroare. Astfel, dacă se cere să se găsească valoarea corespunzătoare lui y atunci când x=5, MATLAB afişează următorul mesaj :

» y7=table1(tablou_original,5)

??? Error using ==> table1 x0 larger than all values in first column

???Eroare la utilizarea ==> table1 x0 este mai mare decât toate valorile primei coloane

b.) CĂUTAREA DATELOR ÎN TABELE BIDIMENSIONALE

În cazul tablourilor de valori bi- dimensionale (aceste tablouri se caracterizează prin următoarea particularitate:elementele sunt aranjate după două direcţii x şi y, acestei perechi îi corespunde o a treia valoare z ), funcţia MATLAB utilizată pentru căutarea valorilor z corespunzătoare unei perechi (x,y) este:

»table2(“tab”,x,y) Obs.:

Funcţia MATLAB table2() este înlocuită în versiunile superioare versiunii MATLAB 5.3 cu funcţia interp2(), în linia de comandă a

Page 185: MATLAB IN MECANICA

MATLAB în ingineria mecanică

187

versiunilor superioare ale MATLAB apare mesajul de avertizare : „Warning: TABLE2 is obsolete and will be removed in future versions. Use INTERP2 instead.” („Atenţie:TABLE2 este depăşită şi va fi înlocuită în viitoarele versiuni. Folosiţi INTERP2 pentru acelaşi scop!”)

Condiţii:

• -tabelul “tab” este organizat ca o matrice, cu n linii şi m coloane, întotdeauna având, pe poziţia (1,1), elementul 0 ;

• -numărul de linii este dat de numărul valorilor argumentului x, la care se adaugă o linie pentru introducerea valorilor argumentului y, iar numărul de coloane este dat de numărul valorilor lui y;

• -valorile x-ilor se plasează pe prima coloană, în ordine crescătoare, începând cu a 2-a linie;

• -valorile y-ilor se plasează pe prima linie, în ordine crescătoare, începând cu a 2-a coloană;

Celelalte elemente ale matricei sunt valorile z (obţinute prin măsurători,

calcule, etc.).

Ex.: Fiind date tripletele: x y

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

100 0 0 1 7 2 8 1 2 1 0

Să se găsească valorile corespunzătoare perechilor (x,y): (-3,7); (-3,6.5); (-2,6); (50,8); (99,9.9); (-4,8); (2,11).

Soluţie:

»tablou_original_2= [0,1,2,3,4,5,6,7,8,9,10;-3,0,1,2,4,8,7,11,0,1,1; 2,9,3,1,7,6,5,3,1,0,-3;8,-8,9,1,0,2,-8,2,1,0,1; 100,0,0,1,7,2,8,1,2,1,10] ; »z1=table2(tablou_original_2,-3,7) z1=11

Page 186: MATLAB IN MECANICA

MATLAB în ingineria mecanică

188

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

Page 187: MATLAB IN MECANICA

MATLAB în ingineria mecanică

189

INTERPOLAREA ŞI REGRESIA În foarte multe aplicaţii practice apare necesitatea evaluării aproximative a unei funcţii [ ] [ ] ℜ⊂ℜ→ ba, ,b,a:f . Problema aproximării funcţiilor intervine în situaţii de o mare diversitate, multitudinea formulărilor şi metodelor de rezolvare asociate constituind o reflectare directă a acestei diversităţi. În aplicaţii este frecvent necesară utilizarea unor funcţii pentru care sunt cunoscute doar valorile corespunzatoare unui set discret de valori ale argumentelor. Astfel de dependenţe pot reprezenta, spre exemplu, tabelarea unor funcţii matematice sau a unor mărimi fizice măsurate sau calculate. Pentru simplitatea discuţiei ne limităm în cele ce urmează la funcţii reale de o variabilă reală. În toate cazurile, pentru funcţia considerată

[ ] [ ] ℜ⊂ℜ→ ba, ,b,a:f sunt specificate valorile iy într-un numar de puncte de reţea [ ]b,axi ∈ , adică n , 3, 2, 1,i ,y)x(f ii K== Prelucrarea numerică ulterioară a acestor funcţii impune adesea şi utilizarea unor valori corespunzatoare unor argumente diferite de cele tabelate. În multe situaţii, însă, obţinerea unor informaţii suplimentare este dificilă, dacă nu chiar imposibilă. Astfel, chiar dacă este cunoscut algoritmul de calcul al funcţiei, complexitatea acestuia poate face uneori ineficientă utilizarea lui pentru detalierea iuformaţiei. Pe de alta parte, dacă valorile tabelate provin din observaţii, ele sunt, în general, afectate de erori de măsură. În toate situaţiile menţionate, pentru a sintetiza informaţia asupra funcţiei tabelate f şi a o putea utiliza eficient în calcule, se impune aproximarea ei printr-o funcţie continuă, numită funcţie model, ( )m1 a , ,a ;xFF K= , care depinde în general de un numar de parametri ajustabili, aj,-, numiţi parametri de model. Forma funcţiei F şi valorile parametrilor aj trebuie determinate astfel încât funcţia discretă f să fie aproximată optim într-un anumit sens. Alegerea formei concrete a funcţiei model F este o problema netrivială şi ea trebuie să aibă la bază o fundamentare riguroasă. În linii mari, stau la dispoziţie urmatoarele opţiuni:

funcţia model se alege dintr-o clasă convenabilă de funcţii (cum ar fi: polinoame, funcţii gaussiene etc.), care oferă simplitate şi eficienţă în prelucrări ulterioare;

funcţia model este derivată dintr-o teorie, în cadrul careia parametrii de

Page 188: MATLAB IN MECANICA

MATLAB în ingineria mecanică

190

model au o semnificaţie bine stabilită; funcţia model rezultă dintr-un compromis între constrângerile şi avantajele

opţiunilor anterioare.

Pentru a putea determina, practic, valorile optime ale parametrilor de model, trebuie definită o funcţională care să reflecte gradul în care funcţia model F aproximează funcţia tabelată f pentru o alegere particulară, a parametrilor. Admiţând ca f şi F aparţin spaţiului [ ]b,aC2 al funcţiilor de pătrat sumabil pe [a,b], o măsură sugestivă a abaterii modelului faţă de funcţia modelată este dată de distanţa dintre cele două funcţii:

( ) ( ) ( )[ ]21

b

a

2 dxa;xFxfF,fd⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

⋅−= ∫

unde s-a utilizat notaţia vectorială ( )K ,a ,aa 21≡ . Evident, această definiţie nu este utilizabilă ca atare, deoarece implică şi cunoaşterea expresiei anâlitice a funcţiei f. Se poate utiliza, însă, o definiţie mai puţin riguroasă, dar aplicabilă. pentru funcţii discrete:

( ) ( ) ( )[ ]21

n

1i

2ii a;xFxfF,fd

⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

−= ∑=

Aproximarea pe baza acestei distanţe este numită aproxirnare în medie pătratică şşi este utilizată în douăa dintre cele mai importante metode de mode-lare a funcţiilor tabelate: mterpolarea şi regresia. Dacă, valorile tabelate ( )ii xfy = sunt considerate exacte (neafectate de erori), este firesc să se impună anularea distanţei dintre funcţiile f şi F: ( ) 0F,fd = Aceasta revine la construirea unei funcţii model, aparţinând unei anumite clase, care să ia, în punctele de tabelare ix , aceleaşi valori ca şi funcţia f(x): ( ) n , 2, 1,i ,ya ;xF i K==

Page 189: MATLAB IN MECANICA

MATLAB în ingineria mecanică

191

Funcţia care satisface aceste condiţii este utilizată, în mod normal, pentru aproximarea funcţiei f(x) pe intervalul [ ]n1 x ,x iar procedeul se numeşte interpolare. Funcţia ( )a ;xF poartă numele de funcţie de interpolare sau interpolant, iar nodurile ix se mai numesc şi puncte de interpolare. Geometric, interpolarea implică găsirea unei curbe ( )a ;xFy = care trece prin toate punctele )y ,x(M iii . De exemplu, presupunând funcţia y=sinx, reprezentată grafic în punctele [ ]ππ−∈ ,x , interpolarea în şapte puncte echidistante, ale intervalului, este realizată cu o funcţie MATLAB specifică, şi surprinsă în imaginea alăturată. Dacă, argumentele pentru care se evaluează interpolantul se află înafara intervalului [ ]n1 x ,x procedeul se numeşte extrapolare. Cu un asemenea enunţ, general însă, problema poate avea o infinitate de soluţii sau nici una, în funcţie de clasa căreia îi aparţine funcţia model. Problema interpolarii devine neambiguă dacă în locul unei funcţii model arbitrare căutăm un polinom Pm(x) de grad nu mai mare decat (n — 1), care satisface condiţiile de interpolare. Din acest set de condiţii se pot determina cei (m+1) coeficienţi ai polinomului şi metoda se numeşte interpolare polinomială.Funcţiile de interpolare polinomiale sunt cele mai utilizate în practică. Dintre acestea amintim funcţia Lagrange şi interpolanţii spline şi Akima (netezi pe porţiuni). Totuşi, în anumite cazuri se dovedesc utile şi funcţiile de interpolare raţionale. La randul lor, funcţiile trigonometrice conduc la aşa-numita interpolare trigonometrică, şi la metodele Fourier înrudite.

Page 190: MATLAB IN MECANICA

MATLAB în ingineria mecanică

192

Dacă valorile tabelate ( )ii xfy = provin din observaţii, ele sunt afectate în general de erori de măsurare, imprecizia fiecărei valori fiind specificată de obicei prin deviaţia standard iσ asociată: În astfel de cazuri, funcţia model F = F(x; a) este cu atât mai bună cu

cât sunt mai elaborate considerentele pe baza carora i s-a stabilit forma (cu cât este mai puţin empirică). Având în vedere imprecizia datelor, nu este de asteptat ca funcţia model să interpoleze punctele tabelate (chiar dacă acest lucru este teoretic posibil) şi este deci firesc să se impună minimizarea distanţei d(f, F) în raport cu valorile parametrilor:

jaimmin)F,f(d =

nu anularea ei riguroasă ca în cazul interpolării. În mod concret, aceasta revine la determinarea celor m parametri, ja , ai funcţiei model F(x; a), aparţinând unei anumite clase, care minimizează suma abaterilor pătratice punctuale ale funcţiei model faţă de datele tabelate:

( )[ ]∑=

−=n

1i

2ii a;xFyS

Acest procedeu se numeşte regresie sau ajustare prin metoda celor mai mici pătrate. Termenul preluat din limba engleză este fitare (de la "to fit"—a potrivi), desemnând procesul de ajustare a parametrilor curbei de regresie.

Page 191: MATLAB IN MECANICA

MATLAB în ingineria mecanică

193

Intr-un context mai larg, funcţionala ( )[ ]∑=

−=n

1i

2ii a;xFyS reprezintă

aşa-numita funcţie de merit a procesului de ajustare. Pentru o apreciere mai nuanţată a gradului în care funcţia model aproximează datele măsurate, în practică se utilizează funcţii de merit mai elaborate. Oricum, deoarece în mod conventional funcţia de merit este construită astfel încât valori mici să corespunda unor abateri reduse ale modelului faţă de funcţia tabelată, procesul de ajustare a parametrilor de model este, în esenţă., un proces de minimizare multidimensionă. Unul dintre cele mai utilizate criterii de performanţă este cel furnizat de funcţia de merit "hi-patrat":

( )[ ]∑=

−σ

=χn

1i

2ii2

i

2 a;xFy1

Spre deosebire de funcţionala ( )[ ] a;xFySn

1i

2ii∑

=

−= , funcţia de merit

"hi-patrat", atribuie ponderi diferite punctelor de tabelare individuale, şi anume depinzând de inversul deviaţiei standard iσ asociate. În acest fel creşte ponderea relativă a punctelor afectate de erori mici, funcţia model fiind forţată în procesul ajustării parametrilor să minimizeze cu precădere distanţa faţă de aceste puncte în detrimentul distanţei faţă de punctele mai imprecise (cu iσ

mari). În cazul în care deviaţiile iσ sunt egale sau nu sunt cunoscute, formalismul se simplifică şi revine la regresia cu ajutorul funcţiei de merit S. Extremum- ul

funcţionalei ( )[ ] a;xFy1n

1i

2ii2

i

2 ∑=

−σ

=χ în raport cu parametrii aj este

caracterizat prin relaţiile:

,0a j

2=

∂χ∂ j=1, 2, …, m

sau

( )[ ] ( ),0

aa;xF

a;xFy1n

1i j

iii2

i=

∂∂⋅−

σ∑= j=1, 2, …, m

Page 192: MATLAB IN MECANICA

MATLAB în ingineria mecanică

194

din care pot fi determinaţi parametrii aj. Ajustarea pe baza funcţiei de merit 2χ mai este numită uneori şi regresie "hi-p&trat". Curba de regresie y = F(x;a.) nu trebuie să treacă în mod necesar prin nici unul din punctele tabelate Mi(xi, yi), ci doar prin barele de eroare ale acestora (de lungime iσ ), minimizând funcţionala 2χ . Deoarece erorile de măsurare ale datelor induc imprecizii în determinarea parametrilor de model, informaţia furnizată de procesul de ajustare nu este completă fără estimarea acestor erori. Admiţând că datele sunt independente, considerente de propagare a erorilor arată. că varianţa (imprecizia probabilă patratică.) 2

ajσ asociată parametrului aj rezultă prin cumularea

contribuţiilor ponderate cu 2iσ de la fiecare valoare discretă yi:

∑=

⎟⎟⎠

⎞⎜⎜⎝

∂σ=σ

n

1i

2

i

j2i

2a y

aj

Creşterea fără o justificare teoretică clară a numărului de parametri de model în ideea descrierii cât mai exacte a datelor, eventual chiar a interpolării lor, nu face funcţia model "mai bună" chiar dacă reduce valoarea funcţiei de merit, ci, pe lângă lipsa de semnificaţie a modelului şi a parametrilor adăugaţi, poate conduce la apariţia unor fenomene numerice greu de controlat. Interpolarea nu trebuie privită deci, în nici un caz, ca o limită ideală a regresiei, cele două metode de aproximare având semnificaţii diferite şi fiind aplicabile în situaţii distincte. În general, datele experimentale reprezintă valori discrete determinate prin diferite metode. Aceste date pot reprezenta analitic o relaţie matematică dintre diferitele date experimentale observate şi se exprimă prin funcţii ai căror coeficienţi se determină, în general, prin rezolvarea unor sisteme de ecuaţii lineare. De exemplu, considerând că s-au măsurat, la momentele t = [0 .3 .8 1.1 1.6 2.3]', valorile y = [0.5 0.82 1.14 1.25 1.35 1.40]', se reprezintă grafic dependenţa y(t) al cărei grafic este o curbă convexă.

Page 193: MATLAB IN MECANICA

MATLAB în ingineria mecanică

195

METODA CELOR MAI MICI PĂTRATE Majoritatea metodelor de aproximare, ajustare, interpolare sau extrapolare, utilizează ca metodă de calcul a coeficienţilor, metoda celor mai mici pătrate. Această metodă minimizează suma pătratelor reziduurilor:

( )∑∑==

−==n

1i

2ii

n

1i

2i yyrS . Reziduum-ul este calculat ca diferenţa dintre valoarea

„observată” iy şi valoarea previzionată iy : iyyr −= . MATLAB recunoaşte patru tipuri de metode aplicative variante ale metodei celor mai mici pătrate:

Metoda lineara a celor mai mici pătrate; Metoda ponderată a celor mai mici pătrate; Metoda robustă a celor mai mici pătrate; Metoda nelineară a celor mai mici pătrate.

METODA LINEARĂ A CELOR MAI MICI PĂTRATE Această metodă foloseşte un model matematic linear (o funcţie de gradul întâi) pentru aproximarea datelor: 21 pxpy +⋅= , în care cei doi coeficienţi urmează a fi determinaţi. Metoda se numeşte „lineară” întrucât funcţia, care defineşte modelul matematic de aproximare, este de gradul întâi în coeficienţi. Pentru a ilustra procesul de aproximare prin această metodă, este suficient a arăta modul în care este rezolvată ecuaţia de gradul întâi 21 pxpy +⋅= , în necunoscutele 1p şi 2p , dacă se consideră n puncte cunoscute. Dacă se scriu cele n ecuaţii corespunzătoare datelor cunoscute, se obţine un sistem de n ecuaţii care

urmează a fi rezolvat: ( )( )∑=

+⋅−=n

1i

22i1i pxpyS . Diferenţiind în raport cu cele

două necunoscute 1p şi 2p , întrucât metoda minimizează suma pătratelor reziduurilor, se obţin două expresii suplimentare:

( )( ) 0pxpyx2pS n

1i2i1ii

1=+⋅−−=

∂∂ ∑

=

( )( ) 0pxpy2pS n

1i2i1i

2=+⋅−−=

∂∂ ∑

=

Page 194: MATLAB IN MECANICA

MATLAB în ingineria mecanică

196

Aceste ecuaţii sunt rezolvabile în raport cu cele două necunoscute:

⎪⎪

⎪⎪

=⋅+⋅

⋅=⋅+⋅

∑ ∑

∑ ∑∑

= =

= ==n

1i

n

1ii2i1

n

1i

n

1iii

n

1ii2

2i1

ypnxp

yxxpxp ale cărui soluţii

sunt:

2n

1ii

n

1i

2i

n

1ii

n

1ii

n

1iii

1

xxn

yxyxn

p

⎟⎟

⎜⎜

⎛−⋅

⋅−⋅⋅

=

∑∑

∑∑∑

==

=== respectiv ⎟⎟

⎜⎜

⎛−= ∑ ∑

= =

n

1i

n

1ii1i2 xpy

n1

p .

Ceea ce se poate constata uşor, este faptul că utilizarea acestei metode pentru aproximare şi ajustare, înseamnă doar calcule algebrice simple. În forma matriceală, metoda lineara a celor mai mici pătrate este dată de formula: ε+β⋅= Xy unde: -y este un vector coloană (n linii ), al răspunsurilor; -β este un vector coloană (m linii), al coeficienţilor; -X este o matrice nxm, a valorilor previzionate; - ε este vectorul coloană (n linii ), al erorilor. Pentru un polinom de gradul întâi, cele n ecuaţii cu două necunoscute, exprimate în funcţie de y, X şi β sunt:

⎥⎦

⎤⎢⎣

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

2

1

n

3

2

1

n

3

2

1

pp

x

1 x

1 x1 x1 x

y

yyy

MM

Page 195: MATLAB IN MECANICA

MATLAB în ingineria mecanică

197

Soluţia problemei, dată prin metoda celor mai mici patrate, este un vector b, care conţine vectorul coeficienţilor β . Ecuaţiile generalizate ataşate acestui sistem sunt reprezentate prin: ( ) yXbXX TT ⋅=⋅⋅ , cu soluţia generalizată:

( ) yXXXb T1T ⋅⋅⋅=−

în care, XT reprezintă transpusa matricei X. Această ecuaţie poate fi rezolvată folosind operatorul „\” (împărţire la stânga), respectiv, folosind factorizarea QR. Soluţia de răspuns, previzionată, y , se determină cu relaţia: yHbXy ⋅=⋅= , unde:

( ) T1T XXXXH ⋅⋅⋅=−

In aceste condiţii, reziduurile sunt date de relaţia: ( ) yH1yyr ⋅−=−= METODA PONDERATĂ, A CELOR MAI MICI PĂTRATE În evaluarea rezultatelor experimentale, a măsurătorilor, în general, se presupune că, datele obţinute au aceeaşi „calitate”, deci şi varianţa este constantă. Dacă această presupunere nu este validă, fiind prezente perturbaţii evidente, atunci procesul de ajustare a reprezentărilor grafice ale datelor obţinute, este „perturbat” şi conţine erori. În consecinţă, pentru creşterea calitătii aproximării, se poate folosi metoda, ponderată, a celor mai mici pătrate, metodă care introduce un factor de pondere. Această metodă minimizează eroarea estimată

( )∑=

−=n

1i

2iii yywS

Page 196: MATLAB IN MECANICA

MATLAB în ingineria mecanică

198

în care, iw reprezintă ponderea reziduală. Această mărime arată magnitudinea influenţei pe care o are fiecare răspuns în evaluarea finală a parametrului măsurat. Ponderarea este recomandată acolo unde se cunosc mărimile ponderilor, sau acolo unde este justificată o anumită comportare a acestora. Ponderile modifică expresia vectorului b, astfel:

( ) yWXXWXˆb T1T ⋅⋅⋅⋅⋅=β=−

, unde, W, este dat de elementele de pe diagonala principală a matricei ponderilor w. Ponderile utilizate trebuie să transforme varianţa răspunsurilor în valori constante. Dacă este cunoscută varianţa datelor, ponderea este dată prin:

2i1wσ

=

în timp ce, dacă nu se cunoaşte varianţa, ponderile se vor aproxima cu relaţia:

( )1n

1i

2ii yy

n1w

=⎟⎟

⎜⎜

⎛−= ∑

Această relaţie este acoperitoare pentru calculul ponderilor, dacă setul de date conţine valori identice (repetiţii). În acest caz, n reprezintă numărul de replici identice. METODA ROBUSTĂ, A CELOR MAI MICI PĂTRATE Metoda celor mai mici pătrate, în general, este sensibilă la valorile „ieşite” din setul de valori, adică din modul în care evoluează acest set de date. Minimizarea influenţei ieşirilor este realizabilă prin metoda, robustă, a celor mai mici pătrate. Această metodă este disponibilă în două variante:

1. Metoda reziduurilor absolute (LAR=Least Absolute Residuals)-această metodă aproximează setul de valori printr-o curbă care minimizează diferenţa absolută a reziduurilor, în raport cu diferenţa pătratelor acestora. Din acest motiv, valorile extreme au o influenţă redusă.

2. Metoda ponderilor bipătrate –Această variantă a metodei minimizează suma pătratelor ponderilor, în care ponderea reprezintă „distanţa” lacare se găseşte fiecare punct faţă de linia de aproximare. Astfel, punctele apropiate

Page 197: MATLAB IN MECANICA

MATLAB în ingineria mecanică

199

de curbă au o pondere ridicată, iar punctele „îndepărtate” de curbă, dau ponderi reduse (valori apropiate de zero).

Metoda ponderilor bipătrate este preferată metodei reziduurilor absolute, întrucât prima metodă minimizează efectul valorilor extreme. Metoda, robustă, a celor mai mici pătrate, varianta ponderilor bipătrate utilizează un algoritm de ponderare, şi urmăreşte următoarea procedură:

1. Aproximează modelul prin ponderarea celor mai mici pătrate; 2. Se determină reziduurile ajustate, şi se „actualizează”. Reziduurile

ajustate, se determină cu relaţia:

i

iadj

h1r

r−

=

în care ri este reziduul pătratic uzual, iar hi este „rotunjirea” care ajustează reziduurile prin lipsă. „Actualizarea” se realizează prin:

sK

ru adj

⋅= ,

unde K este o constantă de reglaj K=4.685. şi s este varianţa robustă dată prin relaţia:

6745,0

DMAs =

în care DMA reprezintă deviaţia medie absolută a reziduurilor; 3. Calculul ponderilor robuste ca funcţie de u. Ponderile bipătrate sunt date

prin:

( )( )⎪⎩

⎪⎨⎧

><−=

1u ,01u ,u1w

i

i22

ii

4. Dacă aproximarea este convergentă atunci rezultatul este corect, altfel, se

trece la o nouă iteraţie a ajustării, prin reîntoarcerea la primul pas al procedurii.

Page 198: MATLAB IN MECANICA

MATLAB în ingineria mecanică

200

METODA NELINEARĂ A CELOR MAI MICI PĂTRATE MATLAB dispune de o variantă a metodei celor mai mici pătrate care utilizează o formulare neliniară pentru aproximarea datelor. Un model nelinear este definit printr-o ecuaţie neliniară în coeficienţi, sau o combinaţie liniară şi neliniară (aproximarea Gauss sau aproximarea raţională de polinoame). În forma matriceală, modelul neliniar este dat de formula: ε+β= ),X(fy unde

y este vectorul coloană al răspunsurilor (n linii); f este o funcţie de β şi X; β este vectorul coloană al coeficienţilor (m linii); X este matricea proiectată a modelului (n linii, m coloane ); ε este vectorul coloană al erorilor (n linii).

Modelele nelineare sunt, în general, mai dificil de ajustat decât modelele lineare, întrucât coeficienţii nu pot fi estimaţi prin metode matriciale simple. De aceea, abordarea tehnicilor iterative trebuie să adopte următoarele etape:

1. Startul cu o estimare iniţială pentru fiecare coeficient; 2. Se realizează ajustarea pentru coeficienţii determinaţi. Răspunsul

aproximat este dat de relaţia: ),X(fy β= care implică şi calculul Jacobianului funcţiei ),X(f β (Jacobianul este definit prin derivatele parţiale ale matricei în raport cu coeficienţii ); 3. Ajustarea coeficienţilor şi evaluarea aproximării (în MATLAB

sunt disponibili algoritmii: a)-Trust region; b)-Levenberg-Marquardt; c)-Gauss-Newton);

4. Iterarea procesului, prin saltul la pasul 2., atâta timp cât nu este realizată convergenţa aproximării.

Datorită naturii procesului de aproximare în sine, nici un algoritm nu este perfect pentru modelul neliniar al metodei celor mai mici pătrate. Din acest motiv, atunci când rezultatele obţinute nu sunt cele aşteptate, sau apropiate de cele aşteptate, se ia decizia schimbării metodei implicite de aproximare, mai ales că metodele neliniare sunt sensibile la punctul de start al aproximării.

Page 199: MATLAB IN MECANICA

MATLAB în ingineria mecanică

201

INTERPOLAREA DATELOR, FOLOSIND MATLAB

Interpolarea, aşa cum s-a afirmat şi anterior, în cadrul acestui capitol, este un proces prin care se realizează estimarea numerică a valorilor intermediare prin care face conexiunea între punctele corespunzătoare datelor cunoscute. Interpolarea are aplicaţii deosebit de importante în procesarea imaginilor şi a semnalelor (achiziţiei de date). Se disting :metode de interpolare lineară, bi-dimensională, Spline, Fourier, bi-lineară, bi-armonică, bi-cubică, multi-dimensională, prin triangularizare. În figurile următoare se poate observa, în principiu, efectul procesului de interpolare, pentru un set de semnale măsurate.

Semnalul original Semnalul interpolat Fie [ ] [ ] ℜ⊂ℜ→ ba, ,b,a:f . Se pune problema determinării unei funcţii F, care să aproximeze funcţia f în intervalul [a,b]. Se recurge la această aproximare în două cazuri:

1. -când nu se cunoaşte expresia analitică a lui f, dar se cunosc valorile sale într-un număr finit de puncte;

2. -când expresia analitică a lui f este destul de complicată şi cu ajutorul acesteia calculele sunt destul de dificile.

Pentru evaluarea lui f(x) se caută o altă funcţie F(x) relativ simplă astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumită clasă de funcţii, de exemplu din clasa polinoamelor de grad n sau mai mic, atunci trebuie ca F(x) să ia aceeaşi valoare cu f(x) pentru anumite valori ale lui x. Aceste valori ale lui x sunt adesea numite puncte de interpolare. De asemenea se poate cere ca

Page 200: MATLAB IN MECANICA

MATLAB în ingineria mecanică

202

anumite derivate ale lui F(x) să ia aceleaşi valori cu valorile derivatelor corespunzătoare ale lui f(x) în anumite puncte de interpolare. Se poate arăta că dacă F(x) este suma a n+1 termeni ai seriei Taylor pentru f(x) în punctul x=a, atunci F(x) poate fi considerat ca un polinom de interpolare pentru f(x) de grad n sau mai mic, deoarece n,...,2,1,0k),a(fF k)k(

)a( == .

MODELE PARAMETRICE În MATLAB sunt disponibile câteva modele parametrice consacrate, pentru interpolarea şi aproximarea datelor:

1. Funcţii exponenţiale Există două variante ale acestui model parametric:

Modelul exponenţial cu un termen: bxeay ⋅= ;

Modelul exponenţial cu doi termeni: dxbx eceay ⋅+⋅= ; Funcţiile exponenţiale sunt utilizate atunci când rata modificării unei mărimi este proporţională cu dimensiunea iniţială a acestei mărimi. În funcţie de semnul exponentului, y este o funcţie descrescătoare (exponent negativ), sau o funcţie crescătoare (exponent pozitiv);

2. Serii Fourier Sunt modele reprezentate prin sume de funcţii trigonometrice

simple: )xnsin(b)xncos(aay i

n

1ii0 ω⋅+ω⋅+= ∑

=

3. Modelul Gauss Acest model este utilizat pentru aproximarea valorilor „de varf”. De exemplu, aproximarea liniei spectrale de emisie pentru analiza concentraţiei

Page 201: MATLAB IN MECANICA

MATLAB în ingineria mecanică

203

chimice, poate fi descrisă printr-o aproximare Gauss. Modelul matematic asociat, este dat de ecuaţia:

∑=

⎥⎥

⎢⎢

⎟⎟⎠

⎞⎜⎜⎝

⎛ −−

⋅=n

1i

cbx

i

2

i

i

eay ,

unde a este amplitudinea, b este centroidul, c este dat de lăţimea relativă a „vârfului”, iar n este numărul de „vârfuri” ce urmează a fi aproximate (

8n1 ≤≤ ) 4. Modelul polinomial

Ecuaţia caracteristică acestui model este: ∑=

−+⋅=n

1i

i1ni xpy , în care (n+1)

reprezintă ordinul polinomului, (n) reprezintă gradul polinomului. Ordinul polinomului dă numărul de coeficienţi ce urmează a fi aproximaţi, iar gradul polinomului arată puterea variabilei previzionate. Modelele polinomiale sunt folosite atunci când sunt necesare aproximări empirice simple. Acestea pot fi utilizate în cazul interpolărilor sau extrapolărilor seturilor de date. 5. Serii de puteri Sunt disponibile două variante ale acestui model, ca şi în cazul modelului funcţiilor exponenţiale:

Modelul seriilor de puteri cu un termen: bxay ⋅= ;

Modelul exponenţial cu doi termeni: cxbay ⋅+= ; 6. Expresii raţionale Expresiile raţionale sunt date de modele matematice descrise de ecuaţii de

forma:

=

=

−+

⋅+

= n

1i

imi

m

n

1i

i1ni

xqx

xp

y , în care gradul numărătorului, 5n0 ≤≤ ,

Page 202: MATLAB IN MECANICA

MATLAB în ingineria mecanică

204

respectiv gradul numitorului 5m1 ≤≤ , iar coeficientul lui mx este, întotdeauna, unu. Modelele raţionale sunt avantajoase datorită flexibilităţii mari în cazul structurilor de date complicate, dar prezintă dezavantajul instabilităţii accentuate atunci cănd numitorul ia valori aproape de zero. 7. Sume de sinus

Modelul matematic este dat de relaţia: )cxbsin(ay ii

n

1ii +⋅⋅=∑

=

, în care

a este amplitudinea, b, este frecvenţa, iar c este constanta de fază pentru fiecare termen al sumei de sinusi ( 8n1 ≤≤ ). 8. Distribuţia Weibull Acest model este utilizat în analiza datelor statistice legate de fiabilitatea şi de durata de viaţă a produselor. Expresia matematică

este:bxa1b exbay ⋅−− ⋅⋅⋅= , în care a este parametrul de scară iar b este

factorul de formă. Modelul matematic poate conţine un parametru suplimentar c, centroidul, atunci când x este înlocuit cu x-c. De remarcat că distribuţia Weibull nu aproximează datele unui set de date, ci aproximează curbele astfel încât acestea sâ aibă forma apropiată de forma distribuţiei Weibull. 9. Modele utilizator Modelele matematice, definite implicit, nu sunt cele mai bune modele în toate cazurile. Din acest motiv, uneori, este necesar a se defini ecuaţii specifice unei anumite aplicaţii. Aceste ecuaţii sunt avantajoase întrucât coeficienţii punctului de start al iteraţiei se aleg aleatoriu din intervalul [0,1], iar pentru calculul Jacobianului se foloseşte diferenţiala totală. FUNCŢIILE MATLAB PENTRU INTERPOLAREA DATELOR

În tabelul următor sunt prezentate selectiv funcţiile MATLAB, utilizate pentru interpolarea datelor:

Page 203: MATLAB IN MECANICA

MATLAB în ingineria mecanică

205

Funcţia MATLAB DESCRIERE

1 2 table1 - căutare în tabele şi interpolare lineară în

tabele uni-dimensionale În versiunile superioare ale

MATLAB este înlocuită cu funcţia interp1

table2 - căutare în tabele şi interpolare lineară în tabele bi-dimensionale

În versiunile superioare ale MATLAB este înlocuită cu funcţia interp2

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

1. interpolare spline cubică în tabele uni-dimensionale

2. determină componentele polinomiale ale curbei spline de aproximare, pentru utilizarea cu funcţia MATLAB ppval()

1. interpft(x,n) 2. interpft(x,n,dim)

- interpolează prin metoda Transormatei Fourier rapide (fft)

1 2 1. interp1(x,Y,xi) 2. interp1(Y,xi) 3. interp1(x,Y,xi,metoda)

- interpolează linear, spline sau cubic în tabele uni-dimensionale - căutare în tabele uni-dimensionale

1. interp2(X,Y,Z,XI,YI) 2. interp2(Z,XI,YI) 3. interp2(X,Y,Z,XI,YI,metoda)

- interpolează bi-linear, cubic-spline sau bi-cubic în tabele bidimensionale - căutare în tabele bi-dimensionale

1. interp3(X,Y,Z,V,XI,YI,ZI) 2. interp3(...,metoda)

- interpolează date în trei dimensiuni - căutare în tabele

1. interpn(X1,X2,X3,V,Y1,Y2,Y3,..) 2. interpn(V,Y1,Y2,Y3,...) 3. interpn(...,metoda)

- interpolare lineară, spline, spline-cubică a datelor multi-dimensionale - căutare în tabele

1. griddata(x,y,z,XI,YI) 2. griddata(x,y,z,xi,yi) 3. griddata(...,metoda)

- aproximează şi ajustează o suprafaţă z=f(x,y) la datele vectorului tridimensional (x,y,z), neuniform spaţiat, prin interpolarea la punctele specificate (XI,YI), cu condiţia ca suprafaţa sa treacă, întotdeauna, prin punctele date.

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

- aproximează şi ajustează o suprafaţă w=f(x,y,z) dată de vectorul spaţial neuniform (x,y,z,v), prin interpolare în punctele specificate (xi,yi,zi)

interpstreamspeed(X,Y,Z,U,V,W,vertices)

- interpolează liniile de câmp prin vertex-uri, pe baza datelor specificate în vectorii U,V,W, ale căror coordonate sunt date de matricile X,Y,Z.

Page 204: MATLAB IN MECANICA

MATLAB în ingineria mecanică

206

INTERPOLAREA LINEARĂ Interpolarea este o operaţie similară „căutării în tabele”. Funcţia MATLAB interp1() interpolează între punctele date, găsind valorile unei funcţii uni- dimensionale f(x) pe baza acestor puncte. În figura de mai jos este prezentată schematic relaţia dintre vectorii x, Y, xi, yi. Prin interpolarea cu funcţia MATLAB interp1() se caută elementele xi în vectorul x, şi, pe baza locaţiilor acestora, se returnează valorile yi interpolate printre elementele vectorului y. În MATLAB 6 sunt disponibile mai multe variante ale funcţiei interp1():

yi = interp1(x,Y,xi) yi = interp1(Y,xi) yi = interp1(x,Y,xi,metoda) yi = interp1(x,Y,xi,metoda,extrapolata)

Toate variantele de apelare a funcţiei interp1() returnează un vector yi conţinând elementele corespunzătoare elementelor vectorului xi determinate prin interpolarea vectorilor x şi Y. Vectorul x specifică punctele în care sunt date valorile Y. Dacă Y este o matrice, atunci interpolarea este realizată pentru fiecare coloană a matricei Y. Pentru realizarea corectă a interpolării este necesară corespondenţa între dimensiunile vectorului xi şi dimensiunea matricei Y (în sensul că aceste două entităţi să aibă acelaşi număr de linii).

Varianta yi = interp1(x,Y,xi,metoda), permite realizarea interpolării folosind metode alternative:

'nearest'

–in

Page 205: MATLAB IN MECANICA

MATLAB în ingineria mecanică

207

Dacă un element al vectorului xi se găseşte în exteriorul intervalului cuprins de x, atunci, metoda de interpolare specificată, va fi utilizată pentru extrapolare. Ex. : Să se genereze o curbă sinusoidală „primară”, apoi să se interpoleze peste un număr mai mare de abscise: Soluţie: Varianta A » x = 0:10; » y = sin(x); » xi = 0:.25:10; » yi = interp1(x,y,xi); » plot(x,y,'o',xi,yi) Varianta B » x = 0:0.1 :10; » y = sin(x); » xi = 0:.25:10; » yi = interp1(x,y,xi); » plot(x,y,'o',xi,yi) Ex. : Se consideră doi vectori: unul reprezentând deceniile 1 până la 9 ale secolului trecut, cel de-al doilea reprezentând populaţia Statelor Unite ale Americii (în milioane locuitori) pentru fiecare început de deceniu:

» t = 1900:10:1990; » p = [75.995 91.972 105.711 123.203 131.669 150.697 179.323… 203.212 226.505 249.633];

Se cere estimarea populaţiei Statelor Unite ale Americii corespunzătoare anului 1975, apoi să se estimeze populaţia pe fiecare an în parte începând din 1900

Page 206: MATLAB IN MECANICA

MATLAB în ingineria mecanică

208

şi până în 2000, reprezentând grafic rezultatul obţinut. Soluţie: Prin interpolare:

»populatia_in_1975=interp1(t,p,1975)

se obţine rezultatul: »populatia_in_1975=

214.8585

Interpolând între anii 1900 şi 2000 se obţin rezultatele, respectiv, graficul evoluţiei populaţiei între anii 1900 şi 2000:

» x = 1900:2000; » y = interp1(t,p,x); » plot(t,p,'o',x,y)

INTERPOLAREA BIDIMENSIONALĂ Interpolarea bi-dimensională se realizează prin funcţia MATLAB interp2() care se poate apela în următoarele variante : ZI = interp2(X,Y,Z,XI,YI)

ZI = interp2(Z,XI,YI) ZI = interp2(Z,de_n_ori) ZI = interp2(X,Y,Z,XI,YI,metoda)

• Oricare dintre aceste variante returnează o matrice ZI care conţine elementele corespunzătoare punctelor (XI,YI) şi determinate prin

Page 207: MATLAB IN MECANICA

MATLAB în ingineria mecanică

209

interpolare în matricile X, Y şi Z, (Z este definită ca funcţie bi-dimensională de elementele matricilor X şi Y);

• Matricile X şi Y trebuie să fie ordonate monoton crescător, şi sa fie în

acelaşi format; • Matricile X şi Y definesc punctele în care este dată matricea Z; • XI şi YI pot fi matrici, caz în care, funcţia interp2(), determină valorile

matricei Z corespunzătoare punctelor (XI(i,j), YI(i,j)); • Dacă funcţia interp2 este apelată cu varianta ZI = interp2(Z,XI,YI), atunci

se interpretează, automat de către MATLAB, că X = 1:n şi Y = 1:m, unde [n, m]=size(Z);

• Varianta ZI = interp2(Z,de_n_ori) specifică repetarea interpolării bi-

dimensionale, de n ori; • Varianta ZI = interp2(X,Y,Z,XI,YI,metoda) specifică metoda alternativă

de interpolare: ‘linear’ -pentru interpolare bi-lineară 'nearest' -pentru interpolarea pe vecinătăţi 'spline' -pentru interpolarea spline cubică 'cubic' - pentru interpolarea bi-cubică

CONCLUZIE : Oricare dintre aceste variante interpolează între punctele unei reţele bi-

dimensionale, fiind găsite valorile unei funcţii f(x,y) care face conexiunea între punctele intermediare.

Page 208: MATLAB IN MECANICA

MATLAB în ingineria mecanică

210

De exemplu, se cere interpolarea, pe o reţea [X,Y], a funcţiei MATLAB peaks() (această funcţie, de două variabile, este obţinută prin translatarea şi scalarea distribuţiilor GAUSS), pe o reţea [XI,YI] mai fină decât [X,Y] . Soluţia este : » [X,Y] = meshgrid(-3:.25:3); » Z = peaks(X,Y); » [XI,YI] = meshgrid(-3:.125:3); » ZI = interp2(X,Y,Z,XI,YI); » mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15) » hold off »axis([-3 3 -3 3 -5 20])

INTERPOLARE TRIDIMENSIONALĂ Interpolarea tridimensională, în MATLAB, se realizează cu funcţia interp3() care se poate apela în următoarele variante : » VI = interp3(X,Y,Z,V,XI,YI,ZI) » VI = interp3(V,XI,YI,ZI) » VI = interp3(V,de_n_ori) » VI = interp3(...,metoda)

Page 209: MATLAB IN MECANICA

MATLAB în ingineria mecanică

211

Oricare dintre aceste variante realizează interpolarea prin căutarea valorilor matricei VI, reprezentând valorile intermediare ale funcţiei tridimensionale V în punctele reţelei date de matricile XI, YI şi ZI. Matricile, sau vectorii, XI, YI şi ZI trebuie sa fie de aceeaşi dimensiune, respectiv să fie ordonate monoton. De exemplu, folosind şi funcţia MATLAB slice(), se interpolează datele reţelei tri-dimensionale [x,y,z,v] = flow(10), pentru a găsi valorile corespunzătoare punctelor [xi,yi,zi] :

» [x,y,z,v] = flow(10); » [xi,yi,zi] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3); » vi = interp3(x,y,z,v,xi,yi,zi); » slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2])

INTERPOLAREA SPLINE, CUBICĂ

Curba spline cubică este o curbă netedă, definită de un set de polinoame de gradul trei. Curba, « de conectare lină », dintre fiecare set de puncte este definită printr-un polinom de gradul trei, determinat astfel încât să conducă la tranziţii netede de la un polinom de gradul III la altul. Spre exemplu, trei puncte sunt conectate cu două curbe de gradul trei, diferite, ceea ce constituie o funcţie netedă între toate cele trei puncte.

Obs. : De reţinut : diferenţa dintre metoda de interpolare lineară şi interpolarea spline, care constă în aceea că metoda spline permite « extrapolarea », adică se pot estima valori care nu se găsesc în setul ordonat.

Page 210: MATLAB IN MECANICA

MATLAB în ingineria mecanică

212

Interpolarea spline cubică se face în MATLAB cu funcţia: yy = spline(x,y,xx)

pp = spline(x,y) unde:

- x,y sunt vectori linie ce conţin abscisele, respectiv ordonatele punctelor;

- xi este vector ce conţine noua abscisă

Ex.: Să se determine valoarea y1 de interpolare pentru x1=2.7; dacă:

»x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ; În MATLAB (considerând că au fost deja introduşi vectorii x şi y): »y1=spline(x,y,2.7) y1=67.4340 Ex.: Folosind aceiaşi vectori, se cere interpolarea în punctele (1.5,2.7) respectiv în (1.2,3.4,4.5). Cele două valori, în care se cere interpolarea vor fi introduse de la tastatură între paranteze drepte, deci ca o matrice cu o singură linie (vector linie): »x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ; »y2=spline(x,y,[1.5,2.7]) y2=42.2500 67.4340 »y3=spline(x,y,[1.2,3.4,4.5]) y3 = 28.8320 70.0480 86.6250 Ex.: Folosind vectorii x=[0,1,2,3,4,5] şi y=[0,20,60,68,77,100] se cere interpolarea în “n=26” puncte echidistante situate între 0 şi 5: »xi=0:0.2:5; » yi=spline(x,y,xi)

Page 211: MATLAB IN MECANICA

MATLAB în ingineria mecanică

213

yi = Columns 1 through 8 0 -1.2480 0.7360 5.3440 11.9680 20.0000 28.8320 37.8560 Columns 9 through 16 46.4640 54.0480 60.0000 63.9040 66.1120 67.1680 67.6160 68.0000 Columns 17 through 24 68.7760 70.0480 71.8320 74.1440 77.0000 80.4160 84.4080 88.9920 Columns 25 through 26

94.1840 100.0000

Ex.: Să se reprezinte grafic o interpolare lineară şi o interpolare spline cubică pentru datele şi rezultatele exemplului anterior.Pentru reprezentarea grafică se va folosi funcţia MATLAB plot() : »x i=0:0.2:5; »y i=spline(x,y,x i); »plot(x,y,xi,yi,x,y,’o’) Ex.: a) Fiind date 10 perechi de puncte în xOy, să se traseze graficul rezultat prin interpolare spline pe o reţea de patru ori mai fină (x=0:10; y=sin x) Soluţie: »x = 0:10; y = sin(x); »xi = 0:0.25:10; »yi = spline(x,y,xi); »plot(x,y,’o’,xi,yi)

Page 212: MATLAB IN MECANICA

MATLAB în ingineria mecanică

214

b) Folosind, pentru x pasul iterării 0.5 iar funcţia y=tgx+sinx, să se reprezinte pe acelaşi grafic valorile funcţiei (y- cu linie punctată de culoare roşie), valorile interpolate prin metoda spline(yi-cu linie continuă de culoare magenta ) şi valorile interpolate prin metoda cubic (zi-cu linie continuă de culoare verde): »x = 0:0.5:10; y = tan(x)+sin(x); »xi = 0:0.125:10; »yi = spline(x,y,xi); »zi=interp1(x,y,xi,'cubic'); »plot(x,y,'r:',xi,yi,'m-',xi,zi,'g-') INTERPOLAREA MULTIPLĂ Funcţia MATLAB utilizată: »interp1(x,y,xi,’regula’) în care, argumentele au semnificaţia cunoscută, iar ‘regula’ este cuvântul cheie: ‘linear’ – interpolare lineară; ‘spline’ – interpolare spline; ‘cubic’ – interpolare cubică. Toate „regulile” necesită ca x să fie ordonat crescător, în plus, metoda ‘cubic’ impune ca punctele x să fie egal distanţate.

Page 213: MATLAB IN MECANICA

MATLAB în ingineria mecanică

215

Ex.: Să se determine prin interpolare lineară, spline şi cubică, şi apoi sa se

reprezinte grafic punctele corespunzătoare valorilor

-10,-9.75,-4.25,4.15,0.1,6.35, dacă x=-10:0.5:10, iar y=(log(abs(x+12))+2)./(exp(x)+12).

Soluţie : » x=-10:0.5:10; » y=(log(abs(x+12))+2)./(exp(x)+12); » xi=[-10,-9.75,-4.25,4.15,0.1,6.35]; » yi1 = interp1(x,y,xi,'linear'); » yi2 = interp1(x,y,xi,'spline'); » yi3 = interp1(x,y,xi,'cubic'); »plot(x,y,'r:',xi,yi1,'m-',xi,yi2,'g-',xi,yi3,'k-.') REGRESIA POLINOMIALĂ Datele stocate în vectorul y se pot modela, de exemplu, printr-un polinom de gradul II, ceea ce ar putea fi reprezentat analitic prin funcţia:

2210 tataay ⋅+⋅+= , coeficienţii a0, a1 şi a2 determinându-se dintr-un sistem de

6 ecuaţii (vectorul y are 6 elemente) cu 3 necunoscute:⎥⎥⎥

⎢⎢⎢

⎡⋅

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

2

1

0

266

255

244

233

222

211

6

5

4

3

2

1

aaa

tt1tt1tt1tt1tt1tt1

yyyyyy

.

Presupunând că sunt date elementele vectorului t şi ale vectorului corespondent, y, se formează matricea X, a coeficienţilor sistemului, în funcţie de dimensiunea vectorului t, în raport de puterile întâi şi a doua ale elementelor acestui vector:

» t = [0, 0.3, 0.8, 1.1, 1.6, 2.3]'; y = [0.5, 0.82, 1.14, 1.25, 1.35, 1.40]';X= [ones(size(t)) t t.^2]

Page 214: MATLAB IN MECANICA

MATLAB în ingineria mecanică

216

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

Soluţia acestui sistem este: » a=X\y

a = 0.5318 0.9191 -0.2387

»T = (0:0.1:2.5)'; Y = [ones(size(T)) T T.^2]*a; plot(T,Y,'-',t,y,'o'), grid on Cu aceste date se formează modelul matematic polinomial de ordinul II: 2t2387,0t9191,05318,0Y ⋅−⋅+= care interpolează valorile vectorului y. Reprezentând grafic acest polinom de gradul II, suprapunând cu graficul anterior, se obţine figura alăturată. În această reprezentare, polinomul de interpolare este reprezentat cu „linie continuă”, în timp ce valorile „date” sunt reprezentate cu simbolul grafic „o”. Este evident că această curbă nu aproximează foarte exact datele experimentale, de aceea se poate creşte gradul polinomului de aproximare, sau se pot folosi alte metode de aproximare. REGRESIA EXPONENŢIALĂ Considerând ca model de aproximare o funcţie exponenţială

t2

t10 etaeaay −− ⋅⋅+⋅+= , în care parametrii ce urmează a fi determinaţi sunt

coeficienţii, aceştia se determină prin metoda celor mai mici pătrate. În acest sens, se construieşte, şi se rezolvă sistemul de ecuatii folosind matricea X, a regresiilor:

» t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]'; » X=[ones(size(t)) exp(-t) t.*exp(-t)];

Page 215: MATLAB IN MECANICA

MATLAB în ingineria mecanică

217

» a=X\y a = 1.3974

-0.8988 0.4097

Modelul matematic de aproximare se formează cu aceste valori determinate prin rezolvarea sistemului de ecuaţii:

tt et4097,0e8988,03974,1Y −− ⋅⋅+⋅−= . Prin evaluarea modelului, pe un interval uniform T=0:0.1:2.5 (care include valorile vectoruluit = [0 .3 .8 1.1 1.6 2.3]'), şi suprapunerea graficului Y(T) peste y(t): »T = (0:0.1:2.5)';

» Y = [ones(size(T)) exp(- T) T.*exp(- T)]*a; » plot(T,Y,'-',t,y,'o'), grid on

Din această figură se observă că aproximarea cu o curbă exponenţială este mult mai „aproape” de valorile vectorului y = [0.5 0.82 1.14 1.25 1.35 1.40]'.

Page 216: MATLAB IN MECANICA

MATLAB în ingineria mecanică

218

REGRESIA MULTIPLĂ

În cazul în care y este o funcţie de mai multe variabile independente, ecuaţiile matriceale, care exprimă relaţia dintre variabile, pot fi definite pentru a include şi datele adiţionale. Astfel, dacă se presupune că, pentru doi parametri diferiţi, definiţi vectorial, x1 = [.2 .5 .6 .8 1.0 1.1]' şi x2 = [.1 .3 .4 .9 1.1 1.4]', s-au determinat experimental, statistic sau prin altă metodă, valorile funcţiei, şi acestea sunt cuprinse în vectorul y = [0.17 0.26 0.28 0.23 0.27 0.24]', atunci, funcţia- model matematic lineară, care ar putea exprima relaţia între parametri, este:

22110 xaxaay ⋅+⋅+= , în care ai reprezintă parametrii lineari ce urmează a fi determinaţi. Regresia multiplă determină soluţia { }210 a,a,a folosind metoda celor mai mici pătrate. Pentru aceasta, se construieşte matricea regresiilor, X, şi se găsesc coeficienţii necunoscuţi (a=[a0; a1; a2]):

» x1 = [3.2 4.5 7.6 8.8 1.0 3.1]'; x2 = [2.1 4.3 5.4 8.9 1.1 1.4]'; » y = [2.5 3.3 4.5 5.2 8.9 4.7]'; » X = [ones(size(x1)) x1 x2]; » a = X\y a = 6.4905 -1.0243 0.8208

Cu aceste valori, funţia- model devine: » y_model=6.4905-1.0243.*x1+0.8208.*x2 y_model =

4.9364 5.4106 3.1381 4.7818 6.3691 4.4643

Pentru a valida acest model, se determină valoarea maximă absolută a deviaţiei datelor modelului faţa de datele observate:

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

Page 217: MATLAB IN MECANICA

MATLAB în ingineria mecanică

219

eroarea_maxima = 2.5309

Această eroare este suficient de mare pentru a invalida modelul adoptat. Repetând raţionamentul şi calculele pentru alte valori ale vectorilor x1, x2 şi y se obţin următoarele rezultate:

» x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .27 .24]'; » X = [ones(size(x1)) x1 x2]; » a = X\y a = 0.1018 0.4844 -0.2847 » y_model=0.1018+0.4844.*x1-0.2847.*x2 y_model = 0.1702 0.2586 0.2786 0.2331 0.2730 0.2361 » Y=X*a; » eroarea_maxima=max(abs(Y-y)) eroarea_maxima = 0.0038

Această eroare denotă faptul că modelul poate fi validat în această variantă. APROXIMAREA POLINOMIALĂ DE GRADUL n Funcţia MATLAB polyfit(), determină aproximarea polinomială, în sensul celor mai mici pătrate, a unui set de date. Sintaxa funcţiei MATLAB este:

a) » p = polyfit(x,y,n) b) » [p,S] = polyfit(x,y,n) c) » [p,S,miu] = polyfit(x,y,n)

Page 218: MATLAB IN MECANICA

MATLAB în ingineria mecanică

220

Descriere:

Apelată în varianta a), funcţia p=polyfit(x,y,n), determină coeficienţii unui polinom de gradul n, p(x), care aproximează valorile (x(i)) la y(i), în sensul celor mai mici pătrate. Rezultatul, p, este un vector linie cu n+1 coloane, conţinând coeficienţii polinomiali, în ordine descendentă:

( ) 1nn

1n2

n1 pxp...xpxpxp +

− +⋅++⋅+⋅=

Dacă funcţia polyfit este apelată în varianta b), cu parametrii de ieşire p şi S, atunci, se returnează coeficienţii polinomiali în vectorul linie p, şi o structură S, care poate fi utilizată, cu funcţia polyval, pentru estimarea erorilor de previzionare. Apelarea cu varianta c), funcţia polyfit, determină obţinerea coeficienţilor

polinomului p, în variabila 2

1xx

μμ−

= , în care ( )xmean1 =μ este valoarea medie

a variabilei x, respectiv ( )xstd2 =μ deviaţia standard, calculată cu relaţia

( )∑=

−⋅−

=n

1i

2i xx

1n1s , în care ∑

=

⋅=n

1iix

n1x ,iar miu ( parametrul de ieşire, în

cazul celei de-a treia variante de apelare a funcţiei polyfit), este vectorul ],[miu 21 μμ= .

De exemplu, dacă se consideră setul de date măsurate x-y, şi se doreşte aproximarea datelor cu o curbă polinomială de gradul III, atunci secvenţa MATLAB următoare, determină afişarea grafică a rezultatelor aproximării:

» x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4]; » p = polyfit(x,y,3) p = -0.1917 31.5821 -60.3262 35.3400

Polinomul de aproximare este: ( ) 34,35x3262,60x5821,31x1917,0xp 23 +⋅−⋅+⋅−=

» x2 = 1:.1:5; » y2 = polyval(p,x2); » plot(x,y,'o',x2,y2),ylabel('Valorile determinate pentru y2' ),

xlabel('Valorile x2'), grid on

Page 219: MATLAB IN MECANICA

MATLAB în ingineria mecanică

221

Reprezentarea grafică a acestei aproximări este redată în figură:

EROAREA APROXIMĂRII Orice aproximare numerică implică şi existenţa erorilor. O discuţie privind erorile de aproximare trebuie sa înceapă avand ca suport asumarea presupunerii că erorile apar doar în răspunsuri, niciodată în setul de date previzionate, respectiv presupunerea că erorile au o distribuţie normală (distribuţie Gauss), faţă de zero (ca medie) şi cu varianţa constantă (de valoare 2σ ). Presupunerea ca distribuţia erorilor să fie normală, trebuie să fie validă întrucât aproximarea, prin orice metodă, este adecvată doar în cazul unei distribuţii normale a cantităţilor aproximate. Această presupunere are la bază faptul că probabilitatea existenţei unor valori extreme în setul de date este mică şi metoda de aproximare prin cele mai mici pătrate are aplicabilitate validă. Media zero a erorilor înseamnă că acestea au o apariţie pur aleatoare. Dacă media erorilor nu este zero aceasta se poate datora faptului că modelul ales nu este cel convenabil, sau că erorile nu sunt aleatorii, respectiv că există erori sistematice.

Valoare măsurată x=2 y=43,1

Valoare aproximată X2aproximat=4,5 Y2aproximat=385.9449

Page 220: MATLAB IN MECANICA

MATLAB în ingineria mecanică

222

Varianţa constantă arată faptul că erorile au o împrăştiere constatntă. Datele cu aceeaşi varianţă se numesc date de aceeaşi calitate. Presupunerea că varianţa datelor este constantă nu implică şi o ponderare în sensul aproximării celor mai mici pătrate. Aceasta se poate observa şi din procedura de aproximare, unde se presupune că există diferite nivele ale ponderilor, deci calităţi diferite ale datelor. Din acest motiv se utilizează ponderile în metoda celor mai mici pătrate, pentru a ajusta influenţa fiecărei valori din setul de date şi a corecta coeficienţii aproximării. Pentru determinarea varianţei există două relaţii analitice de calcul:

( )∑=

−⋅=σn

1i

2i

2 xxn1 , sau ( )∑

=

−⋅−

=σn

1i

2i

2 xx1n

1 , unde ∑=

=n

1i

i

nx

x .

În MATLAB eroarea de aproximare este determinată cu funcţia specifică erf(x). Matematic această funcţie este dată de relaţia: 1)2x(2)x(erf −Φ⋅= , în care )x(Φ este o funcţională ce determină analitic distribuţia normală standard după o relaţie empirică:

2

2

2

)x(

e2

1),,x( σ

μ−−

⋅π⋅σ

=σμΦ

în care simbolurile utilizate au semnificaţia definită în cazul aproximării şi regresiei polinomiale, respectiv în cazul metodei celor mai mici pătrate. Funcţia MATLAB erf(x) determină valoarea erorii de aproximare a funcţiei model, pentru fiecare valoare a elementelor matricei x. Această eroare este determinată prin integrala definită a distribuţiei normale, când media normată este setată la zero, iar valoarea varianţei este 1/2:

∫ ⋅⋅π

= −x

0

t dte2)x(erf2

Pentru a se demonstra limitele procedeului de aproximare, printr-o funcţie polinomială, se va prezenta un exemplu, ilustrativ. Se generează un vector, uniform spaţiat, x=0:0.1:2.5, şi se determină, cu funcţia MATLAB erf(), distribuţia Gauss a erorilor » x = (0: 0.1:2.5)';

» y = erf(x);

Page 221: MATLAB IN MECANICA

MATLAB în ingineria mecanică

223

Coeficienţii polinomului de aproximare, de gradul VI, sunt determinaţi cu funcţia MATLAB polyfit(): »p = polyfit(x,y,6)

» p = 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004

Pentru a determina cât de apropiată este ajustarea polinomială, se va evalua polinomul p(x) în punctele vectorului x, şi se afişează tabelar valorile:x, y, valorile polinomului de aproximare, abaterea valorilor polinomului faţă de valorile y:

» f = polyval(p,x); »tabel = [x y f y-f] tabel = Valorile x Valorile y Valorile f Valorile erorii 0 0 0.0004 -0.0004 0.1000 0.1125 0.1119 0.0006 0.2000 0.2227 0.2223 0.0004 0.3000 0.3286 0.3287 -0.0001 0.4000 0.4284 0.4288 -0.0004 0.5000 0.5205 0.5209 -0.0004 0.6000 0.6039 0.6041 -0.0002 0.7000 0.6778 0.6778 0.0000 0.8000 0.7421 0.7418 0.0003 0.9000 0.7969 0.7965 0.0004 1.0000 0.8427 0.8424 0.0003 1.1000 0.8802 0.8800 0.0002 1.2000 0.9103 0.9104 -0.0000 1.3000 0.9340 0.9342 -0.0002 1.4000 0.9523 0.9526 -0.0003 1.5000 0.9661 0.9664 -0.0003 1.6000 0.9763 0.9765 -0.0002 1.7000 0.9838 0.9838 0.0000 1.8000 0.9891 0.9889 0.0002 1.9000 0.9928 0.9925 0.0003 2.0000 0.9953 0.9951 0.0002 2.1000 0.9970 0.9969 0.0001 2.2000 0.9981 0.9982 -0.0001 2.3000 0.9989 0.9991 -0.0003 2.4000 0.9993 0.9995 -0.0002 2.5000 0.9996 0.9994 0.0002

Page 222: MATLAB IN MECANICA

MATLAB în ingineria mecanică

224

Se poate observa că, pe acest interval, ajustarea polinomială este relativ corespunzătoare, dar, dacă se extinde intervalul (vectorul x devine x=0:0.1:5), reprezentarea grafică arată ca aproximarea devine neconformă, aceasta deteriorându-se rapid:

»x = (0: 0.1: 7)'; » y = erf(x); » f = polyval(p,x); » plot(x,y,'x',x,f,'-.'),axis([0 5 0 2])

Folosind o altă facilitate oferită de MATLAB, polytool(x,y), care este o aproximare polinomială de grad n interactivă, se pot observa, în urma câtorva manevre simple şi intuitive, schimbările intervenite în aproximarea prin polinoame de diferite grade. Această facilitate oferă un instrument deosebit în analiza erorilor şi curbelor de aproximare polinomiale, fiind uşor de observat care model polinomial este cel mai adecvat în aproximarea pe un anumit interval finit. Interfaţa grafică polytool realizează aproximarea între un vector coloană x şi corespondentul y al acestuia. Interfaţa se activează prin introducerea de la

Page 223: MATLAB IN MECANICA

MATLAB în ingineria mecanică

225

tastatură a vectorilor „ţintă”, x şi y, respectiv a funcţiei specifice polytool(x,y). Modificarea gradului polinomului de aproximare prin regresie este posibilă în caseta Degree, în care este necesară înscrierea gradului polinomului ( 10n1 ≤≤ ). Valorile interpolate sunt afişate în mod curent, pentru cele două axe, dacă reprezentarea grafică este bi-dimensională, respectiv în coordonate 3D, dacă din meniul Tools, se modifică aspectul imaginii. Presupunând vectorul x = (0: 0.1: 7)', şi valorile funcţiei y=erf(x), se va realiza aproximarea interactivă cu instrucţiunile: » x = (0: 0.1:7)';

» y = erf(x); » polytool(x,y,6)

obţinându-se imaginea:

Aceeaşi figură transpusă şi rotită 3D:

Page 224: MATLAB IN MECANICA

MATLAB în ingineria mecanică

226

Există şi alte funcţii MATLAB specifice, pentru aproximare interactivă, precum aoctool care este sinonimă funcţiei polytool, obiectivul principal al acesteia fiind, însă, analiza covarianţei modelului de aproximare.

Page 225: MATLAB IN MECANICA

MATLAB în ingineria mecanică

227

CAPITOLUL VII

AJUSTAREA ŞI APROXIMAREA DATELOR NOŢIUNI GENERALE Observaţiile experimentale sunt, în general, seturi de date discrete care, pot fi organizate ca vectori coloană sau matrici, în care, liniile reprezintă rezultatele şi observaţiile la un moment dat. De exemplu, dacă se presupune că, în anumite momente ale zilei s-a determinat frecvenţa traficului de autovehicule, în trei puncte diferite, ale unei localităţi, aceste date ar putea fi stocate tabelar. Datele stocate în tabelul alăturat pot fi, de asemenea, aranjate, într-o matrice cu dimensiunea 24x3: »trafic=[11,11,9;7,13,11;14,17,20;11,13,9;43,51,69;38,46,76;61,132,186;75,135,180;38,88,115;28,36,55;12,12,14;18,27,30;18,19,29;17,15,18;19,36,48;32,47,10; 42,65,92;57,66,151;44,55,90;114,145,257;35,58,68;11,12,15;13,9,15;10,9,7] trafic =

11 11 9 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

Ora înregistrării

Pct. A Pct. B Pct. C

01 h 00 min 11 11 9 02 h 00 min 7 13 11 03 h 00 min 14 17 20 04 h 00 min 11 13 9 05 h 00 min 43 51 69 06 h 00 min 38 46 76 07 h 00 min 61 132 186 08 h 00 min 75 135 180 09 h 00 min 38 88 115 10 h 00 min 28 36 55 11 h 00 min 12 12 14 12 h 00 min 18 27 30 13 h 00 min 18 19 29 14 h 00 min 17 15 18 15 h 00 min 19 36 48 16 h 00 min 32 47 10 17 h 00 min 42 65 92 18 h 00 min 57 66 151 19 h 00 min 44 55 90 20 h 00 min 114 145 257 21 h 00 min 35 58 68 22 h 00 min 11 12 15 23 h 00 min 13 9 15 24 h 00 min 10 9 7

Page 226: MATLAB IN MECANICA

MATLAB în ingineria mecanică

228

Matricea trafic, a observaţiilor zilnice, poate fi utilizată în analize şi prelucrări matematice ulterioare. În acest sens, presupunând necesară reprezentarea grafică, pentru vizualizarea traficului, la un moment dat (considerând reperele orare date de vectorul t=1:24), se foloseşte următoarea secvenţă MATLAB: » t=1:24; » set(0,'defaultaxeslinestyleorder','-|--|-.'); » set(0,'defaultaxescolororder',[0 0 0]); » xlabel('Timpul'), ylabel('Numar de vehicule in trafic'), grid on » plot(t,trafic), legend('Locatia A','Locatia B','Locatia C',0)

In practica inginerească este necesar, atât în analiza rezultatelor experimentale, cât şi pentru emiterea unor concluzii, ca datele obţinute să fie aproximate prin curbe polinomiale, exponenţiale sau de altă natură.

Page 227: MATLAB IN MECANICA

MATLAB în ingineria mecanică

229

UTILIZAREA GUI (GRAPHICAL USER INTERFACE- INTERFAŢA GRAFICĂ UTILIZATOR) PENTRU AJUSTAREA DATELOR Cea mai rapidă şi eficientă procedură de ajustare, aproximare, interpolare şi extrapolare a datelor experimentale, este Interfaţa Grafică Utilizator (Graphical User Interface-GUI ), disponibilă în MATLAB, versiunile superioare (Release 12 sau 13). Informaţii complete, privind această procedură, se regăsesc în documentaţia de ajutor din meniul Help opţiunea Full Product Family Help. Accesarea interfeţei grafice (pentru simplificarea exprimării se va folosi, în continuare, sintagma GUI) pentru ajustarea datelor, se introduce, în fereastra de comandă MATLAB, comanda: » cftool Această comandă are ca efect activarea interfeţei grafice Curve Fitting Tool (Instrument de ajustare a curbelor):

Dacă în fereastra de comandă a MATLAB, exista vectori coloană de aceeaşi dimensiune, aceştia vor fi selectaţi automat de editorul de ajustare şi stocaţi în vederea prelucrării. Altfel, se impune introducerea sau importarea datelor în vectori coloană.

Page 228: MATLAB IN MECANICA

MATLAB în ingineria mecanică

230

PROCEDURA DE AJUSTARE

Procedura de ajustare va fi prezentată aici pentru un caz specific: ajustarea datelor cuprinse în doi vectori coloană y şi t. Se presupune că în linia de comandă s-au introdus vectorii y şi t: » t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]';

1. -se introduce comanda pentru activarea interfeţei grafice a ajustării:

» cftool

• -Se accesează butonul Data... care activează o interfaţă grafică ce permite selectarea valorilor care urmează a fi ajustate pe axa X, respectiv pe axa Y şi ponderea acestor date (dacă aceasta este „None” valoarea ponderii este implicit 1 ). Atunci cănd se selectează un anumit vector pe o axă, în medalion se reprezintă grafic valorile vectorului respectiv. De asemenea această interfaţă permite definirea unui set nou de valori, un vector în funcţie de altul, de exemplu, prin accesarea butonului Create Data Set.

• Se închide sesiunea acestei interfeţe grafice cu butonul Close.

2. -Din interfaţa grafică Curve Fitting Tool se accesează butonul Fitting... al

cărui efect este deschiderea editorului de ajustare compus din două părţi distincte: editorul propriu-zis, Fit Editor, şi tabloul ajustărilor, Table of Fits.

Editorul ajustării , Fit Editor, permite acţiuni pentru:

Specificarea numelui ajustării curente, setarea datelor curente şi stabilirea regulii de excludere;

Explorarea diferitelor metode de ajustare ale seturilor de date curente,

folosind o bibliotecă de ecuaţii, metode de ajustare spline şi interpolanţi; Suprareglarea opţiunilor implicite de ajustare (cum ar fi metoda

identificării coeficienţilor); Compararea rezultatelor ajustării;

Page 229: MATLAB IN MECANICA

MATLAB în ingineria mecanică

231

Tabloul ajustărilor , Table of Fits, permite

Monitorizarea datelor şi ajustărilor anterioare; Afişarea unui sumar al rezultatelor ajustării; Salvarea sau anularea rezultatelor ajustării.

Se accesează butonul New fit care alocă automat un nume implicit ajustăriii curente. Presupunem că aceasta se va numi ajustarea_1, iar cu următoarea opţiune, Data set, se defineşte setul de date (presupunem că acesta este setul t vs. y, adică vectorul t, în funcţie de y) care va fi ajustat în cele ce urmează şi va fi numit, în continuare, ajustarea_1. Se selectează un alt set de date, definit anterior (presupunem că acesta este setul y vs. t, adică vectorul y, în funcţie de t), şi acesta va fi numit în continuare ajustarea_2. Se alege aproximarea polinomială, iar în următoarea secţiune se va selecta ajustarea polinomială cuadratică (printr-un

Page 230: MATLAB IN MECANICA

MATLAB în ingineria mecanică

232

polinom de gradul doi: f(x) = p1*x^2 + p2*x + p3). Se validează opţiunea Immediate apply, ceea ce va avea drept efect afişarea rezultatelor în caseta Results. În paralel MATLAB prelucrează datele în funcţie de opţiunile setate şi selecţiile operate, fiind afişate, în fereastra interfeţei grafice Curve Fitting Tool reprezentările grafice ale celor două seturi de date, atât cele discrete cât şi cele previzionate, ajustate.

3. Din meniul View al interfeţei grafice Curve Fitting Tool se selectează opţiunea Residuals-Line Plot:

Page 231: MATLAB IN MECANICA

MATLAB în ingineria mecanică

233

care permite, şi realizează, reprezentarea grafică a reziduurilor ajustării, fiind dată o măsură reală a mărimii erorilor de aproximare, în diferite puncte ale seturilor de date ajustate. Reprezentarea grafică a reziduurilor arată că o ajustare mai bună este posibilă, sau nu. În funcţie de mărimea erorilor de calcul şi a distanţei faţă de valorile discrete efective, se poate lua decizia unei ajustări ulterioare, pentru creşterea calităţii aproximării, prin metode şi tehnici multiple.

DETERMINARTEA CELEI MAI BUNE AJUSTĂRI Pentru a determina cea mai bună ajustare sau aproximare trebuie avute în vedere atât rezultatele grafice cât şi rezultatele numerice ale procedurii efective. Pentru exemplificare se consideră că pentru vectorul populatia_USA = [3.9,5.3,7.2,9.6,12.9,17.1,23.1,31.4,38.6,50.2,62.9,76,92,105.7,122.8,131.7,150.7,179,205,226.5,248.7]' raportat la anii de referinţă cuprinşi în vectorul anii_de_referinta=[1790,1800,1810,1820,1830,1840,1850,1860,1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980,1990]’ s-au realizat ajustări folosind expresii polinomiale de diferite grade (2, 4 şi 7) respectiv o ajustare exponenţială de un singur termen, a*exp(b*x) (adică

xbea ⋅⋅ ), şi s-au obţinut reprezentările grafice (ale rezultatelor ajustării, respectiv ale reziduurilor), din figură:

Din aceste reprezentări se poate deduce că este dificil a decide care dintre polinoameoferă cele mai bune rezultate pentru aproximare sau ajustare, întrucât diferenţele

Page 232: MATLAB IN MECANICA

MATLAB în ingineria mecanică

234

reziduale sunt nesemnificative, iar, prin comparaţie, ajustarea exponenţială cu un singur termen este evident neacoperitoare, datorită gradului mare de incompatibilitate şi concordanţă cu datele discrete.Setul de date ajustate se poate vizualiza accesând butonul Data..., caseta Data sets, opţiunea View:

În continuare, se foloseşte interfaţa grafică Curve Fitting Tool, butonul Plotting... pentru a elimina metoda de ajustare printr-o funcţie exponenţială, invalidând caseta corespunzătoare, această metodă dovedindu-se a fi neconcludentă pentru ajustarea datelor celor doi vectori:

Page 233: MATLAB IN MECANICA

MATLAB în ingineria mecanică

235

Pentru a examina, datele extrapolate prin cele trei expresii polinomiale de diferite grade, se vor modifica limitele axelor folosind meniul Tools, opţiunea Axis Limit, prin modificarea limitei superioare a limitei X Upper Limit la valoarea 2050, ceea ce va permite extrapolarea, prin cele trei expresii polinomiale, a valorii vectorului populatia_USA corespunzătoare acestui an:

Se constată că extrapolarea printr-un polinom de gradul 7 va genera o valoare extrapolată, pe baza datelor existente, mult diferită de celelalte valori, demonstrând neconcordanţa evidentă cu datele extrapolate prin celelalte expresii polinomiale. Acest exemplu ilustrează, foarte clar, că alegerea unei metode de extrapolare trebuie făcută cu mare atenţie, în funcţie de mai mulţi factori care ar putea influenţa asupra corectitudinii rezultatelor.

Page 234: MATLAB IN MECANICA

MATLAB în ingineria mecanică

236

EXAMINAREA REZULTATELOR NUMERICE Examinarea reprezentărilor grafice ale aproximărilor, din exemplul anterior, demonstrează că este necesară o procedură suplimentară pentru a decide care dintre variantele alese pentru ajustarea datelor din vectorul populatia_USA este varianta cea mai apropiată de varianta corectă. Pentru aceasta este nevoie de studiul rezultatelor numerice, care sunt asociate procedurii de aproximare propriu-zisă. MATLAB oferă două tipuri de rezultate numerice, afişate in interfaţa grafică Curve Fitting Tool ->Fitting ->Results şi Table of Fits: concordanţa rezultatelor aproximării respectiv intervalul de confidenţă. Concordanţa rezultatelor arată cât de bine sunt aproximate datele, iar intervalul de confidenţă reflectă precizia rezultatelor. Pentru a evidenţia rezultatele numerice ale ajustării datelor, se consideră ajustarea polinomială de grad 2, 3, 4, 5 şi 6, respectiv aproximarea exponenţială cu un singur termen, a datelor conţinute în vectorul populatia_USA, relativ la vectorul anii_de_referinta, pentru care s-au obţinut rezultatele numerice din figura alăturată: Parametrii numerici ai ajustării se pot seta din interfaţa Curve Fitting Tool ->Fitting ->Results şi Table of Fits->Table options:

Page 235: MATLAB IN MECANICA

MATLAB în ingineria mecanică

237

În această sesiune sunt validate titlurile coloanelor care vor apărea în tabelul Table of Fits. Opţiunea SSE (Sum of Squares Due to Error), este o marime statistică ce se referă la mărimea deviaţiei valorii de răspuns a ajustării, faţă de valoarea dată, calculată ca suma pătratelor erorilor în funcţie de mărimea

reziduurilor. Acest parametru este definit prin ecuaţia ( )∑=

−ω=n

1i

2iii yySSE , în

care iω reprezintă mărimea reziduului (determinate, şi afişate, în MATLAB, cu opţiunea Residuals din meniul View):

Page 236: MATLAB IN MECANICA

MATLAB în ingineria mecanică

238

iar yi şi iy sunt datele aproximate respectiv previzionate. Valorile reziduale se pot

determina dacă se cunoaşte varianţa datelor (σ ), cu relaţia 2i1σ

=ω , sau se poate

aproxima cu relaţia ( )1n

1i

2iii yy

n1

=⎟⎟

⎜⎜

⎛−=ω ∑ , dacă nu se cunoaşte varianţa

datelor, în care iy reprezintă valoare medie evaluată statistic. R-square reprezintă raportul dintre suma pătratelor regresiilor (sum of squares of the regression -SSR) şi suma totală a pătratelor (total sum of squares

-SST):

( )

( )∑

=

=

−ω

−ω

=− n

1i

2iii

n

1i

2iii

yy

yy

squareR . R-square poate lua valori cuprinse între 0

şi 1, o valoare mai aproape de 1 are semnificaţia unei bune aproximări. De exemplu, o valoare R-square=0,99871 (în cazul ajustării polinomiale de gradul II) arată că există o variaţie de până la 99,87 % faţă de valoarea medie calculată. Parametrul DFE (Degrees of Freedom Adjusted R-Square) foloseşte parametrul R-square, definit anterior, şi ajustează această valoare pe baza gradelor de libertate ale reziduurilor. Gradele de libertate ale reziduurilor se reprezintă diferenţa dintre numărul valorilor de raspuns şi numărul coeficienţilor de aproximare: v=n-m. În această relaţie, v reprezintă numărul datelor independente din totalul de n puncte necesare calculării sumei de pătrate, iar m este numărul de coeficienţi ai ecuaţiei de aproximare. Modelul matematic, se consideră ca fiind un bun indicator statistic al calităţii aproximării când sunt adăugaţi coeficienţi suplimentari în ecuaţia aproximării. Parametrul RMSE (Root Mean Squared Error) este cunoscut ca eroarea standard a aproximării şi ca eroarea standard a regresiilor. Se determină cu

relaţia:

( )

v

yy

vSSERMSE

n

1i

2iii∑

=

−ω

== . O valoare apropiată de 0 înseamnă

o bună aproximare. Validarea parametrului #Coeff are ca efect afişarea numărului de coeficienţi folosiţi pentru aproximarea datelor. Intervalul de confidenţă (de siguranţă) reprezintă limitele, inferioară respectiv superioară, ale coeficienţilor ecuaţiei aproximării. Formatul afişat pentru un parametru este: p1 = 0.006541 (0.006124, 0.006958), ceea ce înseamnă că

Page 237: MATLAB IN MECANICA

MATLAB în ingineria mecanică

239

valoarea calculată a coeficientului este 0.006541, limita inferioară 0.006124 respectiv limita superioară 0.006958. Implicit, nivelul de siguranţă este 95%, şi se poate modifica din interfaţa Curve Fitting Tool meniul View, opţiunea Confidence level. Limitele de siguranţă pot fi calculate şi afişate grafic din interfaţa Curve Fitting Tool meniul View, opţiunea Prediction Bounds, sau cu opţiunea Analysis din interfaţa Curve Fitting Tool. SALVAREA REZULTATELOR AJUSTĂRII Din interfaţa Fitting, accesând butonul Save to workspace..., se salvează întregul proces de ajustare, prin validarea celor trei opţiuni:

• prima opţiune salvează ajustarea ca obiect MATLAB

Page 238: MATLAB IN MECANICA

MATLAB în ingineria mecanică

240

• a doua opţiune salvează, într-o structură multidimensională, concordanţa ajustării:

• cea de-a treia opţiune salvează rezultatele ajustării, oferind informaţii asupra parametrilor numerici ai ajustării

Page 239: MATLAB IN MECANICA

MATLAB în ingineria mecanică

241

ANALIZA REZULTATELOR AJUSTĂRII Din interfaţa Curve Fitting Tool, butonul Analysis se pot realiza analize ale parametrilor ajustării, în funcţie de datele originale. Se pot interpola, extrapola date, se pot diferenţia şi integra curbele de variaţie ale ajustării, între anumite limite. Pentru aceasta, se sccesează vectorul Xi dorit, din câmpul Analyze at Xi, se selectează caseta aferentă evaluării Evaluate fit at Xi, pentru afişarea rezultatelor şi reprezentarea grafică a acestora fiind necesară validarea casetelor Plot results şi Plot data set, după care se accesează butonul Apply, pentru realizarea procedurii. De exemplu pentru extrapolarea necesară identificării datelor ajustării folosind ajustarea polinomială, pentru populaţia corespunzătoare anului 2025, se va modifica ultima valoare din câmpul Analyze at Xi, la valoarea 2025:

Page 240: MATLAB IN MECANICA

MATLAB în ingineria mecanică

242

Rezultatele extrapolării se pot salva, similar procesului de ajustare propriu-zisă Ex.: Se va realiza o ajustare polinomială de ordinul III, V şi VI, pentru vectorii x = [4:0.1:7 9:0.2:12]', y = c(1) + c(2)*x + c(3)*x.^2 + c(4)*x.^3 + (rand(size(x))-0.5), ai cărui coeficienţi sunt elementele vectorului c = [8 -5 13 12]. »x = [4:0.1:7 9:0.2:12]' ;c = [8 -5 13 12]; y = c(1) + c(2)*x + c(3)*x.^2 + c(4)*x.^3 + (rand(size(x))-0.5); »cftool Urmând procedura enunţată, se realizează ajustarea cu cele trei curbe polinomiale. Analiza rezultatelor permite, din interfaţa Curve Fitting Analysis, manevre ale reprezentării grafice, utilizând facilităţile de prelucrare şi animaţie a figurilor, permise de MATLAB Release 12 şi superioare acesteia:

Page 241: MATLAB IN MECANICA

MATLAB în ingineria mecanică

243

Page 242: MATLAB IN MECANICA

MATLAB în ingineria mecanică

244

Ex.: Se va ajusta o curbă de variaţie a coeficientului de dilatare a Cu, în raport cu temperatura. Pentru aceasta se va considera vectorul temp al temperaturilor, un vector cu 236 elemente, cu temperaturi cuprinse între 24,41 [K] şi 848,23 [K], iar valorile măsurate experimental, pentru coeficientul de dilatare, pentru aceste temperaturi, stocate în vectorul coloană coef_CU. Se va realiza o aproximare raţională, cu o funcţie având atat numărătorul cât şi numitorul, polinoame de gradul doi. După ce sunt introduse datele, în fereastra de comandă (prin una din opţiunile posibile:de la tastatură, import, încarcare etc.), se activează procesul de ajustare, cu funcţia cftool, apoi se setează parametrii de aproximare din interfaţa Fitting..., selectând, din câmpul Type of fit, opţiunea Rational. Apoi, se nominalizează tipul polinomului de la numărător (Numerator), respectiv de la numitorul expresiei raţionale (Denominator):

Page 243: MATLAB IN MECANICA

MATLAB în ingineria mecanică

245

Folosind butonul Table options..., se validează parametrii numerici ai ajustării, parametri care vor fi cuprinşi în tabelul Table of Fits. Afişarea rezultatelor şi reziduurilor ajustării se realizează selectând opţiunea Residuals-Plot line, din meniul View al interfeţei grafice Curve Fitting Tool:

Este uşor de observat că sunt „zone” în care aproximarea nu este acoperitoare: lipsesc parametrii şi rezultatele ajustării:

Page 244: MATLAB IN MECANICA

MATLAB în ingineria mecanică

246

Se încearcă, în consecinţă o altă ajustare, de tipul raţională polinomială cu polinoame de gradul III, atât la numărător cât şi la numitor:

Acest tip de aproximare, se observă din interfaţa Fit Editor câmpul Results, este neconvergentă, ceea ce anulează posibilitatea alegerii unei astfel de ajustări pentru acest set de date, fiind, astfel necesară o altă ajustare.

Page 245: MATLAB IN MECANICA

MATLAB în ingineria mecanică

247

Modificarea expresiei raţionale de ajustare, astfel încât polinomul de la numărător să fie de gradul III, iar cel de la numitor, de gradul II, are ca rezultat o aproximare mult îmbunătăţită, reziduurile fiind aleatoriu distribuite faţă de valoarea zero, ceea ce înseamnă o ajustare realistă:

În câmpul Results al interfeţei Fit Editor, sunt prezentaţi parametrii ajustării, şi coeficienţii modelului matematic al acesteia. Interfaţa Curve Fitting Tool, prezintă, în câmpul Residuals, dispersia cvasi-uniformă a reziduurilor, în raport cu „linia zero”. Acest aspect al dispersiei este o măsură a unei aproximări corecte şi valabilă pentru acest set de date. Aprecierea unei ajustări este relativ dificil de realizat pentru un număr mare de date pentru un set aleatoriu de curbe de ajustare. Astfel, în acest proces este foarte posibil să apară şi rutina examinării concordanţei, respectiv auto-suficienţa utilizatorului. Din acest motiv, după evaluarea ajustării prin examinarea graficelor rezultate, foarte importantă este evaluarea numerică a ajustării, ceea ce presupune:

• evaluarea reziduurilor; • evaluarea concordanţei; • aprecierea confidenţei rezultatelor şi previzionarea limitelor de varianţă.

Page 246: MATLAB IN MECANICA

MATLAB în ingineria mecanică

248

Aceste aspecte sunt determinante în aprecierea calităţii unei ajustări numerice corecte şi conforme, în proporţie determinantă, cu datele măsurate şi ajustate. Aceste operaţii pot fi grupate în două categorii: numerice şi grafice. În timp ce reziduurile şi predicţia limitelor de varianţă sunt măsuri grafice, concordanţa, respectiv predicţia limitelor de varianţă sunt determinări numerice. Metodele grafice de apreciere a ajustării sunt mult mai expresive şi uşor de evaluat calitativ, nefiind necesară o pregătire deosebită în acest sens, în timp ce analiza numerică a ajustării este mai puţin comprehensivă datorită faptului că valorile numerice pot include multe informaţii greu de diferenţiat în cazuri specifice. Este evident că sunt posibile multe situaţii în care ambele tipuri de metode să fie folosite pentru evaluarea aceleiaşi ajustări. Adoptarea uneia dintre metode în defavoarea alteia este determinatîn, primul rând, de înţelegerea procesului de ajustare, apoi de modelul parametric de ajustare ales. Semnificaţia fizică a coeficienţilor unui anume model matematic este esenţial a fi corect înţeleasă, fiind nevoie, în plus, de evaluarea prin mai multe metode şi modele de ajustare, pentru aflarea celei mai apropiate soluţii. Anterior, a fost prezentată metodica afişării reziduurilor unei ajustări, respectiv a fost prezentat modul de calcul al mai multor coeficienţi şi parametri ai ajustării. Printre aceştia, unul dintre cei mai importanţi paşi ai evaluării unei ajustări, este calculul limitelor de varianţă. Aceste limite sunt calculate pentru două variante: predicţia simultană, respectiv predicţia nesimultană. Predicţia simultană se referă la confidenţa tuturor rezultatelor ajustate, în timp ce confidenţa unui anume parametru generează o predicţie nesimultană. Evaluarea metodelor de ajustare, prin estimarea, calitativă sau cantitativă, a erorilor de aproximare şi prin cuantizarea numerică, sau nu, a reziduurilor, este, aşadar, o operaţiune care implică o bună pregătire a întregului proces de aproximare sau ajustare. Nu pot exista valori sau coeficienţi de corecţie pentru estimarea erorilor de ajustare sau aproximare. Aceste limite sunt definite, sau prescrise de către utilizator, şi depind, în cea mai mare măsură de ceea ce se urmăreşte prin întregul proces de aproximare sau ajustare. Ne-existând reţete pentru acest tip de operaţiuni, se impune, de la sine, o concluzie: pregătirea unei baze solide în domeniul ajustării numerice, prin orice metodă, se constituie ca fiind cheia unor rezultate eficiente şi corecte.

Notă: În Anexă este prezentat un fişier script, demonstrativ, care surprinde o multitudine de funcţii MATLAB, şi care realizează estimarea parametrilor tehnologici şi de transformare, ai legii de deformare superplastică.

Page 247: MATLAB IN MECANICA

MATLAB în ingineria mecanică

249

BIBLIOGRAFIE [1] BEJU, I., et al.. -Tehnici de calcul tensorial euclidian cu aplicaţii, Editura

Tehnică, Bucureşti, 1977 . [2] BEU, T. A. –Calcul numeric în C, Ed. Albastră, Cluj-Napoca, 1999. [3] BONET, J. - Numerical Simulation of the Superplastic Forming of Thin

Sheet Components Using the Finite Element method, " International Journal for Numerical Methods in Engineering", vol. 30, pag. 1719- 1737, 1990.

[4] BROWN, E.E.& col.- “Superalloys – Processing – 2nd. Int.Conf. on Superalloys”, Publ.AIME, 1972, pag. L1-L12.

[5] BUDIANSKY, B. & col.- “Mechanics of Solids”, Ed. H.G.Hopkins & M.J.Sewell, publ. Pergamon Press Oxford, 1982, pag. 13.

[6] DODESCU, GH. -Metode numerice în algebră, Editura Tehnică, Bucureşti, 1979 . [7] FORRAY, M.J. - Calculul variaţional în ştiinţă şi tehnică, Editura

Tehnică, Bucureşti, 1975 . [8] GHINEA, M. -MATLAB- Calcul numeric, grafică, aplicaţii,

Editura Teora, Bucureşti, 1997. [9] GREBENIŞAN, G. –Metodă de optimizare numerică a parametrilor

deformării superplastice, Sesiunea anuală de comunicări ştiinţifice, Oradea, 1999

[10] GREBENIŞAN, G. –Program dezvoltat în mediul MATLAB 5.3, pentru determinarea analitică a parametrilor tehnologici la deformarea superplastică (partea I-Consideraţii teoretice), Simpozion “Materiale avansate, tratamente termice şi calitatea managementului”, Editura Politehnica, Timişoara, 2001.

[11] GREBENIŞAN, G. - Program dezvoltat în mediul MATLAB 5.3, pentru determinarea analitică a parametrilor tehnologici la deformarea superplastică (partea II-Aplicaţie), Simpozion “Materiale avansate, tratamente termice şi calitatea managementului”, Editura Politehnica, Timişoara, 2001.

[12] GREBENIŞAN, G. –Parametrii tehnologici ai deformării superplastice-program de calcul în MATLAB-studiu de caz, Sesiunea anuală de comunicări ştiinţifice, Oradea, 2002.

[13] HAHN, B.D. –Essential MATLAB for Scientists and Engineers, Ed. By Butterworth-Heinemann, Cape Town, 2002.

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

Page 248: MATLAB IN MECANICA

MATLAB în ingineria mecanică

250

[15] LEWIS, P.E.,ş.a. - The Finite element Method. Principles and Applications, Addison Wesley Publishing Company, London, 1991 .

[16] LUNGU, N. - Matematici cu aplicaţii tehnice, Editura Tehnică, Bucureşti,1990 . [17] MARCIUK, G.I - Metode de analiză numerică, Editura Academiei

Române, Bucureşti, 1983, trad. din lb. rusă . [18] MARINESCU, GH. et al. –Probleme de analiză numerică, Ed. Didactică şi

Pedagogică, Bucureşti, i978. [19] MOSZYNSKI, K.-Metode numerice de rezolvare a ecuaţiilor diferenţiale

ordinare, Ed. Tehnică, Bucureşti, 1973. [20] MUNTEANU, M. - Metoda elementului finit, Reprografia

Universităţii « Transilvania », Braşov,1997. [21] PASCARIU, I -Elemente finite. Concepte, aplcaţii, Editura Militară,Bucureşti, 1985. [22] POTERAŞU, V.F.,ş.a..-Metode numerice în elasticitate şi plasticitate,vol.

I, Editura Academiei Române, Bucureşti, 1993 . [23] OLARIU, V.,ş.a.. - Modelare numerică cu elemente finite, Editura

Tehnică, Bucureşti, 1986 . [24] SALVADORI, M.-Metode numerice în algebră, Editura Tehnică, Bucureşti, 1972 [25] SAWCZUK, A.,ş.a. - Teoria plasticităţii, Editura Tehnică, Bucureşti,

1970, trad. de prof. dr. ing. N. Cristescu . [26] SIMIONESCU, I. et al.-Metode numerice în tehnică, Ed. Tehnică,

Bucureşti, 1995. [27] VOINEA, R.,ş.a. -Introducere în mecanica soliduli cu aplicaţii în

inginerie, Editura Academiei Române, Bucureşti, 1989 .

Page 249: MATLAB IN MECANICA

MATLAB în ingineria mecanică

251

ANEXĂ

PROGRAM PENTRU DETERMINAREAPARAMETRILOR DE INTRARE AI SIMULĂRII PROCESULUI DE

DEFORMARE SUPERPLASTICĂ Programul este astfel realizat încât să nu fie necesare comenzi suplimentare pentru executarea încărcării datelor experimentale, pentru plotarea graficelor pe baza calculelor, respectiv pentru executarea unor opţiuni. Comanda programului poate fi realizată atât din fereastra de comandă(Command Window) cât şi prin intermediul casetelor de dialog(msgdlg sau msgbox) sau al butoanelor. Programul determină prin calcul direct parametrii tehnologici ai deformării superplastice pentru diferite situaţii impuse, fiind organizat astfel: -liniile de ajutor şi informaţii sunt de culoare verde;

-şirurile de caractere sunt marcate cu culoarea roşie; -buclele if- else- end sau buclele for- end, sunt marcate cu culoare albastră, ca de altfel toate instrucţiunile Matlab.

%Program de analiza a dependentei %dintre parametrii deformarii superplastice. %Programul foloseste ca date de intrare %rezultate experimentale stocate %in fisierul "date.dat"; %Pentru exemplificare s-au introdus cele sase matrici cu valori %experimentale in cadrul programului % Incarcarea datelor %(liniile 12 -17 sunt transformate in "comentarii" %in cazul exemplificarii; altfel sunt linii de program) %load k; %load temp; %load mar_gr; %load eps; %load m; %load sigma; %matricea conţinând valorile consistenţei mecanice; k=[ 2780 3550 4005 4530 5110 5780 6140 6730 ; 1810 2310 2780 3140 3770 4005 4260 4530 ; 570 870 1180 1510 1810 2180 2610 2950 ; 60 90 140 210 350 540 730 1420 ; 2410 3070 3680 4410 4980 5620 5970 6740 ;

Page 250: MATLAB IN MECANICA

MATLAB în ingineria mecanică

252

1160 1670 2130 2720 3260 3680 4150 4690 ; 200 290 390 560 860 1160 1400 1670 ; 70 100 150 260 420 560 860 1160 ; 390 530 710 970 1490 2140 2910 3710 ; 180 250 320 470 710 970 1400 2020 ; 110 170 220 300 470 630 910 1320 ; 55 85 120 170 250 390 560 860 ]; %matricea conţinând valorile temperaturii temp=[ 299 299 299 299 299 299 299 299 ; 333 333 333 333 333 333 333 333 ; 393 393 393 393 393 393 393 393 ; 443 443 443 443 443 443 443 443 ; 299 299 299 299 299 299 299 299 ; 333 333 333 333 333 333 333 333 ; 393 393 393 393 393 393 393 393 ; 443 443 443 443 443 443 443 443 ; 299 299 299 299 299 299 299 299 ; 341 341 341 341 341 341 341 341 ; 363 363 363 363 363 363 363 363 ; 393 393 393 393 393 393 393 393 ]; %matricea continand dimensiunea grauntilor; mar_gr=[ 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5; 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5; 7.5 7.5 7.5 7.5 7.5 7.5 7.5 7.5; 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5; 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5; 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5; 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5; 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0; 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0; 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0; 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0]; format short e %matricea deformatiilor reale; eps=[0.0000318 0.000077 0.000155 0.000285 0.000669 0.00131 0.00256 0.00637 ; 0.0000318 0.000077 0.000155 0.000285 0.000669 0.00131 0.00256 0.00637 ; 0.0000328 0.0000793 0.000155 0.000285 0.000711 0.00139 0.00256 0.00637 ; 0.0000318 0.0000793 0.000155 0.000285 0.000711 0.00139 0.00256 0.0000947; 0.0000318 0.0000746 0.000155 0.000303 0.000711 0.00139 0.00256 0.00599 ; 0.0000318 0.0000746 0.000146 0.000268 0.000649 0.00116 0.00226 0.00499 ; 0.0000793 0.000155 0.000285 0.000711 0.00139 0.00272 0.00637 0.0117 ; 0.0000299 0.0000746 0.000137 0.000277 0.000629 0.00131 0.00233 0.0047 ; 0.0000318 0.000077 0.000146 0.000285 0.00069 0.00135 0.00248 0.00564 ; 0.0000318 0.000077 0.000146 0.000285 0.00069 0.00135 0.00248 0.00547 ; 0.0000309 0.0000746 0.000146 0.000268 0.000669 0.00123 0.0024 0.00547 ]; %matricea coeficientilor de sensibilitate a vitezei de deformare; m=[ 0.31 0.22 0.19 0.17 0.15 0.13 0.11 0.08; 0.24 0.28 0.25 0.21 0.14 0.11 0.08 0.07; 0.6 0.44 0.37 0.31 0.26 0.23 0.2 0.15; 0.58 0.58 0.6 0.62 0.61 0.59 0.54 0.37; 0.31 0.27 0.24 0.21 0.017 0.14 0.12 0.1;

Page 251: MATLAB IN MECANICA

MATLAB în ingineria mecanică

253

0.5 0.4 0.36 0.29 0.21 0.17 0.15 0.13; 0.26 0.49 0.65 0.54 0.46 0.39 0.3 0.22; 0.45 0.58 0.63 0.62 0.58 0.53 0.46 0.38; 0.29 0.41 0.47 0.5 0.51 0.48 0.44 0.37; 0.37 0.43 0.46 0.49 0.51 0.51 0.5 0.48; 0.44 0.43 0.45 0.47 0.5 0.52 0.52 0.51; 0.45 0.51 0.52 0.53 0.53 0.55 0.57 0.59]; %matricea rezistenţelor la deformare; sigma=[ 19.167544 24.47654 27.613674 31.233444 35.232428 39.851944 42.334072 46.402004; 12.479588 15.926988 19.167544 21.649672 25.993396 27.613674 29.371848 31.233444; 3.930036 5.998476 8.135864 10.411148 12.479588 15.030664 17.995428 20.33966; 0.413688 0.620532 0.965272 1.447908 2.41318 3.723192 5.033204 9.790616; 16.616468 21.167036 25.372864 30.406068 34.336104 38.748776 41.161956 46.470952; 7.997968 11.514316 14.685924 18.753856 22.477048 25.372864 28.61342 32.336612; 1.37896 1.999492 2.688972 3.861088 5.929528 7.997968 9.65272 11.514316; 0.482636 0.68948 1.03422 1.792648 2.895816 3.861088 5.929528 7.997968; 2.688972 3.654244 4.895308 6.687956 10.273252 14.754872 20.063868 25.579708; 1.241064 1.7237 2.206336 3.240556 4.895308 6.687956 9.65272 13.927496; 0.758428 1.172116 1.516856 2.06844 3.240556 4.343724 6.274268 9.101136; 0.379214 0.586058 0.827376 1.172116 1.7237 2.688972 3.861088 5.929528]; % se incarca un set de 6 matrici : temp = temperatura, % mar_gr = marimea grauntilor, eps = viteza de deformare, m = coef. de sensibilitate, % sigma = rezistenta la deformare, k = consistenta. % Afisarea grafica a parametrilor: MESAJ1(1)={'DORITI SA AFLATI COORDONATELE UNOR PUNCTE DE PE GRAFIC?'}; MESAJ1(2)={'AFIRMATIV: apasati tasta "1", urmata de "ENTER"\NEGATIV:apasati "0", "ENTER"'}; MESAJ2(1)={'ALEGETI PUNCTELE...'}; MESAJ2(2)={'Folositi mouse-ul pentru a selecta punctele!\Pentru incheiere apasati "ENTER"'}; MESAJ3(1)={'C O O R D O N A T E L E S U N T A F I S A T E '}; MESAJ3(2)={'I N M A T L A B W O R K S P A C E'}; MESAJ4(1)={'APASATI ORICE TASTA PENTRU A CONTINUA'}; MESAJ4(2)={'APASATI TASTELE [Ctrl + C] PENTRU A RENUNTA'};

Page 252: MATLAB IN MECANICA

MATLAB în ingineria mecanică

254

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!','!!! C O N T I N U A R E !!!') 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)

Page 253: MATLAB IN MECANICA

MATLAB în ingineria mecanică

255

subplot(2,3,6);plot(k/1000000,'k'); %set(title('CONSISTENTA [N/mm^2]'),'color','k') legend('consistenta',1) msgbox('URMARITI MESAJELE DE LA BAZA FIGURII','!! I M P O R T A N T !!') zoom on msgbox('Pentru "ZOOM- IN" folositi butonul stang al mouse- ului...Pentru "ZOOM- OUT" folositi butonul drept!','!!! Z O O M A C T I V !!!') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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')

Page 254: MATLAB IN MECANICA

MATLAB în ingineria mecanică

256

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','HorizontalAlignment','left','Visible','on'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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')

Page 255: MATLAB IN MECANICA

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','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left','Visible','on'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause disp(' A S T E P T A T I V A R O G !... ')

Page 256: MATLAB IN MECANICA

MATLAB în ingineria mecanică

258

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

Page 257: MATLAB IN MECANICA

MATLAB în ingineria mecanică

259

m5 = m(33:40); sigma5 = sigma(33:40); k5 = k(33:40); temp6 = temp(41:48); mar_gr6 = mar_gr(41:48); eps6 = eps(41:48); m6 = m(41:48); sigma6 = sigma(41:48); k6 = k(41:48); temp7 = temp(49:56); mar_gr7 = mar_gr(49:56); eps7 = eps(49:56); m7 = m(49:56); sigma7 = sigma(49:56); k7 = k(49:56); temp8 = temp(57:64); mar_gr8 = mar_gr(57:64); eps8 = eps(57:64); m8 = m(57:64); sigma8 = sigma(57:64); k8 = k(57:64); temp9 = temp(65:72); mar_gr9 = mar_gr(65:72); eps9 = eps(65:72); m9 = m(65:72); sigma9 = sigma(65:72); k9 = k(65:72); temp10 = temp(73:80); mar_gr10 = mar_gr(73:80); eps10 = eps(73:80); m10 = m(73:80); sigma10 = sigma(73:80); k10 = k(73:80); temp11 = temp(81:88); mar_gr11 = mar_gr(81:88);

Page 258: MATLAB IN MECANICA

MATLAB în ingineria mecanică

260

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;

Page 259: MATLAB IN MECANICA

MATLAB în ingineria mecanică

261

s13 = sum(eps3.^(2*M)); s23 = sum((eps3.^M).*sigma3.*log(eps3)); s33 = sum((eps3.^M).*sigma3); s43 = sum((eps3.^(2.*M)).*sigma3.*log(eps3)); expresie = s13*s23-s33*s43; s14 = sum(eps4.^(2*M)); s24 = sum((eps4.^M).*sigma4.*log(eps4)); s34 = sum((eps4.^M).*sigma4); s44 = sum((eps4.^(2.*M)).*sigma4.*log(eps4)); expresie = s14*s24-s34*s44; s15 = sum(eps5.^(2*M)); s25 = sum((eps5.^M).*sigma5.*log(eps5)); s35 = sum((eps5.^M).*sigma5); s45 = sum((eps5.^(2.*M)).*sigma5.*log(eps5)); expresie = s15*s25-s35*s45; s16 = sum(eps6.^(2*M)); s26 = sum((eps6.^M).*sigma6.*log(eps6)); s36 = sum((eps6.^M).*sigma6); s46 = sum((eps6.^(2.*M)).*sigma6.*log(eps6)); expresie = s16*s26-s36*s46; s17 = sum(eps7.^(2*M)); s27 = sum((eps7.^M).*sigma7.*log(eps7)); s37 = sum((eps7.^M).*sigma7); s47 = sum((eps7.^(2.*M)).*sigma7.*log(eps7)); expresie = s17*s27-s37*s47; s18 = sum(eps8.^(2*M)); s28 = sum((eps8.^M).*sigma8.*log(eps8)); s38 = sum((eps8.^M).*sigma8); s48 = sum((eps8.^(2.*M)).*sigma8.*log(eps8)); expresie = s18*s28-s38*s48; s19 = sum(eps9.^(2*M)); s29 = sum((eps9.^M).*sigma9.*log(eps9)); s39 = sum((eps9.^M).*sigma9); s49 = sum((eps9.^(2.*M)).*sigma9.*log(eps9)); expresie = s19*s29-s39*s49;

Page 260: MATLAB IN MECANICA

MATLAB în ingineria mecanică

262

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

Page 261: MATLAB IN MECANICA

MATLAB în ingineria mecanică

263

sigma_calc6 = K6.*(eps6.^((-1)*M)); sigma_calc7 = K7.*(eps7.^((-1)*M)); sigma_calc8 = K8.*(eps8.^((-1)*M)); sigma_calc9 = K9.*(eps9.^((-1)*M)); sigma_calc10 = K10.*(eps10.^((-1)*M)); sigma_calc11 = K11.*(eps11.^((-1)*M)); sigma_calc12 = K12.*(eps12.^((-1)*M)); % Trasare grafic curba calculata subplot(1,2,1) plot(eps1,sigma_calc1,'r') grid on set(title('SIGMA CALCULAT-1'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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')

Page 262: MATLAB IN MECANICA

MATLAB în ingineria mecanică

264

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left'); disp('ALEGETI PUNCTELE ! ')

Page 263: MATLAB IN MECANICA

MATLAB în ingineria mecanică

265

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

Page 264: MATLAB IN MECANICA

MATLAB în ingineria mecanică

266

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','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left');

Page 265: MATLAB IN MECANICA

MATLAB în ingineria mecanică

267

pause subplot(2,1,2) plot(eps4,sigma_calc4,'k') set(title('SIGMA CALCULAT-4'),'color','k') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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)')

Page 266: MATLAB IN MECANICA

MATLAB în ingineria mecanică

268

uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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')

Page 267: MATLAB IN MECANICA

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)')

Page 268: MATLAB IN MECANICA

MATLAB în ingineria mecanică

270

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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"');

Page 269: MATLAB IN MECANICA

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','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','left');

Page 270: MATLAB IN MECANICA

MATLAB în ingineria mecanică

272

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','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause

Page 271: MATLAB IN MECANICA

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','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left');

Page 272: MATLAB IN MECANICA

MATLAB în ingineria mecanică

274

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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

Page 273: MATLAB IN MECANICA

MATLAB în ingineria mecanică

275

disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') pause subplot(2,1,1) plot(eps11,sigma_calc11,'r') set(title('SIGMA CALCULAT-11'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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 !!')

Page 274: MATLAB IN MECANICA

MATLAB în ingineria mecanică

276

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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:')

Page 275: MATLAB IN MECANICA

MATLAB în ingineria mecanică

277

disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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"');

Page 276: MATLAB IN MECANICA

MATLAB în ingineria mecanică

278

if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause subplot(2,1,2) plot(eps2,sigma2,'g*') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','g')

Page 277: MATLAB IN MECANICA

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','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left');

Page 278: MATLAB IN MECANICA

MATLAB în ingineria mecanică

280

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

Page 279: MATLAB IN MECANICA

MATLAB în ingineria mecanică

281

end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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])

Page 280: MATLAB IN MECANICA

MATLAB în ingineria mecanică

282

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left');

Page 281: MATLAB IN MECANICA

MATLAB în ingineria mecanică

283

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

Page 282: MATLAB IN MECANICA

MATLAB în ingineria mecanică

284

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','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause

Page 283: MATLAB IN MECANICA

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','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left');

Page 284: MATLAB IN MECANICA

MATLAB în ingineria mecanică

286

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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

Page 285: MATLAB IN MECANICA

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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)')

Page 286: MATLAB IN MECANICA

MATLAB în ingineria mecanică

288

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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"');

Page 287: MATLAB IN MECANICA

MATLAB în ingineria mecanică

289

if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause subplot(2,1,1) plot(eps11,sigma11,'r') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','r')

Page 288: MATLAB IN MECANICA

MATLAB în ingineria mecanică

290

disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','left');

Page 289: MATLAB IN MECANICA

MATLAB în ingineria mecanică

291

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','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','HorizontalAlignment','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','HorizontalAlignment','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

Page 290: MATLAB IN MECANICA

MATLAB în ingineria mecanică

292

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','HorizontalAlignment','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left'); pause delete(j) delete(h) msgbox('S F A R S I T P R O G R A M','!!!! OPTIMIZARE !!!!') disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ') disp(' ~~~~~~~~~~ S F A R S I T P R O G R A M ~~~~~~~~ ') disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ') %Sfarsit program


Recommended