Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% au considerat acest document util (0 voturi)
276 vizualizări145 pagini

Matlab Curs

Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1/ 145

Structura cursului

Curs:

Sala I101 - seria I, grupele 11 -13 săptămâna impară


Sala I101 - seria II, grupele 14-16 saptămâna pară

Laborator

Sala F113

Proiect

Sala F312
Materiale

platforma Moodle

http://fim.curs.pub.ro/
Informatică Aplicata 1
Structura cursului

Saptamanile 1...6 curs si laborator MATLAB

Saptamanile 7,8 – Verificare MATLAB

Saptamanile 7...12 curs si laborator HTML

Saptamanile 13,14 – Verificare practica HTML

Ultimul curs – Colocviu final HTML &MATLAB


Ce se asteapta de la voi


Prezenta obligatorie la Laborator….si la Curs

NU se fac recuperari la laborator

Prezenta obligatorie la:

Verificarea practica MATLAB

Verificare practica HTML


Calculul Notei Finale

30% din nota Verificare practica MATLAB

30% din nota Verificare practica HTML

20% din nota proiect + teste/teme teoretice

20% din nota Colocviu final HTML & MatLab

Cerinte minimale pentru promovare:

obtinerea a minim 50% din punctajul total


Proiect

Scopul : sa intelegeti domeniul Ingineriei Biomedicale

Subiectul – idei contemporane: imagistica medicala,


biomecanica, biomateriale, inginerie genetica, organe
artificiale, biosenzori etc.

Documentare: obligatoriu articole de jurnal si resurse online


(intotdeauna scrieti referintele )

Modul de realizare: Crearea unor pagini HTML – echipe de 2

Sectiuni obligatorii: Titlul, Autorii, Abstract (ce? de ce? cum ?)


Introducere, Metode, Rezultate, Discutii, Referinte
Curs 1
MATLAB
The Language of Technical
Computing

numere/variabile/functii uzuale
Ce este MATLAB-ul?

MATrixLABoratory este un limbaj de programare, mai exact un
interpretor pentru programarea calculelor numerice complexe.
Produs de firma MathWorks Inc.

Pachet de programe de inalta performanta pentru calcul si
analiza numerica, simulari si reprezentari grafice in
domeniul stiintei si ingineriei.

MATLAB integreaza analiza numerica cu calculul matriceal, cu
prelucrarea semnalelor si cu grafica intr-un mediu usor de
utilizat. MATLAB este construit pe baza unui soft sofisticat
de calcul matricial de analiza a ecuatiilor liniare.

Poate fi utilizate in domenii: matematica aplicata, fizica, chimie,
tehnic, finante si in orice domeniu care utilizeaza modele ce
necesita calcule numerice complexe.
Structura

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 & Octave
La sfarsitul acestor cursuri veti fi capabili sa:


Creati si folositi scripturi si functii

Sa scrieti mici programe interactive

Procesati fisiere de date

Lucrati cu vectori si matrici

Creati grafice 2D si 3D

Matlab Online
https://matlab.mathworks.com

Site Octave:
https://www.gnu.org/software/octave/
https://octave.sourceforge.io
Resurse de calcul
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


Elementul de baza cu care lucreaza MATLAB-ul este
matricea numerica rectangulara, cu elemente reale sau
complexe.

Programele elaborate in mediul MATLAB se salveaza in
fisiere cu extensia .m, numite M-fisiere.
MATLAB Desktop
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 funcţii matematice MATLAB - vasta


colectie de algoritmi de calcul, pornind de la functii
elementare precum suma, sinus, cosinus si aritmetica
complexa, pana la funcţii 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 :
– comenzi de nivel inalt pentru vizualizarea 2D şi 3D a
datelor, procesare de imagini, animatie si grafica

– comenzi de nivel jos 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 – formatdate numefisier numevariabile

Exemple:
save – salveaza toate variabilele in fisierul matlab.mat
save numefisier salveaza toate variabilele/datele in
format binar, numefisier .mat
save numefisier x y - salveaza variabilele x si y in format
binar, numefisier .mat
save -ascii -tabs numefisier.ext se salveaza toate
variabilele in fisierul nume_fisier.ext cu toate datele in
format text si separate de TAB
Exportul fisierelor – functia save
Salveaz toate variabilele din workspace in fisierul tot.mat
ce are formatul .mat (binar)
>> x=[ 1 2 3]
>> y= [4 5 6]

>> save -mat tot.mat

>> clear all % comanda sterge toate variabilele

>> who % comanda listeaza toate variabilele

>> save -mat tot.mat x % salvam doar variabila x


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 adauga 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 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
Tipuri de erori
• Scopul : Aprecierea preciziei rezultatelor calculelor.

• Tipuri de erori care pot limita aceasta precizie:

erori in datele de intrare - se pot datora imperfectiunilor inerente


ale masuratorilor fizice

erori de rotunjire - apar daca se fac calcule cu numere a caror


reprezentare se restrange la un numar finit de cifre- eroare de
trunchiere (termen utilizat pentru erorile de rotunjire comise prin
stergerea ultimelor cifre ale reprezentarii)

erori de aproximare - multe metode nu dau solutia exacta a


problemei date P ( chiar daca calculele se fac fara rotunjire), ci o
solutie a unei alte probleme mai simple, care aproximeaza P
Eroarea de aproximare

Exemplu: e = 1 +1/1!+1/2!+1/3! + · · · insumam un numar finit de


termeni ai seriei

Multe probleme de aproximare se se obtin prin ,,discretizarea“


problemei originale P:
- integralele definite se aproximeaza prin sume finite,
- derivatele prin diferente, etc

Eroarea de aproximare se numeste eroare de discretizare.


Unii autori extind termenul de ,,eroare de trunchiere“ pentru a
acoperi si eroarea de discretizare.
Masuri ale erorii
notatie x∗ ≈ x : un element x∗ ∈ A se numeste aproximanta a lui x
din A

Eroare:Daca x∗ este o aproximanta a lui x diferenta Δx = x − x∗ se


numeste eroare.

Eroare absoluta : | Δx | = | x*-x |

Eroare relativa: δx = | Δx | / | x | , x≠0

Observatii:
1. in practica x este necunoscut, se foloseste aproximarea
δx = | Δx | / | x* | . Daca | Δx | este mic comparativ cu x*, atunci
aproximanta este buna.

