122472608-matlab

216
Curs 1 MATLAB The Language of Technical Computing numere/variabile/functii uzuale Ce este MATLAB-ul? MATrixLABoratory este un limbaj de programare, mai exact un interpretor pentru programarea calculelor numerice complexe. Produs de firma MathWorks Inc. Pachet de programe de inalta performanta pentru calcul si analiza numerica, simulari si reprezentari grafice in domeniul stiintei si ingineriei. MATLAB integreaza analiza numerica cu calculul matriceal, cu prelucrarea semnalelor si cu grafica intr-un mediu usor de utilizat. MATLAB este construit pe baza unui soft sofisticat de calcul matricial de analiza a ecuatiilor liniare. Poate fi utilizate in domenii: matematica aplicata, fizica, chimie, tehnic, finante si in orice domeniu care utilizeaza modele ce necesita calcule numerice complexe.Resurse de calcul Elementul de baza cu care lucreaza MATLAB-ul este matricea numerica rectangulara, cu elemente reale sau complexe. Resurse de calcul si reprezentare grafica: Operatii matematice fundamentale, Programare, Algebra liniara si functii matriceale, Analiza datelor si transformatelor Fourier, Analiza numerica neliniara, Reprezentarea graficelor 2D si 3D,Vizualizarea graficelor,Import si export de documente

Upload: chiritoiu-tiberiu

Post on 07-Dec-2014

123 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 122472608-matlab

Curs 1 MATLABThe Language of Technical Computingnumere/variabile/functii uzualeCe este MATLAB-ul?

MATrixLABoratory este un limbaj de programare, mai exactun interpretor pentru programarea calculelor numericecomplexe. Produs de firma MathWorks Inc.Pachet de programe de inalta performanta pentru calcul sianaliza numerica, simulari si reprezentari grafice in domeniulstiintei si ingineriei. MATLAB integreaza analiza numerica cu calculul matriceal,cu prelucrarea semnalelor si cu grafica intr-un mediu usor deutilizat. MATLAB este construit pe baza unui soft sofisticat de

calcul matricial de analiza a ecuatiilor liniare.

Poate fi utilizate in domenii: matematica aplicata, fizica, chimie,tehnic, finante si in orice domeniu care utilizeaza modele cenecesita calcule numerice complexe.Resurse de calcul Elementul de baza cu care lucreaza MATLAB-ul estematricea numerica rectangulara, cu elemente reale sau

complexe.

Resurse de calcul si reprezentare grafica: Operatii matematice fundamentale, Programare, Algebraliniara si functii matriceale, Analiza datelor sitransformatelor Fourier, Analiza numerica neliniara, Reprezentarea graficelor 2D si 3D,Vizualizareagraficelor,Import si export de documente

Programele elaborate in mediul MATLAB se salveaza infisiere cu extensia .m, numite M-fisiere.

Page 2: 122472608-matlab

Realizare structuralaMATLAB este realizat sub forma unui nucleu de baza, cuinterpretor propriu, in jurul caruia sunt construiteToolbox-uri - aplicatii specificeToolbox – o colectie extinsa de functii MATLAB caredezvolta mediul de programare, pentru a rezolvaprobleme din domenii variateToolbox-uri disponibileSignal Processing – pentru procesarea semnalelor si analiza seriilortemporaleImage Processing – pentru procesarea imaginilor si a semnalelorbidimensionaleNeural Network – pentru proiectarea si simularea retelelor neuraleStatistics – pentru analiza, modelarea si simularea datelorSpline – aproximare si modelare folosind functiiControl System Design – pentru analiza si proiectarea sistemelorautomate de controlRobust Control – pentru sinteza sistemelor care trebuie sa functionezein conditii de incertitudineSystem Identification – pentru procesarea semnalului in vedereamodelarii parametrice si analiza seriilor temporaleAerospace, Bioinformatics, Computer Vision, Curve Fitting,

Econometrics, Filter Design, Financial, Global Optimization ,Image Acquisition, Parallel Computing, Symbolic Math,

SimBiology, Wavelet, Simulink

Page 3: 122472608-matlab

MATLAB Desktop

Page 4: 122472608-matlab

Taste ajutatoare in MATLAB1. Tasta sageata in sus

>> y=sin(45)dar din greseala scrieti>> y=sine(45)MATLAB returneaza urmatorul mesaj:??? Undefined function or method 'sine' for input argumentsof type 'double'.Apasand tasta sageata in sus se rescrie comanda tiparita

anterior.

Taste ajutatoare in MATLAB2. Tasta Tab

Ati uitat numele functiei pe care vreti s-o folositi :>> y=sqApasati tasta TAB si selectati functia>> y=sqrt(45)3. Tasta ;

Aplicata la sfarsitul comenzii suprima afisajul din fereastraCommand Window.>> y=25+3 ;MATLAB salveaza valoarea variabilei y in memorie :>> y

Page 5: 122472608-matlab

Structura sistemului MATLABStructura sistemului MATLAB consta in 5 parti principale: 1. Mediul de dezvoltare - set de unelte care faciliteazafolosirea functiilor si fisierelor MATLAB. Multe dintreacestea reprezinta de fapt interfetele grafice si includ:fereastra principala MATLAB sau MATLAB Desktop,

fereastra de comenzi sau Command Window,

fereastra ce memoreaza istoria comenzilor sau Command

History,

browser-ele de Help, Workspace, Files, Search Path etc.Structura sistemului MATLAB 2. Biblioteca de funcţii matematice MATLAB - vastacolectie de algoritmi de calcul, pornind de la functiielementare precum suma, sinus, cosinus si aritmeticacomplexa, pana la funcţii mai sofisticate precum inversarede matrici, calcul de valori proprii, functii Bessel, sitransformata Fourier.Structura sistemului MATLAB 3. Limbajul MATLAB - un limbaj matrice/vector de inaltnivel ce include instructiuni de control al buclelor, functii,structuri de date, comenzi de intrare/iesire si instructiuni deprogramare orientata pe obiecte. Limbajul MATLABpermite atat ”programarea superficiala” pentru crearearapida a unor mici programe de calcul specifice, cat si"programarea in detaliu" in vederea dezvoltarii unorprograme complexe de nivel superior.Structura sistemului MATLAB 4. Handle Graphics®. Handle Graphics - reprezintasistemul de grafica MATLAB si include atat comenzi deinalt nivel pentru vizualizarea 2D şi 3D a datelor, procesarede imagini, animatie si grafica, cat si comenzi de jos nivelce permit personalizarea completa a reprezentarilor graficesi construirea integrala a interfetelor grafice (GUI) pentruaplicatiile MATLAB.Structura sistemului MATLAB 5. MATLAB Application Program Interface (API) - este

Page 6: 122472608-matlab

o biblioteca ce permite scrierea programelor C si Fortran ceinteractioneaza cu MATLAB. Biblioteca contine facilitatide apel de subrutine din MATLAB (dynamic linking), deapelare a MATLAB-ul ca pe o masina de calcul, si de citiresi scriere de fisiere MAT-files.Moduri de lucru (mediu de programare)•modul linie de comanda – fiecare linie este prelucrataimediat si rezultatele sunt afisate (comenzile seintroduc in Command Window)modul de lucru cu programe continute in fisiere.Fisierele ce contin instructiuni MATLAB se numescfisiere M, deoarece au extensia .m (fisierele M potapele alte fisiere M sau pot contine apeluri recursive)•Fisierele .m•Fisiere script – cand trebuie executate in mod repetato secventa de comenzi MATLAB. Trebuie salvate cuextensia .m Nu permit integrarea in programe mari,construite pe principiul modularizarii. Sunt apelabileprin tastarea numelui lor.•Fisiere function – declararea propriilor functii. Potlucra cu argumente. Pot fi apelate din alte functii.Numele functiei trebuie sa fie acelasi cu numele

fisierului in care se salveaza funtia si trebuie

salvat cu extensia .m MATLAB presupune implicit

ca noile functii lucreaza pe matrici

Fisierele .m sunt salvate implicit in subdirectorulWork, al directorului MATLAB•

Page 7: 122472608-matlab

Exportul fisierelor – functia save

Salvarea unui fisier de date se face cu functia save

Sintaxa: save nume_fisier nume_variabile- format_date

Exemple: save – salveaza toate variabilele in fisierul matlab.mat save nume_fisier salveaza toate variabilele/datele informat binar, nume_fisier .mat

save nume_fisier x y - salveaza variabilele x si y informat binar, nume_fisier .mat

save nume_fisier.ext -ascii -tabs se salveaza toate variabilele in fisierul nume_fisier.ext cu toate dateleseparate de TABImportul fisierelor – functia load

Incarcarea unui fisier de date se face cu functia load

load nume_fisier – variabilele si valorile lor sunt stocatein workspace si pot si folosite. Implicit se consideraextensia .mat

load masuratori.txt – datele din fisierul masuratori.txt

sunt stocate intr-o variabila numita masuratori. Oriceextensie in afara de .mat indica MATLAB-ului ca datelesunt incarcate ca date ASCII, text.

File\Import Data – se incarca fisiere extensii diferite.Caractere speciale:Se foloseste la generarea diviziunilor / range( ) Folosite pentru “corpul” unei functii[ ] Pentru desemnarea unei matrici/vector… Continuarea unei comenzi Matlab pe linia decomanda urmatoare,Separator intre instructiuni pe aceiasi linie decomanda (cu ecou pe ecran);Separator intre instructiuni pe aceiasi linie de

Page 8: 122472608-matlab

comanda ( fara ecou pe ecran)% Se foloseste pentru a anunta comentarii in program!Parasirea mediului Matlab pentru o sesiune de lucruextern=Asignare'Transpusa unei matrici[;] Separator intre liniile unei matriciTipuri de date - Numere••••••In afara datelor de tip numeric, MATLAB lucreaza si cu date

de tip logic sau de tip caracter.

Notatia zecimala conventionala, cu punct zecimal optional sisemne plus sau minus.Notatia stiintifica foloseste litera e pentru a specifica 10 la putereacorespunzatoare. Numerele imaginare folosesc fie i fie j ca sufix. Toate numerele sunt stocate intern folosind formatul long, 64biti

standardizat, avand o precizie de circa 16 cifre semnificative sivariind intre aproximativ 10-308 si 10+308. Pentru a economisi memorie, numerele pot fi folosite si in formaintreg sau zecimal cu simpla precizie.

Exemple de numere:

3 -990.0001

9.6397238 1.60210e-20 6.02252e23

1i-3.14159j 3e5i

Page 9: 122472608-matlab

Stabileste formatul extern de afisare a numerelor pe ecran.

Afecteaza doar afisarea numerelor, nu si precizia de calcul saumodul de salvare .MATLAB-ul executa calculele in dupla precizie, 64 biti. Preciziesimpla insemana 32 biti.Sintaxa: format optiune. Optiunile sunt:•••••••short – afiseaza 5 cifre: 7.4567

short e – afiseaza 5 cifre + exponent: 7.4346e+5

long – afiseaza 15 cifre 1.333333333333333

long e – afiseaza 15 cifre + exponent: 1.333333333333333e+4

hex – afiseaza hexazecimal: 3efd4acd5679b1f

rat – afiseaza rational: 346/127

Bank- afiseaza cu 2 zecimale: 123.45

Functia format

Variabile• Instructiunile introduse creaza variabile care sunt memorate in spatiul de lucru. MATLAB nu necesita nici un tip de instructiuni de declarare sau dimensionare a variabilelor. Cand MATLAB intalneste un nou nume de variabila, acesta creeaza automat variabila si aloca memoria necesara. Daca variabila deja exista, MATLAB schimba continutul acesteia si daca este necesar aloca o alta cantitate de memorie.• Numele de variabile incep obligatoriu cu o litera, urmata de orice numar de litere, cifre, etc. MATLAB foloseste doar primele 63 de caractere ale unui nume de variabilă. MATLAB face deosebirea intre litere mari si mici. A si a variabile diferite.• ATENŢIE ! Daca unei variabile i se da numele unei functii, functia nu mai poate fi folosita pana cand variabila nu este stearsa.

Page 10: 122472608-matlab

