+ All Categories
Home > Documents > Matlab in Ingineria Mecanica

Matlab in Ingineria Mecanica

Date post: 02-Jan-2016
Category:
Upload: klausosho
View: 108 times
Download: 10 times
Share this document with a friend
Description:
Matlab in Ingineria Mecanica
407
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:
Transcript

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;

MATLAB în ingineria mecanică

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ă

4

MATLAB în ingineria mecanică

concomitent [Alt]+F- adică tasta [Alt] şi tasta [F])sau prin clic cu mouse – ul asupra comenzii dorite.

Fiecare comandă din meniul principal furnizează un submeniu specific, în cadrul acestuia selecţia putându-se face fie cu mouse-ul, fie cu ajutorul săgeţilor prin deplasarea zonei active, fie prin tastarea literei marcate special în fiecare subcomandă a respectivului meniu.

GESTIONAREA FIŞIERELOR

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

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

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

O pen … 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.

R un 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.;

5

MATLAB în ingineria mecanică

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:

N umeric 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.

6

MATLAB în ingineria mecanică

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.

U icontrols 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.

7

MATLAB în ingineria mecanică

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:

C opy- 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

8

MATLAB în ingineria mecanică

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 DESCRIEREsingle 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^3005+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

VARIABILE

9

MATLAB în ingineria mecanică

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]

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:

10

MATLAB în ingineria mecanică

» 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

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

»A [Enter]» A =

1 2 3 4 5 6

11

MATLAB în ingineria mecanică

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ă ( ) inf - infinit NaN - Not-a-Number (nu este număr) 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

12

MATLAB în ingineria mecanică

NUMERE

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

zecimal (scrierea britanică). Astfel, fracţia zecimală , 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):

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

aproximarebank »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ăruluihex »format hex -formatul hexazecimal

De exemplu, vectorul linie ,

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

» a=[5/3,1.23456789012345678901,sqrt(pi)];

13

MATLAB în ingineria mecanică

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 shorta = 1.6667 1.2346 1.7725

» format short ea = 1.6667e+000 1.2346e+000 1.7725e+000

» format short ga = 1.6667 1.2346 1.7725

» format longa =

1.66666666666667 1.23456789012346 1.77245385090552

» format long ea =

1.666666666666667e+000 1.234567890123457e+000 1.772453850905516e+000

»format long ga =1.66666666666667 1.23456789012346 1.77245385090552

» format banka = 1.67 1.23 1.77

» format rata = 5/3 100/81 296/167

» format +a =+++

O mare atenţie trebuie acordată scrierii fracţiilor zecimale. Dacă aceeaşi fracţie zecimală este scrisă în linia de comandă cu caracterul virgulă ( ,), atunci se

14

MATLAB în ingineria mecanică

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.1714ans =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,1714ans =

0ans =

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 . Astfel,

numerele complexe: , , , , , se pot

introduce, de la tastatură, astfel:

»a=2ia =

0 + 2.0000i

»a=2*ia =

0 + 2.0000i

»b= 2jb =

0 + 2.0000i

»b= 2*jb =

0 + 2.0000i

15

MATLAB în ingineria mecanică

»c=3+sqrt(7)*ic =

3.0000 + 2.6458i

»d=3+2/3id =

3.0000 - 0.6667i

»e=3+sqrt(2)*ie =

3.0000 + 1.4142i

»e=3+2^(1/2)*ie =

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: =sqrt(x), în timp ce, pentru calculul radicalului de ordinul

trei se poate folosi calculul cu puteri raţionale: =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 , , 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.»f=1+(2+sqrt(3))i??? f=1+(2+sqrt(3))i |

16

MATLAB în ingineria mecanică

Error: Missing operator, comma, or semicolon.

Numărul este un număr complex, pentru care MATLAB afişează valoarea explicită: -3.0000 + 1.4142iNumerele utilizate în MATLAB trebuie sa fie cuprinse între şi .

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 acos - inversa cosinusului acosh - inversa cosinusului hiperbolic tan - tangenta

17

MATLAB în ingineria mecanică

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ă ( ) log - logaritmul natural ( ln x ) log10 - logaritmul în baza zece ( lg x ) log2 - logaritmul în baza doi ( )

pow2 - puterile lui 2 ( ) sqrt - radical de ordin 2 ( ) nextpow2 - puterea următoare a lui 2 ( )

Funcţii complexe

abs - valoarea absolută ( ) angle - unghiul de fază ( ) 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 unwrap - corectează unghiul de fază isreal - valoarea de adevăr

Aproximări şi resturi

18

MATLAB în ingineria mecanică

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 (

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ă ( )

betainc -funcţia Beta incompl. ( )

betaln - logaritmul natural al funcţiei Beta

ellipj - funcţia Jacobi eliptică ( )

ellipke - funcţia eliptică integrală ( )

erf - funcţia eroare ( )

erfc - funcţia eroare complementară ( )

erfinv - funcţia eroare inversă

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

gamma - funcţia Gamma ( )

19

MATLAB în ingineria mecanică

gammainc - funcţia Gamma incompletă ( )

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

( )

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ă ( )

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

factorial - factorial (n!)Funcţii specifice operaţiunilor cu matriciMatrici 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

20

MATLAB în ingineria mecanică

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

21

MATLAB în ingineria mecanică

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= ; B= ; C= ; D= ; 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), 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:

22

MATLAB în ingineria mecanică

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

DEFINIREA MATRICILOR SIMPLE PRININTRODUCEREA 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= , se introduce de la tastatură cu secvenţa:

23

MATLAB în ingineria mecanică

»A= [Enter]A=

1 23 4

Obs. –În acest exemplu: elementele unei linii sunt separate printr-un spaţiu liber

((blank): respectiv ;

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

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

»A=

1 23 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:

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ă

24

MATLAB în ingineria mecanică

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 1Afiş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.

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 şi se generează astfel:

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

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

25

MATLAB în ingineria mecanică

» 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

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 =

26

MATLAB în ingineria mecanică

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

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

27

MATLAB în ingineria mecanică

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.45080.3533 0.6992 0.5548 0.7159

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

0.2731 0.2324 0.2319 0.07840.2548 0.8049 0.2393 0.6408

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

B345(:,:,4) = 0.0381 0.9342 0.8729 0.9669 0.4586 0.2644 0.2379 0.6649 0.8699 0.1603 0.6458 0.8704

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

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 , atunci funcţia sparse (C),

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

28

MATLAB în ingineria mecanică

(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

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ă

29

MATLAB în ingineria mecanică

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

30

MATLAB în ingineria mecanică

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

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

31

MATLAB în ingineria mecanică

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

»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

32

MATLAB în ingineria mecanică

0 0 0 1 1.5 1 0 0 0 0 1 2.5

GENERAREA MATRICILOR PRINCREAREA 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ă,

,

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

33

MATLAB în ingineria mecanică

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 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 135 10 11 89 6 7 124 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

34

MATLAB în ingineria mecanică

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

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

se foloseşte scrierea:

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

rezultă:» x=

-1.3000 1.7321 4.8000

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 “ ”, 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

35

MATLAB în ingineria mecanică

î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]A=

1 2 0 03 4 0 6

(adică elementul din linia 2 coloana 4, al matricei A= 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:

36

MATLAB în ingineria mecanică

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

se obţine rezultatul:

»A=1 23 45 67 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”.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 , 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;

37

MATLAB în ingineria mecanică

“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

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

38

A+32

A+48 A+16

A

A

A+32

A+48

MATLAB în ingineria mecanică

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

, 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

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

39

A+16

MATLAB în ingineria mecanică

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

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

40

MATLAB în ingineria mecanică

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

41

MATLAB în ingineria mecanică

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

42

MATLAB în ingineria mecanică

\zeta \Gamma \rightarrow

\eta \Delta \uparrow

\theta \Theta \downarrow

\vartheta \Lambda \circ

\iota \Xi \pm

\kappa \Pi \geq

\lambda \Sigma \partial

\mu \Upsilon \div

\nu \Phi \neq

\xi \Psi \equiv

\pi \Omega \Im

\rho \forall \Re

\sigma \exists \supset

\varsigma \ni \subset

\tau \cong \int

\nabla \copyright © \in

\perp \langle \rangle

\cap \cup \supseteq

\otimes \oplus \oslash Ø

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

43

MATLAB în ingineria mecanică

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:

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)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 , unde , se procedează astfel:

44

MATLAB în ingineria mecanică

»syms x a»f=x^2-2*a*x+7f = 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*xf = a*x^3+b*x^2+c*x

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

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

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

45

MATLAB în ingineria mecanică

Î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)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 , în raport cu funcţiile , respectiv , 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)]