2. Daca X = R, se lucreaza cu δx = Δx / x si x = x* − x.
Reprezentarea in virgula mobila a numerelor reale

Reprezentarea in virgula mobila(virgula flotanta) este utilizata


pentru numere reale, permitand o precizie ridicata si o plaja
larga de valori.

Termenul de numar in virgula mobila este utilizat pentru a


desemna un numar real care poate fi reprezentat exact in
virgula mobila.

Parametrii reprezentarii in virgula mobila sunt (numere naturale):


- baza β (intotdeauna para),
- precizia p,
- exponentul maxim emax
- exponentul minim emin.
Reprezentarea numerelor in virgula mobila

-s bitul de semn al numarului (s=0 numar pozitiv si s=1 numar


negativ);
-m mantisa numarului (cifrele semnificative);
-e exponentul (puterea la care trebuie ridicata o valoare numita baza
si care inmulteste cifrele semnificative ale numarului).

valoare = (-1)s x m xbazae

(baza β : 2, 10 sau 16).

Un numar este reprezentat in virgula mobila, printrun cuvant de n biti


Exemplu: pentru o reprezentarea in virgula mobila 7 biti pentru
exponent =>128 valori distincte cu semn: -64 ≤ exponent ≤ +63
Reprezentarea in virgula mobila a numerelor reale
Reprezentarea generala a unui nr in virgula mobila:

x = ±d0 . d1 d2 . . . dp−1 × βe, 0 ≤ di < β

unde d0.d1d2 . . . dp−1 se numeste semnificant sau mantisa, iar


e exponent .

Valoarea lui x este : ±(d0 + d1β−1 + d2β−2 + · · · + dp−1β−(p−1))βe.

Pentru ca reprezentarea in virgula mobila sa fie unica, numerele


se normalizeaza, adica se modifica reprezentarea (nu valoarea)
astfel incat d0 diferit de 0.

Zero se reprezinta ca 1.0×βemin -1.


Reprezentarea in virgula mobila a numerelor reale
Fiecare interval de forma [βe, βe+1) din R contine βp numere in
virgula mobila (numarul posibil de semnificanti).

Intervalul (0, βemin) este gol si din acest motiv se introduc


numerele denormalizate, adica numere cu semnificantul de
forma 0.d1d2 . . . dp−1 si exponentul βemin−1.

Denormalizarea se considera a fi un parametru suplimentar al


reprezentarii.

Multimea numerelor in virgula mobila pentru un set de parametri


dati ai reprezentarii se va nota cu

F(β, p, emin, emax, denorm), denorm ∈ {true, false}.


Eroarea de reprezentare

ulps – units in the last place (unitati in ultima pozitie)

Daca numarul x se reprezinta prin d0.d1d2 . . . dp−1 × βe, atunci


eroarea de reprezentare este :

| d0.d1d2 . . . dp−1 − x / βe| βp−1ulps

Eroarea relativa ce corespunde la 1/2ulps este

1/2β−p ≤ 1/2ulps ≤ β / 2 β−p

Valoarea eps = β /2 β−p se numeste epsilon-ul masinii.


Rotunjirea
daca x = d0.d1 . . . dp−1dp . . .

Rotunjirea implicita se face dupa regula cifrei pare:

daca dp > β /2 rotunjirea se face in sus,


daca dp < β /2 rotunjirea se face in jos,
iar daca dp = β /2 si printre cifrele eliminate exista una nenula
rotunjirea se face in sus, iar in caz contrar ultima cifra pastrata
este para.

Axioma fundamentala a aritmeticii in virgula mobila:


orice operatie in aritmetica in virgula mobila este exacta pana
la o eroare relativa de cel mult eps (epsilon-ul masinii)
eps = β /2 β−p
Anularea

Singura operatie critica din punct de vedere al erorii este scaderea a


doua cantitati apropiate x ≈ y, caz in care eroarea relativa
δx−y → ∞. Acest fenomen se numeste anulare.

Anularea este de doua tipuri: benigna - cand se scad doua cantitati


exacte catastrofala -cand se scad doua cantitati deja rotunjite.
Exemple Anularea
Expresiile in care apare anularea trebuie rescrise, iar o anulare
catastrofala trebuie intotdeauna transformata in una benigna.

Ex1: Daca a ≈ b, atunci expresia a2 −b2 se transforma in (a−b)(a+b)

Ex2: Daca anularea apare intr-o expresie cu radicali, se amplifica cu


conjugata

Ex3: La ecuatia de gradul al doilea ax2 + bx + c = 0, anularea poate


sa apara daca b2 ≫ 4ac. Pentru b > 0 anularea apare la calculul lui
x1, iar pentru b < 0 anularea apare la calculul lui x2.

Remediul este sa amplificam cu conjugata


Exemple Anularea
Sa consideram acum ecuatia de gradul al doilea:
a = 1, b = -100000000 si c = 1

>>a=1; c=1; b=-100000000;


>>x1=(-b+sqrt(bˆ2-4*a*c))/(2*a)
x1 =
100000000
>>x2=(-b-sqrt(bˆ2-4*a*c))/(2*a)
x2 =
7.45058059692383e-009

Daca se amplifica cu conjugata pentru a calcula x2 avem:


>> x2a=2*c/(-b+sqrt(bˆ2-4*a*c))
x2a =
1e-008
Aceleasi rezultate se obtin si cu functia root
Standardizarea reprezentarii
Exista doua standarde diferite pentru calculul in virgula mobila:
IEEE 754 care prevede β = 2
IEEE 854 care permite β = 2 sau β = 10, dar lasa o mai mare
libertate de reprezentare.

Parametrii standardului IEEE 754:

Precizia Simpla Simpla extinsa Dubla Dubla extinsa


p 24 ≥ 32 53 ≥ 64
emax +127 ≥ +1023 +1023 ≥ +16383
Emin -126 ≤ −1022 -1022 ≤ −16382
dim.exponent 8 ≥ 11 11 ≥ 15
dim. numar 32 ≥ 43 64 ≥ 79
Standardizarea reprezentarii
NaN - operatiile ilegale sau nedeterminate care conduc la NaN:
∞+ (−∞), 0 ×∞, 0/0, ∞/∞, xREM0, ∞REMy, √x pentru x < 0.
Daca un operand este NaN rezultatul va fi tot NaN.

Infinit 1/0 = ∞, −1/0 = −∞.