• Exista si un numar de cuvinte rezervate, care nu pot fi folosite ca nume de variabile ('break‘, 'continue‘, 'else‘, 'end‘, 'for‘,

'function‘, 'if‘, 'return‘, 'switch‘, 'while‘, etc)Functii si Comenzi pentru VariabileDatorita faptului ca intr-o sesiune de lucru numarul de variabile folosite poate fi foarte mare, MATLAB dispune de o serie de comenzi si functii care sa usureze munca programatorului:• who - pentru a lista variabilele din workspace-ul curent;• whos - pentru a lista variabilele si informatii despre dimensiunile lor.• exist nume_variabila - pentru a vedea daca variabila specificata se afla in workspace.• isvarname nume_variabila - verifică daca numele variabilei propuse este valid, returnand valorile 0 sau 1.• which -all nume_variabila - verifica daca numele variabilei propuse este folosit de o functie.• clear nume_variabila – sterge din memorie numele variabilei. Folosita fara un nume, comanda sterge din memorie toate variabilele.Variabile speciale si constanteVariabile speciale nu pot fi declarate si sunt accesibile global inorice fisier .m.ans

pi

i, j

eps

realmin

realmax

inf

Variabila creata automat in care se returneazarezultatul unei expresii care nu a avut niciun nume3.14159265...sqrt(-1)Variabila permanentea in care este memorataprecizia relativa in virgula mobila 2.2204e-016Cel mai mic număr in virgula mobila 2.2251e-308

Page 11: 122472608-matlab

Cel mai mare număr in virgula mobila 1.7977e+308Infinit, rezultatul impartirii la 0OperatoriOperatorii pot si aritmetici,logici si relationali. Operatiilearitmetice raman valabile ptr nr. complexe si ptr vectori simatrici a caror elemente sunt nr. complexe.+-.*./.\.^AdunareScadereInmultireImpartire la dreaptaImpartire la stangaPutereAceste functii pot fi aplicate unor scalari sau element cu

element unor vectori sau matrici:

ceil – returneaza un nr. intreg rotunjit la cel mai apropiat numarintreg spre infinit: ceil (5.2)= 6

fix - returneaza un nr. intreg rotunjit la cel mai apropiat numarintreg spre 0: fix (-5.2)= -5

floor – returneaza un nr. intreg rotunjit la cel mai apropiat numarintreg spre -infinit: floor (5.2)= 5

round – returneaza un nr. intreg rotunjit la cel mai apropiat numarintreg: round(5.2)= 5

rem – returneaza restul impartirii argumentelor: rem(-5,2) =-1

mod – returneaza modulul restului impartirii argumentelor : mod(-

Page 12: 122472608-matlab

5,2)=1

rat – returneaza aproximarea unui nr. cu fractii rationale continue:rat(5.2) = 5 +1/5

rats – returneaza aproximarea unui nr. cu fractii rationalerats(5.2)=26/5

sign – returneaza semnul argumentului sign(-5.2)=-1

Functii de aproximare a numerelorFunctii de operare cu numere complexe abs – calculeaza modulul numerelor complexe (valoare absoluta):abs(3+4i)=5

angle – calculeaza faza numerelor complexe: angle(1+i)=0.7854

unwrap – calculeaza partea reala si imaginara a numerelorcomplexe exprimate sub forma polara: unwrap(1+i) =1+i

conj – calculeaza conjugata complexa a numerelor complexe:conj(3+i)=3-i

imag – calculeaza partea imaginara a numerelor complexe:imag(3+5i) =5

real – calculeaza partea reala a numerelor complexe:real(7+2i)=7

complex – construieste numere complexe daca se cunosc parteareala si imaginara: complex(7,6)=7+6i

isreal – determina daca elementele matricilor sau vectorilor suntnumere reale: isreal([2 3])=1

Page 13: 122472608-matlab

Functii putere, radical, exponentiala, logaritm ^ – ridicare la putere a numerelor sau a matricilor: 2^2=4 power – ridicare la putere a numerelor sau a matricilorelement cu element: power(2,2)=4 exp – calculeaza exponentiala: exp(2)=7.3891 log- calculeaza logaritmul natural:log(7.3891)=2 log2- calculeaza logaritmul in baza 2:log2(4)=2 log10- calculeaza logaritmul natural:log10(100)=2 pow2- calculeaza puterea lui 2 :pow2(5)=32 sqrt- calculeaza radicalul de ordinul 2 al numerelor:sqrt(81)=9Functii de matematica discreta factor – intoarce un vector ce contine factorii primi ai unui nr n:factor(39)= 3 13 factorial – calculeaza factorialul unui numar: factorial(4)=24 gcd – calculeaza cel mai mare divizor comun a doua numere:gcd(115, 35)=5 lcm- calculeaza cel mai mic multiplu comun a doua numere:lcm(115, 35)=805 primes- intoarce un vector ce contine numele prime mai mici decatn: primes(7)= 2 3 5 7 isprime- determina daca elementele unui vector sau matrice suntnumere prime: isprime([4 5 7])= 0 1 1

Page 14: 122472608-matlab

nchoosek- calculeaza combinari de n luate cate k: nchoosek(3,2)=3 perms- calculeaza toate permutarile posibile: perms([2,3])= 3 2 ;23Functii trigonometriceAceste functii pot fi aplicate unor scalari sau elementelor unorvectori sau matrici. Unghiurile sunt considerate in radiani: sin, asin, sinh, asinh – calculeaza sinusul, arcsinusul, sinusulhiperbolic, arcsinusul hiperbolic a argumentului cos, acos, cosh, acosh - calculeaza cosinusul, arcosinusul,cosinusul hiperbolic, arcosinusul hiperbolic a argumentului Tan, atan, tanh, atanh -calculeaza tangenta, arctangenta, tangentahiperbolica, arctangenta hiperbolica a argumentului cot,acot,coth, acoth - calculeaza cotangenta, arcotangenta,cotangenta hiperbolica, arcotangenta hiperbolica a argumentului sec,asec,sech, asech- calculeaza secanta, arcsecanta, secantahiperbolica, arcsecanta hiperbolica a argumentului csc,acsc, csch,acsh - calculeaza cosecanta, arcosecanta, cosecantahiperbolica, arc0secanta hiperbolica a argumentuluiUtilizarea functiei help lookfor 'topic'- afiseaza in Command Window o lista si o scurtadescriere pentru toate functiile a caror scurta descriere includecuvantul cheie specificat help – afiseaza M-file help in Command Window pentru functiaspecificata

Page 15: 122472608-matlab

Exemplu: help traceTRACE Sum of diagonal elements. TRACE(A) is the sum of the diagonal elements of A, which is also the sum of the eigenvalues of A.Class support for input A: float: double, single

Curs 2 MATLABThe Language of Technical Computing

matrici/vectori/scalarioperatori relationali si logici instructiuni de control

Page 16: 122472608-matlab

Mama structurilor de date - Matricea

Matlab-ul lucreaza numai cu un singur tip de obiecte MATRICEA numerica rectangulara cu elemente reale sau complexe, sau orice expresie Matlab. Anm se acceseaza prin A(n,m) - elementele unei matrici, elementul de la intersectia liniei n cu coloana m (nu folositi i si j !). Dimensiunea matricei e data de perechea (n x m). Indicii incep de la valoarea 1.

Vectorii sunt asimilati : vector linie – matrice cu o linie (1 x n) vector coloana – matrice cu o coloana (n x 1). v(k) – elementul de pe pozitia k din vector

Scalarii sunt asimilati matricilor cu o singura linie si o singura coloana (1x 1).

Page 17: 122472608-matlab

Mama structurilor de date - Matricea

Matlab-ul lucreaza numai cu un singur tip de obiecte MATRICEA numerica rectangulara cu elemente reale sau complexe, sau orice expresie Matlab. Anm se acceseaza prin A(n,m) - elementele unei matrici, elementul de la intersectia liniei n cu coloana m (nu folositi i si j !). Dimensiunea matricei e data de perechea (n x m). Indicii incep de la valoarea 1.

Vectorii sunt asimilati : vector linie – matrice cu o linie (1 x n) vector coloana – matrice cu o coloana (n x 1). v(k) – elementul de pe pozitia k din vector

Scalarii sunt asimilati matricilor cu o singura linie si o singura coloana (1x 1).

Page 18: 122472608-matlab

Definirea matricilor

In Matlab se poate defini o matrice pe mai multe cai:• Se introduce o lista explicita de elemente. Se genereaza matricea folosind instructiuni si

functii.• Se incarca matricea din fisiere de date externe.• Se creaza matricea folosind propriile functii, fisiere.m.

Page 19: 122472608-matlab

Definirea matricilor

Pentru introducerea unei matrici ca o lista de elemente trebuiesc respectate cateva conventii de baza:• Elementele unui rand sunt separate de blanc-uri sau virgule.• Liniile se separa cu semnul punct si virgula ”;”• Elementele matricei sunt cuprinse intre paranteze patrate, ”[ ]”.

Page 20: 122472608-matlab

Exemple - Definirea matricilor

X =[] - matrice goalaA=[11 22; 33 44 ] A= 11 22

33 44Vector linie Vl=[1 2 3]Vector coloana Vc=[1; 2; 3]

Matrice cu numere complexe ( in scrierea nr complexe spatiile trebuie excluse):

A= [1 2; 3 4]+i[5 6; 7 8] sauA= [1+5i 2+6i; 3+7i 4+8i ]

Nu folositi i, j ca variabile pentru ca suprascrieti valorile lor si va trebui sa va generati alte variabile: ii=sqrt(-1).

Page 21: 122472608-matlab

Concatenarea matricilor/vectorilor

Operatorul [] permite generarea unor noi matrici/vectori prin concatenarea unor matrici/vectori deja generate. [ A,B] - concatenarea pe orizontala a matricilor A cuB, matricile A si B trebuie sa aiba acelai numar de linii. [A;B] - concatenarea pe verticala a matricilor A cu B,matricile A si B trebuie sa aiba acelasi numar decoloane.

Exemplu: A=[1 2; 3 4] B=[5 6; 7 8] C=[A,B] = [ 1 2 5 6 3 4 7 8]

Page 22: 122472608-matlab

Functii de generare a matricilor de bazazeros(n,m) - Matrice (n x m) cu toate elementele nule.

Daca matricea e patrata avem zeros(n).

ones(n,m) – Matrice (n x m) cu toate elementele 1. Daca matricea e patrata avem ones(n).

eye(n) – Matrice unitare de ordinul n, elementele de pediagonala principala 1, restul elementelor 0.

diag(v,k) - Matrice banda- vectorul v devine o diagonala paralela cu diagonala principala aflat la distanta k deasupra(k>0)sau dedesubtul( k<0) diagonalei principale iar restul elementelor matricii sunt nule.Daca k lipseste sau este 0 atunci v va devenii chiardiagonala principala.rand(n,m) - Matrice (n x m) cu elemente aleatoare uniform distribuite.

Page 23: 122472608-matlab

Generarea vectorilor. Operatorul :

Cu pas liniar v= begin:pas:end

v= vmin : pas : vmax – pas este ratia progresiei aritmetice din intervalul [vmin,vmax]; nr de elemente= [(vmax –vmin)/pas] + 1 pasul 1 e implicit in Matlab, v= a:b.

v = linspace( vmin, vmax, nr_puncte)Cu pas logaritmic

v = logspace( vmin, vmax, nr_puncte) nr de elemente sunt distribuite logaritmic intre[10vmin, 10vmax].

Page 24: 122472608-matlab

Accesarea elementelor. Operatorul :

Operatorul : permite accesarea multipla a elementelor matricilor.

v= A(:) - rearanjarea elementelor matricei A subforma v-vector coloana: coloana1, coloana2... ultima A(1, 1:3) – elemetelor liniei 1, coloanele1,2,3. A(2:3, :) - elementele liniilor 2 si 3 si toate coloanele A (i, 1:2:end) – elementele liniei i, coloane impare end inseamna “pana la sfarsit” A(A>0) – doar elementele pozitive (elementele ceindeplinesc conditia logica)

Page 25: 122472608-matlab

Accesarea elementelor

Daca se asigneaza o valoare unui element care ocupa opozitie in afara dimensiunii maxime amatricei/vectorului, dimensiunea acestuia este maritaautomat pana la valoarea indicelui noului element, iarelementele nedefinite sunt setate la valoarea zero.Exemplu: x=[7.2457 -1.3345 4.5777 ] x(5) =abs(x(2)) rezulta x= [7.2457 -1.3345 4.5777 0 1.3345]

Page 26: 122472608-matlab

Operatii matriceale

Desfasurate dupa regulile calculului matriceal:AdunareaA+ BScaderea A– BInmultirea A* B -1

Impartirea la dreapta A/B este echivalent cu A⋅B , daca B este o matrice patratica inversabila -1

Impartirea la stânga A\B este echivalent cu A ⋅B, daca A este o matrice patratica inversabilă,Ridicarea la putere A^B, A este matrice patratica si B scalar sau invers, insa A si B nu pot fi simultan matrice Transpunerea A' = AT

Page 27: 122472608-matlab

Operatii cu tablouri

Desfasurate dupa regulile calculului scalar, intre elemente situate pe aceeasi pozitie. Cu exceptia operatiei de transpunere, pentru celelalte operatii operanzii trebuie sa aibe aceleasi dimensiuni sau unul dintre operanzi sa fie scalar .Adunarea element cu element +Scaderea element cu element –Inmultirea element cu element .*Impartirea la dreapta element cu element ./Impartirea la stanga element cu element .\Ridicarea la putere element cu element .^Transpunerea element cu element .'

Page 28: 122472608-matlab

Cateva functii Matlab pentru calcul matriceal

[n,m] = size(A) – returneaza dimensiunea matricei A: n-nr de linii si m- nr de coloanedet(A) – returneaza determinantul matricei patratice Arank(A) – returneaza rangul matricei A

inv(A) – returneaza inversa matricei patratice inversibileA (inversa unei matrici se calculeaza si asa A^ (-1))

diag(A) – returneaza diagonala principala a matricei A.conj(A) – returneaza conjugata matricei complexe A

Page 29: 122472608-matlab

Cateva functii Matlab pentru calcul vectorial

norm(v,p) – returneaza norma p a vectorului vnorm(v)- returneaza norma euclidiana(p=2) a vectorului

dot(v,w) – returneaza produsul scalar al vectorilor deaceeasi lungime v si w.cross(v,w) – returneaza produsulvectorial al vectorilor vsi w, ( au cate 3 elemente)sum(v) – returneaza suma elementelor vectorului vlength(v) – returneaza lungimea vectorului v, adicanumarul de elemente

Page 30: 122472608-matlab

Functii Matlab opereaza pe vectori

Aceste functii opereaza pe vectori (linie sau coloana).Sunt aplicate pe o matrice (m x n) - matricea interpretatain maniera coloana x coloana - rezultatul fiind un vectorliniemax, min, sort, sum prod, median, mean, std, any,all

Interpretare linie x linie se obtine folosind transpusa:exemplu: mean(A')'.

Page 31: 122472608-matlab

Operatori relationali si logiciRelationali

•<mai mic•>mai mare• <= mai mic sau egal• >= mai mare sau egal• == egal• ~= diferit

Logici

~NU (not) prioritate 1&SI (and) prioritate 2 |SAU (or) prioritate 3xor SAU EXCLUSIV

Page 32: 122472608-matlab

Operari logici

A

0101

B

0011

A&B

0001

A|B

0111

~A

1010

XOR(A,B)

0110

Page 33: 122472608-matlab

Operatori relationali si logiciUtilizati la crearea expresiilor logice

Ca date de intrare sunt acceptate doar datele numerice: -valoarea logica „adevrat” (A) - orice numar diferit de 0 -valoarea logica “fals” (F) - valoarea 0 Datele de iesire nu pot fi decat numerele 1 sau 0,interpretate ca fiind valorile logice A, respectiv F.

Operatorii relationali pot fi folositi pentru a compara:

a) Doua matrici de aceiasi dimensiune. Rezultatul esteo matrice, compararea se face element cu element.b) O matrice cu un scalar. Rezultatul este o matrice, iarcompararea se face prin compararea fiecarui element almatricii cu scalarul dat.

Page 34: 122472608-matlab

Instructiuni de control logic

Instructiune repetitive cu numar specificat de pasi: forInstructiune repetitive cu conditie logica: while

Instructiune de decizie, executie conditionata: if, else,elseif

Instructiune de terminare fortata a unui ciclu: break

Instructiune de returnare a executiei catre functiaapelanta sau catre tastatura: return

Instructiune pentru inchiderea ciclurilor “for”, “while” si“if”: end

Page 35: 122472608-matlab

Instructiunea if simpla

Instructiunea if are mai multe forme, cea simpla este : if expresie_logica grup de instruciuni; endDaca conditia exprimata de expresie_logica este adevaratase executa grupul de instructiuni si apoi se trece laexecutia comenzilor ce urmeaza dupa end.Daca conditia nu este adevarata se trece la executiacomenzilor de dupa end.Toate comenzile din grupul de instructiuni trebuie sa setermine cu ;Exemplu: >> x=2; >> if x<10 x=x+1; end >> x

Page 36: 122472608-matlab

Instructiunea if cu clauza elseEste utilizata cand se doreste executia unui

grup deinstructiuni pe conditie adevarata si a altui grup deinstructiuni pe conditie falsa : if expresie_logica grup1 de instruciuni; else grup2 de instructiuni; endExemplu: >> interval =1.9;>> if interval<1 x=interval/10; else x=0.1; end>> x

Page 37: 122472608-matlab

Instructiunea if cu clauza elseif

Datorita unor conditii complexe, uneori este necesaraimbricarea comenzilor if. Pentru aceste cazuri existaoptiunea elseif:Exemplu: if conditie1>>n=7; grup1 de instruciuni;>>ind=1; elseif conditie2>> if n>10 grup2 de instructiuni;ind=10; elseif conditie3elseif n>5 grup3 de instructiuni;ind=5; .........................else elseind=0; grupn de instructiuni;end end>> ind

Page 38: 122472608-matlab

Instructiunea switch-case

In cazul unor ramificari multiple pentru a preveni scrierea unor secvente if imbricate complexe se utilizeaza comanda switch-case: Exemplu:switch expresie>> interval=0.9case valoare1>>switch interval<1 secventa 1 de comenzicase 1case valoare2x=interval/10; secventa 2 de comenzicase 0…………………………….x=0.1;otherwiseend secventa n de comenzi>> xend

Page 39: 122472608-matlab

Instructiunea for for variabila=expresie grup de instructiuni end-Daca rezultatul evalurii expresiei este o matrice vida, atunci se sare direct la prima comanda dupa end fara sa se execute grupul de instructiuni;- Daca rezultatul evaluarii expresiei este o matrice cu n coloane, atunci grupul de instructiuni se va executa de n ori. Variabila va lua pe rand ca valoare coloana k la executia k si poate fi utilizata cu aceasta valoare in grupul de instructiuni;- Daca rezultatul evaluarii expresiei este un vector cu n elemente, atunci grupul de instructiuni se va executa de n ori, la a k-a executie variabila luand ca valoare elementul de ordin k din vector;- Daca rezultatul evaluarii expresiei este un scalar grupul de instructiuni se va executa o singur data, iar variabila va lua

Page 40: 122472608-matlab

Instructiunea for imbricataExemplu: calculeaza n! >> n=6;

>> fact=1; >> for ind=1:n fact=fact*ind; end >> factExemplu:sa se genereze o matrice Hilbert de ordinul 4,ale carei elemente sunt date de expresia H(a,b)=1/a+b-1n=4;for a=1:n for b=1:n H(a,b) = 1/(a+b-1); endend

Page 41: 122472608-matlab

Instructiunea while

Utilizata pentru repetarea unui set de instructiuni atat timp cat o conditie specificata este adevarata. while expresie grup de instructiuni endExista posibilitatea ca pentru o conditie data sa se cicleze la infinit. Pentru a evita acest lucru este bine sa introduceti un numar maxim de iteratii: it=1; itmax=1000; while conditie & (it<itmax) grup de instructiuni; it=it+1; end

Page 42: 122472608-matlab

Instructiunea while

Exemplu:calculeaza suma primelor elemente pozitive ale vectorului v

function[s]=suma(v)s=0;k=1;while (v(k)>0)&(k<=length(v)) s=s+v(k); k=k+1;end

Page 43: 122472608-matlab