46

MATLAB în ingineria mecanică

[ 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 , când x

tinde spre a, se procedează astfel:»syms a x

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

1/log(a)

Pentru calculul limitei şirului , se foloseşte

secvenţa MATLAB:

»syms n a

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

log(a)

47

MATLAB în ingineria mecanică

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 şi 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 care şirul este definit

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

calculul sumei , 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

şi , se foloseşte secvenţa:

48

MATLAB în ingineria mecanică

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

49

MATLAB în ingineria mecanică

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

punct x=a este: . 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 , î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 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]

50

MATLAB în ingineria mecanică

[ 2+i][ 2-i]

» solve(‘x^2=6*x-5’)ans =

[ 1][ 5]

Rezolvarea sistemului de ecuaţii 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)-2y =

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

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:

; . 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]

51

MATLAB în ingineria mecanică

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

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

52

MATLAB în ingineria mecanică

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: , respectiv

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

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)

53

MATLAB în ingineria mecanică

Folosind convenţia de scriere comună, soluţiile sunt: ;

respectiv .

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

1).-Calculul puterii unui număr:

Să se calculeze:

În MATLAB, se foloseşte algoritmul:» E1=3^5-4^(1/4)+8^(-3)

ceea ce are ca rezultat:E1 =

241.58772).-Calculul expresiilor cu numere iraţionale

Să se calculeze expresiile:

Î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

54

MATLAB în ingineria mecanică

Să se calculeze :

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

3.2353

Pentru calculul expresiei , 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

55

MATLAB în ingineria mecanică

20.0855 54.5982

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

funcţiei MATLAB exp(), matricei :

»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+003OBSERVAŢII:

Pentru calculul expresiilor iraţionale (radicali cu indice diferit de 2: sau

) se foloseşte algoritmul pentru calculul puterilor cu exponent raţional :

sau ;

Pentru calculul exponenţialei ( ) nu se foloseşte operatorul putere (“^“); 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 :

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ă

56

MATLAB în ingineria mecanică

Esc Ctrl+u Şterge linia curentăDel Ctrl+d Şterge caracterul din dreapta cursoruluiBackspace 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= B= C= D=

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 :

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

57

MATLAB în ingineria mecanică

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:

, pentru x= .

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

58

MATLAB în ingineria mecanică

» 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)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= ; b= ; c=2.

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

59

MATLAB în ingineria mecanică

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 810 12

» a2=a-b [Enter]a2 = -4 -4 -4 -4

» a3=a+c [Enter]a3 = 3 4 5 6

Ex.:

Fie: m= ; n=

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 : şi . Pentru a se calcula suma

X=B+A, se declară elementele matricelor, ca simboluri literale:

60

MATLAB în ingineria mecanică

» 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+BX = [ a11+b11, a12+b12, a13+b13] [ a21+b21, a22+b22, a23+b23] [ a31+b31, a32+b32, a33+b33]Notă: De observat modul de afişare a matricilor simbolice: fiecare linie

este încadrată între paranteze drepte.

PRODUSUL VECTORIAL ŞI 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]

61

MATLAB în ingineria mecanică

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*aprod_scalar =

38Dacă vectorii (a, b) sunt daţi simbolic:» syms a11 a21 a31 b11 b12 b13» a_simbolic=[a11 ;a21; a31]a_simbolic =

[ a11][ a21][ a31]

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

a11*b11+a21*b12+a31*b13

PRODUSUL MATRICILOR

62

MATLAB în ingineria mecanică

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: ; ; 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 1937.1962 27 6i 7 - 6i 4531.2877 10.4558 10i 7.8284 -10i 51.9706 25.1327+1.7321i 28.2743-3i -2 5.1416+i 18.8496+7i

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

63

MATLAB în ingineria mecanică

??? 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, şi

., 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:» 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*BX=

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

64

MATLAB în ingineria mecanică

Î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= ; b= ;

Să se calculeze:a/b; b/a.Cu secvenţa MATLAB următoare, rezultă:

» a=[1,2;3,4];b=[5,6;7,8];» a1=a/b [Enter]a1 =

3.0000 -2.00002.0000 -1.0000

» a2=b/a [Enter]a2 =

-1 2 -2 3

Exemplu (produsul matricilor cu dimensiuni ne-adecvate):

Fie: a= ; b= .

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:

65

MATLAB în ingineria mecanică

??? 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, şi

, 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]» B=[b1 b2]B =

[ b1 b2]

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

» X=B/AX =

[ -(a21*b2-b1*a22)/(a11*a22-a12*a21), (a11*b2-a12*b1)/(a11*a22-a12*a21)]

Soluţiile sistemului de ecuaţii: 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)

66

MATLAB în ingineria mecanică

Î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= ; B= ;

Să se calculeze:A\B; B\A.Cu secvenţa MATLAB următoare, rezultă:

» A=[1,2;3,4];b=[5,6;7,8];» A1=A\B [Enter]A1 =

-3.0000 -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]: şi . Se cere matricea

X=B/A.

67

MATLAB în ingineria mecanică

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: ). Această matrice este utilizată în calculul

tensorial, în teoria deformării elastice, în teoria deformării plastice, respectiv în calculele aferente analizei cu elemente finite a proceselor de deformare plastică şi elasto-vâsco-plastică a materialelor. Vectorii spaţiali, definiţi pe spaţiul cu trei dimensiuni , 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ă):

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

68

MATLAB în ingineria mecanică

,

unde sunt coordonatele tensorului în raport cu baza gi.

Alte exemple de tensori şi deviatori: Tensorul sferic al tensiunilor

Deviatorul tensiunilor

Invarianţii eforturilor unitare

care, în funcţie de tensiunile normale principale , sunt :

Tensorul deformaţiilor specifice

69

MATLAB în ingineria mecanică

Tensorul sferic al deformaţiilor

Deviatorul deformaţiilor specifice:

;

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

De exemplu, produsul Kronecker al două matrici ,

este:

» X=[1,2,3;4,5,6]; Y=[1,2;3,4];

70

MATLAB în ingineria mecanică

» 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 oriDacă b este un scalar iar c este o matrice atunci calculul puterii 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= ; 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

71

MATLAB în ingineria mecanică

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

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

72

MATLAB în ingineria mecanică

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

.

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 ==> detMatrix must be square.

??? Eroare la utilizarea funcţiei det ()Matricea trebuie să fie pătratică

Î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 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 , unde se poate utiliza

următoarea secvenţă:

73

MATLAB în ingineria mecanică

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

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

74

MATLAB în ingineria mecanică

» A = [2, 1 ; -1, 1] ;» B = inv(A)B=

0.3333 -0.33330.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

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

Printr-un calcul simplu se poate observa că produsul P*C reprezintă matricea unitate de ordinul doi:

»I=P*CI= 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*PQ= 0.8293 -0.1958 0.3213-0.1958 0.7754 0.3685

0.3213 0.3685 0.3952

RANGUL MATRICEI

75

MATLAB în ingineria mecanică

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

Din algebra elementară se cunoaşte că întrucât toţi minorii de ordinul al treilea ai matricei A sunt nuli:

= = =

= 0

şi, deoarece, există minori de ordinul al doilea nenuli, de exemplu =-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

CONDIŢIONAREA 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

76

MATLAB în ingineria mecanică

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 (vectorul perturbaţiilor), vectorul soluţie x devine , iar sistemul perturbat este :

, sau , deci Egalitatea din ultima relaţie, se obţine numai pentru anumiţi vectori . Aplicând norma ambilor membri ai egalităţii A·x=B, se obţine :

,

şi, folosind câteva calcule simple de înmulţire şi identificare, se obţine (presupunând că ) :

în care A-1 este matricea inversă a lui A, obţinută prin calcule (afectate de erori de rotunjire, adică ). 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 :

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

77

MATLAB în ingineria mecanică

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

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

de ordinul 10-3 sau 10-4), iar 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 :

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 :

,

de unde rezultă :

sau