Valorile infinite dau posibilitatea continuarii calculului, lucru mai
sigur decat abortarea sau returnarea celui mai mare numar
reprezentabil. Exemplu x/(1+x2) pentru x = ∞ da rezultatul 0.

Zero cu semn Avem doi de 0: +0 si −0


relatiile +0 = −0 si −0 < +∞ sunt adevarate.
Avantaje: tratarea simpla a depasirilor inferioare si a
discontinuitatilor.
Se face distinctie intre log 0 = −∞ si log x = NaN pentru x < 0.
Fara 0 cu semn nu s-ar putea face distinctie la logaritm intre un
numar negativ care da depasire superioara si 0.
Standardizarea reprezentarii

Fie f , satisface 0 ≤ f < 1, iar exponentul −1022 ≤ e ≤ 1023.

Sistemul de numere in virgula mobila al MATLAB poate fi


caracterizat de trei constante:
realmin - reprezinta cel mai mic numar normalizat in virgula
mobila. Orice cantitate mai mica decat ea este fie un numar
denormalizat, fie da depasire inferioara.

realmax - reprezinta cel mai mare numar reprezentabil in virgula


mobila. Orice cantitate mai mare decat el da depasire superioara.

eps - epsilon-ul masinii


realmin, realmax, eps
Valorile acestor constante sunt :

binar zecimal hexazecimal


eps 2−52 2.220446049250313e-016 3cb0000000000000

realmin 2−1022 2.225073858507201e-308 0010000000000000

realmax (2−eps)×21023 1.797693134862316e+308 7fefffffffffffff

Exemplu calculul lui eps:


function z=myeps()
x=4/3-1;
y=3*x;
z=1-y;
Functia format
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
Numerele denormalizate sunt situate in intervalul dintre
eps*realmin si realmin.

Numerele denormalizate sunt reprezentate luand e = 1023.

Infinitul - Inf, se reprezinta luand e = 1024 si f = 0.

NaN se reprezinta luand e = 1024 si f ≠0.


Exemplu:
>> format short
>> Inf-Inf
ans =
NaN
>> Inf/Inf
ans =
NaN
Functia format

Doua functii care descompun in componente si recompun din


componente numerele in virgula mobila sunt log2 si pow2.

La conversia din double in single, datorita rotunjirii la cel mai


apropiat numar in simpla precizie, valoarea poate fi afectata:

>> format long


>> single(3.14)
ans =
3.1400001
Variabile
• Instructiunile introduse creaza variabile care sunt memorate in
spatiul de lucru. MATLAB nu necesita 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 este
CASE SENSITIVE face deosebirea intre litere mari si mici. A si
a variabile diferite.

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

Nu e necesar sa declarati o variabila.


Tipul si dimensiunea variabilei sunt alocate automat
>> a =-3.75

>> b=[2 5.5] – vector linie - folosesc spatiu sa separ coloanele


b=
2.0000 5.5000

>> c=[2 ; 5.5] – vector coloana - folosesc ; sa separ liniile


c=
2.0000
5.5000

>> d =[ 2 4 6 ; 6 4 2] ce va rezulta ?
Variabile
ATENŢIE ! Daca unei variabile i se da numele unei funcții
predefinite din MATLAB, functia nu mai poate fi folosita pana
cand variabila nu este stearsa.

>> sin(3)
ans = 0.14112

>> sin(3) =2
sin =
0 0 2

>> sin(3)
ans = 2

>> clear sin - sterg variabila sin si pot sa refolosesc functia sin
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 Variabila creata automat in care se returneaza rezultatul unei


expresii care nu a avut niciun nume
pi 3.14159265...
i,j sqrt(-1)
eps Variabila permanentea in care este memorata precizia
relativa in virgula mobila 2.2204e-016
realmin Cel mai mic număr in virgula mobila 2.2251e-308
realmax Cel mai mare număr in virgula mobila 1.7977e+308
inf Infinit, rezultatul impartirii la 0\
NaN Not-a Number rezultatul unor operatii ilegale
Operatori

Operatorii pot si aritmetici,logici si relationali. Operatiile


aritmetice raman valabile ptr nr. complexe si ptr vectori si ptr
matrici a caror elemente sunt nr. complexe.

+ Adunare
- Scadere
* Inmultire
/ Impartire la dreapta sau \ Impartire la stanga
.* Inmultire element cu element
./ Impartire la dreapta element cu element
.\ Impartire la stanga element cu element
Functii de aproximare a numerelor
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

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


Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.

Calcul numeric-grafica-aplicatii M. Ghinea, V Fireteanu.
Mathlab. Ed. Teora 2001

http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf

http://www.mathworks.com/academia/student_center/tutorials/
launchpad.html

Documentatie Octave in format HTML
https://www.gnu.org/software/octave/doc/interpreter/
Curs 2
MATLAB
The Language of Technical
Computing

matrici/vectori/scalari
operatori relationali si logici
instructiuni de control
Curs 2
MATLAB
The Language of Technical
Computing

matrici/vectori/scalari
operatori relationali si logici
instructiuni de control
Baza structurilor de date - Matricea

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

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

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

In Matlab o matrice se poate defini in mai multe feluri:

• 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


trebuie respectate cateva conventii de baza:

• Elementele unui rand sunt separate de blanc-uri sau


virgule.

• Liniile se separa cu semnul punct si virgula ”;”

• Elementele matricei sunt cuprinse intre paranteze


patrate, ”[ ]”.
Exemple - Definirea matricilor
X =[] - matrice goala
A=[11 22; 33 44 ] A= 11 22
33 44
Vector linie Vl=[1 2 3]
Vector coloana Vc=[1; 2; 3]

Matrice cu numere complexe ( in scrierea nr complexe


spatiile trebuie excluse):

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

Nu folositi i, j ca variabile pentru ca suprascrieti valorile


lor si va trebui sa va generati alte variabile: ii=sqrt(-1).
Numere Random -Definirea matricilor
rand, randn, randi - functii MATLAB buit-in ce pot
genera numere aleatoare.

Funcțiile aceastea nu sunt cu adevărat aleatoare ele sunt


pseudoaleatoare

Pornesc cu un seed, o valoare predeterminată sau una


obținuta din ceasul calculatorului. Un proces determină
următorul „număr aleatoriu“, folosind aceast număr ca
seed este generat un alt număr aleator si tot asa.