Instructiunea break

Iesirea fortata dintr-o bucla, inainte de terminarea ei, da controlul primei comenzi de dupa end-ul bucleiSe recomanda a fi utilizata daca o conditie de eroare a fost detectataSe termina incetarea ciclurilor for sau whileIn cazul unor cicluri imbricate comanda iesirea din ciclul cel mai interiorExemplu: x = [1 12 NaN 7 8]>> for ind=1:length(x) if x(ind)==NaN break end x(ind)=rem(x(ind),5); end>> x

Page 44: 122472608-matlab

Exemple

function p=fbreak(v) % iese fortat din ciclul la intalnirea unui 0 in vector%daca nu exista elemente nule, treturneaza produsul lor

n=length(v);p=1;for k=1:n if v(k)==0 disp('elemente nule') break else p=p*v(k); end end

Page 45: 122472608-matlab

ExempleScrieti functia pentru a calcula suma primilor N+1 termeni a uneiserii geometrice. gsum=∑ ∞n=0 an = 1/1-a Cand N -> ∞ suma converge doar daca a<1Generalizare:function gsum = geomInf(a,N) if(N==inf) if(abs(a)>=1) error('Serie geometrica divergenta.'); else gsum=1/(1-a); end else n=0:N; gsum = sum(a.^n); endend

Page 46: 122472608-matlab

Vectorizarea codului – MATLAB fara bucle !!MATLAB rapid pe operatii cu vectori si matrici si lent cu bucle!Exemplu:an = n, bn = 1000- n ptr n = 1... 1000. Calculati psum=∑ 1000n=1 an bn

a = 1:1000; b = 1000 - a;psum=0;for n=1:1000%solutie proasta psum = psum +a(n)*b(n);end

Recunoastem ca psum este produsul vectorilor a and b, abT

psum = a*b'%Vectorizarea … solutie buna!Mai multe informatii despre vectorizare - MathWorks' CodeVectorization Guide 2

Page 47: 122472608-matlab

Functii C in MATLAB – MEX files

M files- ruleaza foarte rapid functiile Built -In in MATLAB

- niciodata nu trebuiesc compilate- de fiecare data MATLAB interpreteaza fiecare linie din M-files- procesul este lent pentru functii mari si complicate, in specialpentru cele cu multe bucle →

MATLAB poate rula functii scrise in C - fisierele care contincodul sursa - fisiere MEX

The mexFunctions nu sunt construite cu scopul de a inlocuifunctiile Built-In din MATLAB.

Page 48: 122472608-matlab

MEX files – interfata cu MATLAB

Legatura dintre functiile Built-In MATLAB si codul C se realizeazaprin functia mexFunction (similara cu functia main din C)

#include "math.h" /*Se pot include orice librarii C necesare */#include "mex.h" /* Aceasta e obligatorie */

void mexFunction(int nlhs, mxArray *plhs[], int nrhs,const mxArray *prhs[]){ % scrieti codul aici *return;}

Page 49: 122472608-matlab

MEX files – interfata cu MATLABSunt 4 parametrii de intrare care corespund apelului de functie(exemplu [ z0, z1] = vasilica (x,y,z) )

nlhs (type= int) – reprezinta numarul de argumente“ left hand side”.(nlds =2, corespunzatoare lui z0 si z1)

plhs (type = tablou de pointeri catre mxArray) – acest parametrueste de fapt argumentul de iesire – mxArray este structura MATLABcare tine datele, fiecare element din plhs tine un mxArray de date.nrhs(type= int)-reprezinta numarul de argumente“ right hand side”.prhs (type= const tablou de pointeri catre mxArray) – acest tabloutine toti pointerii catre tabloul datelor de intare mxArray(prhs[0] tine tabloul mxArray pentru x, prhs[1] tine tabloulmxArray pentru y, etc).)

Page 50: 122472608-matlab

Crearea datelor in MEX files In MEX-Files structura MATLAB folosita pentru stocarea dateloreste mxArray – aceasta structura poate tine date de tipreal, complex, matrici, siruri de caractere si alte stucturi de dateMATLAB.In exemplul [z0, z1] = vasilica(x,y,z) presupunem cax – matrice 2D, y – sir, z – intreg

Cum extragem si folosim datele ?

Avem acces la parametrul de intrare x printr-un pointer tinut intabloul prhs. In C, cand referim un tablou printr-un index, variabilaeste automat dereferentiata (ex: nu folosim *).Pentru claritate vom copia variabila x peste pointerul catremxArray si o vom numi xData ( pasul acesta nu e nevoie sa-l facetica sa va mearga codul, il fac doar sa intelegeti mai usor)

Page 51: 122472608-matlab

Crearea datelor de tip matrice in MEX files % inauntul functiei mexFunction

% fac declaratiimxArray *xData;double *xValues;int i,j;int rowLen, colLen;double avg;

xData = prhs[0]; % copiex pointerul de intare x, in xDataxValues = mxGetPr(xData); % iau matricea xrowLen = mxGetN(xData); %intoarce un intreg,lungimea liniilorcolLen = mxGetM(xData); %intoarce un intreg,lungimea coloanelorFunctia mxGetPr – obtine un pointer la datele de tip real, xData.(similar putem folosi functictia mxGetPi pentru date complexe).Daca traversam matricea liniar, si vrem sa sarim la o anumita pozitie(a,b) vom scrie codul asa: a*colLen+b – mult mai eficient.

Page 52: 122472608-matlab

Crearea datelor de tip matrice in MEX files%inauntul functiei mexFunction

%Printez variabila avg pentru fiecare coloana la consola MATLABfor(i=0;i<rowLen;i++){ avg=0; for(j=0;j<colLen;j++) { avg += xValues[(i*colLen)+j];%alta metoda ar fi: avg += *xValues++;}avg = avg/colLen;printf("Media liniilor %d, is %d",i,(int)avg);}

Page 53: 122472608-matlab

Crearea datelor de tip string in MEX filesSimilar pentru a obtine un sir (strings), dar folosind alte

functii:% inauntul functiei mexFunction

mxArray * yData; % declaratiiint yLength;char *TheString;

yData = prhs[1]; % copiez pointerul de intrare y, in yDatayLength = mxGetN(yData)+1; % fac variabila "TheString" sapointeze la un stringTheString = mxCalloc(yLength, sizeof(char)); % mxCalloc estesimilar cu malloc din CmxGetString(yData,TheString,yLength);

Page 54: 122472608-matlab

Crearea datelor de tip intreg in MEX files

Similar pentru a obtine un intreg, dar folosind alte functii:% inauntul functiei mexFunction

mxArray *zData; %declaratiiint Num;

zData = prhs[2]; % copiez pointerul de intrare z in zDataNum = (int)(mxGetScalar(zData)); % iau intregulprintf("Intregul meu este: %d",Num); % il printez pe ecran

Page 55: 122472608-matlab

Exportul datelor in MATLABPentru asignarea datelor/valorile de intoarcere in parametrii de iesire(left hand side) trebuie sa alocam memorie pentru structurile dedate folosite.Exemplu cum sa intorc o matrice 2D : intrarea va fi x si va intoarcein z0, o copie a matricii cu fiecare element din x inmultit cu 2.%inauntrul functiei mexFunctionmxArray * xData; % declaratiidouble *xValues, *outArray;int i,j;int rowLen, colLen;

xData = prhs[0]; % copiez pointerul de intrare xxValues = mxGetPr(xData); % iau matricearowLen = mxGetN(xData);colLen = mxGetM(xData);

Page 56: 122472608-matlab

Exportul datelor in MATLAB

% Aloc memorie si asignez pointerul de iesireplhs[0] = mxCreateDoubleMatrix(colLen, rowLen, mxREAL);%mxReal pentru ca acesta e tipul nostru de date

%iau pointerul datelor in spatiul de memorie nou alocatoutArray = mxGetPr(plhs[0]);

% copiez matricea si multiplic cu 2for(i=0;i<rowLen;i++){ for(j=0;j<colLen;j++) { outArray[(i*colLen)+j] = 2*xValues[(i*colLen)+j]; }}

Page 57: 122472608-matlab

Apelez functiile Built-In MATLAB din MEX files

Exemplu cum sa folosesc functia MATLAB Built-In z = conv(x,y);

% inauntrul functiei mexFunction

mxArray *rezultat; % declaratiimxArray *arg[2];

% pun ceva in parametrii de intrarearg[0] = mxCreateDoubleMatrix(1, 20, mxREAL);arg[1] = mxCreateDoubleMatrix(1, 10, mxREAL);%Apelez functiamexCallMATLAB(1,&rezultat,2,arg,"conv");

Variabila rezultat pointeaza catre mxArray si puteti extrage datele

Page 58: 122472608-matlab

Compilarea MEX filesCompilarea fisierelor MEX similara cu compilarea cu gcc.De la command prompt MATLAB (directorul curent trebuie sa fielocatia fisierului sursa MEX) aplica comanda:>> mex vasilica.c

MATLAB va va intreba sa alegeti un compilator si va producefunctia [z0,z1] = vasilica(x,y,z) (numele fisierului identic cu numelefunctiei)

Dupa compilare MATLAB produce fisierul binar MEX care poate fiapelat ca o functie built-in MATLAB. Pentru a apela aceastafunctie, trebuie sa fiti in acelasi director cu binarul !Fisierul binar are diferite extensii depinzand de sistemul de operarepe care rulati:( ex: Windows=.dll MacOSX=.mexmacSolaris=.mexsol Linux=.mexlx).

Page 59: 122472608-matlab

Alte functii utileLista completa a functiilor si exemple poate fi gasita MATLAB helpAlte example gasiti si in directorul extern MATLAB(MATLAB/extern/examples/mx or mex).

mxDuplicateArraymexErrMsgTxtmxMallocmxReallocmxCreateStringmxDestroyArraymxFreemxGetCellmxGetData…..

Page 60: 122472608-matlab

Curs 3 MATLABThe Language of Technical Computing

calcul simbolic polinoamesisteme de ecuatii liniare reprezentari grafice

Page 61: 122472608-matlab

Aproximari numericeIn Matlab avem urmatoarele functii de aproximare numerica.Precizia aproximarii poate fi adaptata.

inline - definirea functiei >> g=inline('sin(x)./(sin(x)+cos(x)+4)')

fplot(numef,lm,specl) - graficul functiei utilizator, unde lm este unvector cu 2 sau 4 valori indicand limitele pentru x si eventual y,iarspecl este specificatorul de linie acelasi ca la comanda plot.

fminbnd(numef,xmin,xmax)- determinarea valorii minime a uneifunctii pe un interval, unde [xmin,xmax] indica intervalul in carecautam valoarea minima.

fzero(numef, x0) -calculul zerourilor(radacinilor) unei functii,calculeaza o radacina a functiei cea mai aproape de x0.

quad(numef,a,b)- calculul integralei definite, unde a si b suntlimitele intre care se integreaza. Putem calcula integrale duble sau

Page 62: 122472608-matlab

Precizia solutieiIn Matlab, solutiile chiar date de formule exacte sunt intotdeaunaaproximative si de aceea este bine ca inainte de a determinasolutia sa calculam precizia solutiei.

Formula preciziei este data de:

p < C * cond(A)* p(calculator) unde

C o constanta care verifica 1<C<10 ( recomandabil C=10) p(calculator) precizia calculatorului, pentru PC-uri ~ 2.2*10-16

cond(A) functia Matlab- numarul de conditie al matricii referitorla inversare.Precizia de calcul, in cel mai defavorabil caz: 2.2*10-15 cond(A)

Pentru calcule cu numere foarte mari sau foarte mici folositiSymbolic Math Toolbox → precizie vs. viteza de calcul

Page 63: 122472608-matlab

Precizia solutiei

Vrem sa calculam exp(7.0873e002). ans=?Solutie folosind un mic artificiu: a = 7.0873e2; x = a/log(10); D = floor(x); % D va fi un intreg, puterea lui 10 F = 10^(x-D); % va fi F mantisa

F = 6.27376373225551 % mantisaD = 307 % exponentul (power of ten)

ans = 6.273763732256170e+307Symbolic Math Toolbox - functia vpa (S,D)

Page 64: 122472608-matlab

Tipuri de date in Matlab

Un tip de date defineste un set de valori si operatiile permise peaceste valori.

Tipurile de date fundamentale din Matlab: int16numar intreg 16-biti single numar precizie simpla (32 biti) double numar precizie dubla (implicit 64 biti ) logical numar logical, boolean charsir de caractere symobiect simbolic

Un obiect simbolic este o structura de date care stocheazareprezentarea unui simbol – folosit pentru reprezentareavariabilelor, expresiilor si matricilor simbolice.

Page 65: 122472608-matlab

Calcul simbolic

Toolbox-ul Symbolic Math - lista completa a functiilor sicomenzilor Matlab pentru calcul simbolic.

Pe cale simbolica putem efectua operatiile de derivare, integrare,calcularea limitelor, simplificarea expresiilor algebrice sirezolvarea ecuatiilor.

Rezolvarea unei probleme pe cale simbolica trebuie sa inceapa cudefinirea obiectelor simbolice (simbolurilor), apoi se trece laimplementarea propriu-zisa a solutionarii problemei.

Definirea/crearea obiectelor simbolice se face cu comanda sym (unobiect) sau syms (mai multe obiecte). Pentru crearea expresiilorsimbolice constante, trebuie folosita comanda sym. ( f = sym('5') ediferita de f = 5, care nu defineste f ca o expresie simbolica)

Page 66: 122472608-matlab

Calcul simbolic

Datele numerice duc la rezultate efective, iar datele simbolice dauun rezultat simbolic.

Forma simbolica este un rezultat exact in timp ce forma numericaeste un rezultat aproximativ (deoarece reprezentarea numerica areun numar infinit de zecimale dupa virgula) Exemplu: >> a=1/2+1/3 a =0.8333 >> b=sym(1)/sym(2)+sym(1)/sym(3) b = 5/6

Intotdeauna putem obtine valoarea numerica a unui simbol cucomanda double( )Rezultatele simbolice nu se indenteaza!

Page 67: 122472608-matlab

Functii/comenzi pentru calcul simbolic

