Sunteți pe pagina 1din 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 Programele elaborate in mediul MATLAB se salveaza in fisiere cu extensia .m, numite M-fisiere.

Realizare structurala MATLAB este realizat sub forma unui nucleu de baza, cu interpretor propriu, in jurul caruia sunt construite Toolbox-uri - aplicatii specifice Toolbox o colectie extinsa de functii MATLAB care dezvolta mediul de programare, pentru a rezolva probleme din domenii variate Toolbox-uri disponibile Signal Processing pentru procesarea semnalelor si analiza seriilor temporale Image Processing pentru procesarea imaginilor si a semnalelor bidimensionale Neural Network pentru proiectarea si simularea retelelor neurale Statistics pentru analiza, modelarea si simularea datelor Spline aproximare si modelare folosind functii Control System Design pentru analiza si proiectarea sistemelor automate de control Robust Control pentru sinteza sistemelor care trebuie sa functioneze in conditii de incertitudine System Identification pentru procesarea semnalului in vederea modelarii parametrice si analiza seriilor temporale Aerospace, Bioinformatics, Computer Vision, Curve Fitting, Econometrics, Filter Design, Financial, Global Optimization , Image Acquisition, Parallel Computing, Symbolic Math, SimBiology, Wavelet, Simulink

MATLAB Desktop

Taste ajutatoare in MATLAB 1. 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 arguments of type 'double'. Apasand tasta sageata in sus se rescrie comanda tiparita anterior. Taste ajutatoare in MATLAB 2. Tasta Tab Ati uitat numele functiei pe care vreti s-o folositi : >> y=sq Apasati tasta TAB si selectati functia >> y=sqrt(45) 3. Tasta ; Aplicata la sfarsitul comenzii suprima afisajul din fereastra Command Window. >> y=25+3 ; MATLAB salveaza valoarea variabilei y in memorie : >> y

Structura sistemului MATLAB Structura sistemului MATLAB consta in 5 parti principale: 1. Mediul de dezvoltare - set de unelte care faciliteaza folosirea functiilor si fisierelor MATLAB. Multe dintre acestea 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 funcii matematice MATLAB - vasta colectie de algoritmi de calcul, pornind de la functii elementare precum suma, sinus, cosinus si aritmetica complexa, pana la funcii mai sofisticate precum inversare de matrici, calcul de valori proprii, functii Bessel, si transformata Fourier. Structura sistemului MATLAB 3. Limbajul MATLAB - un limbaj matrice/vector de inalt nivel ce include instructiuni de control al buclelor, functii, structuri de date, comenzi de intrare/iesire si instructiuni de programare orientata pe obiecte. Limbajul MATLAB permite atat programarea superficiala pentru crearea rapida a unor mici programe de calcul specifice, cat si "programarea in detaliu" in vederea dezvoltarii unor programe complexe de nivel superior. Structura sistemului MATLAB 4. Handle Graphics. Handle Graphics - reprezinta sistemul de grafica MATLAB si include atat comenzi de inalt nivel pentru vizualizarea 2D i 3D a datelor, procesare de imagini, animatie si grafica, cat si comenzi de jos nivel ce permit personalizarea completa a reprezentarilor grafice si construirea integrala a interfetelor grafice (GUI) pentru aplicatiile MATLAB. Structura sistemului MATLAB 5. MATLAB Application Program Interface (API) - este

o biblioteca ce permite scrierea programelor C si Fortran ce interactioneaza cu MATLAB. Biblioteca contine facilitati de apel de subrutine din MATLAB (dynamic linking), de apelare a MATLAB-ul ca pe o masina de calcul, si de citire si scriere de fisiere MAT-files. Moduri de lucru (mediu de programare) modul linie de comanda fiecare linie este prelucrata imediat si rezultatele sunt afisate (comenzile se introduc in Command Window) modul de lucru cu programe continute in fisiere. Fisierele ce contin instructiuni MATLAB se numesc fisiere M, deoarece au extensia .m (fisierele M pot apele alte fisiere M sau pot contine apeluri recursive) Fisierele .m Fisiere script cand trebuie executate in mod repetat o secventa de comenzi MATLAB. Trebuie salvate cu extensia .m Nu permit integrarea in programe mari, construite pe principiul modularizarii. Sunt apelabile prin tastarea numelui lor. Fisiere function declararea propriilor functii. Pot lucra 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 subdirectorul Work, al directorului 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 in format binar, nume_fisier .mat save nume_fisier x y - salveaza variabilele x si y in format binar, nume_fisier .mat save nume_fisier.ext -ascii -tabs se salveaza toate variabilele in fisierul nume_fisier.ext cu toate datele separate de TAB Importul fisierelor functia load Incarcarea unui fisier de date se face cu functia load load nume_fisier variabilele si valorile lor sunt stocate in workspace si pot si folosite. Implicit se considera extensia .mat load masuratori.txt datele din fisierul masuratori.txt sunt stocate intr-o variabila numita masuratori. Orice extensie in afara de .mat indica MATLAB-ului ca datele sunt 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 de comanda urmatoare ,Separator intre instructiuni pe aceiasi linie de comanda (cu ecou pe ecran) ;Separator intre instructiuni pe aceiasi linie de

comanda ( fara ecou pe ecran) % Se foloseste pentru a anunta comentarii in program !Parasirea mediului Matlab pentru o sesiune de lucru extern =Asignare 'Transpusa unei matrici [;] Separator intre liniile unei matrici Tipuri 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 si semne plus sau minus. Notatia stiintifica foloseste litera e pentru a specifica 10 la puterea corespunzatoare. 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 si variind intre aproximativ 10-308 si 10+308. Pentru a economisi memorie, numerele pot fi folosite si in forma intreg sau zecimal cu simpla precizie. Exemple de numere: 3 -990.0001 9.6397238 1.60210e-20 6.02252e23 1i-3.14159j 3e5i

Stabileste formatul extern de afisare a numerelor pe ecran. Afecteaza doar afisarea numerelor, nu si precizia de calcul sau modul de salvare . MATLAB-ul executa calculele in dupla precizie, 64 biti. Precizie simpla 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. ATENIE ! Daca unei variabile i se da numele unei functii, functia nu mai poate fi folosita pana cand variabila nu este stearsa.

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 Variabile Datorita 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 constante Variabile speciale nu pot fi declarate si sunt accesibile global in orice fisier .m. ans pi i, j eps realmin realmax inf Variabila creata automat in care se returneaza rezultatul unei expresii care nu a avut niciun nume 3.14159265... sqrt(-1) Variabila permanentea in care este memorata precizia relativa in virgula mobila 2.2204e-016 Cel mai mic numr in virgula mobila 2.2251e-308

