Sunteți pe pagina 1din 164

Laborator 1

Introducere MATLAB

numere/variabile/fisiere script
Help

• Listarea subiectelor de help se face cu comanda


>> help

HELP topics:
matlab\general - General purpose commands.
matlab\ops - Operators and special characters.
matlab\lang - Programming language constructs.
matlab\elmat-Elementary matrices and matrix
manipulation.
matlab\elfun - Elementary math functions.
matlab\specfun - Specialized math functions.
matlab\matfun - Matrix functions - numerical linear
algebra.
Help
Aceasta comanda explica cum functioneaza help-ul

>> help help

• Utilizand help-ul in linie de comanda sa se gaseasca


functia Matlab ptr calculul arctangentei si sa se
specifice sintaxa de apel a acesteia.

• help numefunctie Enter


help sin
Help (1)
>> help

• Din lista afisata se constata ca nu exista un director


destinat doar functiilor trigonometrice.
• arctangenta e o functie elementare. Tastati
>> help elfun
• Pentru a obttine doar un ecran la un moment dat se
poate introduce intai comanda more on, adica:
>> more on
>> help elfun
>> help atan

Pentru a trece la urmatoarea pagina se poate apasa


orice tasta.
Observatii
1. Denumirile functiilor Matlab se scriu cu litere mici. Ele
apar scrise in help cu litere mari doar pentru a fi scoase
in evidenta.

2. Daca s-ar fi presupus ca denumirea functiei arctangenta


din Matlab este aceeasi cu cea folosita in matematica,
arctg, si s-ar fi apelat help-ul functiei cu această
denumire:
>> help arctg
Matlab afiseaza un mesaj de eroare, anuntand ca nu
gaseste fisierul-M arctg (arctg.m not found.).

3. Denumirea functiei Matlab si denumirea fisierului in


care este implementată functia trebuie sa fie identice.
Help (2)

O alta facilitate este utilizarea comenzii lookfor care


cauta in fisierele de help un cuvant cheie.

sintaxa este : lookfor cuvant-cheie

Sa se gaseasca functia Matlab pentru functia care


calculeaza radical indice 3
Help (3)
Help in modul on-line.Exista si un sistem bazat pe
hipertext, care da detalii asupra asupra celor mai
multe comenzi si exemple.

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

>> doc

Apasati butonul Help (cel cu ? galben) din


interfata
Asignarea

Asignarea - numarul din dreapta, dupa semnul = se va stoca


intr-o variabila pentru a putea fi utilizat.

Dupa orice instructiune tastati Enter

X=5
x=10;
y=7
Y=20.5;
Z=x+Y
Comenzi speciale

clear X - şterge variabila X din spaţiul de lucru;

clc - şterge ecranul de comanda;

who – permite vizualizarea tuturor variabilelor definite


anterior

clear all - şterge toate variabilele din spaţiul de lucru;

… - semn de continuare a unei instrucţiuni pe a doua linie;

% - plasat la începutul liniei, desemnează o linie de tip


comentariu;
Comenzi
path – listeaza toate directoarele din MATLAB
pwd – intoarce numele directorului de lucru curent
cd – schimba directorul curent
dir sau ls – listeaza continutul directorului curent

edit vas.m – deschide editorul de text ptr a crea fisierul


type vas.m – afiseaza pe ecran continutul fisierului
delete vas.m – sterge fisierul
what – listeaza fisierele *.m din directorul curent

diary azi1 – salveaza toate comenzile din sesiunea curenta


in fisierul azi1.

why ce face aceasta comanda?


Fractia de Aur (Golden Ratio)
x= alege un numar
x=sqrt(1+x) % square root

Folositi tasta sageata in sus pentru a itera ultima


comanda x= sqrt(1+x) de mai multe ori.
Exemplu :
x=3
x=sqrt(1+x)
2 % apoi apas tasta sageata si apare x=sqrt(1+x)
x=sqrt(1+x)
1.7321 % se ia valoarea curenta a lui x si se executa

Dupa 10 iteratii valoarea printata va ramane constanta


1.6180
Fractia de Aur (Golden Ratio)
Incercati cu diferite numere intregi, veti obtine acelasi
rezultat 1.6180 dupa mai multe iteratii

Matlab realizeaza aceste calcule pe 16 numere, dar


afiseaza doar 5

Schimbati modul de afisare cu urmatoarea instructiune:


format long

Veti obtine acest numar dupa repetarea iteratiilor:

x=1.618033988749895 - Golden Ration = (1+sqrt(5))/2

Am rezolvat ecuatia x=sqrt(1+x) ca la MATEMATICA


Schimbati modul de afisare : format short
Calcule

Operatiile aritmetice de baza sunt


+ - adunare
- - scadere
* - inmultire
/ - impartire
^ - ridicarea la putere

Ordinea implicita a operatiilor se poate schimba cu


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

• Se observa aparitia variabilei ans – variabila in care


programul introduce automat rezultatul unei
comenzi ce nu defineste o variabila proprie.
Calcule
• Efectuati urmatoarele calcule:

Se va scrie comanda:
(sin(pi/4)+cos(pi/4))/(sqrt(5+log(7))-1.5^0.17)

Argumentele functiilor trigonometrice sunt in


radiani: sin(90) ? scriem sin(90*pi/180)
Calcule

Care dintre expresii e mai mare?


Calcule

Sa se calculeze:

Raspuns: a) 1.6180 b) 6.5919 c) 7.3696


Calcule
Sa se calculeze:

Raspuns: a) 0.3849 b) 2.4231 c) 0.5576


Calcule cu constante speciale
Sa se calculeze:

realmax+2 =

inf-inf =

nan+2 =

realmax-realmin =

inf/inf =

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

Insemana ca ptr valori mici ale lui h, fractiile din limitele


de mai sus aproximeaza derivata.

Exercitiu:
Luand f(x) =sin x sa se calculeze eroarea dintre valoarea
exacta a derivatei in pi/4 si aceste aproximari ptr h:
a) 10-6 b)10-8 c) 10-10 d) 10-12 e) 10-14
Calcule
Erorile date de:
e1=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4))/h) respectiv
e2=abs(cos(pi/4)-(sin(pi/4+h)-sin(pi/4-h))/h/2)

a) h=0.000001 e1=3.5344e-007 e2=5.2650e-011


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

Fractiile nu tind la derivata in pi/4!

Erorile se cumuleaza! Si functiile elementare sin(x) si cos(x) au


erori de aproximare. In plus aici avem o nedeterminare 0/0.

Ptr masinile pe 32 biti folositi valori la jumatatea preciziei


maxime 10-7, 10-8.
Afisarea/ conversia caracterelor
Un caracter este reprezentat folosind ‘ ‘ (ex: ‘a’ sau ‘x’)

Caracterele sunt puse intr-o secventa ordonata = character


encoding, fiecarui caracter i se atribuie o valoare intreaga =
ASCII

Pentru a converti un caracter la valoarea sa numerica se


foloseste functia double () si invers functia char()
>>double(‘a’)
97

>> char(97)
a
Afisarea

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

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

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

Comenzile: warning on, warning off, lasterr, lastwarn

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

Introducerea datelor se face cu functia input:
x= input('Introduceti valoarea lui x = ')
Fisier script

In MATLAB programele sursa (M-files) sunt de doua