Ultima relaţie, aranjată, devine :

,

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

sau

Din această relaţie se observă că incertitudinea din vectorul soluţie x, relativă la , este mărginită de incertitudinea relativă a matricei A, înmulţită cu numărul de condiţionare al matricei A.

78

MATLAB în ingineria mecanică

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

79

MATLAB în ingineria mecanică

ş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];

-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\BX1=[ 7.3158 -5.4000]

» X2=A2\B

80

MATLAB în ingineria mecanică

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:

respectiv pentru sistemul "perturbat":

În Matlab, problema se rezolvă cu următoarea secvenţă:» a=[45,23.123;1,15]; a1=[45,23.124;1,15];»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\bx1 =

81

MATLAB în ingineria mecanică

-0.0685 0.2346

» x2=a1\bx2 = -0.0685 0.2346

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

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:

, în care , este matricea

coeficienţilor; este vectorul necunoscutelor; este vectorul

82

MATLAB în ingineria mecanică

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 , obţinându-se un nou sistem de ecuaţii: . În a doua

transformare, se foloseşte a doua ecuaţie, din sistemul , înmulţită cu

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

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

, k=1,2, …, na cărui descriere analitică este:

, , iar elementele matricei sunt:

, respectiv, elementele

vectorului , se calculează cu relaţiile:

83

MATLAB în ingineria mecanică

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

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 poate fi scrisă sub forma uni produs L·U de două matrice, unde matricea L este inferior triunghiulară şi U superior

triunghiulară, dacă .

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

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

84

MATLAB în ingineria mecanică

iar, dacă se determină elementele primei coloane de sub diagonala principală, se obţin ecuaţiile:

Forma generală a ecuaţiilor din care rezultă elementele liniei k, din matricea U, este:

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

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

85

MATLAB în ingineria mecanică

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

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

86

MATLAB în ingineria mecanică

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

87

MATLAB în ingineria mecanică

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:

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];»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: , se foloseşte

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

88

MATLAB în ingineria mecanică

Ex.: Se cere factorul Cholesky al matricei:

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)

p=0 (matrice pozitiv definită)

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

89

MATLAB în ingineria mecanică

Temă:Să se rezolve sistemul: 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 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

90

MATLAB în ingineria mecanică

Matrix must be positive definite.)??? Eroare la utilizarea operatorului cholMatricea 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

liniilor unei matrici 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:

91

MATLAB în ingineria mecanică

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

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

92

MATLAB în ingineria mecanică

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

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

93

Matricea triunghiulară permutată

Matricea superior triunghiular

MATLAB în ingineria mecanică

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

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

sunt: , respectiv

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)

94

MATLAB în ingineria mecanică

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

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 ;

95

MATLAB în ingineria mecanică

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 , 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 Blockset din Simulink. De exemplu, pentru rezolvarea sistemului 3x3 , se foloseşte următorul model Simulink :

96

MATLAB în ingineria mecanică

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=1Dacă 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ă :

Î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

97

MATLAB în ingineria mecanică

din Simulink. De exemplu, pentru matricea , folosind

pachetul DSP Blockset se obţine:

Ex.:

Să se determine descompunerea qr a matricei

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

98

MATLAB în ingineria mecanică

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)*B2. 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 , 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:

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

se obţine prin factorizare q-r:

99

MATLAB în ingineria mecanică

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

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

100

MATLAB în ingineria mecanică

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

unde A este o matrice simetrică reală, x este vectorul variabilelor independente iar un parametru scalar denumit valoare caracteristică sau valoare proprie.

Problema rezolvării sistemului constă în determinarea parametrului şi a vectorului x corespunzător, vector cunoscut sub denumirea de vector caracteristic sau vector propriu.În determinarea soluţiilor nebanale ale sistemului de ecuaţii :AX=X, unde :

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

valorile X, respectiv , care satisfac ecuaţia de mai sus se numesc vectori proprii, respectiv valori proprii.

Pentru a evidenţia semnificaţia fizică a valorilor şi vectorilor proprii se consideră următoarele exemple.

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:

101

MATLAB în ingineria mecanică

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

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 , este descris matematic prin sistemul de ecuaţii diferenţiale ordinare:

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

Pentru oscilaţiile naturale sistemul va oscila la o frecvenţă unică , obţinându-se oscilaţii sinusoidale de amplitudine y şi unghi de defazaj . În acest caz expresiile celor două deplasări sunt:

Dacă se înlocuiesc aceste expresii ale deplasărilor, în sistemul ecuaţiilor de mişcare, după ordonare, rezultă sistemul

Pentru şi frecvenţa adimensională ,

sistemul devine:

Sistemul omogen, în necunoscutele , are soluţia banală , pentru orice valoare λ, fapt neinteresant din punct de vedere fizic. Astfel se impune

102

MATLAB în ingineria mecanică

condiţia ca det (A fiind matricea sistemului), rezultând ecuaţia polinomială în :

Gradul polinomului caracteristic 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:

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

Dacă se rezolvă sistemul omogen în şi pentru şi în

pentru , rezultă vectorii proprii şi :

Se observă că este frecvenţa cea mai joasă iar este frecvenţa cea

mai înaltă pentru sistemul considerat, respectiv, faptul că la frecvenţa cele două

corpuri se deplasează la fel şi în aceeaşi direcţie, iar la frecvenţa 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:

103

MATLAB în ingineria mecanică

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

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

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

104

MATLAB în ingineria mecanică

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

Ex.:

Să se determine valorile şi vectorii proprii ai matricei

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.70710.5000 0.7071 -0.5000

D =-3.4142 0 00 -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

105

MATLAB în ingineria mecanică

0.7071 0.0000 0.7071 0.5000 0.7071 -0.5000D = 0.5858 0 0 0 2.0000 0 0 0 3.4142

»V=eig(A)V = 0.5858 2.0000 3.4142B. —pentru cel de-al doilea sistem   :

»A=[2,-1;-1,2];» [V,D]=eig(A)V = -0.7071 -0.7071 -0.7071 0.7071D = 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ţă : , (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 :

106

MATLAB în ingineria mecanică

Dacă U şi V sunt ortogonale (UT * U =1, VT * V=1), atunci acestea reprezintă rezultatul descompunerii în valori singulare a matricei A :

Descompunerea completă, în valori singulare, a unei matrici de tipul Amxn, are ca rezultat o matrice Umxm, una , 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 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

Rezolvare : Cu secvenţa MATLAB» A=[1 5; 4 3];» D=svd(A)

107

MATLAB în ingineria mecanică

D = 6.6713 2.5482» [U,S,V]=svd(A)U = -0.7163 -0.6977 -0.6977 0.7163S = 6.6713 0 0 2.5482V = -0.5257 0.8507 -0.8507 -0.5257

Ex.   :

Să se descompună matricea , î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.5897S = 13.8259 0 0 7.4058 0 0 0 0V = -0.6126 -0.7904 -0.7904 0.6126

108

MATLAB în ingineria mecanică

» [U,S,V]=svd(A,0)U = -0.4445 0.4723 -0.3930 -0.2855 -0.4116 -0.7711 -0.6917 0.3176S = 13.8259 0 0 7.4058V = -0.6126 -0.7904 -0.7904 0.6126

APLICAŢII

1:

Fie: a= ; b= ; c=2.

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

2:

Fie: m= ; n=

Să se calculeze: M=m+n

3:

Fie: a= ;b= ;

c=2.

109

MATLAB în ingineria mecanică

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

4:

Fie: a= ; b= ;

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

5:

Fie: a= ; c= .

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

6:

Fie: a= ; b= ;

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

7:

Fie: a= ; b=3;c= - 3

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

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

.

9   :

Calculaţi inversa matricei: A = .

10 :

110

MATLAB în ingineria mecanică

Să se determine rangul matricei A = .

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

QR, matricile:

12 : Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper,

respectiv, QR, următoarele sisteme de ecuaţii lineare:

;

13 : Să se rezolve, folosind metodele de factorizare Choleski, Lower-Upper,

respectiv, QR, următoarele sisteme de ecuaţii lineare:

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

111

MATLAB în ingineria mecanică

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

112

MATLAB în ingineria mecanică

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

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

113

MATLAB în ingineria mecanică

-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:24M(:,:,k) = A(:,p(k,:))End

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

114

MATLAB în ingineria mecanică

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 – “ .^ “

ADUNAREA ŞI SCĂDEREATABLOURILOR 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 : , b= , c=10, d=

.

Să se calculeze: a-b; a-c; c-a; c-b; a+dCu 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

115

MATLAB în ingineria mecanică

6 5 4

» D=c-b [Enter]D = 11.0000 2.0000 6.8584 1.0000 7.7639 7.0000

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

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

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

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

Î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 : , , c=10,

.

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]