Cel mai mare numr in virgula mobila 1.7977e+308 Infinit, rezultatul impartirii la 0 Operatori Operatorii pot si aritmetici,logici si relationali. Operatiile aritmetice raman valabile ptr nr. complexe si ptr vectori si matrici a caror elemente sunt nr. complexe. + .* ./ .\ .^ Adunare Scadere Inmultire Impartire la dreapta Impartire la stanga Putere Aceste functii pot fi aplicate unor scalari sau element cu element unor vectori sau matrici: ceil returneaza un nr. intreg rotunjit la cel mai apropiat numar intreg spre infinit: ceil (5.2)= 6 fix - returneaza un nr. intreg rotunjit la cel mai apropiat numar intreg spre 0: fix (-5.2)= -5 floor returneaza un nr. intreg rotunjit la cel mai apropiat numar intreg spre -infinit: floor (5.2)= 5 round returneaza un nr. intreg rotunjit la cel mai apropiat numar intreg: round(5.2)= 5 rem returneaza restul impartirii argumentelor: rem(-5,2) =-1 mod returneaza modulul restului impartirii argumentelor : mod(-

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 rationale rats(5.2)=26/5 sign returneaza semnul argumentului sign(-5.2)=-1 Functii de aproximare a numerelor Functii 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 numerelor complexe 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 partea reala si imaginara: complex(7,6)=7+6i isreal determina daca elementele matricilor sau vectorilor sunt numere reale: isreal([2 3])=1

Functii putere, radical, exponentiala, logaritm ^ ridicare la putere a numerelor sau a matricilor: 2^2=4 power ridicare la putere a numerelor sau a matricilor element 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)=9 Functii 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 decat n: primes(7)= 2 3 5 7

isprime- determina daca elementele unui vector sau matrice sunt numere prime: isprime([4 5 7])= 0 1 1 nchoosek- calculeaza combinari de n luate cate k: nchoosek(3,2)=3 perms- calculeaza toate permutarile posibile: perms([2,3])= 3 2 ; 23 Functii trigonometrice Aceste functii pot fi aplicate unor scalari sau elementelor unor vectori sau matrici. Unghiurile sunt considerate in radiani: sin, asin, sinh, asinh calculeaza sinusul, arcsinusul, sinusul hiperbolic, arcsinusul hiperbolic a argumentului cos, acos, cosh, acosh - calculeaza cosinusul, arcosinusul, cosinusul hiperbolic, arcosinusul hiperbolic a argumentului Tan, atan, tanh, atanh -calculeaza tangenta, arctangenta, tangenta hiperbolica, arctangenta hiperbolica a argumentului cot,acot,coth, acoth - calculeaza cotangenta, arcotangenta, cotangenta hiperbolica, arcotangenta hiperbolica a argumentului sec,asec,sech, asech- calculeaza secanta, arcsecanta, secanta hiperbolica, arcsecanta hiperbolica a argumentului csc,acsc, csch,acsh - calculeaza cosecanta, arcosecanta, cosecanta hiperbolica, arc0secanta hiperbolica a argumentului Utilizarea functiei help lookfor 'topic'- afiseaza in Command Window o lista si o scurta descriere pentru toate functiile a caror scurta descriere include cuvantul cheie specificat

help afiseaza M-file help in Command Window pentru functia specificata

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

Curs 2
sum of the A, which is eigenvalues of A:

MATLAB The Language of Technical Computing

matrici/vectori/scalari operatori relationali si logici instructiuni de control

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

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

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.

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

Exemple - Definirea matricilor


X =[] - matrice goala A=[11 22; 33 44 ] A= 11 22 33 44 Vector 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] sau A= [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).

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 cu B, 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 de coloane. Exemplu: A=[1 2; 3 4] B=[5 6; 7 8] C=[A,B] = [ 1 2 5 6 3 4 7 8]

Functii de generare a matricilor de baza


zeros(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 pe diagonala 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 chiar diagonala principala. rand(n,m) - Matrice (n x m) cu elemente aleatoare uniform distribuite.

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

Accesarea elementelor. Operatorul :

Operatorul : permite accesarea multipla a elementelor matricilor. v= A(:) - rearanjarea elementelor matricei A sub forma 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 ce indeplinesc conditia logica)

Accesarea elementelor
Daca se asigneaza o valoare unui element care ocupa o pozitie in afara dimensiunii maxime a matricei/vectorului, dimensiunea acestuia este marita automat pana la valoarea indicelui noului element, iar elementele 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]

Operatii matriceale
Desfasurate dupa regulile calculului matriceal: AdunareaA+ B Scaderea A B Inmultirea A* B
-1

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

Impartirea la stnga 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

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

Cateva functii Matlab pentru calcul matriceal


[n,m] = size(A) returneaza dimensiunea matricei A: nnr de linii si m- nr de coloane det(A) returneaza determinantul matricei patratice A rank(A) returneaza rangul matricei A inv(A) returneaza inversa matricei patratice inversibile A (inversa unei matrici se calculeaza si asa A^ (-1)) diag(A) returneaza diagonala principala a matricei A. conj(A) returneaza conjugata matricei complexe A

Cateva functii Matlab pentru calcul vectorial


norm(v,p) returneaza norma p a vectorului v norm(v)- returneaza norma euclidiana(p=2) a vectorului dot(v,w) returneaza produsul scalar al vectorilor de aceeasi lungime v si w. cross(v,w) returneaza produsulvectorial al vectorilor v si w, ( au cate 3 elemente) sum(v) returneaza suma elementelor vectorului v length(v) returneaza lungimea vectorului v, adica numarul de elemente

Functii Matlab opereaza pe vectori

Aceste functii opereaza pe vectori (linie sau coloana). Sunt aplicate pe o matrice (m x n) - matricea interpretata in maniera coloana x coloana - rezultatul fiind un vector linie max, min, sort, sum prod, median, mean, std, any,all Interpretare linie x linie se obtine folosind transpusa: exemplu: mean(A')'.

Operatori relationali si logici


Relationali <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 3 xor SAU EXCLUSIV

Operari logici

A 0 1 0 1

B 0 0 1 1

A&B 0 0 0 1

A|B 0 1 1 1

~A 1 0 1 0

XOR(A,B) 0 1 1 0

Operatori relationali si logici


Utilizati 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 este o matrice, compararea se face element cu element. b) O matrice cu un scalar. Rezultatul este o matrice, iar compararea se face prin compararea fiecarui element al matricii cu scalarul dat.