feluri: fisiere script sau fisiere functie
Un script este pur și simplu un fișier care conține o serie de comenzi
MATLAB.
Pentru calcule mai mari și mai complicate este mai bine să scrie ți toate
comenzile într-un fișier script si nu la linia de comanda, in Command Window
Orice comandă MATLAB (adică orice se poate rula în Command Window)
poate fi plasată într-un script; nu sunt necesare declarații și delimitatori de
început / sfârșit.
La rularea scriptului, toate comenzile din acesta vor fi executate secven țial la
fel ca orice alt limbaj de programare
Scripturile trebuie salvate într-un fișier <numefisier> .m înainte de a putea fi
rulate.
Pentru a rula un script, folderul curent din MATLAB trebuie schimbat în
folderul care conține scriptul (Command cd).
Avantajele fisierelor script

 Utilizatorul poate automatiza sarcini.


 Folosește indentare pentru a ajuta la citirea și scrierea codului mai confortabil
 Permite depanare: utilizatorul poate rula bucăți individuale de cod eviden țiind
o bucată și apăsând tasta F9
 Permite utilizarea funcțiilor tic/toc pentru a analiza performan ța programului.

 Pentru a elimina variabilele anterioare din spațiul de lucru este indicat să


plasați comanda clear all la începutul scriptului.
 Este o bună practică de utilizat; la sfârșitul comenzilor atunci când scrie ți
scripturi pentru a inhiba ieșirea nedorită
 Când un script rulează simbolul >> de la terminal va dispărea până când se
termină, împiedicând introducerea oricăror comenzi.
 Pentru a termina scriptul înainte de încheiere și a recâ știga controlul, apăsa ți
Ctrl + C.
Fisier script

M- files se pot crea cu orice editor de texte, salvandu-le


cu extensia .m
>> edit vasile.m

Scriptul = fisier ce contine o succesiune de comenzi /


instructiuni, care se pot edita, se pot repeta etc.

Rularea unui script se face tastand numele fisierului


(fara extensie) in linia de comanda.
>> vasile
Exemplu: Script

Crearea unui script ce are numele volsf si care va calcula


volumul unei sfere :

Selectati: File\New\M-file script sau scrieti comanda:


>> edit volsf.m
In fisier scrieti urmatoarele:
raza = 5
volum= 4/3*pi*r^3

Selectati: File\Save\
In Command window dati comanda:
>>volsf % executam scriptul scriind doar numele lui
Exemplu: Script

Adaugati urmatoarele instructiuni in volsf.m la sfarsit:

disp(‘Volumul unei sfere de raza ’);