Seed din functia rand va fi aceeasi ori de cate ori


MATLAB este pornit – si genereaza “global stream” de
numere aleatore.
Numere Random -Definirea matricilor

Functia rng seteaza un seed initial si-l se poate schimba.


(rng – nu e implementata in Octave)

>> rng('shuffle') % foloseste data si ora ptr a genera seed


>> rng(intseed)
>> rng('default')
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]
Concatenarea matricilor/vectorilor
>> help cat
cat (DIM, A, B) permite generarea unor noi
matrici/vectori prin concatenarea unor matrici/vectori
dealungul dimensiunii DIM
cat (2 , A, B) este similar cu [ A,B] - concatenarea pe
orizontala a matricilor A cu B ( matricile A si B trebuie
sa aiba acelai numar de linii) dealungul dimnsiunii 2,
adica cea a coloanelor.
cat (1, A, B) este similar cu [A;B] - concatenarea pe
verticala a matricilor A cu B (matricile A si B trebuie sa
aiba acelasi numar de coloane) dealungul dimnsiunii 1,
adica cea a liniilor.
Exemplu: A=[1 2; 3 4] B=[5 6; 7 8] C=cat(2,A,B) =
[1256
3 4 7 8] D=cat(3,A,B) ?
Concatenarea matricilor/vectorilor

>> help horzcat

horzcat(A1, A2, A3...) – concateneaza pe orizontala lista


de matrici A1, A2, etc ( matricile trebuie sa aiba acelasi
numar de linii)

>> help vertcat

vertcat(A1, A2, A3,...)- concateneaza pe verticala lista de


matrici A1, A2, etc ( matricile trebuie sa aiba acelasi
numar de coloane)
Functii de generare a matricilor de baza
zeros(n,m) - Matrice (n x m) cu toate elementele nule. Daca
matricea e patrata avem zeros(n).

ones(n,m) – Matrice (n x m) cu toate elementele 1. Daca


matricea e patrata avem ones(n).

eye(n) – Matrice unitare de ordinul n, elementele de pe


diagonala principala 1, restul elementelor 0.

diag(v,k) - Matrice banda- vectorul v devine o diagonala


paralela cu diagonala principala aflat la distanta k
deasupra(k>0)sau dedesubtul( k<0) diagonalei
principale iar restul elementelor matricii sunt nule.
Daca k lipseste sau este 0 atunci v va devenii chiar
diagonala principala.
rand(n,m) - Matrice (n x m) cu elemente aleatoare uniform
distribuite.
Generarea vectorilor. Operatorul :

Cu pas liniar v= begin:pas:end



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

v = linspace( vmin, vmax, nr_puncte)

Cu pas logaritmic

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

Operatorul : permite accesarea multipla a elementelor


matricilor.

v= A(:) - rearanjarea elementelor matricei A sub forma
v-vector coloana: coloana1, coloana2... ultima

A(1, 1:3) – elemetelor liniei 1, coloanele1,2,3.

A(2:3, :) - elementele liniilor 2 si 3 si toate coloanele

A (i, 1:2:end) – elementele liniei i, coloane impare end
inseamna “pana la sfarsit”

A(A>0) – doar elementele pozitive (elementele ce
indeplinesc conditia logica)
Accesarea elementelor

Daca se asigneaza o valoare unui element care ocupa o


pozitie in afara dimensiunii maxime a 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(2) = -1.3345
x(5) =abs(x(2)) rezulta
x= [7.2457 -1.3345 4.5777 0 1.3345]
Accesarea elementelor

A = diag(5:-1:1)

A(1:3,[1,3,5]) = A(1:3,[1,3,5]) + ones(3,3)

A= 6 0 1 0 1
1 4 1 0 1
1 0 4 0 1
0 0 0 2 0
0 0 0 0 1
Operatii matriceale

Desfasurate dupa regulile calculului matriceal:

Adunarea A+ B
Scaderea A– B
Inmultirea A* B
Impartirea la dreapta A/B este echivalent cu A⋅B-1,
daca B este o matrice patratica inversabila
Impartirea la stânga A\B este echivalent cu A-1⋅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 .'
Operatii cu tablouri
>>A=[2 3 0; 1 0 -2; 0 0 3]
>>A+2
ans =

4 5 2
3 2 0
2 2 5

>> a1= A(:,1); a2=A(:,2);


>> s= a1+a2 % rezulta vectorul coloana s=[5 1 0]’
>> p = a1*a2 % eroare – nu au dimensiunea corecta
Operatorul . face inmultirea element cu element
>> p= a1.*a2 % rezulta vectorul coloana p=[6 0 0]’
Cateva functii Matlab pentru calcul matriceal


[n,m] = size(A) – returneaza dimensiunea matricei A:
n- nr de linii si m- nr de coloane

det(A) – returneaza determinantul matricei patratice A

rank(A) – returneaza rangul matricei A

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

diag(A) – returneaza diagonala principala a matricei A.

conj(A) – returneaza conjugata matricei complexe A
Cateva functii Matlab pentru calcul vectorial


norm(v,p) – returneaza norma p a vectorului v

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

dot(v,w) – returneaza produsul scalar al vectorilor de
aceeasi lungime v si w. < u w >= |u| |w| * cos α
;

cross(v,w) – returneaza produsulvectorial al vectorilor v
si w, ( au cate 3 elemente)

sum(v) – returneaza suma elementelor vectorului v

length(v) – returneaza lungimea vectorului v, adica
numarul de elemente
Functii Matlab opereaza pe vectori


Aceste functii opereaza pe vectori (linie sau coloana).
Aplicate pe o matrice (m x n) - matricea interpretata in
maniera coloana x coloana - rezultatul fiind un vector
linie

max, min, sort, sum prod, median, mean, std, any,all

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

Relationali < mai mic


> mai mare
<= mai mic sau egal
>= mai mare sau egal
== egal
~= diferit
Operari logici

A B A&&B A||B ~A XOR(A,B)

0 0 0 0 1 0
1 0 0 1 0 1
0 1 0 1 1 1
1 1 1 1 0 0
Ordinea operatiilor

() % paranteze
‘ ^ % transpusa si ridicare la putere
~ % negatia
* /\ % inmultirea si impartirea
+- % adunarea si scaderea
: % range
< % operatorii relationali
&& % and
|| % or
Operatori relationali si logici
Utilizati la crearea expresiilor logice