Instructiuni de control logic


Instructiune repetitive cu numar specificat de pasi: for Instructiune 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 functia apelanta sau catre tastatura: return Instructiune pentru inchiderea ciclurilor for, while si if: end

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

Instructiunea if cu clauza else


Este utilizata cand se doreste executia unui grup de instructiuni pe conditie adevarata si a altui grup de instructiuni pe conditie falsa : if expresie_logica grup1 de instruciuni; else grup2 de instructiuni; end Exemplu: >> interval =1.9; >> if interval<1 x=interval/10; else x=0.1; end >> x

Instructiunea if cu clauza elseif


Datorita unor conditii complexe, uneori este necesara imbricarea comenzilor if. Pentru aceste cazuri exista optiunea 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

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.9 case valoare1>>switch interval<1 secventa 1 de comenzicase 1 case valoare2x=interval/10; secventa 2 de comenzicase 0 .x=0.1; otherwiseend secventa n de comenzi>> x end

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 ca valoare acel scalar; - Expresia poate fi de forma: k=initial:pas:final;

Instructiunea for imbricata


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

Instructiunea while
Utilizata pentru repetarea unui set de instructiuni atat timp cat o conditie specificata este adevarata. while expresie grup de instructiuni end Exista 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

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

Instructiunea break
Iesirea fortata dintr-o bucla, inainte de terminarea ei, da controlul primei comenzi de dupa end-ul buclei Se recomanda a fi utilizata daca o conditie de eroare a fost detectata Se termina incetarea ciclurilor for sau while In cazul unor cicluri imbricate comanda iesirea din ciclul cel mai interior Exemplu: 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

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

Exemple
Scrieti functia pentru a calcula suma primilor N+1 termeni a unei serii geometrice. gsum= n=0 an = 1/1-a Cand N -> suma converge doar daca a<1 Generalizare: 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); end end

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' Code Vectorization Guide 2

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 special pentru cele cu multe bucle MATLAB poate rula functii scrise in C - fisierele care contin codul sursa - fisiere MEX The mexFunctions nu sunt construite cu scopul de a inlocui functiile Built-In din MATLAB.

MEX files interfata cu MATLAB


Legatura dintre functiile Built-In MATLAB si codul C se realizeaza prin 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; }

MEX files interfata cu MATLAB


Sunt 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 parametru este de fapt argumentul de iesire mxArray este structura MATLAB care 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 tablou tine toti pointerii catre tabloul datelor de intare mxArray (prhs[0] tine tabloul mxArray pentru x, prhs[1] tine tabloul mxArray pentru y, etc).)

Crearea datelor in MEX files


In MEX-Files structura MATLAB folosita pentru stocarea datelor este mxArray aceasta structura poate tine date de tip real, complex, matrici, siruri de caractere si alte stucturi de date MATLAB. In exemplul [z0, z1] = vasilica(x,y,z) presupunem ca x matrice 2D, y sir, z intreg Cum extragem si folosim datele ? Avem acces la parametrul de intrare x printr-un pointer tinut in tabloul prhs. In C, cand referim un tablou printr-un index, variabila este automat dereferentiata (ex: nu folosim *). Pentru claritate vom copia variabila x peste pointerul catre mxArray si o vom numi xData ( pasul acesta nu e nevoie sa-l faceti ca sa va mearga codul, il fac doar sa intelegeti mai usor)

Crearea datelor de tip matrice in MEX files


% inauntul functiei mexFunction % fac declaratii mxArray *xData; double *xValues; int i,j; int rowLen, colLen; double avg; xData = prhs[0]; % copiex pointerul de intare x, in xData xValues = mxGetPr(xData); % iau matricea x rowLen = mxGetN(xData); %intoarce un intreg,lungimea liniilor colLen = mxGetM(xData); %intoarce un intreg,lungimea coloanelor Functia 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.

Crearea datelor de tip matrice in MEX files


%inauntul functiei mexFunction %Printez variabila avg pentru fiecare coloana la consola MATLAB for(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); }

Crearea datelor de tip string in MEX files


Similar pentru a obtine un sir (strings), dar folosind alte functii: % inauntul functiei mexFunction mxArray * yData; % declaratii int yLength; char *TheString; yData = prhs[1]; % copiez pointerul de intrare y, in yData yLength = mxGetN(yData)+1; % fac variabila "TheString" sa pointeze la un string TheString = mxCalloc(yLength, sizeof(char)); % mxCalloc este similar cu malloc din C mxGetString(yData,TheString,yLength);

Crearea datelor de tip intreg in MEX files


Similar pentru a obtine un intreg, dar folosind alte functii: % inauntul functiei mexFunction mxArray *zData; %declaratii int Num; zData = prhs[2]; % copiez pointerul de intrare z in zData Num = (int)(mxGetScalar(zData)); % iau intregul printf("Intregul meu este: %d",Num); % il printez pe ecran

Exportul datelor in MATLAB


Pentru asignarea datelor/valorile de intoarcere in parametrii de iesire (left hand side) trebuie sa alocam memorie pentru structurile de date folosite. Exemplu cum sa intorc o matrice 2D : intrarea va fi x si va intoarce in z0, o copie a matricii cu fiecare element din x inmultit cu 2. %inauntrul functiei mexFunction mxArray * xData; % declaratii double *xValues, *outArray; int i,j; int rowLen, colLen; xData = prhs[0]; % copiez pointerul de intrare x xValues = mxGetPr(xData); % iau matricea rowLen = mxGetN(xData); colLen = mxGetM(xData);

Exportul datelor in MATLAB


% Aloc memorie si asignez pointerul de iesire plhs[0] = mxCreateDoubleMatrix(colLen, rowLen, mxREAL); %mxReal pentru ca acesta e tipul nostru de date %iau pointerul datelor in spatiul de memorie nou alocat outArray = mxGetPr(plhs[0]); % copiez matricea si multiplic cu 2 for(i=0;i<rowLen;i++) { for(j=0;j<colLen;j++) { outArray[(i*colLen)+j] = 2*xValues[(i*colLen)+j]; } }

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; % declaratii mxArray *arg[2]; % pun ceva in parametrii de intrare arg[0] = mxCreateDoubleMatrix(1, 20, mxREAL); arg[1] = mxCreateDoubleMatrix(1, 10, mxREAL); %Apelez functia mexCallMATLAB(1,&rezultat,2,arg,"conv"); Variabila rezultat pointeaza catre mxArray si puteti extrage datele

