Documente Academic
Documente Profesional
Documente Cultură
INTRODUCERE N MATLAB
MATLAB este un mediu de programare i calcul tehnic ce nsumeaz calculul, vizualizarea i programarea ntr-un mediu compact, unde problemele i soluiile acestora sunt exprimate folosind notaii matematice familiare. Utilizarea acestui mediu este frecvent n domeniile: Matematic i calcule matematice; Dezvoltarea algoritmilor de calcul i programare; Modelare, simulare i prototipare; Analiza, studiul i vizualizarea datelor; Diagrame i reprezentri grafice n inginerie; Dezvoltarea soft-urilor aplicative folosind metode de creare a interfeelor grafice interactive(GUI). MATLAB este un sistem interactiv care folosete, ca element definitoriu, matricea, numele acestuia fiind dat de acronimul format din cuvintele MATrix i LABoratory. MATLAB ofer faciliti multiple prin familiile de aplicaii specifice numite toolbox-uri. Toolbox-urile sunt colecii de funcii MATLAB (fiiere .m) care extind utilizarea mediului MATLAB, la rezolvarea unor clase de probleme specifice. Toolbox-urile sunt utilizate intensiv n domeniile: procesarea sunetelor, sisteme de control, reele neuronale, simulare. Mediul MATLAB se compune din cinci pri principale: Mediul de dezvoltare-un set de faciliti i instrumente matematice (interfee grafice) cu ajutorul crora se pot manevra fiierele i funciile MATLAB. Aceste instrumente includ: desktop-ul MATLAB, Command Window (Fereastra de Comand), un sistem de urmrire a comenzilor precum i browser-e pentru afiarea instruciunilor de Help (ajutor), spaiului de lucru; Biblioteca de funcii MATLAB-un set de funcii i algoritmi de calcul (pornind de la cele mai simple, pentru calculul funciilor trigonometrice, de exemplu, i pn la cele mai complicate, cum ar fi cele pentru calculul transformatei Fourier); Limbajul MATLAB-un limbaj de nivel nalt, bazat pe manevrarea matricilor, cu control asupra declaraiilor, funciilor, structurilor de date, intrrilor/ieirilor i cu faciliti de programare orientat pe obiecte. Manevrarea graficelor - acesta reprezint partea grafic a sistemului MATLAB. Acest sistem include comenzi pentru vizualizarea datelor bi- i tridimensionale, de procesare a imaginilor, animaiilor i reprezentrilor grafice n general;
Interfaa aplicativ MATLAB (API)- este o bibliotec de instrumente i funcii specifice, care permite dezvoltarea programelor n limbaj C i Fortran, limbaje care interacioneaz cu MATLAB. Aceast bibliotec include faciliti pentru utilizarea i apelarea unor rutine i subrutine pentru MATLAB (dynamic linking), folosind MATLAB ca un mediu de calcul ct i pentru citirea / scrierea fiierelor .mat.
NOIUNI ELEMENTARE Programul se lanseaz, n execuie, din mediul Windows, prin selecia pictogramei MATLAB (dublu-clic asupra icon-ului Matlab), sau, din afara mediului Windows (de exemplu, DOS), direct cu o comand de forma: win c:\Matlab\bin\matlab care, acceseaz fiierul executabil matlab.exe ce se gsete n calea C:\MATLAB\BIN din unitatea c:\ ( presupunnd ca c:\ reprezint unitatea de pe hard-ul sistemului de calcul, unde se gsete instalat MATLAB). Se vor prezenta, n continuare, noiuni generale ale mediului de programare MATLAB 5.2, cu referiri la versiunea MATLAB 6.0.0.88 Release 12. FERESTRELE DE LUCRU MATLAB lucreaz cu dou tipuri de ferestre: o fereastr de comenzi (Command Window) i o fereastr pentru reprezentri grafice (Figure). Ambele tipuri de ferestre dispun de meniuri si submeniuri independente, cu observaia ca, n fereastra Figure, se reprezint grafic comanda din Command Window. FEREASTRA DE COMENZI (Command Window) Fereastra de comenzi este prezentat n imaginea alturat. Meniurile din bara superioar sunt accesibile prin tastarea simultan a tastei [Alt] i a literei subliniate (de exemplu pentru accesarea meniului File se tasteaz concomitent [Alt]+F-
adic tasta [Alt] i tasta [F])sau prin clic cu mouse ul asupra comenzii dorite. Fiecare comand din meniul principal furnizeaz un submeniu specific, n cadrul acestuia selecia putndu-se face fie cu mouse-ul, fie cu ajutorul sgeilor prin deplasarea zonei active, fie prin tastarea literei marcate special n fiecare subcomand a respectivului meniu. GESTIONAREA FIIERELOR Selectnd comanda File din meniul principal, prin [Alt] + F, sau prin poziionarea mouse-ului n dreptul cuvntului File, se obine un submeniu ca cel prezentat n figura alturat. Meniul File conine o suma de submeniuri, dintre care prezentm: New provoac deschiderea unui sub-submeniu, care are opiunile: M-file, Figure i Model. Alegerea opiunii M-file va deschide o fereastr de editare a unui fiier, cu extensia .m, n timp ce opiunea Figure deschide o fereastr grafic. Open deschide o fereastr de dialog care permite selectarea i deschiderea unui fiier. Open Selected analizeaz fiierele pentru selectare i deschide pe cel selectat. Run Script- permite rularea unui fiier script care are definit calea (Path) Save Workspace As deschide o fereastr de dialog pentru a salva datele din spaiul de lucru ntr-un fiier, al crui nume trebuie precizat. Set Path - deschide o caset de dialog care permite setarea cii de acces la un anumit fiier de pe hard- disc sau de pe unitile mobile :floppy disc sau CD ROM. Preferences- permite configurarea formatului numeric, alegerea tipului caracterelor, mrimea caracterelor etc.;
Print Setup i Print- Comenzile de tiprire a documentului; Print i Print Setup, apar n acelai meniu de gestionare a fiierelor. Comanda Print permite tiprirea documentului, iar Print Setup configureaz pagina, marginile, tipul de imprimant etc. Exit MATLAB- comanda al crei efect este prsirea aplicaiei. Comanda de prsire a aplicaiei (echivalent opiunii Exit MATLAB din meniul File) poate fi validat i prin apsarea simultan a tastelor [Ctrl]+ Q. EDITAREA PROGRAMELOR Selectnd comanda Edit din meniul principal al Command Window, apare submeniul prezentat n figura alturat. Modul de lucru n acest meniu este intuitiv, identic meniului Edit Windows sau oricrui editor de texte care lucreaz sub Windows: dup selectarea unui text, din mediul MATLAB sau din alt document, acesta se poate prelucra folosind opiunile Cut, Copy i Paste. tergerea sesiunii de lucru se realizez cu comanda Clear Session (efectul acestei comenzi constituindu-se n curirea complet a spaiului de lucru). ALEGEREA OPIUNILOR Selectnd comanda Options din bara de meniuri, se afieaz caseta de submeniuri prezentat n figura alturat. Submeniurile sunt: Numeric Format este un submeniu care permite selectarea unuia dintre formatele de afiare: Short (5 cifre) / Long (15 cifre) / Hex (hexazecimal) / Bank / Plus (+, - i blanc) / Short e (5 cifre + exponeniala) / Long e (15 cifre + exponeniala) / Rational (fracii), precum i a distanelor dintre rndurile succesive: Loose (distanat)/ Compact.
Turn Echo este un comutator (on/off) care permite afiarea liniilor programului MATLAB, n timpul rulrii acestuia. Enable Background Process este un comutator (on/off) care permite rularea programelor MATLAB, n background, n timp ce calculatorul poate efectua i alte operaii. Command Window Font- deschide o fereastr de dialog pentru selectarea fonturilor (tip, mrime i culoare) care se vor utiliza n fereastra de comand curent a sesiunii de lucru MATLAB. Uicontrols Font - permite setarea fonturilor (tip, mrime i culoare) pentru interfee grafice, butoane etc. Editor Preference - selecteaz editorul de texte cu care se vor scrie programele MATLAB, implicit este NOTEPAD.EXE.
SELECTAREA FERESTRELOR CURENTE DE LUCRU Comanda Windows, din bara de meniuri, afieaz submeniul prezentat n figura alturat. Trecerea dintr-o fereastr grafic, sau de comenzi, ntr-o alt fereastr se realizeaz prin selectarea comenzii Window din meniul principal, urmat de selectarea uneia dintre ferestrele grafice deschise (ex: Figure No. 1, Figure No. 2,) sau a celei de comenzi (MATLAB Command Windows). DOCUMENTAIA DE AJUTOR Comanda Help din meniul principal afieaz submeniul prezentat n figura alturat. Submeniurile acestui meniu sunt: Table of Contents. Afieaz o list senzitiv cu toi subdirectorii din corpul principal al MATLAB. La plasarea sgeii mouse-ului pe unul dintre subdirectorii listai, acesta se transform ntr-o mn care permite, prin selectare, afiarea help-ului grupei de funcii respective.
Index furnizeaz o list cu subdirectorii principali ai MATLAB-ului. Selectarea subdirectorului dorit afieaz coninutul acestuia i apoi informaii despre un anumit fiier sau funcie. Help Selected afieaz documentaia Help pentru funcia MATLAB ce a fost selectat cu mouse-ul. About-afieaz versiunea, licena etc. FEREASTRA DE REPREZENTRI GRAFICE N MATLAB (Figure) Fereastra grafic este o form elevat de reprezentare a graficelor. De menionat c pot exista mai multe ferestre grafice deschise n acelai timp, una fiind curent, dar o singur fereastr de comenzi. GESTIONAREA FERESTRELOR GRAFICE Din meniul File- submeniul New- opiunea Figure se deschide o fereastr, cu titlul Figure 1, avnd o configuraie apropiat de cea a Command Window, cu bar de meniuri : File, Edit, Windows, Help, ale cror opiuni sunt similare celor ale ferestrei de comenzi.
EDITAREA GRAFICELOR Selectnd meniul Edit din bara de meniuri a ferestrei grafice, sunt posibile cteva opiuni pentru modificarea reprezentrilor grafice: Copy- copiaz figura n Clipboard; Copy Options- copiaz figura curent n format meta sau bitmap(vezi formatele fiierelor grafice n Windows), existnd i posibilitatea alegerii
unei culori pentru fundalul (background) figurii (inversarea ntre alb i negru; implicit este negru); Clear Figure terge figura curent, fr s nchid fereastra grafic. TIPURI DE DATE UTILIZATE N MATLAB
DATE single EXEMPLU 3*10^38 DESCRIERE Reele numerice cu simpl precizie. Simpla precizie necesit spaiu de stocare mai mic dect dubla precizie. Acest tip de date nu poate fi utilizat n operaii matematice Reele numerice cu dubl precizie. Este cel mai util;izat tip de variabile n MATLAB. Matrice compact bi-dimensional cu dubl precizie. Matricile compacte stocheaz doar elementele nenule, necesitnd mai puin memorie. Reele de ntregi cu i fr semn cu lungimea de 8, 16, 32 de bii. Permit manevrarea cantitilor ntregi ntr-un mod eficient. Aceste date nu pot fi utilizate n operaii matematice. Reea de caractere(fiecare caracter are 16 bii). Aceste reele sunt numite, n general, iruri de caractere. Reea celular. Elementele celulelor pot conine alte reele.Celulele pot colecta date i informaii de factur i mrime diferit. Reea structural. Reelele structurii se numesc cmpuri.Cmpurile pot conine alte reele. Ca i celulele, structurile pot colecta date i informaii de factur i mrime diferit. Classa MATLAB. Aceast classa este creat de utilizator, folosind funcii MATLAB. Classa Java. Se pot utiliza appleturi Java deja existente sau se pot crea appleturi proprii. Manipulator al funciei MATLAB.
double sparse int8, uint8, int16, uint16, int32, uint32 char cell structure
Pachet de programe {25 Pachet eye(2)} A.ziua=12; A.culoare=rou; A.matrice=magic(3) ; inline(sin(x)) java.awt.Frame @humps
FORMATUL NUMERELOR. OPERATORI I EXPRESII ARITMETICE MATLAB utilizeaz, ca orice limbaj de programare, expresii matematice, dar, spre deosebire de majoritatea limbajelor de programare, aceste expresii, n MATLAB, sunt matrici. Expresiile MATLAB sunt de urmtoarele tipuri: Variabile Numere Operatori Funcii
10
VARIABILE Pentru variabile, MATLAB nu solicit un, anume, tip de declarare a acestora, nici o configurare dimensional. n MATLAB, variabilele se creeaz automat prin declararea numelui acesteia, fiindu-i alocat un spaiu de stocare corespunztor. De exemplu, prin atribuirea: fun=123; variabila cu numele fun are valoarea 123. Aceast valoare va fi utilizat de MATLAB, pe tot parcursul sesiunii de lucru, dac aceasta nu este schimbat printro nou atribuire. Dac, o nou variabil, cu acelai nume, este declarat, n linia de comand, sau ntr-un fiier-program, atunci vechea valoare este nlocuit cu noua valoare. Variabilele sunt matrici. De exemplu, fun, reprezint o matrice cu o linie i o coloan. Numele variabilei trebuie sa nceap, obligatoriu cu o liter, urmat de oricte litere sau numere, dar MATLAB reine doar primele 31 de caractere. ntruct, MATLAB este case sensitive, acesta face distincie ntre literele majuscule i literele minuscule. De exemplu, variabila fun, este diferit de oricare dintre variabilele Fun, fUn, fuN, FUn, FuN, fUN sau FUN. Expresiile introduse de la tastatur, de ctre utilizator, sunt interpretate i evaluate secvenial, la accesarea tastei [Enter]. Expresiile pot fi: iruri de caractere (care reprezint, de cele mai multe ori, numele unui fiier script sau al unui fiier funcie), instruciuni, funcii dedicate (specifice limbajului MATLAB). Instruciunile MATLAB sunt, de cele mai multe ori, de forma general: variabila=expresie [Enter] Atenie: simbolul , nu trebuie introdus de ctre utilizator, simbolul este afisat automat de MATLAB, n Command Window, acesta fiind prompterul din fereastra de lucru, Workspace. n forma general, a instruciunii: variabila - reprezint numele expresiei, si poate fi o niruire de caractere alfa-numerice, exceptnd caracterele speciale (^,&,*,(,),+,/ etc.) cu condiia ca primul caracter sa nu fie o cifr; = reprezint semnul de atribuire (egalitatea dintre dou expresii se reprezint, n MATLAB, cu semnul egal dublu : = = ); expresie reprezint instruciunea propriu- zis, adic aceea care urmeaz a fi evaluat, dup accesarea tastei [Enter]. Valoarea expresiei va fi atribuit automat variabilei , aceasta poate fi folosit n expresii i funcii, fiind memorat de MATLAB. De asemenea, instruciunile pot avea i urmtoarea form, simplificat: expresie [Enter]
11
ceea ce permite execuia imediat a expresiei, la accesarea tastei [Enter], MATLAB atribuind, automat, numele ans valorii acestei expresii , ca n exemplul urmtor: 1/4 [Enter] returneaz rezultatul: ans = 0.2500 Atenie MATLAB recunoate sistemul britanic de scriere a numerelor ( fraciile zecimale se exprim folosind ca separator caracterul punct . i nu caracterul virgul ,, ca n sistemul european, continental) ! Expresiile sunt compuse din operatori sau caractere speciale, din funcii i cifre, respectiv expresii logice. Orice instruciune, scris n cmpul de lucru, este n mod normal ncheiat cu accesarea tastei [Enter]. Dac ultimul caracter, al instruciunii, este caracterul punct-virgul ; , atunci instruciunea este executat, valoarea acesteia este stocat n memoria MATLAB, dar afiarea rezultatului este suprimat (excepie cazul n care instruciunea genereaz o eroare). Utilizarea acestui caracter la sfritul unei instruciuni n fiiere- .m este necesar n situaiile n care nu se dorete afiarea datelor intermediare. De exemplu, matricea 1 2 3 A = 4 5 6 , se introduce de la tastatur folosind urmtoarea convenie de 7 8 9 scriere:
A=[1 2 3; 4 5 6; 7 8 9]
Accesarea tastei [Enter], va avea ca rezultat afiarea matricei A:
A= 1 4 7
2 5 8
3 6 9
Dac, aceeai matrice se introduce, folosind caracterul punct i virgul ; , rezultatul nu va fi afiat. Tastarea numelui unei variabile urmat de Enter afieaz valoarea acesteia, dac aceasta a fost, n prealabil, executat sau introdus de la tastatur. De exemplu, daca matricea A a fost introdus in spaiul de lucru MATLAB, i este dorit afiarea ei, pentru aceasta este nevoie doar de introducerea numelui acesteia (adic A):
12
A [Enter] A= 1 4 7 2 5 8 3 6 9
Dac expresia, ce urmeaz a fi evaluat, este supra-dimensionat, i nu ncape pe o singur linie, se utilizeaz semnul (trei puncte), urmat de [Enter], pentru a preciza c instruciunea continu pe linia urmtoare. Astfel instruciunea:
S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+ 19+20;
evalueaz suma celor 20 de numere i valoarea acesteia este atribuit variabilei S. Spaiile dintre semnele =, +, - i numere sunt opionale, dar caracterul , este obligatoriu a fi introdus, ntotdeauna, dup un operator, dup o virgul sau dup o parantez, altfel se afieaz un mesaj de eroare. De exemplu, dac ntr-o instruciune simpl, caracterul ( trei puncte) se introduce, nu imediat dup operatori, caractere separatoare, paranteze (ca mai jos):
S=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18
atunci se afieaz un mesaj de eroare :
13
NUMERE
Formatul numerelor utilizabile n MATLAB este cel convenional cu punct 6 = 0,1714 , va fi recunoszecimal (scrierea britanic). Astfel, fracia zecimal 35 cut ca atare, n expresiile MATLAB, dac aceasta este scris:
0.1714
Formatul numerelor se declar n linia de comand, sau din meniul FilePreferencesCommand WindowNumeric format. Declararea formatului numerelor n linia de comand, din fereastra de lucru, se realizeaz folosind comanda format urmat de tipul formatului numerelor (conform tabelului):
FORMATUL NUMERELOR short short e short g long long e long g bank rat + hex COMANDA format short format short e format short g format long format long e format long g format bank format rat format + format hex DESCRIEREA FORMATULUI -formatul scurt cu 5 cifre semnificative, cu aproximare la ultima cifr zecimal -formatul scurt n 5 cifre semnificative, aproximat prin adaos sau lips -formatul scurt cu 5 cifre semnificative, cu cea mai bun aproximare -formatul lung cu 15 cifre semnificative -formatul lung cu 15 cifre semnificative aproximat prin adaos sau lips -formatul lung cu 15 cifre semnificative, cu cea mai bun aproximare -formatul cu dou cifre zecimale semnificative, aproximat prin adaos, sau prin lips -formatul raional (raport) -afieaz semnul numrului -formatul hexazecimal
, n
care = 1.77245385090552 , poate fi afiat n diferite formate. Pentru aceasta, se va introduce, n linia de comand, mai nti, vectorul a:
14
a=[5/3,1.23456789012345678901,sqrt(pi)];
apoi, se introduc instruciunile pentru schimbarea afirii numerelor (Atenie! Dup fiecare instruciune de schimbare a formatului, se introduce, n linia de comand, fnumele variabilei care se dorete a fi afiat, n formatul respectiv):
1.7725
1.7725
format long g a= 1.66666666666667 format bank a= 1.67 1.23 format rat a= 5/3 100/81 format + a= +++
1.23456789012346
1.77245385090552
1.77
296/167
15
O mare atenie trebuie acordat scrierii fraciilor zecimale. Dac aceeai fracie zecimal este scris n linia de comand cu caracterul virgul (,), atunci se va afia un rezultat dublu. De exemplu, dac se introduce numarul 0,1714, i se dorete afiarea acestuia n format scurt, se vor folosi urmtoarele instruciuni:
format short 0.1714 ans = 0.1714 n timp ce, dac, acelai numr, se introduce n scriere est-european (cu caracterul virgul, pentru separarea fraciei zecimale), se vor afia dou rspunsuri: 0,1714 ans = 0 ans = 1714
De observat c sunt afiate dou variabile, cu acelai nume, ans, dar cu valori diferite. n acest caz MATLAB va utiliza n evaluri, ulterioare acestei secvene, ultima valoare a variabilei ans (adic 1714). Numerele complexe, scrise n forma algebric, sunt acceptate de MATLAB, dac se folosete simbolul i sau j, pentru valoarea 1 . Astfel, 2 numerele complexe: a = 2i , b = 2 j , c = 3 + i 7 , d = 3 + i , e = 3 + i 2 , se pot 3 introduce, de la tastatur, astfel:
16
b= 0 + 2.0000i c=3+sqrt(7)*i c= 3.0000 + 2.6458i d=3+2/3i d= 3.0000 - 0.6667i e=3+sqrt(2)*i e= 3.0000 + 1.4142i e=3+2^(1/2)*i e= 3.0000 + 1.4142i
Dac numerele complexe necesit folosirea funciilor speciale (de exemplu pentru calculul rdcinii ptrate a numrului x, se folosete, uneori, funcia specific MATLAB: x =sqrt(x), n timp ce, pentru calculul radicalului de ordinul trei se poate folosi calculul cu puteri raionale: 3 3 =3^(1/3)) sau a parantezelor, pentru scrierea acestora, atunci este necesar folosirea operatorului aritmetic de nmulire (*), pentru evidenierea prii imaginare a numrului complex, n caz contrar, va fi afiat un mesaj de eroare. De exemplu, numerele c = 3 + i 7 , e = 3 + i 2 , f = 1 + ( 2 + 3 )i scrise fr operatorul *, afieaz urmtoarele mesaje de eroare:
c=3+sqrt(7)i ??? a=3+sqrt(7)i | Error: Missing operator, comma, or semicolon. Eroare:Lipsete operatorul, virgula, sau paranteza dreapt e=3+2^(1/2)i ??? a=3+2^(1/2)i | Error: Missing operator, comma, or semicolon.
17
Numrul 3 + 2 este un numr complex, pentru care MATLAB afieaz valoarea explicit: -3.0000 + 1.4142i Numerele utilizate n MATLAB trebuie sa fie cuprinse ntre 10 308 i 10 308 .
OPERATORI ARITMETICI
MATLAB utilizeaz urmtorii operatori aritmetici: + adunarea scderea * nmulirea / mprirea la dreapta \ mprirea la stnga ^ ridicarea la putere transpunerea () specificarea ordinii evalurii expresiilor Exist dou simboluri pentru mprire, utilizate n mod special pentru operaiile cu matrici. Pentru expresiile scalare 1/4 i 4\1 se obine acelai rezultat (0.25). ntr-o expresie, parantezele sunt utilizate pentru a preciza ordinea executrii operaiilor.
FUNCII
n MATLAB sunt predefinite funciile matematice elementare standard. O list complet a funciilor matematice elementare se afieaz folosind comanda help elfun, help specfun, respectiv help elmat, n linia de comand. Acestea sunt: Funcii trigonometrice sin sinh asin asinh cos cosh - sinus - sinus hiperbolic - inversa sinusului (arcsin) - inversa sinusului hiperbolic - cosinus - cosinus hiperbolic
18
acos acosh tan tanh atan atan2 atanh sec sech asec asech csc csch acsc acsch cot coth acot acoth
- inversa cosinusului - inversa cosinusului hiperbolic - tangenta - tangenta hiperbolic - arctangenta - arctangenta n cadranul patru - arctangenta hiperbolic - secanta - secanta hiperbolic -arcsecanta - arcsecanta hiperbolic - cosecanta - cosecanta hiperbolic - arccosecanta - arccosecanta hiperbolic - cotangenta - cotangenta hiperbolic - arccotangent - arccotangenta hiperbolic
Funcii exponeniale exp log log10 log2 pow2 sqrt nextpow2 - exponeniala simpl ( e x ) - logaritmul natural ( ln x ) - logaritmul n baza zece ( lg x ) - logaritmul n baza doi ( log 2 x ) - puterile lui 2 ( 2 x ) - radical de ordin 2 (
x )
Funcii complexe abs angle complex conj imag real - valoarea absolut ( x ) - unghiul de faz ( z = R e i ) - creeaz numrul complex din partea real i imaginar, date - conjugatul numrului complex - partea imaginar a numrului complex - partea real a numrului complex
19
Aproximri i resturi fix floor ceil round mod rem sign - aproximare prin lips - aproximare spre cel mai mic ntreg - aproximare spre ntregul mai mare sau egal - aproximare spre cel mai apropiat ntreg - rest modulo - restul mpririi - signum
Funcii matematice speciale besselj bessely besselh besseli besselk beta - f. Bessel de ordinul I ( x 2
d2y
2
dx - funcia Bessel de ordinul II - funcia Bessel de ordinul III (funcia Hankel) - funcia Bessel de ordinul I, modificat - funcia Bessel de ordinul II, modificat
- funcia Beta complet ( B( z , w ) =
+ x
dy (x 2 + 2 ) y = 0 dx
t 0
z 1
(1 t ) w 1 dt )
(1 m sin 2 ) ) 0
[(1 t
0 1 2
ellipke
)(1 mt 2 )]
1 2
dt )
erf
e
0
t2
dt )
20
- funcia eroare complementar ( erfc( x ) = - funcia eroare invers - funcia integral exponenial (
e
0
t 2
dt )
e t dt ) t
gamma
cross dot
Funcii specifice teoriei numerelor factor isprime primes gcd lcm rat - descompunerea n factori primi - valoarea de adevr, pentru numere prime - genereaz lista numerelor prime, mai mici sau egale cu nr. dat - cel mai mare divizor comun - cel mai mic multiplu comun n 1 - descompunere raional ( = d 1 + ) 1 d d2 + 1 d3 + K + dk - aproximarea raional cu afiarea rezultatului n format raional - afieaz toate permutrile posibile n! - combinri de n luate cte k C k = n (n k )!n! - factorial (n!)
21
Caracteristici elementare ale matricilor size length ndims disp isempty isequal isnumeric islogical logical - dimensiunea matricei - lungimea vectorului - numrul de dimensiuni ale structurii - afieaz o matrice sau un text - valoarea de adevr pentru matricea goal - valoarea de adevr pentru matrici egale - valoarea de adevr pentru matrici numerice - valoarea de adevr pentru matrici logice - convertete valori numerice n valori logice
Operaiuni cu matrici reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find end sub2ind - schimb dimensiunea matricei - matrici diagonale i diagonala matricilor - creeaz o matrice diagonal cu elementele date - extrage matricea diagonal inferioar - extrage matricea diagonal superioar - inverseaz ordinea coloanelor, de la stnga la dreapta - inverseaz liniile - inverseaz liniile sau coloanele dup dimensiunea cerut - rotete matricea cu multiplu de 90o - afieaz indicele poziiei elementelor diferite de zero - ultimul index valabil - transform indicii multipli n indici singulari
22
Matrici speciale compan gallery hadamard hankel hilb invhilb magic pascal toeplitz vander wilkinson - matricea companion - testarea tipului matricei - matricea Hadamard - matricea Hankel - matricea Hilbert - matricea invers Hilbert - matricea magic ptratic - matricea Pascal - matricea Toeplitz - matricea Vandermonde - testarea matricei Wilkinson
23
elementele acestora putnd fi identificate cu un singur indice. O matrice cu o singur linie i o singur coloan este un scalar. Pentru a face referire la un element A(i,j), (adic elementul aflat la intersecia liniei i cu coloana j ) al unei matrici A, sunt necesari doi indici, indicele de linie i indicele de coloan, n aceast ordine. Referirea la un element al unui vector poate fi fcut numai cu un singur indice. Astfel, dac se introduce de la tastatur, la promptul MATLAB, (promptul are simbolul grafic ) matricile A, B, C, D i E:
A=[1,2;3,4];B=[0,1,5;2,7,9];C=[1,2,3];D=[sqrt(2),0,pi,1;3,2,1, 5;5,7,9,7];E=[1,3,5,7]
De exemplu, elementul de pe poziia (2,1), al matricei A, poate fi apelat cu comanda:
B(1,3) [Enter] ans = 5; D(3,4) [Enter] ans = 7; E(4) [Enter] ans = 7 DEFINIREA MATRICILOR SIMPLE
Definirea matricilor se face prin una dintre urmtoarele metode: 1. introducerea explicit a listei de elementelor; 2. generarea prin instruciuni i funcii; 3. crearea fiierelor .m; 4. ncrcare din fiiere de date externe.
24
a) elementele matricei sunt cuprinse ntre paranteze drepte [ ] b) elementele unei linii trebuie separate prin spaii libere (blanc-uri ) sau virgule; c) liniile se separ prin semnul punct-virgul ; ;
A = [1,2;3,4] A= 1 2 3 4
Matricea A, astfel definit, poate fi utilizat n calcule sau poate fi salvat ntr-un fiier de date pentru o folosire ulterioar (tipul fisierelor de date este .mat). Pentru matricile mari, la care datele de intrare nu ncap pe o singur linie, se poate proceda la nlocuirea semnului ; cu o apsare a tastei [Enter], ca n exemplul urmtor:
25
A= 1 3 5
2 4 6
Un alt mod de definire a unei matrici const n apelarea numelui unui fiier de date aflat n memoria sistemului de calcul. Acest fiier trebuie s fi fost salvat, n prealabil, pe hard-disc, n format ASCII (text), organizat ca o matrice rectangular (complet) i trebuie s aib extensia .m . Astfel, de exemplu, dac pe hard-disc se gsete un fiier cu numele matricea_A.m care conine urmtoarele linii de text:
instruciunea care citete fiierul (i genereaz matricea A) este: matricea_A ceea ce va avea ca rezultat afiarea matricei A: A= 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 Afiarea matricei coninut n fiierul matricea_A.mat, este posibil, la tastarea numelui acestui fiier, numai n cazul n care acest fiier este salvat n directorul curent. Posibilitatea de a importa date din alte programe va fi abordat n seciuni ulterioare.
26
E=1:4 [Enter] E= 1 2 3 4
iar cu secvena urmtoare se obine matricea F:
0.4000 0.5000
Matricile predefinite, prin funcii MATLAB, sunt: A). Matricea unitate eye(n), eye(n,m) Prin secvana urmtoare se genereaz matricile unitate avnd elementele diagonalei principale 1 (Atenie! Pentru afiarea matricilor I2, I3 respectiv I34, este necesar introducerea numelui acesteia, la prompterul MATLAB, ntruct definirea acestora se ncheie cu caracterul ; care blocheaz afiarea!):
I2=eye(2);I3=eye(3);I34=eye(3,4); [Enter] I2 = 1 0 I3 = 1 0 0 0 1 0 1 0 0 0 1
27
0 0 1
0 0 0
B). Matricea identic : ones(n), ones(m,n) Matricea identic are toate elementele egale cu cifra 1:
Y2 = 1 1 1 1 Y34 = 1 1 1 1 1 1 1 1 1 1 1 1
C). Matricea zero : zeros(n), zeros(n,m) Matricea zero are toate elementele egale cu 0 (nu este matricea nul):
Z3=zeros(3) Z3 = 0 0 0 0 0 0 0 0 0
D). Matricea vid: [ ] Matricea vid este o matrice cu, cel puin, una dintre dimensiuni egal cu zero, deci fr elemente definite, dar matricea exist ca structur matematic:
A=[]
28
E). Matricea aleatoare: rand(n), rand(n,m), rand(n,m,p) Funcia rand() genereaz matrici ale cror elemente sunt numere uniform distribuite n intervalul de valori (0,1) . Cu secvena urmtoare se genereaz matricile arbitrare B3 (cu dimensiunea 3x3), B34(cu dimensiunea 3x4) i B345(cu dimensiunea 3x4 n 5 variante, disponibil numai n versiunile MATLAB superioare versiunii 5.3 ):
B3=rand(3);B34=rand(3,4);B345=rand(3,4,5);
fiind obinute rezultatele: B3 = 0.4514 0.3127 0.0439 0.0129 0.0272 0.3840
B34 = 0.6124 0.0164 0.0576 0.7176 0.6085 0.1901 0.3676 0.6927 0.0158 0.5869 0.6315 0.0841 B345(:,:,1) = 0.4544 0.1536 0.7275 0.1210 0.4418 0.6756 0.4784 0.4508 0.3533 0.6992 0.5548 0.7159 B345(:,:,2) = 0.8928 0.8656 0.9084 0.0498 0.2731 0.2324 0.2319 0.0784 0.2548 0.8049 0.2393 0.6408 B345(:,:,3) = 0.1909 0.1708 0.3400 0.3932 0.8439 0.9943 0.3142 0.5915 0.1739 0.4398 0.3651 0.1197 B345(:,:,4) = 0.0381 0.9342 0.8729 0.9669 0.4586 0.2644 0.2379 0.6649 0.8699 0.1603 0.6458 0.8704
29
F). Matricea dispersiilor:sparse (A), sparse(i,j,s,m,n) Funcia sparse() genereaz o matrice dispersat n raport cu argumentul. 1 0 3 9 4 Astfel, dac se d matricea C = , atunci funcia sparse (C), 0,6 0 0 9 8 genereaz matricea: C=[1,0,3,9,4;0.6,0,0,9,8]; sparse (C) ans = (1,1) 1.0000 (2,1) 0.6000 (1,3) 3.0000 (1,4) 9.0000 (2,4) 9.0000 (1,5) 4.0000 (2,5) -8.0000 adic, sunt reinute doar elementele diferite de valoarea zero din matricea C de la argumentul funciei sparse. Aceast funcie este util pentru stocarea n memoria calculatorului a matricilor cu m linii i n coloane, unde m i n sunt valori mari. G). Matricea Hadamard Aceast matrice se genereaz cu funcia sinonim hadamard(n) cu condiia ca n, n/12 i n/20 s fie puteri ale lui 2. Matricea Hadamard are elementele 1 i -1 iar coloanele sunt ortogonale. Utilitatea acestei matrici se regsete n combinatoric, procesarea semnalelor i analiz numeric. Cu secvena urmtoare se obin matricea Hadamard de ordinul 4:
H4=hadamard(4) H4 = 1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1
30
H). Matricea Hilbert Matricea Hilbert este un exemplu notabil de matrice slab condiionat. Elementele matricei Hilbert sunt de forma H(i, j) = 1/(i+j-1), i se genereaz cu funcia MATLAB hilb(n). De exemplu: H3=hilb(3) H3 = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 I). Matricea magic ptratic Matricea magic ptratic este generat cu funcia MATLAB magic(n) i este construit din ntregii cuprini ntre 1 i n2 cu condiia ca suma elementelor de pe orice rnd s fie egal cu suma elementelor de pe oricare coloan respectiv cu suma elementelor de pe diagonala principal, iar n trebuie s fie un scalar mai mare sau egal cu 3: M3=magic(3) [Enter] M3 = 8 1 6 3 5 7 4 9 2 Pentru verificarea condiiei de egalitate ntre suma elementelor pe linie cu suma elementelor pe coloan, respectiv cu suma elementelor pe diagonal, se realizeaz suma corespunztoare, folosind o funcie Matlab (sum() )
suma_elementelor_pe_linie=sum(M3) [Enter] suma_elementelor_pe_linie = 15 15 15 suma_elementelor_pe_coloana= sum(M3') [Enter] suma_elementelor_pe_coloana = 15 15 15 suma_elementelor_pe_diagonala= sum(diag(M3)) [Enter] suma_elementelor_pe_diagonala = 15
31
34
Pentru afiarea matricilor M3 respectiv M4, se tasteaz numele acesteia. J). Matricea Pascal Matricea Pascal se genereaz cu funcia MATLAB, specific, pascal(n), este o matrice de ordinul n, pozitiv definita, simetric, cu elemntele, numere ntregi, preluate din Triunghiul lui Pascal (format din coeficienii binomiali), iar inversa acestei matrici este o matrice cu elementele numere ntregi:
P2=pascal(2);P3=pascal(3);P4=pascal(4);P5=pascal(5); P2 = 1 1 P3 = 1 1 1 1 2 3 1 3 6 1 2
32
P4 = 1 1 1 1 P5 = 1 1 1 1 1 1 1 1 1 2 3 4 5 3 6 10 15 4 10 20 35 5 15 35 70 1 1 1 2 3 4 3 6 10 4 10 20
K). Matricea Wilkinson Cu funcia MATLAB wilkinson(n) se genereaz matricea sinonim, care este o matrice ptratic de ordinul n cu valori proprii, de test, simetric, tridiagonal, cu perechi de valori ntregi apropiate dar nu exact egale. Cea mai utilizat este matricea Wilkinson de ordinul 21. Pentru a se observa cum se construiete matricea Wilkinson se prezint, mai jos, matricele corespunztoare, de ordinul 2, 3, 4, 5, 6: doi=wilkinson(2) doi = 0.5000 1.0000 1.0000 0.5000
0 0 1 1.5
33
0 0 1 1 1
0 0 0 1 2
0 1 0.5 1 0 0
0 0 1 0.5 1 0
0 0 0 1 1.5 1
0 0 0 0 1 2.5
Acest fiier se salveaz (din meniul File Save As ) cu numele matricea_A, acestuia fiindu-i atribuit, implicit, extensia .m
34
Dac se dorete apelarea fiierului (pentru a fi utilizat n alte fiiere, sau n Workspace), n linia de comand MATLAB, se tasteaz numele fiierului, matricea_A, rezultatul fiind afiarea matricei A: matricea_A A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Accesnd butonul Next, iar, dup validarea operaiei, Finish, n spaiul de lucru, poate fi, oricnd, afiat i utilizat matricea salvat n acest fiier. Comanda load citete fiierele binare coninnd matrici generate n sesiuni de lucru anterioare. Aceeai comand citete fiiere- text coninnd date numerice. Fiierul
35
text trebuie sa fie organizat ca tabel bi-dimensional (linii i coloane), separate prin spaii libere (blancuri), cu un rnd pe fiecare linie i numr egal de elemente n fiecare rnd (tabelul trebuie sa aib acelasi numr de coloane pe fiecare linie). De exemplu, dac, intr-un editor de text (acest editor poate fi extern MATLAB-ului), se creeaz fiierul text coninnd urmtoarele patru linii de text:
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
i se salveaz fiierul cu numele, matrice, de exemplu, atunci, acest fiier poate fi apelat folosind urmtoarea succesiune de operaiuni, n Workspace (acest fiier poate fi apelat i de alte fiiere sau funcii MATLAB). De exemplu, presupunnd c n calcule este necesar ca datele cuprinse n fiierul matrice.dat, stocat n memoria calculatorului, i aceste date s fie identificate cu numele B, atunci se procedeaz astfel:
2 13 11 8 7 12 14 1
ELEMENTELE MATRICILOR
Elementele matricilor pot fi numere reale sau complexe, sau orice alt expresie MATLAB. De exemplu, pentru introducerea matricei 4 x = 1,3 3 (1 + 2 + 3) se folosete scrierea: 5
[Enter]
36
Obs. De remarcat faptul c pentru numrul raional -1,3 s-a folosit formatul britanic: s-a folosit caracterul . pentru separarea prii ntregi de partea fracionar a numrului. De asemenea, sqrt(3), pentru numrul 3 , elementul x(3) fiind afiat cu valoarea calculat pentru expresia de mai sus,iar pentru separarea elementelor unei linii s-a folosit caracterul virgul (,). Elementele unei matrici pot fi referite (se pot apela, sau se poate edita) cu indici cuprini ntre paranteze rotunde ( ) , cifrele reprezentnd identificatorii de linie, respectiv de coloan ai elementului apelat. De exemplu, cu instruciunea urmtoare, se cere afiarea elementului al doilea al vectorului x:
[Enter]
1.7321
4.8000
1.3000
(adic, elementul al 5-lea al vectorului x este egal cu valoarea absolut a elementului de pe poziia 1 a vectorului x), ceea ce returneaz rezultatul: Obs:De remarcat c se atribuie o valoare unui element care ocup o poziie n afara dimensiunii maxime a matricei sau vectorului referit, iar elementele nedefinite sunt setate la valoarea zero. Deci, ca regul, se poate deduce c n cazul n care pe o anumit poziie, ntr-o matrice, nu exist un element i se definete, folosind o regul oarecare, un element de pe o poziie urmtoare, elementul care lipsete se nlocuiete automat de ctre MATLAB, cu valoarea 0 (zero).In acest sens, instruciunea urmtoare adaug un element pe poziia (2,4), i completeaz cu zerouri acolo unde nu sunt definite alte valori, pentru matricea A:
A=[1,2;3,4];A(2,4) = 6
[Enter]
37
1 2 este definit, de 3 4
acum nainte, ca fiind numrul ntreg 6,(Atenie! Nu trebuie nlocuite elementele care lipsesc: A13 , A14, A23, acest lucru este realizat automat de ctre mediul MATLAB )). O modalitate de a construi matrici mari const n folosirea matricilor mici ca elemente, i concatenarea (legarea) acestora. Spre exemplu, din dou matrici 2x3 se poate construi o matrice 4x3; dimensiunile matricilor utilizate trebuind s fie astfel alese nct s se realizeze tablouri rectangulare complete. Fie A1 i A2 cele dou matrici utilizate. Cu secvena urmtoare:
A= 1 3 5 7 2 4 6 8
O matrice cu dimensiuni reduse poate fi extras din matrici mai mari utiliznd semnul : (dou puncte). De exemplu:
B=A(2,3, :) [Enter]
extrage liniile doi i trei (2:3) i toate coloanele din matricea curent A, obinndu-se matricea B:
B= 3 5 4 6
n acest exemplu, caracterul dou puncte ( : ), folosit n instruciunea B=A(2:3, :), are urmtoarea semnificaie:se extrag elementele aflate la intersecia liniilor 2, 3 cu toate coloanele matricei A.
38
CONCATENAREA MATRICILOR
Concatenarea (legarea) este procesul de asamblare a matricilor mici, pentru generarea matricilor supra- dimensionate (o matrice, n fapt, este constituit prin concatenarea elementelor proprii). Operatorul de concatenare este perechea de 21 4 8 2 7 9 0 8 , se paranteze drepte, [ ]. De exemplu, fiind dat matricea A = 6 7 8 9 3 5 7 9 poate genera o alt matrice B, prin suplimentarea liniilor i coloanelor matricei A, astfel:
Matricea B va avea dou linii i dou coloane Elementul B(1,1) este matricea A; Elementul B(1,2) este format din elementele matricei A, la care se adun scalarul 32; Elementul B(2,1) este format din elementele matricei A, la care se adun scalarul 48; Elementul B(2,1) este format din elementele matricei A, la care se adun scalarul 16.
Pentru a realiza acest deziderat, n linia de comand (considernd c matricea A este stocat n memorie), se introduce, de la tastatur, urmtoarea secven: A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9]; B = [A, A+32; A+48, A+16]
B=
A+48
21 7 6 3 69 55 54 51
4 9 7 5 52 57 55 53
8 0 8 7 56 48 56 55
2 8 9 9 50 56 57 57
53 39 38 35 37 23 22 19
36 41 39 37 20 25 23 21
40 32 40 39 24 16 24 23
34 40 41 41 18 24 25 25
A+32
A+16
39
Un alt exemplu, asamblarea acelorai matrici, prin aranjarea acestora n coloan : B1 = [A ;A+32; A+48; A+16] B1 = 21 4 8 2 7 9 0 8 A 6 7 8 9 3 5 7 9 53 36 40 34 39 41 32 40 A+32 38 39 40 41 35 37 39 41 69 52 56 50 55 57 48 56 A+48 54 55 56 57 51 53 55 57 37 20 24 18 23 25 16 24 A+16 22 23 24 25 19 21 23 25
A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];x=A; x(:,2)=[]
se obine o nou matrice x :
x= 21 7 6 3
8 0 8 7
2 8 9 9
40
Pentru tergerea unui singur element (de exemplu, tot al treilea element s fie ters, considernd elementele matricei scrise pe coloan) se poate folosi urmtoarea secven:
Se observ c, elementele matricei au fost citite pe coloan, i tot al treilea element, ncepnd cu primul, a fost eliminat, rezultatul fiind un vector linie.
4 9 7 5
8 0 8 7
2 8 9 9
stocat n memoria
calculatorului, atunci cu instruciunea: A=[21,4,8,2;7,9,0,8;6,7,8,9;3,5,7,9];A(6,5)=A(1,2)+A(3,1) [Enter] se obine o alt matrice la care elementul din linia 6, coloana 5: A(6,5), al matricei A, este obinut ca suma dintre elementul de pe linia 1 coloana 2 (A(1,2)) i elementul de pe linia 3, coloana 1 (A(3,1)), celelalte elemente fiind nlocuite cu valoarea zero: A= 21 4 8 2 0 7 9 0 8 0 6 7 8 9 0 3 5 7 9 0 0 0 0 0 0 0 0 0 0 10 Indicii pot fi scalari sau vectori. Indicii vectori permit definirea unor submatrici, procedeu prin care se pot referi pri disparate dintr-o matrice. Spre exemplu, dac se presupune c matricea M6x10 exist deja salvat pe disc,
41
atunci, cu instruciunea urmtoare, se extrage submatricea B cu dimensiunea 5x1, format cu elementele liniilor 1, 2, 3, 4, 5 (notaia 1:5 arat c sunt apelate toate liniile: 1 pn la 5) i coloana a 3-a a matricei M:
B1=M(1:5,3) [Enter] B1 = 3 3 0 -3 3
n timp ce, instruciunea urmtoare, extrage submatricea C, de dimensiunea 5x4, constituit din elementele primelor 5 liniii i ale ultimelor 4 coloane (coloanele 7, 8, 9, 10) ale matricei M:
D1=M(:,3) [Enter]
42
extrage din matricea M, o submatrice D1 cu elementele extrase din matricea M (toate liniile i numai coloana 3) avnd urmtoarea configuraie:
D1 = 3 3 0 -3 3 8
n timp ce, instruciunea:
E1=M(1:5,:) [Enter]
extrage submatricea matricei M: E1 = 1 -1 0 -1 1
UTILIZAREA SIMBOLURILOR
MATLAB, n variantele recente, folosete Symbolic Math Toolbox (grup de instrumente matematice simbolice) pentru crearea variabilelor i obiectelor simbolice. Aceast colecie de instrumente MATLAB, nu trebuie confundat cu facilitatea oferita, tot de MATLAB, pentru utilizarea simbolurilor literale. n calcule inginereti se utilizeaz frecvent, in locul expresiilor numerice, supradimensionate, n general n cazul calculelor numerice cu matrici i de analiz numeric, expresii simbolice. Nucleul computaional este format pe baza kernelului MAPLE, dezvoltat la University of Waterloo, Canada, i la Eidgenssiche Technische Hochschule, Zrich, Elveia. Sunt disponibile dou categorii de toolbox-uri: o colecie de baz, numit Symbolic Math Toolbox, respectiv, o colecie de funcii extinse, numit Extended Symbolic Math Toolbox. Simbolurile matematice se creeaza cu funcia MATLAB sym(), respectiv cu funcia syms. Diferena dintre aceste dou funcii const n faptul c prima
43
creeaz o variabil simbolic, n timp ce, a doua, creaz o mulime finit de variabile, prin declararea acestora, la nceputul sesiunii de lucru. Trebuie fcut o difereniere exact ntre simbolurile literale (ale literelor din alfabetul grecesc, de exemplu) i simbolurile matematice folosite pentru reprezentarea variabilelor n MATLAB. De exemplu, pentru introducerea unui text, de la tastatur, n care intervin simboluri matematice sau caractere greceti, precum i caractere speciale folosite ca simboluri pentru operatori matematici, se folosesc proprietile disponibile n MATLAB, pentru inserarea acestora. n tabelul alturat sunt cuprinse toate simbolurile literale i caracterele speciale, pentru care MATLAB ofer faciliti de inserare n text:
DENUMIREA SIMBOLULUI \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \vartheta \iota \kappa \lambda \mu \nu \xi \pi \rho \sigma \varsigma \tau \nabla \perp \cap \otimes SIMBOL
DENUMIREA SIMBOLULUI \upsilon \phi \chi \psi \omega \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega \forall \exists \ni \cong \copyright \langle \cup \oplus
SIMBOL
DENUMIREA SIMBOLULUI \sim \leq \infty \leftrightarrow \leftarrow \rightarrow \uparrow \downarrow \circ \pm \geq \partial \div \neq \equiv \Im \Re \supset \subset \int \in \rangle \supseteq \oslash
SIMBOL
Introducerea simbolurilor literale, respectiv a caracterelor speciale, n texte sau iruri de caractere este o operaiune distinct a MATLAB, din acest motiv, aceasta va fi tratat ntr-o seciune consacrat acestui subiect. Raiunea
44
pentru care aceste observaii, referitoare la diferena dintre simbolurile matematice, folosite n MATLAB ca orice alt tip de variabil i simbolurile literale, folosite ca iruri de caractere (text) rezid n aceea c se dorete eliminarea unei posibiliti de apariie a confuziilor nedorite, n tratarea calculului simbolic.
Variabilele i expresiile simbolice se definesc cu comanda sym, n linia de comanda a spaiului de lucru MATLAB. Funcia MATLAB sym(x), permite atribuirea, variabilei x, caracterul de simbol. Astfel, cu comanda:
c = sym('variabila_simbolica')
se creaz variabila simbolica c , care va afia, atunci cnd este accesat, expresia variabila_simbolica : c= variabila_simbolica O expresie matematic poate fi reprezentat printr-un simbol alfanumeric, fiind posibil utilizarea acesteia, ulterior, n calcule i expresii numerice complexe. De exemplu, presupunnd c se dorete folosirea repetat a unei expresii matematice, relativ complicat, ca editare, n expresii diferite, atunci se poate folosi urmtorul algoritm: se declar expresia simbolic, dup care aceasta se poate utiliza n calcule i expresii ca o valoare numeric sau simbolic de sine-stttoare. Fie expresia: 12 4 3 12 3 5 3 14 + 5 34 ln 23 8 log 5 125 _ 55 E9 = (1 + 2 + 3) : 8 11 Declararea acesteia ca variabila simbolica se realizeaz cu comanda:
E= (((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)
45
Utilizarea acestei expresii, n calcule, (pentru determinarea valorii expresiei f=E^23*E+log(E), de exemplu), este posibil, folosind urmtoarea secven MATLAB:
46
2. se aplic funcia diff() expresiei simbolice, creat anterior, f: diff(f) ans = 3*a*x^2+2*b*x+c
Difereniala se calculeaza, implicit, n raport cu variabila x, indiferent de ordinea declarrii simbolurilor. Dac, de exemplu, se cere difereniala n raport cu o alt variabil, atunci funcia MATLAB pentru calculul diferenialei se apeleaz cu doi parametri:
diff(f,x,2) ans = 6*a*x+2*b difereniala de ordinul doi n raport cu x diff(f,2) ans = 6*a*x+2*b - difereniala de ordinul doi n raport cu x diff(f,3) ans = 6*a - difereniala de ordinul trei n raport cu x diff(f,a,2) ans = 0- difereniala de ordinul doi n raport cu a
Difereniala matricei se determin n mod similar diferenialelor funciilor simple:
47
Derivatele pariale se determin folosind funcia MATLAB jacobian(), n funcie de variabilele funciilor. Astfel, derivata unei funcii f (u, v ) , n raport cu funciile u( x, y ) , respectiv v( x, y ) , se determin cu urmtoarea secven:
48
1 xa lim e x a +
se procedeaz astfel:
a
k =1
49
simbolic, se folosete funcia MATLAB symsum( a k ,k,ko,kn). De exemplu, pentru calculul sumei
k
k =1
1
2
+k
, se folosete secvena:
(k
n k =0
+ 1 x k i
(x
n k =0
+ y k , se folosete secvena:
funcii F, care s aproximeze funcia f n intervalul [a,b]. Se recurge la aceast aproximare n dou cazuri: 1) cnd nu se cunoate expresia analitic a lui f, dar se cunosc valorile sale ntr-un numr finit de puncte i 2) cnd expresia analitic a lui f este destul de complicat i cu ajutorul acesteia
50
calculele sunt destul de dificile. Pentru evaluarea lui f(x) se caut o alt funcie F(x) relativ simpl astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumit clas de funcii, de exemplu din clasa polinoamelor de grad n sau mai mic, pentru un anume n, atunci trebuie ca F(x) s ia aceeai valoare cu f(x) pentru anumite valori ale lui x. Aceste valori ale lui x sunt adesea referite ca puncte de interpolare. De asemenea se poate cere ca anumite derivate ale lui F(x) s ia acelai valori cu valorile derivatelor corespunztoare ale lui f(x) n anumite puncte de interpolare. Se poate arta c dac F(x) este suma a n+1 termeni ai seriei Taylor pentru f(x) n punctul x=a, atunci F(x) poate fi considerat ca un polinom de interpolare pentru f(x) de grad n sau mai mic, deoarece:
k F((a )) = f k (a ),
k = 0,1,2,..., n
Forma general a dezvoltarii funciei f(x), n serie Taylor, n jurul unui f (n ) (a ) punct x=a este: (x a )n . Funcia MATLAB, pentru calculul primilor n n! n=0
termeni ai dezvoltrii, se utilizeaz funcia taylor(f(x), n, a). De exemplu, pentru determinarea primilor 4 termeni ai dezvoltrii funciei f ( x ) = e x , n jurul punctului x=3, se va folosi urmtoarea secven:
2
51
calcul, comparativ cu alte operaii i calcule matematice. Funcia MATLAB folosit pentru rezolvarea direct a ecuaiilor algebrice, este solve(), n care parametrii de intrare sunt ecuaiile simbolice. Dac ecuaia are forma f(x)=0, atunci funcia MATLAB se apeleaz n forma simpl: solve(f(x)), n timp ce, pentru ecuaii de forma f(x)=g(x), funcia MATLAB se apeleaz cu parametrii de intrare marcai ca iruri de caractere: solve(f(x)=g(x)). n cazul sistemelor de ecuaii, se respect ultima regul de scriere a parametrilor de intrare, ecuaiile fiind considerate iruri de caractere separate prin caracterul virgul: solve(f1(x)=g1(x), f2(x)=g2(x), f3(x)=g3(x), ,fn(x)=gn(x)). n continuare se prezint exemple ilustrative: syms a x
x = 2 y -2 - 2 2ln(x + 7) = yln3
este realizabil
52
Rezolvarea ecuaiilor parametrice sau a sistemelor cu numar mare de ecuaii, MATLAB afieaz un cmp S al soluiilor. Extragerea soluiilor din acest cmp se realizeaz folosind o instruciune simpl:S.(nume_soluie). Pentru ilustrarea acestor situaii, se studiaz rezolvarea 2 ( x + y ) = 3z 1 2 x + ax + (a + 1)y + a = 0 ( y + z ) 2 = 3u 1 ; . Secvena urmtoare sistemelor: 2 y + ay + (a + 1)x + a = 0 ( z + u ) 2 = 3x 1 ( u + x ) 2 = 3 y 1 rezolv primul sistem:
syms x y z u S=solve('(x+y)^2=3*z-1','(y+z)^2=3*u-1','(z+u)^2=3*x1','(u+x)^2=3*y-1')
53
solutii=[S.x,S.y,S.z,S.u] solutii =
[3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2), 3/8+1/8*i*7^(1/2)] [3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2), 3/8- 1/8*i*7^(1/2)]
54
y2=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1','x') y2 = 1/(1+2*x)^(9/20)
Rezolvarea ecuaiei a doua, fr a specifica faptul ca x este variabil independent, are ca rezultat:
y3=dsolve('Dy=-y*(0.9/(1+2*x))','y(0)=1') y3 = exp(-9/10/(1+2*x)*t)
Folosind convenia de scriere comun, soluiile sunt: y 1 = (1 + 2t )0.45 ;
y 2 = (1 + 2x )
0.45
respectiv y 3 = e
0.9 t 1+ 2 x
S se calculeze:
1 44
+ 83
n MATLAB, se folosete algoritmul: E1=3^5-4^(1/4)+8^(-3) ceea ce are ca rezultat: E1 = 241.5877 2).-Calculul expresiilor cu numere iraionale S se calculeze expresiile:
2
E 2 = 15 ;
E 3 = 43,56 ;
2 E 4 = 3 18 45 + 23 8 99 88,9
55
E 5 = e 5
3 1 ; E 8 = log 4 90 4 3 ; E 6 = ln 9 ; E 7 = lg 3 2002 13 5 2
E9 =
1 2 3 4 e
12 3 5 3 12 4 3 E 10 = (1 + 2 + 3 ) : 14 + 5 34 ln 23 8 log 5 125 _ 55 11 8
56
E8 = 3.2353
1 2 3 4 e
, se procedeaz astfel :
x=[1,2;3,4];
-se determin valoarea expresiei, folosind funcia exp
1 2 : 3 4
E9=exp([1,2;3,4])
De observat c rezultatul este o matrice cu dou linii i dou coloane, exact ca i exponentul. Expresia E10 se calculeaz astfel: E10=(((1+2+3)/((12-3^5)/11)-(14+(34)^(1/5) -log(23))^(1/3))*8^((log(125))/(log(5))))-sqrt(55)*(12-4^3)/(8) E10 = -1.2985e+003 OBSERVAII:
bc
raional :
sau
c a b
ex
57
Pentru calculul expresiilor logaritmice cu logaritmi n alt baz dect baza natural ( ln x) sau 10 ( lg x ) se folosete formula de schimbare a bazei log c b logaritmului : log a b = log c a MATLAB dispune de o serie de combinaii, implicite, de taste pentru crearea comenzilor rapide (conform tabelului):
COMBINAIA DE TASTE Ctrl+p Ctrl+n Ctrl+b Ctrl+f Ctrl+r Ctrl+l Ctrl+a Ctrl+e Ctrl+u Ctrl+d Ctrl+h Ctrl+k SEMNIFICAIA
Readuce linia anterioar (prin acionarea repetata a tastei sgeat sus se readuc toate liniile anterioare, n linia curent) Readuce linia urmtoare (prin acionarea repetat a tastei sgeat jos se readuc toate liniile urmtoare, n linia curent) Salt la stnga cu un caracter Salt la dreapta cu un caracter Salt la dreapta, peste un cuvnt Salt la stnga, peste un cuvnt Salt la nceputul liniei de comand Salt la sfritul liniei de comand terge linia curent terge caracterul din dreapta cursorului terge caracterul din stnga cursorului terge de la cursor pn la sfritul liniei de comand curente.
TASTA
Ctrl+
APLICAII
1 A= 3
2 3 4
2 D= 3 5
e lg 9 0 ln 5 B= 2 ln 7 lg 18 6 9 0 2 3 3 1 4 6 5 ln 9 7
1 C= 2 3
58
S se scrie numrul :
123,456789012345678901 n formatele: scurt, lung, cu virgul mobil scurt = eng. scurt, cu virgul mobil lung =eng. lung, raional, cu dou zecimale exacte.
Fiind dat matricea : 3 2 A = e log 3 5 5
ln 4
4
log 3 2002 e ln 4 4
3 123 1.2 e 3 4 1 4 ln 12 1 2
23 5
s se determine (n MATLAB) matricea format astfel: A1-din elementele de pe poziiile: (1,5), (2,3), (2,5), (3,1), (3,3), (3,5), aranjate n toate variantele posibile(2 linii / 3 coloane; 3 linii / 2 coloane; 1 linie / 6 coloane; 6 linii / 1 coloan); A2-din elementele de pe liniile 1 i 3 coloanele 1, 3, 5; A3-din elementele de pe diagonalele principale cu 3 elemente; A4-din elementele de pe diagonalele secundare cu 2 elemente;
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)
e E=
15 ln 6 2 x 2 ln x + 23 lg 23 , pentru x= log 3 e 3 ln 5 + 16 . 6 3+ 8
59
CAPITOLUL II
OPERAIILE ARITMETICE CU MATRICI
n MATLAB operaiile aritmetice cu matrici (considerm matricile date A i B) au urmtoarea sintax:
-adunare -scdere -nmulire -mprire la dreapta -mprire la stnga -ridicare la putere -transpunere
iar, operaiile aritmetice cu tablouri de valori (considerm tablourile de valori A i B) au urmtoarea sintax: A.*B -nmulire A./B -mprire la dreapta A.\B -mprire la stnga A.^B -ridicare la putere A.' -transpunere Versiunea MATLAB 6 dispune de funcii specifice pentru realizarea operaiilor aritmetice cu matrici, respectiv, cu tablouri de valori: a)-Funcii MATLAB specifice operaiilor cu matrici
A.*B
- times(A,B)
60
1 2 m= ; 3 4
n= lg 8 e
4 ln 7 1 e 2
3
61
Rezolvare: Cu secvena MATLAB m=[1,2;3,4];n=[pi,sqrt(2),4^(1/3);exp(log10(8)),log(7),1-exp(1)] ; M=m+n Rezultatul afiat de MATLAB este: ??? Error using ==> + Matrix dimensions must agree. (Eroare la utilizarea operatorului ==> + Dimensiunile matricelor trebuie s fie identice) n MATLAB, versiunea 6 este posibil adunarea unor matrici ale cror elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie dou a 11 a 12 a 13 b 11 b 12 b 13 matrici : A = a 21 a 22 a 23 i B = b 21 b 22 b 23 . Pentru a se calcula a 31 a 32 a 33 b 31 b 32 b 33 suma X=B+A, se declar elementele matricelor, ca simboluri literale:
syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21 b22 b23 b31 b32 b33; apoi se declar matricele A, respectiv B: A = [a11 a12 a13; a21 a22 a23; a31 a32 a33] A= [ a11, a12, a13] [ a21, a22, a23] [ a31, a32, a33] B=[b11 b12 b13; b21 b22 b23; b31 b32 b33] B= [ b11, b12, b13] [ b21, b22, b23] [ b31, b32, b33]
Cu secvena MATLAB urmtoare se determin matricea X: X=A+B X= [ a11+b11, a12+b12, a13+b13] [ a21+b21, a22+b22, a23+b23] [ a31+b31, a32+b32, a33+b33]
62
Not: De observat modul de afiare a matricilor simbolice: fiecare linie este ncadrat ntre paranteze drepte.
a=[1;2;3] a= 1 2 3 b=[5,6,7] b= 5 6 7
produsul vectorial al acestora este : prod_vect=a*b prod_vect = 5 6 7 10 12 14 15 18 21 iar produsul scalar al celor doi vectori este : prod_scalar=b*a prod_scalar = 38 Dac vectorii (a, b) sunt dai simbolic: syms a11 a21 a31 b11 b12 b13 a_simbolic=[a11 ;a21; a31] a_simbolic = [ a11] [ a21] [ a31]
63
PRODUSUL MATRICILOR
Produsul a dou matrici se simbolizeaz cu caracterul * (tastele Shift + 8 de pe tastatura literal, apsate simultan, sau caracterul corespunztor de pe tastatura numeric). Pentru ca produsul a dou matrici s se poat realiza este necesar a se ndeplini urmtoarea condiie esenial: numrul de coloane ale primei matrici s fie egal cu numrul de linii ale celei de-a doua matrici. Astfel, dac se nmulesc dou matrici a(m,n) i b(n,p) se obine o matrice c(m,p), aceast regul aplicnduse i n cazul nmulirii unei matrici cu un vector-linie sau vector-coloan). Ex.: 1 2 3 3 2i 1 2i 7 3 4 ; b= Fie: a= ; c=2. 5 8 9 0 1 6 8 i S se calculeze produsele : ab; ba; ac; bc. Rezolvare:Cu secvena MATLAB urmtoare, rezult: a=[1,2;3,4;5,sqrt(8);i,pi];b=[sqrt(3),-3,2*i,1-2*i,7;8,9,0,1,6];c=2; a1=a*b [Enter]
a1 = 17.7321 37.1962 31.2877 25.1327+1.7321i 15 27 10.4558 28.2743-3i 2i 6i 10i -2 3 - 2i 7 - 6i 7.8284 -10i 5.1416+i 19 45 51.9706 18.8496+7i
64
a2=b*a [Enter] ??? Error using Inner matrix dimensions must agree. Eroare la utilizarea operatorului * Matricile trebuie s respecte condiia dimensional a3=a*c [Enter] a3 = 2.0000 6.0000 10.0000 0 + 2.0000i a4=b*c [Enter] a4 = 3.4641 -6 16.0000 18
Observaie: mesajul:
4i 0
2 - 4i 2
14 12
n cazul produsului a2=b*a, MATLAB afieaz ??? Error using ==> * Inner matrix dimensions must agree. (ntruct dimensiunile matricelor implicate n produs nu respect condiia impus !
nmulirea
dou
matrici
simbolice,
a 11 A = a 21 a 31
a 12 a 22 a 32
a 13 a 23 a 33
b 11 B = b 21 b 31
b 12 b 22 b 32
b 13 b 23 ., se realizeaz astfel: b 33
-se declar elementele matricelor, ca simboluri: syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b11 b12 b13 b21 b22 b23 b31 b32 b33;
65
X=A*B X=
[a11*b11+b21*a12+a13*b31,b12*a11+a12*b22+a13*b32,b13*a11+b23*a12+a13*b33] [a21*b11+b21*a22+a23*b31,b12*a21+a22*b22+a23*b32,b13*a21+b23*a22+a23*b33] [a31*b11+b21*a32+a33*b31,b12*a31+a32*b22+a33*b32,b13*a31+b23*a32+a33*b33]
MPRIREA LA DREAPTA
mprirea la dreapta este simbolizat cu operatorul / (slash), i este realizabil numai dac inversa celei de- a doua matrici exist (determinantul acesteia este nenul) i aceast invers respect condiia impus nmulirii matricelor. Astfel, dac se mpart dou matrici a(i,j) i b(m,m) este necesar ca b-1 s existe i dimensiunea acesteia s respecte condiia m==j. mparirea la dreapta, a dou matrici, const, de fapt, n rezolvarea ecuaiei X*a=b. Not :Se cunoate faptul c o matrice admite invers numai dac aceasta este ptratic i determinantul este nenul.
Ex.:
Fie:
66
a1 = 3.0000 -2.0000 2.0000 -1.0000 a2=b/a [Enter] a2 = -1 2 -2 3 Exemplu (produsul matricilor cu dimensiuni ne-adecvate): 3 1 2 Fie: a= ; b= 8 3 4 3 2i 1 2i 7 . 9 0 1 6
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]
67
X=B/A X=
[ -(a21*b2-b1*a22)/(a11*a22-a12*a21), (a11*b2-a12*b1)/(a11*a22-a12*a21)]
se obin cu
MPRIREA LA STNGA
Operaia de mprire la stnga este simbolizat cu operatorul \ (backslash), reprezentnd, n termeni aritmetici, produsul dintre inversa primei matrici i cea de-a doua matrice. Astfel, condiia necesar (dar nu suficient) pentru ca o matrice A s se mpart la stnga prin matricea B, este ca matricea A s admit invers i n plus aceast invers trebuie s ndeplineasc i condiia necesar ca dou matrici s se poat nmuli. Ca o concluzie, se va ncerca mprirea la stnga, sau la dreapta, a dou matrici, numai n cazul n care cele dou matrici sunt ptratice, i dac matricea, la care se mparte, este nesingular, condiia pentru nmulire s fie ndeplinit (numrul de coloane ale primei matrici egal cu numrul de linii ale celei de-a doua matrici ).
Ex.6:
Fie:
1 2 5 6 A= B= ; ; 3 4 7 8 S se calculeze:A\B; B\A.
68
A=[1,2;3,4];b=[5,6;7,8]; A1=A\B [Enter] A1 = -3.0000 -4.0000 4.0000 5.0000 A2=B\A [Enter] A2 = 5.0000 4.0000 -4.0000 -3.0000
n MATLAB (versiuni superioare versiunii 5.3) este posibil mprirea unor matrici ale cror elemente sunt caractere alfanumerice, declarate ca simboluri. De exemplu, fie dou matrici, A i B, ale cror elemente sunt date simbolic a 12 b 11 b 12 b 13 a A(2x2)=[aij], B(2x3)=[bik]: A = 11 . Se cere i B = b a 21 a 22 21 b 22 b 23 matricea X=B/A. Cu secvena MATLAB urmtoare se determin matricea X, ca fiind ctul simbolic al matricilor A i B: syms a11 a12 a21 a22 b11 b12 b13 b21 b22 b23; A = [a11 a12; a21 a22]; B = [b11 b12 b13;b21 b22 b23]; X = A\B
PRODUSUL KRONECKER
Produsul Kronecker este cea mai mare matrice format din toate produsele posibile realizate ntre elementele a dou matrici (nu trebuie confundat Produsul Kronecker cu simbolul Kronecker sau delta Kronecker, a crei exprimare este 1 pentru i = k dat de: ik = ). Aceast matrice este utilizat n calculul pentru i k 0 tensorial, n teoria deformrii elastice, n teoria deformrii plastice, respectiv n
69
calculele aferente analizei cu elemente finite a proceselor de deformare plastic i elasto-vsco-plastic a materialelor. Vectorii spaiali, definii pe spaiul cu trei dimensiuni 3 , reprezint mrimi reale, de exemplu mrimi fizice, care conin trei informaii (trei scalari). Descrierea unui vector v n baze diferite ai i bi prin coordonatele respective, nu schimb valoarea sa intrinsec (v se numete i mrime invariant):
i i v = va ai = vb bi
Toate mrimile invariante se numesc tensori (un exemplu tensorul tensiunilor care, dat prin componente, se reprezint x xy componentelor, ntr-un sistem de axe x, y, z: T = xy y xz yz
caracteriznd starea de eforturi unitare, a unui punct situat pe o suprafa oarecare a corpului supus aciunii unor fore exterioare). Un scalar este tensor, dac poate fi scris ca produsul scalar uv a doi vectori:
Deviatorul tensiunilor: xy m x [D ] = y x y m zy zx [T ] = [S r ] + [D ] ; xz yz z m ;
70
2 = x y + y z + z x xy 2 + 2 y z + 2 z x
3 = x y z + 2 x y y z z x x y z 2 y x z 2 z x y 2
care, n funcie de tensiunile normale principale 1 , 2 , 3 , sunt : 1 = 1 + 2 + 3
2 = 1 2 + 2 3 + 3 1 3 = 1 2 3
1 xz 2 1 yz 2 z
0
m
0 x + y + z ; 0 ; m = 3 m
1 xy 2
y m
1 zy 2
; z m
1 xz 2 1 yz 2
71
Produsul Kronecker se realizeaz cu funcia MATLAB kron(X,Y), rezultatul fiind obinut dup urmtoarea regul de calcul:
X(1,1) * Y X(1,2) * Y K X(1, n ) * Y K X(m,1) * Y X(m,2) * Y K X(m, n ) * Y 1 2 3 De exemplu, produsul Kronecker al dou matrici X = , 4 5 6 1 2 Y= este: 3 4
2 4 6 8 10 12 4 8 12 16 20 24
72
Dac b este un scalar iar c este o matrice atunci calculul puterii realizeaz folosind valorile proprii ale matricei c respectiv ale scalarului b.
bc
se
Obs. Operaia are sens numai dac matricea b este ptratic iar c un scalar.
Ex.7:
Fie: a=
1 2 ; 3 4
a=[1,2;3,4];b=3;c= -3; a1=a^b [Enter] a1 = 37 54 81 118 a2=b^a [Enter] a2 = 87.8864 127.1198 190.6797 278.5661 a3=a^c [Enter] a3 = -14.7500 6.7500 10.1250 -4.6250
Trebuie observat faptul c a3=a^c, unde c este un scalar negativ, se execut n urmtoarea ordine: se determin inversa matricei a dup care rezultatul se ridic la puterea |c| (valoarea absolut a scalarului c).
TRANSPUNEREA MATRICILOR
Transpusa unei matrici x(i, j) (i linii i j coloane), este matricea x1(j, i) (j linii i i coloane), i se determin, n MATLAB, folosind, pentru simbolizarea operaiei, caracterul apostrof : . De exemplu, pentru matricea x : x=[1,2,3;4,5,6] ; transpusa x1 este determinat Cu secvena MATLAB urmtoare, rezult:
73
4 5 6
D = det(X) Ex:
S se calculeze determinanii urmtoarelor matrici:
1 2 A= 3 4
1 2 3 3 B = 4 5 6 C = 8 7 8 9
3 2i 1 2i 7 . 9 0 1 6
B1 = det(B) B1 = 0 C1 = det(C)
n cazul C1 = det(C), MATLAB returneaz urmtorul mesaj de eroare (datorat dimensiunii matricei C): ??? Error using ==> det Matrix must be square. ??? Eroare la utilizarea funciei det () Matricea trebuie s fie ptratic
74
n MATLAB(versiunile superioare versiunii 5.3), este disponibil calculul determinantului unei matrici ale crei elemente sunt simboluri literale declarate cu a b funcia syms. De exemplu, pentru calculul determinantului matricei D = se c d poate utiliza urmtoarea secven :
D1= a*d - b*c 2 / 3 1 / 3 Similar este cazul matricei A = , unde se poate utiliza 1 1 urmtoarea secven: A = sym([2/3 1/3;1 1]) A= [ 2/3, 1/3] [ 1, 1] r = det(A) r = 1/3
Obs : Determinantul unei matrici este utilizabil n consideraii teoretice i n anumite tipuri de calcule simbolice, dar este, datorit scalrii i erorilor de aproximare, mai puin utilizabil n calcule numerice.
CALCULUL INVERSEI
Dac o matrice A este ptratic i nesingular (determinantul matricei este nenul), ecuaiile AX = I i XA = I (matricea I fiind matricea unitate) au aceeai soluie, X. Aceast soluie se numete inversa matricei A, se noteaz cu A-1 i se calculeaz folosind funcia MATLAB inv(A). Dac matricea A este ptratic i nesingular, atunci, fr a considera erorile de aproximare, X = inv(A)*B ar trebui
75
sa fie, cel putin teoretic, identic cu X = A\B iar, Y = B*inv(A) s fie identic cu Y = B/A. Utilizarea operatorilor aritmetici mprire la stnga i mprire la dreapta este preferat utilizrii inversei matricei, datorit timpului de calcul mai redus, a. volumului de memorie cerut i a unor proprieti de detecie a erorilor mai bune. Prin definiie, inversa unei matrici ptratice A(i,i), este matriea A-1, care satisface relaia:( A)*(A-1)=I, unde I este matricea unitate (matricea cu elementele de pe diagonala principal egale cu unitatea, respectiv celelalte elemente egale cu zero). Inversa unei matrici se calculeaz cu funcia MATLAB inv (), i se apeleaz cu sintaxa: Y = inv(X) Funcia se utilizeaz frecvent pentru rezolvarea sistemelor de ecuaii liniare A*X=B, sau X*A=B soluia sistemului este X=inv(A)*B, respectiv X=B*inv(A).
Ex. : 2 1 Se cere inversa matricei: A = . 1 1 Cu secvena MATLAB urmtoare, rezult: A = [2, 1 ; -1, 1] ; B = inv(A) B= 0.3333 -0.3333 0.3333 0.6667
PSEUDO- INVERSA Matricile rectangulare (tablourile de valori), nu admit inverse i nici calculul determinanilor. Pentru acest tip de matrici se poate utiliza pseudo- inversa Moore-Penrose, care se calculeaz cu funcia pinv(). De exemplu, pentru matricea 9 4 C = 2 8 se va calcula pseudoinversa cu urmtoarea secven MATLAB : 6 7
76
Printr-un calcul simplu se poate observa c produsul P*C reprezint matricea unitate de ordinul doi:
Q=C*P Q= 0.8293 -0.1958 0.3213 -0.1958 0.7754 0.3685 0.3213 0.3685 0.3952
RANGUL MATRICEI
O matrice X (m,n), nenul, are rangul k, dac matricea X are un determinant minor , de ordin k, nenul, iar toi minorii de ordin mai mare dect k (dac exist) sunt nuli. Rangul unei matrici este, prin urmare, un scalar 1 k min(m,n).Rangul unei matrici reprezint numrul de linii sau coloane liniar independente, i se determin cu funcia rank( ). Se apeleaz cu una dintre sintaxele:
r = rank (X)
Funcia rank, apelat cu sintaxa r = rank (X, tol), returneaz numrul de valori singulare ale lui X, mai mari dect parametrul opional tol.
77
4 3 =0 11 3 2 =-90, 3 1
3 2 3 1 3 5
4 3 2 4 2 3 = 3 1 3 = 1 11 3 5 11 5
3 13
i, deoarece, exist minori de ordinul al doilea nenuli, de exemplu rezult c rangul matricei A este:
rang A = 2
78
Egalitatea din ultima relaie, se obine numai pentru anumii vectori B . Aplicnd norma ambilor membri ai egalitii Ax=B, se obine :
B A
x ,
x x
A -1
B B
n care A-1 este matricea invers a lui A, obinut prin calcule (afectate de erori de rotunjire, adic AA -1 I ). Astfel, pentru o matrice nesingular A, pozitiv definit, se definete numrul de condiionare calculat ca raportul dintre cea mai mare i cea mai mic valoare proprie a acesteia :
cond.( A ) = A
A -1 =
1 1 2
n care
B B
dac elementele vectorului B sunt date cu trei cifre semnificative, atunci de ordinul 10-3 sau 10-4), iar
B B
este
x x
vectorul x, i este determinat de incertitudinea existent n vectorul B. Dac, att matricea A ct i vectorul B sunt afectati de erori, atunci sistemul se scrie sub forma : (A + A )(x + x ) = B + B x = (A + A )1 (B Ax)
79
Dac vectorul termenilor liberi este determinat exact i neafectat de erori, iar matricea A are coeficieni perturbai de erori, atunci sistemul Ax=B devine :
(A + A )(x + x ) = B ,
de unde rezult :
(x + x ) = (A + A )1 B
Ultima relaie, aranjat, devine :
sau x = (A + A )1 A 1 B
x = A 1 (A )(x + x ) ,
pentru care, dac se aplic norma, se obine :
x A -1
A x + x sau
x x + x
cond. (A )
A A
Din aceast relaie se observ c incertitudinea din vectorul soluie x, relativ la x + x , este mrginit de incertitudinea relativ a matricei A, nmulit cu numrul de condiionare al matricei A. n concluzie, dac numrul de condiionare cond(A) este mare, atunci perturbaiile mici introduse de A i/sau B pot introduce perturbaii mari n x (problema liniar este slab condiionat, adic soluiile sistemului de ecuaii sunt foarte evident influenate de erorile de calcul ale matricei A, respectiv de datele masurate, adic elementele vectorului B). Dac numrul de condiionare cond(A) este mic, atunci perturbaii reduse introduse de A i/sau B pot induce perturbaii mici n vectorul soluiei x (problema liniar este bine condiionat, adic soluiile sistemului de ecuaii sunt neinfluenate de erorile de calcul ale matricei A). Aceste elemente servesc la corectarea soluiei obinute din calcul, la alegerea metodei de calcul (innd seama de numrul i ordinea operaiilor de executat), la modul de reprezentare a informaiei numerice n calculator (n virgul mobil, virgul fix sau zecimal), la tipul de aritmetic cerut n programul de calcul, precum i la precizia impus calculelor. Numrul de condiionare se determin, n MATLAB, cu funcia cond() i se apeleaz cu sintaxa:
cond(X)
80
O funcie mai performant care permite calculul numrului de condiionare este rcond() i se apeleaz cu sintaxa:
rcond(X)
Funcia MATLAB rcond(X) returneaz estimarea numrului de condiionare al unei matrici X, determinat prin subrutinele LAPACK- Linear Algebra PACKage (exemple de subrutine de tip LAPACK : DLANGE, DGETRF, DGECON, dac matricea este real, respectiv ZLANGE, ZGETRF, ZGECON, dac matricea este complex), care reprezint o bibliotec de subrutine FORTRAN, utilizate de MATLAB pentru rezolvarea problemelor de algebr linear. n completare la LAPACK, MATLAB utilizeaz i subrutinele BLAS- Basic Linear Algebra Subroutines, care au i rolul de a amplifica viteza de calcul i manevrare a matricilor mari, respectiv ale subrutinelor LAPACK. Funciile LAPACK sau BLAS pot fi apelate prin fiiere MEX ale utilizatorului. Dac matricea X este bine condiionat, rcond are valoarea aproximativ 1.0, iar dac este slab condiionat, atunci rcond este aproximativ 0,0. Estimarea celui mai mic numr de condiionare se face cu funcia condest(), i se apeleaz cu sintaxa:
condest(X) Ex.:
Calculai numerele de condiionare pentru sistemul iniial de ecuaii:
n MATLAB:
-matricea sistemului iniial: A1=[6 6.917;1 1.152]; matricea sistemului perturbat : A2=[6 6.912;1 1.152];
81
-numerele de condiionare : C1=cond(A1); c2=cond(A2) C1=1.7234e+004 c2=inf D1=condest(A1); d2=condest(A2) D1=2,0845e+004 d2=2.7129e+017 R1=rcond(A1); r2=rcond(A2);
R1=5.4453e-005
r2=4.1842-018
De aici, rezult c sistemul este slab condiionat. Acest lucru se verific i prin rezolvarea celor dou sisteme, cu valori "apropiate" ale coeficienilor (pentru care exist diferen la a patra cifr) :
A1=[6 6.917;1 1.152]; A2=[6 6.912;1 1.152]; B=[6.543; 1.095]; X1=A1\B X1=[ 7.3158 -5.4000] X2=A2\B X2=[-8.1041 7.0348]*1.0e+013
Condiionarea slab a matricei se reflect n diferenele foarte mari ale soluiilor: de exemplu, prima soluie, pentru sistemul ne-perturbat, este x1=7,3158, n timp ce pentru sistemulperturbat, soluia x1= - 8,1041 1013.
Ex.: Se vor determina numerele de condiionare pentru sistemul iniial de ecuaii: 45x 1 + 23,123x 2 = 2,34 + 15x 2 = 3,45 x1
respectiv pentru sistemul "perturbat": 45x 1 + 23,124x 2 = 2,34 + 15x 2 = 3,45 x1 n Matlab, problema se rezolv cu urmtoarea secven: a=[45,23.123;1,15]; a1=[45,23.124;1,15];
82
83
Factorizarea reprezint operaia de trecere de la o mulime la mulimea claselor de echivalen, n raport cu o relaie de echivalen dat. Factorizarea se aplic, la rezolvarea sistemelor de ecuaii liniare. In esen, factorizarea este o procedur de transformare a unei matrici, n general ptratice, ntr-o matrice superior triunghiular (elementele superioare diagonalei principale sunt diferite de zero, n timp ce, elementele inferioare acesteia sunt toate egale cu zero) sau una inferior triunghiular (elementele inferioare diagonalei principale sunt diferite de zero, n timp ce, elementele superioare acesteia sunt toate egale cu zero). Metodele directe pentru rezolvarea sistemelor (de forma Ax=B), cele mai utilizate, sunt metodele bazate pe procesul de eliminare sau descompunerea matricei coeficienilor (matricea A). Astfel, pentru un sistem Ax=B:
K a 1n K a 2n , este M a n 2 K a nn x1 b1 x b matricea coeficienilor; x = 2 este vectorul necunoscutelor; B = 2 este M M xn b n vectorul termenilor liberi, ai sistemului, metoda general de transformare ntr-un sistem echivalent, Metoda de eliminare a lui Gauss, se prezint n continuare.
a 11 x 1 + a 12 x 2 a 21 x 1 + a 22 x 2 a n1 x 1 + a n 2 x 2
+ K + a 1n x n = b 1 + K + a 2n x n = b 2 , n care M + K + a nn x n = b n
a 11 a A = 21 a n1
a 12 a 22
Prima transformare aplicat sistemului Ax=B, are ca efect eliminarea necunoscutei x1 din celelalte n-1 ecuaii, adunnd prima ecuaie la urmtoarele n-1, a (1) 1 nmulit cu (1i) , obinndu-se un nou sistem de ecuaii: A (1) x = B (1) . n a a 11 doua transformare, se folosete a doua ecuaie, din sistemul A (1)x = B (1) , nmulit
a (2 ) i cu (2 2 , pentru eliminarea necunoscutei x2 din ultimele n-2 ecuaii ale acestui a ) 22 sistem, obinndu-se un nou sistem: A (2 )x = B (2 ) . Se observ c nainte de
eliminarea necunoscutei xk, sistemul echivalent, obinut dup eliminarea necunoscutelor x1, x2, , xk-1, poate fi scris sub forma: A (k ) x = B (k ) , k=1,2, , n
84
( )
(k 1) ik 1 ai , j , (k ) = 0, ai , j k,ij k - 1 (k 1) a ( ( ) a i kj 1) i ,k 1 akk 1j , i k, j k , 1, (k 1) a k 1, k 1
vectorului B (k ) , se calculeaz cu relaiile:
, respectiv, elementele
b (k 1) , i (k ) = a (k 11) (k 1) bi (k 1) i ,k (k 1) b k 1 , bi a k 1,k 1
Pentru k=n, sistemul nou obinut este:
i k 1 ik
85
a 12 a det[a 11 ] 0, det 11 0, K , det[A ] 0 . a 21 a 22 Descompunerea este unic dac elementele matricei L sau U, de pe diagonala principal sunt specificate astfel: a 11 a 12 K a 1n a 21 a 22 K a 2n = A = LU = M a n1 a n 2 K a nn 0 0 0 0 u 11 u 12 u 13 K u 1n 1 0 0 0 0 u 22 u 23 K u 2n l 21 1 0 0 0 = l 31 l 32 1 0 u 33 K u 3n M M l n1 l n 2 K l n ,n 1 1 0 0 0 0 u nn
triunghiular, dac Dac se relizeaz produsul dintre cele dou matrici L i U i se face identificarea termenilor, se obin n2 ecuaii neliniare cu n2 necunoscute. Se observ c : u 11 = a 11 , u 12 = a 12 , K , u 1n = a 1n iar, dac se determin elementele primei coloane de sub diagonala principal, se obin ecuaiile:
j=1
k 1
j=1
k 1
k 1
l kju jn + u kn = a kn j=1
u k ,k = a k ,k
k 1
u k ,k +1 = a k ,k +1
k 1
u kn = a kn
l kju jn j=1
86
= k 1
k 1
k 1
Factorizarea Cholesky-pentru matrici simetrice, pozitiv definite Factorizarea Lower Upper (LU)-eliminarea Gauss, pentru matrici ptratice Factorizarea ortogonal (QR)- pentru matrici rectangulare
Toate aceste metode de factorizare se apeleaz, n MATLAB, utiliznd funciile specifice: chol(), lu() respectiv qr(). Caracteristica, valabil n toate metodele, o constituie utilizarea matricei triunghiulare ale carei elemente, situate deasupra sau sub diagonala principal, sunt toate egale cu zero. Toate sistemele de ecuaii liniare, care permit utilizarea matricilor triunghiulare (factorizri), se rezolv uor folosind pre- sau post-substituia.
FACTORIZAREA CHOLESKY
Factorizarea Cholesky este o metod utilizat pentru rezolvarea unui sistem de ecuaii liniare de forma: SX=B, unde S este o matrice pozitiv definit (o matrice este pozitiv definit dac elementele diagonalei principale sunt toate pozitive, iar celelalte elemente componente ale matricei nu sunt prea mari). Reprezentarea schematic, a factorizrii Cholesky, este prezentat n figura alturat, cu ajutorul blocurilor de calcul DSP (Digital Signal Processing), proiectate, special pentru procesarea semnalelor digitale, pentru a fi folosite n mediile de simulare dinamic n SIMULINK (versiunea MATLAB superioar versiunii 5.3):
87
Prin factorizare Cholesky, o matrice S, simetric i pozitiv definit, se exprim ca produsul dintre o matrice superior triunghiular, L (elementele superioare diagonalei principale, sunt diferite cu zero), i transpusa acesteia, L:
S=L*L
Factorizarea Cholesky se realizeaz cu funcia MATLAB chol(), care se apeleaz cu una din sintaxele :
L=chol(S) [L,P]=chol(S)
Pentru exemplificare, se va folosi ca matrice de intrare, matricea pascal de ordinul 7:
S=pascal(7) S= 1 1 1 1 2 3 1 3 6 1 4 10 1 5 15 1 6 21 1 7 28 L=chol(S)
88
L= 1 0 0 0 0 0 0
1 1 0 0 0 0 0
1 2 1 0 0 0 0
1 3 3 1 0 0 0
1 1 1 4 5 6 6 10 15 4 10 20 1 5 15 0 1 6 0 0 1
Condiiile pentru factorizarea Cholesky sunt: i. Matricea S s fie pozitiv definit ii. S= (Lt )* (L) i det(S)>0 (At este notaia pentru matricea transpus matricei A); iii. Exist o matrice unic L, superior triunghiular, nesingular, care satisface relaia:S=Lt*L Un sistem de ecuaii lineare SX=B devine:
RtRX=B
iar soluia acestuia presupune rezolvarea succesiv a sistemelor:
RtY=B i RX=Y.
ntruct, operatorul MATLAB mprire la stnga (backslash) recunoate ca operanzi matricile triunghiulare, rezolvarea sistemelor de ecuaii lineare se poate realiza folosind:
X=R\(R\B) Ex.:
Fie sistemul de ecuaii:
9x 1 x 2 + 2x = 1 3 x 1 + 8x 2 5x 3 = 2 2x 5 x + 7 x = 1 2 3 1
Soluiile acestui sistem, folosind factorizarea Cholesky, se gsesc prin urmtoarea secven: A=[9,-1,2;-1,8,-5;2,-5,7]; B=[1;-2;-1];
89
n Matlab (versiuni superioare versiunii 5.3) este posibil rezolvarea sistemelor simetrice, prin metoda Cholesky, folosind Solver-ul Cholesky din pachetul de programe DSP Blockset Simulink. De exemplu, pentru rezolvarea 9x 1 x 2 + 2x = 1 3 sistemeului de ecuaii liniare dat prin: x1 + 8x 2 5x 3 = 2 , se folosete 2x 5 x + 7 x = 1 2 3 1 urmtorul model de rezolvare (solver):
Ex.: Se cere factorul Cholesky al matricei: 1 1 0 9 1 9 0 1 A= 1 0 9 1 9 0 1 1 Cu secvena MATLAB urmtoare, rezult: A=[9,1,-1,0;1,9,0,-1;-1,0,9,-1;0,-1,1,9]; [r,p]=chol(A) r= 3,0000 0,3333 0,3333 0 0 2,9814 0,0373 0,3354 0 0 2,9812 0,3396 0 0 0 2,9618
90
Blockset din
Solverul Cholesky va realiza, n acest caz o rezolvare a sistemului de ecuaii, dar activarea simulrii va avea ca rezultat afiarea n linia de comand a
91
MATLAB, a mesajului Warning: Input matrix to block 'Model de rezolvare/Solverul Cholesky /Cholesky Factorization' is not positive definite.. Acest mesaj avertizeaz utilizatorul asupra faptului c matricea de intrare, din fiierul model Model de rezolvare, nu este pozitiv definit. n acest caz soluia dat prin Solverul Cholesky este eronat, ntruct matricea coeficienilor nu este pozitiv definit. Totui, rdcinile verific prima ecuaie, cu eroare la a patra zecimal. Rezolvarea sistemului prin determinarea matricei inverse (matricea coeficienilor fiind nesingular, iar rangul matricei extinse este egal cu rangul matricei coeficienilor, aadar sistemul admite soluie unic), are ca rezultat vectorul soluie: X=[ -5; 2; 6; -4;]. Aceast soluie verific toate ecuaiile sistemului. Not:-Dac se ncearc determinarea factorului Cholesky, prin funcia MATLAB chol([1,2,1,1;2,1,3,3;1,1,1,1;2,7,2,3]), va fi afiat un mesaj de eroare: (??? Error using ==> chol Matrix must be positive definite.) ??? Eroare la utilizarea operatorului chol Matricea trebuie s fie pozitiv definit ntruct matricea de la argumentul funciei chol() are elemente cu mult diferite.
FACTORIZAREA LOWER-UPPER
(LU)
Prin factorizarea lower-upper (lu), o matrice ptratic este descompus sub forma produsului a dou matrici triunghiulare: una inferior triunghiular (lower), permutat (o matrice permutat, dup o anumit regul este o matrice n care liniile sunt pivotate ntre ele), cu elementele, de pe diagonala principal, egale cu unitatea (matricea L) i cealalt, o matrice superior triunghiular (upper), (matricea U). n MATLAB, factorizarea lu este utilizat pentru obinerea inversei unei matrici cu funcia inv() (inversa unei matrici A, se calculeaz ca produsul dintre inversa matricei inferior triunghiular L, calculat prin eliminare Gauss, i inversa matricei superior triunghiular U, calculat prin aceeai metod), respectiv pentru calculul determinantului matricelor cu funcia det() (ca produs dintre determinanul matricei inferior triunghiular L i determinanul matricei superior triunghiular U). Este, totodat, baza rezolvrii ecuaiilor liniare prin "mprirea matricelor" obinut cu operatorii \ i / . Permutarea liniilor sau coloanelor unei matrici se poate exemplifica foarte sugestiv printr-o schem cu blocuri DSP. Presupunem ca se dorete permutarea
92
1 2 liniilor unei matrici A = 4 5 7 8 respectiv permutarea coloanelor, schema bloc este urmtoarea:
93
Factorizarea unei matrici, prin metoda lower-upper, se realizeaz cu funcia lu() i se apeleaz cu una dintre sintaxele:
1. [LU]=lu(S) - cu un singur parametru de ieire, matricea [LU] 2. [L,U]=lu(S) returneaz o matrice superior triunghiular, U, i o matrice inferior triunghiular permutat, L, astfel nct S=L*U 3. [L,U,P]=lu(X) returneaz o matrice superior triunghiular n U, inferior triunghiular n L i permutarea matriceal n P, astfel nct L*P=P*S Ex.: 1 2 3 S se factorizeze matricea A = 4 5 6 prin metoda lower-upper. 7 8 0 Cu secvena MATLAB A=[1,2,3;4,5,6;7,8,0]; [L]=lu(A) L= 7.0000 8.0000 0 0.1429 0.8571 3.0000 0.5714 0.5000 4.5000 [L,U]=lu(A) L= 0,1429 1,0000 0 0,5714 0,5000 1,0000 1,0000 0 0
U= 7,0000 8,0000 0 0
unde, matricea L, este o permutare a matricei inferior triunghiulare, iar U este o matrice superior triunghiular. Apelarea funciei lu() cu trei parametri de ieire, are ca rezultat:
[L,U,P]=lu(A)
94
n Matlab (versiuni superioare versiunii 5.3) este posibil factorizarea matricilor ptratice prin metoda lower-upper folosind pachetul de programe DSP 1 2 3 Blockset din Simulink. De exemplu, pentru matricea A = 4 0 6 , folosind 2 1 3 pachetul DSP Blockset se obine matricea compus din matricea L, inferior triunghiular, i matricea superior triunghiular:
Matricea Ap, (linia 2 pivotat, astfel nct aceasta devine linia 1 ) este 4 0 6 A p = 1 2 3 , iar matricile triunghiulare L (nepivotat) respectiv matricea U 2 1 3
95
Pentru a observa modul n care sunt determinate matricile L i U, se va apela funcia MATLAB lu(A) n toate cele trei variante posibile:
A=[1,-2,3;4,0,6;2,-1,3]; [L]=lu(A) L= 4.0000 0 6.0000 0.2500 -2.0000 1.5000 0.5000 0.5000 -0.7500 [L,U]=lu(A) L= 0.2500 1.0000 0 1.0000 0 0 0.5000 0.5000 1.0000 U= 4.0000 0 0 0 6.0000 -2.0000 1.5000 0 -0.7500
96
Rezolvarea sistemelor de ecuaii AX=B prin factorizarea lower upper presupune urmtoarele etape: i. determinarea matricelor L i U cu funcia MATLAB
[L,U]=lu(A);
ii. determinarea vectorilor Y i X (obligatoriu n aceast ordine): Y=L\B i X=U\Y ; Etapa ii., poate fi realizat i compact cu instruiunea:
X=U\ (L\B)
necunoscute
A=[1,-2,3;4,0,6;2,-1,3];B=[1;-2;-1]; [L,U]=lu(A);X=U\(L\B)
obinndu-se soluia sistemului :
X= -2 0 1
Dac factorizarea se realizeaz prin apelarea cu trei parametri de ieire, atunci se obin rdcinile permutate ale sistemului dat :
97
Blockset din Simulink. De exemplu, pentru rezolvarea sistemului 3x3 x 2y + 3 z = 1 + 6z = 2 , se folosete urmtorul model Simulink : 4x 2x y + 3z = 1
FACTORIZAREA q-r
Prin factorizare Q-R, o matrice se exprim ca produs ntre o matrice ortogonal, Q, i o matrice superior triunghiular, R. Matricea ortogonal, sau matricea cu coloane ortonormale, este acea matrice real care are toate coloanele de lungime unitar, i sunt perpendiculare. Dac o matrice Q este ortogonal, atunci : Q*Q=1 Dac matricea este complex, atunci termenul corespunztor este matrice unitar. Matricea ortogonal i matricea unitar sunt uor de utilizat, n plus, nu introduc i nu amplific erorile de calcul. Din acest motiv, aceste matrici sunt utilizate in calcule specifice analizei numerice. Factorizarea Q-R, se realizeaz dup urmatoarea schem generalizat :
98
[Q,R] = qr(A) [Q,R] = qr(A,0) [Q,R,E] = qr(A) [Q,R,E] = qr(A,0) X = qr(A) R = qr(A) [C,R] = qr(A,B) R = qr(A,0) [C,R] = qr(A,B,0)
(matrice complet definit, sau matricea dispersiilor) ( matrice complet definit, sau matricea dispersiilor) (matrice complet definit) (matrice complet definit) (matrice complet definit) (matricea dispersiilor) (matricea dispersiilor) (matricea dispersiilor) (matricea dispersiilor)
n MATLAB (versiuni superioare versiunii 5.3) este posibil factorizarea matricilor ptratice prin metoda q-r, folosind pachetul de programe DSP Blockset 1 1 2 din Simulink. De exemplu, pentru matricea A = 1 8 5 , folosind 2 5 7 pachetul DSP Blockset se obine:
99
A=[1,2,3;4,5,6;7,8,0]; [Q,R]=qr(A) Q= -0.1231 0.9045 0.4082 -0.4924 0.3015 -0.8165 -0.8616 -0.3015 0.4082 R= -8.1240 -9.6011 -3.3235 0 0.9045 4.5227 0 0 -3.6742
Factorizarea q-r se utilizeaz pentru rezolvarea sistemelor de ecuaii liniare cu mai multe ecuaii dect necunoscute (sisteme supra-determinate). Cea mai bun soluie a unor astfel de sisteme, n sensul celor mai mici ptrate, este calculat cu instruciunea: X=A\B, care utilizeaz aceast factorizare. Prin utilizarea factorizrii q-r, soluia x este calculat n dou etape:
1. Y=(Q-1)*B 2. X=R\Y
Aceeai soluie se obine folosind urmtoarea secven MATLAB, scris compact:
[Q,R]=qr(A); X=R\(inv(Q)*B) x 2 y = 2 x + 2y = 3 De exemplu, soluia sistemului liniar , se obine, folosind urmtoarea 3x y = 7 2x + y = 11 secven: A=[1,-2;1,2;3,-1;2,1]; B=[-2;3;7;11]; [Q,R]=qr(A); X=R\(inv(Q)*B) X= 3.0470 1.7047
Folosind pachetul DSP Blockset, din Simulink, se obine:
100
soluia
sistemului
t=-2,4.
Folosind pachetul DSP Blockset, din Simulink, se obine:
101
n general, n aplicaiile inginereti, exist un interes deosebit pentru determinarea valorilor proprii reale i complexe ale unei matrici reale. Analiza metodelor de calcul ale valorilor proprii pentru matricile reale poate fi extins la matricile cu elemente complexe. Asemntor rezolvrii sistemelor de ecuaii, i n cazul determinrii valorilor i vectorilor proprii exist dou tipuri de metode: metode directe i metode indirecte. Folosirea metodelor directe sau indirecte depinde mai mult de natura soluiei cerute dect de forma matricei. Exist aplicaii n care se pot cere n valori proprii i n vectori proprii ai unei matrici de ordinul n i alte aplicaii n care se cere doar un numr k<n de valori i vectori proprii, precum i aplicaii la care se cere valoarea proprie maxim (minim) n valoare absolut. n cazul n care se cere o valoare proprie, sau un numr redus de valori proprii k<n, se pot aplica metodele indirecte (iterative), iar n cazul n care se cer toate, sau aproape toate valorile propii, este preferabil s se foloseasc metodele directe care implic transformrile similare ce reduc matricea iniial A la o matrice similar B de o form particular (reducndu-se astfel algoritmul de calcul propriu-zis).
Problema valorilor i vectorilor proprii apare ntr-o mare varietate de aplicaii i se scrie sub forma Ax=x, sau, n general, Ax=Bx : vibraiile
corpurilor elastice, difuzia masic, sisteme oscilatorii.
n studiul sistemelor fizice este, adesea, necesar rezolvarea unor sisteme de ecuaii liniare avnd forma algebric general :
a 12 a 13 a 11 a 22 a 23 a 21 a 31 a 32 a 33 a n1 a n2 a n3
K K K M K a nn
a 1n a 2n a 3n
x1 x 2 x 3 = 0 M x n
unde A este o matrice simetric real, x este vectorul variabilelor independente iar un parametru scalar denumit valoare caracteristic sau valoare proprie. Problema rezolvrii sistemului const n determinarea parametrului i a vectorului x corespunztor, vector cunoscut sub denumirea de vector caracteristic sau vector propriu. n determinarea soluiilor nebanale ale sistemului de ecuaii :AX=X, unde : A este matrice ptratic de ordinul n, X este vector coloan de ordinul n, - este un scalar,
102
valorile X, respectiv , care satisfac ecuaia de mai sus se numesc vectori proprii, respectiv valori proprii. Pentru a evidenia semnificaia fizic a valorilor i vectorilor proprii se consider urmtoarele exemple.
A. Presupunnd necesar studiul vibraiilor libere ale unui sistem constnd din trei corpuri solide de mas, 2m, 4m, 6m, respectiv, fixate pe o bar elastic, la distan egal, l, unul de altul, respectiv de reazemele de ncastrare ale barei, acesta conduce la scrierea ecuaiilor micrii i la formularea unei probleme de valori proprii:
2k 2m 2 k 0 k 2k 4m 2 k x 1 x 2 = 0 k 2k 6m 2 x 3 0
unde reprezint frecvena, x vectorul deplasare i k=s/l (s- tensiunea n bar, 4llungimea barei). Dac se realizeaz substituia = m 2 / k , sistemul de ecuaii ale micrii, devine:
2 1 0 x1 2 0 0 x 1 1 2 1 x 2 = 0 4 0 x 2 0 1 2 x 3 0 0 6 x 3 B. Un sistem fizic format din dou corpuri solide de mase m1, respectiv m2, legate ntre ele prin trei arcuri elastice elicoidale, avnd coeficienii de elasticitate k 1 , k 2 , k 3 , este descris matematic prin sistemul de ecuaii difereniale ordinare: 2 dx 1 m 1 2 = k 1 x1 + k 2 ( x 2 x1 ) dt 2 dx 2 m 2 2 = k 2 ( x 2 x1 ) k 3 x 2 dt unde x 1 , x 2 sunt deplasrile pe orizontal fa de starea de echilibru, iar t este timpul.
103
Pentru oscilaiile naturale sistemul va oscila la o frecven unic n , obinndu-se oscilaii sinusoidale de amplitudine y i unghi de defazaj . n acest caz expresiile celor dou deplasri sunt:
x 1 = y 1 sin( n t ),
x 2 = y 2 sin( n t )
Dac se nlocuiesc aceste expresii ale deplasrilor, n sistemul ecuaiilor de micare, dup ordonare, rezult sistemul
2 m1n y 1 k 1y 1 + k 2 y 1 k 2 y 2 = 0 2 m 2 n y 2 k 2 y 2 + k 3 y 2 k 2 y 1 = 0 2 Pentru m 1 = m 2 = m, k 1 = k 2 = k 3 = k i frecvena adimensional = m n / k , sistemul devine:
( 2 )y 1 y 2 = 0 y 1 + ( 2 )y 2 = 0
Sistemul omogen, n necunoscutele y 1 , y 2 , are soluia banal y 1 = y 2 = 0 , pentru orice valoare , fapt neinteresant din punct de vedere fizic. Astfel se impune condiia ca det A 0 (A fiind matricea sistemului), rezultnd ecuaia polinomial n :
2 1 2 P2 ( ) det 4 + 3 = 0; 1 = 1, 2 = 3 1 2
Gradul polinomului caracteristic P2 ( ) reprezint numrul gradelor de libertate ale sistemului fizic, precum i numrul valorilor proprii. Fiecrei valori proprii i corespunde cel puin un vector propriu, n cazul de fa existnd doi vectori proprii:
y 1 1 y (1 ) = 1 , y 1 2
2 y 1 y ( 2) = 2 y 2 2
Din punct de vedere fizic, y 1 i y 2 reprezint frecvene naturale n forma adimensional pentru sistemul considerat:
104
1 = 2 =
2 m 1 = 1, k
1 = k / m 2 = 3k / m
m 2 2 = 3, k
y 1 1 1 y (1 ) = = 1 ; y 1 1 2
y 1 1 2 y ( 2) = = 2 y 2 1 2
Se observ c 1 este frecvena cea mai joas iar 2 este frecvena cea mai nalt pentru sistemul considerat, respectiv, faptul c la frecvena 1 cele dou corpuri se deplaseaz la fel i n aceeai direcie, iar la frecvena 2 cele dou mase se deplaseaz cu aceeai mrime dar n sensuri opuse. Cele dou exemple prezentate au menirea s evidenieze faptul c valorile proprii i vectorii proprii descriu modul de comportare al unui sistem fizic, reprezentnd o serie de mrimi ce descriu comportarea sistemului. Valorile i vectorii proprii ai unei matrici ptratice se calculeaz, n MATLAB, cu funcia eig() i se apeleaz cu una din sitaxele:
105
[V,D]=eig(A,'nobalance') returneaz valorile i vectorii proprii fr a executa n prealabil o echilibrare (aproximare). Dac matricea conine elemente mici, comparabile cu erorile de rotunjire, balansarea se scaleaz, fcndu-le la fel de semnificative ca celelalte elemente ale matricei originale. Acest lucru conduce n final la vectori proprii incoreci. n astfel de situaii se utilizeaz noiunea de "nobalance". Dac matricea are valori proprii de ordinul nti (valorile proprii sunt distincte), atunci vectorii proprii sunt independeni. Dac vectorii proprii nu sunt independeni, atunci matricea original nu este neregulat. Chiar dac o matrice este neregulat, soluia funciei eig() satisface ecuaia:
A*X=X*D
Valorile i vectorii proprii generalizai determin soluiile nebanale ale ecuaiei:
AX=BX
unde A i B sunt matrici ptratice de ordinul n, iar este un scalar. Valorile lui care satisfac ecuaia se numesc valori proprii generalizate i valorile X corespunztoare sunt vectorii proprii generalizai. Dac B este o matrice nesingular (det(B)0, adic matricea este inversabil), problema calculului valorilor i vectorilor proprii se reduce la o problem standard cu valori proprii prin nlocuirea lui A cu B-1A, ntruct ecuaia este echivalent cu:
B-1AX=X
Calculul vectorilor i valorilor proprii generalizate se realizeaz cu funcia MATLAB eig() i se apeleaz cu una dintre sintaxele:
V=eig(A,B)
returneaz un vector care conine valorile proprii generalizate, dac A i B sunt matrici ptratice ;
[V,D]=eig(A,B)
returneaz o matrice V ale crei coloane sunt vectorii proprii corespunztori i, o matrice diagonal D ce conine valorile proprii generalizate, astfel nct: A*V=B*V*D
106
Aplicnd funcia MATLAB eig(), sistemelor de ecuaii ale micrii, pentru cele dou sisteme fizice, tratate teoretic, la nceputul acestui paragraf, se obin urmtoarele rezultate : A.- pentru primul sistem:
A=[2,-1,0;-1,2,-1;0,-1,2] [V,D]=eig(A)
V= 0.5000 -0.7071 -0.5000 0.7071 0.0000 0.7071 0.5000 0.7071 -0.5000 D= 0.5858 0 0 0 2.0000 0 0 0 3.4142
V=eig(A) V= 0.5858 2.0000 3.4142
107
AV = U AT U = V
Dac U i V sunt ortogonale (UT * U =1, VT * V=1), atunci acestea reprezint rezultatul descompunerii n valori singulare a matricei A :
A = U VT
Descompunerea complet, n valori singulare, a unei matrici de tipul Amxn, are ca rezultat o matrice Umxm, una mxn , respectiv o matrice Vnxn (adic matricile U i V sunt patratice, n timp ce are ordinul matricei A). Dac matricea A are numrul de linii mai mare dect numrul de coloane, atunci descompunerea n
108
valori singulare va avea ca rezultat o matrice U de dimensiuni mari, dar ultimele m-n coloane sunt nmulite cu zero, n matricea . n aceast situaie, economia n mrimea descompunerii, are efecte n timpul de calcul i n spaiul de memorie necesar stocrii rezultatelor, prin renunarea la calculul acelor elemente care, oricum sunt eliminate prin nmulirea cu zero, i eliminarea acelor coloane din reprezentarea matricei U. n acest mod, va fi determinat i afiat o matrice U cu dimensiunea mxn, o matrice , de ordinul nxn respectiv, matricea V, de aceeai dimensiune . Dac matricea A este ptratic, simetric i pozitiv definit, atunci descompunerea n valori i vectori proprii este identic descompunerii n valori singulare. De remarcat c rezultatele descompunerii n valori singulare a unei matrici reale sunt ntotdeauna reale, n timp ce, descompunerea n valori i vectori proprii, a unei matrici reale, poate fi complex. Descompunerea n valori singulare a matricei A, se poate face, n MATLAB, folosind funcia specific svd(). Funcia svd() se apeleaz cu una din sintaxele: D=svd(A) returneaz un vector care conine valorile singulare [U,S,V]=svd(A) returneaz o matrice diagonal S cu aceleai dimensiuni ca A, avnd elementele diagonale nenegative (care sunt i valori singulare) n ordine descresctoare i matricele U i V care satisfac relaia: X=U*S*V [U,S,V]=svd(X,0) efectueaz un calcul mai rapid al valorilor singulare,
Ex. : 1 5 S se descompun, n valori singulare, matricea A = 4 3 Rezolvare : Cu secvena MATLAB A=[1 5; 4 3]; D=svd(A) D= 6.6713 2.5482 [U,S,V]=svd(A) U= -0.7163 -0.6977 -0.6977 0.7163 S= 6.6713 0 0 2.5482 V= -0.5257 0.8507 -0.8507 -0.5257
109
1 7 5 3 , n valori singulare, folosind toate S se descompun matricea A = 8 1 4 9 variantele de apelare ale funciei MATLAB svd(). Rezolvarea este imediat, cu urmtoarea secven: A=[1,7;5,3;8,1;4,9] D=svd(A) D= 13.8259 7.4058 [U,S,V]=svd(A) U= -0.4445 0.4723 -0.0336 -0.7604 -0.3930 -0.2855 -0.8693 0.0909 -0.4116 -0.7711 0.4125 -0.2566 -0.6917 0.3176 0.2701 0.5897 S= 13.8259 0 0 7.4058 0 0 0 0 V= -0.6126 -0.7904 -0.7904 0.6126 [U,S,V]=svd(A,0) U= -0.4445 0.4723 -0.3930 -0.2855 -0.4116 -0.7711 -0.6917 0.3176 S= 13.8259 0 0 7.4058 V= -0.6126 -0.7904 -0.7904 0.6126
110
APLICAII
1:
Fie:
e4 2 lg 8 a= 4 ; 5 3 e lg 4 S se calculeze:a+b; a-b;a+c.
7 5 ln 6 b= ; c=2. lg 7 3 8
2: 3 21 sin 20 sin 3 Fie: m= ; n= log 5 log 8 arctg 3 e 3 e 6 S se calculeze: M=m+n 3: 2 1 4 7 3 5 35 3 45 ;b= Fie: a= 3 5 8 9 4 82 log 4 6 sin 61 3 S se calculeze produsele : ab; ba; ac; bc. 4: ln 2 1 a= log 5 9 ; lg 3 4e S se calculeze:a/b; b/a.
Fie:
sin 5 tg6 b= ; log 5 7 ln 8 2i 1 2i 7e log 6 8 ; c=2. 0 1 log 5 6 4
3
5 2 ln 7
6 1 e log5 7
3
2i 1 2i 0 1
7e . log 4 6 3
111
5 3 5 b= 7
log 4 6 ; 8
b=3;c= - 3
2e 4e lg 6
1 B = 7 4 7e
2
5
84
3 ln 5 3 ln 6 C = 8 e9
3 2i 1 2i 7 . 9 0 1 6
3 log8 9 5 Calculai inversa matricei: A = 2e 11e 10: 53 S se determine rangul matricei A = 3 63 5 13 11:
10 ln 4 . 12 log 6 9
2 1 5
4 23 3 . 13 11 5
6
e A = 3 lg 5 3
2e 4e lg 6
1 B = 7 4 7e
2
5
e 84
3 ln 5 3 ln 6 C = 8 e9
3 2i 1 2i 7 9 0 1 6
112
12:
S se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, urmtoarele sisteme de ecuaii lineare:
3x + 2y z = 10 x + 3y + 2z = 5 ; x y z = 1
13:
x 2y + z t + 2u = 1 2 x y + 3 z 3t u = 6 x + y + z t + 3u = 7 2x + 7 y + 2z + 8t 2u = 0
S se rezolve, folosind metodele de factorizare Choleski, Lower-Upper, respectiv, QR, urmtoarele sisteme de ecuaii lineare:
6x 2y + z 3t = 21 2x 3y + z 3t = 11 5 x + 7 y + 3 z 2t = 8 2x + y + 2z + 4t = 10 14:
9x 1 x 2 + 2x = 1 3 x 1 + 8 x 2 5 x 3 = 2 2x 5 x + 7 x = 1 2 3 1
1 1 2 A = 1 8 5 2 5 7
1 2 3 B = 4 5 6 7 8 0
1 1 0 9 1 9 0 1 C= 1 0 9 1 9 0 1 1
113
CAPITOLUL III
STRUCTURI I TABLOURI DE VALORI
Structurile, sau tablourile de valori, sunt extensii ale matricilor bidimensionale. Structurile sunt utile pentru construirea tabelelor de valori. De exemplu, considernd vectorul:
n = (0:9)';
atunci, cu secvenele urmtoare, se pot genera dou tabele de valori:
tabel_puteri = [n tabel_puteri = 0 1 2 3 4 5 6 7 8 9
114
STRUCTURI MULTIDIMENSIONALE
Structurile multidimensionale se deosebesc de matrici i tablouri de valori prin numrul de dimensiuni. In timp ce matricile i tablourile de valori sunt caracterizate prin dou dimensiuni (linii i coloane), structurile multidimensionale dimensiuni suplimentare: paginile. De exemplu, cu secvena urmtoare genereaz o reea cu 3 linii, 4 coloane i 5 pagini:
R = randn(3,4,5) R(:,:,1) = 0.0000 -1.8740 0.7310 0.6771 -0.3179 0.4282 0.5779 0.5689 1.0950 0.8956 0.0403 -0.2556 R(:,:,2) = -0.3775 -0.2340 1.4435 0.7990 -0.2959 0.1184 -0.3510 0.9409 -1.4751 0.3148 0.6232 -0.9921 R(:,:,3) = 0.2120 -0.7420 0.3899 -0.5596 0.2379 1.0823 0.0880 0.4437 -1.0078 -0.1315 -0.6355 -0.9499 R(:,:,4) = 0.7812 -0.2656 0.9863 0.2341 0.5690 -1.1878 -0.5186 0.0215 -0.8217 -2.2023 0.3274 -1.0039 R(:,:,5) = -0.9471 -1.0559 -1.2173 -1.3493 -0.3744 1.4725 -0.0412 -0.2611 -1.1859 0.0557 -1.1283 0.9535
iar cu secvena: p = perms(1:4); A = magic(4); M = zeros(4,4,24); for k = 1:24 M(:,:,k) = A(:,p(k,:)) End
115
se genereaz o reea cu 4 linii, 4 coloane i 24 pagini. Aceast reea este reprezentat succint n figura urmtoare (la rularea secvenei anterioare se vor afia toate paginile structurii M, pentru fiecare valoare a indexului k):
116
S se calculeze: a-b; a-c; c-a; c-b; a+d Cu secvena MATLAB urmtoare, rezult:
a=[1,2,3;4,5,6];b=[-1,8,pi;9,sqrt(5),3];c=10; d=[7^(1/3),exp(1);exp(2)/(log(3)-8),6] A=a-b [Enter] A= 2.0000 -6.0000 -0.1416 -5.0000 2.7639 3.0000 B=a-c B= -9 -8 -7 -6 -5 -4 C=c-a C= 9 8 6 5
[Enter]
[Enter]
7 4
E=a+d
Enter]
117
n cazul E=a+d, MATLAB returneaz un mesaj de eroare, ntruct nu este ndeplinit condiia de coresponden a dimensiunilor celor doi operanzi:
E= a+d ??? Error using ==> + Matrix dimensions must agree.. ??? Eroare la utilizarea operatorului + Matricile trebuie s aib aceleai dimensiuni
118
C=c.*a [Enter] C= 10 20 30 40 50 60 D=c.*b [Enter] D= -10.0000 80.0000 31.4159 90.0000 22.3607 30.0000
n cazul E=a.*d, MATLAB returneaz un mesaj de eroare, ntruct cele dou tablouri au dimensiuni diferite: E=a.*d ??? Error using ==> .* Matrix dimensions must agree. ??? Eroare la utilizarea operatorului + Matricele trebuie s aib aceleai dimensiuni
8 5
, 3
c=10.
119
MPRIREA LA STNGA
Operaia de mprire la stnga, ntre dou tablouri, avnd aceleai dimensiuni, este simbolizat cu operatorul .\ (punct + backslash): x=y.\z, i reprezint ctul dintre elementul z(i,j) i elementul y(i,j), adic: x=y.\z z./y.
8 5
, 3
c=10.
120
f=c.\a [Enter] f= 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 g=c.\b [Enter] g= -0.1000 0.8000 0.3142 0.9000 0.2236 0.3000
1 b= 9
8 5
, 3
c=10.
e=a.^c e= 1 1048576
[Enter]
1024 9765625
59049 60466176
121
Not: Afiarea expresiei numerice 1.0e+009 * (numrul 109) n faa unei matrici, are semnificaia urmtoare: elementele matricei sunt nmulite cu acel numr. Aceasta este o metod practic de a scurta formatul unui numr.
a=[1, sqrt(3),pi,-6,0;I,3-2*I,1+sqrt(11),7,9]; a1=a. [Enter] a1 = 1.0000 0 + 1.0000i 1.7321 3.0000 - 2.0000i 3.1416 4.3166 -6.0000 7.0000 0 9.0000
[Enter]
122
123
coduri_ASCII_majuscule=double('ABCDEFGHIJKLMNOPQRSTU VWXZ') coduri_ASCII_ majuscule = Columns 1 through 11 65 66 67 68 69 70 71 72 73 74 Columns 12 through 22 76 77 78 79 80 81 82 83 84 85 Columns 23 through 25 87 88 90
75 86
De exemplu, urmatoarea secven MATLAB introduce tabloul nume, avnd dimensiunea 1x17 i matricea functia cu dimensiunea 1x24:
nume='Popescu J. Eduard' nume = Popescu J. Eduard functia='Director General Adjunct' functia = Director General Adjunct
Caracteristicile matricei nume, se listeaz cu funcia whos:
whos nume Name nume Size 1x17 Bytes 34 Class char array
adica : matricea nume are dimensiunea 1x17, se stocheaz n memorie ocupnd 34 bii i este din classa char array (tablou de caractere). Matricile de caractere se pot concatena pentru crearea unei noi matrici, folosind funcia MATLAB strcat() sau operatorul MATLAB de concatenare [ ]. De exemplu, pentru concatenarea celor dou tablouri de mai sus, se folosete secvena MATLAB :
124
whos Nume_si_Functia Name Size Bytes Class ans 1x42 84 char array Grand total is 42 elements using 84 bytes
Concatenarea a dou tablouri pentru transformarea ntr-o matrice cu dou linii, folosete algoritmul de introducere a datelor ca matrice (paranteze drepte):
numele_si_functia=['Popescu J. Eduard ';'Director General Adjunct'] numele_si_functia = Popescu J. Eduard Director General Adjunct whos numele_si_functia Name Size Bytes numele_si_functia 2x24 96 Grand total is 48 elements using 96 bytes Class char array
Se observ diferena fa de cazul afirii textului intr-o singur linie:matricea nou avnd dimensiunea 2x24, fa de o linie cu 42 elemente, la prima variant, iar pentru stocare sunt ocupai 96 bii de memorie, fa de 84 n prima variant, classa este aceeai char array.
125
MATLAB utilizeaz funcia double() pentru convertirea irului de caractere n codurile numerice ale acestora, respectiv funcia char() pentru reprezentarea acestor valori n ir de caractere:
nume_si_functia_numeric=double(nume_si_functia)
nume_si_functia_numeric =
Columns 1 through 12 80 111 112 101 115 68 105 114 101 99 Columns 13 through 24 100 117 97 114 100 101 114 97 108 32 99 117 32 74 46 32 69 116 111 114 32 71 101 110 32 32 32 32 32 32 32 65 100 106 117 110 99 116
Se observ c matricea nume_si_functia (cu 2 linii i 24 coloane) a fost convertit ntr-o matrice cu aceleai dimensiuni dar n reprezentare numeric, nume_si_functia_numeric. De exemplu, pentru verificare, se poate folosi urmtoarea secven:
126
Pentru revenirea la forma anterioar (matrice cu caractere) se folosete secvena: nume_si_functia=char(nume_si_functia_numeric) nume_si_functia = Popescu J. Eduard Director General Adjunct Codurile ASCII, sunt convertite n caractere folosind funcia MATLAB
127
Operaiile cu matrici i tablouri de valori pot fi extinse la irurile de caractere. De exemplu, dac p este un ir de caractere (n cazul de fa m), atunci expresia char(p+1) returneaz litera urmtoare din alfabet:
char(p+1) ans = n
Relaia dintre caractere i codurile ASCII, ale acestora, permite efectuarea operaiilor aritmetice cu acestea. De exemplu, instruciunea urmtoare va realiza mprirea numrului reprezentnd codul ASCII al caracterului < (cod 60), la numrul reprezentnd codul ASCII al caracterului x (120) :
fprintf('%40s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I fprintf('%-40s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I fprintf('%20s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I fprintf('%-20s I\n','IMPARATUL NAPOLEON') IMPARATUL NAPOLEON I
128
s1='ann'; s2='ban'; s1<s2 ans = 1 0 0 n acest exemplu, caracterul de pe prima poziie, din irul s1 are valoare mai mic dect caracterul corespunztor din irul s2, rezultatul afiat fiind, n consecin 1, n timp ce, celelalte elemente ale irului s1 sunt mai mari sau egale dect valorile caracterelor de pe poziiile corespunztoare ale irului s2, rezultatul afiat fiind 0, ntruct rezultatul comparrii este fals. Dac irurile nu au aceeai dimensiune (acelai numr de caractere), folosirea operatorilor relaionali este improprie, MATLAB afind un mesaj de eroare : s3='anna'; s2='ban'; s3>s2
??? Error using ==> > Array dimensions must match for binary array op.
??? Eroare la utilizarea operatorului > Dimensiunile structurilor trebuie sa corespund pentru efectuarea operaiilor binare
Compararea irurilor cu dimensiuni diferite se realizeaz cu funcia MATLAB strcmp(si,sj), care va afia valoarea logic 1, dac cele dou iruri sunt identice, respectiv, valoarea logic 0, dac cele dou iruri au valori diferite ale codurilor ASCII:
strcmp(s2,s3) ans = 0
Funciile specifice operaiilor i operaiunilor cu iruri de caractere sunt prezentate folosind : help matlab\strfun.
129
irurile de caractere bi-dimensionale se pot crea exact ca i matricile, cu excepia faptului c fiecare linie trebuie s aib acelai numr de caractere (acelai numr de coloane), n caz contrar se va afia un mesaj de eroare care avertizeaz utilizatorul asupra acestui aspect (rezolvarea problemei este simpl dac se introduce un numr necesar de spaii libere, blank-uri) :
nume_si_adresa=['Albert Durrer ';'21 Bruxelles Ave';'New York '] nume_si_adresa = Albert Durrer 21 Bruxelles Ave New York numesiadresa=['Albert Durrer';'21 Bruxelles Ave';'New York'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.
??? Eroare la utilizarea vertcat(concatenarea vertical) Toate liniile, din parantezele drepte, trebuie sa aib acelai numr de coloane O metod simpl pentru realizarea structurilor bi-dimensionale, cu iruri de caractere, este aceea folosind funcia MATLAB char(), care seteaz automat numrul de coloane necesare pe fiecare linie:
nume_si_adresa=char('Albert Durrer','21 Bruxelles Ave','New York') nume_si_adresa = Albert Durrer 21 Bruxelles Ave New York
De observat c dac structura nume_si_adresa se apeleaz cu subscript, pentru extragerea elementelor, acestea sunt afiate n ordinea clasic a vectorilor liniari (vectori coloan), elementele fiind citite pe coloan ncepnd cu primul element al coloanei nti :
130
numesiadresa=['Albert Durrer ';'21 Bruxelles Ave';'New York '] numesiadresa = Albert Durrer 21 Bruxelles Ave New York numesiadresa(1:3) ans = A2N numesiadresa(1:4) ans = A2Nl numesiadresa(1:20) ans = A2Nl1eb weB rrYtuo x
131
Dup introducerea funciei MATLAB input() apare linia de comand de ateptare , prin care utilizatorul este invitat s introduc expresia funciei de variabil x :
Structurile definite, pn acum, n MATLAB, au avut elementele date ori numai ca numere, ori numai ca iruri de caractere. MATLAB permite definirea structurilor de date prin introducerea diferitelor tipuri de date n diferite cmpuri. De exemplu, se poate crea o structur, numit student (de exemplu), cu un cmp alocat numelui :
132
student.legitimatie='JUANCA0123';
respectiv, un cmp pentru calificativele primite :
student.calificative=[7 9 6 5];
Pentru a vedea ntreaga structur, se introduce, de la tastatur, n linia de comand, numele acesteia:
133
n structura cu numelestudent cmpurile alocate primului nume, vor putea fi accesate folosind indicele de subscriere 1, dup numele structurii student:
student student = 1x2 struct array with fields: nume legitimatie calificative
Un sumar asemntor este afiat dac se apeleaz funcia MATLAB fieldnames(): fieldnames(student) ans = 'nume' 'legitimatie' 'calificative' Pre-alocarea cmpurilor i definirea unei structuri se poate realiza folosind i funcia MATLAB struct(). Cmpul unei structuri poate conine orice tip de date, chiar i o alt structur. De exemplu, se poate crea o structur, fie numele acesteia cursuri, care s conin date privind cursurile susinute de studeni, n care un cmp va fi alocat titlului cursului, i alt cmp va conine structura student, creat anterior:
134
cursuri.titlu='Metode numerice'; cursuri.grupa=student; cursuri cursuri = titlu: 'Metode numerice' grupa: [1x2 struct]
Se poate aloca un al doilea element structurii cursuri, s presupunem, pentru un alt curs: cursuri(2).titlu='Metode numerice IMT'; cursuri(2).grupa=student; Pentru a afia titlurile cursurilor se folosete instruciunea: cursuri(1:2).titlu ans = Metode numerice ans = Metode numerice IMT Pentru a se afia numele studenilor participani la cursuri, se folosete instruciunea:
135
Celula este entitatea cea mai comun n MATLAB. Celula poate fi asimilat cu un conteiner de date care poate conine orice tip de date:tablouri de valori numerice, sau iruri de caractere, structuri sau celule.
Definirea celulelor
Indexare: Considernd c structura student, creat n paragraful anterior, exist stocat n memoria calculatorului, se poate defini o structur celular (2x2) prin atribuirea datelor din celulele specificate:
c(1,1)={rand(3)}; c(1,2)={char('Bonzai','Makay')}; c(2,1)={13}; c(2,2)={student}; c c= [ 3x3 double ] [ 2x6 char ] [ 13] [ 1x2 struct ]
n aceast grupare de instruciuni, parantezele rotunde din partea stng a semnului de atribuire (=), au acelai rol ca i n cazul tablourilor de valori, sau al matricilor, avnd semnificaia de referire la un anumit element al structurii celulare. Ceea ce difereniaz structurile celulare de tablourile de valori, este utilizarea parantezelor acolade ({ }), n partea dreapt a semnului de atribuire. Aceste caractere ({ }), folosite numai n partea dreapt a semnului de atribuire, arat coninutul unei celule, avnd rol de constructori ai structurii celulare. Dac aceste caractere ({ }), sunt folosite n alte situaii, atunci acestea se refer la elementul specificat n interiorul parantezelor. De exemplu, instruciunea:
cellplot(c)
afieaz, ntr-o figur separat, structura celular c:
136
iar instruciunea:
celldisp(c)
afieaz, n fereastra de comand, structura celular c:
c{1,1} = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 c{2,1} = 13 c{1,2} = Bonzai Makay c{2,2} = 1x2 struct array with fields: nume legitimatie calificative
Apelarea, n linia de comand, a elementelor structurii celulare, se realizeaz folosind parantezele acolade, n combinaii cu parantezele rotunde, sau
137
drepte. Astfel, apelarea celulei de pe poziia 1, respectiv afiarea coninutului acestei celule, se realizeaz cu instruciunea:
c{1} ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214
Elementul de pe poziia (2,3), al celulei 1, se apeleaz cu instruciunea:
c{2} ans = 13 c{3} ans = Bonzai Makay c{4} ans = 1x2 struct array with fields: nume legitimatie calificative
De observat c elementele unei structuri celulare sunt citite pe coloan.
138
Trebuie reamintit faptul c matricile sunt caracterizate prin cele dou dimensiuni:numrul de linii i numrul de coloane. Astfel, n figura de mai jos se poate vedea c, dac fiecare locaie a grilei reprezint un element al matricei, atunci, un element al matricei poate fi accesat prin apelarea sa cu doi indici reprezentnd numrul liniei, respectiv al coloanei pe care acesta se regsete n matricea dat. Structurile multidimensionale utilizeaz indici suplimentari pentru apelarea unui element. Astfel, o structur tri-dimensional utilizeaz trei indici de apel: Primul indice reprezint linia; Al doilea indice reprezint coloana; Al treilea indice reprezint pagina. Reprezentarea schematic a unei structuri multidimensionale se regsete n figura urmtoare:
139
Pentru crearea structurilor celulare multidimensionale se folosesc, n principiu, tehnici similare celor pentru generarea matricilor bi-dimensionale. n plus, specific structurilor multidimensionale, MATLAB dispune de funcii speciale de concatenare. Generarea structurilor celulare multidimensionale este posibil prin: A). Utilizarea indexrii ; B). Utilizarea funciilor MATLAB ; C). Utilizarea funciei cat().
A(:,:,2)= [1 0 4; 3 5 6; 9 8 7] A(:,:,1) = 5 7 8 0 1 9 4 3 6 A(:,:,2) = 1 0 4 3 5 6 9 8 7 B). Generarea structurilor multidimensionale prin funcii MATLAB
Se pot foslosi funciile MATLAB, cum ar fi randn(), zeros(), ones(), pentru generarea structurilor multidimensionale, exact ca n cazul matricilor bi-
140
dimensionale:
retea_arbitrara = randn(6,5,2) retea_arbitrara(:,:,1) = -0.1199 -0.0793 0.0359 0.1326 -0.0653 1.5352 -0.6275 1.5929 0.4853 -0.6065 0.5354 1.0184 -0.5955 -1.3474 0.5529 -1.5804 -0.1497 0.4694 -0.2037 -0.0787 -0.4348 -0.9036 -2.0543 -0.6817 retea_arbitrara(:,:,2) = -0.4650 1.0378 1.9574 0.3710 -0.3898 0.5045 0.7283 -1.3813 1.8645 2.1122 0.3155 -0.3398 -1.3573 1.5532 -1.1398 -1.0226 0.7079 -0.2111 1.1902 -1.1162 0.6353 -0.6014 0.5512 -1.0998
-1.0246 -1.2344 0.2888 -0.4293 0.0558 -0.3679 0.0860 -2.0046 -0.4931 0.4620 -0.3210 1.2366
141
142
143
APLICAII
[1]: e2 Fie: a = 4 4 6 2e 5
1 3 ln 5 ,b = 5 6e lg 5 9 log 4 7 8e 5 2 ,c=2 6 3
37 d = e2 ln 3 8
e 6
3 , 3e
S se calculeze: produsele:ab;ac;ca;cb; ad
S se calculeze: a:b;a:c;c:a;c:b.
144
145
CAPITOLUL IV
Semnificaia Mai mic dect Mai mic sau egal cu Mai mare dect Mai mare sau egal cu Identic cu Diferit de
Dup executarea operaiei, MATLAB afieaz o matrice, identic dimensional cu cele comparate, avnd ca elemente simbolurile 1(unu) respectiv 0(zero), dup cum relaia dintre elementele comparate este ADEVRAT (TRUE) respectiv FALS (FALSE). Forma general a sintaxei este: Rezultat=expresie_1 operator relaional expresie_2 n care : -Rezultateste o matrice cu elementele 0 i 1, obinut prin compararea celor dou expresii; -expresie_1 -expresie_2-
-operator relaional-
Ex.: 1 2 3 S se compare elementele matricei A = 4 5 6 cu scalarul B = e 2 log 3 5 . 7 8 9 Folosind secvana MATLAB urmtoare:
146
0 0 1
A==B ans =
0 0 1
0 1 1
0 0 0
A~=B ans =
0 0 0
0 0 0
1 1 1 Ex.:
1 1 1
1 1 1
1 0 1
0 0 0
0 0 0
147
0 0 0
0 0 0
1 1 1
1 1 1
1 1 1
1 1 1
0 0 0
0 0 0
1 1 1
1 1 1
OPERATORI LOGICI
MATLAB utilizeaz trei operatori logici principali i unul auxiliar:
Operatori logici NU I SAU SAU, exclus I Simbolizare ~ & | Semnificaie NOT AND OR XOR Prioritate 1 2 3 4
148
Aceti operatori lucreaz ca i cei relaionali, element cu element, dar numai cu matrici sau tablouri avnd elemente logice: 0 sau 1. Dac elementele unei matrici sunt zero i 1 sau valori diferite de zero, atunci cele diferite de zero se seteaz, automat, la valoarea logic 1. Obs: Operatorii logici nu pot fi folosii n combinarea a dou expresii simbolice (syms).
PRECEDENA OPERATORILOR
Precedena operatorilor determin ordinea n care MATLAB realizeaz evaluarea expresiilor. Ordinea n care sunt executate operaiile i prioritatea operatorilor, n MATLAB, este caracterizat de urmtoarele nivele, ordonate dinspre nivelul superior spre nivelul inferior: 1. Parantezele ( ) 2. Transpunerea (.), puterea (.^), transpunerea conjugat complex (), puterea matricilor (^); 3. Adunarea unar (+), scderea unar (-), negarea logic (~); 4. nmulirea (.*), mprirea la dreapta (./), mprirea la stnga (.\), nmulirea matricilor (*), mprirea la dreapta a matricilor (./), mprirea la stnga a matricilor (.\); 5. Adunarea (+), scderea (-); 6. Operatorul columnar (:); 7. Operatorii relaionali: mai mic dect (<), mai mic sau egal dect (<=), mai mare dect (>),mai mare sau egal dect (>=), egal cu (==), diferit de (~=); 8. Operatorul logic I (&); 9. Operatorul logic SAU (|); Prioritatea maxim o are operatorul NU, ceilali operatori logici avnd prioritate egal, execuia acestora fiind dat de regula de la stnga la dreapta. Prioritatea de la stnga la dreapta genereaz echivalena ntre dou expresii relaionale. Astfel, expresia a|b&c este echivalent cu (a|b)&c. Oricum, n cele mai multe dintre limbaje, expresia a|b&c este echivalent cu a|(b&c), ceea ce denot, de altfel, prioritatea operatorului & fa de |. Pentru a exista compatibilitatea cu viitoarele versiuni MATLAB este indicat ca utilizatorul sa foloseasc paranteze pentru a se specifica prioritatea de execuie a operatorilor & respectiv |. Urmtoarele dou expresii ilustreaz prioritatea operatorilor:
149
1|0&0=0 0&0|1=1
Tabelul de adevr al acestor operatori este:
Date de intrare A 0 0 1 1 B 0 1 0 1
and 0 0 0 1
Or 0 1 1 1
xor 0 1 1 0 1 1 0 0
not 1 0 1 0
CUVINTE CHEIE
MATLAB rezerv o list de cuvinte cheie, list care poate fi afiat, pentru evitarea erorilor de evaluare i de redactare a expresiilor logice, cu funcia iskeyword, n linia de comand MATLAB:
[Cuvinte_cheie]=iskeyword Cuvinte_cheie = 'break' 'case' 'catch' 'continue' 'else' 'elseif' 'end' 'for' 'function' 'global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'
150
151
e x 3 4 dac 6 x < 4 3 , pentru valorile ntregi ale f = log 5 x 2 + 2 + x 4 + 3 dac 4 x 10 5 3 dac 10 < x 15 2 x 4 +5 0,456 e variabilei x. Se va folosi urmtoarea secven MATLAB (pentru simplificare se va utiliza funcia length(x) i o bucl repetitiv for, care va fi prezentat n seciunea urmtoare):
x=-6:15; for k=1:length(x) if x(k)<-4 f(k)=exp(x(k)-3)-4 elseif (x(k)>=-4)&(x(k)<=10) f(k)=(log(x(k)^2+(2+sqrt(x(k)^4+3))^(1/3))) else f(k)=det([pi,3^(1/5);0.456,exp(x(k)^2-4)]) end end Rezultatul afiat de MATLAB este urmtorul :
se prezint aici numai valoarea final a expresiei f, valorile intermediare fiind omise, pentru acurateea prezentrii
152
for index=expresie
grup_de_instruciuni
end
n care : index reprezint contorul de iterare expresie- este o matrice, un scalar sau, de cele mai multe ori, o expresie de forma :
De la
Pn la
Regulile specifice buclei for sunt: 1) dac expresia atribuit indexului este un scalar, bucla se execut o singur dat, valoarea indexului fiind valoarea scalarului 2) dac expresia indexului este un vector linie, bucla se execut de n ori, unde n reprezint dimensiunea vectorului ; 3) dac expresia este o matrice, indexul va lua toate valorile matricei pe coloan ; 4) dac expresia este de forma : valoare iniial : pas : valoare final , iar pasul are valoare pozitiv, atunci valoarea iniial trebuie sa fie mai mic dect valoarea final ; 5) dac expresia este de forma : valoare iniial : pas : valoare final , iar pasul are valoare negativ, atunci valoarea iniial trebuie sa fie mai mare dect valoarea final ; 6) dac expresia este de forma : valoare iniial : valoare final , atunci pasul de indexare este, implicit, 1 (unu). Un exemplu foarte simplu pentru utilitatea instruciunii de ciclare for, ar fi calculul factorialului unui numr natural. Dac se cere calculul numrului de permutri (factorialul), aferente lui n=10, se folosete urmtoarea secven de instruciuni:
153
Rezultatul afiat n fereastra de comand, la apsarea tastei ENTER, este: 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 Multe probleme n inginerie presupun dezvoltarea unui model matematic pentru caracterizarea unui proces, n care variabila principal este actualizat ciclic de-a lungul unei perioade de timp. Aceast operaie se numete actualizare. Pentru a exemplifica, se consider un proces de actualizare a temperaturii unui corp, a crui temperatur iniial este 25 oC, amplasat ntr-un mediu a crui temperatur este 10 oC, dup un interval de meninere la temperatura mediului, de 100 minute. Modul de abordare a acestui tip de probleme este o cale standard: se divide intervalul de timp n sub-intervale egale (pai), de lungime dt; dac temperatura de start este Ti, atunci se va folosi urmtorul model matematic, pentru calculul temperaturii la un moment i+1, Ti+1:
Ti +1 = Ti K dt (Ti Tf )
n care, K este un coeficient (valoarea K=0,05) care ine seama de imperfeciunile mediului, iar Tf este temperatura final (Tf=10 oC). Fiierul script realizat pentru rezolvarea problemei de actualizare, stabilete valoarea iniial a intervalului de timp (a=0), respectiv final (b=100 minute). Dac intervalul de afiare nu este un multiplu de pasul de calcul, se va afia un mesaj de eroare Intervalul de afisare nu este un multiplu de dt !:
K = 0.05;
154
Tf = 10; %temperatura finala a = 0; % momentul initial b = 100; % intervalul de timp Timp_initial = a; % initializarea intervalului de timp T = 25; % initializarea temperaturii dt = input( 'dt: ' ); % intervalul de calcul (pasul) Intervalul_de_afisare = input('Afisarea rezultatelor la interval de (minute):' ); if Intervalul_de_afisare/dt ~= fix(Intervalul_de_afisare/dt) disp( 'Intervalul de afisare nu este un multiplu de dt !' ); end format bank disp( ' Timp Temperatura' ); disp( [Timp_initial T] ) % afiseaza momentul actualizarii si temperatura for Timp_actualizare = a+dt : dt : b T = T - K * dt * (T - Tf); if abs(rem(Timp_actualizare, Intervalul_de_afisare)) < 1e-6 disp( [Timp_actualizare T] ) end end %FINAL PROGRAM
Dup ultima linie de instruciuni, end, (la apsarea tastei ENTER), se afieaz, n linia de comand un mesaj prin care se cere utilizatorului s introduc pasul dt, apoi se cere stabilirea intervalului de afiare a rezultatelor, dup un interval de timp: Afisarea rezultatelor la interval de (minute):. Pentru exemplificare, se va rula, acest fiier, n dou variante (dt=0.2 i Intervalul_de_afisare=5, respectiv dt=0.3 i Intervalul_de_afisare=1.33), rezultatele fiind: Varianta I (dt=0.2 i Intervalul_de_afisare=5 ) dt: .2 Afisarea rezultatelor la interval de (minute): 5 Timp Temperatura 0 25.00 5.00 21.67 10.00 19.08 15.00 17.06 20.00 15.49 25.00 14.27
155
Varianta II (dt=0.3 i Intervalul_de_afisare=1.33 ) dt: .3 Afisarea rezultatelor la interval de (minute): 1.33 Intervalul de afisare nu este un multiplu de dt ! Timp Temperatura 0 25.00 39.90 12.01 79.80 10.27
Ex. : S se calculeze i s se reprezinte grafic funciile : a) f = sin x dac x [ 2 ,2 ] , cu pasul de indexare de 0,1; e m + 2 daca m [ 10,2] 2 daca m (2,8] cu pasul de indexare de 0,3. b) g = log m 2 7 5 + 19 daca m (8,25] 3
156
se obin valorile funciei f, care vor fi afiate dac se tasteaz, n linia de comand, numele acesteia, i, ntr-o fereastr grafic Figure 1 reprezentarea funciei f :
1 0 .8 0 .6 0 .4 0 .2 0 -0 .2 -0 .4 -0 .6 -0 .8 -1 -8
-6
-4
-2
b) Pentru funcia g se folosete secventa de program: m=25:-0.3:-10; for k=1:length(m) if (m(k)>=-10)&(m(k)<=2) g(k)=exp(m(k))+2 elseif (m(k)>2)&(m(k)<=8) g(k)=-2 elseif (m(k)>8)&(m(k)<=25) g(k)=(log(m(k)^25^(1/7))+19)/log(3) end end plot(m,g)
25
20
15
10
-5 -10
-5
10
15
20
25
Ex.: Un fiier script care genereaz petale : theta = -pi:0.01:pi; rho(1,:) = 2*sin(5*theta).^2; rho(2,:) = cos(10*theta).^3; rho(3,:) = sin(theta).^2; rho(4,:) = 5*cos(3.5*theta).^3; for i = 1:4 polar(theta,rho(i,:)) pause end
157
Ex.: O secven de instruciuni care genereaz zone de culoare cu intensiti diferite : [x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading interp hold off
Ex. 7 O secven de instruciuni care mparte o figur n mai multe pri: t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X) subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z)
Ex.: O secven de instruciuni care genereaz o matrice: m=4;n=3; for i = 1:m for j = 1:n A(i,j) = 1/(i + j - 1); end end A= Columns 1 through 8 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 0.2500 0.2000 0.1667 0.2000 0.1667 0.1429
158
Ex.: Un fiier care genereaz o matrice (s-au introdus, aici, i linii de help, folosind modul de scriere MATLAB, linia de text, care conine informaia, este precedat de caracterul %): for i = 1:10 A(i,i) = 1; % se introduce cifra 1, pe diagonala principal if (i > 1) A(i,i-1) = 2; % se introduce cifra 2, n faa diagonalei principale, dar numai pe
ultimele 9 linii,
end if (i < 10) A(i,i+1) = 5; % se introduce cifra 5, n dreapta diagonalei principale, dar numai
pe primele 9 linii,
end end
Dac se tasteaz numele matricei (A), se afieaz urmtorul rezultat:
A= 1 2 0 0 0 0 0 0 0 0
5 1 2 0 0 0 0 0 0 0
0 5 1 2 0 0 0 0 0 0
0 0 5 1 2 0 0 0 0 0
0 0 0 5 1 2 0 0 0 0
0 0 0 0 5 1 2 0 0 0
0 0 0 0 0 5 1 2 0 0
0 0 0 0 0 0 5 1 2 0
0 0 0 0 0 0 0 5 1 2
0 0 0 0 0 0 0 0 5 1
Ex. : Un fiier script de operare cu matrici: m1=[-4 1 0; 1 -4 1; 0 1 -4] m2=eye(3) m3=zeros(3,3) a=[m1 m2 m3; m2 m1 m2; m3 m2 m1] b=[-100; -100; -100; 0; 0; 0; 0; 0; 0] a\b
159
ans = 42.8571 52.6786 42.8571 18.7500 25.0000 18.7500 7.1429 9.8214 7.1429
Ex. : Un fiier script de operare cu matrici: k(1)=1.5; k(2)=1; k(3)=1.5; k(4)=2; l(1)=0.3; l(2)=0.1; l(3)=0.2; l(4)=0.2; b=zeros(4,1); for i=1:3 b(i)=k(i)*l(i)-k(i+1)*l(i+1); end b(4)=1; m=zeros(4,4); for i=1:3 m(i,i)=k(i)+k(i+1); m(i+1,i)=-k(i+1); m(i,i+1)=-k(i+1); end m(4,4)=1; m(4,3)=0; b m x=m\b
Rezultatele sunt :
160
1.0000
x= 0.3471 0.5176 0.7647 1.0000
m= 2.5000 -1.0000 0 0
0 -1.5000 3.5000 0
0 0 -2.0000 1.0000
Ex.: Un fiier script de operare cu matrici: coord(1,1)=-0.6; coord(1,2)=0; coord(2,1)=-0.9; coord(2,2)=1.5; coord(3,1)=-1.6; coord(3,2)=1.8; coord(4,1)=0; coord(4,2)=2.7; coord(5,1)=1.6; coord(5,2)=1.8; coord(6,1)=0.9; coord(6,2)=1.5; coord(7,1)=0.6; coord(7,2)=0; c(1,1)=1; c(1,2)=2; c(2,1)=2; c(2,2)=3; c(3,1)=3; c(3,2)=4; c(4,1)=4; c(4,2)=5; c(5,1)=5; c(5,2)=6; c(6,1)=6; c(6,2)=7;
161
162
Acest fiier script, rulat n MATLAB, la apsarea tastei ENTER, va avea ca efect afiarea urmtoarelor rezultate:
m= -0.1961 0.9191 0 0 0 0 0 0.9806 -0.3939 0 0 0 0 0 0 -0.9191 -0.8716 0 0 0 0 0 0.3939 -0.4903 0 0 0 0 0 0 0.8716 -0.8716 0 0 0 0 0 0.4903 0.4903 0 0 0 0 0 0 0.8716 0.9191 0 0 0 0 0 -0.4903 0.3939 0 0 0 0 0 0 -0.9191 0.1961 0 0 0 0 0 -0.3939 0.9806 0 0 0 0 0 0 -0.1961 0.3714 b= 0 0 0 -10 0 0 0 0 0 0 0 d= -2.1265 -3.7535 3.8868 1.1340 -0.4106 -0.2326 -0.1228
163
Un fiier pentru calculul elementelor traiectoriei unui proiectil (vitez, inlime, distan) lansat sub un anumit unghi fa de orizontal, sub aciunea gravitaiei:
dt = 0.1; g = 9.8; u = 60; Alfa = input( 'Introduceti unghiul de lansare al proiectilului: ' ); Radian = Alfa * pi / 180; % conversia in radiani x_initial = zeros(1); y_initial = zeros(1); % initializare y = 0; t = 0; i = 1; % initial vector subscript while y >= 0 t = t + dt; i = i + 1; y = u * sin(Radian) * t - g * t^2 / 2; if y >= 0 Distanta_pe_x(i) = u * cos(Radian) * t; Inaltimea_pe_y(i) = y; end end plot(Distanta_pe_x, Inaltimea_pe_y,'k'), grid on; hold on
Dup rularea fiierului se afieaz invitaia adresat operatorului de a introduce datele de iniializare (unghiul de lansare), i realizarea calculelor necesare reprezentrii grafice a traiectoriei proiectilului: Pentru cinci unghiuri de lansare diferite, rezult graficul din figur.
164
APLICAII
[1]:
2 1 3 C = 3 2 2 5 4 1
cu elementele
1 2 4 matricei A = 3 0 5 ; 2 1 3
[3]:
2 1 3 ; Y = 3 2 2 cu 5 4 1
[5]:
S se realizeze un fiier script pentru afiarea unei matrici cu dimensiunea 3x4 n care elementele primei linii s difere printr-o constant, numr natural, elementele celei de-a doua linii s difere prin constanta e2, iar elementele ultimei linii sa difere prin ln8.
165
S se actualizeze fiierul de mai jos astfel nct s se afieze nc dou butoane la alegere : k=0; while k~=3 k=menu('Faceti clic pe una dintre optiuni','Fa asta','Fa alta', 'Iesire'); if k==1 disp('Fa asta...Apasa orice cheie pentru a continua...') pause elseif k==2 disp('Fa alta...Apasa orice cheie pentru a continua...') pause end end
[7]:
S se actualizeze fiierul de mai jos astfel nct s se afieze nc dou subgrafice, cu titlurile (c) i (d):
subplot(2,2,1) plot(rand(1, 20)),title('(a)') subplot(2,2,2) axis([0 4 0 4]) plot([0 4], [0 0], [1 1 2 3 3], [0 2 3 2 0]),title('(b)')
166
[8]:
S se actualizeze fiierul de mai jos astfel nct s se afieze 8, 12, 24 de petale: x = 0:pi/40:2*pi; polar(x, sin(2*x)),grid
167
[10]:
S se actualizeze fiierul de mai jos astfel nct pasul de desenare s fie mai mic, respectiv, n alt variant, s fie mai mare:
% ' none' afieaz toate punctele axis([0 20*pi -2 2]) for x = dx:dx:20*pi; x = x + dx; y = sin(x); set(p, 'XData', x, 'YData', y) pause(0.05) end
168
[11]:
S se actualizeze fiierul de mai jos astfel nct sombrero-ul s fie nclinat spre stnga sau spre dreapta, i lumina s cad din dreapta :
[x y ] = meshgrid(-8 : 0.5 : 8); r = sqrt(x.^2 + y.^2) + eps; z = sin(r) ./ r; surf(x,y,z,'facecolor','interp','edgecolor','none', ... 'facelighting','phong')
169
[12]:
S se actualizeze fiierul de mai jos astfel nct imaginea reprezentrii grafice s fie amplasat pe o matrice grafic de 3 linii i 3 coloane (ca n figur): subplot(3,3,1) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted, subplot(3,3,2) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted, subplot(3,3,3) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,4) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,5) x = 0:pi/20:pi;
170
bar(x,sin(x),'w'), shading faceted subplot(3,3,6) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,7) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,8) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted subplot(3,3,9) x = 0:pi/20:pi; bar(x,sin(x),'w'), shading faceted [13]:
S se actualizeze fiierul de mai jos astfel nct utilizatorul s fie solicitat s introduc viteza iniial i timpul total al micrii
g = 9.8; v0 = 60; t = 0 : 0.1 : 12.3; s = v0 * t - g / 2 * t .^ 2; plot(t, s), title( 'Miscarea pe verticala sub actiunea gravitatiei' ) xlabel( 'Timpul' ), ylabel( 'Inaltimea' ), grid disp( [t' s'] )
171
CAPITOLUL V
CALCULE NUMERICE CU POLINOAME
Pentru operarea cu polinoame, MATLAB utilizeaz funciile standard din tabelul urmtor:
Funcia conv(p,q) [C,R]=deconv(p,q) 1. 2. 1. 2. 3. 1. 2. 3. poly(r) poly(A) polyder(p) polyder(p,q) [A,B]=polyder(p,q) polyfit(x,y,n) [p,S]=polyfit(x,y,n) [p,S,miu]=polyfit(x,y, n) polyval(p,x) polyval(p,q) Descriere -produsul polinoamelor p i q -Ctul, C, i restul R al mpririi polinoamelor p i q 1. -determin polinoamele cu rdcini date n vectorul coloan r 2. -determin coeficienii polinomului caracteristic ai matricei ptratice A 1. -derivata polinomului p 2. -derivata produsului polinoamelor p i q 3. -derivata fraciei raionale p/q 1. aproximeaz un set de date x i y cu un polinom de gradul n 2. aproximeaz un set de date x i y cu un polinom de gradul n 3. aproximeaz un set de date x i y cu un polinom de gradul n 1. evaluarea polinomului p n punctul x, sau pe intervalul x 2. evaluarea polinomului p n punctele vectorului q -evaluarea polinomului n elementele matricei ptratice A -descompunerea raportului a dou polinoame a i b n fracii simple, avnd ca rezultat vectorul coloan al reziduurilor, r, vectorul coloan al polilor, p, i k - vectorul linie al polinomului ct (A/B) -calculeaz rdcinile unui polinom p
1. 2.
polyvalm(A) [r,p,k]=residue(a,b)
roots(p)
172
REPREZENTAREA POLINOAMELOR
Polinoamele sunt reprezentate, in MATLAB, ca vectori linie, coninnd coeficienii ordonai dup puterile descresctoare ale variabilei. Forma general a polinoamelor, n scrierea algebric: f(x) = anxn+an-1xn-1+.....+a2x2+a1x+a0 iar reprezentarea acestuia, n MATLAB, este dat prin vectorul linie f=[a_n,a_n_1,...,a2,a1,a0], n care elementele sunt reprezentate de coeficienii polinomului de grad n. De exemplu, polinomul p(x)=x4 +7x3+x-8 se introduce astfel:
p=[1,7,0,1,-8] Ex. Fie polinoamele: f(x) = x3+2x2+0,5x-6,5 ; h(x)=x5+2x2-6 3 5 Aceste polinoame se scriu, n MATLAB: f = [1,2, 0.5, -6.5]; h=[1,0,0,2,0,-6*(5^(1/3))];
Obs.: n polinomul h(x) coeficienii lui x4, x3 respectiv x, care lipsesc, sunt nlocuii cu valoarea 0 (zero). Altfel, MATLAB va introduce un polinom de grad inferior celui real (de exemplu, dac h(x) ar fi introdus de la tastatur numai cu coeficienii h=[1,2,-6*(5^(1/3))] acesta reprezint polinomul h(x)=x2+2x--6 3 5 )
PRODUSUL POLINOAMELOR
Produsul a dou polinoame se realizeaz, n MATLAB, folosind funcia
conv() :
c = conv(a, b) unde :
173
MPRIREA POLINOAMELOR
Pentru realizarea mpririi a dou polinoame se folosete funcia MATLAB deconv() : [c, r] = deconv(a, b) n care :
c - vectorul coeficienilor polinomului ct r - vectorul coeficienilor polinomului rest Polinoamele c(x) i r(x) respect teorema mpririi cu rest (p(x)=d(x)*c(x)+r(x), n care p(x) este polinomul- demprit, d(x) reprezint p( x ) r( x) = c( x ) + ) polinomul- mpritor : d( x ) d( x )
S se calculeze ctul i restul mpririi polinoamelor h1(x)= x3+2x2-2 i h2(x)= x2+x, folosind o funcie MATLAB. -n MATLAB:
Ex.:
174
r = roots(a) n care:
f = [1 -2 -3 10] r=roots(f)
175
Polinomul cu rdcinile x1; x2; x3 se scrie, folosind forma general a unui polinom (pentru care se cunosc sumele Vite p(x)=xn-S1xn-1+S2xn-2-......-Sn ) devine: p(x) = x3-9x2+26x-24.
b=[2;3;4]; p=poly(b) p= 1 -9
26 -24
Polinomul p(x), n format algebric, uzual, se scrie p(x) = x3-9x2+26x-24 . Cu funcia poly(), se determin i coeficienii polinomului caracteristic al unei matrici ptratice. De exemplu, cu secvena urmtoare, se determin polinomul ale carui rdcini (se mai numesc i rdcini caracteristice) sunt valorile proprii ale matricei (valorile proprii ale matricei se determin cu funcia MATLAB eig()):
A = [1.2 3 -0.9; 5 1.75 6; 9 0 1]; p=poly(A) p= 1.0000 -3.9500 -1.8500 -163.2750 radacini=roots(p) radacini = 7.2826 -1.6663 + 4.4321i -1.6663 - 4.4321i valorile_proprii=eig(A) valorile_proprii = 7.2826 -1.6663 + 4.4321i -1.6663 - 4.4321i
176
Ex.: 2.
n MATLAB, se declar, mai nti, valoarea variabilei, apoi se introduce polinomul de evaluat, folosind regulile standard:
x = 2; f = 3*(x^4)-5*(x^3)+3*x-1 f= 13
177
Obs.:Dac polinomul este introdus fr caracterul punct . n faa operatorului pentru ridicare la putere:
f = 3*x^4-5*x^3+3*x-1
MATLAB afieaz mesajul: ??? Error using ==> ^ Matrix must be square.
178
c)- dac variabila este un tablou de valori (numrul de linii diferit de numrul de coloane), expresia de evaluat trebuie introdus de la tastatur folosind regulile de calcul specifice tablourilor de valori (operatorii: .^ sau .* ) altfel MATLAB afieaz un mesaj de eroare:
f=polyvalm(p,q)
n care:
p - vectorul linie al coeficienilor polinomului; q vectorul , respectiv, matricea n care se evalueaz polinomul p. Ex.:
S se determine valoarea polinomului p(x)=3x4+x3+2x2-1 n punctele vectorului q=[1,2,3,4,0], respectiv ale matricelor Q = [1 2 ; 3 4] i R = [1 2 3 ; 3 4 5].
179
f2=polyval(p,Q) f2 = 5 63 287 863 f3=polyvalm(p,Q) f3 = 647 944 1416 2063 f4=polyval(p,R) f4 = 5 63 287 863
287 2049
EVALUAREA PE INTERVALE
Dac se cere evaluarea unui polinom pe un interval n n puncte: - se mparte intervalul n n puncte, dup o regul prestabilit; - se evalueaz polinomul folosind funcia MATLAB polyval().
Ex.: S se determine valoarea polinomului p(x)=3x4+x3+2x2-1, pentru valorile x [0,5] n punctele fixe distanate la 0,2 uniti. n MATLAB: x = 0:0.2:5; p = [3 1 2 0 -1]; f = polyval(p, x)
180
f=
1.0e+003 * Columns 1 through 10 -0.0010 -0.0009 -0.0005 0.0003 Columns 11 through 20 0.0630 0.0896 0.1239 0.1672 Columns 21 through 26 0.8630 1.0419 1.2473 1.4819 0.0020 0.0050 0.0098 0.0172 0.0279 0.2210 0.2870 0.3668 0.4623 0.5755 1.7482 2.0490 0.0428 0.7083
c - vectorul linie al coeficienilor Ex.: S se calculeze derivata polinomului A(x) = x3+2x2-x+2 A = [1 2 -1 2] D = polyder(A) D= 3 4 -1
Ex.:
181
-6
Ex.:
S se determine derivata expresiei raionale: n MATLAB:
x 3 + 2x 2 x + 2 x1
2 x 3 x 2 4x 1
(x 1)2
182
Ex.:
S se calculeze suma i diferena polinoamelor: g(x) = x4-5x2+6x-1 i h(x) = x3+3x-2. n MATLAB, ntruct polinomul h(x) are gradul III, acesta va fi adus la gradul IV corespunztor polinomului g(x) prin impunerea unui coeficient fals (zero): Astfel:
183
) (
)2 (x p j )3
+ ... +
(x p j )m
ntruct descompunerea n fracii simple are ca rezultat trei vectori, funcia MATLAB residue(), se introduce cu parametri de ieire. Funcia MATLAB pentru descompunerea n fracii simple este: [r, p, k] = residue(A, B) n care:
r - vectorul coloan al reziduurilor; p - vectorul coloan al polilor; k - vectorul linie al polinomului ct (A/B) Ex.:
S se descompun n fracii simple expresia:
n MATLAB (se vor calcula, pentru comparaie, ctul polinoamelor A(x), B(x); ctul respectiv restul mpririi polinoamelor A(x), B(x) i apoi, se va descompune n fracii simple expresia A(x)/ B(x)) :
184
polii_fractiei = 5 4 coeficientii_catului = 1 3
Acest rezultat poate fi transcris, n format algebric, astfel:
x 3 6x 2 + 11x 6 x 9x + 20
2
( 6) + (x + 3) 24 + x5 x4
185
CAPITOLUL VI
CUTAREA DATELOR N TABELE
a.)
Cutarea datelor n tabele este o operaiune util n situaiile n care sunt necesare verificri ale elementelor unei matrici sau unei serii de elemente ordonate cresctor n prima coloan. Versiunile anterioare versiunii MATLAB 5.3 dispun de o funcie specific de cutare n tabele, funcia table1(tabel, xi), n timp ce, versiunile recente ale MATLAB dispun funcii specifice care realizeaz aceast operaiune (de cutare n tablouri de date) prin interpolare. Tabelul de date trebuie s fie organizat ca o matrice astfel nct n prima coloan se gsesc valorile lui x (abscisa ordonat cresctor) iar n celelalte coloane sunt valorile y corespunztoare, printre care pot fi cutate valori intermediare. Obs.: Dac x se gsete ntre dou valori din tabel funcia table1() returneaz o valoare interpolat liniar; Funcia MATLAB table1() este nlocuit n versiunile superioare ale MATLAB(ulterioare versiunii 5.3) cu funciile interp1(),interp2(), interp3(), interpft(), interplat(), interplon(), interpm(), interpn().
Ex.:
Fiind date perechile de numere (x,y) : (-2,6); (-1,2); (0,3); (2,1); (4,7) ,se cere s se gseasc valorile y corespunztoare pentru x1 = -1; x2 = 3; x3 = 3.5; x4 = 0.5; x5 = 3.75; x6 = -0.573. Soluie: -se organizeaz perechile de numere (x,y) ca matrice cu 2 coloane, apoi se folosete funcia table1(), pentru a gsi valorile cerute:
186
b.)
n cazul tablourilor de valori bi- dimensionale (aceste tablouri se caracterizeaz prin urmtoarea particularitate:elementele sunt aranjate dup dou direcii x i y, acestei perechi i corespunde o a treia valoare z ), funcia MATLAB utilizat pentru cutarea valorilor z corespunztoare unei perechi (x,y) este:
table2(tab,x,y)
Obs.: Funcia MATLAB table2() este nlocuit n versiunile superioare versiunii MATLAB 5.3 cu funcia interp2(), n linia de comand a
187
versiunilor superioare ale MATLAB apare mesajul de avertizare : Warning: TABLE2 is obsolete and will be removed in future versions. Use INTERP2 instead. (Atenie:TABLE2 este depit i va fi nlocuit n viitoarele versiuni. Folosii INTERP2 pentru acelai scop!) Condiii:
-tabelul tab este organizat ca o matrice, cu n linii i m coloane, ntotdeauna avnd, pe poziia (1,1), elementul 0 ; -numrul de linii este dat de numrul valorilor argumentului x, la care se adaug o linie pentru introducerea valorilor argumentului y, iar numrul de coloane este dat de numrul valorilor lui y; -valorile x-ilor se plaseaz pe prima coloan, n ordine cresctoare, ncepnd cu a 2-a linie; -valorile y-ilor se plaseaz pe prima linie, n ordine cresctoare, ncepnd cu a 2-a coloan;
Celelalte elemente ale matricei sunt valorile z (obinute prin msurtori, calcule, etc.).
x
0 -3 2 8 100 1 0 9 -8 0 2 1 3 9 0 3 2 1 1 1 4 4 7 0 7 5 8 6 2 2
y
6 7 5 -8 8 7 11 3 2 1 8 0 1 1 2 9 1 0 0 1 10 1 -3 1 0
S se gseasc valorile corespunztoare perechilor (x,y): (-3,7); (-3,6.5); (-2,6); (50,8); (99,9.9); (-4,8); (2,11). Soluie:
tablou_original_2=
z1=table2(tablou_original_2,-3,7) z1=11
188
z7=table2(tablou_original_2,2,11)
??? Error using ==> table2 x0 larger than all values in first column ??? Eroare la utilizarea ==> table2 x0 este superioar valorilor din prima coloan
189
INTERPOLAREA I REGRESIA
n foarte multe aplicaii practice apare necesitatea evalurii aproximative a unei funcii f : [a, b ] , [a, b] . Problema aproximrii
funciilor intervine n situaii de o mare diversitate, multitudinea formulrilor i metodelor de rezolvare asociate constituind o reflectare direct a acestei diversiti. n aplicaii este frecvent necesar utilizarea unor funcii pentru care sunt cunoscute doar valorile corespunzatoare unui set discret de valori ale argumentelor. Astfel de dependene pot reprezenta, spre exemplu, tabelarea unor funcii matematice sau a unor mrimi fizice msurate sau calculate. Pentru simplitatea discuiei ne limitm n cele ce urmeaz la funcii reale de o variabil real. n toate cazurile, pentru funcia considerat f : [a, b ] , [a, b] sunt specificate valorile y i ntr-un numar de puncte de reea x i [a, b ] , adic
f (x i ) = y i ,
i = 1, 2, 3, K , n
Prelucrarea numeric ulterioar a acestor funcii impune adesea i utilizarea unor valori corespunzatoare unor argumente diferite de cele tabelate. n multe situaii, ns, obinerea unor informaii suplimentare este dificil, dac nu chiar imposibil. Astfel, chiar dac este cunoscut algoritmul de calcul al funciei, complexitatea acestuia poate face uneori ineficient utilizarea lui pentru detalierea iuformaiei. Pe de alta parte, dac valorile tabelate provin din observaii, ele sunt, n general, afectate de erori de msur. n toate situaiile menionate, pentru a sintetiza informaia asupra funciei tabelate f i a o putea utiliza eficient n calcule, se impune aproximarea ei printr-o funcie continu, numit funcie model, F = F (x; a 1 , K , a m ) , care depinde n general de un numar de parametri ajustabili, aj,-, numii parametri de model. Forma funciei F i valorile parametrilor aj trebuie determinate astfel nct funcia discret f s fie aproximat optim ntr-un anumit sens. Alegerea formei concrete a funciei model F este o problema netrivial i ea trebuie s aib la baz o fundamentare riguroas. n linii mari, stau la dispoziie urmatoarele opiuni: funcia model se alege dintr-o clas convenabil de funcii (cum ar fi: polinoame, funcii gaussiene etc.), care ofer simplitate i eficien n prelucrri ulterioare; funcia model este derivat dintr-o teorie, n cadrul careia parametrii de
190
model au o semnificaie bine stabilit; funcia model rezult dintr-un compromis ntre constrngerile i avantajele opiunilor anterioare. Pentru a putea determina, practic, valorile optime ale parametrilor de model, trebuie definit o funcional care s reflecte gradul n care funcia model F aproximeaz funcia tabelat f pentru o alegere particular, a parametrilor. Admind ca f i F aparin spaiului C 2 [a, b ] al funciilor de ptrat sumabil pe [a,b], o msur sugestiv a abaterii modelului fa de funcia modelat este dat de distana dintre cele dou funcii:
unde s-a utilizat notaia vectorial a (a 1 , a 2 , K) . Evident, aceast definiie nu este utilizabil ca atare, deoarece implic i cunoaterea expresiei anlitice a funciei f. Se poate utiliza, ns, o definiie mai puin riguroas, dar aplicabil. pentru funcii discrete:
n 2 d(f , F ) = [f (x i ) F (x i ; a )]2 i =1
Aproximarea pe baza acestei distane este numit aproxirnare n medie ptratic i este utilizat n doua dintre cele mai importante metode de modelare a funciilor tabelate: mterpolarea i regresia. Dac, valorile tabelate y i = f (x i ) sunt considerate exacte (neafectate de erori), este firesc s se impun anularea distanei dintre funciile f i F:
d(f , F ) = 0
Aceasta revine la construirea unei funcii model, aparinnd unei anumite clase, care s ia, n punctele de tabelare x i , aceleai valori ca i funcia f(x): F(x; a ) = y i , i = 1, 2, K , n
191
Funcia care satisface aceste condiii este utilizat, n mod normal, pentru aproximarea funciei f(x) pe intervalul [x 1 , x n ] iar procedeul se numete interpolare. Funcia F(x; a ) poart numele de funcie de interpolare sau interpolant, iar nodurile x i se mai numesc i puncte de interpolare. Geometric, interpolarea implic gsirea unei curbe y = F(x; a ) care trece prin toate punctele M i ( x i , y i ) . De exemplu, presupunnd funcia y=sinx, reprezentat grafic n punctele x [ , ] , interpolarea n apte puncte echidistante, ale intervalului, este realizat cu o funcie MATLAB specific, i surprins n imaginea alturat. Dac, argumentele pentru care se evalueaz interpolantul se afl nafara intervalului [x 1 , x n ] procedeul se numete extrapolare. Cu un asemenea enun, general ns, problema poate avea o infinitate de soluii sau nici una, n funcie de clasa creia i aparine funcia model. Problema interpolarii devine neambigu dac n locul unei funcii model arbitrare cutm un polinom Pm(x) de grad nu mai mare decat (n 1), care satisface condiiile de interpolare. Din acest set de condiii se pot determina cei (m+1) coeficieni ai polinomului i metoda se numete interpolare polinomial.Funciile de interpolare polinomiale sunt cele mai utilizate n practic. Dintre acestea amintim funcia Lagrange i interpolanii spline i Akima (netezi pe poriuni). Totui, n anumite cazuri se dovedesc utile i funciile de interpolare raionale. La randul lor, funciile trigonometrice conduc la aanumita interpolare trigonometric, i la metodele Fourier nrudite.
192
Dac valorile tabelate y i = f (x i ) provin din observaii, ele sunt afectate n general de erori de msurare, imprecizia fiecrei valori fiind specificat de obicei prin deviaia standard i asociat: n astfel de cazuri, funcia model F = F(x; a) este cu att mai bun cu
ct sunt mai elaborate considerentele pe baza carora i s-a stabilit forma (cu ct este mai puin empiric). Avnd n vedere imprecizia datelor, nu este de asteptat ca funcia model s interpoleze punctele tabelate (chiar dac acest lucru este teoretic posibil) i este deci firesc s se impun minimizarea distanei d(f, F) n raport cu valorile parametrilor:
d(f , F ) = min im
aj
nu anularea ei riguroas ca n cazul interpolrii. n mod concret, aceasta revine la determinarea celor m parametri, a j , ai funciei model F(x; a), aparinnd unei anumite clase, care minimizeaz suma abaterilor ptratice punctuale ale funciei model fa de datele tabelate:
S=
[y F(x ;a)]
i i i=1
Acest procedeu se numete regresie sau ajustare prin metoda celor mai mici ptrate. Termenul preluat din limba englez este fitare (de la "to fit"a potrivi), desemnnd procesul de ajustare a parametrilor curbei de regresie.
193
[y F(x ;a)]
i i i=1
reprezint
aa-numita funcie de merit a procesului de ajustare. Pentru o apreciere mai nuanat a gradului n care funcia model aproximeaz datele msurate, n practic se utilizeaz funcii de merit mai elaborate. Oricum, deoarece n mod conventional funcia de merit este construit astfel nct valori mici s corespunda unor abateri reduse ale modelului fa de funcia tabelat, procesul de ajustare a parametrilor de model este, n esen., un proces de minimizare multidimension. Unul dintre cele mai utilizate criterii de performan este cel furnizat de funcia de merit "hi-patrat":
2 =
i=1
1
2 i
"hi-patrat", atribuie ponderi diferite punctelor de tabelare individuale, i anume depinznd de inversul deviaiei standard i asociate. n acest fel crete ponderea relativ a punctelor afectate de erori mici, funcia model fiind forat n procesul ajustrii parametrilor s minimizeze cu precdere distana fa de aceste puncte n detrimentul distanei fa de punctele mai imprecise (cu i mari). n cazul n care deviaiile i sunt egale sau nu sunt cunoscute, formalismul se simplific i revine la regresia cu ajutorul funciei de merit S. Extremum- ul
2 funcionalei =
F(xi ;a) = 0, a j
j=1, 2, , m
194
din care pot fi determinai parametrii aj. Ajustarea pe baza funciei de merit 2 mai este numit uneori i regresie "hi-p&trat". Curba de regresie y = F(x;a.) nu trebuie s treac n mod necesar prin nici unul din punctele tabelate Mi(xi, yi), ci doar prin barele de eroare ale acestora (de lungime i ), minimiznd funcionala 2 . Deoarece erorile de msurare ale datelor induc imprecizii n determinarea parametrilor de model, informaia furnizat de procesul de ajustare nu este complet fr estimarea acestor erori. Admind c datele sunt independente, considerente de propagare a erorilor arat. c variana (imprecizia
2 probabil patratic.) a
j
cumularea
i =1
i2
a j y i
Creterea fr o justificare teoretic clar a numrului de parametri de model n ideea descrierii ct mai exacte a datelor, eventual chiar a interpolrii lor, nu face funcia model "mai bun" chiar dac reduce valoarea funciei de merit, ci, pe lng lipsa de semnificaie a modelului i a parametrilor adugai, poate conduce la apariia unor fenomene numerice greu de controlat. Interpolarea nu trebuie privit deci, n nici un caz, ca o limit ideal a regresiei, cele dou metode de aproximare avnd semnificaii diferite i fiind aplicabile n situaii distincte. n general, datele experimentale reprezint valori discrete determinate prin diferite metode. Aceste date pot reprezenta analitic o relaie matematic dintre diferitele date experimentale observate i se exprim prin funcii ai cror coeficieni se determin, n general, prin rezolvarea unor sisteme de ecuaii lineare. De exemplu, considernd c s-au msurat, la momentele t = [0 .3 .8 1.1 1.6 2.3]', valorile y = [0.5 0.82 1.14 1.25 1.35 1.40]', se reprezint grafic dependena y(t) al crei grafic este o curb convex.
195
i =1
ri2
observat y i i valoarea previzionat y i : r = y y i . MATLAB recunoate patru tipuri de metode aplicative variante ale metodei celor mai mici ptrate: Metoda lineara a celor mai mici ptrate; Metoda ponderat a celor mai mici ptrate; Metoda robust a celor mai mici ptrate; Metoda nelinear a celor mai mici ptrate.
METODA LINEAR A CELOR MAI MICI PTRATE
Aceast metod folosete un model matematic linear (o funcie de gradul nti) pentru aproximarea datelor: y = p 1 x + p 2 , n care cei doi coeficieni urmeaz a fi determinai. Metoda se numete linear ntruct funcia, care definete modelul matematic de aproximare, este de gradul nti n coeficieni. Pentru a ilustra procesul de aproximare prin aceast metod, este suficient a arta modul n care este rezolvat ecuaia de gradul nti y = p 1 x + p 2 , n necunoscutele p 1 i p 2 , dac se consider n puncte cunoscute. Dac se scriu cele n ecuaii corespunztoare datelor cunoscute, se obine un sistem de n ecuaii care urmeaz a fi rezolvat: S =
(y
i =1
dou necunoscute p 1 i p 2 , ntruct metoda minimizeaz suma ptratelor reziduurilor, se obin dou expresii suplimentare:
S = 2 x i (y i (p 1 x i + p 2 )) = 0 p 1 i =1
S = 2 (y i (p 1 x i + p 2 )) = 0 p 2 i =1
196
Aceste ecuaii sunt rezolvabile n raport cu cele dou necunoscute: n n n x i2 + p 2 xi = xi y i p 1 i =1 i =1 i =1 ale crui soluii n n p1 xi + n p2 = yi i =1 i =1
sunt:
n p1 =
x
i =1
yi
x y
i i =1
n n x i2 xi i =1 i =1
i =1 2
respectiv p 2 =
n n 1 y i p1 xi . n i =1 i =1
Ceea ce se poate constata uor, este faptul c utilizarea acestei metode pentru aproximare i ajustare, nseamn doar calcule algebrice simple. n forma matriceal, metoda lineara a celor mai mici ptrate este dat de formula:
y = X +
unde: -y este un vector coloan (n linii ), al rspunsurilor; - este un vector coloan (m linii), al coeficienilor; -X este o matrice nxm, a valorilor previzionate; - este vectorul coloan (n linii ), al erorilor. Pentru un polinom de gradul nti, cele n ecuaii cu dou necunoscute, exprimate n funcie de y, X i sunt:
y 1 x1 1 y 2 x 2 1 p y 3 = x 3 1 x 1 p 2 M M y n x n 1
197
Soluia problemei, dat prin metoda celor mai mici patrate, este un vector b, care conine vectorul coeficienilor . Ecuaiile generalizate ataate acestui sistem sunt reprezentate prin:
(X
cu soluia generalizat:
X b = XT y ,
b = XT X
XT y
n care, XT reprezint transpusa matricei X. Aceast ecuaie poate fi rezolvat folosind operatorul \ (mprire la stnga), respectiv, folosind factorizarea QR. Soluia de rspuns, previzionat, y , se determin cu relaia:
y = Xb = Hy,
unde:
H = X XT X
XT
r = y y = (1 H ) y
198
n care, w i reprezint ponderea rezidual. Aceast mrime arat magnitudinea influenei pe care o are fiecare rspuns n evaluarea final a parametrului msurat. Ponderarea este recomandat acolo unde se cunosc mrimile ponderilor, sau acolo unde este justificat o anumit comportare a acestora. Ponderile modific expresia vectorului b, astfel:
b = = XT W X
XT W y ,
unde, W, este dat de elementele de pe diagonala principal a matricei ponderilor w. Ponderile utilizate trebuie s transforme variana rspunsurilor n valori constante. Dac este cunoscut variana datelor, ponderea este dat prin:
wi =
1 wi = n
(y
i =1
y)
Aceast relaie este acoperitoare pentru calculul ponderilor, dac setul de date conine valori identice (repetiii). n acest caz, n reprezint numrul de replici identice.
199
de curb au o pondere ridicat, iar punctele ndeprtate de curb, dau ponderi reduse (valori apropiate de zero). Metoda ponderilor biptrate este preferat metodei reziduurilor absolute, ntruct prima metod minimizeaz efectul valorilor extreme. Metoda, robust, a celor mai mici ptrate, varianta ponderilor biptrate utilizeaz un algoritm de ponderare, i urmrete urmtoarea procedur: 1. Aproximeaz modelul prin ponderarea celor mai mici ptrate; 2. Se determin reziduurile ajustate, i se actualizeaz. Reziduurile ajustate, se determin cu relaia:
radj =
ri 1 hi
n care ri este reziduul ptratic uzual, iar hi este rotunjirea care ajusteaz reziduurile prin lips. Actualizarea se realizeaz prin:
u=
radj K s
unde K este o constant de reglaj K=4.685. i s este variana robust dat prin relaia: DMA s= 0,6745 n care DMA reprezint deviaia medie absolut a reziduurilor; 3. Calculul ponderilor robuste ca funcie de u. Ponderile biptrate sunt date prin: 2 1 (u i )2 , u i < 1 wi = ui > 1 0,
4. Dac aproximarea este convergent atunci rezultatul este corect, altfel, se trece la o nou iteraie a ajustrii, prin rentoarcerea la primul pas al procedurii.
200
y = f ( X, ) +
unde
y este vectorul coloan al rspunsurilor (n linii); f este o funcie de i X; este vectorul coloan al coeficienilor (m linii); X este matricea proiectat a modelului (n linii, m coloane ); este vectorul coloan al erorilor (n linii).
Modelele nelineare sunt, n general, mai dificil de ajustat dect modelele lineare, ntruct coeficienii nu pot fi estimai prin metode matriciale simple. De aceea, abordarea tehnicilor iterative trebuie s adopte urmtoarele etape: 1. Startul cu o estimare iniial pentru fiecare coeficient; 2. Se realizeaz ajustarea pentru coeficienii determinai. Rspunsul aproximat este dat de relaia:
y = f ( X, )
care implic i calculul Jacobianului funciei f ( X, ) (Jacobianul este definit prin derivatele pariale ale matricei n raport cu coeficienii ); 3. Ajustarea coeficienilor i evaluarea aproximrii (n MATLAB sunt disponibili algoritmii: a)-Trust region; b)-LevenbergMarquardt; c)-Gauss-Newton); 4. Iterarea procesului, prin saltul la pasul 2., atta timp ct nu este realizat convergena aproximrii. Datorit naturii procesului de aproximare n sine, nici un algoritm nu este perfect pentru modelul neliniar al metodei celor mai mici ptrate. Din acest motiv, atunci cnd rezultatele obinute nu sunt cele ateptate, sau apropiate de cele ateptate, se ia decizia schimbrii metodei implicite de aproximare, mai ales c metodele neliniare sunt sensibile la punctul de start al aproximrii.
201
Semnalul original
Semnalul interpolat
Fie f : [a, b ] , [a, b] . Se pune problema determinrii unei funcii F, care s aproximeze funcia f n intervalul [a,b]. Se recurge la aceast aproximare n dou cazuri: 1. -cnd nu se cunoate expresia analitic a lui f, dar se cunosc valorile sale ntr-un numr finit de puncte; 2. -cnd expresia analitic a lui f este destul de complicat i cu ajutorul acesteia calculele sunt destul de dificile. Pentru evaluarea lui f(x) se caut o alt funcie F(x) relativ simpl astfel ca pentru orice valoare a lui x valoarea lui f(x) se alege dintr-o anumit clas de funcii, de exemplu din clasa polinoamelor de grad n sau mai mic, atunci trebuie ca F(x) s ia aceeai valoare cu f(x) pentru anumite valori ale lui x. Aceste valori ale lui x sunt adesea numite puncte de interpolare. De asemenea se poate cere ca
202
anumite derivate ale lui F(x) s ia aceleai valori cu valorile derivatelor corespunztoare ale lui f(x) n anumite puncte de interpolare. Se poate arta c dac F(x) este suma a n+1 termeni ai seriei Taylor pentru f(x) n punctul x=a, atunci F(x) poate fi considerat ca un polinom de interpolare pentru f(x) de grad n sau mai mic, deoarece F( a ) = f k (a ),
(k )
k = 0,1,2,..., n .
MODELE PARAMETRICE
n MATLAB sunt disponibile cteva modele parametrice consacrate, pentru interpolarea i aproximarea datelor: 1. Funcii exponeniale Exist dou variante ale acestui model parametric: Modelul exponenial cu un termen: y = a e bx ; Modelul exponenial cu doi termeni: y = a e bx + c e dx ; Funciile exponeniale sunt utilizate atunci cnd rata modificrii unei mrimi este proporional cu dimensiunea iniial a acestei mrimi. n funcie de semnul exponentului, y este o funcie descresctoare (exponent negativ), sau o funcie cresctoare (exponent pozitiv); 2. Serii Fourier Sunt modele
n
reprezentate
i
prin
sume
de
funcii
trigonometrice
simple: y = a 0 +
a
i =1
cos(nx ) + b i sin(nx )
3. Modelul Gauss Acest model este utilizat pentru aproximarea valorilor de varf. De exemplu, aproximarea liniei spectrale de emisie pentru analiza concentraiei
203
chimice, poate fi descris printr-o aproximare Gauss. Modelul matematic asociat, este dat de ecuaia:
y=
a
i =1
x bi ci
unde a este amplitudinea, b este centroidul, c este dat de limea relativ a vrfului, iar n este numrul de vrfuri ce urmeaz a fi aproximate ( 1 n 8 ) 4. Modelul polinomial Ecuaia caracteristic acestui model este: y =
p
i =1
x n +1 i , n care (n+1)
reprezint ordinul polinomului, (n) reprezint gradul polinomului. Ordinul polinomului d numrul de coeficieni ce urmeaz a fi aproximai, iar gradul polinomului arat puterea variabilei previzionate. Modelele polinomiale sunt folosite atunci cnd sunt necesare aproximri empirice simple. Acestea pot fi utilizate n cazul interpolrilor sau extrapolrilor seturilor de date. 5. Serii de puteri Sunt disponibile dou variante ale acestui model, ca i n cazul modelului funciilor exponeniale: Modelul seriilor de puteri cu un termen: y = a x b ; Modelul exponenial cu doi termeni: y = a + b x c ;
6. Expresii raionale Expresiile raionale sunt date de modele matematice descrise de ecuaii de
n
forma: y =
p
i =1
x n + 1 i
, n care gradul numrtorului, 0 n 5 ,
i
q
i =1
mi
204
respectiv gradul numitorului 1 m 5 , iar coeficientul lui x m este, ntotdeauna, unu. Modelele raionale sunt avantajoase datorit flexibilitii mari n cazul structurilor de date complicate, dar prezint dezavantajul instabilitii accentuate atunci cnd numitorul ia valori aproape de zero. 7. Sume de sinus Modelul matematic este dat de relaia: y =
a
i =1
sin(b i x + c i ) , n care
a este amplitudinea, b, este frecvena, iar c este constanta de faz pentru fiecare termen al sumei de sinusi ( 1 n 8 ).
8. Distribuia Weibull Acest model este utilizat n analiza datelor statistice legate de fiabilitatea i de durata de via a produselor. Expresia matematic este: y = a b x b 1 e ax , n care a este parametrul de scar iar b este factorul de form. Modelul matematic poate conine un parametru suplimentar c, centroidul, atunci cnd x este nlocuit cu x-c. De remarcat c distribuia Weibull nu aproximeaz datele unui set de date, ci aproximeaz curbele astfel nct acestea s aib forma apropiat de forma distribuiei Weibull. 9. Modele utilizator Modelele matematice, definite implicit, nu sunt cele mai bune modele n toate cazurile. Din acest motiv, uneori, este necesar a se defini ecuaii specifice unei anumite aplicaii. Aceste ecuaii sunt avantajoase ntruct coeficienii punctului de start al iteraiei se aleg aleatoriu din intervalul [0,1], iar pentru calculul Jacobianului se folosete difereniala total.
b
205
DESCRIERE 2 - cutare n tabele i interpolare linear n tabele uni-dimensionale n versiunile superioare ale MATLAB este nlocuit cu funcia interp1 - cutare n tabele i interpolare linear n tabele bi-dimensionale n versiunile superioare ale MATLAB este nlocuit cu funcia interp2 1. interpolare spline cubic n tabele unidimensionale 2. determin componentele polinomiale ale curbei spline de aproximare, pentru utilizarea cu funcia MATLAB ppval() - interpoleaz prin metoda Transormatei Fourier rapide (fft) 2 - interpoleaz linear, spline sau cubic n tabele uni-dimensionale - cutare n tabele uni-dimensionale - interpoleaz bi-linear, cubic-spline sau bicubic n tabele bidimensionale - cutare n tabele bi-dimensionale - interpoleaz date n trei dimensiuni - cutare n tabele - interpolare linear, spline, spline-cubic a datelor multi-dimensionale - cutare n tabele - aproximeaz i ajusteaz o suprafa z=f(x,y) la datele vectorului tridimensional (x,y,z), neuniform spaiat, prin interpolarea la punctele specificate (XI,YI), cu condiia ca suprafaa sa treac, ntotdeauna, prin punctele date. - aproximeaz i ajusteaz o suprafa w=f(x,y,z) dat de vectorul spaial neuniform (x,y,z,v), prin interpolare n punctele specificate (xi,yi,zi) - interpoleaz liniile de cmp prin vertex-uri, pe baza datelor specificate n vectorii U,V,W, ale cror coordonate sunt date de matricile X,Y,Z.
table2
1. spline(x,y,xx) 2. spline(x,y)
1. interpft(x,n) 2. interpft(x,n,dim) 1 1. interp1(x,Y,xi) 2. interp1(Y,xi) 3. interp1(x,Y,xi,metoda) 1. interp2(X,Y,Z,XI,YI) 2. interp2(Z,XI,YI) 3. interp2(X,Y,Z,XI,YI,metoda) 1. interp3(X,Y,Z,V,XI,YI,ZI) 2. interp3(...,metoda) 1. interpn(X1,X2,X3,V,Y1,Y2,Y3,..) 2. interpn(V,Y1,Y2,Y3,...) 3. interpn(...,metoda) 1. griddata(x,y,z,XI,YI) 2. griddata(x,y,z,xi,yi) 3. griddata(...,metoda)
1. griddata3(x,y,z,v,xi,yi,zi) 2. griddata3(...,'metoda')
interpstreamspeed(X,Y,Z,U,V,W,vertic es)
206
INTERPOLAREA LINEAR
Interpolarea este o operaie similar cutrii n tabele. Funcia MATLAB interp1() interpoleaz ntre punctele date, gsind valorile unei funcii unidimensionale f(x) pe baza acestor puncte. n figura de mai jos este prezentat schematic relaia dintre vectorii x, Y, xi, yi. Prin interpolarea cu funcia MATLAB interp1() se caut elementele xi n vectorul x, i, pe baza locaiilor acestora, se returneaz valorile yi interpolate printre elementele vectorului y. n MATLAB 6 sunt disponibile mai multe variante ale funciei interp1():
' n e a r e s t ' i n
207
Dac un element al vectorului xi se gsete n exteriorul intervalului cuprins de x, atunci, metoda de interpolare specificat, va fi utilizat pentru extrapolare.
Ex. : S se genereze o curb sinusoidal primar, apoi s se interpoleze peste un numr mai mare de abscise:
Soluie: Varianta A
Varianta B
Ex. :
Se consider doi vectori: unul reprezentnd deceniile 1 pn la 9 ale secolului trecut, cel de-al doilea reprezentnd populaia Statelor Unite ale Americii (n milioane locuitori) pentru fiecare nceput de deceniu:
t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633];
Se cere estimarea populaiei Statelor Unite ale Americii corespunztoare anului 1975, apoi s se estimeze populaia pe fiecare an n parte ncepnd din 1900
208
populatia_in_1975=interp1(t,p,1975)
se obine rezultatul:
populatia_in_1975= 214.8585
Interpolnd ntre anii 1900 i 2000 se obin rezultatele, respectiv, graficul evoluiei populaiei ntre anii 1900 i 2000:
INTERPOLAREA BIDIMENSIONAL
Interpolarea bi-dimensional se realizeaz prin funcia MATLAB interp2() care se poate apela n urmtoarele variante :
209
Matricile X i Y trebuie s fie ordonate monoton cresctor, i sa fie n acelai format; Matricile X i Y definesc punctele n care este dat matricea Z;
XI i YI pot fi matrici, caz n care, funcia interp2(), determin valorile matricei Z corespunztoare punctelor (XI(i,j), YI(i,j));
Dac funcia interp2 este apelat cu varianta ZI = interp2(Z,XI,YI), atunci se interpreteaz, automat de ctre MATLAB, c X = 1:n i Y = 1:m, unde [n, m]=size(Z); Varianta ZI = interp2(Z,de_n_ori) specific repetarea interpolrii bidimensionale, de n ori; Varianta ZI = interp2(X,Y,Z,XI,YI,metoda) specific metoda alternativ de interpolare: linear -pentru interpolare bi-linear 'nearest' -pentru interpolarea pe vecinti 'spline' -pentru interpolarea spline cubic 'cubic' - pentru interpolarea bi-cubic
CONCLUZIE : Oricare dintre aceste variante interpoleaz ntre punctele unei reele bidimensionale, fiind gsite valorile unei funcii f(x,y) care face conexiunea ntre punctele intermediare.
210
De exemplu, se cere interpolarea, pe o reea [X,Y], a funciei MATLAB peaks() (aceast funcie, de dou variabile, este obinut prin translatarea i scalarea distribuiilor GAUSS), pe o reea [XI,YI] mai fin dect [X,Y] . Soluia este :
[X,Y] = meshgrid(-3:.25:3); Z = peaks(X,Y); [XI,YI] = meshgrid(-3:.125:3); ZI = interp2(X,Y,Z,XI,YI); mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15) hold off axis([-3 3 -3 3 -5 20])
INTERPOLARE TRIDIMENSIONAL
Interpolarea tridimensional, n MATLAB, se realizeaz cu funcia interp3() care se poate apela n urmtoarele variante :
211
Oricare dintre aceste variante realizeaz interpolarea prin cutarea valorilor matricei VI, reprezentnd valorile intermediare ale funciei tridimensionale V n punctele reelei date de matricile XI, YI i ZI. Matricile, sau vectorii, XI, YI i ZI trebuie sa fie de aceeai dimensiune, respectiv s fie ordonate monoton. De exemplu, folosind i funcia MATLAB slice(), se interpoleaz datele reelei tri-dimensionale [x,y,z,v] = flow(10), pentru a gsi valorile corespunztoare punctelor [xi,yi,zi] :
[x,y,z,v] = flow(10); [xi,yi,zi] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3); vi = interp3(x,y,z,v,xi,yi,zi); slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2])
212
yy = spline(x,y,xx) pp = spline(x,y)
unde: -
x,y sunt vectori linie ce conin abscisele, respectiv ordonatele punctelor; xi este vector ce conine noua abscis
Ex.:
S se determine valoarea y1 de interpolare pentru x1=2.7; dac:
x=[0,1,2,3,4,5] ; y=[0,20,60,68,77,100] ;
n MATLAB (considernd c au fost deja introdui vectorii x i y):
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)
213
yi = Columns 1 through 8 0 -1.2480 0.7360 5.3440 11.9680 20.0000 28.8320 37.8560 Columns 9 through 16 46.4640 54.0480 60.0000 63.9040 66.1120 67.1680 67.6160 68.0000 Columns 17 through 24 68.7760 70.0480 71.8320 74.1440 77.0000 80.4160 84.4080 88.9920 Columns 25 through 26 94.1840 100.0000 Ex.:
S se reprezinte grafic o interpolare linear i o interpolare spline cubic pentru datele i rezultatele exemplului anterior.Pentru reprezentarea grafic se va folosi funcia MATLAB plot() :
Ex.: a) Fiind date 10 perechi de puncte n xOy, s se traseze graficul rezultat prin interpolare spline pe o reea de patru ori mai fin (x=0:10; y=sin x)
Soluie:
214
b) Folosind, pentru x pasul iterrii 0.5 iar funcia y=tgx+sinx, s se reprezinte pe acelai grafic valorile funciei (y- cu linie punctat de culoare roie), valorile interpolate prin metoda spline(yi-cu linie continu de culoare magenta ) i valorile interpolate prin metoda cubic (zi-cu linie continu de culoare verde): x = 0:0.5:10; y = tan(x)+sin(x); xi = 0:0.125:10; yi = spline(x,y,xi); zi=interp1(x,y,xi,'cubic'); plot(x,y,'r:',xi,yi,'m-',xi,zi,'g-')
INTERPOLAREA MULTIPL
Funcia MATLAB utilizat: interp1(x,y,xi,regula) n care, argumentele au semnificaia cunoscut, iar regula este cuvntul cheie:
215
S se determine prin interpolare linear, spline i cubic, i apoi sa se reprezinte grafic punctele corespunztoare valorilor
REGRESIA POLINOMIAL
Datele stocate n vectorul y se pot modela, de exemplu, printr-un polinom de gradul II, ceea ce ar putea fi reprezentat analitic prin funcia:
t1 t2
216
X= 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0 0.3000 0.8000 1.1000 1.6000 2.3000 0 0.0900 0.6400 1.2100 2.5600 5.2900
REGRESIA EXPONENIAL
Considernd ca model de aproximare o funcie exponenial y = a 0 + a1 e t + a 2 t e t , n care parametrii ce urmeaz a fi determinai sunt coeficienii, acetia se determin prin metoda celor mai mici ptrate. n acest sens, se construiete, i se rezolv sistemul de ecuatii folosind matricea X, a regresiilor:
t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]'; X=[ones(size(t)) exp(-t) t.*exp(-t)];
217
-0.8988 0.4097 Modelul matematic de aproximare se formeaz cu aceste valori determinate prin rezolvarea sistemului de ecuaii: Y = 1,3974 0,8988 e t + 0,4097 t e t . Prin evaluarea modelului, pe un interval uniform T=0:0.1:2.5 (care include valorile vectoruluit = [0 .3 .8 1.1 1.6 2.3]'), i suprapunerea graficului Y(T) peste y(t): T = (0:0.1:2.5)'; Y = [ones(size(T)) exp(- T) T.*exp(- T)]*a; plot(T,Y,'-',t,y,'o'), grid on
Din aceast figur se observ c aproximarea cu o curb exponenial este mult mai aproape de valorile vectorului y = [0.5 0.82 1.14 1.25 1.35 1.40]'.
218
REGRESIA MULTIPL
n cazul n care y este o funcie de mai multe variabile independente, ecuaiile matriceale, care exprim relaia dintre variabile, pot fi definite pentru a include i datele adiionale. Astfel, dac se presupune c, pentru doi parametri diferii, definii vectorial, x1 = [.2 .5 .6 .8 1.0 1.1]' i x2 = [.1 .3 .4 .9 1.1 1.4]', s-au determinat experimental, statistic sau prin alt metod, valorile funciei, i acestea sunt cuprinse n vectorul y = [0.17 0.26 0.28 0.23 0.27 0.24]', atunci, funciamodel matematic linear, care ar putea exprima relaia ntre parametri, este: y = a 0 + a1 x1 + a 2 x 2 , n care ai reprezint parametrii lineari ce urmeaz a fi determinai. Regresia multipl determin soluia {a 0 , a 1 , a 2 } folosind metoda celor mai mici ptrate. Pentru aceasta, se construiete matricea regresiilor, X, i se gsesc coeficienii necunoscui (a=[a0; a1; a2]):
x1 = [3.2 4.5 7.6 8.8 1.0 3.1]'; x2 = [2.1 4.3 5.4 8.9 1.1 1.4]'; y = [2.5 3.3 4.5 5.2 8.9 4.7]'; X = [ones(size(x1)) x1 x2]; a = X\y a= 6.4905 -1.0243 0.8208
Cu aceste valori, funia- model devine:
Y=X*a; eroarea_maxima=max(abs(Y-y))
219
Aceast eroare este suficient de mare pentru a invalida modelul adoptat. Repetnd raionamentul i calculele pentru alte valori ale vectorilor x1, x2 i y se obin urmtoarele rezultate:
x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .27 .24]'; X = [ones(size(x1)) x1 x2]; a = X\y a= 0.1018 0.4844 -0.2847 y_model=0.1018+0.4844.*x1-0.2847.*x2 y_model = 0.1702 0.2586 0.2786 0.2331 0.2730 0.2361 Y=X*a; eroarea_maxima=max(abs(Y-y)) eroarea_maxima = 0.0038
Aceast eroare denot faptul c modelul poate fi validat n aceast variant.
a) b) c)
220
Descriere: Apelat n varianta a), funcia p=polyfit(x,y,n), determin coeficienii unui polinom de gradul n, p(x), care aproximeaz valorile (x(i)) la y(i), n sensul celor mai mici ptrate. Rezultatul, p, este un vector linie cu n+1 coloane, coninnd coeficienii polinomiali, n ordine descendent:
p(x ) = p 1 x n + p 2 x n 1 + ... + p n x + p n +1
Dac funcia polyfit este apelat n varianta b), cu parametrii de ieire p i S, atunci, se returneaz coeficienii polinomiali n vectorul linie p, i o structur S, care poate fi utilizat, cu funcia polyval, pentru estimarea erorilor de previzionare. Apelarea cu varianta c), funcia polyfit, determin obinerea coeficienilor x 1 , n care 1 = mean(x ) este valoarea medie polinomului p, n variabila x = 2 a variabilei x, respectiv
2 = std(x )
1 s= n1
(x
i =1
x)
1 , n care x = n
cazul celei de-a treia variante de apelare a funciei polyfit), este vectorul miu = [ 1 , 2 ] . De exemplu, dac se consider setul de date msurate x-y, i se dorete aproximarea datelor cu o curb polinomial de gradul III, atunci secvena MATLAB urmtoare, determin afiarea grafic a rezultatelor aproximrii:
x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4]; p = polyfit(x,y,3) p= -0.1917 31.5821 -60.3262 35.3400
Polinomul de aproximare este:
p(x ) = 0,1917 x 3 + 31,5821 x 2 60,3262 x + 35,34 x2 = 1:.1:5; y2 = polyval(p,x2); plot(x,y,'o',x2,y2),ylabel('Valorile determinate pentru y2' ), xlabel('Valorile x2'), grid on
221
EROAREA APROXIMRII
Orice aproximare numeric implic i existena erorilor. O discuie privind erorile de aproximare trebuie sa nceap avand ca suport asumarea presupunerii c erorile apar doar n rspunsuri, niciodat n setul de date previzionate, respectiv presupunerea c erorile au o distribuie normal (distribuie Gauss), fa de zero (ca medie) i cu variana constant (de valoare 2 ). Presupunerea ca distribuia erorilor s fie normal, trebuie s fie valid ntruct aproximarea, prin orice metod, este adecvat doar n cazul unei distribuii normale a cantitilor aproximate. Aceast presupunere are la baz faptul c probabilitatea existenei unor valori extreme n setul de date este mic i metoda de aproximare prin cele mai mici ptrate are aplicabilitate valid. Media zero a erorilor nseamn c acestea au o apariie pur aleatoare. Dac media erorilor nu este zero aceasta se poate datora faptului c modelul ales nu este cel convenabil, sau c erorile nu sunt aleatorii, respectiv c exist erori sistematice.
222
Variana constant arat faptul c erorile au o mprtiere constatnt. Datele cu aceeai varian se numesc date de aceeai calitate. Presupunerea c variana datelor este constant nu implic i o ponderare n sensul aproximrii celor mai mici ptrate. Aceasta se poate observa i din procedura de aproximare, unde se presupune c exist diferite nivele ale ponderilor, deci caliti diferite ale datelor. Din acest motiv se utilizeaz ponderile n metoda celor mai mici ptrate, pentru a ajusta influena fiecrei valori din setul de date i a corecta coeficienii aproximrii. Pentru determinarea varianei exist dou relaii analitice de calcul:
2 =
1 n
(x i x )2 , sau 2 =
i =1
1 n1
(x i x )2 , unde
i =1
x=
ni . i =1
erf(x). Matematic aceast funcie este dat de relaia: erf ( x ) = 2 ( x 2 ) 1 , n care ( x ) este o funcional ce determin analitic distribuia normal standard dup o relaie empiric: 1 2
( x )2
( x, , ) =
2 2
n care simbolurile utilizate au semnificaia definit n cazul aproximrii i regresiei polinomiale, respectiv n cazul metodei celor mai mici ptrate. Funcia MATLAB erf(x) determin valoarea erorii de aproximare a funciei model, pentru fiecare valoare a elementelor matricei x. Aceast eroare este determinat prin integrala definit a distribuiei normale, cnd media normat este setat la zero, iar valoarea varianei este 1/2:
erf ( x ) =
e t dt
0
Pentru a se demonstra limitele procedeului de aproximare, printr-o funcie polinomial, se va prezenta un exemplu, ilustrativ. Se genereaz un vector, uniform spaiat, x=0:0.1:2.5, i se determin, cu funcia MATLAB erf(), distribuia Gauss a erorilor x = (0: 0.1:2.5)'; y = erf(x);
223
Coeficienii polinomului de aproximare, de gradul VI, sunt determinai cu funcia MATLAB polyfit():
f = polyval(p,x); tabel = [x y f y-f] tabel = Valorile x Valorile y Valorile f Valorile erorii 0 0 0.0004 -0.0004 0.1000 0.1125 0.1119 0.0006 0.2000 0.2227 0.2223 0.0004 0.3000 0.3286 0.3287 -0.0001 0.4000 0.4284 0.4288 -0.0004 0.5000 0.5205 0.5209 -0.0004 0.6000 0.6039 0.6041 -0.0002 0.7000 0.6778 0.6778 0.0000 0.8000 0.7421 0.7418 0.0003 0.9000 0.7969 0.7965 0.0004 1.0000 0.8427 0.8424 0.0003 1.1000 0.8802 0.8800 0.0002 1.2000 0.9103 0.9104 -0.0000 1.3000 0.9340 0.9342 -0.0002 1.4000 0.9523 0.9526 -0.0003 1.5000 0.9661 0.9664 -0.0003 1.6000 0.9763 0.9765 -0.0002 1.7000 0.9838 0.9838 0.0000 1.8000 0.9891 0.9889 0.0002 1.9000 0.9928 0.9925 0.0003 2.0000 0.9953 0.9951 0.0002 2.1000 0.9970 0.9969 0.0001 2.2000 0.9981 0.9982 -0.0001 2.3000 0.9989 0.9991 -0.0003 2.4000 0.9993 0.9995 -0.0002 2.5000 0.9996 0.9994 0.0002
224
Se poate observa c, pe acest interval, ajustarea polinomial este relativ corespunztoare, dar, dac se extinde intervalul (vectorul x devine x=0:0.1:5), reprezentarea grafic arat ca aproximarea devine neconform, aceasta deteriorndu-se rapid:
Folosind o alt facilitate oferit de MATLAB, polytool(x,y), care este o aproximare polinomial de grad n interactiv, se pot observa, n urma ctorva manevre simple i intuitive, schimbrile intervenite n aproximarea prin polinoame de diferite grade. Aceast facilitate ofer un instrument deosebit n analiza erorilor i curbelor de aproximare polinomiale, fiind uor de observat care model polinomial este cel mai adecvat n aproximarea pe un anumit interval finit. Interfaa grafic polytool realizeaz aproximarea ntre un vector coloan x i corespondentul y al acestuia. Interfaa se activeaz prin introducerea de la
225
tastatur a vectorilor int, x i y, respectiv a funciei specifice polytool(x,y). Modificarea gradului polinomului de aproximare prin regresie este posibil n caseta Degree, n care este necesar nscrierea gradului polinomului ( 1 n 10 ). Valorile interpolate sunt afiate n mod curent, pentru cele dou axe, dac reprezentarea grafic este bi-dimensional, respectiv n coordonate 3D, dac din meniul Tools, se modific aspectul imaginii. Presupunnd vectorul x = (0: 0.1: 7)', i valorile funciei y=erf(x), se va realiza aproximarea interactiv cu instruciunile:
226
Exist i alte funcii MATLAB specifice, pentru aproximare interactiv, precum aoctool care este sinonim funciei polytool, obiectivul principal al acesteia fiind, ns, analiza covarianei modelului de aproximare.
227
CAPITOLUL VII
AJUSTAREA I APROXIMAREA DATELOR
NOIUNI GENERALE
Observaiile experimentale sunt, n general, seturi de date discrete care, pot fi organizate ca vectori coloan sau matrici, n care, liniile reprezint rezultatele i observaiile la un moment dat. De exemplu, dac se presupune c, n anumite momente ale zilei s-a determinat frecvena traficului de autovehicule, n trei puncte diferite, ale unei localiti, aceste date ar putea fi stocate tabelar. Datele stocate n tabelul alturat pot fi, de asemenea, aranjate, ntr-o matrice cu dimensiunea 24x3:
228
Matricea trafic, a observaiilor zilnice, poate fi utilizat n analize i prelucrri matematice ulterioare. n acest sens, presupunnd necesar reprezentarea grafic, pentru vizualizarea traficului, la un moment dat (considernd reperele orare date de vectorul t=1:24), se folosete urmtoarea secven MATLAB:
t=1:24; set(0,'defaultaxeslinestyleorder','-|--|-.'); set(0,'defaultaxescolororder',[0 0 0]); xlabel('Timpul'), ylabel('Numar de vehicule in trafic'), grid on plot(t,trafic), legend('Locatia A','Locatia B','Locatia C',0)
In practica inginereasc este necesar, att n analiza rezultatelor experimentale, ct i pentru emiterea unor concluzii, ca datele obinute s fie aproximate prin curbe polinomiale, exponeniale sau de alt natur.
229
Cea mai rapid i eficient procedur de ajustare, aproximare, interpolare i extrapolare a datelor experimentale, este Interfaa Grafic Utilizator (Graphical User Interface-GUI ), disponibil n MATLAB, versiunile superioare (Release 12 sau 13). Informaii complete, privind aceast procedur, se regsesc n documentaia de ajutor din meniul Help opiunea Full Product Family Help. Accesarea interfeei grafice (pentru simplificarea exprimrii se va folosi, n continuare, sintagma GUI) pentru ajustarea datelor, se introduce, n fereastra de comand MATLAB, comanda:
cftool
Aceast comand are ca efect activarea interfeei grafice Curve Fitting Tool (Instrument de ajustare a curbelor):
Dac n fereastra de comand a MATLAB, exista vectori coloan de aceeai dimensiune, acetia vor fi selectai automat de editorul de ajustare i stocai n vederea prelucrrii. Altfel, se impune introducerea sau importarea datelor n vectori coloan.
230
PROCEDURA DE AJUSTARE
Procedura de ajustare va fi prezentat aici pentru un caz specific: ajustarea datelor cuprinse n doi vectori coloan y i t. Se presupune c n linia de comand s-au introdus vectorii y i t:
t = [0 .3 .8 1.1 1.6 2.3]'; y = [0.5 0.82 1.14 1.25 1.35 1.40]'; 1. -se introduce comanda pentru activarea interfeei grafice a ajustrii: cftool -Se acceseaz butonul Data... care activeaz o interfa grafic ce permite selectarea valorilor care urmeaz a fi ajustate pe axa X, respectiv pe axa Y i ponderea acestor date (dac aceasta este None valoarea ponderii este implicit 1 ). Atunci cnd se selecteaz un anumit vector pe o ax, n medalion se reprezint grafic valorile vectorului respectiv. De asemenea aceast interfa permite definirea unui set nou de valori, un vector n funcie de altul, de exemplu, prin accesarea butonului Create Data Set. Se nchide sesiunea acestei interfee grafice cu butonul Close. 2. -Din interfaa grafic Curve Fitting Tool se acceseaz butonul Fitting... al crui efect este deschiderea editorului de ajustare compus din dou pri distincte: editorul propriu-zis, Fit Editor, i tabloul ajustrilor, Table of Fits.
Editorul ajustrii , Fit Editor, permite aciuni pentru: Specificarea numelui ajustrii curente, setarea datelor curente i stabilirea regulii de excludere; Explorarea diferitelor metode de ajustare ale seturilor de date curente, folosind o bibliotec de ecuaii, metode de ajustare spline i interpolani; Suprareglarea opiunilor implicite de ajustare (cum ar fi metoda identificrii coeficienilor); Compararea rezultatelor ajustrii;
231
Tabloul ajustrilor , Table of Fits, permite Monitorizarea datelor i ajustrilor anterioare; Afiarea unui sumar al rezultatelor ajustrii; Salvarea sau anularea rezultatelor ajustrii. Se acceseaz butonul New fit care aloc automat un nume implicit ajustriii curente. Presupunem c aceasta se va numi ajustarea_1, iar cu urmtoarea opiune, Data set, se definete setul de date (presupunem c acesta este setul t vs. y, adic vectorul t, n funcie de y) care va fi ajustat n cele ce urmeaz i va fi numit, n continuare, ajustarea_1. Se selecteaz un alt set de date, definit anterior (presupunem c acesta este setul y vs. t, adic vectorul y, n funcie de t), i acesta va fi numit n continuare ajustarea_2. Se alege aproximarea polinomial, iar n urmtoarea seciune se va selecta ajustarea polinomial cuadratic (printr-un
232
polinom de gradul doi: f(x) = p1*x^2 + p2*x + p3). Se valideaz opiunea Immediate apply, ceea ce va avea drept efect afiarea rezultatelor n caseta Results. n paralel MATLAB prelucreaz datele n funcie de opiunile setate i seleciile operate, fiind afiate, n fereastra interfeei grafice Curve Fitting Tool reprezentrile grafice ale celor dou seturi de date, att cele discrete ct i cele previzionate, ajustate.
3. Din meniul View al interfeei grafice Curve Fitting Tool se selecteaz opiunea Residuals-Line Plot:
233
care permite, i realizeaz, reprezentarea grafic a reziduurilor ajustrii, fiind dat o msur real a mrimii erorilor de aproximare, n diferite puncte ale seturilor de date ajustate. Reprezentarea grafic a reziduurilor arat c o ajustare mai bun este posibil, sau nu. n funcie de mrimea erorilor de calcul i a distanei fa de valorile discrete efective, se poate lua decizia unei ajustri ulterioare, pentru creterea calitii aproximrii, prin metode i tehnici multiple.
a e bx ), i s-au obinut reprezentrile grafice (ale rezultatelor ajustrii, respectiv ale reziduurilor), din figur:
Din aceste reprezentri se poate deduce c este dificil a decide care dintre polinoameofer cele mai bune rezultate pentru aproximare sau ajustare, ntruct diferenele
234
reziduale sunt nesemnificative, iar, prin comparaie, ajustarea exponenial cu un singur termen este evident neacoperitoare, datorit gradului mare de incompatibilitate i concordan cu datele discrete.Setul de date ajustate se poate vizualiza accesnd butonul Data..., caseta Data sets, opiunea View:
n continuare, se folosete interfaa grafic Curve Fitting Tool, butonul Plotting... pentru a elimina metoda de ajustare printr-o funcie exponenial, invalidnd caseta corespunztoare, aceast metod dovedindu-se a fi neconcludent pentru ajustarea datelor celor doi vectori:
235
Pentru a examina, datele extrapolate prin cele trei expresii polinomiale de diferite grade, se vor modifica limitele axelor folosind meniul Tools, opiunea Axis Limit, prin modificarea limitei superioare a limitei X Upper Limit la valoarea 2050, ceea ce va permite extrapolarea, prin cele trei expresii polinomiale, a valorii vectorului populatia_USA corespunztoare acestui an:
Se constat c extrapolarea printr-un polinom de gradul 7 va genera o valoare extrapolat, pe baza datelor existente, mult diferit de celelalte valori, demonstrnd neconcordana evident cu datele extrapolate prin celelalte expresii polinomiale. Acest exemplu ilustreaz, foarte clar, c alegerea unei metode de extrapolare trebuie fcut cu mare atenie, n funcie de mai muli factori care ar putea influena asupra corectitudinii rezultatelor.
236
237
n aceast sesiune sunt validate titlurile coloanelor care vor aprea n tabelul Table of Fits. Opiunea SSE (Sum of Squares Due to Error), este o marime statistic ce se refer la mrimea deviaiei valorii de rspuns a ajustrii, fa de valoarea dat, calculat ca suma ptratelor erorilor n funcie de mrimea reziduurilor. Acest parametru este definit prin ecuaia SSE =
i (y i y i )2 , n i =1
n
care i reprezint mrimea reziduului (determinate, i afiate, n MATLAB, cu opiunea Residuals din meniul View):
238
iar yi i y i sunt datele aproximate respectiv previzionate. Valorile reziduale se pot 1 determina dac se cunoate variana datelor ( ), cu relaia i = 2 , sau se poate
(y i y i ) , dac nu se cunoate variana i =1 datelor, n care y i reprezint valoare medie evaluat statistic. R-square reprezint raportul dintre suma ptratelor regresiilor (sum of squares of the regression -SSR) i suma total a ptratelor (total sum of squares 1 aproxima cu relaia i = n
-SST): R square =
i (y i y i )2 i 1
i (y i y i ) i 1
=
= n
i 1, o valoare mai aproape de 1 are semnificaia unei bune aproximri. De exemplu, o valoare R-square=0,99871 (n cazul ajustrii polinomiale de gradul II) arat c exist o variaie de pn la 99,87 % fa de valoarea medie calculat. Parametrul DFE (Degrees of Freedom Adjusted R-Square) folosete parametrul R-square, definit anterior, i ajusteaz aceast valoare pe baza gradelor de libertate ale reziduurilor. Gradele de libertate ale reziduurilor se reprezint diferena dintre numrul valorilor de raspuns i numrul coeficienilor de aproximare: v=n-m. n aceast relaie, v reprezint numrul datelor independente din totalul de n puncte necesare calculrii sumei de ptrate, iar m este numrul de coeficieni ai ecuaiei de aproximare. Modelul matematic, se consider ca fiind un bun indicator statistic al calitii aproximrii cnd sunt adugai coeficieni suplimentari n ecuaia aproximrii. Parametrul RMSE (Root Mean Squared Error) este cunoscut ca eroarea standard a aproximrii i ca eroarea standard a regresiilor. Se determin cu
relaia: RMSE =
SSE = v
(y
i i =1
y i )2
. O valoare apropiat de 0 nseamn
o bun aproximare. Validarea parametrului #Coeff are ca efect afiarea numrului de coeficieni folosii pentru aproximarea datelor. Intervalul de confiden (de siguran) reprezint limitele, inferioar respectiv superioar, ale coeficienilor ecuaiei aproximrii. Formatul afiat pentru un parametru este: p1 = 0.006541 (0.006124, 0.006958), ceea ce nseamn c
239
valoarea calculat a coeficientului este 0.006541, limita inferioar 0.006124 respectiv limita superioar 0.006958. Implicit, nivelul de siguran este 95%, i se poate modifica din interfaa Curve Fitting Tool meniul View, opiunea Confidence level. Limitele de siguran pot fi calculate i afiate grafic din interfaa Curve Fitting Tool meniul View, opiunea Prediction Bounds, sau cu opiunea Analysis din interfaa Curve Fitting Tool.
240
ntr-o
structur
multidimensional,
cea de-a treia opiune salveaz rezultatele ajustrii, oferind informaii asupra parametrilor numerici ai ajustrii
241
Din interfaa Curve Fitting Tool, butonul Analysis se pot realiza analize ale parametrilor ajustrii, n funcie de datele originale. Se pot interpola, extrapola date, se pot diferenia i integra curbele de variaie ale ajustrii, ntre anumite limite. Pentru aceasta, se scceseaz vectorul Xi dorit, din cmpul Analyze at Xi, se selecteaz caseta aferent evalurii Evaluate fit at Xi, pentru afiarea rezultatelor i reprezentarea grafic a acestora fiind necesar validarea casetelor Plot results i Plot data set, dup care se acceseaz butonul Apply, pentru realizarea procedurii. De exemplu pentru extrapolarea necesar identificrii datelor ajustrii folosind ajustarea polinomial, pentru populaia corespunztoare anului 2025, se va modifica ultima valoare din cmpul Analyze at Xi, la valoarea 2025:
242
Ex.:
Se va realiza o ajustare polinomial de ordinul III, V i VI, pentru vectorii x = [4:0.1:7 9:0.2:12]', y = c(1) + c(2)*x + c(3)*x.^2 + c(4)*x.^3 + (rand(size(x))-0.5), ai crui coeficieni sunt elementele vectorului c = [8 -5 13 12].
243
244
Ex.:
Se va ajusta o curb de variaie a coeficientului de dilatare a Cu, n raport cu temperatura. Pentru aceasta se va considera vectorul temp al temperaturilor, un vector cu 236 elemente, cu temperaturi cuprinse ntre 24,41 [K] i 848,23 [K], iar valorile msurate experimental, pentru coeficientul de dilatare, pentru aceste temperaturi, stocate n vectorul coloan coef_CU. Se va realiza o aproximare raional, cu o funcie avnd atat numrtorul ct i numitorul, polinoame de gradul doi. Dup ce sunt introduse datele, n fereastra de comand (prin una din opiunile posibile:de la tastatur, import, ncarcare etc.), se activeaz procesul de ajustare, cu funcia cftool, apoi se seteaz parametrii de aproximare din interfaa Fitting..., selectnd, din cmpul Type of fit, opiunea Rational. Apoi, se nominalizeaz tipul polinomului de la numrtor (Numerator), respectiv de la numitorul expresiei raionale (Denominator):
245
Folosind butonul Table options..., se valideaz parametrii numerici ai ajustrii, parametri care vor fi cuprini n tabelul Table of Fits. Afiarea rezultatelor i reziduurilor ajustrii se realizeaz selectnd opiunea Residuals-Plot line, din meniul View al interfeei grafice Curve Fitting Tool:
Este uor de observat c sunt zone n care aproximarea nu este acoperitoare: lipsesc parametrii i rezultatele ajustrii:
246
Se ncearc, n consecin o alt ajustare, de tipul raional polinomial cu polinoame de gradul III, att la numrtor ct i la numitor:
Acest tip de aproximare, se observ din interfaa Fit Editor cmpul Results, este neconvergent, ceea ce anuleaz posibilitatea alegerii unei astfel de ajustri pentru acest set de date, fiind, astfel necesar o alt ajustare.
247
Modificarea expresiei raionale de ajustare, astfel nct polinomul de la numrtor s fie de gradul III, iar cel de la numitor, de gradul II, are ca rezultat o aproximare mult mbuntit, reziduurile fiind aleatoriu distribuite fa de valoarea zero, ceea ce nseamn o ajustare realist:
n cmpul Results al interfeei Fit Editor, sunt prezentai parametrii ajustrii, i coeficienii modelului matematic al acesteia. Interfaa Curve Fitting Tool, prezint, n cmpul Residuals, dispersia cvasi-uniform a reziduurilor, n raport cu linia zero. Acest aspect al dispersiei este o msur a unei aproximri corecte i valabil pentru acest set de date. Aprecierea unei ajustri este relativ dificil de realizat pentru un numr mare de date pentru un set aleatoriu de curbe de ajustare. Astfel, n acest proces este foarte posibil s apar i rutina examinrii concordanei, respectiv autosuficiena utilizatorului. Din acest motiv, dup evaluarea ajustrii prin examinarea graficelor rezultate, foarte important este evaluarea numeric a ajustrii, ceea ce presupune: evaluarea reziduurilor; evaluarea concordanei; aprecierea confidenei rezultatelor i previzionarea limitelor de varian.
248
Aceste aspecte sunt determinante n aprecierea calitii unei ajustri numerice corecte i conforme, n proporie determinant, cu datele msurate i ajustate. Aceste operaii pot fi grupate n dou categorii: numerice i grafice. n timp ce reziduurile i predicia limitelor de varian sunt msuri grafice, concordana, respectiv predicia limitelor de varian sunt determinri numerice. Metodele grafice de apreciere a ajustrii sunt mult mai expresive i uor de evaluat calitativ, nefiind necesar o pregtire deosebit n acest sens, n timp ce analiza numeric a ajustrii este mai puin comprehensiv datorit faptului c valorile numerice pot include multe informaii greu de difereniat n cazuri specifice. Este evident c sunt posibile multe situaii n care ambele tipuri de metode s fie folosite pentru evaluarea aceleiai ajustri. Adoptarea uneia dintre metode n defavoarea alteia este determinatn, primul rnd, de nelegerea procesului de ajustare, apoi de modelul parametric de ajustare ales. Semnificaia fizic a coeficienilor unui anume model matematic este esenial a fi corect neleas, fiind nevoie, n plus, de evaluarea prin mai multe metode i modele de ajustare, pentru aflarea celei mai apropiate soluii. Anterior, a fost prezentat metodica afirii reziduurilor unei ajustri, respectiv a fost prezentat modul de calcul al mai multor coeficieni i parametri ai ajustrii. Printre acetia, unul dintre cei mai importani pai ai evalurii unei ajustri, este calculul limitelor de varian. Aceste limite sunt calculate pentru dou variante: predicia simultan, respectiv predicia nesimultan. Predicia simultan se refer la confidena tuturor rezultatelor ajustate, n timp ce confidena unui anume parametru genereaz o predicie nesimultan. Evaluarea metodelor de ajustare, prin estimarea, calitativ sau cantitativ, a erorilor de aproximare i prin cuantizarea numeric, sau nu, a reziduurilor, este, aadar, o operaiune care implic o bun pregtire a ntregului proces de aproximare sau ajustare. Nu pot exista valori sau coeficieni de corecie pentru estimarea erorilor de ajustare sau aproximare. Aceste limite sunt definite, sau prescrise de ctre utilizator, i depind, n cea mai mare msur de ceea ce se urmrete prin ntregul proces de aproximare sau ajustare. Ne-existnd reete pentru acest tip de operaiuni, se impune, de la sine, o concluzie: pregtirea unei baze solide n domeniul ajustrii numerice, prin orice metod, se constituie ca fiind cheia unor rezultate eficiente i corecte. Not: n Anex este prezentat un fiier script, demonstrativ, care surprinde o multitudine de funcii MATLAB, i care realizeaz estimarea parametrilor tehnologici i de transformare, ai legii de deformare superplastic.
249
[11]
BEJU, I., et al.. -Tehnici de calcul tensorial euclidian cu aplicaii, Editura Tehnic, Bucureti, 1977 . BEU, T. A. Calcul numeric n C, Ed. Albastr, Cluj-Napoca, 1999. BONET, J. - Numerical Simulation of the Superplastic Forming of Thin Sheet Components Using the Finite Element method, " International Journal for Numerical Methods in Engineering", vol. 30, pag. 1719- 1737, 1990. BROWN, E.E.& col.- Superalloys Processing 2nd. Int.Conf. on Superalloys, Publ.AIME, 1972, pag. L1-L12. BUDIANSKY, B. & col.- Mechanics of Solids, Ed. H.G.Hopkins & M.J.Sewell, publ. Pergamon Press Oxford, 1982, pag. 13. DODESCU, GH. -Metode numerice n algebr, Editura Tehnic, Bucureti, 1979 . FORRAY, M.J. - Calculul variaional n tiin i tehnic, Editura Tehnic, Bucureti, 1975 . GHINEA, M. -MATLAB- Calcul numeric, grafic, aplicaii, Editura Teora, Bucureti, 1997. GREBENIAN, G. Metod de optimizare numeric a parametrilor deformrii superplastice, Sesiunea anual de comunicri tiinifice, Oradea, 1999 GREBENIAN, G. Program dezvoltat n mediul MATLAB 5.3, pentru determinarea analitic a parametrilor tehnologici la deformarea superplastic (partea I-Consideraii teoretice), Simpozion Materiale avansate, tratamente termice i calitatea managementului, Editura Politehnica, Timioara, 2001. GREBENIAN, G. - Program dezvoltat n mediul MATLAB 5.3, pentru determinarea analitic a parametrilor tehnologici la deformarea superplastic (partea II-Aplicaie), Simpozion Materiale avansate, tratamente termice i calitatea managementului, Editura Politehnica, Timioara, 2001. GREBENIAN, G. Parametrii tehnologici ai deformrii superplasticeprogram de calcul n MATLAB-studiu de caz, Sesiunea anual de comunicri tiinifice, Oradea, 2002. HAHN, B.D. Essential MATLAB for Scientists and Engineers, Ed. By
250
[15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27]
LEWIS, P.E.,.a. - The Finite element Method. Principles and Applications, Addison Wesley Publishing Company, London, 1991 . LUNGU, N. - Matematici cu aplicaii tehnice, Editura Tehnic, Bucureti,1990 . MARCIUK, G.I Metode de analiz numeric, Editura Academiei Romne, Bucureti, 1983, trad. din lb. rus . MARINESCU, GH. et al. Probleme de analiz numeric, Ed. Didactic i Pedagogic, Bucureti, i978. MOSZYNSKI, K.-Metode numerice de rezolvare a ecuaiilor difereniale ordinare, Ed. Tehnic, Bucureti, 1973. MUNTEANU, M. - Metoda elementului finit, Reprografia Universitii Transilvania , Braov,1997. PASCARIU, I -Elemente finite. Concepte, aplcaii, Editura Militar,Bucureti, 1985. POTERAU, V.F.,.a..-Metode numerice n elasticitate i plasticitate,vol. I, Editura Academiei Romne, Bucureti, 1993 . OLARIU, V.,.a.. - Modelare numeric cu elemente finite, Editura Tehnic, Bucureti, 1986 . SALVADORI, M.-Metode numerice n algebr, Editura Tehnic, Bucureti, 1972 SAWCZUK, A.,.a. - Teoria plasticitii, Editura Tehnic, Bucureti, 1970, trad. de prof. dr. ing. N. Cristescu . SIMIONESCU, I. et al.-Metode numerice n tehnic, Ed. Tehnic, Bucureti, 1995. VOINEA, R.,.a. -Introducere n mecanica soliduli cu aplicaii n inginerie, Editura Academiei Romne, Bucureti, 1989 .
251
ANEX
PROGRAM PENTRU DETERMINAREAPARAMETRILOR DE INTRARE AI SIMULRII PROCESULUI DE DEFORMARE SUPERPLASTIC
Programul este astfel realizat nct s nu fie necesare comenzi suplimentare pentru executarea ncrcrii datelor experimentale, pentru plotarea graficelor pe baza calculelor, respectiv pentru executarea unor opiuni. Comanda programului poate fi realizat att din fereastra de comand(Command Window) ct i prin intermediul casetelor de dialog(msgdlg sau msgbox) sau al butoanelor. Programul determin prin calcul direct parametrii tehnologici ai deformrii superplastice pentru diferite situaii impuse, fiind organizat astfel: -liniile de ajutor i informaii sunt de culoare verde; -irurile de caractere sunt marcate cu culoarea roie; -buclele if- else- end sau buclele for- end, sunt marcate cu culoare albastr, ca de altfel toate instruciunile Matlab. %Program de analiza a dependentei %dintre parametrii deformarii superplastice. %Programul foloseste ca date de intrare %rezultate experimentale stocate %in fisierul "date.dat"; %Pentru exemplificare s-au introdus cele sase matrici cu valori %experimentale in cadrul programului % Incarcarea datelor %(liniile 12 -17 sunt transformate in "comentarii" %in cazul exemplificarii; altfel sunt linii de program) %load k; %load temp; %load mar_gr; %load eps; %load m; %load sigma; %matricea coninnd valorile consistenei mecanice;
k=[ 2780 1810 570 60 2410 3550 2310 870 90 3070 4005 2780 1180 140 3680 4530 3140 1510 210 4410 5110 3770 1810 350 4980 5780 4005 2180 540 5620 6140 4260 2610 730 5970 6730 ; 4530 ; 2950 ; 1420 ; 6740 ;
252
1160 200 70 390 180 110 55 temp=[ 299 333 393 443 299 333 393 443 299 341 363 393
1670 290 100 530 250 170 85 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0
2130 390 150 710 320 220 120 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5 7.5 7.5 5.5 5.5 5.5 5.5 2.0 2.0 2.0 2.0
2720 560 260 970 470 300 170 299 333 393 443 299 333 393 443 299 341 363 393 299 333 393 443 299 333 393 443 299 341 363 393
3260 860 420 1490 710 470 250 299 333 393 443 299 333 393 443 299 341 363 393 7.5 7.5; 7.5; 7.5; 5.5; 5.5; 5.5; 5.5; 2.0; 2.0; 2.0; 2.0]; ; ; ; ; ; ; ; ; ; ; ; ];
253
% se incarca un set de 6 matrici : temp = temperatura, % mar_gr = marimea grauntilor, eps = viteza de deformare, m = coef. de sensibilitate, % sigma = rezistenta la deformare, k = consistenta. % Afisarea grafica a parametrilor: MESAJ1(1)={'DORITI SA AFLATI COORDONATELE UNOR PUNCTE DE PE GRAFIC?'}; MESAJ1(2)={'AFIRMATIV: apasati tasta "1", urmata de "ENTER"\NEGATIV:apasati "0", "ENTER"'}; MESAJ2(1)={'ALEGETI PUNCTELE...'}; MESAJ2(2)={'Folositi mouse-ul pentru a selecta punctele!\Pentru incheiere apasati "ENTER"'}; MESAJ3(1)={'C O O R D O N A T E L E S U N T A F I S A T E '}; MESAJ3(2)={'I N M A T L A B W O R K S P A C E'}; MESAJ4(1)={'APASATI ORICE TASTA PENTRU A CONTINUA'}; MESAJ4(2)={'APASATI TASTELE [Ctrl + C] PENTRU A RENUNTA'};
254
MESAJ5(1)={'S F A R S I T P R O G R A M'}; % se construiesc controalele:h,j,l %h=uicontrol('Style','text','Position',[80 80 300 65],'String',MESAJ1,'BackgroundColor','b','ForegroundColor','y','FontWeight','bold '); % j=uicontrol('Style','text','Position',[80 80 300 65],'String',MESAJ2); % l=uicontrol('Style','text','Position',[80 80 300 65],'String',MESAJ3); msgbox('APASATI ORICE TASTA PENTRU A CONTINUA!','!!! NUARE !!!') CONTI
msgbox('PENTRU INTRERUPEREA EXECUTARII PROGRAMULUI(in orice moment!), SI REVENIREA IN "COMMAND WINDOW" APASATI COMBINATIA DE TASTE [Ctrl+C] !','!!! H E L P !!!') pause subplot(2,3,1); plot(temp/50000,'r'); %set(title('TEMPERATURA [C]'),'color','r') index=1; %text(50,0.0055,{'\leftarrow temp'},'FontSize',10) legend('temp.',1) subplot(2,3,2);plot(mar_gr/1000,'y'); %set(title('DIM. GRAUNTILOR [m*10^-6]'),'color','y') legend('dim. gr.',1) subplot(2,3,3);plot(eps,'m'); %set(title('VIT. DE DEF. [sec^-1]'),'color','m') legend('vit. de def.',1) subplot(2,3,4);plot(m/100,'g'); %set(title('COEFICIENTUL m'),'color','g') legend('coef. "m"',1) subplot(2,3,5);plot(sigma/10000,'b'); %set(title('REZ. DE DEF. [N/mm^2]'),'color','b') legend('rez. de def.',1)
255
msgbox('URMARITI MESAJELE DE LA BAZA FIGURII','!! I M P O R T A N T !!') zoom on msgbox('Pentru "ZOOM- IN" folositi butonul stang al mouse- ului...Pentru "ZOOM- OUT" folositi butonul drept!','!!! Z O O M A C T I V !!!') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; delete(h) j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta')
256
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE ! VALORILE AFISATE AU EROAREA DATORATA POZITIONARII POINTERULUI PE GRAFIC !','!! VERIFICARE !!') elseif (r~=1)&(r~=0) disp('!! EROARE!! NU ATI APASAT NICI TASTA "1" SI NICI TASTA "0" ! ACESTA ESTE MOTIVUL PENTRU CARE PRACTIC S-A PIERDUT O ETAPA A PROGRAMULUI !! PENTRU A REVENI APASATI [Ctrl+C] DUPA CARE INTRODUCETI <nume_fisier> IN COMMAND WINDOW !' ) errordlg('NU ATI APASAT NICI TASTA "1" SI NICI TASTA"0"! ACESTA ESTE MOTIVUL PENTRU CARE PRACTIC S-A PIERDUT O ETAPA A PROGRAMULUI !! PENTRU A REVENI APASATI [Ctrl+C] DUPA CARE INTRODUCETI <nume_fisier> IN COMMAND WINDOW ! PENTRU A CONTINUA APASATI ORICE TASTA !','!!! EROARE UTILIZATOR !!!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left','Visible','on'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); zoom off pause %Reprezentarea grafica a expresiei sigma=k*(eps^m) zoom on msgbox('Pentru "ZOOM- IN" folositi butonul stang al mouse- ului...Pentru "ZOOM- OUT" folositi butonul drept!','!!! H E L P !!!') sigma_calc = k.*(eps.^m); subplot(1,1,1) plot(sigma_calc,'r'); ylabel('REZISTENTA [kPa]') xlabel('INDEX')
257
set(title('GRAFICUL VALORILOR CALCULATE PENTRU REZISTENTA DE DEFORMARE'),'color','r') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); disp(blanks(1)') if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left','Visible','on'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause disp(' A S T E P T A T I V A R O G !... ')
258
g = waitbar(0,'A S T E P T A T I V A R O G !...'); for i=1:1000, % SE REALIZEAZA CALCULE % waitbar(i/1000) end close(g) % Aplicarea metodei celor mai mici patrate: temp1 = temp(1:8); mar_gr1 = mar_gr(1:8); eps1 = eps(1:8); m1 = m(1:8); sigma1 = sigma(1:8); k1 = k(1:8); temp2 = temp(9:16); mar_gr2 = mar_gr(9:16); eps2 = eps(9:16); m2 = m(9:16); sigma2 = sigma(9:16); k2 = k(9:16); temp3 = temp(17:24); mar_gr3 = mar_gr(17:24); eps3 = eps(17:24); m3 = m(17:24); sigma3 = sigma(17:24); k3 = k(17:24); temp4 = temp(25:32); mar_gr4 = mar_gr(25:32); eps4 = eps(25:32); m4 = m(25:32); sigma4 = sigma(25:32); k4 = k(25:32); temp5 = temp(33:40); mar_gr5 = mar_gr(33:40); eps5 = eps(33:40);
259
260
eps11 = eps(81:88); m11 = m(81:88); sigma11 = sigma(81:88); k11 = k(81:88); temp12 = temp(89:96); mar_gr12 = mar_gr(89:96); eps12 = eps(89:96); m12 = m(89:96); sigma12 = sigma(89:96); k12 = k(89:96); % Cu majuscule se vor nota valorile calculate ale lui 'm' si 'k' prin metoda numerica conditie = 1; pas = 0.001; eroare = 0.000001; expresie = 0; M = 0; i = 0; % Bucla de cautare a valorii lui M % pentru care 'expresie' se apropie de zero in limita 'erorii' while conditie M = M+pas; i = i+1; s11 = sum(eps1.^(2*M)); s21 = sum((eps1.^M).*sigma1.*log(eps1)); s31 = sum((eps1.^M).*sigma1); s41 = sum((eps1.^(2.*M)).*sigma1.*log(eps1)); expresie = s11*s21-s31*s41; s12 = sum(eps2.^(2*M)); s22 = sum((eps2.^M).*sigma2.*log(eps2)); s32 = sum((eps2.^M).*sigma2); s42 = sum((eps2.^(2.*M)).*sigma2.*log(eps2)); expresie = s12*s22-s32*s42;
261
262
s10 = sum(eps10.^(2*M)); s20 = sum((eps10.^M).*sigma10.*log(eps10)); s30 = sum((eps10.^M).*sigma10); s40 = sum((eps10.^(2.*M)).*sigma10.*log(eps10)); expresie = s10*s20-s30*s40; s111 = sum(eps11.^(2*M)); s211 = sum((eps11.^M).*sigma11.*log(eps11)); s311 = sum((eps11.^M).*sigma11); s411 = sum((eps11.^(2.*M)).*sigma11.*log(eps11)); expresie = s111*s211-s311*s411; s112 = sum(eps12.^(2*M)); s212 = sum((eps12.^M).*sigma12.*log(eps12)); s312 = sum((eps12.^M).*sigma12); s412 = sum((eps12.^(2.*M)).*sigma12.*log(eps12)); xpresie = s112*s212-s312*s412; if abs(expresie) < eroare conditie = 0 end end K1 = sum((eps1.^M).*sigma1)/sum(eps1.^(2*M)); K2 = sum((eps2.^M).*sigma2)/sum(eps2.^(2*M)); K3 = sum((eps3.^M).*sigma3)/sum(eps3.^(2*M)); K4 = sum((eps4.^M).*sigma4)/sum(eps4.^(2*M)); K5 = sum((eps5.^M).*sigma5)/sum(eps5.^(2*M)); K6 = sum((eps6.^M).*sigma6)/sum(eps6.^(2*M)); K7 = sum((eps7.^M).*sigma7)/sum(eps7.^(2*M)); K8 = sum((eps8.^M).*sigma8)/sum(eps8.^(2*M)); K9 = sum((eps9.^M).*sigma9)/sum(eps9.^(2*M)); K10 = sum((eps10.^M).*sigma10)/sum(eps10.^(2*M)); K11 = sum((eps11.^M).*sigma11)/sum(eps11.^(2*M)); K12 = sum((eps12.^M).*sigma12)/sum(eps12.^(2*M)); sigma_calc1 = K1.*(eps1.^((-1)*M)); sigma_calc2 = K2.*(eps2.^((-1)*M)); sigma_calc3 = K3.*(eps3.^((-1)*M)); sigma_calc4 = K4.*(eps4.^((-1)*M)); sigma_calc5 = K5.*(eps5.^((-1)*M));
263
subplot(1,2,1) plot(eps1,sigma_calc1,'r') grid on set(title('SIGMA CALCULAT-1'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta')
264
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause hold off subplot(1,2,2) plot(eps2,sigma_calc2,'b');grid set(title('SIGMA CALCULAT-2'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ')
265
disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end l=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ3,... 'BackgroundColor','c','ForegroundColor','k','FontWeight','bold','HorizontalAlignme nt','center'); disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,1) plot(eps3,sigma_calc3,'g') set(title('SIGMA CALCULAT-3'),'color','g') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left');
266
disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left');
267
subplot(2,1,2) plot(eps4,sigma_calc4,'k') set(title('SIGMA CALCULAT-4'),'color','k') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)')
268
uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(1,1,1) subplot(1,2,1) plot(eps5,sigma_calc5,'y') set(title('SIGMA CALCULAT-5'),'color','y') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta')
269
helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(1,2,2) plot(eps6,sigma_calc6,'r') set(title('SIGMA CALCULAT-6'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)')
270
disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,1) plot(eps7,sigma_calc7,'m') set(title('SIGMA CALC7'),'color','m') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');
271
if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps8,sigma_calc8,'c') set(title('SIGMA CALCULAT-8'),'color','c') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left');
272
disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause
273
subplot(1,2,1) plot(eps9,sigma_calc9,'b') set(title('SIGMA CALCULAT-9'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left');
274
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(1,2,2) plot(eps10,sigma_calc10,'k') set(title('SIGMA CALCULAT-10'),'color','k') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else
275
subplot(2,1,1) plot(eps11,sigma_calc11,'r') set(title('SIGMA CALCULAT-11'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!')
276
else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps12,sigma_calc12,'b') set(title('SIGMA CALCULAT-12'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:')
277
disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause % Trasare grafic puncte experimentale subplot(2,1,1) plot(eps1,sigma1,'r') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');
278
if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps2,sigma2,'g*') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','g')
279
disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left');
280
pause subplot(2,1,1) plot(eps3,sigma3,'b') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta')
281
disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps4,sigma4,'g') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','g') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y])
282
disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,1) plot(eps5,sigma5,'k') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','k') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left');
283
disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps6,sigma6,'r') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left');
284
disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause
285
subplot(2,1,1) plot(eps7,sigma7,'b') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left');
286
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps8,sigma8,'y') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','y') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else
287
disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,1) plot(eps9,sigma9,'r') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','r') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)')
288
disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps10,sigma10,'c') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','c') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"');
289
'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,1) plot(eps11,sigma11,'r') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','r')
290
disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left');
291
n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause subplot(2,1,2) plot(eps12,sigma12,'b') set(title('VITEZA DE DEFORMARE FUNCTIE DE REZISTENTA LA DEFORMARE'),'color','b') disp(blanks(1)') h=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ1,... 'BackgroundColor','b','ForegroundColor','y','FontWeight','bold','HorizontalAlignme nt','left'); disp(blanks(1)') r=input('DORITI SA AFLATI COORDONATELE PUNCTELOR DE PE GRAFIC ?\n\n PENTRU "DA" APASATI "1 urmat de ENTER"\n PENTRU "NU" APASATI "0 urmat de ENTER"'); if r==1; j=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); disp('ALEGETI PUNCTELE ! ') disp('INCHEIATI APASAND TASTA "E N T E R " ') [x,y]=ginput; disp(blanks(1)') disp('C O O R D O N A T E L E S U N T:') disp(blanks(1)') disp([blanks(4),'ABSCISA',blanks(6),'ORDONATA']) disp(blanks(1)') disp([x,y]) disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') helpdlg('COORDONATELE PUNCTELOR SELECTATE SUNT AFISATE IN WORKSPACE','!! VERIFICARE !!') else
292
disp('Apasati orice tasta pentru a continua') disp('Apasati [Ctrl + C] pentru a renunta') end disp(blanks(1)') uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ2,... 'BackgroundColor','y','ForegroundColor','b','FontWeight','bold','HorizontalAlignme nt','left'); n=uicontrol('Style','text','Position',[8 5 800 25],'String',MESAJ4,... 'BackgroundColor','g','ForegroundColor','r','FontWeight','bold','HorizontalAlignme nt','left'); pause delete(j) delete(h) msgbox('S F A R S I T P R O G R A M','!!!! OPTIMIZARE !!!!') disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ') disp(' ~~~~~~~~~~ SFARSIT PROGRAM ~~~~~~~~ ') disp(' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ') %Sfarsit program