disp( [ num2str(raza) ‘este’ [num2str(volum] );

Salvati si rulati scriptul

Scrieti in command window :


>>volsf
Exemplu: Script
Crearea unui script ce are numele sindoix si va calcula
sin2x:
Selectati: File\New\M-file sau scieti comanda:
>> edit
x= input(‘ Introduceti valoarea lui x=’)
y=2*sin(x).*cos(x);

Selectati: File\Save As\sindoix.m

In Command window dati comenzile:


>>sindoix % executam scriptul scriind doar numele
>> Introduceti valoarea lui x=pi/3
>> y=0.8660
Rulati din nou scriptul ptr x=[pi/3 pi/4 pi/6 pi/2]
De citit si exercitii

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 1 – Introducere in MATLAB ( fara subcapitolul de


Random Numbers)

Exercitiile din Capitolul 1 : 1, 6, 9, 13, 15, 16, 22, 23, 28, 29, 30

Capitolul – Introducere in programarea MATLAB subcapitolele


3.2 , 3.3, 3.4 3.6

Exercitiile din Capitolul 3 : 1, 2, 5, 6, 16

Capitolul 9
De citit si exercitii

Functii
Sectiunile 3.7 6.1 10.1 si 10.2
Exercitiile din Capitolul 3 : 24, 25, 29, 37
Exercitiile din Capitolul 10 : 1,2,6,7

[1] MathWorks. (2013). “Scripts vs. Functions” [Online]. Available:


http://www.mathworks.com/help/matlab/matlab_prog/scripts-and-functions.html
Laborator 2

Introducere MATLAB

Fisiere functii / functii uzuale


Algoritm
Algoritm = este o secvență finită de opera ții lipsite de
ambiguitate sau instrucțiuni pentru a rezolva o problemă și
de a obține un rezultat (wiki)

Pentru rezolvarea unei sarcini mai complexe dorim să


impartim in subrutine,sa putem plasa parametrii.
PARAMETRII pot fi de input- parametru de intrare sau de
output - parametru de ieșire, in care primim un răspuns.

Fisierele functie pot primi parametrii de intrare si pot


intorce parametrii de iesire.

Funcțiile trebuie definite într-un fișier independent, care


trebuie salvat în folderul de lucru
Script vs Functie
Funcțiile sunt utile pentru automatizarea sarcinilor și subrutinelor
utilizate frecvent.
Scriem un script pentru a calcula aria unui triunghi:
b=5;
h=3;
a=(b.*h)*0.5
Pentru a efectua din nou acest calcul pentru un alt triunghi, ar trebui să
modificăm valorile lui b și h din script și să-l reexecutăm.

Putem converti această sarcină într-o funcție [1]


function a = arietriunghi (b, h)
a = 0.5 * (b. * h);
end

Calculul poate fi acum efectuat în mod repetat fără modificări:


a1=arietriunghi(2,10)
a2= arietriunghi(3,20)
Fisier functie

Prima linie din fisierul functiei trebuie sa fie de forma:
function [param-iesire]=nume-functie(param-intrare)

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

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

Variabilele folosite sunt locale, nu sunt disponibile in
Workspace.

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

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

Exemplu: definirea unui functii cu numele volsfera ce va


calcula volumul unei sferei :

Selectati: File\New\M-file sau comanda


>> edit volsfera.m

function v = volsfera(r)
v= 4/3*pi*r^3;
end

In Command window dati comenzile:


>> v=volsfera(5)
Fisier: functie
Exemplu: definirea unui functii cu numele cosdoix ce va
calcula cos2x :
Selectati: File\New\M-file sau comanda edit
function y=cosdoix(x)
y=cos(x).*cos(x)-sin(x).*sin(x);
end
Selectati: File\Save As\cosdoix.m
In Command window dati comenzile:
>> y=cosdoix(x)
>>y = -0.5000
>> (1+cosdoix(x))./cosdoix(x)
ans =-1.0000
>> 1+sindoix
??? Attempt to execute SCRIPT sindoix as a function.
Fisiere de functii


Fișierele MATLAB pot conține cod pentru mai multe
funcții.

Prima funcție din fișier (funcția principală) este vizibilă
pentru funcțiile din alte fișiere sau o pute ți apela din linia
de comandă.

Funcțiile suplimentare din fișier se numesc func ții locale.
Funcțiile locale sunt vizibile numai pentru alte func ții din
același fișier. Ele sunt echivalente cu subrutinele din alte
limbaje de programare și sunt uneori numite subfunc ții.

Funcțiile locale pot apărea în orice ordine, atât timp cât
funcția principală apare mai întâi. Fiecare func ție începe
cu propria linie de definire a func ției.
Avantajele si Dezavantajele Scripturilor
Scriptul este o secventa de instructiuni si a aparut din
necesitatea reutilizarii multiple a secventei respective.

Avantaje:

utile in cazul programelor mari cu secvente de comenzi
care se repeta aleatoriu (nu sunt bucle pur si simplu) deci
utile doar programatorilor avansati;

Dezavantaje:

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

nu au parametrii de intrare sau de iesire;

sunt sursa unor erori greu de detectat;

nu pot fi utilizate in expresii.
Avantajele si Dezavantajele Functiilor

Functia este tratata drept un subprogram, adica drept o


unitate distincta de restul programului.

Avantaje:

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

nu modifica datele din zona de lucru a programului
apelant.

permite organizarea structurala a programarii.

Dezavantaje:

folosirea in exces a functiilor poate duce la faramitarea
excesiva a programului pierzandu-se din claritate.
Atasarea comentariilor
Comentariile sunt precedate de semnul procent (%).
Daca se plaseaza pe primele linii, imediat sub linia de
definitie a functiei, formeaza Help-ul functiei care se
apeleaza cu comanda help nume_functie.
Help-ul functiei se considera pana la prima linie goala sau
pana la prima instructiune Matlab
Dupa ultima linie a help-ului se lasa o linie libera.
Exemplu :
function nume_functie
% Prima linie de help
% A doua linie de help ...
% Ultima linie de help
Linie libera (aceasta este obligatorie daca urmeaza un
alt comentariu care nu este de tip help)
Instructiuni MATLAB
Exercitii

1. Scrieti functia care calculeaza aria si perimetrul unui


dreptunghi.

- Adaugati help functiei


- Apelati functia dintr-un script.

2.Scrieti functia pentru a calcula suma primilor N+1 termeni a


unei serii geometrice, N<∞

gsum=∑ N
n=0
an
.
Exercitii: functii
Raspuns:
Fisierul arieper.m
function [a,p]=arieper(L,l)
% Calcul arie şi perimetru al dreptunghiului cu laturile L şi l
a=L*l;
p=2*(L+l);
end

Fisierul script runarieper:


% Setarea valorilor laturile L şi l apelul functiei arieper
L=5; % sau L=input('L=');
l=6; % sau l=input('l=');
[a,p]=drept(L,l) %Apelul functiei

Executarea scriptului:
>> runarieper
Exercitii: functii

Raspuns:

function gsum = geom(a,N)


n=0:N;
if a> 1
• error('suma divergenta')
end
gsum = sum(a.^n);
end

Functia geom se apeleaza de la command prompt :

>> gsum=geom(0.4,10).
Functii Anonime
Anonymous functions - functiile Matlab produse de la
linia de comanda. Functie implicita, apelabila ca si o
variabila in lista de argumente intrate intr-o functie numita
function_handle @. Au forma generala:

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

Exemplu: >> f = @(x) ( x.^2 +exp(x) )


>> rez= f(x) % apelul functiei
f - numele functiei,
@ - function handle,
x - parametrul de intrare
x.^2 +exp(x) – corpul functiei
Functii Anonime

>> x = [1 3 5]
>> y=[ 2 2 2]
>> f = @(x, y) ( x .*y)
>> f(x,y)
>> a =10
>> f = @(x, y) a*(x .*y) % a face parte din corpul fctiei
>> f(x,y)
>> a=0
>> f(x,y) % nu se schimba valoarea functiei evaluate
>> clear a
>> f % variabila a este definita in corpul functiei
Functii inline si comanda feval
Inline functions - functiile Matlab produse de la linia de
comanda folosind comanda inline:
nume_functie = inline ('expr', 'arg1', 'arg2'...)
Exemplu: >> f = inline( 'sqrt(x.^2+y.^2)', 'x', 'y' )
>> rez= f(x,y) % apelul functiei

string -sir de caractere inclus intre apostrofi- 'test 10'

Unele functii iau ca parametrii de intrare numele altor


functii specificate ca string. Evaluarea acestora se face cu:

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

[param-de-iesire]=builtin ('numefunctie', param-de-
intrare) – numai functiile interne ale Matlab-ului.
Exercitii functii
Scrieti aceste functii in fisier sau anonymous sau inline.
Calculati valorile functiilor pentru x=0.5 si t =sqrt(2):
Exercitii

Raspuns:
Functii Import/Export

.mat - MatlabWorkspace
folosim functiile load() si save()
.csv , .txt, .xls
- folosim functiile readmatrix() si writematrix(),
readtable() si writetable()

https://uk.mathworks.com/help/matlab/import_export/supported-
file-formats.html
Functiile save si load

Salvez variabilele intr-un fisier binar *.mat:

>>x = 0:0.1:1
>> y = [exp(x)]
>>save -mat calculexp.mat x y
>>load calculexp.mat

Salvez variabilele intr-un fisier text *.txt (se poate salva doar o
variabila):
>> save -ascii calculexp.mat y
>>c= load (‘calculexp.txt’)

Daca vreti sa salvati mai multe variabile folositi functiile:


fopen() fprintf() fclose()
Functia fprintf -scrierea datelor in format
fprintf(fid, format, date )
fid- este un un numar intreg, asociat pentru identificarea
fisierului in care se scrie, fid=1 sau e omis scriere se
face pe ecran. Identificatorul fid al fisierului se obtine
prin functia fopen.
format – formatul de scriere precedat de caracterul '%'
urmat de: d, i, o, u, x, X, f, e, E, g, G, c si s.
date – datele ce trebuiesc scrise
Conversia datelor poate contine si caractere speciale
neprintabile:
\n produce o linie noua,
\r reîntoarcerea cursorului la cap de rand
\t tab orizontal,
\b backspace,
\f forma libera
Conversia datelor
Conversia datelor incepe intotdeauna cu caracterul % si
contine urmatoarele elemente optionale sau obligatorii:

semne, optionale, care controleaza alinierea :
caracterul “-”, care pozitioneaza datele la stanga si
justificat, iar daca lipseste pozitionarea, se face la dreapta;
caracterul “+”, care scrie intotdeauna semnul datei
(plus,+, sau minus,-);
caracterul “0”, care scrie în spatiile libere zero (0);

marimea si precizia campului,optional:
marimea câmpului in digiti, ex 6 (prin %6f);
precizia, numarul de digiti aflati dupa punctual zecimal
de exemplu 3 (prin %6.3f);
Conversia datelor
Conversia datelor incepe intotdeauna cu caracterul % si
contine urmatoarele elemente obligatorii:

formatul de conversie obligatoriu, care poate fi :
semnul “c” un singur caracter;
semnul “d” notatia zecimala;
semnul “e” sau “E” scrierea exponentiala, cu litera e mica
sau cu litera E mare;
semnul “f” punct zecimal sau virgula fixa;
semnul “g” sau “G” forma mai compacta decat “e” sau
“f”, nescriind zerourile nesemnificative;
semnul “o” date in baza opt (octagonala);
semnul “s” pentru caractere;
semnul “u” date in baza decimala;
semnul “x” sau “X” date hexazecimale, cu litere a-f
Functia fprintf, sprintf – scriere in fisier, pe ecran
fprinf(fid, format, date)
Formatul fprintf este vectorizat pentru cazul in care datele nu sunt
scalare, fiind repetat de cate ori e necesar.
>> fprintf('A unit circle has circumference %g\n',2*pi)

Scriu valorilor functiei exponentiale intr-un fisier:


>>x = 0:0.1:1; y = [exp(x)];
>>fid = fopen('calculexp.txt','w');
>>fprintf(fid,'%6.2f \n',y);
>>fclose(fid);
>>C= load (‘calculexp.txt’)

[s]=sprintf(format, date)- returneaza datele sir de caractere.


Exemple:
sprintf('%d',round(pi)) ans= 3
m=sprintf('%s','hello') m=hello, adica m(3)=l
Debugging fisierelor .m
Depanarea sau Debugging este procesul prin care sunt
identificate si rezolvate erorile din cadrul codului Matlab.

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

Erori run-time: aceste erori sunt in general de algoritm.
Erorile run-time sunt vizibile cand fisierul m produce
rezultate neasteptate.
Sfaturi pentru depanarea erorilor run-time
Stergeti simbolurile ”;” din instructiunile fisierelor .m cu pricina.
In urma acestei operatiuni MATLAB va afisa rezultatelor pe
ecran pe durata executiei fisierului .m.
Adaugati instructiunii keyboard la fisierul.m . Instructiunile
keyboard opresc executia fisierului .m la un anumit punct unde
acestea apar si va permit examinarea si modificarea workspace-
ul local al functiei. Acest mod este indicat de un prompt special:
K>> Continuarea executiei functiei se realizeaza tastand return
si apasand tasta Return.
Folositi MATLAB Debugger sau functiile debugging. Acestea
sunt folositoare pentru corectarea erorilor run-time deoarece
puteti accesa workspace-ul functiilor si apoi puteti examina sau
schimba valorile pe care le contin. Puteti defini sau sterge
puncte de intrerupere sau breakpoints, pentru oprirea executiei
programului la o anumita locatie (la o anumita linie de program)
in interiorul fisierelor .m.
De citit si exercitii

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 1 – Introducere in MATLAB ( fara subcapitolul de


Random Numbers)

Exercitiile din Capitolul 1 : 1, 6, 9, 13, 15, 16, 22, 23, 28, 29, 30

Capitolul – Introducere in programarea MATLAB subcapitolele


3.2 , 3.3, 3.4 3.6

Exercitiile din Capitolul 3 : 1, 2, 5, 6, 16

Capitolul 9
De citit si exercitii

Functii
Sectiunile 3.7 6.1 10.1 si 10.2
Exercitiile din Capitolul 3 : 24, 25, 29, 37
Exercitiile din Capitolul 10 : 1,2,6,7

[1] MathWorks. (2013). “Scripts vs. Functions” [Online]. Available:


http://www.mathworks.com/help/matlab/matlab_prog/scripts-and-functions.html
Laborator 2
MATLAB

matrici
operatori logici si relationali
instructiuni de control
Vectori

Scrieti utmatoarele comenzi ptr a crea vectorii:
X= [1 2 3 4 5] Y=[6; 7; 8; 9; 10] size(Y) Z= Y’ size(Z)
W=[X Z] T=[ X; Z] M = [2 : 0.5 : 4]

Selectia din vector:
a=W(5) b =W(5:9) c=W(2:2:8) d= W([3 5 2 9])

Folosind operatorul : creati vectorii v1,v2,v3 si v4 :
1) 2, 4, 6, 8,...100 dar cu functia linspace()
2) 50, 48, 46,...-50
3) 1, 1/2, 1/3,...1/100
4) 0, 1/2, 2/3, 3/4...99/100
5)Folosind end (ultimul index al unui vector/matrice)
ptr un anumit vector, afisati vectorul elementelor
impare si vectorul elementelor in ordine inversa.
Ptr matricea M de la a) inversati coloanele, apoi liniile.
Vectori - Rezolvare