116

MATLAB în ingineria mecanică

A = -1.0000 16.0000 9.4248 36.0000 11.1803 18.0000

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

» 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” ATABLOURILOR DE VALORI

Împărţirea la dreapta, a două tablouri, este simbolizată prin caracterul combinat “ ./ “ (punct + slash):

Ex.:

Fie : , b= , c=10.

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

117

MATLAB în ingineria mecanică

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» 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 : , b= , 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;

118

MATLAB în ingineria mecanică

» 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» 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 ATABLOURILOR 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 : , b= , 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]

119

MATLAB în ingineria mecanică

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

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

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

120

MATLAB în ingineria mecanică

» 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

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

121

MATLAB în ingineria mecanică

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

122

MATLAB în ingineria mecanică

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

» whos Nume_si_Functia Name Size Bytes Class ans 1x42 84 char arrayGrand 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_functiaName Size Bytes Classnumele_si_functia 2x24 96 char arrayGrand 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 :

123

MATLAB în ingineria mecanică

Cod Caracter Cod Caracter Cod Caracter Cod Caracter Cod Caracter

0. (zero) 27. → 54. 4 81. N 108. h1. ☺ 28. ← 55. 5 82. O 109. i2. ☻ 29. └ 56. 6 83. P 110. j3. 30. ↔ 57. 7 84. Q 111. k4. 31. 58. 85. 112.5. ◊ 32. ▲ 59. 8 86. R 113. l6. ♣ 33. ▼ 60. 9 87. S 114. m7. ♠ 34. (blank) 61. : 88. T 115. n8. ● 35. ! 62. ; 89. U 116. o9. ◘ 36. " 63. < 90. V 117. p10. ○ 37. # 64. = 91. W 118. q11. ◙ 38. $ 65. > 92. X 119. r12. ♂ 39. % 66. ? 93. Y 120. s13. ♀ 40. & 67. @ 94. Z 121. t14. ♪ 41. ' 68. A 95. [ 122. u15. ♫ 42. ( 69. B 96. \ 123. v16. ☼ 43. ) 70. C 97. ] 124. w17. ► 44. * 71. D 98. ^ 125. x18. ◄ 45. + 72. E 99. _ 126. y19. ↨ 46. , 73. F 100. ` 127. z20. ‼ 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. f26. ↓ 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ţă:

124

MATLAB în ingineria mecanică

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

111Pentru 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 “#”).

125

MATLAB în ingineria mecanică

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:

» p+2returnează 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

126

MATLAB în ingineria mecanică

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

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

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

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:

127

MATLAB în ingineria mecanică

» strcmp(s2,s3)ans =

0

Funcţiile specifice operaţiilor şi operaţiunilor cu şiruri de caractere sunt prezentate folosind : » help matlab\strfun.Ş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 AveNew York

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

??? Error using ==> vertcatAll 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

128

MATLAB în ingineria mecanică

21 Bruxelles AveNew 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 :

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

numesiadresa =Albert Durrer 21 Bruxelles AveNew 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

129

MATLAB în ingineria mecanică

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

130

MATLAB în ingineria mecanică

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’;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:

» studentstudent =

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

131

MATLAB în ingineria mecanică

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];Î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:

»studentstudent =

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'

132

MATLAB în ingineria mecanică

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:

» cursuri.titlu='Metode numerice';» cursuri.grupa=student;» cursuricursuri =

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).titluans =

Metode numericeans =

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).numeans =

Juan Antonio Cajigalans =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 =

133

MATLAB în ingineria mecanică

Juan Antonio Cajigalnume2 =

Luis Jimenez

Pentru ştergerea sau anularea unor câmpuri ale structurii create se foloseşte funcţia MATLAB rmfield().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};» cc =

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

134

MATLAB în ingineria mecanică

»cellplot(c)

afişează, într-o figură separată, structura celulară “c”:

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} =BonzaiMakay

c{2,2} =1x2 struct array with fields: nume legitimatie calificative

135

MATLAB în ingineria mecanică

Apelarea, în linia de comandă, a elementelor structurii celulare, se realizează folosind parantezele acolade, în combinaţii cu parantezele rotunde, sau 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 =

BonzaiMakay

» 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

136

MATLAB în ingineria mecanică

Structurile celulare multidimensionale, în MATLAB, sunt extensii normale ale matricilor bi-dimensionale.

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

137

MATLAB în ingineria mecanică

patru indici:primii doi pentru perechea linie-coloană şi ultimii doi pentru a treia şi a patra dimensiune.CREAREA STRUCTURILORCELULARE 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 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

138

MATLAB în ingineria mecanică

Se pot foslosi funcţiile MATLAB, cum ar fi randn(), zeros(), ones(), pentru generarea structurilor multidimensionale, exact ca în cazul matricilor bi-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

139

MATLAB în ingineria mecanică

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

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

140

MATLAB în ingineria mecanică

ORGANIZAREA DATELOR ÎN STRUCTURILECELULARE 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:

141

MATLAB în ingineria mecanică

APLICAŢII

[1]:

Fie: , ,c=2

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

[2]:

Fie: , ,

c=10, d= .

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

142

MATLAB în ingineria mecanică

[3]:

Fie : , b= , c=10.

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

[4]:

Fie : , b= , c=10.

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

[5]:

Fie : , b= , c=10.

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

[6]:

Să se determine transpusa tabloului .

143

MATLAB în ingineria mecanică

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;

144

matricele sau expresiile matriceale care se compară ;

MATLAB în ingineria mecanică

-expresie_1 -expresie_2-

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

Ex.:

Să se compare elementele matricei cu scalarul .

Folosind secvanţa MATLAB  următoare:» A=[1,2,3;4,5,6;7,8,9]; B=exp(2)-log(5)/log(3);» A<=Bans =

1 1 1 1 1 0 0 0 0

» A>=Bans =

0 0 0 0 0 1 1 1 1

» A==Bans =

0 0 0 0 0 0 0 0 0

» A~=Bans =

1 1 1 1 1 1 1 1 1

Ex.:

Să se compare matricele şi .

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

145

MATLAB în ingineria mecanică

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

1 0 0 0 0 0 1 0 0

» A<=Bans =

1 0 0 1 0 0 1 0 0

» A>Bans =

0 1 1 0 1 1 0 1 1

» A>=Bans =

0 1 1 1 1 1 0 1 1

» A==Bans =

0 0 0 1 0 0 0 0 0

» A~=Bans =

1 1 1 0 1 1 1 1 1

146

MATLAB în ingineria mecanică

OPERATORI LOGICI

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

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

SAU | OR 3SAU, exclus ŞI XOR 4

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

147

MATLAB în ingineria mecanică

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:

1 | 0 & 0 = 00 & 0 | 1 = 1

Tabelul de adevăr al acestor operatori este:

Date de intrare and Or xor not

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

0 0 0 0 0 1 10 1 0 1 1 1 01 0 0 1 1 0 11 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]=iskeywordCuvinte_cheie = 'break' 'case' 'catch' 'continue' 'else' 'elseif' 'end'

148

MATLAB în ingineria mecanică

'for' 'function' 'global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'

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ă_1grup_de_instrucţiuni_A

elsegrup_de_instrucţiuni_B

endc) if expresie_logică_1

grup_de_instrucţiuni_Aelseif expresie_logică_2

grup_de_instrucţiuni_Bend

d) if expresie_logică_1grup_de_instrucţiuni_A

elseif expresie_logică_2grup_de_instrucţiuni_B

elsegrup_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

149

MATLAB în ingineria mecanică

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 else end x = d end end

end

Ex.: Să se calculeze valoarea expresiei :

, 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)<-4f(k)=exp(x(k)-3)-4elseif (x(k)>=-4)&(x(k)<=10)f(k)=(log(x(k)^2+(2+sqrt(x(k)^4+3))^(1/3)))elsef(k)=det([pi,3^(1/5);0.456,exp(x(k)^2-4)])end