Compilarea MEX files


Compilarea fisierelor MEX similara cu compilarea cu gcc. De la command prompt MATLAB (directorul curent trebuie sa fie locatia fisierului sursa MEX) aplica comanda: >> mex vasilica.c MATLAB va va intreba sa alegeti un compilator si va produce functia [z0,z1] = vasilica(x,y,z) (numele fisierului identic cu numele functiei) Dupa compilare MATLAB produce fisierul binar MEX care poate fi apelat ca o functie built-in MATLAB. Pentru a apela aceasta functie, trebuie sa fiti in acelasi director cu binarul ! Fisierul binar are diferite extensii depinzand de sistemul de operare pe care rulati:( ex: Windows=.dll MacOSX=.mexmac Solaris=.mexsol Linux=.mexlx).

Alte functii utile


Lista completa a functiilor si exemple poate fi gasita MATLAB help Alte example gasiti si in directorul extern MATLAB (MATLAB/extern/examples/mx or mex). mxDuplicateArray mexErrMsgTxt mxMalloc mxRealloc mxCreateString mxDestroyArray mxFree mxGetCell mxGetData ..

Curs 3
MATLAB The Language of Technical Computing calcul simbolic polinoame sisteme de ecuatii liniare reprezentari grafice

Aproximari numerice
In 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 un vector cu 2 sau 4 valori indicand limitele pentru x si eventual y,iar specl este specificatorul de linie acelasi ca la comanda plot. fminbnd(numef,xmin,xmax)- determinarea valorii minime a unei functii pe un interval, unde [xmin,xmax] indica intervalul in care cautam 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 sunt limitele intre care se integreaza. Putem calcula integrale duble sau triple cu functiile dblquad(numef, ax,bx,ay,by) sau triplequad(numef,ax,bx,ay,by,az,bz).

Precizia solutiei
In Matlab, solutiile chiar date de formule exacte sunt intotdeauna aproximative si de aceea este bine ca inainte de a determina solutia 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 referitor la inversare. Precizia de calcul, in cel mai defavorabil caz: 2.2*10-15 cond(A) Pentru calcule cu numere foarte mari sau foarte mici folositi Symbolic Math Toolbox precizie vs. viteza de calcul

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 % mantisa D = 307 % exponentul (power of ten) ans = 6.273763732256170e+307 Symbolic Math Toolbox - functia vpa (S,D)

Tipuri de date in Matlab


Un tip de date defineste un set de valori si operatiile permise pe aceste 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 stocheaza reprezentarea unui simbol folosit pentru reprezentarea variabilelor, expresiilor si matricilor simbolice.

Calcul simbolic
Toolbox-ul Symbolic Math - lista completa a functiilor si comenzilor Matlab pentru calcul simbolic. Pe cale simbolica putem efectua operatiile de derivare, integrare, calcularea limitelor, simplificarea expresiilor algebrice si rezolvarea ecuatiilor. Rezolvarea unei probleme pe cale simbolica trebuie sa inceapa cu definirea obiectelor simbolice (simbolurilor), apoi se trece la implementarea propriu-zisa a solutionarii problemei. Definirea/crearea obiectelor simbolice se face cu comanda sym (un obiect) sau syms (mai multe obiecte). Pentru crearea expresiilor simbolice constante, trebuie folosita comanda sym. ( f = sym('5') e diferita de f = 5, care nu defineste f ca o expresie simbolica)

Calcul simbolic
Datele numerice duc la rezultate efective, iar datele simbolice dau un rezultat simbolic. Forma simbolica este un rezultat exact in timp ce forma numerica este un rezultat aproximativ (deoarece reprezentarea numerica are un 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 cu comanda double( ) Rezultatele simbolice nu se indenteaza!

Functii/comenzi pentru calcul simbolic


comanda s=sym(x,'optiune') creaza o variabila simbolica x ce se stocheaza in s, iar optiunea de reprezentare/afisare poate fi: d (numar decimal), f (numar real), r (numar rational), e-(numar in forma rationala plus diferenta intre expresia rationala teoretica si expresia actuala, reala (a calculatorului) in termeni exponentiali (the floatingpoint relative accuracy); real- specifica proprietatile matematice a variabilei simbolice create. comanda findsym(f) determina ce variabile simbolice sunt prezente in expresia f. subs(f,x,val) substituirea/inlocuirea simbolurilor x dintr-o expresie simbolica f , cu o valoare , val. collect(f,v) - ordonam in raport cu puterile lui v o expresie f. Daca variabila v lipseste se considera implicit x. >> syms x y >> collect((x+y)*(x^2+y^2+1)) ans = x^3+y*x^2+(y^2+1)*x+y*(y^2+1)

Functii/comenzi pentru calcul simbolic


expand(f) - scrierea expresiei f cu elementele ei constitutive. Aceasta functie calculeaza produse de polinoame, desface expresii trigonometrice, 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 si calculeaza numaratorul n1 si numitorul n2.Nu face si simplificarile! solve('eq1', 'eq2', 'eqn', 'var1', 'var2'...'varn')- pentru rezolvarea ecuatiilor si a sistemelor de ecuatii unde eqn sunt expresiile simbolice reprezentand ecuatiile, iar varn sunt variabilele simbolice ale necunoscutelor. Se presupune ca eq=0 (ducem toti termenii in stanga!)

Functii simbolice
Unele functii simbolice au primit acelasi nume ca cele pentru calcule 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 simbolice numeric 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 face descompunerea 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)

Functii simbolice
limit(numef) - calculeaza limita unei functii - numef este o expresie simbolica a unei functii de variabila x, sau numele 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 considerata implicit 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 se foloseste in calculul derivatelor partiale. >>diff(t*sin(t^2+1),'t') ans = sin(t^2+1)+2*t^2*cos(t^2+1) >>f (x, y) = x3 *sin y diff(diff(x^3*sin(y),2),'y') ans = 6*x*cos(y)

Functii simbolice
Functiile 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 pot fi 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.

Polinoame
Notatia utilizata la polinoame este una simbolica. Matlab utilizeaza in calcule un vector ce are ca elemente coeficientii 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 (cele de grad 4, 3 si 2). Numarul elementelor este cu 1 mai mare decat gradul polinomului (adica 6, 5 fiind gradul polinomului+1).

Manipularea polinoamelor
In Matlab, manipularea polinoamelor se face prin intermediul mai multor functii aplicate asupra vectorilor coeficientilor: w=conv(u,v) - inmultirea a doua polinoame, unde u si v sunt vectorii coeficientilor polinoamelor care se inmultesc, iar w este vectorul coeficientilor polinomului produs. [c,r]=deconv(p,q) - impartirea a doua polinoame,unde c este vectorul coeficientilor catului, iar r este vectorul coeficientilor restului. roots(p) -determinarea radacinilor unui polinom w=poly(v) -determinarea polinomului ale carui radacini sunt elementele unui vector v polyval(vcoef,x)-determinarea valorii polinomului reprezentat de vectorul coeficientilor vcoef, intr-un punct x. (atentie! x poate fi si un vector!) w=polyder(p) -derivata polinomului p , unde w sunt coeficientii rezultati.

Manipularea polinoamelor
Deseori avem nevoie sa determinam un polinom de un anumit grad care sa aproximeze un set de date experimentale. Una dintre metodele de aproximare este metoda celor mai mici patrate (the least squares method)- in care polinomul de gradul n trebuie generat: yn(x)= a0xn+a1xn-1+...an-1x+an astfel incat cei n+1 coeficienti aproximeaza cel mai bine datele masuratorilor experimentale. n=1- aproximare lineara, n=2aproximare patratica etc. In Matlab acesti coeficienti sunt calculati cu functia polyfit. Pentru evaluarea acestei aproximari putem folosi functia polyval.

Manipularea polinoamelor
w=polyfit(x,y,n)-determinarea unui polinom de un anumit grad care sa aproximeze un set de date experimentale in sensul metodei celor mai mici patrate, unde w este vectorul coeficientilor polinomului cautat, vectorii x si y sunt vectorii datelor experimentale, iar n este gradul polinomului cautat. Exemplu: daca x=0:pi/10:pi, iar y=sqrt(x) atunci polinomul de gradul 4 ce aproximeaz setul de date este dat de >> polyfit(x,y,4) ans = -0.2969 1.4531 -2.5609 2.3776 0.0183 Adica polinomul: 432-0.2969x +1.4531x - 2.5609x + 2.3776x + 0.0183

Manipularea polinoamelor
interp1(x,y,x0, metoda)-pentru aflarea valorilor prin interpolare polinomiala , unde x,y sunt vectorii datelor experimentale. X0 este punctul 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 interpolation Metodele spline si cubic necesita mai mult timp de calcul dar sunt mai 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

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.

Rezolvarea sistemelor compatibile determinate


Pot fi rezolvate prin doua metode numerice diferite: Metoda inversarii matriceale Metoda impartirii la stanga/dreapta Metoda 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) * b respectiv, Y = b * inv(A)