1)>> v1= 2:2:100 sau


>> v1 =linspace(2,100,50)

2)>> v2=50:-2:-50
3)>> vt=1:100; v3=1./vt
4)>> vr=0:99; vp=1:100; v4=vr./vp
5)>> v5=1:100; vi=v5(1: 2: end)
>>vinv=v5(end: -1: 1)
>> [nl,nc]=size(M) cc=M(:, nc:-1:1) ll=M(nl:-1:1, :)
Matrici

Se da matricea M = [1 2 3 4;
2 4 6 8;
-1 -2 -3 -4;
0 5 0 7]

• Sa se extraga elementul de pe linia 1 si coloana 3-a


• Prima linie
• Coloana a 2-a
• Submatricea determinata de liniiele 1, 2 si 4 si de
coloanele 2, 3 si 4
Matrici- Rezolvare

Introducerea matricei M:
>> M=[1 2 3 4; 2 4 6 8; -1 -2 -3 -4; 0 5 0 7];

Extragerea elementului de pe linia 1 şi coloana 3:
>> M(1,3) ans=3

Extragerea primei linii:
>> M(1,:) ans= 1 2 3 4

Extragerea coloanei a 2-a:
>> M(:,2) ans= [2; 4;-2; 5]

Extragerea submatricei determinată de liniile 1,2 şi 4 şi
de coloanele 2, 3 şi 4:
>> M([1,2,4],2:4) ans=[2 3 4; 4 6 8; 5 0 7]

Matricea M nefiind reatribuita in mod explicit, nu a fost


afectata de niciuna din operatiile de mai sus: >>M
Matrici

Creati urmatoarea matrice :

M= 1 2 3 4 5
11 12 13 14 15
21 22 23 24 25

Scrieti comanda ce va inlocui elementele din liniile 1 si 2


si coloanele 1 si 2 din matricea M cu valoarea 5

M= 5 5 3 4 5
5 5 13 14 15
21 22 23 24 25
Matrici- Rezolvare


Cream vectorul v :
>> v=[1 2 3 4 5]

Cream matricea M:
>> M = [v ; v+10; v+20;]

Extragerea primei linii:
>> M(1:2, 1:2) =5
Generarea matricilor cu numere aleatoare
Utilizand:
functia rand, pentru numere aleatoare, cu distributie
uniforma in intervalul (0,1) sau
functia randn, pentru numere aleatoare cu distributie
normala (Gaussiana), de medie zero si varianta unu.
functia randi pentru numere intregi intr-un anumit
interval ( ultimul parametru specificand dimensiunea)
Instructiunile pentru generarea matricelor cu numere
aleatoare au formele :
x = rand(n), y = rand(m,n), z = rand(size(A)),
v=randi([5,10] ,n) sau vv = randi([5,10], m,n)
unde m si n sunt scalari, iar A este o matrice oarecare.

Alte functii de generare a matricilor :magic(n), pascal(n)


Concatenarea matricilor
>> ra=randi([5,15], 3)
>>rra=randi([20,50], 3,6)
>> x= rand(3)*10
>> y=rand(3)*100
>> z=[x,y]
>> w=[x;y]
>> xx=horzcat(x,y)
>>yy=vertcat(y,x)

>> a= magic(3)
>> aa= rand(3,4)
>> b=rand(3,5)
>> bb=rand(4,4)
>> c=[a,b]
>> d= cat(2,a,b)
>> e=horzcat(aa,b,a)
>> f=cat(1,aa,bb)
Matrici

Folosind concatenarea si functiile zeros() , ones() si eye()


generati urmatoarea matrice:
0 0 0 5 0 0
0 0 0 0 5 0
0 0 0 0 0 5
2 0 1 3 3 3
1 1 1 3 3 3
2 2 2 3 3 3
Matrici Rezolvare

>> M=[zeros(3) 5*eye(3); X 3*ones(3)]


Matrici diagonale – functia diag(v,k)

v -vector, specifica vectorul de pe diagonala


k – scalar, specifica distanta de la diagonala
principala, k>0 deasupra diagonalei principale,
k<0 dedesuptul diagonalei principale

0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
-2 0 0 0 0 1
0 -2 0 0 0 0
0 0 -2 0 0 0
Matrici diagonale - Rezolvare diag(v,k)

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

• Sa se genereze matricele patratice A si B, de ordinul


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

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

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

% afisarea matricei A
A

% afisarea matricei B
disp('matricea B')
disp(B)

% calculul si afisarea sumei
suma=A+B

% calculul si afisarea produsului
produs=A*B

% calculul si afisarea cubului matricei A
cub_A=A^3

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

% rangul matricei B
rang_B=rank(B)
Rezultat exercitiu 4

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

A =0.5000 0.3333 0.2500 0.2000


0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
0.2000 0.1667 0.1429 0.1250
matricea B
1 -1 -2 -3
3 1 -1 -2
4 5 1 -1
5 6 7 1
suma = 1.5000 -0.6667 -1.7500 -2.8000
3.3333 1.2500 -0.8000 -1.8333
4.2500 5.2000 1.1667 -0.8571
5.2000 6.1667 7.1429 1.1250
Rezultat exercitiu 4
produs = 3.5000 2.2833 0.3167 -2.2167
2.7167 1.9167 0.4500 -1.5333
2.2310 1.6405 0.4667 -1.1738
1.8964 1.4310 0.4512 -0.9512