Ca date de intrare sunt acceptate doar datele numerice:
-valoarea logica „adevrat” (A) - orice numar diferit de 0
-valoarea logica “fals” (F) - valoarea 0

Datele de iesire nu pot fi decat numerele 1 sau 0,
interpretate ca fiind valorile logice A, respectiv F.

Operatorii relationali pot fi folositi pentru a compara:

a) Doua matrici de aceiasi dimensiune. Rezultatul este


o matrice, compararea se face element cu element.
b) O matrice cu un scalar. Rezultatul este o matrice, iar
compararea se face prin compararea fiecarui element al
matricii cu scalarul dat.
Instructiuni de control logic

Instructiune repetitive cu numar specificat de pasi: for

Instructiune repetitive cu conditie logica: while

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

Instructiune de terminare fortata a unui ciclu: break

Instructiune de returnare a executiei catre functia
apelanta sau catre tastatura: return

Instructiune pentru inchiderea ciclurilor “for”, “while” si
“if”: end
Instructiunea if simpla
Instructiunea if are mai multe forme, cea simpla este :
if expresie_logica
grup de instruciuni;
end

Daca conditia exprimata de expresie_logica este adevarata


se executa grupul de instructiuni si apoi se trece la
executia comenzilor ce urmeaza dupa end.

Daca conditia nu este adevarata se trece la executia


comenzilor de dupa end.

Toate comenzile din grupul de instructiuni trebuie sa


se termine cu ;
Instructiunea if simpla
>> x=2;
>> if x<10
x=x+1;
end
>> x % ce se va afisa ?
function [] =testif (a, b)
if(a < b)
disp(‘ primul numar mai mic ca al doilea numar’ );
disp( [num2str(a) ‘ < ‘ num2str(b)] ) ;
end
>> testif(4,2) % ce se va afisa ?
adaug in corpul functiei
if ( ( a>0) && (b>0) )
disp (‘ambele numere sunt pozitive’);
>> testif(4,2) % ce se va afisa ?
Instructiunea if cu clauza else
Este utilizata cand se doreste executia unui grup de
instructiuni pe conditie adevarata si a altui grup de
instructiuni pe conditie falsa :
if expresie_logica
grup1 de instruciuni;
else
grup2 de instructiuni;
end
Exemplu: >> interval =1.9;
>> if interval<1
x=interval/10;
else
x=0.1;
end
>> x
Instructiunea if cu clauza elseif
Datorita unor conditii complexe, uneori este necesara
imbricarea comenzilor if. Pentru aceste cazuri exista
optiunea elseif: Exemplu:
if conditie1 >>n=7;
grup1 de instruciuni; >>ind=1;
elseif conditie2 >> if n>10
grup2 de instructiuni; ind=10;
elseif conditie3 elseif n>5
grup3 de instructiuni; ind=5;
......................... else
else ind=0;
grupn de instructiuni; end
end >> ind
Instructiunea switch-case
In cazul unor ramificari multiple pentru a preveni scrierea
unor secvente if imbricate complexe se utilizeaza
comanda switch-case:
Exemplu:
switch expresie >>switch punctaj <=10
case valoare1 >>case {9,10}
secventa 1 de comenzi nota = ‘5’;
case valoare2 case 8
secventa 2 de comenzi nota =’4.5’;
……………………………. otherwise
nota = ‘slaba’
otherwise end
secventa n de comenzi >> punctaj =8
end
Instructiunea for
for variabila=expresie
grup de instructiuni;
end
-Daca rezultatul evalurii expresiei este o matrice vida, atunci se sare
direct la prima comanda dupa end fara sa se execute grupul de
instructiuni;
- Daca rezultatul evaluarii expresiei este o matrice cu n coloane,
atunci grupul de instructiuni se va executa de n ori. Variabila va lua
pe rand ca valoare coloana k la executia k si poate fi utilizata cu
aceasta valoare in grupul de instructiuni;
- Daca rezultatul evaluarii expresiei este un vector cu n elemente,
atunci grupul de instructiuni se va executa de n ori, la a k-a executie
variabila luand ca valoare elementul de ordin k din vector;
- Daca rezultatul evaluarii expresiei este un scalar grupul de
instructiuni se va executa o singur data, iar variabila va lua ca
valoare acel scalar;
- Expresia poate fi de forma: k=initial:pas:final;
Instructiunea for imbricata
Exemplu: scrieti o functie care calculeaza n!
function y =fact(n)
y=1;
for ind=1:n
y=y*ind;
end
Apelez functia : >> y=fact(6)
Exemplu:sa se genereze o matrice Hilbert de ordinul 4,ale
carei elemente sunt date de expresia H(a,b)=1/(a+b-1)
n=4;
for a=1:n
for b=1:n
H(a,b) = 1/(a+b-1);
end
end
Instructiunea while
Utilizata pentru repetarea unui set de instructiuni atat timp
cat o conditie specificata este adevarata.
while expresie
grup de instructiuni
end
Exista posibilitatea ca pentru o conditie data sa se cicleze
la infinit. Pentru a evita acest lucru este bine sa
introduceti un numar maxim de iteratii:
it=1;
itmax=1000;
while conditie & (it<itmax)
grup de instructiuni;
it=it+1;
end
Instructiunea while
Exemplu:ghicesc numarul
function[]=ghici(nr)
zic = input(‘Introduceti un nr mai mic ca 10: ’)
if (zic == nr)
disp(‘Felicitari!’)
end
end % trebuie sa rulez de mai multe ori functia

function[]=ghici(nr)
zic = input(‘Introduceti un nr mai mic ca 10: ’)
while (zic ~= nr)
zic = input(‘Introduceti un nr mai mic ca 10: ’)
end
disp(‘Felicitari!’)
end
Instructiunea while

Exemplu:calculeaza suma primelor elemente pozitive ale


vectorului v

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

