+ All Categories
Home > Documents > Cursuri Matlab

Cursuri Matlab

Date post: 06-Aug-2015
Category:
Upload: nagy-christian
View: 171 times
Download: 2 times
Share this document with a friend
Description:
Matlab.
32
Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor 1 MEDIUL DE PROGRAMARE MATLAB Curs 2 1. PREZENTARE GENERALĂ MATLAB ® = Matrix laboratory este un limbaj de programare şi un sistem de dezvoltare a aplicaţiilor din diverse domenii Matlab este dezvoltat de The MathWorks, Inc., SUA Domenii de utilizare: Matematică, calcul numeric şi simbolic Dezvoltarea algoritmilor Modelare, simulare şi testarea prototipurilor Analiza şi vizualizarea datelor Grafica inginerească şi din ştiinţele aplicate Dezvoltarea de aplicaţii, inclusiv GUI MATLAB - s-a dezvoltata în: 1. mediul universitar -este pachetul standard pt. cursurile de inginerie, matematică şi ştiinţe aplicate 2. industrie - pentru cercetarea, dezvoltare şi producţie. S-a dezvoltat prin toolbox-uri - familii/colecţii de aplicaţii (funcţii .m) specializate: SimBiology - modelarea proceselor biologice, Aerospace Toolbox - extinde calculele tehnice în domeniul ingineriei aerospatiale, Bioinformatics Toolbox - mediu pentru analiza genomului, inginerie genetică, cercetări în giologie, Communications Toolbox, Control System toolbox - controlul sistemelor, Data Acquisition Toolbox – funcţii pentru achiziţii de date şi adaptori pentru interfaţare cu hardware specific (plăci de achiziţii ale diferitelor firme), Database toolbox – funcţii MATLAB pentru import şi export de date cu baze de date relaţionale Distributed Computing Toolbox coordonarea şi execuţia operaţiilor aplicaţiilor Matlab simultan într-un cluster de calculatoare crescând viteza de execuţie a aplicaţiilor mari, Financial toolbox - calcule financiare, Fuzzy logic toolbox – logica fuzzy, Generic algorithm - algoritmi genetici, Image acquisition toolbox - achiziţii de imagini, Image processing toolbox – procesarea imaginilor, Neural network toolbox – reţele neuronale, Optimization toolbox – optimizări de sisteme, Partial Differential Equation Toolbox – ecuaţii diferenţiale cu derivate parţiale, Robust Control Toolbox – funcţii pentru analiza şi proiectarea sistemelor de control multiinput-multioutput MIMO cu incertitudini, Signal Processing toolbox - procesarea semnalelor, Spline toolbox – curbe spline, Statistics toolbox – funcţii statistice, Symbolic Math - calcule simbolice, System identification toolbox – identificarea sistemelor, Virtual reality toolbox – realitate virtuală, Wavelet toolbox – funcţii pentru reconstrucţia semnalelor, etc. Sistemul MATLAB conţine: 1.Limbajul MATLAB, 2.Mediul de lucru MATLAB, 3.Handle Graphics ® , 4.Biblioteca de funcţii matematice, 5.Interfaţa de aplicaţii program a MATLAB-ului (API) 1.Limbajul MATLAB: - un limbaj de nivel înalt, tipul de bază este matricea, există instrucţiuni de control, funcţii, structuri de date, intrări/ieşiri şi cu proprietăţi de programare orientată pe obiecte. Facilităţile de programare sunt organizate pe 6 directoare:
Transcript
Page 1: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

1

MEDIUL DE PROGRAMARE MATLAB Curs 2

1. PREZENTARE GENERALĂ MATLAB® = Matrix laboratory este un limbaj de programare şi un sistem de dezvoltare a aplicaţiilor din

diverse domenii Matlab este dezvoltat de The MathWorks, Inc., SUA

Domenii de utilizare:

• Matematică, calcul numeric şi simbolic • Dezvoltarea algoritmilor • Modelare, simulare şi testarea prototipurilor • Analiza şi vizualizarea datelor • Grafica inginerească şi din ştiinţele aplicate • Dezvoltarea de aplicaţii, inclusiv GUI

MATLAB - s-a dezvoltata în: 1. mediul universitar -este pachetul standard pt. cursurile de inginerie, matematică şi ştiinţe aplicate 2. industrie - pentru cercetarea, dezvoltare şi producţie. S-a dezvoltat prin toolbox-uri - familii/colecţii de aplicaţii (funcţii .m) specializate: SimBiology - modelarea proceselor biologice, Aerospace Toolbox - extinde calculele tehnice în domeniul ingineriei aerospatiale, Bioinformatics Toolbox - mediu pentru analiza genomului, inginerie genetică, cercetări în giologie, Communications Toolbox, Control System toolbox - controlul sistemelor, Data Acquisition Toolbox – funcţii pentru achiziţii de date şi adaptori pentru interfaţare cu hardware specific (plăci de achiziţii ale diferitelor firme), Database toolbox – funcţii MATLAB pentru import şi export de date cu baze de date relaţionale Distributed Computing Toolbox coordonarea şi execuţia operaţiilor aplicaţiilor Matlab simultan într-un cluster de calculatoare crescând viteza de execuţie a aplicaţiilor mari, Financial toolbox - calcule financiare, Fuzzy logic toolbox – logica fuzzy, Generic algorithm - algoritmi genetici, Image acquisition toolbox - achiziţii de imagini, Image processing toolbox – procesarea imaginilor, Neural network toolbox – reţele neuronale, Optimization toolbox – optimizări de sisteme, Partial Differential Equation Toolbox – ecuaţii diferenţiale cu derivate parţiale, Robust Control Toolbox – funcţii pentru analiza şi proiectarea sistemelor de control multiinput-multioutput MIMO cu incertitudini, Signal Processing toolbox - procesarea semnalelor, Spline toolbox – curbe spline, Statistics toolbox – funcţii statistice, Symbolic Math - calcule simbolice, System identification toolbox – identificarea sistemelor, Virtual reality toolbox – realitate virtuală, Wavelet toolbox – funcţii pentru reconstrucţia semnalelor, etc.

Sistemul MATLAB conţine: 1.Limbajul MATLAB, 2.Mediul de lucru MATLAB, 3.Handle Graphics®, 4.Biblioteca de funcţii matematice, 5.Interfaţa de aplicaţii program a MATLAB-ului (API)

1.Limbajul MATLAB: - un limbaj de nivel înalt, tipul de bază este matricea, există instrucţiuni de control, funcţii, structuri de date, intrări/ieşiri şi cu proprietăţi de programare orientată pe obiecte. Facilităţile de programare sunt organizate pe 6 directoare:

Page 2: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

2

ops Operators and special characters. all(), any, xor, or, …

lang Programming language constructs. if, for, while

strfun Character strings. char, strcat

iofun File input/output. fscanf, fseek

timefun Time and dates. clock, date

datatypes Data types and structures. cell, class, int8, double, logical

2.Mediul de lucru MATLAB Set de facilităţi care permit manevrarea variabilelor în spaţiul

de lucru, importul/exportul de date, dezvoltarea, manipularea, editarea şi depanarea fişierelor MATLAB (.m) şi a aplicaţiilor MATLAB. Aceste facilităţi sunt organizate în directorul:

general General purpose commands. Exemple: beep, delete, dir, rmdir, dos, echo, exit, import, load, who, whos, ver, save, quit etc.

3.Handle Graphics® Reprezintă sistemul grafic al MATLAB-ului. Cuprinde comenzi de înalt nivel pentru vizualizarea datelor bi şi tri-dimensionale, procesarea imaginilor, animaţie, prezentări grafice. Permite de asemenea utilizarea unor comenzi de nivel scăzut pentru crearea unor interfeţe grafice GUI. Funcţiile grafice sunt organizate în 5 directoare:

graph2d Two-dimensional graphs.

graph3d Three-dimensional graphs.

Specgraph Specialized graphs. graphics Handle Graphics. uitools Graphical user interface tools.

4.Biblioteca de funcţii matematice a MATLAB-ului Reprezintă o colecţie complexă de algoritmi de calcul pornind de la funcţii elementare (sinus, cosinus etc.) până la funcţii sofisticate (inversarea de matrice, valori proprii, funcţii Bessel, FFT etc.). Funcţiile matematice sunt organizate în 8 directoare: elmat Elementary matrices and matrix manipulation. isempty(x),zeros(3)

elfun Elementary math functions. abs(),sin(),tan,sinh,exp, log, log2, log10, imag,real

specfun Specialized math functions. bessel,cross,dot,

matfun Matrix functions – numerical linear algebra. trace, lu, rank ...

datafun Data analysis and Fourier transforms. fft, ifft,mean

polyfun Interpolation and polynomials. Legendre, convhull

funfun Function functions and ODE solvers. ode45()

sparfun Sparse matrices. full(), sparse() …

5.Interfaţa de aplicaţii program a MATLAB-ului (API) este o bibliotecă care permite

scrierea de programe în C sau Fortran care interacţionează cu MATLAB-ul. Include facilităţi pentru apelarea rutinelor din MATLAB, apelarea MATLAB-ului ca maşină de calcul, scrierea şi citirea fişierelor de tip MAT .

Page 3: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

3

SIMULINK este un pachet software pentru modelarea, simularea şi analiza sistemelor dinamice. Pot fi modelate sisteme (mecanice, electrice) liniare, neliniare, continue, discrete, hibride.