Rezolvarea sistemelor compatibile determinate


In Matlab, aceasta metoda nu necesita determinarea inversei matricei coeficienilor. S-a introdus operatorul \ care calculeaza solutia sistemelor de ecuatii liniare prin metoda eliminarii in versiunea Gauss. Metoda impartirii la stanga /dreapta X=A\b respectiv, Y=b/A Soluia cu operatorul / este mult mai rapida decat cu formula clasica a inversarii, acest fapt devenind observabil atunci cand matricile sunt de mari dimensiuni. Astfel pentru matrici de ordinul 1000 soluia / a fost de 400 ori mai rapida.

Rezolvarea sistemelor compatibile nedeterminate


In 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 matriceale Solutia 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)

Rezolvarea sistemelor compatibile nedeterminate

Metoda impartirii la stanga /dreapta X=A\b respectiv, Y=b/A In acest caz, aceasta metoda realizeaza cautarea acelei solutii a sistemului care minimizeaza (in sensul celor mai mici patrate) norma euclidiana a vectorului A*X-b si care are cel mult rang A componente nenule.

Rezolvarea sistemelor de ecuaii liniare folosind Symbolic Math Toolbox

Metodele de rezolvare precizate anterior sunt valabile si pentru rezolvarea pe cale simbolica: 1. metoda inversarii / metoda pseudo-inversarii; 2. metoda impartirii la stanga / dreapta. Rezolvarea pe cale simbolica necesita de obicei studiul sistemului si efectuarea solutionarii pe cazuri.

Reprezentari grafice in plan 2D

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

Reprezentari grafice in plan- 2D


O parte din functiile Matlab destinate reprezentarilor grafice 2D: plot(x,y, speclinie) - grafice in coordonate X-Y liniare; x si y sunt vectorii ce definesc punctele de reprezentat, iar speclinie este un sir de caractere intre ` ` reprezentand tipul liniei ce uneste punctele definite de x si y, markerul cu care se 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 coordonate X-Y semilogaritmice (in baza 10) polar(theta,rho,s) -grafice in coordonate polare

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), ^ (triunghi cu un varf in sus), v (triunghi cu un varf in jos), > (triunghi cu 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).

In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafete si corpuri 3-dimensionale. O parte din functiile Matlab destinate reprezentarilor grafice 3D: plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z sunt vectorii ce definesc punctele de reprezentat, iar speclinie este un sir de caractere intre ` ` reprezentand tipul liniei ce uneste punctele definite de x si y, markerul cu care se reprezinta punctele definite de x si y si culoarea liniei, toate in aceasta ordine. mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub forma unei retele (mesh) surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelor pline, cu iluminare contour(x,y,z) , contourf(x,y,z,v) reprezentarea grafica doar a liniilor de contur fill3 - reprezentarea grafica spatiala a poliedrelor cylinder (y,n), sphere(n), ellipsoid(xc,yc,zc,rx,ry,rz) reprezentarea grafica a unor corpuri tridimensionale

Reprezentari grafice in spatiu- 3D

Cateva Functii functii auxiliare ce pot controlareprezentari proprietatile modului de auxiliare pentru grafice reprezentare: title - inserarea unui titlu pentru reprezentarea grafica axes, axis - controlul aparitiei si stabilirea lungimii unitatilor de reprezentare pe axele sistemului de coordonate xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului de coordonate

Exemple text, gtext - plasarea unui text pe grafic la o anumita pozitie, sau selectata cu mouse-ul. MATLAB
hold- pastrarea graficului curent si al proprietatilor sale subplot - impartirea ferestrei de reprezentare grafica in mai multe regiuni grafice. grid - suprapunerea unei retele de linii pe grafic meshgrid -definirea sub forma de retea de puncte a domeniului de reprezentare 3D a suprafetelor. colormap - stabilirea sau returnarea matricei de culoare

Operatori logici - Ex1

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

Verificati, desenand graficul functiei y(x).

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

Operatori logici - Ex2