comanda s=sym(x,'optiune') – creaza o variabila simbolica x ce sestocheaza in s, iar optiunea de reprezentare/afisare poate fi: d (numardecimal), f (numar real), r (numar rational), e-(numar in formarationala plus diferenta intre expresia rationala teoretica si expresiaactuala, reala (a calculatorului) in termeni exponentiali (the floating-point relative accuracy); real- specifica proprietatile matematice avariabilei simbolice create.

comanda findsym(f) – determina ce variabile simbolice suntprezente in expresia f.

subs(f,x,val) – substituirea/inlocuirea simbolurilor x dintr-oexpresie simbolica f , cu o valoare , val.

collect(f,v) - ordonam in raport cu puterile lui v o expresie f. Dacavariabila v lipseste se considera implicit x. >> syms x y

Page 68: 122472608-matlab

Functii/comenzi pentru calcul simbolic

expand(f) - scrierea expresiei f cu elementele ei constitutive.Aceasta functie calculeaza produse de polinoame, desface expresiitrigonometrice, exponentiale sau logaritmice. >> expand(cos(x+y)) ans = cos(x)*cos(y)-sin(x)*sin(y)

simplify(f) - simplifica expresia f. >> simplify((x^2+x-2)/(x-1)) ans = x+2

[n1,n2]=numden(f) calculeaza f ca o expresie rationala sicalculeaza numaratorul n1 si numitorul n2.Nu face si simplificarile!

solve('eq1', 'eq2', …'eqn', 'var1', 'var2'...'varn')- pentrurezolvarea ecuatiilor si a sistemelor de ecuatii unde eqn suntexpresiile simbolice reprezentand ecuatiile, iar varn sunt variabilelesimbolice ale necunoscutelor. Se presupune ca eq=0 (ducem toti

Page 69: 122472608-matlab

Functii simboliceUnele functii simbolice au primit acelasi nume ca cele pentrucalcule pentru simplicitate.

det - functie care calculeaza determinantul unei matrice simbolice. >>syms a b c d; >>det([a, b; c, d]) ans = a*d-b*c

inv -functie care calculeaza inversa unei matrice simbolicenumeric sau simbolic. Exemple: >>A = sym([a b;c d]); >>inv(A) ans = [ d/(a*d-b*c), -b/(a*d-b*c)] [ -c/(a*d-b*c), a/(a*d-b*c)]

rank - functie care calculeaza rangul maxim al unei matrice simbolice

factor(f)- factorizeaza expresia f. Daca f este un numar intreg facedescompunerea lui f in numere prime.>> factor(x^3-y^3+x^2-y^2) ans = (x-y)*(x^2+x+y*x+y+y^2)>> factor(13482) ans= 2 3 3 7 107>> factor(sym(13482)) ans = (2)*(3)^2*(7)*(107)

Page 70: 122472608-matlab

Functii simbolice limit(numef) - calculeaza limita unei functii - numef este o expresie simbolica a unei functii de variabila x, saunumele unei astfel de functii. Limita se calculeaza in 0. >> syms x ; limit(sin(x)/x) ans =1- limita in alt punct trebuie sa indicam valoarea catre care tinde x. >> limit((x^2-1)*log(x),2) ans = 3*log(2)- limite laterale indicand ‚left’- stanga, respectiv ‚right’ -dreapta. >> limit(1/x,x,0,'left') ans = -Inf >> limit((2-x-x^2)/(x^2+1),x,inf,'left') ans = -1

diff - derivata unei functii date. Variabila de derivare este considerataimplicit x. >> diff(x^5*log(x^2+1)) ans = 5*x^4*log(x^2+1)+2*x^6/(x^2+1)-derivate de ordin superior indic ca argument a lui diff ordinul derivatei >> diff(x^5*log(x^2+1), 3)-derivata in functie de alta variabila decat x, indicata intre apostrofi – sefoloseste in calculul derivatelor partiale. >>diff(t*sin(t^2+1),'t') ans = sin(t^2+1)+2*t^2*cos(t^2+1)

Page 71: 122472608-matlab

Functii simboliceFunctiile int si diff sunt inverse.

int- calculul primitivei unei functii>>int(5*x^4*log(x^2+1)+2*x^6/(x^2+1)) ans = x^5*log(x^2+1)

Putem calcula si integrale definite indicand limitele de integrat (care potfi simboluri):>> int(3*x^2,sin(t),cos(t)) ans = cos(t)^3-sin(t)^3

Acest lucru ne permite sa facem diverse calcule complexe

>>int(int(3*x^2,sin(t),1),t) ans = t+1/3*sin(t)^2*cos(t)+2/3*cos(t) ezplot(f)- graficul expresiei f=f(x) in intervalul implicit-2*pi < x < 2*pi.

Page 72: 122472608-matlab

Polinoame

Notatia utilizata la polinoame este una simbolica.

Matlab utilizeaza in calcule un vector ce are ca elementecoeficientii monoamelor. Ex :se foloseste vectorul p=[1 0 0 0 -5 4] pentru a 5reprezenta polinomul: p=x - 5x + 4

Avem la stanga coeficientul monomului de grad maxim.

Avem coeficient zero pentru monoamele care lipsesc (celede grad 4, 3 si 2).

Numarul elementelor este cu 1 mai mare decat gradulpolinomului (adica 6, 5 fiind gradul polinomului+1).

Page 73: 122472608-matlab

Manipularea polinoamelorIn Matlab, manipularea polinoamelor se face prin intermediul maimultor functii aplicate asupra vectorilor coeficientilor:

w=conv(u,v) - inmultirea a doua polinoame, unde u si v suntvectorii coeficientilor polinoamelor care se inmultesc, iar w estevectorul coeficientilor polinomului produs.

[c,r]=deconv(p,q) - impartirea a doua polinoame,unde c estevectorul coeficientilor catului, iar r este vectorul coeficientilorrestului.

roots(p) -determinarea radacinilor unui polinom

w=poly(v) -determinarea polinomului ale carui radacini suntelementele unui vector v

polyval(vcoef,x)-determinarea valorii polinomului reprezentat devectorul coeficientilor vcoef, intr-un punct x. (atentie! x poate fi siun vector!)

w=polyder(p) -derivata polinomului p , unde w sunt

Page 74: 122472608-matlab

Manipularea polinoamelorDeseori avem nevoie sa determinam un polinom de un anumit gradcare sa aproximeze un set de date experimentale.

Una dintre metodele de aproximare este metoda celor mai micipatrate (the least squares method)- in care polinomul de gradul ntrebuie generat:

yn(x)= a0xn+a1xn-1+...an-

1x+an

astfel incat cei n+1 coeficienti aproximeaza cel mai bine datelemasuratorilor experimentale. n=1- aproximare lineara, n=2-aproximare patratica etc. In Matlab acesti coeficienti sunt calculati cu functia

polyfit.Pentru evaluarea acestei aproximari putem folosi functia polyval.

Page 75: 122472608-matlab

Manipularea polinoamelor

w=polyfit(x,y,n)-determinarea unui polinom de un anumit gradcare sa aproximeze un set de date experimentale in sensulmetodei celor mai mici patrate, unde w este vectorul coeficientilorpolinomului cautat, vectorii x si y sunt vectorii datelorexperimentale, iar n este gradul polinomului cautat.

Exemplu: daca x=0:pi/10:pi, iar y=sqrt(x) atunci polinomul degradul 4 ce aproximeaz setul de date este dat de >> polyfit(x,y,4)ans = -0.2969 1.4531 -2.5609 2.3776 0.0183Adica polinomul: 432-0.2969x +1.4531x - 2.5609x + 2.3776x + 0.0183

Page 76: 122472608-matlab

Manipularea polinoamelor interp1(x,y,x0, ‚metoda’)-pentru aflarea valorilor prin interpolarepolinomiala , unde x,y sunt vectorii datelor experimentale. X0 estepunctul in care vrem sa aflam valoarea, iar metoda poate fi: nearest -nearest neighbor interpolation, linear - linear interpolation (implicit), spline - piecewise cubic spline interpolation (SPLINE) cubic - shape-preserving piecewise cubic interpolationMetodele spline si cubic necesita mai mult timp de calcul dar suntmai precise.

Exemplu :pentru functia sqrt(x) in pct 1.1 avem valorile: >> sqrt(1.1) ans =1.0488 >> interp1(x,y,1.1,'nearest') ans =1.0954 >> interp1(x,y,1.1,'linear') ans =1.0477 >> interp1(x,y,1.1,'spline') ans =1.0489 >> interp1(x,y,1.1,'cubic') ans = 1.0488

Page 77: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare

Pe cale numerica, in Matlab se pot rezolva:

sisteme compatibile determinate

sisteme compatibile nedeterminate (se pot gasi maxim 2 solutii particulare)In rezolvarea sistemelor liniare in Matlab se presupune forma matriceala: A*X=b respectiv, Y*A=b A-matricea coeficientilor b-vectorul coloana al termenilor liberi si X, Y- vectorul coloana/linie al necunoscutelor.Un sistem de ecuatii liniare este definit in Matlab prin definirea matricei A si a vecorului b.

Page 78: 122472608-matlab

Rezolvarea sistemelor compatibile determinate

Pot fi rezolvate prin doua metode numerice diferite:

Metoda inversarii matriceale

Metoda impartirii la stanga/dreaptaMetoda inversarii matriceale

In cazul unui sistem patratic, solutia sistemului este obtinuta prin inversarea matricei coeficientilor si inmultirea ei cu vectorul termenilor liberi: X = inv(A) * brespectiv,

Y = b * inv(A)

Page 79: 122472608-matlab

Rezolvarea sistemelor compatibile determinate

In Matlab, aceasta metoda nu necesita determinarea inverseimatricei coeficienţilor.

S-a introdus operatorul \ care calculeaza solutia sistemelor deecuatii liniare prin metoda eliminarii in versiunea Gauss.

Metoda impartirii la stanga /dreapta

X=A\b respectiv, Y=b/ASoluia cu operatorul / este mult mai rapida decat cu formula clasicaa inversarii, acest fapt devenind observabil atunci cand matricilesunt de mari dimensiuni. Astfel pentru matrici de ordinul 1000soluia / a fost de 400 ori mai rapida.

Page 80: 122472608-matlab

Rezolvarea sistemelor compatibile nedeterminateIn cazul sistemelor compatibile nedeterminate nu se pot determina pe cale numerica toate solutiile, acestea fiind in numar infinit.

Se poate determina o solutie particulara folosind una din urmatoarele doua metode:

Metoda pseudo-inversarii matriceale

Metoda impartirii la stanga/dreapta Metoda pseudo-inversarii matricealeSolutia sistemului este obtinuta prin inmultirea pseudo-inversei matricei coeficientilor cu vectorul termenilor liberi. Se utilizata pseudo-inversa Moore-Penrose a unei matrici - functia pinv:X = pinv(A) * b respectiv, Y = b * pinv(A)

Page 81: 122472608-matlab

Rezolvarea sistemelor compatibile nedeterminate

Metoda impartirii la stanga /dreapta

X=A\brespectiv,Y=b/A

In acest caz, aceasta metoda realizeaza cautarea acelei solutii asistemului care minimizeaza (in sensul celor mai mici patrate)norma euclidiana a vectorului A*X-b si care are cel mult rang Acomponente nenule.

Page 82: 122472608-matlab

Rezolvarea sistemelor de ecuaţii liniare folosind Symbolic Math Toolbox

Metodele de rezolvare precizate anterior sunt valabile si pentrurezolvarea pe cale simbolica:1. metoda inversarii / metoda pseudo-inversarii;2. metoda impartirii la stanga / dreapta.

Rezolvarea pe cale simbolica necesita de obicei studiul sistemuluisi efectuarea solutionarii pe cazuri.

Page 83: 122472608-matlab

Reprezentari grafice in plan 2D

Matlab permite reprezentarea in plan a graficelor defunctii si a suprafete poligonale.Reprezentarile grafice ale functiilor pot fi facute in maimulte tipuri de coordonate: carteziene, polare, logaritmice, semilogaritmice

Page 84: 122472608-matlab

Reprezentari grafice in plan- 2D

O parte din functiile Matlab destinate reprezentarilorgrafice 2D:

plot(x,y, speclinie) - grafice in coordonate X-Y liniare; xsi y sunt vectorii ce definesc punctele de reprezentat, iarspeclinie este un sir de caractere intre ` ` reprezentand tipulliniei ce uneste punctele definite de x si y, markerul cu carese reprezinta punctele definite de x si y si culoarea liniei,toate in aceasta ordine.

line(x,y) -reprezentarea grafica a liniilor poligonale

fill (x,y,s) - reprezentarea grafica a poligoanelor

loglog(x,y,s) -grafice in coordonate X-Y logaritmice

semilogx (x,y,s), semilogy(x,y,s) -grafice in

Page 85: 122472608-matlab

Reprezentari grafice in plan - 2D

Tipul de linie poate fi unul din simbolorile:- continua (implicit) , -- intrerupta, : puncte, -. linie-punct

Tipul marker-ului:+ ( semnul +), o (cerc), * (asterisc), . (punct), x (cruce),s (patrat), d (romb), p (pentagon), h (hexagon), ^ (triunghicu un varf in sus), v (triunghi cu un varf in jos), > (triunghicu un varf la dreapta), < (triunghi cu un varf la stanga)

Culorile pot fi urmatoarele simboluri:r (rosu), g (verde), b (albastru), c (bleu), m (mov),y (galben), k (negru), w (alb).

Page 86: 122472608-matlab

Reprezentari grafice in spatiu- 3D

In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafetesi corpuri 3-dimensionale. O parte din functiile Matlab destinatereprezentarilor grafice 3D:

plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z suntvectorii ce definesc punctele de reprezentat, iar speclinie este un sirde caractere intre ` ` reprezentand tipul liniei ce uneste puncteledefinite de x si y, markerul cu care se reprezinta punctele definite dex si y si culoarea liniei, toate in aceasta ordine.

mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub formaunei retele (“mesh”)

surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelorpline, cu iluminare

contour(x,y,z) , contourf(x,y,z,v) – reprezentarea grafica doar aliniilor de contur

Page 87: 122472608-matlab

Functii auxiliare pentru reprezentari grafice

Cateva functii auxiliare ce pot controla proprietatile modului dereprezentare:

title - inserarea unui titlu pentru reprezentarea grafica

axes, axis - controlul aparitiei si stabilirea lungimii unitatilor dereprezentare pe axele sistemului de coordonate

xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului decoordonate

text, gtext - plasarea unui text pe grafic la o anumita pozitie, sauselectata cu mouse-ul.

hold- pastrarea graficului curent si al proprietatilor sale

subplot - impartirea ferestrei de reprezentare grafica in mai multeregiuni grafice.

grid - suprapunerea unei retele de linii pe grafic

meshgrid -definirea sub forma de retea de puncte a domeniului de

ExempleMATLAB

Page 88: 122472608-matlab

Operatori logici - Ex1

Creati vectorul x=randperm(35) si evaluati urmatoarea functie utilizand indexarea logica: 2y(x) = x-4 36-x

x<66 <= x < 2020 <= x <= 35

Verificati, desenand graficul functiei y(x).

Page 89: 122472608-matlab

Rezolvare - Ex1

Cream vectorul x: >>x=randperm(35);Cream vectorul y de aceeasi dimensiune cu vectorul x, dar plin de 1: >> y= ones(1,35)Calculam valorile lui y facand indexarea logica: >> y(x<6)=2 >> y((x >= 6) & (x < 20))=x((x >= 6) & (x < 20))-4 >> y((x >= 20) & (x <= 35))=36-x((x >= 20) & (x <= 35))

Desenam graficul functiei: >>plot(x,y,'ok') % am marcat fiecare punct de pe grafic cu semnul o, si k %pentru a seta culoarea neagra

Page 90: 122472608-matlab

Operatori logici - Ex2

Desenati graficul functiei de semnal sinusoidal discontinuu utilizand indexarea logica:

sin(t)x(t) =

0 sin(t)<= 0

sin(t) > 0t=1, 2, ...10

Page 91: 122472608-matlab

Rezolvare - Ex2

Definim timpul t:>>t=0:0.1:10;Definim funcia x(t):>> x=sin(t);Punem valoarea 0 în locul valorilor negative ale lui x:>> x=x.*(x>0);Facem graficul si punem etichetele:>> plot(t,x)>> axis([0 10 -0.1 1.1])>> xlabel('Timpul [s]')>> ylabel('Amplitudinea')>> title('Semnal sinusoidal discontinuu').

Page 92: 122472608-matlab

Operatori logici - Ex3Se da vectorul x=[6 25 1 2 -1 0 -7 50 4 9].Determinai comanda care:

a) defineste vectorul t obtinut din x prin schimbarea elementelor ce sunt mai mici ca media elementelor lui x, cu 100

>> t=x;t(x<mean(x))=100

b)defineste vectorul p obtinut din x prin schimbarea elementelor ce sunt mai mari decât media elementelor lui x cu diferenta dintre valoarea lor si medie.

>> p=x;p(x>mean(x))=p(x>mean(x))-mean(x)

Page 93: 122472608-matlab

Evitarea operatiilor neconvenabileAvem un vector cu unele elemente 0 → efectuam diverse calcule si putem ajunge la operatii interzise: >> x=[2 0 1 -2 0 -1 0 pi] >>y= sin(x)./x Warning: Divide by zero.y = 0.4546 NaN 0.8415 0.4546 NaN 0.8415 NaN 0.0000Cum iesim din aceasta situatie?Utilizam în locul valorii 0 cea mai mica valoare relativapozitiva pe care calculatorul o poate reprezenta: eps= 2-52 ~ 2.2204e-016Comanda de înlocuire este:>> x=x+(x==0)*eps si vom putea calcula y=sin(x)./x

Operatori logici - Ex4

Page 94: 122472608-matlab

Instructiuni de control - Ex1

Scrieti functia care intoarce indicii (linie,coloana) ale elementului maxim si a celui minim dintr-o matrice:function[ elemax, lmax, cmax, elemin, lmin, cmin]=tema1(a)a=input('introduceti matricea a= ')[r,c]=size(a);lmin=1; lmax=1; cmin=1; cmax=1;elemin=a(1,1); elemax=a(1,1);for i=1:r for j=1:c if a(i,j) > elemax elemax=a(i,j); lmax=i; cmax=j; end if a(i,j) < elemin elemin=a(i,j); lmin=i; cmin=j; end end end end