SIMULINK are interfaţă grafică utilizator (GUI) pentru crearea modelelor sub forma unor diagrame construite din blocuri, pe baza unor tehnici de tip click-and-drag realizate cu mouse-ul. Astfel, trasarea diagramelor este simplă şi intuitivă, aproape la fel de simplă ca trasarea acestor diagrame direct pe hârtie. În plus, se evită formularea matematică laborioasă (sistemele dinamice sunt de regulă descrise de ecuaţii diferenţiale).

Real-time Workshop® este un program care permite generarea de cod C pentru schemele bloc create în SIMULINK şi astfel permite rularea de aplicaţii în timp real.

2. MEDIUL DE LUCRU MATLAB

Lansare sub Windows: “shortcut” la programul executabil

La pornire, MATLAB-ul execută automat fişierele: matlabrc.m rezervat pentru administratorul de sistem şi startup.m. (în directorul local) este destinat utilizatorilor; se pot defini setările implicite

pentru instrumentele Handle Graphics şi se pot predefini variabile în spaţiul de lucru.

Terminarea sesiunii de lucru: comanda >>quit la prompterul MATLAB sau exit din meniul File Fereastra de comandă (fereastra principală) unde Interpretorul MATLAB afişează un prompter (>>). De exemplu, pentru introducerea unei matrice 3 x 3 se poate tasta:

» A = [1 2 3; 4 5 6; 7 8 10] şi la apăsarea tastelor Enter sau Return, MATLAB-ul răspunde cu:

A = 1 2 3 4 5 6 7 8 10

Editarea liniilor de comandă în fereastra principală Arrow Key Control Key efect

sau: Ctrl-p previous line - comanda precedenta

sau: Ctrl-n next line – comanda urmatoare tastata

Ştergerea ferestrei de comandă: >> clc % nu şterge variabile curente din spaţiul de lucru.

Controlul afişării paginilor ecran în fereastra de comandă

Controlul afişării paginilor în fereastra de comandă: more off şi more on. Întreruperea unui program care rulează : Ctrl-c. Comanda format controlează formatul numeric (numărul de zecimale) al valorilor afişate pe

ecran (dar nu reprezentarea în memorie): din meniul File/ Preferences/Comand Window sau comanda: format short (4 zecimale – este implicit) sau format long (15 zecimale) etc..

Suprimarea afişării rezultatelor unei linii comandă - dacă încheiem linia de comandă cu punct şi virgulă “;” rezultatele nu sunt afişate la ecran. Exemplu: >> magic(3) ans = 8 1 6 3 5 7 4 9 2 A = magic(3);

Page 4: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

4

Linii de comandă lungi: întrerupere prin trei puncte urmate de Return sau Enter pentru a

indica faptul că expresia continuă pe linia următoare. Exemplu: s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12;

Fereastra de comandă permite rularea comenzilor MATLAB, lansarea unor instrumente cum ar fi Editor/Debugger şi permite startarea toolbox-urilor.

Spaţiul de lucru al MATLAB-ului (workspace) -conţine un set de variabile (vectori, matrice, structuri, cells etc) care pot fi manevrate din linia

de comandă. comenzile >>who şi whos (mai detaliat) listează variabilele curente din workspace. comanda >>clear % ştergerea variabilelor din workspace

>>clear v1 % şterge variabila v1 >>clear v* % şterge variabilele care încep cu caracterul v

Citirea sau scrierea unor fişiere .mat (fişiere de date Matlab) din programe externe în C sau

Fortran se poate face cu Interfaţa de Aplicaţii Program (API). Încărcarea şi salvarea din workspace Comenzile save şi load au rolul de a salva variabilele din spaţiul de lucru şi respectiv de a le

reîncărca într-o sesiune ulterioară. Aceste comenzi se pot folosi şi pentru a importa şi exporta date. Pe platformele Windows, operaţiile save, load sunt disponibile şi prin selectarea opţiunilor Save Workspace As, respectiv Load Workspace din meniul File.

Page 5: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

5

Formatul în care comanda save stochează datele poate fi controlat prin adăugarea unor flag-uri (opţiuni) în lista de nume de fişiere sau variabile:

-mat Utilizează formatul binar tip .MAT (implicit). -ascii Utilizează formatul ASCII pe 8 digiţi. -ascii -double Utilizează formatul ASCII pe 16 digiţi. -ascii -double –tabs Delimitează elementele tablourilor cu tab-uri. -append Adaugă datele într-un fişier .MAT existent. Exemple: save save f1_var [–mat]

Salvează toate variabilele în fişierul matlab.mat Salvează toate variabilele în fişierul fi_var.mat

Încărcarea unor fişiere cu date ASCII (format text) Comanda load importă fişiere de date ASCII. Exemplu: scriem fisierul date.dat conţinând 1 2 3 4 2 3 4 5

» load date.dat %incarca şi creaza variabila matrice [1 2 3 4; 2 3 4 5] creează o variabilă cu numele date în workspace.

Nume de fişiere ca şiruri de caractere Dacă numele fişierelor sau variabilelor cu care se lucrează sunt stocate în variabile de tip şir de

caractere, se poate folosi dualitatea comandă/funcţie pentru a apela load şi save ca funcţii. De exemplu

» save('myfile','VAR1','VAR2') » A = 'myfile'; » load(A)

au acelaşi efect cu: » save myfile VAR1 VAR2 » load myfile

Wildcards Comenzile load şi save permit specificarea unui caracter special de tip wildcard (*).

Exemplu: » save rundata x* %salvează toate variabilele din workspace care încep cu x în fişierul rundata.mat.

Browser-ul Workspace (varianta grafică a comenzii whos) permite vizualizarea conţinutului spaţiului de lucru curent.

Exemplu: vizualizarea datelor incărcate cu load

Directorul curent al MATLAB-ul pentru lucrul cu fişiere de tip .m şi .mat.

3. FUNDAMENTE DE PROGRAMARE ÎN MATLAB

Page 6: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

6

3.1. Cuvinte rezervate (Keywords) ale limbajului MATLAB: 'break' , 'case', ‘try’ ‘catch’ 'continue' 'else' 'elseif' 'end' 'for' 'function' ‘global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'. Pentru listarea lor se tastează funcţia: iskeyword 3.2. Expresii

MATLAB-ul lucrează cu expresii matematice ca şi celelalte limbaje de programare Instrucţiunile Matlab sunt adesea de forma: variabila=expresie sau numai: expresie Se evaluează valoarea expresiei din dreapta semnului = iar valoarea obţinută se atribuie

variabilei din stânga semnului =. Pentru forma simplificată (a doua) valoarea expresiei se atribuie unei variabile `ans` (answer)

create imediat de Matlab. >> 1/3 ans = 0.3333

Expresia = înşiruire de operanzi şi operatori; operanzii: nume de variabile, constante, nume (sau apel) de funcţii.

Matlab lucrează în mod linie având la bază un interpretor (şi nu compilator). Fiecare instrucţiune pe rând este trimisă interpretorului şi evaluată.

3.3. O variabilă MATLAB este un nume care se asignează (asociază) unei zone de memorie

unde sunt stocate valori. Prin nume citim/scriem valoarea din/în memorie, şi folosim valoarea în expresii. MATLAB dispune de trei tipuri de variabile: locale, globale şi persistente.

MATLAB-ul NU necesită declararea dimensiunii variabilelor, deoarece la întâlnirea unui nou nume de variabilă generează automat variabila respectivă şi alocă spaţiul necesar de memorie.

Numele unei variabile este o literă, urmată de un număr oricât de mare de litere, cifre sau simboluri. Din nume numai primele 31 de caractere sunt folosite pentru identificare.

MATLAB-ul este case sensitive - face distincţie între literele mici şi cele mari (în nume). Exemplu:

» a = 30 creează o matrice 1 x 1 cu numele a şi stochează (memorează) valoarea 30

Reprezentarea numerelor imaginare este realizată cu litera i sau j. Exemple: > sqrt(-7) ans = 0 + 2.6458i

>> abs(3+4j) ans = 5

>> i ans = 0 + 1.0000i

>> j ans = 0 + 1.0000i