end
Instructiunea break
Iesirea fortata dintr-o bucla, inainte de terminarea ei, da
controlul primei comenzi de dupa end-ul buclei - pentru
ciclurile for sau while
Se recomanda a fi utilizata daca o conditie de eroare a fost
detectata
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-1),5);
end
>> x
Instructiunea break
Iesirea fortata dintr-o bucla, inainte de terminarea ei, da
controlul primei comenzi de dupa end-ul buclei - pentru
ciclurile for sau while
Se recomanda a fi utilizata daca o conditie de eroare a fost
detectata
In cazul unor cicluri imbricate comanda iesirea din ciclul
cel mai interior
Exemplu: inlocuiesc elementele vectorului cu restul
impartirii lor la 5 .
>>x = [1 12 NaN 7 8]
>> for ind=1:length(x)
if x(ind)==NaN
breakend
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
Vectorizarea codului – MATLAB fara bucle !!
MATLAB rapid pe operatii cu vectori si matrici si lent cu bucle!
Exemplu:
an = n, bn = 1000-� n ptr n = 1... 1000. Calculati
psum=∑ 1000n=1 an bn

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

Recunoastem ca psum este produsul vectorilor a and b, abT


psum = a*b' %Vectorizarea … solutie buna!

Mai multe informatii despre vectorizare - MathWorks' Code


Vectorization Guide 2
Functii C in MATLAB – MEX files

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

- niciodata nu trebuiesc compilate

- de fiecare data MATLAB interpreteaza fiecare linie din M-files

- procesul este lent pentru functii mari si complicate, in special


pentru cele cu multe bucle →

MATLAB poate rula functii scrise in C - fisierele care contin


codul sursa - fisiere MEX

The mexFunctions nu sunt construite cu scopul de a inlocui


functiile Built-In din MATLAB.
MEX files – interfata cu MATLAB

Legatura dintre functiile Built-In MATLAB si codul C se realizeaza


prin functia mexFunction (similara cu functia main din C)

#include "mex.h" /* Aceasta e obligatorie */


#include "math.h" /*Se pot include orice librarii C necesare */

Intotdeauna functia mexFunction arata asa:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs,


const mxArray *prhs[])
{
% scrieti codul aici *
return;
}
MEX files – interfata cu MATLAB
Sunt 4 parametrii de intrare care corespund apelului de functie
(exemplu [ z0, z1] = vasilica (x,y,z) )

nlhs (type= int) – reprezinta numarul de argumente“ left hand side”.


(nlds =2, corespunzatoare lui z0 si z1)

plhs (type = tablou de pointeri catre mxArray) – acest parametru


este de fapt argumentul de iesire – mxArray este structura MATLAB
care tine datele, fiecare element din plhs tine un mxArray de date.

nrhs(type= int)-reprezinta numarul de argumente“ right hand side”.

prhs (type= const tablou de pointeri catre mxArray) – acest tablou


tine toti pointerii catre tabloul datelor de intare mxArray
(prhs[0] tine tabloul mxArray pentru x, prhs[1] tine tabloul
mxArray pentru y, etc).)
Crearea datelor in MEX files
In MEX-Files structura MATLAB folosita pentru stocarea datelor
este mxArray – aceasta structura poate tine date de tip
real, complex, matrici, siruri de caractere si alte stucturi de date
MATLAB.

In exemplul [z0, z1] = vasilica(x,y,z) presupunem ca


x – matrice 2D, y – sir, z – intreg

Cum extragem si folosim datele ?

Avem acces la parametrul de intrare x printr-un pointer tinut in


tabloul prhs. In C, cand referim un tablou printr-un index, variabila
este automat dereferentiata (ex: nu folosim *).

Pentru claritate vom copia variabila x peste pointerul catre


mxArray si o vom numi xData ( pasul acesta nu e nevoie sa-l faceti
ca sa va mearga codul, il fac doar sa intelegeti mai usor)
Crearea datelor de tip matrice in MEX files
% inauntul functiei mexFunction
% fac declaratii
mxArray *xData;
double *xValues;
int i,j;
int rowLen, colLen;
double avg;

xData = prhs[0]; % copiex pointerul de intare x, in xData


xValues = mxGetPr(xData); % iau matricea x
rowLen = mxGetN(xData); %intoarce un intreg,lungimea liniilor
colLen = mxGetM(xData); %intoarce un intreg,lungimea coloanelor

Functia mxGetPr – obtine un pointer la datele de tip real, xData.


(similar putem folosi functictia mxGetPi pentru date complexe).
Daca traversam matricea liniar, si vrem sa sarim la o anumita pozitie
(a,b) vom scrie codul asa: a*colLen+b – mult mai eficient.
Crearea datelor de tip matrice in MEX files
%inauntul functiei mexFunction

%Printez variabila avg pentru fiecare coloana la consola MATLAB


for(i=0;i<rowLen;i++)
{
avg=0;
for(j=0;j<colLen;j++)
{
avg += xValues[(i*colLen)+j];
%alta metoda ar fi: avg += *xValues++;
}
avg = avg/colLen;
printf("Media liniilor %d, este %d",i,(int)avg);
}
Crearea datelor de tip string in MEX files
Similar pentru a obtine un sir (strings), dar folosind alte functii:

% inauntul functiei mexFunction

mxArray * yData; % declaratii


int yLength;
char *TheString;

yData = prhs[1]; % copiez pointerul de intrare y, in yData

yLength = mxGetN(yData)+1; % fac variabila "TheString" sa


pointeze la un string
TheString = mxCalloc(yLength, sizeof(char)); % mxCalloc este
similar cu malloc din C
mxGetString(yData,TheString,yLength);
Crearea datelor de tip intreg in MEX files

Similar pentru a obtine un intreg, dar folosind alte functii:

% inauntul functiei mexFunction

mxArray *zData; %declaratii


int Num;

zData = prhs[2]; % copiez pointerul de intrare z in zData

Num = (int)(mxGetScalar(zData)); % iau intregul

printf("Intregul meu este: %d",Num); % il printez pe ecran


Exportul datelor in MATLAB
Pentru asignarea datelor/valorile de intoarcere in parametrii de iesire
(left hand side) trebuie sa alocam memorie pentru structurile de
date folosite.
Exemplu cum sa intorc o matrice 2D : intrarea va fi x si va intoarce
in z0, o copie a matricii cu fiecare element din x inmultit cu 2.

%inauntrul functiei mexFunction


mxArray * xData; % declaratii
double *xValues, *outArray;
int i,j;
int rowLen, colLen;

xData = prhs[0]; % copiez pointerul de intrare x

xValues = mxGetPr(xData); % iau matricea


rowLen = mxGetN(xData);
colLen = mxGetM(xData);
Exportul datelor in MATLAB

% Aloc memorie si asignez pointerul de iesire