cub_A = 0.4516 0.3263 0.2571 0.2127


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

Rezultatul impartirii A\B este


Rez = 1.0e+004 *
-0.0600 0.2380 -0.4940 -0.1420
0.4620 -1.5900 3.7980 1.0920
-0.9660 2.8980 -7.7280 -2.2260
0.5880 -1.5680 4.5640 1.3160
rang_B = 4
De citit si exercitii !

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 2 - Vectori si Matrici


Sumarul de la paginile 27 si 66

Exercitiile de la sfarsitul Capitolului 2


Laborator 2
MATLAB

matrici
operatori logici si relationali
instructiuni de control
Exercitiu 1

Scrieti functia care intoarce indicii (linie,coloana) ale


elementului maxim si a celui minim dintr-o matrice
Rezolvare Exercitiu 1
function[ elemax, lmax, cmax, elemin, lmin, cmin]=tema1(a)
a=input('introduceti matricea a= ')
[r,c]=size(a);
lmin=1; lmax=1; cmin=1; cmax=1;
elemin=a(1,1); elemax=a(1,1);
for i=1:r
for j=1:c
if a(i,j) > elemax
elemax=a(i,j);
lmax=i;
cmax=j;
end
if a(i,j) < elemin
elemin=a(i,j); lmin=i; cmin=j;
end
end
end
Elemente de algebra vectoriala

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


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

Daca p=2 avem norma euclideana. Un vectorul al carui


modulul este egal cu 1 – vector unitar sau versor.

Produsul scalar a vectorilor v si w


Prin unghiul intre vectorii v si w se intelege unghiul mic
determinat de sensurile pozitive ale celor doi vectori:
Exercitiu 2

Sa se scrie o functie Matlab care primeste ca argumente doi vectori


de lungimi egale cu 3, v si w, si returnează normele euclidiene ale
vectorilor, produsul lor scalar, produsul lor vectorial si unghiul
dintre cei doi vectori exprimat in radiani.
Rezolvare exercitiu 2
function [n_v,n_w,ps,pv,unghi]=vectori(v,w)
if length(v)~=3 | length(w)~=3
disp('Vectorii nu satisfac conditia de lungime 3!')
n_v=[]; n_w=[]; ps=[]; pv=[]; unghi=[];
return;
end
n_v=norm(v); n_w=norm(w);
ps=dot(v,w); pv=cross(v,w);
if n_v==0 | n_w==0
disp('Unghiul nu poate fi calculat, unul din vectori fiind zero.')
unghi=[];
else
unghi=acos(ps/(n_v*n_w));
end
Testarea programului pentru diferite perechi de vectori:
>> v=[1 -1 3]; w=[0 3 -2];
>> [n_v,n_w,ps,pv,unghi]=vectori(v,w)
Operatori logici/indexare logica – Exercitiu 3

Creati matricile:
A= 1 0 -2 10 0 B= 2 0 -4 20 0
2 0 1 1 1 -10 60 -20 0 2
-1 3 2 0 0 -1 3 2 0 0
-1 2 -2 3 3 -2 6 4 0 0

a) determinati toate elementele pozitive ale lui A


b) determinati elementele lui A egale cu cele din B
c) determinati elementele din A din intervalul (1,20)
d) determinati elementele din A din afara
intervalului (1,20)
Operatori logici- Rezolvare exercitiu 3


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

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

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

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

Elementele din afara intervalului (1,20)
>> A(~((A>1)& (A<20))) sau A((A<=1)|(A>=20))
Operatori logici – Exercitiu 4

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

Determinai comanda care:


a) defineste vectorul a obtinut din x prin schimbarea
elementelor pozitive cu 33;
b) defineste vectorul b obtinut din x prin schimbarea
elementelor ce se divid cu 3, cu valoarea 7;
c) defineste vectorul c obtinut din x prin schimbarea
elementelor pare cu valoarea lor multiplicata cu 5;
Operatori logici- Rezolvare Exercitiu 4

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

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

b) >> b=x;b(~rem(x,3))=7

c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))
Operatori logici
Se da vectorul x=[6 25 1 2 -1 0 -7 50 4 9].
Determinai comanda care:

a) defineste vectorul t obtinut din x prin schimbarea


elementelor ce sunt mai mici ca media elementelor lui x,
cu 100

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

b)defineste vectorul p obtinut din x prin schimbarea


elementelor ce sunt mai mari decât media elementelor
lui x cu diferenta dintre valoarea lor si medie.

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


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

Inaltimea si viteza unui proiectil lansat cu viteza initiala


v0 si cu un unghi θ sunt date de:

Proiectilul va atinge solul cand h(t)=0, de unde rezulta


timpul de revenire. Pentru θ = 400 , v0=20 m/s, si g=9.81
m/s2 , determinati timpul cand inaltimea h nu este mai
mica de 6m iar viteza este simultan cel mult 16 m/s.
Functii relationale si logice- Rezolvare exercitiu 5

Definim datele initiale:
>> v0=20;g=9.81;theta=40*pi/180;

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

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

Determinam cand inaltimea este mai mare 6m si viteza
nu este mai mare de 16 m/s :
>> u=find(h>6&v<16)
Functii relationale si logice- Rezolvare exercitiu 5


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

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

Solutia problemei este intervalul sol= [t1,t2]
>> sol= [0.85, 1.78]
Calculam si salvam- Exercitiu 6

Calculati pozitia si viteza in 5 momente de timp din


intervalul [0,10] sec stiind :

x =x0 +v0t+ at2/2 si v=v0+at

Salvati datele in format ascii in fisierul date.txt


Calculam si salvam in fisier - Exercitiu 6
Definim datele initiale:
>> a = 9.81; x0 = 50; v0 = 0;

Definim vectorul coloana t, ce contine 5 momente de timp
uniform distribuite intre 0 si 10:
>> t=linspace(0,10, 5)’

Calculam pozitiile si vitezele la fiecare moment din t
>>x = x0 + v0*t + 0.5*a*t.^2;
>>v = v0 + a*t;

Introducem o eroare random de 5% - simulam masuratorile
>>x = x.*(0.95 + 0.1*rand(5,1));
>>v = v.*(0.95 + 0.1*rand(5,1));

Salvam in format ascii in fisier. Atentie! in fisierul ascii se poate
salva doar o singura variabila
>> A=[x v];
>>save -ascii date.txt A
De citit si exercitii !

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 2 - Vectori si Matrici


Sumarul de la paginile 27 si 66

Exercitiile de la sfarsitul Capitolului 2


Laborator 3A
MATLAB

polinoame
calcul simbolic
Polinoame- Exercitiul 1
Fie polinoamele:

P[x] = x5 - 7x3 -8x2 + 2x +12 ;


Q[x] = x4 -5x2 + 4 ;
T [x] = x6 + 4x4 - x2 – 4

a) Sa se determine produsul P[x]*T[x]*Q[x] (scrieti


comanda intr-o singura linie)

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


T[x]:Q[x]

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


T[x].
Polinoame- Rezolvare Exercitiu 1

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

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

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

Radacinile polinoamelor p, q si t:
>>roots(p) x1=3, x2=-2, x3=-1+i, x4=-1-i, x5=1
>>roots(q); x1=1, x2=-1, x3=2, x4=-2
>>roots(t); x1=2i, x2=-2i, x3=1, x4=-1, x5=i, x6=-i
Polinoame -Exercitiul 2
A) Sa se determine polinomul S[x] ale carui radacini
sunt:
x1=1, x2=2, x3=3, x4=-4, x5=-5
Sa se afle valorile S(0) si S(-7); S’(1) si S’(-1)