end

150

MATLAB în ingineria mecanică

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

INSTRUCŢIUNEA DE CICLARE «   for   »

Sintaxa pentru forma generală este:

for index=expresiegrup_de_instrucţiuni

endîn care :

index –reprezintă contorul de iterareexpresie- 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 scalarului2) –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ă ;

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

151

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

MATLAB în ingineria mecanică

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:

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:

152

MATLAB în ingineria mecanică

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

153

MATLAB în ingineria mecanică

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 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: .3Afisarea rezultatelor la interval de (minute): 1.33Intervalul 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)  dacă , cu pasul de indexare de 0,1;

154

MATLAB în ingineria mecanică

b) cu pasul de indexare de –0,3.

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

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))+2elseif (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 » : nu s-au prezentat aici valorile funcţiei, pentru acurateţea lucrării

155

-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

MATLAB în ingineria mecanică

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:4polar(theta,rho(i,:)) pauseendEx.: 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 onpcolor(x,y,z)shading interphold 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:mfor j = 1:n

156

MATLAB în ingineria mecanică

A(i,j) = 1/(i + j - 1);endendA = 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.0833Ex.: 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, endend

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:

157

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

MATLAB în ingineria mecanică

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

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);endb(4)=1;m=zeros(4,4);for i=1:3 m(i,i)=k(i)+k(i+1);

158

MATLAB în ingineria mecanică

m(i+1,i)=-k(i+1); m(i,i+1)=-k(i+1);endm(4,4)=1;m(4,3)=0;bmx=m\b

Rezultatele sunt :

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;

159

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

MATLAB în ingineria mecanică

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

160

MATLAB în ingineria mecanică

m(2*c(i,2)-2,i)=(coord(c(i,2),2)-coord(c(i,1),2))/dist; end endendmb=zeros(11,1);b(4,1)=-10;bd=m\b

% FINAL PROGRAMAcest 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

161

MATLAB în ingineria mecanică

d = -2.1265 -3.7535 3.8868 1.1340 -0.4106 -0.2326 -0.1228

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

162

MATLAB în ingineria mecanică

APLICAŢII

[1]:

Să se compare elementele matricei cu scalarul B=  ;

[2]:

Să se compare elementele matricei cu elementele

matricei  ;

[3]:

Să se compare elementele matricelor  ;

[4]:

Să se compare elementele matricelor  cu

scalarul ;

163

MATLAB în ingineria mecanică

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

[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~=3k=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==2disp('Fa alta...Apasa orice cheie pentru a

continua...')pause

endend

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

subgrafice, cu titlurile (c) şi (d):

164

MATLAB în ingineria mecanică

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

[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

165

MATLAB în ingineria mecanică

[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

166

MATLAB în ingineria mecanică

[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 puncteleaxis([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

167

MATLAB în ingineria mecanică

[11]: Să se actualizeze fişierul de mai jos astfel încât “sombrero-ul” să fie

înclinat spre stânga sau spre dreapta, şi “lumina” să “cadă” din dreapta :

[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')colormap jet

168

MATLAB în ingineria mecanică

daspect([10 5 1])axis tightview(-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 facetedsubplot(3,3,4)x = 0:pi/20:pi;bar(x,sin(x),'w'), shading facetedsubplot(3,3,5)x = 0:pi/20:pi;bar(x,sin(x),'w'), shading faceted

169

MATLAB în ingineria mecanică

subplot(3,3,6)x = 0:pi/20:pi;bar(x,sin(x),'w'), shading facetedsubplot(3,3,7)x = 0:pi/20:pi;bar(x,sin(x),'w'), shading facetedsubplot(3,3,8)x = 0:pi/20:pi;bar(x,sin(x),'w'), shading facetedsubplot(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' ), griddisp( [t' s'] )

170

MATLAB în ingineria mecanică

CAPITOLUL V

CALCULE NUMERICE CU POLINOAME

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

Funcţia Descriereconv(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 q1. 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 p2. -derivata produsului polinoamelor p

şi q3. -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

REPREZENTAREA POLINOAMELOR

171

MATLAB în ingineria mecanică

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-6Aceste 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 )

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)g = [1 2 -1 -2]

care în formă algebrică uzuală se scrie : g(x) = x3+2x2-x-2

172

MATLAB în ingineria mecanică

Î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âtr - vectorul coeficienţilor polinomului restPolinoamele 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” : )

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 1r =

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

»r = roots(a)

173

MATLAB în ingineria mecanică

în care:a - vector linie al coeficienţilor polinomului

Ex.: Fie polinomul f(x) = x3-2x2-3x+10. Să se determine rădăcinile ecuaţiei

f(x)=0.-în MATLAB

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

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èteb)-în MATLAB: folosind funcţia poly()a) Soluţia algebrică:

174

MATLAB în ingineria mecanică

Folosind relaţiile Viète, se obţin sumele:

S1 = x1+x2+x3 S1= 9S2 = x1x2+x1x3+x2x3 S2=26S3 = 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

EVALUAREA NUMERICĂ A UNUI POLINOM

175

MATLAB în ingineria mecanică

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-1f =

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];» f = 3*x.^4-5*x.^3+3*x-1f =

176

MATLAB în ingineria mecanică

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-1f = 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-1f = 414 605 908 1323

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

177

MATLAB în ingineria mecanică

(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-1f = 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 CUFUNCŢ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].

Î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];

178

MATLAB în ingineria mecanică

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

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

179

MATLAB în ingineria mecanică

Columns 11 through 20 0.0630 0.0896 0.1239 0.1672 0.2210 0.2870 0.3668 0.4623 0.5755 0.7083

Columns 21 through 26 0.8630 1.0419 1.2473 1.4819 1.7482 2.0490

CALCULUL DERIVATEI

Derivata polinomului

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).În MATLAB:

» A = [1 2 -1 2]; B = [1 -1];» D_prod = polyder(A, B)

180

MATLAB în ingineria mecanică

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

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

ADUNAREA ŞI SCĂDEREA POLINOAMELOR

181

MATLAB în ingineria mecanică

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+hsuma = 1 1 -5 9 -3 » dif = g-hdif = 1 -1 -5 3 1

DESCOMPUNEREA ÎN FRACŢII SIMPLE

Orice expresie raţională, se poate

descompune în fracţii simple, după rădăcinile polinomului de la numitor (soluţiile numitorului se numesc poli):

Obs.: Dacă polul pj are ordinul m de multiplicitate expresia se scrie:

182

MATLAB în ingineria mecanică

Î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: .

Î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

183

MATLAB în ingineria mecanică

polii_fractiei = 5 4

coeficientii_catului = 1 3

Acest rezultat poate fi transcris, în format algebric, astfel:

184

MATLAB în ingineria mecanică

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

185

MATLAB în ingineria mecanică

»y3=table1(tablou_original,3.5)y3 = 5.5

»y4=table1(tablou_original,0.5)y4 = 2.5

»y5=table1(tablou_original,3.75)y5 = 6.25

»y6=table1(tablou_original,-0.573)

y6 = 2.427

Atenţie ! Coloana I trebuie să fie monotonă (elementele trebuie să fie

ordonate crescător) ! Valorile căutate trebuie să se încadreze între cea mai mică şi cea

mai mare valoare a lui x, altfel, se afişează un mesaj de eroare. Astfel, dacă se cere să se găsească valoarea corespunzătoare lui y atunci când x=5, MATLAB afişează următorul mesaj :

» y7=table1(tablou_original,5)

??? Error using ==> table1x0 larger than all values in first column

???Eroare la utilizarea ==> table1x0 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

186

MATLAB în ingineria mecanică

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 y0 1 2 3 4 5 6 7 8 9 10

-3 0 1 2 4 8 7 11 0 1 12 9 3 1 7 6 5 3 1 0 -38 -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»z2=table2(tablou_original_2,-3,6.5)

187

MATLAB în ingineria mecanică

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 ==> table2x0 smaller than all values in first column

??? Eroare la utilizarea ==> table2x0 este inferioară valorilor din prima coloană

»z7=table2(tablou_original_2,2,11)

??? Error using ==> table2x0 larger than all values in first column??? Eroare la utilizarea ==> table2x0 este superioară valorilor din prima coloană

INTERPOLAREA ŞI REGRESIA

188

MATLAB în ingineria mecanică

În foarte multe aplicaţii practice apare necesitatea evaluării aproximative a unei funcţii . 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ă

sunt specificate valorile într-un numar de puncte

de reţea , adică

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, , 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 model au o semnificaţie bine stabilită;

189

MATLAB în ingineria mecanică

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

unde s-a utilizat notaţia vectorială . 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:

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 sunt considerate exacte (neafectate de erori), este firesc să se impună anularea distanţei dintre funcţiile f şi F:

Aceasta revine la construirea unei funcţii model, aparţinând unei anumite clase, care să ia, în punctele de tabelare , aceleaşi valori ca şi funcţia f(x):

190

MATLAB în ingineria mecanică

Funcţia care satisface aceste condiţii este utilizată, în mod normal, pentru aproximarea funcţiei f(x) pe intervalul iar procedeul se numeşte

interpolare. Funcţia poartă numele de funcţie de interpolare sau

interpolant, iar nodurile se mai numesc şi puncte de interpolare. Geometric,

interpolarea implică găsirea unei curbe care trece prin toate

punctele . De exemplu, presupunând funcţia y=sinx, reprezentată grafic

în punctele , 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 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.

191

MATLAB în ingineria mecanică

Dacă valorile tabelate 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 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:

nu anularea ei riguroasă ca în cazul interpolării. În mod concret, aceasta revine la determinarea celor m parametri, , 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:

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.

192

MATLAB în ingineria mecanică

Intr-un context mai larg, funcţionala 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":

Spre deosebire de funcţionala , funcţia de merit

"hi-patrat", atribuie ponderi diferite punctelor de tabelare individuale, şi anume depinzând de inversul deviaţiei standard 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

mari). În cazul în care deviaţiile sunt egale sau nu sunt cunoscute, formalismul se simplifică şi revine la regresia cu ajutorul funcţiei de merit S. Extremum- ul

funcţionalei în raport cu parametrii aj este

caracterizat prin relaţiile:

j=1, 2, …, m

sau

j=1, 2, …, m

din care pot fi determinaţi parametrii aj. Ajustarea pe baza funcţiei de merit 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 ), minimizând funcţionala .

193

MATLAB în ingineria mecanică

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ă.) asociată parametrului aj rezultă prin cumularea