Page 95: 122472608-matlab

Reprezentari grafice

Sa se deseneze pe acelasi grafic functia y=cos(2πft),t intre 0 si 4, iar frecventa f ia valorile 0.7 , 1, 1.5 si 2.fs = ['r-';'b.';'go';'m*']; %Cream un vector ptr stilurile

de liniex=1; %Initializam variabila xt=0:.01:4;for f=[0.7 1 1.5 2] y=cos(2*pi*f*t);plot(t,y,fs(x,1:end)); %stilul linei indexat de xhold onx=x+1; % incrementam x cu unuendxlabel('t');ylabel('cos(2 pi f t)')legend('f=0.7','f=1','f=1.5','f=2');

Page 96: 122472608-matlab

Reprezentari grafice

Sa se deseneze :a) trunchi de piramida cu baza octogon.>> x=0:0.2:2;>> y=x-3;>>cylinder(y,8)

b) o suprafata de rotatie generata de functia: y = 5+xarctg(x)-5sin(x)>> x=-pi:pi/10:pi;| x=-pi:pi/10:pi;>> y=5+x.*atan(x)-5*sin(x); | [X,Y,Z]=cylinder(y);>> cylinder(y,30)| surf(X,Y,Z)

Page 97: 122472608-matlab

Laborator 1

Introducere MATLAB

numere/variabile/functii uzuale

Page 98: 122472608-matlab

Help

• Utilizand help-ul in linie de comanda sa se gaseasca functia Matlab ptr calculul arctangentei si sa se specifice sintaxa de apel a acesteia.>> help

• Din lista afisata se constata ca nu exista un director destinat doar functiilor trigonometrice. E o functie elementare. Vizualizati continutul directorului elfun: matlab\elfun - Elementary math functions atan - Inverse tangent. >> help atan

Page 99: 122472608-matlab

Observatii

1. Denumirile functiilor Matlab se scriu cu litere mici. Ele apar scrise in help cu litere mari doar pentru a fi scoase in evidenta.2. Daca s-ar fi presupus ca denumirea functiei arctangenta din Matlab este aceeasi cu cea folosita in matematica, arctg, si s-ar fi apelat help-ul functiei cu această denumire: >> help arctg Matlab afiseaza un mesaj de eroare, anuntand ca nu gaseste fisierul-M arctg (arctg.m not found.).3. Denumirea functiei Matlab si denumirea fisierului in care este implementată functia trebuie sa fie identice.

Page 100: 122472608-matlab

Help

• Sa se gaseasca functia Matlab ptr radical indice 3 >>lookfor

• >> helpwin Apasati pe MATLAB, apoi pe Functions, apoi pe In Alphabetical Order'

• Apasati butonul Help (cel cu ? galben) din interfata

Page 101: 122472608-matlab

Expresii si calcule• Efectuati simple operatii de adunare, scadere, inmultire, impartire folosind: “+” “ -” “*” “/”. La sfarsitul comenzii se tasteaza Enter ptr a transmite operatia programului Matlab. Exemple: a) 2 + round(6 / 9 + 3 * 2) / 2 - 3 b) 2 + floor(6 / 9 + 3 * 2) / 2 - 3 c) 2 + ceil(6 / 9 + 3 * 2) / 2 - 3

• Se observa aparitia variabilei ans – variabila in careprogramul introduce automat rezultatul uneicomenzi ce nu defineste o variabila proprie.

Page 102: 122472608-matlab

Calcule

• Efectuati urmatoarele calcule:

Se va scrie comanda:(sin(pi/4)+cos(pi/4))/(sqrt(5+log(7))-1.5^0.17)Argumentele functiilor trigonometrice sunt radiani: sin(90) ? scriem sin(90*pi/180)

in

Page 103: 122472608-matlab

Calcule

Care dintre expresii e mai mare?

Page 104: 122472608-matlab

Calcule

Sa se calculeze:

Raspuns: a) 1.6180 b) 6.5919 c) 7.3696

Page 105: 122472608-matlab

CalculeSa se calculeze:

Raspuns: a) 0.3849 b) 2.4231 c) 0.5576

Page 106: 122472608-matlab

Calcule cu constante specialeSa se calculeze:

realmax+2 =

inf-inf =

nan+2 =

realmax-realmin =

inf/inf =

0*inf =

Page 107: 122472608-matlab

Calcule

De la analiza matematica se stie ca urmatoarele limite suntegale cu derivata functiei in x, f ' (x):

Insemana ca ptr valori mici ale lui h, fractiile din limitelede mai sus aproximeaza derivata.Exercitiu:Luand f(x) =sin x sa se calculeze eroarea dintre valoareaexacta a derivatei in pi/4 si aceste aproximari ptr h: a) 10-6 b)10-8 c) 10-10 d) 10-12 e) 10-14

Page 108: 122472608-matlab

CalculeErorile date de:e1=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4))/h) respective2=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4-h))/h/2)

a) h=0.000001e1=3.5344e-007 e2=5.2650e-011b) h=0.00000001e1=3.0503e-009 e2=3.0503e-009c) h=0.0000000001e1=9.2454e-007 e2 =3.6942e-007d) h=0.000000000001 e1 =5.7368e-006 e2 =6.1248e-005e) h= 0.00000000000001e1 =0.0034 e2 =0.0021

Fractiile nu tind la derivata in pi/4!

Erorile se cumuleaza! Si functiile elementare sin(x) si cos(x) auerori de aproximare. In plus aici avem o nedeterminare 0/0.

Ptr masinile pe 32 biti folositi valori la jumatatea precizieimaxime 10-7, 10-8.

Page 109: 122472608-matlab

Managing .m fileComanda:>> path – listeaza toate directoarele din MATLAB>> pwd – intoarce numele directorului de lucru curent>> cd – schimba directorul curent>> dir sau ls – listeaza continutul directorului curent>> edit vas.m – deschide editorul de text ptr a crea fisierul>> type vas.m – afiseaza pe ecran continutul fisierului>> delete vas.m – sterge fisierul>> what – listeaza fisierele *.m din directorul curent>> diary azi1 – salveaza toate comenzile din sesiuneacurenta in fisierul azi1.>> why ce face aceasta comanda?

Page 110: 122472608-matlab

Afisarea Sirul de caractere trebuie introdus intre ' ' s=' acesta e un text'

Afisarea mesajelor la intalnirea unei erori cu functia: error(' mesajul meu ')Cand error( ) e intr-un fisier*.m se intrerupe executia

Afisarea unui mesaj de avertizare, nu intrerupe executiaprogramului: warning('mesaj')

Comenzile: warning on, warning off, lasterr, lastwarn

Afisarea pe ecran a unei informatii cu functia disp: >> disp(' orice text')

In fisierele *.m introducerea datelor se face cu functiainput: >> iter= input('Introduceti nr de iteratii:')

Page 111: 122472608-matlab

Programe .m file: script Programele sursa in Matlab numite .m- files se pot creacu orice editor de texte. Recomand editorul Matlab-ului.

Rularea unui script se face tastand numele fisierului(fara extensie) in linia de comanda.

Exemplu: crearea unui script ce va calcula sin2x si vaapela scriptul ce are numele sindoix :Selectati: File\New\M-file sau scieti comanda >> editIntroduceti : y=2*sin(x).*cos(x);Selectati: File\Save As\sindoix (introduceti doar numele)In Command window dati comenzile:>>x=pi/3>>sindoix %se executa scriptul scriind doar numele>>y=0.8660

Page 112: 122472608-matlab

Programe .m file: functie Prima linie din fisierul functiei trebuie sa fie de

forma:function [param-iesire]=nume-functie(param-intrare)

Daca exista doar un parametru de iesire (care poate fi unscalar,vector sau matrice) parantezele patrate pot lipsi.

Parantezele rotunde de la lista-param-intrare pot lipsi doardaca nu exista nici un parametru de intrare.

Variabilele folosite sunt locale, nu sunt disponibile inWorkspace.

; de la sfarsitul fiecarei linii previne afisarea in Workspacea evaluarilor intermediare.

Rularea fisierului functiei se face folosind sintaxa:[valori_returnate]=nume_functie(valori_param-intrare)

Page 113: 122472608-matlab

Programe .m file: functie Exemplu: definirea unui functii cu numele cosdoix ce

vacalcula cos2x :Selectati: File\New\M-file sau comanda edit Introduceti : function y=cosdoix(x) y=cos(x).*cos(x)-sin(x).*sin(x); Selectati: File\Save As\cosdoix In Command window dati comenzile: >> y=cosdoix(x) >>y = -0.5000

>> (1+cosdoix(x))./cosdoix(x) ans =-1.0000 >> 1+sindoix ??? Attempt to execute SCRIPT sindoix as afunction.

Page 114: 122472608-matlab

Avantajele si Dezavantajele Scripturilor

Scriptul este o secventa de instructiuni si a aparut dinnecesitatea reutilizarii multiple a secventei respective.Avantaje:

utile in cazul programelor mari cu secvente de comenzicare se repeta aleatoriu (nu sunt bucle pur si simplu) deciutile doar programatorilor avansati;Dezavantaje:

creeaza si modifica variabile din zona de lucru fara niciun avertisment; variabilele din scripturi sunt globale

nu au parametrii de intrare sau de iesire;

sunt sursa unor erori greu de detectat;

nu pot fi utilizate in expresii.

Page 115: 122472608-matlab

Avantajele si Dezavantajele Functiilor

Functia este tratata drept un subprogram, adica drept ounitate distincta de restul programului.Avantaje:

functia comunica cu programul apelant prin cele doualiste: listaparam-iesire si lista-param-intrare.

nu modifica datele din zona de lucru a programuluiapelant.

permite organizarea structurala a programarii.Dezavantaje:

folosirea in exces a functiilor poate duce la faramitareaexcesiva a programului pierzandu-se din claritate.

Page 116: 122472608-matlab

Atasarea comentariilorComentariile sunt precedate de semnul procent (%).

Daca se plaseaza pe primele linii, imediat sub linia de definitie a functiei, formeaza Help-ul functiei care se apeleaza cu comanda help nume_functie.Help-ul functiei se considera pana la prima linie goala sau pana la prima instructiune MatlabDupa ultima linie a help-ului se lasa o linie libera.Exemplu : function nume_functie % Prima linie de help % A doua linie de help ... % Ultima linie de help Linie libera (aceasta este obligatorie daca urmeaza un alt comentariu care nu este de tip help) Instructiuni MATLAB

Page 117: 122472608-matlab

Functii Anonime

Anonymous functions - functiile Matlab produse de lalinia de comanda. Functie implicita, apelabila ca si ovariabila in lista de argumente intrate intr-o functie numitafunction_handle @. Au forma generala:

nume_functie = @(param- de intrare) (functia)

Exemplu:>> f = @(x) ( x.^2 +exp(x) ) f - numele functiei, @ - function handle, x - parametrul de intrare x.^2 +exp(x) – corpul functiei

Page 118: 122472608-matlab

Functii inline si comanda fevalInline functions - functiile Matlab produse de la linia

decomanda folosind comanda inline:nume_functie = inline ('expr', 'arg1', 'arg2'...)Exemplu: >> f = inline( 'sqrt(x.^2+y.^2)', 'x', 'y' ) string -sir de caractere inclus intre apostrofi- 'test

10'Unele functii iau ca parametrii de intrare numele altorfunctii specificate ca string. Evaluarea acestora se face cu:

[param-de-iesire]=feval ('numefunctie', param-de-intrare) – orice functie data sub forma sir de caractere.

[param-de-iesire]=builtin ('numefunctie', param-de-intrare) – numai functiile interne ale Matlab-ului.

Page 119: 122472608-matlab

Debugging fisierelor .mDepanarea sau Debugging este procesul prin care suntidentificate si rezolvate erorile din cadrul codului Matlab.

Erori de sintaxa: introducerea gresita a unui nume defunctie sau omiterea unei paranteze. MATLAB afiseaza un mesaj de eroare in CommandWindow descriind eroarea si numarul liniei din fisierul m. Clicati pe portiunea subliniata a mesajului de eroare, saupozitionati cursorul pe mesajul de eroare si apasatiCtrl+Enter. Fisierul m ce contine eroarea se deschide inEditor, cu linia eronata afisata in prim plan.

Erori run-time: aceste erori sunt in general de algoritm.Erorile run-time sunt vizibile cand fisierul m producerezultate neasteptate.

Page 120: 122472608-matlab

Sfaturi pentru depanarea erorilor run-time

Stergeti simbolurile ”;” din instructiunile fisierelor .m cu pricina. In urma acestei operatiuni MATLAB va afisa rezultatelor pe ecran pe durata executiei fisierului .m.Adaugati instructiunii keyboard la fisierul.m . Instructiunile keyboard opresc executia fisierului .m la un anumit punct unde acestea apar si va permit examinarea si modificarea workspace- ul local al functiei. Acest mod este indicat de un prompt special: K>> Continuarea executiei functiei se realizeaza tastand return si apasand tasta Return.Folositi MATLAB Debugger sau functiile debugging. Acestea sunt folositoare pentru corectarea erorilor run-time deoarece puteti accesa workspace-ul functiilor si apoi puteti examina sau schimba valorile pe care le contin. Puteti defini sau sterge puncte de intrerupere sau breakpoints, pentru oprirea executiei

Page 121: 122472608-matlab

Functia printf -scrierea datelor in format

prinf(fid, format, date )fid- este un un numar intreg, asociat pentru identificarea fisierului in care se scrie, fid=1 sau e omis scriere se face pe ecran. Identificatorul fid al fisierului se obtine prin functia fopen.format – formatul de scriere precedat de caracterul ”%” urmat de: d, i, o, u, x, X, f, e, E, g, G, c si s.date – datele ce trebuiesc scriseConversia datelor poate contine si caractere speciale neprintabile: \n produce o linie noua, \r reîntoarcerea cursorului la cap de rand \t tab orizontal,

Page 122: 122472608-matlab

Conversia datelorConversia datelor incepe intotdeauna cu caracterul % sicontine urmatoarele elemente optionale sau obligatorii: semne, optionale, care controleaza alinierea : caracterul “-”, care pozitioneaza datele la stanga sijustificat, iar daca lipseste pozitionarea, se face la dreapta; caracterul “+”, care scrie intotdeauna semnul datei(plus,+, sau minus,-); caracterul “0”, care scrie în spatiile libere zero (0);

marimea si precizia campului,optional: marimea câmpului in digiti, ex 6 (prin %6f); precizia, numarul de digiti aflati dupa punctual zecimal de exemplu 3 (prin %6.3f);

Page 123: 122472608-matlab

Conversia datelorConversia datelor incepe intotdeauna cu caracterul % sicontine urmatoarele elemente obligatorii:

formatul de conversie obligatoriu, care poate fi : semnul “c” un singur caracter; semnul “d” notatia zecimala; semnul “e” sau “E” scrierea exponentiala, cu litera e micasau cu litera E mare;semnul “f” punct zecimal sau virgula fixa;semnul “g” sau “G” forma mai compacta decat “e” sau“f”, nescriind zerourile nesemnificative;semnul “o” datein baza opt (octagonala);semnul “s” pentru caractere;semnul “u” date in baza decimala;semnul “x” sau “X” date hexazecimale, cu litere a-f

Page 124: 122472608-matlab

Functia fprintf, sprintf – scriere in fisier, in string fprinf(fid, format, date)

Formatul fprintf este vectorizat pentru cazul in care datele nu sunt scalare, fiind repetat de cate ori e necesar.Exemple: afiseaza pe ecranfprintf('A unit circle has circumference %g.\n',2*pi)

Creaza un fisier 'exp.txt' cu valorilor functiei exponentialex = 0:.1:1; y = [exp(x)];fid = fopen('exp.txt','w');fprintf(fid,'%6.2f \n',y);fclose(fid);

[s]=sprintf(format, date)- returneaza datele sub forma unui sir de caractere.Exemple:sprintf('%d',round(pi)) conduce la 3m=sprintf('%s','hello') conduce la m=hello, adica m(3)=l

Page 125: 122472608-matlab

Exercitii functiiScrieti functiile in fisier, anonymous si inline. Calculativalorile functiilor pentru x=0.5 si t =sqrt(2):