B.
1) x=0: pi/10 :pi si y=sin(x). Sa se determine polinomul
P4[x] de gradul 4 care aproximeaza datele din
vectorii x si y.
2) Sa se compare valorile P4 [pi/2] cu valoarea exacta
sin(pi/2)
3) Sa se calculeze valoarea in pi/2 - utilizati tipuri de
interpolare
Polinoame - Rezolvare Exercitiu 2
A)
>> v=[1 2 3 -4 -5]; s=poly(v);
s (x) = x5 + 3x4 - 23x3 - 27x2 +166x -120
>>polyval(s,0)=-120 polyval(s,-7)=-4320
>>polyval(polyder(s),1)=60
>>polyval(polyder(s),-1)=144
B)
1)>> x=0:pi/10:pi; y=sin(x);
>>p4=polyfit(x,y,4);
P4 x = 0.0368x4 -0.2309x3 + 0.0485x2 + 0.9874x+ 0.0002
2) polyval(p4,pi/2)-sin(pi/2)=0.00053993<10 -3
c) >>interp1(x,y,pi/2,'nearest'); 1
>> interp1(x,y,pi/2,'linear'); 1
Calcul simbolic -Rezolvare exercitiul 1

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

1) Sa se calculeze limitele:

2)Daca f(x) = 2xsin x -(x2 - 2)cos (x) sa se calculeze f ' (x)

3) Sa se calculeze primitiva funxctiei f (x) = x 2ex3

4) Sa se rezolve ecuatia: x3 + 2ax2 - a2 x - 2a3 = 0


Calcul simbolic -Rezolvare exercitiul 2

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

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

3) >> int(x^2*exp(x^3))

4) >> solve(x^3+2*a*x^2-a^2*x-2*a^3)
Rezolvarea sistemelor de ecuatii liniare -Exercitiul 1

Sa se rezolve urmatorul sistem folosind metoda


inversarii matriceale:

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

Sa se rezolve urmatorul sistem folosind metoda


impartirii la stanga:

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

Pentru urmatorul sistem sa se determine solutiile


particulare folosind metodele pseudo-inversarii si a
impartirii la stanga:

3x-y+z-2t=6
-4x+4y+2z+t=0
Sisteme de ecuatii liniare -Rezolvare exercitiul 3
Se creaza fisierul rez3.m:
>> edit rez3.m
Se creaza matricea coeficientilor si vectorul coloana al
termenilor liberi:
A=[3 -1 1 -2; -4 4 2 1];
b=[6; 0];
Rezolvarea sistemului
if rank(A)==rank([A b])
disp('metoda pseudo-inversarii')
X=pinv(A)*b
disp('metoda impartirii la stanga')
X=A\b
else
disp('Sistemul nu este compatibil.')
end
Sisteme de ecuatii liniare -Rezolvare exercitiul 3
In urma executiei se obtin rezultatele:
metoda pseudo-inversarii
X=
0.9431
0.5418
1.3846
-1.1639
metoda impartirii la stanga
X=
1.2000
0
2.4000
0
Rezolvarea sistemelor de ecuatii liniare -Exercitiul 3
Observatii:
1. Pentru testarea compatibilitatii s-a folosit teorema lui
Kronecker-Capelli. Matricea extinsa s-a obtinut in
Matlab prin concatenarea matricei A cu vectorul-
coloana b.
2. Daca sistemul era compatibil determinat se obtineau,
solutii identice prin utilizarea celor doua metode.
Sistemul este compatibil nedeterminat, prin utilizarea
celor doua metode s-au obtinut doua solutii particulare
distincte.
3. Sistemul de ecuatii liniare din exemplul 3 este un
sistem subdeterminat. El poate fi rezolvat doar pe cale
simbolica. Acest sistem nu poate fi rezolvat complet pe
cale numerica - rezultate diferite, care corespund unor
valori particulare ale solutiei.
Sisteme de ecuatii liniare -Rezolvare exercitiul 4
>> clc % clear command window

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

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

Se rezolva sistemul de mai sus
syms z t;
Aredus=A(:,[1 2])
bredus=[6-z+2*t; -2*z-t];

Rezolvarea sistemului cu metoda inversarii
s=inv(Aredus)*bredus

Rezolvarea sist. cu operatorul de impartire la stanga
ss=Aredus\bredus
disp(blanks(1)') %creeaza spatii intre şirurile de
caratere.
pause % oprirea momentana a executiei
disp('Solutia sistemului dat este:')
x=s(1)
y=s(2)
disp('z,t numere reale oarecare')
Sisteme de ecuatii liniare -Rezolvare exercitiul 4

Se obtin rezultatele:
r =2 rminor =2
sistemul este compatibil nedeterminat
s=
3-3/4*z+7/8*t
3-5/4*z+5/8*t
ss =
3-3/4*z+7/8*t
3-5/4*z+5/8*t

Solutia sistemului dat este:
x=
3-3/4*z+7/8*t
y=
3-5/4*z+5/8*t
z,t numere reale oarecare
Rezolvarea sistemelor de ecuatii liniare -Exercitiul 5

Sa se comparare metodele studiate de rezolvare a


sistemelor din punct de vedere al timpului de executie si
al preciziei solutiei in cazul unui sistem patratic
compatibil determinat de ecuatii liniare de dimensiuni
mari.
Sisteme de ecuatii liniare -Rezolvare exercitiul 5

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

Timpii de executie
>> tic; y=inv(A)*b; t1=toc t1 =0.1671
>> tic; z=A\b; t2=toc t2 =0.0685

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


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/tutor
ials/
launchpad.html
Laborator 3B

MATLAB

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

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


Functii - Rezolvare Exercitiu 1

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

a) Sa se rezolve ecuatia:
x2sqrt( x2 + 3) + xln (x2 +1)- 2 - ln 2 = 0 , x=0.5;

b) Sa se reprezinte grafic functia


f (x) = (x -1)ex sin(x)+ x3 - x
si apoi sa se determine toate radacinile pe intervalul
[-2, 2].
Functii -Rezolvare exercitiul 2

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

Pentru desenarea rapida a unei expresii introduse direct ca


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

Matlab permite reprezentarea in plan a graficelor de


functii si a suprafete poligonale.

Reprezentarile grafice ale functiilor pot fi realizate in mai


multe tipuri de coordonate:

carteziene,

polare,

logaritmice,

semilogaritmice
Reprezentari grafice in plan- 2D
Cateva functii 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
Functii auxiliare pentru reprezentari grafice
Cateva functii auxiliare ce pot controla proprietatile modului de
reprezentare:

title - inserarea unui titlu pentru reprezentarea grafica

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

xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului de
coordonate

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

hold- pastrarea graficului curent si al proprietatilor sale

subplot - impartirea ferestrei de reprezentare grafica in mai multe
regiuni grafice.

grid - suprapunerea unei retele de linii pe grafic

meshgrid -definirea sub forma de retea de puncte a domeniului de
reprezentare 3D a suprafetelor.

colormap - stabilirea sau returnarea matricei de culoare

shading- stabilirea modului de umbrire pentru suprafetele 3D
Reprezentari grafice 2D – Observatii
1) Pentru reprezentarea grafica a functiilor in Matlab este necesar
ca domeniul de reprezentare sa fie definit prin puncte. Distanta
dintre orice doua puncte consecutive ale graficului trebuie sa fie
suficient de mica pentru ca reprezentarea grafica sa fie corecta.
O distanta prea mica necesita mai mult timp de calcul !

2) Reprezentarea mai multor grafice de functii in acelasi grafic


Se poate face prin enumerarea functiilor sub forma: variabila,
functie si, optional, setari de culoare, marker si/sau tip de
linie, pentru fiecare functie in parte in acelasi apel al
functiei plot:
>> plot(x, y1, 'b-', x, y2, 'g.-')
sau
in apeluri diferite ale functiei plot, dar cu conditia ca inainte sau
imediat dupa primul apel sa se dea comanda hold on, iar dupa
ultimul apel sa fie data comanda hold off.
Reprezentari grafice 2D - Exercitiul 1