contribuţiilor ponderate cu de la fiecare valoare discretă yi:

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

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:

. Reziduum-ul este calculat ca diferenţa dintre valoarea

194

MATLAB în ingineria mecanică

„observată” şi valoarea previzionată : . 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: , î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 , în necunoscutele şi , 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:

. Diferenţiind în raport cu cele două necunoscute şi

, întrucât metoda minimizează suma pătratelor reziduurilor, se obţin două expresii suplimentare:

Aceste ecuaţii sunt rezolvabile în raport cu cele două necunoscute:

ale cărui soluţii sunt:

195

MATLAB în ingineria mecanică

respectiv

.

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:

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:

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:

,

cu soluţia generalizată:

196

MATLAB în ingineria mecanică

în care, XT reprezintă transpusa matricei X. Această ecuaţie poate fi rezolvată folosind operatorul „\” (împărţire la stânga), respectiv, folosind factorizarea QR. Soluţia de răspuns, previzionată, , se determină cu relaţia:

,unde:

In aceste condiţii, reziduurile sunt date de relaţia:

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 care, 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:

,

197

MATLAB în ingineria mecanică

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:

în timp ce, dacă nu se cunoaşte varianţa, ponderile se vor aproxima cu relaţia:

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

198

MATLAB în ingineria mecanică

2. Se determină reziduurile ajustate, şi se „actualizează”. Reziduurile ajustate, se determină cu relaţia:

în care ri este reziduul pătratic uzual, iar hi este „rotunjirea” care ajustează reziduurile prin lipsă. „Actualizarea” se realizează prin:

,

unde K este o constantă de reglaj K=4.685. şi s este varianţa robustă dată prin relaţia:

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

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.

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:

199

MATLAB în ingineria mecanică

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:

care implică şi calculul Jacobianului funcţiei (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.

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

200

MATLAB în ingineria mecanică

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

201

MATLAB în ingineria mecanică

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: ; Modelul exponenţial cu doi termeni: ;

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:

3. Modelul Gauss

Acest model este utilizat pentru aproximarea valorilor „de varf”. De exemplu, aproximarea liniei spectrale de emisie pentru analiza concentraţiei chimice, poate fi descrisă printr-o aproximare Gauss. Modelul matematic asociat, este dat de ecuaţia:

,

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 (

)

202

MATLAB în ingineria mecanică

4. Modelul polinomial

Ecuaţia caracteristică acestui model este: , î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: ; Modelul exponenţial cu doi termeni: ;

6. Expresii raţionale

Expresiile raţionale sunt date de modele matematice descrise de ecuaţii de

forma: , în care gradul numărătorului, , respectiv

gradul numitorului , iar coeficientul lui 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: , în care

a este amplitudinea, b, este frecvenţa, iar c este constanta de fază pentru fiecare termen al sumei de sinusi ( ).

203

MATLAB în ingineria mecanică

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: , î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:

Funcţia MATLAB DESCRIERE

1 2table1 - 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

204

MATLAB în ingineria mecanică

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

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)

205

MATLAB în ingineria mecanică

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' –inDacă 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:

206

MATLAB în ingineria mecanică

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

207

MATLAB în ingineria mecanică

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

208

MATLAB în ingineria mecanică

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.

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)

209

MATLAB în ingineria mecanică

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

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

210

MATLAB în ingineria mecanică

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

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ă

211

Planul de secţionare y=[2]

MATLAB în ingineria mecanică

Ex.: Să se determine valoarea y1 de interpolare pentru x1=2.7; dacă:

»x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ;

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

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

212

MATLAB în ingineria mecanică

Ex.: Să se reprezinte grafic o interpolare lineară şi o interpolare spline cubică

pentru datele şi rezultatele exemplului anterior.Pentru reprezentarea grafică se va folosi funcţia MATLAB plot() :

»x i=0:0.2:5;»y i=spline(x,y,x i);»plot(x,y,xi,yi,x,y,’o’)

Ex.: a) Fiind date 10 perechi de puncte în xOy, să se traseze graficul rezultat prin interpolare spline pe o reţea de patru ori mai fină (x=0:10; y=sin x)

Soluţie:

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

b) Folosind, pentru x pasul iterării 0.5 iar funcţia y=tgx+sinx, să se reprezinte

pe acelaşi grafic valorile funcţiei (y- cu linie punctată de culoare roşie), valorile interpolate prin metoda spline(yi-cu linie continuă de culoare magenta ) şi valorile interpolate prin metoda cubic (zi-cu linie continuă de culoare verde):»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-')

213

MATLAB în ingineria mecanică

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.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];

214

MATLAB în ingineria mecanică

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

, coeficienţii a0, a1 şi a2 determinându-se dintr-un sistem de 6

ecuaţii (vectorul y are 6 elemente) cu 3 necunoscute: .

Presupunând că sunt date elementele vectorului t şi ale vectorului corespondent, y, se formează matricea X, a coeficienţilor sistemului, în funcţie de dimensiunea vectorului t, în raport de puterile întâi şi a doua ale elementelor acestui vector:

» t = [0, 0.3, 0.8, 1.1, 1.6, 2.3]'; y = [0.5, 0.82, 1.14, 1.25, 1.35, 1.40]';X= [ones(size(t)) t t.^2]X =

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

Soluţia acestui sistem este:» a=X\y

a = 0.5318

215

MATLAB în ingineria mecanică

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: 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ă , î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)];» a=X\ya = 1.3974

-0.8988 0.4097

Modelul matematic de aproximare se formează cu aceste valori determinate prin rezolvarea sistemului de ecuaţii:

. Prin evaluarea modelului, pe un

216

MATLAB în ingineria mecanică

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]'.

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,

217

MATLAB în ingineria mecanică

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: , în care ai

reprezintă parametrii lineari ce urmează a fi determinaţi. Regresia multiplă determină soluţia 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\ya = 6.4905 -1.0243 0.8208

Cu aceste valori, funţia- model devine:

» y_model=6.4905-1.0243.*x1+0.8208.*x2y_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))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:

218

MATLAB în ingineria mecanică

» 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\ya = 0.1018 0.4844 -0.2847