Page 126: 122472608-matlab

Exercitii

Raspuns:

Page 127: 122472608-matlab

Exercitii

1. Scrieti functia care calculeaza aria si perimetrul unuidreptunghi.

- Adaugati help functiei- Apelati functia dintr-un script.

2.Scrieti functia pentru a calcula suma primilor N+1 termeni aunei serii geometrice, N<∞

gsum=∑ N an.n=0

Page 128: 122472608-matlab

Exercitii: functii

Raspuns:Fisierul arieper.mfunction [a,p]=arieper(L,l) % Calcul arie şi perimetru al dreptunghiului cu laturile L şi l a=L*l; p=2*(L+l);end

Fisierul script runarieper: % Setarea valorilor laturile L şi l apelul functiei arieper L=5; l=6; [a,p]=drept(L,l) %Apelul functiei

Executarea scriptului:>> runarieper

Page 129: 122472608-matlab

Exercitii: functii

Raspuns:

function gsum = geom(a,N) n=0:N; gsum = sum(a.^n);end

Functia geom se apeleaza de la command prompt :>> gsum=geom(0.4,10).

Page 130: 122472608-matlab

Laborator 2

MATLAB

matricioperatori logici si relationali instructiuni de control

Page 131: 122472608-matlab

Matrici- Exercitiul 1

Se da matricea M = 1 2 3 6-3 0

4 8-4 7

2 4-1 -2 0 5

••••

Sa se extraga elementul de pe linia 1 si coloana 3-aPrima linieColoana a 2-aSubmatricea determinata de liniiele 1, 2 si 4 si decoloanele 2, 3 si 4

Page 132: 122472608-matlab

Matrici- Rezolvare exercitiu 1

Introducerea matricei M: >> M=[1 2 3 4; 2 4 6 8; -1 -2 -3 -4; 0 5 0 7];Extragerea elementului de pe linia 1 şi coloana 3: >> M(1,3) ans=3Extragerea primei linii: >> M(1,:) ans= 1 2 3 4Extragerea coloanei a 2-a: >> M(:,2) ans= [2; 4;-2; 5]Extragerea submatricei determinată de liniile 1,2 şi 4 şide coloanele 2, 3 şi 4: >> M([1,2,4],2:4) ans=[2 3 4; 4 6 8; 5 0 7]

Matricea M nefiind reatribuita in mod explicit, nu a fost afectata de niciuna din operatiile de mai sus: >>M

Page 133: 122472608-matlab

Generarea matricilor cu numere aleatoare

Utilizand: functia rand, pentru numere aleatoare, cu distributieuniforma in intervalul (0,1) sau functia randn, pentru numere aleatoare cu distributienormala (Gaussiana), de medie zero si varianta unu.

Instructiunile pentru generarea matricelor cu numerealeatoare au formele,• pentru distributia uniforma, Ru = rand(n), Ru = rand(m,n), Ru = rand(size(A)),• pentru distributia normala, Rn = randn(n), Rn = randn(m,n), Rn = randn(size(A)),unde m si n sunt scalari, iar A este o matrice oarecare.

Page 134: 122472608-matlab

Matrici/vectori -Exercitiul 2a) Creati matricea:

0 0 0 5 0 0

0 0 0 0 5 0

0 0 0 0 0 5

b)Creati vectorii v1,v2,v3 si v4 : M= 2 0 1 3 3 31) 2, 4, 6, 8,...1002) 50, 48, 46,...-50 1 1 1 3 3 33) 1, 1/2, 1/3,...1/1004) 0, 1/2, 2/3, 3/4...99/1005)Folosind end (ultimul index al unui vector/matrice) -1 2 2 3 3 3 ptr un anumit vector, afisati vectorul elementelorimpare si vectorul elementelor in ordine inversa.Ptr matricea M de la a) inversati coloanele, apoi liniile.

Page 135: 122472608-matlab

Matrici/vectori - Rezolvare Exercitiu 2

a)>> M=[zeros(3) 5*eye(3); X 3*ones(3)]b)1)>> v1= 2:2:1002)>> v2=50:-2:-503)>> vt=1:100; v3=1./vt4)>> vr=0:99; vp=1:100; v4=vr./vp5)>> v5=1:100; vi=v5(1: 2: end)>>vinv=v5(end: -1: 1)>> [nl,nc]=size(M) cc=M(:, nc:-1:1) ll=M(nl:-1:1, :)

Page 136: 122472608-matlab

Matrici diagonale – functia diag(v,k)

0

0

0

D= -2

0

0

0

0

0

0

-2

0

1

0

0

0

0

-2

0

1

0

0

0

0

0

0

1

0

0

0

0

0

0

1

0

0

Page 137: 122472608-matlab

Matrici diagonale - Rezolvare diag(v,k)

>> D=-2*diag(ones(1,3),-3)+diag(ones(1,4),2)

Page 138: 122472608-matlab

Exercitiu 4

• Sa se genereze matricele patratice A si B, de ordinul 4, definite prin relatiile de mai jos. Sa se afiseze suma lor, produsul lor, cubul matricei A, rezultatul impartirii la stanga a matricei A prin B si rangul matricei B. Rezolvarea problemei sa se faca prin utilizarea unui fisier script

Page 139: 122472608-matlab

Rezolvare exercitiu 4

Crearea unui fisierul script numit my_opera.m >> edit my_opera

Scrierea comenzilor in fisierul script%generarea matricei A for i=1:4 for j=1:4 A(i,j) = 1/(i+j); end end%generarea matricei Bfor i=1:4 for j=1:4 if i==j B(i,j)=1; elseif i>j B(i,j)=i+j; else B(i,j)=i-j;end end end

Page 140: 122472608-matlab

Rezolvare exercitiu 4 % afisarea matricei AA % afisarea matricei Bdisp('matricea B')disp(B)

% calculul si afisarea sumeisuma=A+B

% calculul si afisarea produsuluiprodus=A*B

% calculul si afisarea cubului matricei Acub_A=A^3

% calculul si afisarea rezultatului impartirii la stangadisp('Rezultatul impartirii A\B este')Rez=A\B

% rangul matricei Brang_B=rank(B)

Page 141: 122472608-matlab

Rezultat exercitiu 4

Rularea fişierului script se face din linia de comandă:>> my_opera

A = 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 0.2000 0.1667 0.14290.1250matricea B 1-1-2-3 31-1-2 451-1 5671suma = 1.5000 -0.6667 -1.7500 -2.8000 3.3333 1.2500 -0.8000 -1.8333 4.25005.2000 1.1667 -0.8571 5.20006.1667 7.1429 1.1250

Page 142: 122472608-matlab

Rezultat exercitiu 4produs = 3.5000 2.2833 2.7167 1.9167 2.2310 1.6405 1.8964 1.4310

cub_A =

0.31670.45000.46670.4512

-2.2167-1.5333-1.1738-0.9512

0.4516 0.3263 0.2571 0.21270.3263 0.2358 0.1859 0.15380.2571 0.1859 0.1465 0.12130.2127 0.1538 0.1213 0.1004

Rezultatul impartirii A\B esteRez = 1.0e+004 * -0.06000.2380 -0.4940-0.1420 0.4620-1.5900 3.79801.0920 -0.96602.8980 -7.7280-2.2260 0.5880-1.5680 4.56401.3160rang_B = 4

Page 143: 122472608-matlab

Se considera vectorii v si w in spatiul real n-dimensional,raportat la un sistem ortogonal de coordonate avandversorii i1, i2, ,,,in

Norma p a (modulul, marimea) vectorului v este :

Elemente de algebra vectoriala

Daca p=2 avem norma euclideana. Un vectorul al carui modulul este egal cu 1 – vector unitar sau versor.

Produsul scalar a vectorilor v si w

Prin unghiul intre vectorii v si w se intelege unghiul micdeterminat de sensurile pozitive ale celor doi vectori:

Page 144: 122472608-matlab

Exercitiu 5

Sa se scrie o functie Matlab care primeste ca argumente doi vectoride lungimi egale cu 3, v si w, si returnează normele euclidiene alevectorilor, produsul lor scalar, produsul lor vectorial si unghiuldintre cei doi vectori exprimat in radiani.

Page 145: 122472608-matlab

function [n_v,n_w,ps,pv,unghi]=vectori(v,w) if length(v)~=3 | length(w)~=3 disp('Vectorii nu satisfac conditia de lungime 3!') n_v=[]; n_w=[]; ps=[]; pv=[]; unghi=[]; return; endn_v=norm(v); n_w=norm(w);ps=dot(v,w); pv=cross(v,w);if n_v==0 | n_w==0 disp('Unghiul nu poate fi calculat, unul din vectori fiind zero.') unghi=[];else unghi=acos(ps/(n_v*n_w));end Testarea programului pentru diferite perechi de vectori:>> v=[1 -1 3]; w=[0 3 -2];>> [n_v,n_w,ps,pv,unghi]=vectori(v,w)

Rezolvare exercitiu 5

Page 146: 122472608-matlab

Operatori logici/indexare logica - Exercitiul 6

Creati matricile: 10 -2

A= 2

-1

0

3

1

2

10 0

1

0

1

0

B=

2 0 -4 20 0

2

2

-10 60 -20 0

4 0 2 2a) determinati-2 3 elementele pozitive ale lui A 0 0toate 3-1 2 -2 6 4 b) determinati elementele lui A egale cu cele din B c) determinati elementele din A din intervalul (1,20) d) determinati elementele din A din afara intervalului (1,20)

Page 147: 122472608-matlab

Operatori logici- Rezolvare exercitiu 6

Introduceti matricile A si B:>> A=[1 0 -2 10 0; 2 0 1 1 1; -1 3 2 0 0; -1 2 -2 3 3];>> B=[2 0 -4 20 0; -10 60 -20 0 2; 4 0 2 2 2; -2 6 4 0 0];

Elementele pozitive din A: >> A(A>0) incercati si A>0

Elementele egale din A si B>> A==B A(A==B)

Elementele din A din intervalul (1,20) >> A((A>1)&(A<20))

Elementele din afara intervalului (1,20) >> A(~((A>1)& (A<20))) sau A((A<=1)|(A>=20))

Page 148: 122472608-matlab

Operatori logici- Exercitiu 7

Fie vectorul x=[3 15 9 12 -1 0 -12 9 6 1]

Determinai comanda care:a) defineste vectorul a obtinut din x prin schimbarea elementelor pozitive cu 0;b) defineste vectorul b obtinut din x prin schimbarea elementelor ce se divid cu 3, cu valoarea 7;c) defineste vectorul c obtinut din x prin schimbarea elementelor pare cu valoarea lor multiplicata cu 5;

Page 149: 122472608-matlab

Operatori logici- Rezolvare exercitiu 7

Introduceti vectorul x:>> x = [3 15 9 12 -1 0 -12 9 6 1]

a) >> a=x;a(x>0)=0

b) >> b=x;b(~rem(x,3))=7c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))

Page 150: 122472608-matlab

Functii relationale si logice

Au caracteristic faptul ca au ca rspuns numai numerele 0 (A) sau 1 (F).any(v)- raspunde cu 1 daca vectorul v are cel putin un element nenul si cu 0 daca toate elementele sunt 0.all(v)-raspunde cu 1 daca toate elementele lui v sunt nenule si cu 0 daca exista cel putin un element nul.find(x)-raspunde cu un vector continand indicii elementelor nenule ale lui x.isnan(x)- raspunde cu un vector de aceiasi dimensiune cu x ale carui elemente sunt 1 sau 0 dupa cum elementul corespunzator al lui x este NaN sau nu.isfinite(x)-raspunde cu un vector de aceiasi dimensiune ca x ale carui elemente sunt 1 sau 0 dupa cum elementul

Page 151: 122472608-matlab

Functii relationale si logice- Exercitiu 8

Inaltimea si viteza unui proiectil lansat cu viteza initialav0 si cu un unghi θ sunt date de:

Proiectilul va atinge solul cand h(t)=0, de unde rezultatimpul de revenire. Pentru θ = 400 , v0=20 m/s, si g=9.81 2m/s , determinati timpul cand inaltimea h nu este maimica de 6m iar viteza este simultan cel mult 16 m/s.

Page 152: 122472608-matlab

Functii relationale si logice- Rezolvare exercitiu 8 Definim datele initiale:

>> v0=20;g=9.81;theta=40*pi/180;

Calculam timpul de revenire al proiectilului tg, timpul unde problema are sens:>> tg=2*v0*sin(theta)/g % am egalat cu 0 prima ecuatie

Definim intervalul de timp si calculm vitezele si inaltimile pe acest interval:>> t=0:0.01:tg;>> v=sqrt(v0^2-2*v0*g*sin(theta)*t+g^2*t.^2);>> h=v0*t*sin(theta)-0.5*g*t.^2;

Determinam cand inaltimea nu este mai mica decat 6m si viteza nu este mai mare decât 16 m/s :>> u=find(h>6&v<16)

Page 153: 122472608-matlab

Functii relationale si logice- Rezolvare exercitiu 8

In vectorul u se afla indicii elementelor din v si h ceverifica aceasta conditie. Evident, indicii corespunzatoridin t ne dau timpii in care conditiile sunt indeplinite.Acesti timpi apartin unui interval dat de primul siultimul indice din u.

Determinm capetele acestui interval :>> t1=t(u(1))>> t2=t(u(end))

Solutia problemei este intervalul sol= [t1,t2]>> sol= [0.85, 1.78]

Page 154: 122472608-matlab

Laborator 3

MATLAB

functii/polinoame calcul simbolic

Page 155: 122472608-matlab

Functii - Exercitiu 1

a) Folosind functia fplot, sa se reprezinte graficul functiei f(x)=x*sin(x) pe intervalul [-pi,pi]. 426b)Se da functia:f(x)=(x -5x +4)/(x +4). Sa se reprezinte grafic, sa se determine minimumul functiei pe intervalul [-3, 0] si maximumul pe intervalul [-1,1];c) Sa se calculeze pentru f(x) de la pct a):

d) Sa se calculeze ptr xmin=0, xmax=1, ymin=0, ymax=1

Page 156: 122472608-matlab

Functii - Rezolvare Exercitiu 1

a) >> g= inline('x.*sin(x)'); >>fplot(g,[-pi pi],'r')b)>> fminbnd(inline('(x.^4-5*x.^2+4)./(x.^6+4)'),-3,0) ans = - 1.3072 >>fminbnd(inline('-(x.^4-5*x.^2+4)./(x.^6+4)'),-1,1) ans =0c)>> quad(inline('x.*sin(x)'),-1,1) ans=0.6023d)>>dblquad(inline('x.^2./(y.^2+1)'),0,1,0,1) ans= 0.2618

Page 157: 122472608-matlab

Polinoame- Exercitiul 2

Fie polinoamele:

P[x] = x5 - 7x3 -8x2 + 2x +12 ; 42Q[x] = x -5x + 4 ; 642T [x] = x + 4x - x – 4

a) Sa se determine produsul P[x]*T[x]*Q[x] (scrieti comanda intr-o singura linie)

b) Sa se determine catul si restul impartirii P[x]:Q[x] siT[x]:Q[x]

c) Sa se determine radacinile polinoamelor P[x], Q[x] si T[x].

Page 158: 122472608-matlab

Polinoame- Rezolvare Exercitiu 2 Introducerea polinoamelor:

>>p=[1 0 -7 -8 2 12];>> q=[1 0 -5 0 4];>> t=[1 0 4 0 -1 0 -4];

Produsul p*t*q: >> conv(conv(p,t),q)

Catul si restul impartirii p/q si t/q: 32>> [c,r]=deconv(p,q); c=x; r = -2× x -8x - 2x +12>>[c1,r1]=deconv(t,q); c1 = x2 + 9 ; r1 = 40 x2 – 40

Radacinile polinoamelor p, q si t:>>roots(p); x1=3, x2=-2, x3=-1+i, x4=-1-i, x5=1 >>roots(q); x1=1, x2=-1, x3=2, x4=-2 >>roots(t); x1=2i, x2=-2i, x3=1, x4=-1, x5=i, x6=-i

Page 159: 122472608-matlab

Polinoame -Exercitiul 3

A) Sa se determine polinomul S[x] ale carui radacini sunt: x1=1, x2=-2, x3=3, x4=-4, x5=5 Sa se afle valorile S(0) si S(-7); S’(1) si S’(-1)

