Documente Academic
Documente Profesional
Documente Cultură
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
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:
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, [ ].
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]
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.
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].
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 .'
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')'.
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
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 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 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
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
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)
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 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
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
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.
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.
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
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
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
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
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
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').
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:
Calcule
Sa se calculeze:
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:')
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:
Exemplu:>> f = @(x) ( x.^2 +exp(x) ) f - numele functiei, @ - function handle, x - parametrul de intrare x.^2 +exp(x) corpul functiei
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.
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
Exercitii functii
Scrieti functiile in fisier, anonymous si inline. Calculati valorile functiilor pentru x=0.5 si t =sqrt(2):
Exercitii
Raspuns:
Exercitii
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
Matricea M nefiind reatribuita in mod explicit, nu a fost afectata de niciuna din operatiile de mai sus: >>M
Matrici/vectori -Exercitiul 2
a) Creati matricea:
000500
000050
000005
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.
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, :)
D=
-2
-2
-2
>> 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
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)
10 0
2 1
-4
20 0
A= 2
B=
-10 60 -20 0
-1
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)
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;
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))
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.
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):
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].
>> [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 -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].
2) Sa se determine polinomul care are radacina tripla 2 si radacina dubla -1; 3) Sa se simplifice expresia:
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)
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
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)
Sa se rezolve urmatorul sistem folosind metoda inversarii matriceale: 5x1+4x2+x3=0 6x1+3x2+2x3=5 x1+x2+x3=-7
Sa se rezolve urmatorul sistem folosind metoda impartirii la stanga: 2x1-3x2=7 -6x1+8x2-x3=-5 3x2+4x3=1
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
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.
Laborator 4
MATLAB reprezentari grafice
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
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
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
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)
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.
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.
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'})
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]
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).
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.