Desenati graficul functiei de semnal sinusoidal discontinuu utilizand indexarea logica: sin(t) x(t) = 0 sin(t)<= 0 sin(t) > 0 t=1, 2, ...10

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

Operatori logici - Ex3


Se 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 dect media elementelor lui x cu diferenta dintre valoarea lor si medie. >> p=x;p(x>mean(x))=p(x>mean(x))-mean(x)

Operatori logici - Ex4


Evit area operat iilor neconvenabile Avem 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.0000 Cum iesim din aceasta situatie? Utilizam n locul valorii 0 cea mai mica valoare relativa pozitiva pe care calculatorul o poate reprezenta: eps= 2-52 ~ 2.2204e-016 Comanda de nlocuire este: >> x=x+(x==0)*eps si vom putea calcula y=sin(x)./x

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

Reprezentari grafice
Sa se deseneze pe acelasi grafic functia y=cos(2ft), 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 linie x=1; %Initializam variabila x t=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 x hold on x=x+1; % incrementam x cu unu end xlabel('t'); ylabel('cos(2 pi f t)') legend('f=0.7','f=1','f=1.5','f=2');

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)

Laborator 1
Introducere MATLAB numere/variabile/functii uzuale

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

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.

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

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 care programul introduce automat rezultatul unei comenzi ce nu defineste o variabila proprie.

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

Calcule
Care dintre expresii e mai mare?

Calcule
Sa se calculeze:

Raspuns: a) 1.6180 b) 6.5919 c) 7.3696

Calcule
Sa se calculeze:

Raspuns: a) 0.3849 b) 2.4231 c) 0.5576

Calcule cu constante speciale


Sa se calculeze: realmax+2 = inf-inf = nan+2 = realmax-realmin = inf/inf = 0*inf =

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

Insemana ca ptr valori mici ale lui h, fractiile din limitele de mai sus aproximeaza derivata. Exercitiu: Luand f(x) =sin x sa se calculeze eroarea dintre valoarea exacta 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

Calcule
Erorile date de: e1=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4))/h) respectiv e2=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4-h))/h/2) a) h=0.000001e1=3.5344e-007 e2=5.2650e-011 b) h=0.00000001e1=3.0503e-009 e2=3.0503e-009 c) h=0.0000000001e1=9.2454e-007 e2 =3.6942e-007 d) h=0.000000000001 e1 =5.7368e-006 e2 =6.1248e-005 e) 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) au erori de aproximare. In plus aici avem o nedeterminare 0/0. Ptr masinile pe 32 biti folositi valori la jumatatea preciziei maxime 10-7, 10-8.

Managing .m file
Comanda: >> 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 sesiunea curenta in fisierul azi1. >> why ce face aceasta comanda?

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 executia programului: 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 functia input: >> iter= input('Introduceti nr de iteratii:')

Programe .m file: script


Programele sursa in Matlab numite .m- files se pot crea cu 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 va apela scriptul ce are numele sindoix : Selectati: File\New\M-file sau scieti comanda >> edit Introduceti : 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

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 un scalar,vector sau matrice) parantezele patrate pot lipsi. Parantezele rotunde de la lista-param-intrare pot lipsi doar daca nu exista nici un parametru de intrare. Variabilele folosite sunt locale, nu sunt disponibile in Workspace. ; de la sfarsitul fiecarei linii previne afisarea in Workspace a evaluarilor intermediare. Rularea fisierului functiei se face folosind sintaxa: [valori_returnate]=nume_functie(valori_param-intrare)

Programe .m file: functie


Exemplu: definirea unui functii cu numele cosdoix ce va calcula 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 a function.

Avantajele si Dezavantajele Scripturilor


Scriptul este o secventa de instructiuni si a aparut din necesitatea reutilizarii multiple a secventei respective. Avantaje: utile in cazul programelor mari cu secvente de comenzi care se repeta aleatoriu (nu sunt bucle pur si simplu) deci utile doar programatorilor avansati; Dezavantaje: creeaza si modifica variabile din zona de lucru fara nici un 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.

Avantajele si Dezavantajele Functiilor


Functia este tratata drept un subprogram, adica drept o unitate distincta de restul programului. Avantaje: functia comunica cu programul apelant prin cele doua liste: listaparam-iesire si lista-param-intrare. nu modifica datele din zona de lucru a programului apelant. permite organizarea structurala a programarii. Dezavantaje: folosirea in exces a functiilor poate duce la faramitarea excesiva a programului pierzandu-se din claritate.

Atasarea comentariilor
Comentariile 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 Matlab Dupa 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

Functii Anonime
Anonymous functions - functiile Matlab produse de la linia de comanda. Functie implicita, apelabila ca si o variabila in lista de argumente intrate intr-o functie numita function_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

Functii inline si comanda feval


Inline functions - functiile Matlab produse de la linia de comanda 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 altor functii specificate ca string. Evaluarea acestora se face cu: [param-de-iesire]=feval ('numefunctie', param-deintrare) orice functie data sub forma sir de caractere. [param-de-iesire]=builtin ('numefunctie', param-deintrare) numai functiile interne ale Matlab-ului.

Debugging fisierelor .m
Depanarea sau Debugging este procesul prin care sunt identificate si rezolvate erorile din cadrul codului Matlab. Erori de sintaxa: introducerea gresita a unui nume de functie sau omiterea unei paranteze. MATLAB afiseaza un mesaj de eroare in Command Window descriind eroarea si numarul liniei din fisierul m. Clicati pe portiunea subliniata a mesajului de eroare, sau pozitionati cursorul pe mesajul de eroare si apasati Ctrl+Enter. Fisierul m ce contine eroarea se deschide in Editor, 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 produce rezultate neasteptate.

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 workspaceul 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 programului la o anumita locatie (la o anumita linie de program) in interiorul fisierelor .m.

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 scrise Conversia datelor poate contine si caractere speciale neprintabile: \n produce o linie noua, \r rentoarcerea cursorului la cap de rand \t tab orizontal, \b backspace, \f forma libera

Conversia datelor
Conversia datelor incepe intotdeauna cu caracterul % si contine urmatoarele elemente optionale sau obligatorii: semne, optionale, care controleaza alinierea : caracterul -, care pozitioneaza datele la stanga si justificat, 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 cmpului in digiti, ex 6 (prin %6f); precizia, numarul de digiti aflati dupa punctual zecimal de exemplu 3 (prin %6.3f);