Sa se reprezinte grafic functiile y 1, y2:[-5,5]→R


definite prin relatiile:

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

y2= e-0.4x sin(8x)

Schimbati pasul la 0.5 si reprezentati din nou.


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

Pentru a salva figura curenta intr-un fisier *.ps, pentru a fi printata


sau introdusa intr-un alt document, tastati comanda :

>> print -dps vasile.ps


Operatori logici - Ex1

Creati vectorul x=randperm(35) si evaluati urmatoarea


functie utilizand indexarea logica:

2 x<6
y(x) = x-4 6 <= x < 20
36-x 20 <= x <= 35

Verificati, desenand graficul functiei y(x).


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

Desenam graficul functiei:


>>plot(x,y,'ok')
% am marcat fiecare punct de pe grafic cu semnul o, si k
%pentru a seta culoarea neagra
Operatori logici - Ex2

Desenati graficul functiei de semnal sinusoidal


discontinuu utilizand indexarea logica:

sin(t) sin(t) > 0


x(t) = t=1, 2, ...10
0 sin(t)<= 0
Rezolvare - Ex2

Definim timpul t:
>>t=0:0.1:10;
Definim funcia x(t):
>> x=sin(t);
Punem valoarea 0 în locul valorilor negative ale lui x:
>> x=x.*(x>0);
Facem graficul si punem etichetele:
>> plot(t,x)
>> axis([0 10 -0.1 1.1])
>> xlabel('Timpul [s]')
>> ylabel('Amplitudinea')
>> title('Semnal sinusoidal discontinuu').
Reprezentari grafice 2D– functia legend
Adaugarea unei legende la un grafic se face prin comanda
legend.
Cea mai comoda si comuna apelare este data in exemplu:
>>x = 0:.2:12;
>>plot(x,besselj(1,x),x,besselj(2,x),x,besselj(3,x));
>>legend('First','Second','Third',-1);

In locul valorii „0” se mai pot utiliza: 1 sau lipsa, ceea ce


pozitioneaza legenda in partea dreapta superioara in
interior; 2, ce pozitioneaza legenda in partea stanga
superioara in interior; 3, care plaseaza legenda in partea
de jos stanga si in interior; 4, ce plaseaza legenda in
partea inferioara stanga si in interior; -1, care plaseaza
legenda în partea dreapta sus si în exterior.
Reprezentari grafice 2D – Exercitiu 1*
Sa se deseneze pe acelasi grafic functia y=cos(2πft),
t intre 0 si 4, iar frecventa f ia valorile 0.7 , 1, 1.5 si 2.

fs = ['r-';'b.';'go';'m*']; %Cream un vector ptr stilurile liniilor


x=1; %Initializam variabila x
t=0:.01:4;
for f=[0.7 1 1.5 2]
y=cos(2*pi*f*t);
plot(t,y,fs(x,1:end)); %stilul linei indexat de x
hold on
x=x+1; % incrementam x cu unu
end
xlabel('t');
ylabel('cos(2 pi f t)');
legend('f=0.7','f=1','f=1.5','f=2');
Reprezentari grafice 2D - Exercitiul 2

Sa se scrie o functie Matlab care primeste ca


argumente o alta functie f si capetele unui interval inchis
[a,b] pe care este definita aceasta functie. Sa se
reprezinte grafic in coordonate semilogaritmice. Daca
reprezentarea grafica in cel putin unul din cele doua
cazuri nu poate fi realizata, se va afisa un mesaj de
eroare.
Reprezentari grafice 2D- Rezolvare Exercitiul 2
Editam fisierul grafic_log:
>> edit grafic_log
function grafic_log(f,a,b)
if a>b
disp('Interval vid (a>b) !')
return
end
n=100; % nr de puncte pentru reprezentarea intervalului
pas=(b-a)/n; % pasul submultiplu al lungimii intervalului.
if a==b x=a;
else x=a:pas:b;
end
if a<=0 | min(feval(f, x))<=0
disp('Unul din grafice nu poate fi reprezentat!')
return
end
subplot(2,1,1); semilogx(x, feval(f,x)) % coord semilog pe axa x
subplot(2,1,2); semilogy(x, feval(f,x)) % coord semilog pe axa y
Reprezentari grafice 2D – Testare Exercitiul 2
Pentru testarea programului se defineste o functie :
>> f = inline('sin(x)+2')
Apelul functiei grafic_log se face din linia de comanda:
>> grafic_log(f, 2,1)
Interval vid (a>b) !
>> grafic_log(f ,-1,10)
Unul din grafice nu poate fi reprezentat!

>> grafic_log(f,1,10)

Pentru a desena graficele pe acelasi ecran se foloseste


comanda subplot(n,m,k) unde n reprezinta numarul de
linii de subferestre, m numarul de coloane de
subferestre, iar k numarul ferestrei ce devine activa.
Reprezentari grafice 2D -Exercitiul 3

Sa se reprezinte grafic triunghiul ale carui varfuri au


coordonatele (-1,3), (2,7) si (9,-4).

Solutie: Rezolvarea se bazeaza pe utilizarea functiei line,


care primeste ca argumente vectorul tuturor absciselor si
vectorul tuturor ordonatelor varfurilor, in aceeasi ordine:

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

Observatie: Ce face functia Matlab line? Triunghiul e


format din 3 segmente, necesita precizarea a patru
puncte, evident, primul si ultimul punct fiind identice.
Reprezentari grafice 2D– functia comet

Pentru reprezentarea dinamica (in miscare) a traiectoriei


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

Reprezentarea grafica, sub forma de bare verticale, se


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

Apelata cu secventa [xb,yb]=bar(y) sau [xb,yb]=bar(x,y)


functia bar nu reprezinta graficele, dar calculeaza vectorii
xb si yb, astfel incat plot(xb,yb) sa poata trasa graficul
de bare.
Reprezentari grafice 2D – functiile bar, barh

De mentionat ca valorile lui x trebuie sa fie egal departate


si crescatoare.

Scrieti secventa:
>>subplot(3,1,1),bar(rand(10,5),'stacked'),colormap(cool)
>>subplot(3,1,2), barh(0:.25:1,rand(5),1)
>>subplot(3,1,3), bar(rand(2,3),.75,'grouped')

Reprezentarea barelor orizontale se realizeaza cu functia


barh, care este asemanatoare functiei bar.
Reprezentari grafice 2D – functia hist
Calculul si reprezentarea grafica a histogramelor se face
cu functia hist, care se apeleaza cu una dintre sintaxele:
• hist(y) – traseaza histograma cu 10 segmente egale a
datelor vectorului y;
• hist(y, n) – traseaza histograma cu n segmente egale a
datelor vectorului y;
• hist(y, x) – traseaza histograma datelor vectorului y la
abscisele specificate in x;
• [m,z]=hist(y), [m,z]=hist(y, n), [m,z]=hist(y, x) –
returneaza vectorii m si z continand frecventa de
aparitie si de localizare a segmentelor. Cu functia
bar(z,m) se poate trasa histograma.
Exemplu: histograma cu elemente distribuite normal
(Gaussian):
>> x=-4:0.4:4; y=randn(10000,1); hist(y,x).
Reprezentari grafice 2D – functia stem

Reprezentarea grafica a semnalelor discrete, sub forma