plhs[0] = mxCreateDoubleMatrix(colLen, rowLen, mxREAL);
%mxReal pentru ca acesta e tipul nostru de date

%iau pointerul datelor in spatiul de memorie nou alocat


outArray = mxGetPr(plhs[0]);

% copiez matricea si multiplic cu 2


for(i=0;i<rowLen;i++)
{
for(j=0;j<colLen;j++)
{
outArray[(i*colLen)+j] = 2*xValues[(i*colLen)+j];
}
}
Apelez functiile Built-In MATLAB din MEX files

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

% inauntrul functiei mexFunction

mxArray *rezultat; % declaratii


mxArray *arg[2];

% pun ceva in parametrii de intrare


arg[0] = mxCreateDoubleMatrix(1, 20, mxREAL);
arg[1] = mxCreateDoubleMatrix(1, 10, mxREAL);

%Apelez functia
mexCallMATLAB(1,&rezultat,2,arg,"conv");

Variabila rezultat pointeaza catre mxArray si puteti extrage datele


Apelez functiile Built-In MATLAB din MEX files

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

% inauntrul functiei mexFunction

mxArray *rezultat; % declaratii


mxArray *arg[2];

% pun ceva in parametrii de intrare


arg[0] = mxCreateDoubleMatrix(1, 20, mxREAL);
arg[1] = mxCreateDoubleMatrix(1, 10, mxREAL);

%Apelez functia
mexCallMATLAB(1,&rezultat,2,arg,"conv");

Variabila rezultat pointeaza catre mxArray si puteti extrage datele


Compilarea MEX files
Compilarea fisierelor MEX similara cu compilarea cu gcc.

De la command prompt MATLAB (directorul curent trebuie sa fie


locatia fisierului sursa MEX) aplica comanda:
>> mex vasilica.c

MATLAB va va intreba sa alegeti un compilator si va produce


functia [z0,z1] = vasilica(x,y,z) (numele fisierului identic cu numele
functiei)

Dupa compilare MATLAB produce fisierul binar MEX care poate fi


apelat ca o functie built-in MATLAB. Pentru a apela aceasta
functie, trebuie sa fiti in acelasi director cu binarul !

Fisierul binar are diferite extensii depinzand de sistemul de operare


pe care rulati:( ex: Windows=.dll MacOSX=.mexmac
Solaris=.mexsol Linux=.mexlx).
Alte functii utile
Lista completa a functiilor si exemple poate fi gasita MATLAB help

Alte example gasiti si in directorul extern MATLAB


(MATLAB/extern/examples/mx or mex).

mxDuplicateArray
mexErrMsgTxt
mxMalloc
mxRealloc
mxCreateString
mxDestroyArray
mxFree
mxGetCell
mxGetData
…..
Bibliografie


Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.

Instructiuni Conditionate
Sumarul de la pagina 136
Exercitiile din capitolul 4 : 1, 6, 10, 16, 27, 30, 31

Bucle
Sumarul de la paina 183
Exercitiile din capitolul 5 : 1, 6, 7, 8, 9, 13, 40
Exercitiile din capitolul 10 : 1, 2, 6, 7
Curs 3
MATLAB
The Language of Technical
Computing

calcul simbolic
polinoame
sisteme de ecuatii liniare
reprezentari grafice
Bibliografie


Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.

Instructiuni Conditionate
Sumarul de la pagina 136
Exercitiile din capitolul 4 : 1, 6, 10, 16, 27, 30, 31

Bucle
Sumarul de la paina 183
Exercitiile din capitolul 5 : 1, 6, 7, 8, 9, 13, 40
Exercitiile din capitolul 10 : 1, 2, 6, 7
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 1<C<10 ( recomandabil C=10)


p(calculator) precizia calculatorului, pentru PC-uri ~ 2.2*10-16
cond(A) functia Matlab- numarul de conditie al matricii referitor
la inversare.

Precizia de calcul, in cel mai defavorabil caz: 2.2*10-15 cond(A)

Pentru calcule cu numere foarte mari sau foarte mici folositi


Symbolic Math Toolbox → precizie vs. viteza de calcul
Precizia solutiei
Vrem sa calculam exp(7.0873e002). ans=?

Solutie folosind un mic artificiu:


a = 7.0873e2;
x = a/log(10);
D = floor(x); % D va fi un intreg, puterea lui 10
F = 10^(x-D); % va fi F mantisa

F = 6.27376373225551 % mantisa
D = 307 % exponentul (power of ten)

ans = 6.273763732256170e+307

Symbolic Math Toolbox - functia vpa (S,D)


Tipuri de date in Matlab
Un tip de date defineste un set de valori si operatiile permise pe
aceste valori.

Tipurile de date fundamentale din Matlab:


int16 numar intreg 16-biti
single numar precizie simpla (32 biti)
double numar precizie dubla (implicit 64 biti )
logical numar logical, boolean
char sir de caractere
sym obiect simbolic

Un obiect simbolic este o structura de date care stocheaza


reprezentarea unui simbol – folosit pentru reprezentarea
variabilelor, expresiilor si matricilor simbolice.
Calcul simbolic
Toolbox-ul Symbolic Math - lista completa a functiilor si
comenzilor Matlab pentru calcul simbolic.

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

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

Definirea/crearea obiectelor simbolice se face cu comanda sym (un
obiect) sau syms (mai multe obiecte). Pentru crearea expresiilor
simbolice constante, trebuie folosita comanda sym. ( f = sym('5') e
diferita de f = 5, care nu defineste f ca o expresie simbolica)
Calcul simbolic


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

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

Intotdeauna putem obtine valoarea numerica a unui simbol cu


comanda double( )
Rezultatele simbolice nu se indenteaza!
Functii/comenzi pentru calcul simbolic

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

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

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

collect(f,v) - ordonam in raport cu puterile lui v o expresie f. Daca
variabila v lipseste se considera implicit x.
>> syms x y
>> collect((x+y)*(x^2+y^2+1))
ans =
x^3+y*x^2+(y^2+1)*x+y*(y^2+1)
Functii/comenzi pentru calcul simbolic

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

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

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

solve('eq1', 'eq2', …'eqn', 'var1', 'var2'...'varn')- pentru
rezolvarea ecuatiilor si a sistemelor de ecuatii unde eqn sunt
expresiile simbolice reprezentand ecuatiile, iar varn sunt variabilele
simbolice ale necunoscutelor. Se presupune ca eq=0 (ducem toti
termenii in stanga!)
Functii simbolice
Unele functii simbolice au primit acelasi nume ca cele pentru
calcule pentru simplicitate.

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

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