Conversia datelor
Conversia datelor incepe intotdeauna cu caracterul % si contine 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 mica sau 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

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 ecran fprintf('A unit circle has circumference %g.\n',2*pi) Creaza un fisier 'exp.txt' cu valorilor functiei exponentiale x = 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 3 m=sprintf('%s','hello') conduce la m=hello, adica m(3)=l

Exercitii functii
Scrieti functiile in fisier, anonymous si inline. Calculati valorile functiilor pentru x=0.5 si t =sqrt(2):

Exercitii

Raspuns:

Exercitii

1. Scrieti functia care calculeaza aria si perimetrul unui

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

2.Scrieti functia pentru a calcula suma primilor N+1 termeni a unei serii geometrice, N< gsum=
N n=0

an.

Exercitii: functii
Raspuns: Fisierul arieper.m function [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

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

Laborator 2
MATLAB matrici operatori logici si relationali instructiuni de control

Matrici- Exercitiul 1
Se da matricea M=1 2 24 -1 -2 05 3 6 -3 0 4 8 -4 7

Sa se extraga elementul de pe linia 1 si coloana 3-a Prima linie Coloana a 2-a Submatricea determinata de liniiele 1, 2 si 4 si de coloanele 2, 3 si 4

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=3 Extragerea primei linii: >> M(1,:) ans= 1 2 3 4 Extragerea coloanei a 2-a: >> M(:,2) ans= [2; 4;-2; 5] Extragerea submatricei determinat de liniile 1,2 i 4 i de 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

Generarea matricilor cu numere aleatoare


Utilizand: functia rand, pentru numere aleatoare, cu distributie uniforma in intervalul (0,1) sau functia randn, pentru numere aleatoare cu distributie normala (Gaussiana), de medie zero si varianta unu. Instructiunile pentru generarea matricelor cu numere aleatoare 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.

Matrici/vectori -Exercitiul 2
a) Creati matricea:
000500

000050

000005

b) 1) Creati 2, 4, 6,vectorii 8,...100v1,v2,v3 si v4 :


2) 50, 48, 46,...-50

M= 2 0 1 3 3 3 111333

3) 1, 1/2, 1/3,...1/100 4) 0, 1/2, 2/3, 3/4...99/100 5)Folosind end (ultimul index al unui vector/matrice) -1 2 2 3 3 3 ptr un anumit vector, afisati vectorul elementelor impare si vectorul elementelor in ordine inversa. Ptr matricea M de la a) inversati coloanele, apoi liniile.

Matrici/vectori - Rezolvare Exercitiu 2

a) >> M=[zeros(3) 5*eye(3); X 3*ones(3)] b) 1)>> v1= 2:2:100 2)>> v2=50:-2:-50 3)>> vt=1:100; v3=1./vt 4)>> vr=0:99; vp=1:100; v4=vr./vp 5)>> 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, :)

Matrici diagonale functia diag(v,k)

D=

-2

-2

-2

Matrici diagonale - Rezolvare diag(v,k)

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

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

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 B for 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

Rezolvare exercitiu 4
% afisarea matricei A A % afisarea matricei B disp('matricea B') disp(B) % calculul si afisarea sumei suma=A+B % calculul si afisarea produsului produs=A*B % calculul si afisarea cubului matricei A cub_A=A^3 % calculul si afisarea rezultatului impartirii la stanga disp('Rezultatul impartirii A\B este') Rez=A\B % rangul matricei B rang_B=rank(B)

Rezultat exercitiu 4
Rularea fiierului 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.1250 matricea B 1-1-2-3 31-1-2 451-1 5671 suma = 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

Rezultat exercitiu 4
produs = 3.5000 2.2833 2.7167 1.9167 2.2310 1.6405 1.8964 1.4310 cub_A = 0.3167 0.4500 0.4667 0.4512 -2.2167 -1.5333 -1.1738 -0.9512

0.4516 0.3263 0.2571 0.2127 0.3263 0.2358 0.1859 0.1538 0.2571 0.1859 0.1465 0.1213 0.2127 0.1538 0.1213 0.1004

Rezultatul impartirii A\B este Rez = 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.3160 rang_B = 4

Elemente de algebra vectoriala


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

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

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 mic determinat de sensurile pozitive ale celor doi vectori:

Exercitiu 5

Sa se scrie o functie Matlab care primeste ca argumente doi vectori de lungimi egale cu 3, v si w, si returneaz normele euclidiene ale vectorilor, produsul lor scalar, produsul lor vectorial si unghiul dintre cei doi vectori exprimat in radiani.

Rezolvare exercitiu 5
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; end n_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)

Operatori logici/indexare logica - Exercitiul 6


Creati matricile: 10 -2

10 0

2 1

-4

20 0

A= 2

B=

-10 60 -20 0

-1

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

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

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;

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))=7 c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))

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 corespunztor al lui x este finit sau nu. NaN este considerat nefinit.

Functii relationale si logice- Exercitiu 8

Inaltimea si viteza unui proiectil lansat cu viteza initiala v0 si cu un unghi sunt date de:

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

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 dect 16 m/s : >> u=find(h>6&v<16)

Functii relationale si logice- Rezolvare exercitiu 8


In vectorul u se afla indicii elementelor din v si h ce verifica aceasta conditie. Evident, indicii corespunzatori din t ne dau timpii in care conditiile sunt indeplinite. Acesti timpi apartin unui interval dat de primul si ultimul 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]

Laborator 3
MATLAB functii/polinoame calcul simbolic

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

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 =0 c)>> quad(inline('x.*sin(x)'),-1,1) ans=0.6023 d)>>dblquad(inline('x.^2./(y.^2+1)'),0,1,0,1) ans= 0.2618

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] si T[x]:Q[x] c) Sa se determine radacinile polinoamelor P[x], Q[x] si T[x].

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

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

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)=144 B) 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<10 c) >>interp1(x,y,pi/2,'nearest'); 1 >> interp1(x,y,pi/2,'linear'); 1

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 - x si apoi sa se determine toate radacinile pe intervalul [-2, 2].

Polinoame -Rezolvare exercitiul 4


a) >> fzero(inline('x.^2.*sqrt(x.^2+3)+x.*log(x.^2+1)-2log(2)'),0.5); ans=1 b)>> 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

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:

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)

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
3 4) Sa se rezolve ecuatia: x + 2ax - a x2 - 2a2 = 0 3

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)

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 1

Sa se rezolve urmatorul sistem folosind metoda inversarii matriceale: 5x1+4x2+x3=0 6x1+3x2+2x3=5 x1+x2+x3=-7

Sisteme de ecuatii liniare -Rezolvare exercitiul 1


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

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 2