» y_model=0.1018+0.4844.*x1-0.2847.*x2y_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)

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

219

MATLAB în ingineria mecanică

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 , în care este valoarea medie a

variabilei x, respectiv deviaţia standard, calculată cu relaţia

, în care ,iar miu ( parametrul de ieşire, în

cazul celei de-a treia variante de apelare a funcţiei polyfit), este vectorul .

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:

» x2 = 1:.1:5;» y2 = polyval(p,x2);» plot(x,y,'o',x2,y2),ylabel('Valorile determinate pentru y2' ), xlabel('Valorile x2'), grid on

Reprezentarea grafică a acestei aproximări este redată în figură:

220

MATLAB în ingineria mecanică

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

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.

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ă

221

Valoaremăsuratăx=2y=43,1

Valoare aproximatăX2aproximat=4,5Y2aproximat=385.9449

MATLAB în ingineria mecanică

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:

, sau , unde .

În MATLAB eroarea de aproximare este determinată cu funcţia specifică erf(x). Matematic această funcţie este dată de relaţia: , în care este o funcţională ce determină analitic distribuţia normală standard după o relaţie empirică:

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

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

Coeficienţii polinomului de aproximare, de gradul VI, sunt determinaţi cu funcţia MATLAB polyfit():

»p = polyfit(x,y,6)

222

MATLAB în ingineria mecanică

» 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

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:

223

MATLAB în ingineria mecanică

»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 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 ( ). Valorile interpolate sunt afişate în mod curent, pentru cele două axe, dacă

224

MATLAB în ingineria mecanică

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:

225

MATLAB în ingineria mecanică

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.

CAPITOLUL VII

226

MATLAB în ingineria mecanică

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 7Matricea trafic, a

observaţiilor zilnice, poate fi

Ora înregistrării

Pct. A Pct. B Pct. C

01 h 00 min 11 11 902 h 00 min 7 13 1103 h 00 min 14 17 2004 h 00 min 11 13 905 h 00 min 43 51 6906 h 00 min 38 46 7607 h 00 min 61 132 18608 h 00 min 75 135 18009 h 00 min 38 88 11510 h 00 min 28 36 5511 h 00 min 12 12 1412 h 00 min 18 27 3013 h 00 min 18 19 2914 h 00 min 17 15 1815 h 00 min 19 36 4816 h 00 min 32 47 1017 h 00 min 42 65 9218 h 00 min 57 66 15119 h 00 min 44 55 9020 h 00 min 114 145 25721 h 00 min 35 58 6822 h 00 min 11 12 1523 h 00 min 13 9 1524 h 00 min 10 9 7

227

MATLAB în ingineria mecanică

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

228

MATLAB în ingineria mecanică

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

229

MATLAB în ingineria mecanică

PROCEDURA DE AJUSTARE

Procedura de ajustare va fi prezentată aici pentru un caz specific: ajustarea datelor cuprinse în doi vectori coloană y şi t. Se presupune că în linia de comandă s-au introdus vectorii y şi t:

» t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]';

1. -se introduce comanda pentru activarea 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;

230

MATLAB în ingineria mecanică

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

231

MATLAB în ingineria mecanică

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:

232

MATLAB în ingineria mecanică

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 =

233

MATLAB în ingineria mecanică

[3.9,5.3,7.2,9.6,12.9,17.1,23.1,31.4,38.6,50.2,62.9,76,92,105.7,122.8,131.7,150.7,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ă ), şi s-au obţinut reprezentările grafice (ale rezultatelor ajustării, respectiv ale reziduurilor), din figură:

Din aceste reprezentări se poate deduce că este dificil a decide care dintre polinoameoferă cele mai bune rezultate pentru aproximare sau ajustare, întrucât diferenţele reziduale sunt nesemnificative, iar, prin comparaţie, ajustarea exponenţială cu un singur termen este evident neacoperitoare, datorită gradului mare de incompatibilitate şi concordanţă cu datele discrete.Setul de date ajustate se poate vizualiza accesând butonul Data..., caseta Data sets, opţiunea View:

Î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ă,

234

MATLAB în ingineria mecanică

invalidând caseta corespunzătoare, această metodă dovedindu-se a fi neconcludentă pentru ajustarea datelor celor doi vectori:

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:

235

MATLAB în ingineria mecanică

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

Î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

236

MATLAB în ingineria mecanică

dată, calculată ca suma pătratelor erorilor în funcţie de mărimea reziduurilor. Acest

parametru este definit prin ecuaţia , în care reprezintă

mărimea reziduului (determinate, şi afişate, în MATLAB, cu opţiunea Residuals din meniul View):

iar yi şi sunt datele aproximate respectiv previzionate. Valorile reziduale se pot

determina dacă se cunoaşte varianţa datelor ( ), cu relaţia , sau se poate

aproxima cu relaţia , dacă nu se cunoaşte varianţa datelor,

în care 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): . 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ă.

237

MATLAB în ingineria mecanică

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

238

MATLAB în ingineria mecanică

prima opţiune salvează ajustarea ca obiect MATLAB

a doua opţiune salvează, într-o structură multidimensională, concordanţa ajustării:

239

MATLAB în ingineria mecanică

cea de-a treia opţiune salvează rezultatele ajustării, oferind informaţii asupra parametrilor numerici ai ajustării

ANALIZA REZULTATELOR AJUSTĂRII

240

MATLAB în ingineria mecanică

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:

Rezultatele extrapolării se pot salva, similar procesului de ajustare propriu-zisă

241

MATLAB în ingineria mecanică

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:

242

MATLAB în ingineria mecanică 243

MATLAB în ingineria mecanică

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

244

MATLAB în ingineria mecanică

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:

245

MATLAB în ingineria mecanică

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.

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

246

MATLAB în ingineria mecanică

î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ţă.

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.

247

MATLAB în ingineria mecanică

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

BIBLIOGRAFIE

248

MATLAB în ingineria mecanică

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

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

249

MATLAB în ingineria mecanică

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

ANEXĂ

250

MATLAB în ingineria mecanică

PROGRAM PENTRU DETERMINAREAPARAMETRILORDE 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 ;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 ;

251

MATLAB în ingineria mecanică

110 170 220 300 470 630 910 1320 ;55 85 120 170 250 390 560 860 ];