B.1) x=0: pi/10 :pi si y=sin(x). Sa se determine polinomul P4[x] de gradul 4 care aproximeaza datele din vectorii x si y.2) Sa se compare valorile P4 [pi/2] cu valoarea exacta sin(pi/2)3) Sa se calculeze valoarea in pi/2 - utilizati tipuri de interpolare

Page 160: 122472608-matlab

Polinoame - Rezolvare Exercitiu 3

A)>> v=[1 2 3 -4 -5]; s=poly(v); 5432s (x) = x + 3x - 23x - 27x +166x -120>>polyval(s,0)=-120 polyval(s,-7)=-4320>>polyval(polyder(s),1)=60>>polyval(polyder(s),-1)=144B)1)>> x=0:pi/10:pi; y=sin(x); >>p4=polyfit(x,y,4);P4 x = 0.0368x4 -0.2309x3 + 0.0485x2 + 0.9874x+ 0.0002 -32) polyval(p4,pi/2)-sin(pi/2)=0.00053993<10c) >>interp1(x,y,pi/2,'nearest'); 1 >> interp1(x,y,pi/2,'linear'); 1

Page 161: 122472608-matlab

Polinoame -Exercitiul 4

a) Sa se rezolve ecuatia: x2sqrt( x2 + 3) + xln (x2 +1)- 2 - ln 2 = 0 , x=0.5;b) Sa se reprezinte grafic functia f (x) = (x -1)ex sin(x)+ x3 - xsi apoi sa se determine toate radacinile pe intervalul [-2, 2].

Page 162: 122472608-matlab

Polinoame -Rezolvare exercitiul 4

a) >> fzero(inline('x.^2.*sqrt(x.^2+3)+x.*log(x.^2+1)-2-log(2)'),0.5); ans=1b)>> g=inline('(x-1).*exp(x).*sin(x)+x.^3-x'); >> fplot(g, [-2,2],'b');>>fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),-1);ans=-1.2255>> fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.1)ans= 0>>fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.9)ans= 1

Page 163: 122472608-matlab

Calcul simbolic -Exercitiul 1

1) Sa se calculeze simbolic expresiile:

2) Sa se determine polinomul care are radacina tripla 2 si radacina dubla -1;3) Sa se simplifice expresia:

Page 164: 122472608-matlab

Calcul simbolic -Rezolvare exercitiul 1

1)>>u=sym(1);d=sym(2); t=sym(3);c=sym(5);s=sym(7)>> (u/d+u/t)/(u/c+u/s)>> u+u/(u+u/(u+u/(u+u/d)))2) >> collect((x-2)^3*(x+1)^2) sau >> expand((x-2)^3*(x+1)^2)3) >>a=sym( 'a'); [sus,jos]=numden(a/(1-1/a)+(1-1/a)/(1/(1-a))+ (1/(1-a))/a)>>simplify(sus/jos)

Page 165: 122472608-matlab

Calcul simbolic -Exercitiul 2

1) Sa se calculeze limitele:

2)Daca f(x) = 2xsin x -(x2 - 2)cos (x) sa se calculeze f ' (x)3) Sa se calculeze primitiva funxctiei f (x) = x 2ex3

4) Sa se rezolve ecuatia: x + 2ax - a x - 2a = 0

3 2 2 3

Page 166: 122472608-matlab

Calcul simbolic -Rezolvare exercitiul 2

1) >>limit((sqrt(x+1)-1)/((x+1)^(1/3)-1))>> limit((x^3-1)/(x^3+1),x,-inf,'right')>> limit(((x-1)/(x+1))^x,x,inf,'left')

2) >> diff(2*x*sin(x)-(x^2-2)*cos(x))3) >> int(x^2*exp(x^3))4) >> solve(x^3+2*a*x^2-a^2*x-2*a^3)

Page 167: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 1

Sa se rezolve urmatorul sistem folosind metodainversarii matriceale:

5x1+4x2+x3=06x1+3x2+2x3=5x1+x2+x3=-7

Page 168: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 1

Se creaza fisierul rez1.m:>> edit rez1.mSe creaza matricea coeficientilor:A=[5 4 1; 6 3 2; 1 1 1];Rezolvarea sistemuluiif det(A)~=0 % daca sistemul este compatibil determinat b=[0; 5; -7]; % vectorul-coloana al termenilor liberi X=inv(A)*belse disp('Sistemul nu este compatibil determinat.')endIn urma executiei se obtine: x1 = 6.25 , x2 = -6 , x3 = –7.25

Page 169: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 2

Sa se rezolve urmatorul sistem folosind metodaimpartirii la stanga:

2x1-3x2=7-6x1+8x2-x3=-53x2+4x3=1

Page 170: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 2

Se creaza fisierul rez2.m:>> edit rez2.mSe creaza matricea coeficientilor:A=[2 -3 0; -6 8 -1; 0 3 4];Rezolvarea sistemuluiif det(A)~=0 b=[7 -5 1]'; % vectorul-coloana al termenilor liberiX=A\belse disp('Sistemul nu este compatibil determinat.')endIn urma executiei se obtine: x1 = -94 , x2 = -65 , x3 = 49.

Page 171: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 3

Pentru urmatorul sistem sa se determine solutiileparticulare folosind metodele pseudo-inversarii si aimpartirii la stanga:3x-y+z-2t=6

-4x+4y+2z+t=0

Page 172: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 3Se creaza fisierul rez3.m:

>> edit rez3.mSe creaza matricea coeficientilor si vectorul coloana al termenilor liberi:A=[3 -1 1 -2; -4 4 2 1];b=[6; 0];Rezolvarea sistemuluiif rank(A)==rank([A b]) disp('metoda pseudo-inversarii') X=pinv(A)*b disp('metoda impartirii la stanga') X=A\belse disp('Sistemul nu este compatibil.')end

Page 173: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 3

In urma executiei se obtin rezultatele:metoda pseudo-inversariiX= 0.9431 0.5418 1.3846 -1.1639metoda impartirii la stangaX= 1.2000 0 2.4000 0

Page 174: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 3

Observatii: 1. Pentru testarea compatibilitatii s-a folosit teorema lui Kronecker-Capelli. Matricea extinsa s-a obtinut in Matlab prin concatenarea matricei A cu vectorul- coloana b.2. Daca sistemul era compatibil determinat se obtineau, solutii identice prin utilizarea celor doua metode. Sistemul este compatibil nedeterminat, prin utilizarea celor doua metode s-au obtinut doua solutii particulare distincte.3. Sistemul de ecuatii liniare din exemplul 3 este un sistem subdeterminat. El poate fi rezolvat doar pe cale simbolica. Acest sistem nu poate fi rezolvat complet

Page 175: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 4

>> clc % clear command window

Se creaza matricea coeficientilor si se determina rangul matricei sistemuluiA=[3 -1 1 -2; -4 4 2 1];r=rank(A);% se obtine 2, prin urmare, 2 variabile suntindependente, si 2 variabile sunt dependente de primele

Se cauta un minor de ordinul 2 nenul, pentru a stabili variabilele dependenterminor=rank(A(:,[1 2])) % se obtine 2; x,y devin variabilele dependente, in raport cu care se rezolva sistemul rescris sub forma: 3x-y=6-z+2t; -4x+4y=-2z-t;disp('sistemul este compatibil nedeterminat')

Page 176: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 4 Se rezolva sistemul de mai sus

syms z t;Aredus=A(:,[1 2])bredus=[6-z+2*t; -2*z-t];

Rezolvarea sistemului cu metoda inversariis=inv(Aredus)*bredus

Rezolvarea sist. cu operatorul de impartire la stangass=Aredus\bredusdisp(blanks(1)') %creeaza spatii intre şirurile de caratere.pause % oprirea momentana a executieidisp('Solutia sistemului dat este:')x=s(1)y=s(2)disp('z,t numere reale oarecare')

Page 177: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 4 Se obtin rezultatele:

r =2rminor =2sistemul este compatibil nedeterminats= 3-3/4*z+7/8*t 3-5/4*z+5/8*tss = 3-3/4*z+7/8*t 3-5/4*z+5/8*t

Solutia sistemului dat este:x= 3-3/4*z+7/8*ty= 3-5/4*z+5/8*tz,t numere reale oarecare

Page 178: 122472608-matlab

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 5

Sa se comparare metodele studiate de rezolvare asistemelor din punct de vedere al timpului de executie sial preciziei solutiei in cazul unui sistem patraticcompatibil determinat de ecuatii liniare de dimensiunimari.

Page 179: 122472608-matlab

Sisteme de ecuatii liniare -Rezolvare exercitiul 5

Se genereaza matricea sistemului, solutia exacta, vectorul termenilor>>A=rand(700); x=rand(700,1); b=A*x;

Timpii de executie>> tic; y=inv(A)*b; timp1=toc timp1 =0.1671>> tic; z=A\b; timp2=toctimp2 =0.0685

Precizia solutiilor calculate:n1=norm(A·y-b) n1 = 3.3005e-010n2=norm(A·z-b) n2 = 5.9342e-012n1/n2ans = 55.6182

Page 180: 122472608-matlab

Laborator 4

MATLAB

reprezentari grafice

Page 181: 122472608-matlab

Reprezentari grafice in plan 2D

Matlab permite reprezentarea in plan a graficelor defunctii si a suprafete poligonale.Reprezentarile grafice ale functiilor pot fi facute in maimulte tipuri de coordonate: carteziene, polare, logaritmice, semilogaritmice

Page 182: 122472608-matlab

Reprezentari grafice in plan- 2D

O parte din functiile Matlab destinate reprezentarilorgrafice 2D:

plot(x,y, speclinie) - grafice in coordonate X-Y liniare; xsi y sunt vectorii ce definesc punctele de reprezentat, iarspeclinie este un sir de caractere intre ` ` reprezentand tipulliniei ce uneste punctele definite de x si y, markerul cu carese reprezinta punctele definite de x si y si culoarea liniei,toate in aceasta ordine.

line(x,y) -reprezentarea grafica a liniilor poligonale

fill (x,y,s) - reprezentarea grafica a poligoanelor

loglog(x,y,s) -grafice in coordonate X-Y logaritmice

semilogx (x,y,s), semilogy(x,y,s) -grafice in

Page 183: 122472608-matlab

Reprezentari grafice in plan - 2D

Tipul de linie poate fi unul din simbolorile:- continua (implicit) , -- intrerupta, : puncte, -. linie-punct

Tipul marker-ului:+ ( semnul +), o (cerc), * (asterisc), . (punct), x (cruce),s (patrat), d (romb), p (pentagon), h (hexagon), ^ (triunghicu un varf in sus), v (triunghi cu un varf in jos), > (triunghicu un varf la dreapta), < (triunghi cu un varf la stanga)

Culorile pot fi urmatoarele simboluri:r (rosu), g (verde), b (albastru), c (bleu), m (mov),y (galben), k (negru), w (alb).

Page 184: 122472608-matlab

Reprezentari grafice in spatiu- 3D

In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafetesi corpuri 3-dimensionale. O parte din functiile Matlab destinatereprezentarilor grafice 3D:

plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z suntvectorii ce definesc punctele de reprezentat, iar speclinie este un sirde caractere intre ` ` reprezentand tipul liniei ce uneste puncteledefinite de x si y, markerul cu care se reprezinta punctele definite dex si y si culoarea liniei, toate in aceasta ordine.

mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub formaunei retele (“mesh”)

surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelorpline, cu iluminare

contour(x,y,z) , contourf(x,y,z,v) – reprezentarea grafica doar aliniilor de contur

Page 185: 122472608-matlab

Functii auxiliare pentru reprezentari grafice

Cateva functii auxiliare ce pot controla proprietatile modului dereprezentare:

title - inserarea unui titlu pentru reprezentarea grafica

axes, axis - controlul aparitiei si stabilirea lungimii unitatilor dereprezentare pe axele sistemului de coordonate

xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului decoordonate

text, gtext - plasarea unui text pe grafic la o anumita pozitie, sauselectata cu mouse-ul.

hold- pastrarea graficului curent si al proprietatilor sale

subplot - impartirea ferestrei de reprezentare grafica in mai multeregiuni grafice.

grid - suprapunerea unei retele de linii pe grafic

meshgrid -definirea sub forma de retea de puncte a domeniului de

Page 186: 122472608-matlab

Reprezentari grafice 2D - Exercitiul 1

Sa se reprezinte grafic functiile y 1, y2:[-5,5]→Rdefinite prin relatiile:

y1(x)=e-0.4x cos(8x)

y2(x)= e-0.4x

si

sin(8x)

Page 187: 122472608-matlab

Reprezentari grafice 2D – Observatii1) Pentru reprezentarea grafica a functiilor in Matlab este

necesar ca domeniul de reprezentare sa fie definit prin puncte. Distanta dintre orice doua puncte consecutive ale graficului trebuie sa fie suficient de mica pentru ca reprezentarea grafica sa fie corecta. O distanta prea mica necesita mai mult timp de calcul !

2) Reprezentarea mai multor grafice de functii in acelasi grafic Se poate face prin enumerarea functiilor sub forma: variabila, functie si, optional, setari de culoare, marker si/sau tip de linie, pentru fiecare functie in parte in acelasi apel al functiei plot: >> plot(x, y1, 'b-', x, y2, 'g:o') sau in apeluri diferite ale functiei plot, dar cu conditia ca inainte sau imediat dupa primul apel sa se dea comanda hold on, iar dupa ultimul apel sa fie data comanda hold off. Schimbati pasul la 0.5 si reprezentati din nou.

Page 188: 122472608-matlab

Reprezentari grafice 2D – Rezolvare Exercitiul 11) Redarea domeniului (intervalului) de reprezentare prin

definirea unui vector cu pas liniar: >>x=-5:0.05:5;2) Definirea functiilor folosind operatorii corespunzatori: >> y1=exp(-0.4*x).*cos(8*x); >> y2=exp(-0.4*x).*sin(8*x);3) Trasarea graficelor si, eventual, precizarea anumitor proprietati ale reprezentarii grafice: >> plot(x,y1,'b-') >> hold on >> plot(x,y2,'g:o') >> hold off4) Setarea altor proprietati ale reprezentarii grafice (etichetele axelor, text pe grafic etc): >>title('Grafic 2D'); xlabel('x'); ylabel('y'); >>grid; gtext('Doua grafice')

Page 189: 122472608-matlab

Reprezentari grafice 2D– functia legend

Adaugarea unei legende la un grafic se face prin comanda legend.Cea mai comoda si comuna apelare este data in exemplu:>>x = 0:.2:12;>>plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));>>legend('First','Second','Third',0);

In locul valorii „0” se mai pot utiliza: 1 sau lipsa, ceea ce pozitioneaza legenda in partea dreapta superioara in interior; 2, ce pozitioneaza legenda in partea stanga superioara in interior; 3, care plaseaza legenda in partea de jos stanga si in interior; 4, ce plaseaza legenda in partea inferioara stanga si in interior; -1, care plaseaza legenda în partea dreapta sus si în exterior.

Page 190: 122472608-matlab

Reprezentari grafice 2D - Exercitiul 2

Sa se scrie o functie Matlab care primeste caargumente o alta functie f si capetele unui interval inchis[a,b] pe care este definita aceasta functie, si reprezintagrafic in coordonate semilogaritmice, ambele cazuri,functia f pe intervalul [a,b]. Daca reprezentarea graficain cel putin unul din cele doua cazuri nu poate firealizata, se va afisa un mesaj de eroare.

Page 191: 122472608-matlab

Reprezentari grafice 2D- Rezolvare Exercitiul 2Editam fisierul grafic_log:

>> edit grafic_log function grafic_log(f,a,b) if a>b disp('Interval vid (a>b) !') return end n=100; % nr de puncte pentru reprezentarea intervalului pas=(b-a)/n; % pasul submultiplu al lungimii intervalului. if a==b x=a; else x=a:pas:b; end if a<=0 | min(feval(f, x))<=0 disp('Unul din grafice nu poate fi reprezentat!') return endsubplot(2,1,1); semilogx(x, feval(f,x)) % coord semilog pe axa xsubplot(2,1,2); semilogy(x, feval(f,x)) % coord semilog pe axa y

Page 192: 122472608-matlab