unor linii terminate cu cerc, se face cu functia stem, care
se apeleaza cu una dintre sintaxele:
• stem(y) – traseaza un grafic din linii cu cerc, cu
elementele vectorului y;
• stem(x,y) – traseaza un grafic din linii terminate cu cerc,
cu locatiile specificate de vectorul x, adica y=y(x), iar
valorile lui x trebuie sa fie egal departate si crescatoare;
• stem(x,y,linie_tip) – traseaza un grafic linii de tipul si
culoarea precizata in sirul de caractere linie_tip, similar
cu functia plot (de exemplu stem(x,y,’:r’)).
Exemplu:
>> n=0:30; f=sin(2*pi*n/10); stem(n,f)
Reprezentari grafice 2D – functia stairs

Graficele in trepte sunt utilizate la reprezentarea


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

Realizarea unei diagrame circulare (asa numita diagrama


„placinta”) cu valorile unui vector x, avand specificata
semnificatia in eticheta, se face cu functia
pie(x,eticheta), care se poate apela

De mentionat ca valorile lui x sunt normalizate, iar daca


sum(x)<1, atunci sunt trecute valorile efective si apare
un segment de cerc.

>> pie([2 4 3 5],{'North','South','East','West'})


Reprezentari grafice 2D – functia plotmatrix

Plotarea unei matrice dispersate se face cu functia plotmatrix.

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

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

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

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

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

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

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

Daca x si y sunt matrice de aceeasi dimensiune, functia errorbar
va reprezenta graficul cu bare de eroare, pentru fiecare coloana
in parte.
Exemplu:
>> x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e)
Reprezentari grafice 3D – Exercitiul 4

Sa se reprezinte grafic in spatiul tridimensional curba 3D


data prin ecuatiile parametrice:

x=ln(t2+2),

y=t*sin(t),

z=-t-1 unde t∈[-7,7]


Reprezentari grafice 3D – Rezolvare Exercitiul 4
1)Domeniul/intervalul de reprezentare definit prin
vectorul cu pas liniar:
>> t=-7:0.1:7;
2) Definirea functiilor corespunzatoare coordonatelor:
>> x=log(t.^2+2); y=t.*sin(t); z=-t-1;
3) Trasarea graficului si precizarea anumitor proprietati:
>> plot3(x,y,z,'m')
4) Setarea altor proprietati ale reprezentarii grafice
(etichetele axelor, grid etc):
>> grid
>> xlabel('axa x');
>> ylabel('axa y');
>> zlabel('axa z');
Sensul de parcurgere a curbei se stabileste cu functia
Matlab comet3. Inlocuiti functia plot3 cu comet3.
Reprezentari grafice 3D – Exercitiul 5
Suprafata ce reprezinta graficul unei functii de doua variabile
z=f(x,y):
f(x,y) = x*y/(x2+y2+1) unde x∈[-2,2] y∈[-4,4]

Solutie: definim matricile si functiile ptr domeniul de reprezentare


>> x=-2:0.2:2; y=-4:0.4:4; [X,Y]=meshgrid(x,y);
>> Z=X.*Y./sqrt(X.^2+Y.^2+1);
>> surf(X,Y,Z)

Observatie: Domeniul de reprezentare al unei suprafete este o


retea de puncte {(xi, yj)}, ce se genereaza separat in seturile de
puncte {xi} si {yj}, apoi se formeaza produsul cartezian al
acestora cu ajutorul functiei Matlab meshgrid.
In locul comenzii surf putem utiliza comenzile mesh, surfc,
meshc. Daca se doresc doar liniile de contur folosim comenzile
contour(X,Y,Z) sau contourf(X,Y,Z) care umple cu culoare
diferentele de nivel.
Reprezentari grafice 3D – Exercitiul 6
Sa se reprezinte grafic in spatiul 3D functia “sombrero” ptr x,y
reali si nenuli:

Solutie: 1) redarea domeniului de reprezentare:


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

Sa se reprezinte grafic:

- o piramida dreapta de inaltime h si cu baza octogon


regulat inscris intr-un cerc de raza rc

- un elipsoid cu semiaxele rx, ry si rz.


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

1) Precizam coordonatelor centrului si a semiaxelor


>>xc=3; yc=-1; zc=0;
>>rx=5; ry=3; rz=2;
2) Reprezentarea grafica cu functia ellipsoid
>>ellipsoid(xc,yc,zc,rx,ry,rz,30)
>>axis('equal'); colormap(spring)
>>pause
3) Reprezentarea grafica cu functia sphere
>>[x,y,z]=sphere(30);
>>xe=5*x+3; ye=3*y-1; ze=2*z;
>>surf(xe,ye,ze);
>>axis('equal'); colormap(cool)
Reprezentari grafice 3D – Exercitiul 8
Sa se deseneze :
a) trunchi de piramida cu baza octogon.

>> x=0:0.2:2;
>> y=x-3;
>>cylinder(y,8)

b) o suprafata de rotatie generata de functia:


y = 5+xarctg(x)-5sin(x)

>> x=-pi:pi/10:pi; | x=-pi:pi/10:pi;


>> y=5+x.*atan(x)-5*sin(x); | [X,Y,Z]=cylinder(y);
>> cylinder(y,30) | surf(X,Y,Z)
Reprezentari grafice 3D – functia ezmesh
Pentru plotarea facila a retelei (gridului) unei expresii introduse
direct ca argument se utilizeaza functia ezmesh, care se poate
apela:
• ezmesh(f) – ploteaza graficul functiei f(x,y) utilizând functia
mesh, unde f este un semn sau o expresie simbolica,
reprezentand o functie matematica de doua variabile, ca x si y,
considerand domeniul implicit -2*pi < x < 2*pi, -2*pi < y < 2*pi
si acordand corespunzator gridul;
• ezmesh(f, Dom) – ploteaza f pe domeniu, Dom, care poate fi un
vector de doua dimensiuni, [a b], respectiv (a < x < b, a < y < b),
de 4 dimensiuni, [xmin xmax ymin ymax] ori [xmin xmax],
[ymin ymax], respectiv (xmin < x < xmax, ymin < y < ymax)
sau valoarea implicita, 2*pi < x < 2*pi, -2*pi < y < 2*pi ;
• ezmesh(..., N) – ploteaza f pe domeniul implicit, considerand un
grid NxN, in care valoarea implicita a lui N este 60;
• ezmesh(...,'circ') – ploteaza f pe un disc, centrat pe domeniul
considerat.
Reprezentari grafice 3D – Exemple functia ezmesh

Posibilitatile de apelare a functiei ezmesh:


>>f = ['3*(1-x)^2*exp(-(x^2) - (y+1)^2)' ...
'- 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)' ...
'- 1/3*exp(-(x+1)^2 - y^2)'];
>>ezmesh(f,[-pi,pi])

>>ezmesh('x*exp(-x^2 - y^2)'); ezmesh('x*y','circ');


>>ezmesh('real(atan(x + i*y))');
>>ezmesh('exp(-x)*cos(t)',[-4*pi,4*pi,-2,2]);
>>ezmesh('s*cos(t)','s*sin(t)','t');
>>h = inline('x*y - x'); ezmesh(h);
Reprezentari grafice 3D – functia ezsurf, ezsurfc
Pentru desenarea facila a suprafetelor colorate a unei
expresii introduse direct ca argument se utilizeaza
functia ezsurf. Suprafetele sunt date parametric, x =
x(s,t), y = y(s,t), z = z(s,t).

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

Pentru desenarea facila a suprafetelor colorate combinate,


cu trasarea liniilor de contur a unei expresii introduse
direct ca argument, se utilizeaza functia ezsurfc

>>ezsurfc('(s-sin(s))*cos(t)','(1-cos(s))*sin(t)','s',...
[-2*pi,2*pi]);
De citit si exercitii !

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 3 – Introduction to MATLAB programming :subcapitolul


3.5

Exercitiile din Capitolul 3: 15, 16, 42

Capitolul 11 - Advanced Plotting Techniques

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