Operatori elementari Operatori aritmetici în cadrul expresiilor: + adunare - scădere * multiplicare / împărţire \ împărţire la stânga ^ ridicare la putere ` transpusa unei matrice sau complex conjugata unui număr complex ( ) operatorul de specificare a ordinii de evaluare (cu prioritate maximă) 3.4.Funcţii MATLAB-ul furnizează un mare număr de funcţii matematice elementare standard (abs,

sqrt, exp, sin …).

Page 7: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

7

Există şi funcţii matematice avansate (funcţii Bessel, gama etc.), multe dintre acestea acceptând argumente complexe.

Pentru vizualizarea funcţiilor elementare se poate tasta: » help elfun Pentru a vedea lista funcţiilor avansate se poate tasta:

» help specfun sau » help elmat

♦ O parte din funcţii (cum ar fi sqrt, sin)sunt de tip built-in, fac parte din nucleul Matlab,

fiind compilate şi astfel oferă viteză de execuţie sporită (accesul la structura funcţiei nefiind permis).

♦ Unele funcţii sunt implementate ca fişiere MATLAB (M-files) şi pot fi modificate. ♦ Pentru a găsi calea spre codul sursă a unei funcţii MATLAB M-file folosim funcţia which: >> which exp …=> built-in (D:\MATLAB\toolbox\matlab\elfun\@double\exp) % double method >> which pascal …=> D:\MATLAB\toolbox\matlab\elmat\pascal.m Sunt două tipuri de fişiere M-files: script şi function (pot primi şi retura valori). ♦ Câteva funcţii furnizează valorile unor constante: pi 3.14159265

i şi j Imaginary unit, -1 (sqrt(-1) )

eps Precizia Floating-point 2-52 (2.2204e-016)

Realmin Cel mai mic număr real floating-point, 2-1022 (2.2251e-308)

Realmax Cel mai mare număr real floating-point, 21023 (1.7977e+308)

Inf Infinit

NaN Not a Number • Numele funcţiilor NU sunt rezervate şi deci este posibilă suprascrierea lor.

Exemplu: eps = 1.e-6 Funcţia originală este reconstituită prin comanda: » clear eps

3.5.Exemple de expresii Exemple de expresii şi rezultatele evaluării acestor expresii:

» rho = (1+sqrt(5))/2 rho = 1.6180

» a = abs(3+4i) a = 5

exp(pi/2*i) ans = 0.0000 + 1.0000i

» huge = exp(log(realmax)) huge = 1.7977e+308

» toobig = pi*huge toobig = Inf

3.6.Tipuri de date in Matlab Tipul fundamental de dată la baza produsului Matlab este matricea. Elementele matricei

sunt de acelaşi tip de dată: întreg sau real, logic, caracter, structură etc. Tipurile structură şi celule de tablouri stochează tipuri diferite de date în câmpurile lor.

Page 8: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

8

Pot fi de asemenea dezvoltate tipuri noi de date proprii utilizatorului folosind clase Matlab (user classes şi Java classes). Sunt 15 tipuri fundamentale de date (matrice sau tablou) variind de la minim 0 x 0 elemente la n dimensionale.

Cuvintele cheie asociate tipurilor fundamentale sunt scrise cu litere mici (Figura->).

Pot fi create matrice 2D de tip double şi logical fiecare putând fi în format FULL sau SPARSE (pentru matrice cu marea majoritate a elementelor nule pentru economie de memorie).

Tipul de dată Exemple Descriere Întreg: int8, uint8, int16,uint16, int32, uint32, int64, uint64

uint16(65000) conversie la uint16

Tablou de întregi signed (int) şi unsigned (uint) Pe 8, 16, 32 resp. 64 biţi.

Single single(3 * 10^38) Tablou de numere în simplă precizie. Dpdv al memoriei: mai puţină decât tipul double având mai mică precizie şi domeniu de valori mai îngust. Domeniul <0: -3.40282e+038 to -1.17549e-038 şi

>0: 1.17549e-038 to 3.40282e+038 Spaţierea:Eps(1)=4.7684e-007 aprox.

Double (tip implicit)

3 * 10^300 5 + 6i [1 2;3 4]

Tablou de numere în dublă precizie (este tipul implicit de dată). Tablourile 2D pot fi de tip sparse. Domeniul: -1.79769e+308 to -2.22507e-308 and

2.22507e-308 to 1.79769e+308 Spaţierea(eps): 2.2204e-016 aprox

Logical x = [true, true, false, true]; >> magic(2) > 2 ans = 0 1 1 0

Tablou de valori logice 1 (true) or 0 (false). Tablourile 2D pot fi sparse (rare). >> magic(2) => ans = 1 3 4 2

Char 'Dati val. pt. vector: ' mesaj='Hello' >> mesaj(2:4) ans = ell

Tablou de tip caracter (sau şir de caractere–string); fiecare caracter are 16 biţi lungime. Tablou de caractere. Şirurile sunt reprezentate ca vectori de caractere. Pentru tablouri ce conţin mai mult de un şir se preferă folosirea tipului cell arrays.

Structure str.numar = 124; str.color = 'alb'; str.matr = magic(3); str.logic=[true]; prin “.” se refera campul str(2).numar = -17;

Structura este un set de câmpuri; fiecare câmp are nume propriu (numar, color, matr) şi memorează orice tip de dată. Structura are nume ex:”str”; O structură singulară este un tablou 1 x 1 de structuri aşa cum un scalar numeric (ex:7) este o matrice 1 x 1; se pot forma tablouri de structuri.

Cell array a{1,1} = 12; a{1,2} = 'Red'; a{1,3} = magic(4);

Tablou de celule indexate. Fiecare celulă poate memora un tablou de orice tip sau mărime. Celulele tabloului se referă prin acolade, ex: a{1,1} = tablou 1x1

Page 9: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

9

b={5,’e’,[1 2;3 4]} de double, a{1,2}=tablou 1x3 caractere, a{1,3}=matrice 4x4 cell2={12, 'asdf', [1 2;3 4]; 1:3, 2,'aa'} (alt exemplu)

Function handle

x=@sin struct(2).a1=@sin cell2{4,1}=@cos

Pointer la o funcţie. Câmpul a1 al structurii struct memorează pointer la funcţie. >> cell2{4,1}(pi) >> >> struct(2).a1(pi/2) ans = > -1 ans= > 1

User class polynom([0 -2 -5]) Obiecte construite dintr-o clasă definită de utilizator Java class java.awt.Frame Obiecte construite dintr-o clasă Java (vezi clase Java) Valorile numerice sunt stocate intern, implicit în format virgulă mobilă double-precision. Pentru a stoca un întreg trebuie realizată conversie (vezi funcţii de conversie) de la tipul double la tipul întreg dorit. Ex.1. pentru a memora valoarea 325 într-o variabilă întreagă cu semn pe 16-bit:

x = int16(325); % x este un tablou 1 x 1 de întregi cu semn x1=int32(500.499) % se va memora 500 partea fractionara este neglijata x1=int32(500.501) % se va memora 501 rotunjire la intregul mai mare

ex.2.Tablou de valori logice >> val_log=true $ este un tablou 1x1 de valori logice

>> a = [true, true, false, true, false] $ a este tablou 1 x 5 de val. logice a = 1 1 0 1 0 b = [2.5 6.7 9.2 inf 4.8]; isfinite(b) ans = 1 1 1 0 1

d=magic(3) 8 1 6 3 5 7 4 9 2

>> d>=5 ans = 1 0 1 0 1 1 0 1 0

Ex.3.Tablou 1D, şir de caractere, 1 x 14 numit: pr_nu

pr_nu =’Marius Giurgiu’ - în workspace apare: Name Size Bytes Class pr_nu 1x14 28 char

Tablou 2D de caractere <2 x 15 char> sau tablou de şiruri de caractere de lungimi egale: >> nume = ['Marius Giurgiu ' ; 'Mircea Bolboaca'] % s-a adăugat un blank după Giurgiu nume = Marius Giurgiu Mircea Bolboaca

>> nume(2, 7:15) % linia 2 coloanele 7:15 ans = Bolboaca Este incomod de a lucra cu şiruri de lungimi egale în tablouri de caractere. Se poate trece la tipul cell array care permite şiruri de lungimi oarecare. Conversia se face cu funcţia cellstr: >> cell_array1=cellstr(nume) cell_array1 = { … ‘Marius Giurgiu' … 'Mircea Bolboaca' } >> cell_array1{1} ans = Marius Giurgiu

>> cell_array1{2} ans = Mircea Bolboaca >> x{2}(1) ans = M

Page 10: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

10

Ex.4. Structuri (tablou de câmpuri cu nume)

Construirea unui tablou de structuri 1x1 (structură singulară) prin asignare de date fiecărui câmp în parte:

student.nume = 'Giurgiu'; student.prenume = ‘Marius’; student.note = [9 7 10; 8 9 10; 9 8 4]; In continuare se poate adăuga a doua structură => tablou de structuri: student(2).nume='Botean' student(2).prenume='Tudor' student(2).note=[3 3;9 9;10 9] Accesarea datelor în structură: Pentru afişare în fereastra de comenzi tastăm: >>student(1) % sau student(2) ans = nume: 'Giurgiu' prenume: 'Mircea' note: [3x2 double] >> student(1).note ans = 5 6 4 9 8 10 >> student(2).note(3,1) ans = 10

CURS 3

Ex.5. Cell arrays Tabloul(matricea) de celule este folosit la stocarea indexată a datelor de tipuri diferite. În

celulele tabloului pot fi stocate date de tipuri şi mărimi diverse. Putem spune că celulele sunt câmpuri fără nume (dar indexate pentru a putea fi referite).

Următoarea instrucţiune creează un tablou A de 2 x 2 celule: A = {[1 4 3; 0 5 8; 7 2 9], 'Marius Giurgiu' ; 3+7i, -pi : pi/4 : pi};

Se poate iniţializa individual fiecare celulă: A(1,1) = {[1 4 3; 0 5 8; 7 2 9]}; %sau A{1,1} = [1 4 3; 0 5 8; 7 2 9]; % Obs: paranteze rotunde ( ) şi acolade {} NU: A3{1,1} = {[1 4 3; 0 5 8; 7 2 9]} A(1,2) = {'Marius Giurgiu'}; %sau A{1,2} = 'Marius Giurgiu'; A(2,1) = {3+7i}; % A{2,1} = 3+7i; A(2,2) = {-pi:pi/4:pi}; % A{2,2} = [-pi:pi/4:pi]; Dacă introducem A(3,3) = {5}; se va

extinde tabloul de celule cu 4 celule vide. Dacă s-ar iniţializa: >>A{1,1} = {[1 4 3; 0 5 8;

7 2 9]} s-ar obţine un cell array pentru A{1,1} În figura alăturată observăm un tablou (de

celule) cu următoarele celule:

Page 11: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

11

aa{1,1} conţine tablou de întregi fără semn, aa{1,2} conţine tablou de şiruri de caractere (şirurile sunt de lungimi egale), aa{1,3} conţine tablou de numere complexe aa{2,1} conţine şir (1D) de numere în virgulă mobilă aa{2,2} conţine tablou 2D de întregi cu semn aa{2,3} tablou de celule de tipuri variate

Observaţi urmatoarele exemple: aa{1,1}={1 2 3;2 3 4;3 4 5} aa{1,2}={'11'; 'qwe';'wd45'} aa{1,3}={'11' 'qwe' 'wd45'}

aa{1,4}={'11', 'qwe', 'wd45'} aa{2,3}={'text', [4 2;1 5]; [1.2 2.3;1.22 1.3], .2+5i} Exemplu - referire elemente:

aa{2,3}{1,1}(2)='a' % s-a schimbat ‘e’ cu ‘a’ WIREFRAME. Stack{1,1}(1,1)

Structura WIREFRAME cu câmpul Stack de tip cell array; se referă celula {1,1} care este un şir de caractere => este referit primul caracter din şir.

2.Operatori Operatorii MATLAB pot fi clasificaţi în trei categorii: • Operatori aritmetici • Operatori relaţionali (compară operanzii cantitativ) • Operatori logici

*Operatori aritmetici + Adunare .^ Fiecare element din matrice la putere

[2 3 4] .^ 2 => [4 9 16]

- Scădere ' Transpusa unei matrice reale .* Înmulţire element cu elem.

[2 3] .* [10 20] -> [20 60] ' Transpusa + conjugata complexă a numerelor

complexe din matrice dacă există ./ Împărţire la dreapta: 1./[1 2 3]

1.0000 0.5000 0.3333 .' Transpusa fără conjugata complexă a

numerelor complexe .\ Împărţire la stânga: 2.\ [1 2 3]

0.5000 1.0000 1.5000 * Înmulţire matriceală

Amxn * Bnxp => Cmxp + Plus unar / Împărţire matriceală la dreapta A*B^-1 - Minus unar \ Împărţire matriceală la stânga A^-1 *B : Operatorul două puncte ^ Matrice pătratică la o putere

Operatorii aritmetici pe element lucrează cu elementele corespondente ale unor tablouri de dimensiuni

egale. Unii operatori binari lucrează cu un operand matrice şi celălalt scalar. În acest caz MATLAB-ul aplică scalarul fiecărui element al matricei.

*Operatori relaţionali

< Mai mic >= Mai mare sau egal <= Mai mic sau egal == Egal cu > Mai mare ~= Diferit de

Operatorii relaţionali compară elementele corespondente ale unor tablouri de dimensiune egală. Operatorii relaţionali lucrează totdeauna element cu element. Exemplu:

» A = [2 7 6; 9 0 5; 3 0.5 6]; » B = [8 7 0; 3 2 5; 4 -1 7]; » A == B

Page 12: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

12

ans = 0 1 0 0 0 1 0 0 0

*Operatori logici & AND (ŞI) | OR (SAU) ~ NOT (Negatie)

1 & 1 = 1 0 & 1 = 0 1 & 0 = 0 0 & 0 = 0

1 I 1 = 1 0 I 1 = 1 1 I 0 = 1 0 I 0 = 0

XOR(0, 0) = 0 XOR(0, 1) = 1 XOR(1, 0)= 1 XOR(1, 1)= 0

• O expresie care utilizează operatorul & (ŞI) este adevărată dacă ambii operanzi sunt

adevăraţi. În termeni numerici, expresia este adevărată dacă ambii operanzi sunt nenuli. Exemplu:

» u = [1 0 2 3 0 5]; » v = [5 6 1 0 0 7]; » u & v ans = 1 0 1 0 0 1

• O expresie care utilizează operatorul | (SAU) este adevărată dacă cel puţin unul dintre

operanzi este logic adevărat. Pentru operanzi numerici, expresia este falsă dacă ambii operanzi sunt nuli. Exemplu:

» u | v ans = 1 1 1 1 0 1

• O expresie care utilizează operatorul ~ (NOT)neagă logic operandul. În termeni numerici, orice operand nenul devine nul şi orice operand nul devine unu. Exemplu:

» ~u ans = 0 1 0 0 1 0

Operatorii logici se aplică elementelor’ corespondente ale unor tablouri de dimensiuni egale.

Pentru vectori şi tablouri dreptunghiulare ambii operanzi trebuie să aibă aceeaşi dimensiune, cu excepţia situaţiei în care unul dintre ei este scalar. În acest caz, ca şi la operatorii aritmetici, MATLAB-ul aplică scalarul fiecărui element al celuilalt operand.

Funcţii logice În plus faţă de operatorii logici MATLAB-ul furnizează şi funcţii logice:

Funcţie Descriere Exemple xor Realizează sau exclusiv. Returnează logic adevărat dacă

unul din operanzi este adevărat şi celălalt fals. În termeni numerici, returnează 1 dacă un operand este nenul şi celălalt este zero.

» a = 1; » b = 1; » xor(a,b) ans = 0

all Returnează 1 dacă toate elementele unui vector sunt adevărate sau nenule. Operează şi cu matrice (pe coloane).

» u = [0 1 2 0]; » all(u) ans = 0

» A = [0 1 2; 3 5 0]; » all(A) ans =

Page 13: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

13

0 1 0 any Returnează 1 dacă cel puţin unul dintre elementele

argumentului este adevărat sau nenule; în caz contrar returnează 0.

» v = [5 0 8]; » any(v) ans = 1

Alte funcţii: isnan, isinf, find (a se folosi help pentru detalii).

3.Prioritatea operatorilor Se pot scrie expresii care folosesc orice combinaţie de operatori aritmetici, relaţionali şi logici.

Ordinea de evaluare a expresiei este dată de nivelele de precedenţa/prioritate. In cadrul fiecărui nivel de precedenţă operatorii au aceeaşi prioritate şi se evaluează de la stânga la dreapta. Prioritatea maximă o au parantezele:

1. Paranteze () 2. Transpusa (.'), putere (.^), complex conjugate transpose ('), matrice la putere (^) 3. plus unar (+), minus unar (-), negare logică (~) 4. înmulţire (.*), împărţire la dreapta (./), la stânga (.\), înmulţire de matrice (*), Împărţire matrice dreapta (/),Împărţire matrice stânga (\) 5. adunare (+), scădere (-) 6. operatorul două punce (:) 7. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal (>=), test egalitate (==), test diferit (~=) 8. AND (&) 9. OR (|) Exemplu: observaţi scrierea compactă şi puterea operatorilor în Matlab: Să se evalueze (fără ciclări) expresia A(r,ζ) pentru: r=0:0.01:2.5 şi ζ=[0.03, 0.05,0.1,0.2,0.5]

r=0:0.005:2.5; ze=[0.03 0.05 0.1 0.20 0.50]'; X=sqrt( ((2*ze*r).^2+1) ./ ( (ones(size(ze))*(1-r.*r).^2) + (2*ze*r).^2) ); plot(r,X)

La numărător: prin ze*r se înmulţeşte o matrice coloană ze (‘ transpune) cu o matrice linie r; apoi se ridică la pătrat fiecare element din matrice.

La numitor: primul termen 22 )1( r− rezultă vector iar al doilea 224 rς matrice => avem nevoie de matrice şi în primul termen.

size(ze) returnează perechea de valori (5,1); acesta este argument pentru funcţia ones() care crează matricea cu 5 linii şi o coloană de valori unitare. >> ones(size(ze))

ans = 1 1 1 1 1

ones(size(ze))*(1-r.*r).^2 Sunt generate 5 linii identice care vor fi adunate cu matricea (2*ze*r).^2 (în care fiecare linie (r) se înmulţeşte cu un alt zeta) ze*r => matrice 5x501 X => matrice 5x501 plot(r,X) => 5 grafice, pentru abscisa (vectorul) r se trasează fiecare linie din matricea X.

2222

22

4)1(41),(

rrrrAς

ςς+−

+=

Page 14: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

14

4. Instrucţiuni pentru controlul derulării unui program 4.1 . if, if – else, if - elseif - else - execută un grup de instrucţiuni pe baza unei condiţii logice. - după elseif poate să nu mai existe un else

if expresie_logica grup de instructiuni end ... i=2 j=input(' j= '); if i+j>0 fprintf('i+j=%10.3f\n',i+j); end

if expresie_logica grup1 de instructiuni else grup2 de instructiuni end - - - - - - - - - if x>0 fprintf('x este numar pozitiv\n') else fprintf('x negativ sau zero\n') end if a>b disp('a>b') elseif a<b disp('a<b') else %a==b disp('egalitate') end

a=input('a= ');b=input('b= '); if a>b 'a>b' else 'a mai mic sau egal cu b' end

n=input('n= '); if n < 0 %Daca n este negativ afisaza un mesaj de eroare. disp('valoarea furnizata trebuie sa fie pozitiva'); elseif rem(n,2)==0 %Daca n este pozitiv si par, imparte n la 2. A = n/2; disp('n par'); else %Daca n este pozitiv si impar incrementeaza si imparte la 2 A = (n+1)/2; disp('n impar'); end

Page 15: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

15

4. 2.switch, case … otherwise switch expresie %scalar sau sir de caractere/string case valoare1 grup 1 instructiuni % se execută pentru expresie de valoare 1 case valoare2 grup 2 instructiuni % se execută pentru expresie de valoare 2 case valoare n grup n instructiuni otherwise grup n+1 instructiuni % se execută dacă expresie nu egalează nici un caz end

%switch poate rezolva mai multe condiţii într-un %singur caz prin folosirea acoladelor (cell array). var=input('var= ') switch var case 1 disp('1') case {2,3,4} disp('2 sau 3 sau 4') case 5 disp('5') otherwise disp('altă valoare') end

exemplul 2 switch var1 case -1 disp('minus unu'); case 0 disp('zero'); case 1 disp('unu pozitiv'); otherwise disp('alta valoare'); end …

culoare = input('Tastati o culoare: ','s'); switch culoare % valoarea citita este sir de caractere case 'rosu' disp('culoarea este rosiu'); case 'galben' fprintf('ati tastat %s\n', culoare); case {'albastru','violet'} disp('culoarea este albastru sau violet'); otherwise disp('ati tastat altceva decat rosu, galben, albastru, violet'); end Spre deosebire de limbajul C, daca un caz este adevărat şi acesta se execută, se sare după end fără a folosi instrucţiune Break. In C se execută implicit şi cazurile următoare (daca nu există instr. break). 4.3. Instrucţiunea de ciclare for

- Execută o instrucţiune sau un grup de instrucţiuni de un număr cunoscut dinainte de ori:

Page 16: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

16

∑ −===

n

inx iXVAR1

212 )][( µσ

for index = start:increment:end grup de instructiuni end

x=1:6; %sau x=[1 2 3 4 5 6]; suma=0; %initializam variabila suma for i=1:length(x) suma=suma + x(i) end

suma

x(1)=1; for n = 2 : 6 x(n) = 2 * x(n - 1); end % rezulta: 1 2 4 8 16 32

for k=1:2:n . . . end

for k=n:-1:1 . . . end

for x=0: pi/30 : 2*pi fprintf(‘x= %10.2f sin= %10.2f\n’ , x, sin(x) ); end

Se pot scrie instrucţiuni for în corpul unei alte instrucţiuni for (for imbricat): m=5; n=12

for i = 1:m %se repeta de m ori for j = 1:n %repeta de m x n ori B(i,j) = 1/(i + j - 1); end end plot(1:m,B) %sau plot(B) plot(1:n,B) x=1:10; %Cod scalar: for k=1:length(x) y(k)=sin(x(k)); end x=-5:0.1:25; %Cod scalar: for k=1:length(x) y(k)=x(k)+sin(x(k)); end plot(x,y)

Cod echivalent prin vectorizare: x=1:10; y=sin(x); ----------- x=-5:0.1:25; y=x+sin(x); plot(x,y)

x=[1 2 3 4] mu = sum(x)/length(x); %scalar suma=0; for i=1:length(x) suma=suma +(x(i)-mu)^2 end variance1=suma/length(x); % variance1 -> 1.25

mu = sum(x)/length(x); %vectorizare variance2=sum(( x-mu).^2)/length(x); sau …(x-mu).*(x-mu)…

CURS 4 %Numărare elemente ai pozitive din vector a=input(`Tastati sir numeric= `); %exemplu [1 -2 3 -9 4 1] contor=0; for i=1:length(a) if a(i)>0 contor=contor+1 end end contor

Suma elementelor aij de pe DP (i = j) folosind un ciclu for a=[1 -2 3 ;-9 4 1; 2 2 2] sum=0; nl= length(a(:,1)) %numar linii sau coloane for i=1:nl sum=sum+a(i,i); fprintf('i=%d j=%d a=%.3f\n',i,i,a(i,i)); end sum

Se citeşte matricea pătratică a=[1 2 3 4; 2 3 4 5; 3 4 5 6;4 5 6 7]. Se parcurg elementele matricei unu

Page 17: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

17

câte unu şi se calculează suma elementelor pozitive situate deasupra DP şi deasupra DS. Fiecare element însumat va îndeplini simultan trei condiţii: Condiţii de poziţie în matrice: 1) i<j selectează elementele aij situate deasupra DP 2) i+j<n+1 selectează elem. deasupra DS Condiţia de valoare este: 3) a(i, j)>0

a=input(`Intr. Matrice patratica=`) % tastati: [1 8 3 ;-9 4 1; 2 2 2] n=length(a(:,1)); % (toate liniile, coloana 1) sum=0; for i=1:n %ciclu exter. ciclarea liniilor for j=1:n %ciclu interior: ciclarea coloanelor if i<j & i+j<n+1 & a(i,j)>0 %expresie logica sum=sum+a(i,j); fprintf('i=%d j=%d a=%.3f\n',i ,j , a(i,j)); end end end sum

4.4. Instrucţiunea de ciclare while cu condiţionare anterioară

-execută un grup de instrucţiuni de un număr nedefinit de ori, sub controlul unei condiţii logice. while expresie logica bloc de instructiuni end (1) Se evaluează expresie logica (EL). (2) Daca EL este True se executa bloc de instructiuni si se trece iar la (1) (3)Dacă EL este False se trece direct dupa end

i=-2; while i<7 i=i+1; end i

%suma elementelor x(2)… x(5)din sirul x x=1:10; suma=0; i=2; while i<=5 suma=suma+x(i); i=i+1; end suma

x=1:6; %sau x=[1 2 3 4 5 6]; suma=0; %initializam variabila suma i=1; %initializam „indicele” i n_e= length(x) while i <= n_e suma=suma + x(i); i=i+1; %indicele incrementeaza end suma

%instructiune while in corpul while m=input('linii m= '); n=input('coloane n= ') i=1; while i<=m %se repeta de m ori j=1 while j<=n %se repeta de m x n ori A(i,j) = 1/(i + j - 1); j=j+1; end i=i+1; end i j plot(A); % este mai dificila gestionarea indicilor%decât în cazul folosirii ciclului for

4.5. Instrucţiunea break provoacă întreruperea ciclării for sau while şi salt la prima instrucţiune după instrucţiunea end a ciclării.

Page 18: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

18

4.6. Instrucţiunea continue trece controlul sau realizează salt la prima instrucţiune din următoarea iteraţie în cadrul ciclărilor for sau while.

4.7. Instrucţiunea return provoacă ieşirea forţată din funcţie (funcţia apelată fA) şi întoarcerea la funcţia apelantă fAn (care a apelat procedura).

function out=fun_demo1(in) i=1; while i < in x(i)=rand(1); if x(i)>0.95 'break' break; %salt la iteratia urmat. end i=i+1; end out=x; i display('exemplu cu break') end %incheiere functie cu end optional

function out=fun_demo2(in) i=1; while i < in x(i)=rand(1); if x(i)>0.95 out=x; %salvam x in out i 'return' return;%iesire din functie end i=i+1; end out=x; display('exemplu cu return') i

Apel: a=fun_demo1(1.e2); Apel: b=fun_demo2(1.e2); 5. Scheme logice asociate instrucţiunilor de decizie şi de ciclare

Schemele logice conţin: blocul de start, B.de stop, B intrare date, B. ieşire date (paralelograme), B. de decizii logice (romb), bloc de atribuiri şi calcul (dreptunghi) (interconectare prin săgeţi orientate).

if expresie_logica grup de instructiuni end

if expresie_logica grup1 de instructiuni else grup2 de instructiuni end

Page 19: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

19

for index = start:increment:end grup de instructiuni

end

while expresie logica bloc de instructiuni end switch expresie % scalar sau sir de caractere/string case valoare1 grup1 instructiuni case valoare2 grup 2 instructiuni . . . case valoare n grupn instructiuni otherwise grup n+1 instructiuni end

Să se traseze schema logică asociată programului de mai jos: conţine decizii multiple în corpul ciclului for

Page 20: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

20

Programul contorizează numărul de apariţii în şirul X a valorilor 1, 2, 3 şi restul de valori. x=input('Dati sir de valori x= '); v1=0; v2=0; v3=0; v=0; for i=1:length(x) if x(i)==1 v1=v1+1; elseif x(i)==2 v2=v2+1; elseif x(i)==3 v3=v3+1; else v=v+1; end end fprintf('v1=%d v2=%d v3=%d v=%d\n',v1,v2,v3,v); Observaţi: 1.asemănarea deciziei multiple realizate cu if-elseif şi cea realizată cu switch-case 2. S-au compus schemele logice pentru for şi if-elseif (sau switch) 3.Linia întreruptă mărgineşte corpul instrucţiunii de ciclare for şi conţine deciziile multiple

5. Definirea unei funcţii în Matlab

5.1. Sintaxa definirii unei funcţii: in1, in2,…inn sunt argumente de intrare (parametri formali) ou1,out2,…outm sunt argumente de ieşire in1, in2,… ou1,out2,… sunt variabile locale

ai sunt parametri actuali sau efectivi care au valori concrete la momentul apelului funcţiei ri primesc valorile de la outi

1. Funcţiile sunt subprograme care folosesc parametri de intrare (in1, in2,…) şi parametri de ieşire (ou1,out2,…) pentru a comunica cu alte funcţii sau cu fereastra de comenzi 2. Parametrii de intrare permit aplicarea unui algoritm de calcul unor date de intrare diferite 3. Folosirea funcţiilor permite modularizarea programului (anumite sarcini de calcul să fie încapsulate) 4. Funcţiile folosesc variabile locale funcţiei, variabile care există numai pe timpul execuţiei funcţiei: în fun_demo1: i, x; la ieşirea din funcţie variabilele locale se pierd.

Page 21: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

21

5. Variabilele locale sunt independente de variabilele cu acelaşi nume din workspace sau din alte funcţii. 6. Definiţia funcţiei este salvată într-un fişier referabil cu acelaşi nume cu al funcţiei sau altul şi extensia .m In cazul în care numele funcţiei este diferit de al fişierului se foloseşte numele fişierului la apel. Calea spre fişier trebuie setată “Set Path…” dacă fişierul nu se află în directorul curent sau în lista de căi spre directore. 7. Funcţia poate fi apelată în linia de camandă sau din alte funcţii sau fişiere script Matlab. 8. Funcţiile pot să nu aibă argumente de intrare sau argumente de ieşire. 9. Apelul funcţiei este: nume_fun(a1, a2,…) unde a1, a2 sunt parametri efectivi (actuali) având valori concrete/cunoscute. 10. Apelul funcţiei se poate face din linia de comandă, dintr-o altă funcţie sau dintr-un fişier script. 11.Valorile parametrilor efectivi sunt transferate parametrilor formali în ordine de la stânga la dreapta.

5.2. EXEMPLE 1) Un parametru de intrare şi unul de ieşire function y = average(x) % AVERAGE media elementelor vectorului y = sum(x) / length(x); end

x parametrul intrare vector y param. ieşire scalar Funcţia average este salvată în fişierul average.m

APELURI valide ale funcţiei: v=[1 2 3 -3 5]; ave=average(v)

v=[1 2 3 -3 5]; average(v) ans = 1.6000

average([1 2 3 -3 5]) ans = 1.6000

2) 2 parametri de intrare şi un (1) parametru de ieşire function z=xplusy(x,y); z=x+y; end

x,y doi parametri de intrare z un parametru de ieşire

Se salvează definiţia funcţiei într-un fisier cu numele xplusy.m. APELURI valide ale funcţiei:

a=1 b=2 scal1=xplusy(a,b)

a=[1 2 3; 3 4 5] b=[7 8 9; 2 0 4] matr1=xplusy(a,b)

a=7 b=[7 8 9; 2 0 4] matr2=xplusy(a,b)

scal2=xplusy(1,2) matr1=xplusy([1 2 3; 3 4 5],b) matr2=xplusy(7, [7 8 9; 2 0 4]) 3) 2 par. intrare, nu sunt parametri de ieşire

function comp(a,b) if a>b 'a>b' elseif a<b 'a<b' else %a==b 'egalitate' end

a,b parametri intrare; nu exista parametri de ieşire Salvam definitia în fişierul comp.m APELURI: >>comp(4,6)

4) un parametru intrare, 2 parametri de ieşire function [s,sp]=sumap(x) %returneaza suma si suma elem >0 s=0;sp=0; for i=1:length(x) s=s+x(i); if x(i)>0 sp=sp+x(i);%insumare x(i)>0 end end

Page 22: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

22

∑ −===

n

inx iXVAR1

212 )][( µσend Apel: [suma, sp]=sumap([1 5 -3]) Parametrii formali ai functiei pot avea acelasi nume cu variabilele din secţiunea care apelează

CURS 5 (nov.) (continuare funcţii) 1. Se poate defini o funcţie în corpul altei funcţii:

Bulina roşie => breakpoint Săgeata albă => punct de apel funcţie Săgeata versde => poziţie curentă de rulare

>> stat3([1 2 3 4]) %apel functie stat3 2. Pentru evaluarea unei formule se pot folosi funcţii inline pentru a evita definirea unei funcţii. function y=f_expresie(x) % se creaza un nou fisier y=x+sin(x)+x.^2;

fun_ex=inline('x+sin(x)+x.^2');

Sunt permise apelurile: Re1=f_expresie(2.2) Re2=fun_ex(2.2) Re1=f_expresie([2.2 3 5]) Re2=fun_ex([2.2 3 5]) 3.Variabile globale VG permit folosirea unor variabile în corpul funcţiilor fără ca acele variabile să fie pasate prin parametri în acele funcţii. Comunicare numai prin parametri Spaţiul de lucru (workspace) Definiţie fun_1 a=1 b=2 c=5 re=fun_1(a,b,c)

functie y=fun_1(pa,pb,pc) …. y=pa+pb+pc;

Variabilele a,b,c şi-au transferat valorile parametrilor formali pa,pb respectiv pc Valoarea calculată y transferă valoarea variabilei re Comunicare prin parametri şi variabilă globală a=1 b=2 global vgC; vgC=55 re=fun_1(a,b)

functie y=fun_1(pa,pb) …. global vgC; ….. y=pa+pb+ vgC;

Variabilele a,b şi-au transferat valorile parametrilor formali pa respectiv pb Variavila vbC este declarată globală în funcţia apelantă şi apelată (fun_1) deci poate fi folosită în expresii în funcţia apelată fun_1

Page 23: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

23

4. Fişiere script Matlab sau macrouri Scriptul Matlab este un segment de program Matlab salvat într-un fişier numefis.m. Execuţia segmentului de program se obţine prin apelul numelui fişierului numefis (fără extensie) în linia de comandă, în funcţii sau în alte fişiere script. După execuţia fişierului script variabilele locale rămân în spaţiul de lucru al aplicaţiei (spre deosebire de funcţie). Un program Matlab are forma fişierelor “script” sau fişierelor “function” ambele având extensia m. Din fişierele de funcţii sau fişierele script se pot apela alte funcţii sau fişiere script. Se pot face de asemenea apeluri recursive adică o funcţie să se apeleze pe sine sau dintr-un fişier script să se apeleze acelaşi fişier script.

Grafică 2D în MATLAB

1. Funcţii pentru reprezentări grafice 2D în MATLAB subplot(abc) divizează graficul a=număr linii, b=număr coloane, c=poziţia curentă în matrice numărând pe linii: a11, a12… a21… plot(y) realizează reprezentări grafice în coordonate liniare a) y este vector => reprezintă valorile lui y în funcţie de numărul de ordine al fiecărui element din vector b) y este matrice m x n => plot(y) reprezintă n curbe câte o curbă pentru fiecare coloană a matricei x=0 : pi/100 : 4*pi %vector real de 401 %elemente y=sin(x); plot(y) Exemplu x=0 : pi/100 : 3*pi y=sin(x); y1=sin(x+pi/3); ma(:,1)=y; %generare coloana 1 ma(:,2)=y1; %generare coloana 2 plot(ma); c) dacă y este un vector de valori complexe va reprezenta plot(real(y), imag(y)) x=0 : pi/100 : 3*pi %vector real y=sin(x); z=fft(y); % transformata Fourier calculează vectorul z % având length(y) valori complexe(simetrice) subplot(121) % linia 1, coloana 2, pozitia 1 devine curenta plot(z) subplot(122) % linia 1, coloana 2, pozitia 2 devine curenta plot(real(z), imag(z)) % grafic identic cu plot(z)

Exemplu cu numere complexe: Profilul unei forţe periodice este de forma:

t2

+t+t2

=f(t) 00 04cos5.1cos3cos1 ω

ωω⋅

Se trasează grafic forţa şi se pun în evidenţă componentele armonice ale profilului (amplitudinea şi argumentul fiecărui cosinus): w0=10;t=0:0.01:5; f1=1*cos(w0/2*t)+3*cos(w0*t)+1.5*cos(4*w0/2*t); subplot(211); plot(t,f1) Y1 = fft(f1); subplot(212); plot(abs(Y1(1:length(Y1)/4) ));

Page 24: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

24

Y1: plot(x,y)

a) reprezintă grafic vectorul y (ordonata) în funcţie de vectorul x (abscisa) b) x vector, y matrice => coloanele matricei y vor fi reprezentate în funcţie de vectorul x

plot(x1,y1, x2,y2) => în acelaşi grafic sunt reprezentate curbele (x1, y1) şi (x2, y2) Reprezentare în coordonate logaritmice şi semilogaritmice loglog(x,y) scalează ambele axe folosind logaritmul în baza 10 (…10-1 , 100 , 101 , 102 ,…sunt echidistante) semilogx(x,y) scalează logaritmic axa x (…10-1 , 100 , 101 , 102 ,…sunt echidistante pe x) semilogy(x,y) scalează logaritmic axa y (…10-1 , 100 , 101 , 102 ,…sunt echidistante pe y) x=0 : pi/100 : 10*pi %vector real de 1000 elemente y=sin(x); semilogx(x, y)

subplot(312); semilogx(abs(Y1(1:length(Y1)/4) )); subplot(313); semilogy(abs(Y1(1:length(Y1)/4) )); Reprezentarea discretă a datelor x=0 : pi/10 : 3*pi %vector real de elemente y=sin(x); stem(x, y) Reprezentare în trepte x=0 : pi/10 : 3*pi %vector real y=sin(x); stairs(x, y) Grafic de bare x=0 : pi/5 : pi %vector real y=sin(x); subplot(1,2,1) bar (x,y) subplot(1,2,2) bar (y) Reprezentare în coordonate polare (u,R) u=0 : pi/10 : 2*pi; R=sin(u) .* cos(u); polar(u,R); fplot(‘nume_fun’, limite, n) reprezintă grafic o funcţie cu limite specificate: function y=f2(x) % definitie functie, x poate fi vector y=sin(x) .* x; % salvam functia in fisierul f2 >>[x,y]=fplot('f2', [-22 44], 1000); >>plot(x,y); grid;

Page 25: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

25

Funţia fplot returnează 1000 abscise şi 1000 ordonate în vectorii x şi y. Apelăm plot(x,y) pentru reprezentare grafică. comet(y) şi comet(x,y) realizează reprezentare dinamică a unei curbe 2D printr-un punct care trasează curba. 1. Tipărire cu format prin folosirea funcţiei fprintf x=input('vector x= '); for i=1 : length(x) fprintf('element x(%3d)=%12.3f\n', i, x(i) ); end % s-a folosit \n pentru trecerea cursorului pe randul urmator la inceput după fiecare execuţie a funcţiei fprintf

Folosim: %d pentru tipărire valori întregi (decimal) %s pt. tipărire şiruri de caractere (string) %f pentru tipărire valori reale (float) %12.3f valoarea reală se tipăreşte într-un spaţiu de 12 caractere dintre care 3 sunt alocate zecimalelor iar restul punctului zecimal şi părţii întregi.

În cadrul parametrului actual de tip ‘şir de caractere’ a funcţiei fprintf, pot fi folosite caractere de formatare a textului (caractere de evitare): \n Linefeed LF + carriage return CR = se trece (scrie) la

inceputul liniei următoare \t Tab (se sare un număr de

caractere/pozitii de scriere) \r carriage return \b Backspace (inapoi un caracter) Folosim \\ pentru a tipări un caracter backslash şi %% pentru tipărirea unui caracter procent. Tipărire în formă tabelară la ecran: x=input('medii x= '); s=0; m=0; ma=0; nivel={'slab', 'mediu', 'bun'}; %cell array conţine 3 şiruri de caractere de lungimi diferite fprintf(' \t\tNote studenti\n'); %două taburi (\t) şi trecere la inceputul rândului următor (\n) fprintf(' \t\t----------------\n'); for i=1:length(x) if x(i)<=6 s=s+1; % %s este descriptor pentru şir de caractere fprintf('student #%d nivel %s =%12.3f s=%d\n', i, nivel{1}, x(i), s) elseif x(i)<=8 m=m+1; fprintf('student #%d nivel %s =%12.3f m=%d\n',i,nivel{2},x(i),m ) else ma=ma+1; fprintf('student #%d nivel %s =%12.3f m=%d\n',i,nivel{3},x(i),ma) end end Pentru scriere în fişier (în locul ecranului) folosim o secvenţă de forma următoare: x=input('vector x= '); fid=fopen('fisdate.dat', 'wt'); for i=1:length(x) fprintf(fid, 'element x(%3d)=%12.3f\n', i, x(i) ) end …. Sintaxa de scriere: fid = fopen(cale_numefisier, mod) deschide fişierul în modul specificat prin mod care poate fi: 'r' read 'w' write (crează fişierul dacă este necesar) 'a' append (crează fişierul dacă este necesar) 'r+' read and write (nu crează) 'w+' trunchează sau crează pentru read şi write 'a+' read şi append (crează fişierul dacă este necesar) Fişierul poate fi deschis (pentru citire din fişier sau scriere în fişier) în mod text (exemple 'rt' şi 'w+t') sau binar (implicit). Obs.: funcţia fscanf este folosită pentru citire cu format din fişiere.

Page 26: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

26

CURS 6 1. Completare funcţii Funcţii pasate ca parametru altei funcţii: Sunt definite două funcţii apelate: f() şi rie() function [y]=f(x) y=sin(x)+x; end

function [F]=rie(f,a,b,n) F=f(a)+b+n end

%Program principal( apelant) a=1; b=2; n=4; rezultat=rie(@f, a,b,n); disp(rezultat);

2. Calcule cu polinoame In Matlab polinoamele sunt reprezentate prin vectorul coeficienţilor polinomului luaţi în ordine descrescătoare a puterilor. p1=[1 2 3] ; %vector coef. x=[-18: .2 : 22]; %argumente y=polyval(p1,x); plot(x,y);

32)( 2 ++= xxxp Funcţia polyval evaluează un polinom (dat prin coeficienţii polinomului p1) la abscisele din x (parametrul al doilea).

Adunare şi scădere de polinoame Se adună/scad element cu element coeficienţii de acelaşi ordin. Vectorii coeficienţilor trebuie să aibă acelaşi număr de elemente: p1=[1 2 3], p2= [0 3 4] => p_suma=p1+p2 -> [1 5 7] Inmulţire şi împărţire de polinoame cu funţiile conv şi deconv: prod(x)=p1(x)*p2(x)

)(2)(1)(

xpxpximp =

)1)(32()( 2 −++= xxxxprod

1322

)(−

++= xxxximp

Exemplu Matlab: p1=[1 2 3]; p2=[1 -1]; prod=conv(p1,p2) [imp, rest]=deconv(p1,p2) p1_nou = conv(p2,imp) + rest prod = 1 1 1 -3 imp = 1 3 rest = 0 0 6 p1_nou =1 2 3

Înmulţirea a două polinoame date prin vectorii coeficienţilor. Comparaţi coeficienţii obţinuţi prin programul scris şi prin apelul funcţiei conv() (gradul polinoamelor p1,p2 scrise prin coeficienţi este length(p1)-1 respectiv length(p2)-1; gradul polin. produs p12 este length(p1)+length(p2)-2 şi se alocă length(p1)+length(p2)-1 pozitii în p12). p1=[1 2 3 -4]; p2=[1 -1]; p12= zeros(1,length(p1)+length(p2)-1) for i=1:length(p1) for j=1:length(p2) p12(i+j-1)=p12(i+j-1)+p1(i)*p2(j); end end p12 prod=conv(p1,p2)

Descompunerea în sumă de fracţii simple a raportului a două polinoame A(x) şi B(x) Fracţiile conţin la numitor polinoame de ordinul unu.

)(...)(

)()2(

)2()1(

)1()()( xk

npxnr

pxr

pxr

xBxA

++++=−−−

unde numim r(1) ,…, r(n) reziduuri iar p(1) ,…, p(n) poli.

Se foloseşte funcţia Matlab: [r,p,k]=residue(A,B) Funcţia se poate apela şi în forma: [A,B]=residue(r, p, k) caz în care sunt returnaţi coeficienţii polinoamelor A şi B. Să se studieze funcţia:

1214

3

2)(

++++=

sssssG

Page 27: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

27

num=[1 4 1]; den=[1 0 2 1]; >> roots(num) % calcul rădăcini ec.polinom ans = -3.7321 -0.2679 >> roots(den) %numitor ans = 0.2267 + 1.4677i 0.2267 - 1.4677i -0.4534 Tratarea expresiei ca funcţie de transfer (tf): >> sist=tf(num,den) Transfer function: s^2 + 4 s + 1 ------------- s^3 + 2 s + 1 Calcul poli, zerouri şi trasare figura alăturată pzmap([1 4 1],[1 0 2 1]) sau: pzmap(sist)

- cerculeţele “zerouri” sunt rădăcinile polinomului de la numărător. - cu x sunt notate rădăcinile de la numitor “polii’.

Descompunere în fracţii simple a funcţiei G=num/den. >> [r,p,k]=residue(num,den) r = 0.6162 - 1.2316i 0.6162 + 1.2316i -0.2324 p = 0.2267 + 1.4677i 0.2267 - 1.4677i -0.4534 k = [] 3. GRAFICE 3D 1. Curbe spaţiale (3D) – sintaxa funcţiei plot3() plot3(x,y,z) plot3(x,y,z, ‘tip-linie’); plot3(x1,y1,z1, ‘tip-linie1’, x2,y2,z2, ‘tip-linie2’, …) plot3(X,Y,Z) Exemplu: t=0 : pi/40 : 10*pi; plot3(sin(t), sin(t).*cos(t),2*t); grid on; Două curbe spaţiale: plot3(sin(t), sin(t).*cos(t),2*t, sin(t), cos(t),2*t); Grafic spaţial dinamic - un punct trasează dinamic curba comet3(sin(t), sin(t).*cos(t), 2*t); 2.Generarea unei reţele – mesh, în plan [X, Y]=meshgrid(x,y) sau [X, Y]=meshgrid(x) Funcţia meshgrid foloseşte domeniile 1D specificate prin vectorii x şi y pentru generarea tablourilor X şi Y . Aceste tablouri sunt folosite la evaluarea funcţiilor de două variabile z=f(x,y) prin funcţiile Matlab mesh şi surf cu reprezentare 3D.

Page 28: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

28

>> [X,Y]=meshgrid(0:4, 6:2:10) X = 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 Y = 6 6 6 6 6 8 8 8 8 8 10 10 10 10 10

Domeniu dreptunghiular: -primul vector 0:4 desfăşoară valorile pe linie sau pe axa x în cadrul matricei X. -vectorul 6:2:10 desfăşoară valorile pe coloane sau axa y în cadrul matricei Y. Cele două matrice X şi Y au acelaşi număr de lin. şi col. PERECHILE (X(i,j), Y(i,j) ) formează reţeaua de puncte din domeniul 2D oxy, dreptunghiular, de definiţie al funcţiei z=f(x,y)

>> [X,Y]=meshgrid(3:6) X = 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 Y = 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6

Domeniul este pătrat. Perechile de puncte din plan sunt de forma ( X(i,j), Y(i,j) ): (3,3), (4,3), (5,3), (6,3), (3,4), (4,4) etc.

3. Reprezentare suprafeţe wireframe cu funcţia mesh şi suprafeţe netede cu funcţia surf Matlab reprezintă suprafeţe prin cote z = valori ale funcţiei pentru o reţea de puncte din planul x-y. Punctele de cotă z adiacente sunt conectate prin segmente colorate de dreaptă (wireframe) în cazul funcţiei mesh şi colorează feţe pentru comanda surf. Fie o funcţie de forma z=f(x,y): z=sin(x)/x unde x=sqrt(x^2+y^2) Se crează reţeaua de puncte din planul x-y: [X,Y]=meshgrid(-12:.4:12, -12:.4:12); %sau meshgrid(-12: .4: 12); ra=sqrt(X.^2+Y.^2); Z=sin(ra)./ra; %calcul valori funcţie subplot(211); h=mesh(X,Y,Z); % h este handle la funcţia mesh grid on; subplot(212); s2=surf(X,Y,Z); % vezi figura alăturată -> get(h) % returnează setul de proprietăţi ale graficului asociat set(h, 'LineWidth', 1) %set(h, …) se impun proprietăţi graficului asociat title('Functia sinc cu surf'); xlabel('axa x'); ylabel('axa y'); text(0,0,0.5,’vârf’); Exemplul 2: [X,Y]=meshgrid(-10:16); Z=sqrt(X.^2+Y.^2); surf(X,Y,Z);

Page 29: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

29

4. Elemente de CALCUL SIMBOLIC

Variabila simbolică se memorează în forma unui şir de caractere %defineşte un singur obiect simbolic x = sym('x') x = x

% defineste mai multe ob. simbolice syms y f g1 g2 g whos % afisaza tipul variabilelor Name Size Bytes Class f 1x1 126 sym object

Derivare f0=3*x^3+5*x^2-6*x+2 pretty(f0) 3 2 3 x + 5 x - 6 x + 2 diff(f0) => ans = 9*x^2+10*x-6 f1 = 2*x^2*exp(3*x) >> diff(f1) ans = > 4*x*exp(3*x)+6*x^2*exp(3*x) >> diff(log(x)) ans = 1/x >> int(1/x) ans = log(x)

% defineste expresia f f= 12 + (x-1)*(x-1)*(x-2)*(x-3) f = 12+(x-1)^2*(x-2)*(x-3) diff(f) % prima derivata ans = 2*(x-1)*(x-2)*(x-3)+(x-1)^2*(x-3)+(x-1)^2*(x-2) diff(f,x,2) % derivată de ordin 2 ans = 2*(x-2)*(x-3)+4*(x-1)*(x-3)+4*(x-1)*(x-2)+2*(x-1)^2 diff(f,x,3) % a treia derivată ans = 24*x-42

>> diff(sin(5*x)) ans = 5*cos(5*x)

>> diff(sin(x)^2) ans = 2*sin(x)*cos(x)

>> diff( sin(x)*cos(x) ) ans = cos(x)^2-sin(x)^2

>> diff(exp(x)*cos(x)) ans = exp(x)*cos(x)-exp(x)*sin(x)

g1= 20*x^3 +15*y -30 g2 = 0.25*x + y -1; % g1,g2 pot avea derivate partiale diff(g1,x) % derivata parţială ans =

g = [g1;g2] % g=vector coloană de 2 funcţii de var. x,y g = [ 20*x^3+15*y-30] [ 1/4*x+y-1] % Calcul matrice Jacobiană=derivatele parţiale ale vectorului g în raport cu variabilele independente x şi y

Page 30: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

30

60*x^2 diff(g1,y) ans = 15

xy = [x y]; % vectorul linie al variabilelor J = jacobian(g,xy) % calcul Jacobian J = [ 60*x^2, 15] [ 1/4, 1]

syms x f1 f2 % polinom cu solutii simetrice fată de oy: f1=(x-2.16)*(x-12.7)*(x-38.3) * (x+2.16)*(x+12.7)*(x+38.3) subplot(211) ezplot(f1, [-44,44]) ; line([-44 44],[0 0],'Color','r'); f2= (x-1)*(x-1)*(x-2)*(x-3)+4 subplot(212) ezplot(f2) % -2 pi < x < 2 pi ezplot(f2, [0,4]) % graficul fun. f pentru 0 <= x <= 4 Df1 = diff(f1); ezplot(df1,[0,4]) % grafic derivata line([0 4],[0 0],'Color','r')

-40 -20 0 20 40

-4

-3

-2

-1

0

1

2

3

x 108

x

(x-54/25) (x-127/10) (x-383/10) (x+54/25) (x+127/10) (x+383/10)

0 1 2 3 4

4

6

8

10

12

14

x

(x-1)2 (x-2) (x-3)+4

g g = [ 20*x^3+15*y-30] [ 1/4*x+y-1]

% evaluare g pentru x = 1, y = 2.5 subs(g,{x, y}, {1 , 2.5}) ans = 27.5000 1.750

Calculele numerice şi symbolice pot fi combinate.

Integrare syms x fin =2*x^2 >> int(fin) ans = 2/3*x^3

>> int(1/x) ans = log(x)

» syms a b x % variabile simbolice » f = 3*a*b*x + 2*exp(a*x + b); % definitie f » f1 = diff(f,x) % derivata functiei f in rap. cu x f1 = 3*a*b+2*a*exp(a*x+b)

» int(f1,x) % integrare f1 în raport cu x ans = 3*a*b*x+2*exp(a*x+b) % s-a obţinut f din nou

» int(f,0,pi/2) % integrare în raport cu variabila implicită între 0 şi pi/2 ans = > 1/8*(3*a^2*b*pi^2+16*exp(1/2*pi*a+b)-16*exp(b))/a » f2 = int(f,b,0,pi/2) % integrare în raport cu b între 0 şi pi/2 f2 = > 3/8*a*pi^2*x+2*exp(a*x+1/2*pi)-2*exp(a*x) Rezolvare pereche de ecuaţii neliniare:

clear % definire funcţii syms x1 x2 h1 = x1*x1 + x2*x2 - 2; h2 = 0.25*x1*x1 +0.75*x2*x2 -1; sol = solve(h1,h2); rezolva sist. pt. x1 şi x2 >>[double(sol.x1) double(sol.x2)]

Page 31: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

31

Matrice syms m1 m2 M; M=[m1 0; 0 m2] inv(M) M = [ m1, 0] [ 0, m2] ans = [ 1/m1, 0] [ 0, 1/m2]

syms a b c d A; A=[a b; c d] pretty(inv(A)) [ d b ] [ --------- - ---------] [ a d - b c a d - b c] [ ] [ c a ] [- --------- --------- ] [ a d - b c a d - b c ]

%Matrice coloana x matrice linie [a; b]*[c d] ans = [ a*c, a*d] [ b*c, b*d] det(A) ans = a*d-b*c

syms a b c d ; c=sin(a+b) d=cos(a+b) expand(c) expand(d) ans = sin(a)*cos(b)+cos(a)*sin(b) ans = cos(a)*cos(b)-sin(a)*sin(b)

etc.

syms x y f = x^2*y + 5*x*sqrt(y) subs(f, x, 3) ans = 9*y+15*y^(1/2)

subs(f, y, 3) ans = 3*x^2+5*x*3^(1/2)

Dezvoltare în serie de funcţii Taylor Serie MacLaurin

syms x f1 = sin(x); f2=cos(x); T1 = taylor(f1,10), T2=taylor(f2,10) T1 = > x -1/6*x^3 +1/120*x^5 -1/5040*x^7 +1/362880*x^9 T2 = > 1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8 f3 =exp(j*x); T3 = taylor(f3,10) T3 = 1+i*x- 1/2*x^2 -1/6*i*x^3+ 1/24*x^4+ 1/120*i*x^5- 1/720*x^6 -1/5040*i*x^7+ 1/40320*x^8+ 1/362880*i*x^9 syms x num = 2*x^2 + 3*x -1; denom = x^2 - x + 3; f = num/denom fp=diff(f), pretty(fp) fps=simplify(fp), pretty(fps) AFISARE: f = (2*x^2+3*x-1)/(x^2-x+3) fp =

2 4 x + 3 (2 x + 3 x - 1) (2 x - 1) ---------- - -------------------------- 2 2 2 x - x + 3 (x - x + 3) fps = -(5*x^2-14*x-8)/(x^2-x+3)^2 2 5 x - 14 x - 8 - --------------- 2 2

nn

n

xxn

xfxxf )(!

)()( 00

00 −∑=+

=

nn

nRx

n!fx

!f+x

!f+x

!ff=xf ++++

)0(3

)0(2

)0(1

)0()0()0()(

3'''

2'''

Page 32: Cursuri Matlab

Prof.dr.ing. Iulian Lupea Programarea şi Utilizarea Calculatoarelor

32

(4*x+3)/(x^2-x+3)-(2*x^2+3*x-1)/(x^2-x+3)^2*(2*x-1)

(x - x + 3)

Diverse 1. Rezolvare sistem de ecuaţii liniare de forma AX=B A=[3 -1 0;-2 1 1;2 -1 4] B=[5 0 15]' sau B=[5; 0; 15;] X1=A^-1 * B X1 = 2.0000 1.0000 3.0000 Sau: X2=a\b 2. Sortare prin metoda selecţiei a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ') asort=sort(a,'descend'); n=length(a); for i=1:n-1 poz_max=i; for j=i+1:n if a(j)>a(poz_max) poz_max=j;%retine pozitie element maxim end end aux=a(i);a(i)=a(poz_max);a(poz_max)=aux; %intershimba end a asort 3. Sortare prin metoda bulelor a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ') asort=sort(a,'descend'); n=length(a); for i=n-1:-1:0 for j=1:i %elem. cel mai mare este plasat ultimul in subsirul de indici 1,...,i if a(j)<a(j+1) aux=a(j); a(j)=a(j+1); a(j+1)=aux; end end end a asort

=+−=++−

=−

153421203212

5213

xxxxxx

xx


Recommended