rank - functie care calculeaza rangul maxim al unei matrice simbolice

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

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

diff - derivata unei functii date. Variabila de derivare este considerata
implicit x.
>> diff(x^5*log(x^2+1)) ans = 5*x^4*log(x^2+1)+2*x^6/(x^2+1)
-derivate de ordin superior indic ca argument a lui diff ordinul derivatei
>> diff(x^5*log(x^2+1), 3)
-derivata in functie de alta variabila decat x, indicata intre apostrofi – se
foloseste in calculul derivatelor partiale.
>>diff(t*sin(t^2+1),'t') ans = sin(t^2+1)+2*t^2*cos(t^2+1)
>>f (x, y) = x3 *sin y diff(diff(x^3*sin(y),2),'y') ans = 6*x*cos(y)
Functii simbolice
Functiile int si diff sunt inverse.

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

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

Acest lucru ne permite sa facem diverse calcule complexe

>>int(int(3*x^2,sin(t),1),t) ans = t+1/3*sin(t)^2*cos(t)+2/3*cos(t)


ezplot(f)- graficul expresiei f=f(x) in intervalul implicit
-2*pi < x < 2*pi.
Polinoame

Notatia utilizata la polinoame este una simbolica.

Matlab utilizeaza in calcule un vector ce are ca elemente
coeficientii monoamelor.
Ex :se foloseste vectorul p=[1 0 0 0 -5 4] pentru a
reprezenta polinomul: p=x5 - 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=2-
aproximare 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:
-0.2969x4 +1.4531x3 - 2.5609x2 + 2.3776x + 0.0183
Manipularea polinoamelor

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

Exemplu :pentru functia sqrt(x) in pct 1.1 avem valorile:


>> sqrt(1.1) ans =1.0488
>> interp1(x,y,1.1,'nearest') ans =1.0954
>> interp1(x,y,1.1,'linear') ans =1.0477
>> interp1(x,y,1.1,'spline') ans =1.0489
>> interp1(x,y,1.1,'cubic') ans = 1.0488
Rezolvarea sistemelor de ecuatii liniare

Pe cale numerica, in Matlab se pot rezolva:



sisteme compatibile determinate

sisteme compatibile nedeterminate (se pot gasi maxim 2
solutii particulare)
In rezolvarea sistemelor liniare in Matlab se presupune forma
matriceala:
A*X=b
respectiv,
Y*A=b
A-matricea coeficientilor
b-vectorul coloana al termenilor liberi si
X, Y- vectorul coloana/linie al necunoscutelor.

Un sistem de ecuatii liniare este definit in Matlab prin definirea


matricei A si a vecorului b.
Rezolvarea sistemelor compatibile determinate

Pot fi rezolvate prin doua metode numerice diferite:



Metoda inversarii matriceale

Metoda impartirii la stanga/dreapta

Metoda inversarii matriceale

In cazul unui sistem patratic, solutia sistemului este obtinuta


prin inversarea matricei coeficientilor si inmultirea ei cu
vectorul termenilor liberi:
X = inv(A) * b

respectiv,

Y = b * inv(A)
Rezolvarea sistemelor compatibile determinate
In Matlab, aceasta metoda nu necesita determinarea inversei
matricei coeficienţilor.

S-a introdus operatorul \ care calculeaza solutia sistemelor de


ecuatii liniare prin metoda eliminarii in versiunea Gauss.

Metoda impartirii la stanga /dreapta

X=A\b
respectiv,
Y=b/A
Soluia cu operatorul / este mult mai rapida decat cu formula clasica
a inversarii, acest fapt devenind observabil atunci cand matricile
sunt de mari dimensiuni. Astfel pentru matrici de ordinul 1000
soluia / a fost de 400 ori mai rapida.
Rezolvarea sistemelor compatibile nedeterminate

In cazul sistemelor compatibile nedeterminate nu se pot


determina pe cale numerica toate solutiile, acestea fiind in
numar infinit.

Se poate determina o solutie particulara folosind una din


urmatoarele doua metode:

Metoda pseudo-inversarii matriceale

Metoda impartirii la stanga/dreapta
Metoda pseudo-inversarii matriceale

Solutia sistemului este obtinuta prin inmultirea pseudo-inversei


matricei coeficientilor cu vectorul termenilor liberi. Se
utilizata pseudo-inversa Moore-Penrose a unei matrici -
functia pinv: X = pinv(A) * b
respectiv,
Y = b * pinv(A)
Rezolvarea sistemelor compatibile nedeterminate

Metoda impartirii la stanga /dreapta

X=A\b
respectiv,
Y=b/A

In acest caz, aceasta metoda realizeaza cautarea acelei solutii a


sistemului care minimizeaza (in sensul celor mai mici patrate)
norma euclidiana a vectorului A*X-b si care are cel mult rang A
componente nenule.
Rezolvarea sistemelor de ecuaţii liniare folosind
Symbolic Math Toolbox

Metodele de rezolvare precizate anterior sunt valabile si pentru


rezolvarea pe cale simbolica:
1. metoda inversarii / metoda pseudo-inversarii;
2. metoda impartirii la stanga / dreapta.

Rezolvarea pe cale simbolica necesita de obicei studiul sistemului


si efectuarea solutionarii pe cazuri.
Reprezentari grafice in plan 2D

Matlab permite reprezentarea in plan a graficelor de


functii si a suprafetelor poligonale.

Reprezentarile grafice ale functiilor pot fi facute in mai


multe tipuri de coordonate:

carteziene,

polare,

logaritmice,

semilogaritmice
Reprezentari grafice in plan- 2D
O parte din functiile Matlab destinate reprezentarilor
grafice 2D:

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

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

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

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

semilogx (x,y,s), semilogy(x,y,s) -grafice in coordonate
X-Y semilogaritmice (in baza 10)

polar(theta,rho,s) -grafice in coordonate polare
Reprezentari grafice in plan - 2D


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

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

Culorile pot fi urmatoarele simboluri:
r (rosu), g (verde), b (albastru), c (bleu), m (mov),
y (galben), k (negru), w (alb).
Reprezentari grafice in spatiu- 3D
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

S-ar putea să vă placă și