Reprezentari grafice 2D – Testare Exercitiul 2

Pentru testarea programului se defineste o functie : >> f = inline('sin(x)+2')Apelul functiei grafic_log se face din linia de comanda: >> grafic_log(f, 2,1) Interval vid (a>b) ! >> grafic_log(f ,-1,10)Unul din grafice nu poate fi reprezentat!

>> grafic_log(f,1,10)

Pentru a desena graficele pe acelasi ecran se folosestecomanda subplot(n,m,k) unde n reprezinta numarul delinii de subferestre, m numarul de coloane desubferestre, iar k numarul ferestrei ce devine activa.

Page 193: 122472608-matlab

Reprezentari grafice 2D -Exercitiul 3

Sa se reprezinte grafic triunghiul ale carui varfuri au coordonatele (-1,3), (2,7) si (9,-4).

Solutie: Rezolvarea se bazeaza pe utilizarea functiei line, care primeste ca argumente vectorul tuturor absciselor si vectorul tuturor ordonatelor varfurilor, in aceeasi ordine:

>> line([-1 2 9 -1],[3 7 -4 3]); grid

Observatie: Ce face functia Matlab line? Triunghiul e format din 3 segmente, necesita precizarea a patru puncte, evident, primul si ultimul punct fiind identice.

Page 194: 122472608-matlab

Reprezentari grafice 2D – functia ezplot, ezpolar

Pentru plotarea facila a unei expresii introduse direct ca argument se face usor cu functia ezplot, sau in coordonate polare ezploar care se poate apela:• ezplot(f), ca de exemplu ezplot('cos(x)'), care considera implicit pentru x din f=f(x), domeniul -2*pi < x < 2*pi;• ezplot(f, [xmin,xmax,ymin,ymax]), care ploteaza f(x,y)=0 pe domeniul xmin < x < xmax, ymin < y < ymax;• ezplot(f), ca de exemplu ezplot('x^2 - y^2 - 1'), care ploteaza f(x,y)=0 si in care -2*pi < x < 2*pi si -2*pi < y < 2*pi• ezplot('f',[a b]), ca de exemplu ezplot('x^3 + y^3 - 5*x*y + 1/5', [-3,3]), care ploteaza f(x,y)=0 si in care a=-3 < x < b=3 si a=-3 < y < b=3;>> ezpolar('1 + cos(t)')>> ezpolar('1 - 2*sin(3*t)')

Page 195: 122472608-matlab

Reprezentari grafice 2D– functia comet

Pentru reprezentarea dinamica (in miscare) a traiectoriei unui punct, care urmareste reprezentarea grafica 2D (o „cometa”), se utilizeaza functia comet, care se apeleaza cu una dintre sintaxele:• comet(y) – care traseaza in miscare (animat) vectorul y;• comet(x,y) – care traseaza in miscare vectorul y functie de x;• comet(x,y,p) – care traseaza in miscare vectorul y functie de x, utilizand pentru animare (intarzierea în plotare) timpul dat de p*length(y).Scrieti secventa:>>t = -pi:pi/200:pi;>>comet(t,tan(sin(t))-sin(tan(t)))

Page 196: 122472608-matlab

Reprezentari grafice 2D – functia bar

Reprezentarea grafica, sub forma de bare verticale, se realizeaza cu functia bar, care se poate apela cu sintaxa:• bar(x,y,gros) – reprezinta grafic y, in functie de x, cu grosimea barei date de gros, implicita gros=0.8, gros > 1 barele se unesc;• bar(x,y, 'grouped') – reprezinta barele grupate pe seturi de date si cu aceeasi culoare;• bar(x,y, 'stacked') – reprezinta barele sectionate cu culori diferite pentru seturile de date.

Apelata cu secventa [xb,yb]=bar(y) sau [xb,yb]=bar(x,y)functia bar nu reprezinta graficele, dar calculeaza vectorii xb si yb, astfel incat plot(xb,yb) sa poata trasa graficul de bare.

Page 197: 122472608-matlab

Reprezentari grafice 2D – functiile bar, barh

De mentionat ca valorile lui x trebuie sa fie egal departate si crescatoare.Scrieti secventa:>>subplot(3,1,1),bar(rand(10,5),'stacked'),colormap(cool)>>subplot(3,1,2), bar(0:.25:1,rand(5),1)>>subplot(3,1,3), bar(rand(2,3),.75,'grouped')

Reprezentarea barelor orizontale se realizeaza cu functia barh, care este asemanatoare functiei bar.

Page 198: 122472608-matlab

Reprezentari grafice 2D – functia hist

Calculul si reprezentarea grafica a histogramelor se face cu functia hist, care se apeleaza cu una dintre sintaxele:• hist(y) – traseaza histograma cu 10 segmente egale a datelor vectorului y;• hist(y, n) – traseaza histograma cu n segmente egale a datelor vectorului y;• hist(y, x) – traseaza histograma datelor vectorului y la abscisele specificate in x;• [m,z]=hist(y), [m,z]=hist(y, n), [m,z]=hist(y, x) – returneaza vectorii m si z continand frecventa de aparitie si de localizare a segmentelor. Cu functia bar(z,m) se poate trasa histograma.Exemplu: histograma cu elemente distribuite normal

Page 199: 122472608-matlab

Reprezentari grafice 2D – functia stem

Reprezentarea grafica a semnalelor discrete, sub forma unor linii terminate cu cerc, se face cu functia stem, care se apeleaza cu una dintre sintaxele:• stem(y) – traseaza un grafic din linii cu cerc, cu elementele vectorului y;• stem(x,y) – traseaza un grafic din linii terminate cu cerc, cu locatiile specificate de vectorul x, adica y=y(x), iar valorile lui x trebuie sa fie egal departate si crescatoare;• stem(x,y,linie_tip) – traseaza un grafic linii de tipul si culoarea precizata in sirul de caractere linie_tip, similar cu functia plot (de exemplu stem(x,y,’:r’)).Exemplu:

Page 200: 122472608-matlab

Reprezentari grafice 2D – functia stairs

Graficele in trepte sunt utilizate la reprezentarea diagramelor sistemelor numerice de esantionare si prelucrare a datelor.Functia stairs se apeleaza cu una dintre sintaxele:• stairs(y) – traseaza graficul in trepte al vectorului y;• stairs(x,y) – traseaza graficul in trepte al elementelor vectorului y la locatiile specificate in x, iar valorile lui x trebuie sa fie egal departate si in ordine crescatoare;• [xb,yb]=stairs(y) si [xb,yb]=stairs(x,y) – calculeaza vectorii xb si yb, astfel încat plot(xb,yb) sa poata trasa graficul în trepte.Exemplu de grafic în trepte al functiei y=sin(x):>>x=0:0.3:6; y=sin(x); stairs(x,y)

Page 201: 122472608-matlab

Reprezentari grafice 2D – functia pie

Realizarea unei diagrame circulare (asa numita diagrama „placinta”) cu valorile unui vector x, avand specificata semnificatia in eticheta, se face cu functia pie(x,eticheta), care se poate apela

De mentionat ca valorile lui x sunt normalizate, iar daca sum(x)<1, atunci sunt trecute valorile efective si apare un segment de cerc.>> pie([2 4 3 5],{'North','South','East','West'})

Page 202: 122472608-matlab

Reprezentari grafice 2D – functia plotmatrix

Plotarea unei matrice dispersate se face cu functia plotmatrix.

Se apeleaza cu comanda plotmatrix(x,y) si prezinta dispersia coloanei x functie de coloana y.

Daca x este o matrice p*m, iar y o matrice p*n, atunci plotmatrix produce o matrice n*m.

Comanda plotmatrix(y) este asemanatoare cu comanda plotmatrix(y,y), cu exceptia faptului ca diagonala este inlocuita prin hist(y(:,i)).Exemplu de utilizare:>>x = randn(50,3); y = x*[-1 2 1;2 0 1;1 -2 3;]';>>plotmatrix(y).Plotarea dispersiei vectorului x, functie de vectorul y (x si y aceeasi dimensiune), cu markere (cerculete implicit) de arie determinata de valorile vectorului s si fiecare punct colorat, conform valorilor vectorului c, se face cu scatter(x,y,s,c). Daca s este scalar, atunci fiecare marker va avea aceesi dimensiune.

Page 203: 122472608-matlab

Reprezentari grafice 2D – functia errorbar

Evidentierea erorilor datelor reprezentate grafic - errorbar(x,y,e).

Reprezentarea grafica a datelor cu bare de eroare ataseaza fiecarei perechi (x,y) eroarea precizata intr-un vector, e, cu aceleasi dimensiuni. Vectorul e contine lungimea barelor ce reprezinta eroarea.

Barele de erori se reprezinta simetric in raport cu ordonata y, ceea ce presupune o asociere de erori pozitive sau negative, cu aceeasi probabilitate.

Segmentele de eroare sunt de inaltime 2*e si se traseaza pe curba y=y(x). Figura obtinuta reprezinta plaja de valori pe care o poate lua functia y cu eroarea ”e”.

Daca x si y sunt matrice de aceeasi dimensiune, functia errorbar va reprezenta graficul cu bare de eroare, pentru fiecare coloana in parte.

Page 204: 122472608-matlab

Reprezentari grafice 3D – Exercitiul 4

Sa se reprezinte grafic in spatiul tridimensional curba 3D data prin ecuatiile parametrice:

x(t)=ln(t2+2),y(t)=t*sin(t),z(t)=-t-1 unde t∈[-7,7]

Page 205: 122472608-matlab

Reprezentari grafice 3D – Rezolvare Exercitiul 41)Domeniul/intervalul de reprezentare definit prin

vectorul cu pas liniar: >> t=-7:0.1:7;2) Definirea functiilor corespunzatoare coordonatelor: >> x=log(t.^2+2); y=t.*sin(t); z=-t-1;3) Trasarea graficului si precizarea anumitor proprietati: >> plot3(x,y,z,'m')4) Setarea altor proprietati ale reprezentarii grafice (etichetele axelor, grid etc): >> grid >> xlabel('axa x'); >> ylabel('axa y'); >> zlabel('axa z');Sensul de parcurgere a curbei se stabileste cu functia Matlab comet3. Inlocuiti functia plot3 cu comet3.

Page 206: 122472608-matlab

Reprezentari grafice 3D – Exercitiul 5Suprafata ce reprezinta graficul unei functii de doua variabile

z=f(x,y): f(x,y) = x*y/(x2+y2+1) unde x∈[-2,2] y∈[-4,4]

Solutie: definim matricile si functiile ptr domeniul de reprezentare >> x=-2:0.2:2; y=-4:0.4:4; [X,Y]=meshgrid(x,y); >> Z=X.*Y./sqrt(X.^2+Y.^2+1); >> surf(X,Y,Z)

Observatie: Domeniul de reprezentare al unei suprafete este o retea de puncte {(xi, yj)}, ce se genereaza separat in seturile de puncte {xi} si {yj}, apoi se formeaza produsul cartezian al acestora cu ajutorul functiei Matlab meshgrid. In locul comenzii surf putem utiliza comenzile mesh, surfc, meshc. Daca se doresc doar liniile de contur folosim comenzile contour(x,y,z) sau contourf(x,y,z) care umple cu culoare diferenele de nivel.

Page 207: 122472608-matlab

Reprezentari grafice 3D – Exercitiul 6Sa se reprezinte grafic in spatiul 3D functia “sombrero” ptr x,y

reali si nenuli:

Solutie: 1) redarea domeniului de reprezentare: >> [x,y]=meshgrid([-8:.5:8],[-8:.5:8]); 2) definirea functiilor: >> R=sqrt(x.^2+y.^2)+eps; z=sin(R)./R; 3) trasarea graficului si precizarea anumitor proprietati ale reprezentarii grafice (culoare, umbra etc): >> surfl(z); shading interp; colormap(flag);Observatie: functia „sombrero” include si punctul (0,0), facem uz de constanta Matlab eps foarte mica (a se vedea help-ul constantei eps).

Page 208: 122472608-matlab

Reprezentari grafice 3D – Exercitiul 7

Sa se reprezinte grafic o piramida dreapta de inaltime hsi cu baza octogon regulat inscris intr-un cerc de raza rcsi un elipsoid cu semiaxele rx, ry si rz.

Page 209: 122472608-matlab

Reprezentari grafice 3D – Rezolvare Exercitiul 7

Piramida va fi reprezentata cu ajutorul functiei Matlab cylinder, iar elipsoidul cu una din functiile Matlab sphere sau ellipsoid.1) Definim raza cercului circumscris bazei, inaltimea piramidei si numarul laturilor bazei >>rc=1.25; h=3; n=8;2) Determinam coordonatelor suprafetei piramidei de inaltime 1 >>[xp,yp,z]=cylinder([rc 0],n);3) Stabilim inaltimea ceruta >>zp=h*z;4) Reprezentarea grafica >> surf(xp,yp,zp) >> colormap(summer); axis('equal')

Page 210: 122472608-matlab

Reprezentari grafice 3D – Rezolvare Exercitiul 7

1) Precizam coordonatelor centrului si a semiaxelor >>xc=3; yc=-1; zc=0; >>rx=5; ry=3; rz=2;2) Reprezentarea grafica cu functia ellipsoid >>ellipsoid(xc,yc,zc,rx,ry,rz,30) >>axis('equal'); colormap spring >>pause3) Reprezentarea grafica cu functia sphere >>[x,y,z]=sphere(30); >>xe=5*x+3; ye=3*y-1; ze=2*z; >>surf(xe,ye,ze); >>axis('equal'); colormap(cool)

Page 211: 122472608-matlab

Reprezentari grafice 3D – functia ezmesh

Pentru plotarea facila a retelei (gridului) unei expresii introduse direct ca argument se utilizeaza functia ezmesh, care se poate apela:• ezmesh(f) – ploteaza graficul functiei f(x,y) utilizând functia mesh, unde f este un semn sau o expresie simbolica, reprezentand o functie matematica de doua variabile, ca x si y, considerand domeniul implicit -2*pi < x < 2*pi, -2*pi < y < 2*pi si acordand corespunzator gridul;• ezmesh(f, Dom) – ploteaza f pe domeniu, Dom, care poate fi un vector de doua dimensiuni, [a b], respectiv (a < x < b, a < y < b), de 4 dimensiuni, [xmin xmax ymin ymax] ori [xmin xmax], [ymin ymax], respectiv (xmin < x < xmax, ymin < y < ymax) sau valoarea implicita, 2*pi < x < 2*pi, -2*pi < y < 2*pi ;• ezmesh(..., N) – ploteaza f pe domeniul implicit, considerand un grid NxN, in care valoarea implicita a lui N este 60;

Page 212: 122472608-matlab

Reprezentari grafice 3D – Exemple functia ezmesh

Posibilitatile de apelare a functiei ezmesh:>>f = ['3*(1-x)^2*exp(-(x^2) - (y+1)^2)' ...'- 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)' ...'- 1/3*exp(-(x+1)^2 - y^2)'];>>ezmesh(f,[-pi,pi])>>ezmesh('x*exp(-x^2 - y^2)'); ezmesh('x*y','circ');>>ezmesh('real(atan(x + i*y))');>>ezmesh('exp(-x)*cos(t)',[-4*pi,4*pi,-2,2]);>>ezmesh('s*cos(t)','s*sin(t)','t');>>h = inline('x*y - x'); ezmesh(h);

Page 213: 122472608-matlab

Reprezentari grafice 3D – functia ezsurf, ezsurfcPentru plotarea facila a suprafetelor colorate a unei

expresii introduse direct ca argument se utilizeaza functia ezsurf. Suprafetele sunt date parametric, x = x(s,t), y = y(s,t), z = z(s,t).

>> ezsurf('(1-s)*(3+cos(t))*cos(4*pi*s)', …'(1-s)*(3+cos(t))*sin(4*pi*s)', ...'3*s + (1 - s)*sin(t)', [0,2*pi/3,0,12] );

Pentru plotarea facila a suprafetelor colorate combinate, cu trasarea liniilor de contur a unei expresii introduse direct ca argument, se utilizeaza functia ezsurfc>>ezsurfc('(s-sin(s))*cos(t)','(1-cos(s))*sin(t)','s',...[-2*pi,2*pi]);

Page 214: 122472608-matlab