%matricea conţinând valorile temperaturiitemp=[ 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; 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;

252

MATLAB în ingineria mecanică

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'};MESAJ5(1)={'S F A R S I T P R O G R A M'};% se construiesc controalele:h,j,l

253

MATLAB în ingineria mecanică

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

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

254

MATLAB în ingineria mecanică

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

255

MATLAB în ingineria mecanică

helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE ! VALORILE AFISATE AU EROAREA DATORATA POZITIONARII POINTERULUI PE GRAFIC !','!! VERIFICARE !!')elseif (r~=1)&(r~=0) disp('!! EROARE!! NU ATI APASAT NICI TASTA "1" SI NICI TASTA "0" ! ACESTA ESTE MOTIVUL PENTRU CARE PRACTIC S-A PIERDUT O ETAPA A PROGRAMULUI !! PENTRU A REVENI APASATI [Ctrl+C] DUPA CARE INTRODUCETI <nume_fisier> IN COMMAND WINDOW !' ) errordlg('NU ATI APASAT NICI TASTA "1" SI NICI TASTA"0"! ACESTA ESTE MOTIVUL PENTRU CARE PRACTIC S-A PIERDUT O ETAPA A PROGRAMULUI !! PENTRU A REVENI APASATI [Ctrl+C] DUPA CARE INTRODUCETI <nume_fisier> IN COMMAND WINDOW ! PENTRU A CONTINUA APASATI ORICE TASTA !','!!! EROARE UTILIZATOR !!!')else

disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') enduicontrol('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 offpause%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')

256

MATLAB în ingineria mecanică

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')enduicontrol('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 !... ')

257

MATLAB în ingineria mecanică

g = waitbar(0,'A S T E P T A T I V A R O G !...');for i=1:1000, % SE REALIZEAZA CALCULE %waitbar(i/1000)endclose(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);

258

MATLAB în ingineria mecanică

m5 = m(33:40);sigma5 = sigma(33:40);k5 = k(33:40);

temp6 = temp(41:48);mar_gr6 = mar_gr(41:48);eps6 = eps(41:48);m6 = m(41:48);sigma6 = sigma(41:48);k6 = k(41:48);

temp7 = temp(49:56);mar_gr7 = mar_gr(49:56);eps7 = eps(49:56);m7 = m(49:56);sigma7 = sigma(49:56);k7 = k(49:56);

temp8 = temp(57:64);mar_gr8 = mar_gr(57:64);eps8 = eps(57:64);m8 = m(57:64);sigma8 = sigma(57:64);k8 = k(57:64);

temp9 = temp(65:72);mar_gr9 = mar_gr(65:72);eps9 = eps(65:72);m9 = m(65:72);sigma9 = sigma(65:72);k9 = k(65:72);

temp10 = temp(73:80);mar_gr10 = mar_gr(73:80);eps10 = eps(73:80);m10 = m(73:80);sigma10 = sigma(73:80);k10 = k(73:80);

temp11 = temp(81:88);mar_gr11 = mar_gr(81:88);

259

MATLAB în ingineria mecanică

eps11 = eps(81:88);m11 = m(81:88);sigma11 = sigma(81:88);k11 = k(81:88);

temp12 = temp(89:96);mar_gr12 = mar_gr(89:96);eps12 = eps(89:96);m12 = m(89:96);sigma12 = sigma(89:96);k12 = k(89:96);

% Cu majuscule se vor nota valorile calculate ale lui 'm' si 'k' prin metoda numerica

conditie = 1;pas = 0.001;eroare = 0.000001;expresie = 0;M = 0;i = 0;

% Bucla de cautare a valorii lui M % pentru care 'expresie' se apropie de zero in limita 'erorii'

while conditie M = M+pas; i = i+1; s11 = sum(eps1.^(2*M));

s21 = sum((eps1.^M).*sigma1.*log(eps1)); s31 = sum((eps1.^M).*sigma1); s41 = sum((eps1.^(2.*M)).*sigma1.*log(eps1)); expresie = s11*s21-s31*s41;

s12 = sum(eps2.^(2*M));s22 = sum((eps2.^M).*sigma2.*log(eps2));

s32 = sum((eps2.^M).*sigma2); s42 = sum((eps2.^(2.*M)).*sigma2.*log(eps2)); expresie = s12*s22-s32*s42;

260

MATLAB în ingineria mecanică

s13 = sum(eps3.^(2*M));s23 = sum((eps3.^M).*sigma3.*log(eps3));

s33 = sum((eps3.^M).*sigma3); s43 = sum((eps3.^(2.*M)).*sigma3.*log(eps3)); expresie = s13*s23-s33*s43; s14 = sum(eps4.^(2*M));

s24 = sum((eps4.^M).*sigma4.*log(eps4)); s34 = sum((eps4.^M).*sigma4); s44 = sum((eps4.^(2.*M)).*sigma4.*log(eps4)); expresie = s14*s24-s34*s44; s15 = sum(eps5.^(2*M));

s25 = sum((eps5.^M).*sigma5.*log(eps5)); s35 = sum((eps5.^M).*sigma5); s45 = sum((eps5.^(2.*M)).*sigma5.*log(eps5)); expresie = s15*s25-s35*s45;

s16 = sum(eps6.^(2*M));s26 = sum((eps6.^M).*sigma6.*log(eps6));

s36 = sum((eps6.^M).*sigma6); s46 = sum((eps6.^(2.*M)).*sigma6.*log(eps6)); expresie = s16*s26-s36*s46;

s17 = sum(eps7.^(2*M));s27 = sum((eps7.^M).*sigma7.*log(eps7));

s37 = sum((eps7.^M).*sigma7); s47 = sum((eps7.^(2.*M)).*sigma7.*log(eps7)); expresie = s17*s27-s37*s47;

s18 = sum(eps8.^(2*M));s28 = sum((eps8.^M).*sigma8.*log(eps8));

s38 = sum((eps8.^M).*sigma8); s48 = sum((eps8.^(2.*M)).*sigma8.*log(eps8)); expresie = s18*s28-s38*s48; s19 = sum(eps9.^(2*M));

s29 = sum((eps9.^M).*sigma9.*log(eps9)); s39 = sum((eps9.^M).*sigma9); s49 = sum((eps9.^(2.*M)).*sigma9.*log(eps9)); expresie = s19*s29-s39*s49;

261

MATLAB în ingineria mecanică

s10 = sum(eps10.^(2*M));

s20 = sum((eps10.^M).*sigma10.*log(eps10)); s30 = sum((eps10.^M).*sigma10); s40 = sum((eps10.^(2.*M)).*sigma10.*log(eps10)); expresie = s10*s20-s30*s40;

s111 = sum(eps11.^(2*M));s211 = sum((eps11.^M).*sigma11.*log(eps11));

s311 = sum((eps11.^M).*sigma11); s411 = sum((eps11.^(2.*M)).*sigma11.*log(eps11)); expresie = s111*s211-s311*s411;

s112 = sum(eps12.^(2*M));s212 = sum((eps12.^M).*sigma12.*log(eps12));

s312 = sum((eps12.^M).*sigma12); s412 = sum((eps12.^(2.*M)).*sigma12.*log(eps12)); xpresie = s112*s212-s312*s412;

if abs(expresie) < eroare conditie = 0 endend 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));

262

MATLAB în ingineria mecanică

sigma_calc6 = K6.*(eps6.^((-1)*M));sigma_calc7 = K7.*(eps7.^((-1)*M));sigma_calc8 = K8.*(eps8.^((-1)*M));sigma_calc9 = K9.*(eps9.^((-1)*M));sigma_calc10 = K10.*(eps10.^((-1)*M));sigma_calc11 = K11.*(eps11.^((-1)*M));sigma_calc12 = K12.*(eps12.^((-1)*M));

% Trasare grafic curba calculata

subplot(1,2,1)plot(eps1,sigma_calc1,'r')grid onset(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')

263

MATLAB în ingineria mecanică

helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left');

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left');

pausehold off

subplot(1,2,2)plot(eps2,sigma_calc2,'b');gridset(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 ! ')

264

MATLAB în ingineria mecanică

disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)')

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

endl=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');pausesubplot(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');

265

MATLAB în ingineria mecanică

disp(blanks(1)')r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');

if r==1;j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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');

266

MATLAB în ingineria mecanică

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

267

MATLAB în ingineria mecanică

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

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

268

MATLAB în ingineria mecanică

helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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)')

269

MATLAB în ingineria mecanică

disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)')

disp([x,y]) disp('Apasati orice tasta pentru a continua')

disp('Apasati [Ctrl + C] pentru a renunta')helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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"');

270

MATLAB în ingineria mecanică

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');pausesubplot(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');

271

MATLAB în ingineria mecanică

disp(blanks(1)')r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');

if r==1;j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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

272

MATLAB în ingineria mecanică

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')enddisp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left');

273

MATLAB în ingineria mecanică

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

274

MATLAB în ingineria mecanică

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

275

MATLAB în ingineria mecanică

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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:')

276

MATLAB în ingineria mecanică

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 experimentalesubplot(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"');

277

MATLAB în ingineria mecanică

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

278

MATLAB în ingineria mecanică

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')enddisp(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');

279

MATLAB în ingineria mecanică

pause

subplot(2,1,1)plot(eps3,sigma3,'b')set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','b')disp(blanks(1)')h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,...'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','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')

280

MATLAB în ingineria mecanică

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

281

MATLAB în ingineria mecanică

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

helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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');

282

MATLAB în ingineria mecanică

disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)')

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

283

MATLAB în ingineria mecanică

disp(blanks(1)')r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');

if r==1;j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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

284

MATLAB în ingineria mecanică

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')enddisp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left');

285

MATLAB în ingineria mecanică

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

286

MATLAB în ingineria mecanică

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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)')

287

MATLAB în ingineria mecanică

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

disp([x,y]) disp('Apasati orice tasta pentru a continua')

disp('Apasati [Ctrl + C] pentru a renunta')helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')

else

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','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"');

288

MATLAB în ingineria mecanică

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

289

MATLAB în ingineria mecanică

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

290

MATLAB în ingineria mecanică

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

291

MATLAB în ingineria mecanică

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

end

disp(blanks(1)')uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,...'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignment','left');

n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,...'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignment','left');

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

292


Recommended