Sa se rezolve urmatorul sistem folosind metoda impartirii la stanga: 2x1-3x2=7 -6x1+8x2-x3=-5 3x2+4x3=1

Sisteme de ecuatii liniare -Rezolvare exercitiul 2


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

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 3

Pentru urmatorul sistem sa se determine solutiile particulare folosind metodele pseudo-inversarii si a impartirii la stanga: 3x-y+z-2t=6 -4x+4y+2z+t=0

Sisteme de ecuatii liniare -Rezolvare exercitiul 3


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

Sisteme de ecuatii liniare -Rezolvare exercitiul 3


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

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 vectorulcoloana 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 pe cale numerica - rezultate diferite, care corespund unor valori particulare ale solutiei.

Sisteme de ecuatii liniare -Rezolvare exercitiul 4


>> clc % clear command window Se creaza matricea coeficientilor si se determina rangul matricei sistemului A=[3 -1 1 -2; -4 4 2 1]; r=rank(A); % se obtine 2, prin urmare, 2 variabile sunt independente, si 2 variabile sunt dependente de primele Se cauta un minor de ordinul 2 nenul, pentru a stabili variabilele dependente rminor=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')

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 inversarii s=inv(Aredus)*bredus Rezolvarea sist. cu operatorul de impartire la stanga ss=Aredus\bredus disp(blanks(1)') %creeaza spatii intre irurile de caratere. pause % oprirea momentana a executiei disp('Solutia sistemului dat este:') x=s(1) y=s(2) disp('z,t numere reale oarecare')

Sisteme de ecuatii liniare -Rezolvare exercitiul 4


Se obtin rezultatele: r =2rminor =2 sistemul este compatibil nedeterminat s= 3-3/4*z+7/8*t 3-5/4*z+5/8*t ss = 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*t y= 3-5/4*z+5/8*t z,t numere reale oarecare

Rezolvarea sistemelor de ecuatii liniare -Exercitiul 5

Sa se comparare metodele studiate de rezolvare a sistemelor din punct de vedere al timpului de executie si al preciziei solutiei in cazul unui sistem patratic compatibil determinat de ecuatii liniare de dimensiuni mari.

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(Ay-b) n1 = 3.3005e-010 n2=norm(Az-b) n2 = 5.9342e-012 n1/n2 ans = 55.6182

Laborator 4
MATLAB reprezentari grafice

Reprezentari grafice in plan 2D

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

Reprezentari grafice in plan- 2D


O parte din functiile Matlab destinate reprezentarilor grafice 2D: plot(x,y, speclinie) - grafice in coordonate X-Y liniare; x si y sunt vectorii ce definesc punctele de reprezentat, iar speclinie este un sir de caractere intre ` ` reprezentand tipul liniei ce uneste punctele definite de x si y, markerul cu care se 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 coordonate X-Y semilogaritmice (in baza 10) polar(theta,rho,s) -grafice in coordonate polare

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), ^ (triunghi cu un varf in sus), v (triunghi cu un varf in jos), > (triunghi cu 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).

In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafete si corpuri 3-dimensionale. O parte din functiile Matlab destinate reprezentarilor grafice 3D: plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z sunt vectorii ce definesc punctele de reprezentat, iar speclinie este un sir de caractere intre ` ` reprezentand tipul liniei ce uneste punctele definite de x si y, markerul cu care se reprezinta punctele definite de x si y si culoarea liniei, toate in aceasta ordine. mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub forma unei retele (mesh) surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelor pline, cu iluminare contour(x,y,z) , contourf(x,y,z,v) reprezentarea grafica doar a liniilor de contur fill3 - reprezentarea grafica spatiala a poliedrelor cylinder (y,n), sphere(n), ellipsoid(xc,yc,zc,rx,ry,rz) reprezentarea grafica a unor corpuri tridimensionale

Reprezentari grafice in spatiu- 3D

Cateva Functii functii auxiliare ce pot controlareprezentari proprietatile modului de auxiliare pentru grafice reprezentare: title - inserarea unui titlu pentru reprezentarea grafica axes, axis - controlul aparitiei si stabilirea lungimii unitatilor de reprezentare pe axele sistemului de coordonate xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului de coordonate text, gtext - plasarea unui text pe grafic la o anumita pozitie, sau selectata cu mouse-ul. hold- pastrarea graficului curent si al proprietatilor sale subplot - impartirea ferestrei de reprezentare grafica in mai multe regiuni grafice. grid - suprapunerea unei retele de linii pe grafic meshgrid -definirea sub forma de retea de puncte a domeniului de reprezentare 3D a suprafetelor. colormap - stabilirea sau returnarea matricei de culoare

Reprezentari grafice 2D - Exercitiul 1

Sa se reprezinte grafic functiile y 1, y2:[-5,5]R definite prin relatiile: y1(x)=e-0.4x cos(8x) y2(x)= e
-0.4x

si

sin(8x)

Reprezentari grafice 2D Observatii


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

Reprezentari grafice 2D Rezolvare Exercitiul 1


1) 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 off 4) Setarea altor proprietati ale reprezentarii grafice (etichetele axelor, text pe grafic etc): >>title('Grafic 2D'); xlabel('x'); ylabel('y'); >>grid; gtext('Doua grafice')

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.

Reprezentari grafice 2D - Exercitiul 2

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

Reprezentari grafice 2D- Rezolvare Exercitiul 2


Editam 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 end subplot(2,1,1); semilogx(x, feval(f,x)) % coord semilog pe axa x subplot(2,1,2); semilogy(x, feval(f,x)) % coord semilog pe axa y

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 foloseste comanda subplot(n,m,k) unde n reprezinta numarul de linii de subferestre, m numarul de coloane de subferestre, iar k numarul ferestrei ce devine activa.

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.

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

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

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.

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.

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 (Gaussian): >> x=-4:0.4:4; y=randn(10000,1); hist(y,x).

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: >> n=0:30; f=sin(2*pi*n/10); stem(n,f)

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)

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

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.

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. Exemplu: >> x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e)

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]

Reprezentari grafice 3D Rezolvare Exercitiul 4


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

Reprezentari grafice 3D Exercitiul 5


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

Reprezentari grafice 3D Exercitiul 6


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

Reprezentari grafice 3D Exercitiul 7

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

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

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

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) utiliznd 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; ezmesh(...,'circ') ploteaza f pe un disc, centrat pe domeniul considerat.

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

Reprezentari grafice 3D functia ezsurf, ezsurfc


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