Introducere in Matlab
Continut:
� Ce este Matlab?� Ecranul Matlab� Variabile, vectori, matrice, indecsi � Operatori (Aritmetic, relational, logic )� Facilitati afisare� Controlul fluxului� Utilizarea fisierelor M� Functii definite de utilizator� Concluzii
Ce este Matlab?
� Matlab este un limbaj de nivel inalt ce are numeroase colectii de unelte pentru a facilita lucrul utilizatorului
� Cat de inalt?
Assembly
High Level Languages such as
C, Pascal etc.
Matlab
Ce ne intereseaza?
� Matlab este o unealta ampla, dar la acest curs il vom folosi numai in mica parte.
� Functionalitatile ce ne sunt necesare sunt:
Matlab
CommandLine
m-files
functions
mat-files
Command execution like DOS command
window
Series of Matlab
commands
InputOutput
capability
Data storage/ loading
Ecranul Matlab
� Command Window� type commands
� Current Directory� View folders and m-files
� Workspace� View program variables� Double click on a variable
to see it in the Array Editor
� Command History� view past commands� save a whole session
using diary
Variabile
� Nu necesita declaratii explicite de tip. i.e.,
� Toate variabilele sunt create implicit in dubla precizie si sunt matrice.
� Am declarat 2 variabile matrice 1x1 cu dubla precizie.
int a;double b;float c;
Example:>>x=5;>>x1=2;
Vectori, Matrice
� un vector x = [1 2 5 1]
x =1 2 5 1
� o matrice x = [1 2 3; 5 1 4; 3 2 -1]
x =1 2 35 1 43 2 -1
� transpusa y = x’ y =1251
Sir, Matrice
� t =1:10
t =1 2 3 4 5 6 7 8 9 10
� k =2:-0.5:-1
k =2 1.5 1 0.5 0 -0.5 -1
� B = [1:4; 5:8]
x =1 2 3 45 6 7 8
Generarea vectorilor cu ajutorul functiilor
� zeros(M,N) MxN matrix of zeros
� ones(M,N) MxN matrix of ones
� rand(M,N) MxN matrix of uniformly distributed random numbers on (0,1)
x = zeros(1,3)
x =
0 0 0
x = ones(1,3)
x =
1 1 1
x = rand(1,3)
x =
0.9501 0.2311 0.6068
Indexarea matricelor
� The matrix indices begin from 1 (not 0 (as in C))� The matrix indices must be positive integer
Given:
A(-2), A(0)
Error: ??? Subscript indices must either be real positive integers or logicals.
A(4,2)Error: ??? Index exceeds matrix dimensions.
Concatenarea Matricelor
� x = [1 2], y = [4 5], z=[ 0 0]
A = [ x y]
1 2 4 5
B = [x ; y]
1 2
4 5
C = [x y ;z] Error:??? Error using ==> vertcat CAT arguments dimensions are not consistent.
Operatori (aritmetici)
+ addition- subtraction* multiplication/ division^ power‘ complex conjugate transpose
Operatii cu matrice
Given A and B:
Addition Subtraction Product Transpose
Operatori (Element cu Element)
.* element-by-element multiplication
./ element-by-element division
.^ element-by-element power
Utilizarea “.” – “Element” Operatie
K= x^2Erorr:??? Error using ==> mpower Matrix must be square.
B=x*yErorr:??? Error using ==> mtimes Inner matrix dimensions must agree.
A = [1 2 3; 5 1 4; 3 2 1]A =
1 2 35 1 43 2 -1
y = A(3 ,:)
y= 3 4 -1
b = x .* y
b=3 8 -3
c = x . / y
c= 0.33 0.5 -3
d = x .^2
d= 1 4 9
x = A(1,:)
x=1 2 3
Functii predefinite in Matlab
� Functie: nume, argumente (intrari), valori intoarse(iesiri)� In general argumentele pot fi atat scalari cat si matriceExemplu x = 9;b = sqrt(x) intoarceb =
3x = [4, 9, 16];b = sqrt(x) intoarceb =
2 3 4
Functii predefinite in Matlab
� Unele functii pot avea mai multi parametri:Ex. Restul = rem(10,3) – restul impartirii intregiRestul = 1Sau pot intoarce mai multe valorid = [1, 2, 3; 4, 5, 6];f = size(d) – numarul de linii si coloane din matricef = 2 3
HELP in Matlab
� Functia in linie de comanda help� Documentatia cuprinzatoare in format HTML� Documentatia online� Exemplu:help tanTAN Tangent of argument in radians.TAN(X) is the tangent of the elements of X.See also atan, tand, atan2.doc tan
Functii elementare matematice
� Abs(x) – valoarea absoluta� Sqrt(x) – radacina patrata� Nthroot(x,n) – radacina de ordinul n a x� Sign(x) – valoarea -1 daca x < 0; 1 altfel� Rem(x, y) – restul impartirii intregi a lui x la y� Exp(x) – e la puterea x� Log(x) – logaritmul natural (in baza e)� Log10(x)- logaritmul zecimal (baza 10)
Functii de rotunjire
� Round(x) – rotunjeste pana la cel mai apropiat intreg� Fix(x) – rotunjeste prin scadere (trunghiaza) pana la
cel mai apropiat intreg (in cazul numerelor pozitive). In cazul numerelor negative, rotunjeste prin adaos.
Ex. Round(8.6) = 9; round(-8.6) = -9Fix(8.6) = 8; fix(-8.6) = -8� Floor(x) – rotunjeste prin scadere pana la cel mai
apropiat intreg� Ceil(x) – rotunjeste prin adaos la cel mai apropiat
intregEx. Floor(-8.6) = -9; ceil (-8.6) = -8
Functii pentru matematica discreta
� Matematica discreta este matematicanumerelor intregi
Exemplu: factorialul (!) unui numar5! = 1x2x3x4x5 = 120In Matlab factorial(5)Ans = 120
Alte exemple
� factor(x) – factorizarea numarului x in factori primi12 = 2x2x3= 22 x 3In matlab: factor(x)Ans= 2 2 3� gcd(x, y) – cel mai mare divizor comunGcd(10,15)Ans = 5� lcm (x, y) – cel mai mic multiplu comun� rats(x) – reprezinta x ca o fractie� nchoosek(n,k) – combinari de n luate cate k
Permutari
� 1 2 3� 1 3 2� 2 1 3� 2 3 1� 3 1 2� 3 2 13!
Aranjamente n luate cate m
n = 4; m =2
Combinari de n luate cate m
Functii trigonometrice
180 grade……….pi radiani
Problema
� Sa se gaseasca rezultanta unui grup de forte ce actioneaza aspra unui balon cu aer
Gravitatie
Forta vantului
Flotabilitate
F – forta totalaFx - forta pe axa XFy - forta pe axa Y
Problema(2)
Suma fortelor pe fiecare axa
Unghiul sub care actioneaza forta rezultanta
Problema(3)Modulul rezultantei
G = 100NF = 200NV =50N
Problema(4) – un exemplu de mana
� Se calculeaza componentele fortelor pe fiecare din axe, apoi suma
Problema(5) – un exemplu de mana
� Se calculeaza unghiul rezultantei si modulul acesteia
Problema(6)
� Rezolvarea in Matlab
Rezolvarea unei probleme in Matlab
clear, clc %eliminarea variabilelor definite anterior si curatarea %ecranului%Definim intrarileForce =[100, 200, 50];theta = [-90, +90, +30];%convert angles to radianstheta = theta*pi/180;%Find the x componentsForceX = Force.*cos(theta);%Sum the x componentsForceX_total = sum(ForceX);%Find and sum the y components in the same stepForceY_total = sum(Force.*sin(theta));%Find the resulting angle in radiansresult_angle = atan(ForceY_total/ForceX_total);%Find the resulting angle in degreesresult_degrees = result_angle*180/pi%Find the magnitude of the resulting forceForce_total = ForceX_total/cos(result_angle)
Realizati graficul functiei sin(x) pentru
0≤x≤4π� Crearea unui sir de 100 de esantioane (valori)
intre 0 si 4π.
� Calcularea sin(.) pentru sirul de valori
� Realizarea graficului
>>x=linspace(0,4*pi,100);
>>y=sin(x);
>>plot(y)0 10 20 30 40 50 60 70 80 90 100
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Graficul functiei e-x/3sin(x) intre 0≤x≤4π
� Crearea unui sir de 100 de esantioane (valori) intre 0 si 4π.
� .
� Calculate sin(.) of functia sin
� Calculate e-x/3 of the functia exponentiala
� ltiply the arrays y produsul ambelor functii
>>x=linspace(0,4*pi,100);
>>y=sin(x);
>>y1=exp(-x/3);
>>y2=y*y1;
Graficul functiei e-x/3sin(x) intre 0≤x≤4π
� Inmultim vectorii y si y1 corect (element cu element)
� Realizam graficul functiei
>>y2=y.*y1;
>>plot(y2)
0 10 20 30 40 50 60 70 80 90 100-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
Grafice
� plot(.)
� stem(.)
Example:>>x=linspace(0,4*pi,100);>>y=sin(x);>>plot(y)>>plot(x,y)
Example:>>stem(y)>>stem(x,y)
0 10 20 30 40 50 60 70 80 90 100-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0 10 20 30 40 50 60 70 80 90 100-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
Grafice
� title(.)
� xlabel(.)
� ylabel(.)
>>title(‘This is the sinus function’)
>>xlabel(‘x (secs)’)
>>ylabel(‘sin(x)’)0 10 20 30 40 50 60 70 80 90 100
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1This is the sinus function
x (secs)si
n(x)
Operator (relationali, logici)
� == Equal to� ~= Not equal to� < Strictly smaller� > Strictly greater� <= Smaller than or equal to� >= Greater than equal to� & And operator� | Or operator
Controlul fluxului in Matlab
� if � for � while � break � ….
Structura de control decizionala (de selectie)� Sintaxa comenzii IF
if (Conditie_1)Comenzi Matlab
elseif (Conditie_2)Comenzi Matlab
elseif (Conditie_3)Comenzi Matlab
elseComenzi Matlab
end
Cateva exemple simple
if ((a>3) & (b==5))Set de comenzi Matlab;
end
if (a<3)Comenzi Matlab;
elseif (b~=5) Alte comenzi Matlab;
end
if (a<3)Comenzi Matlab;
else Alte comenzi Matlab;
end
IF simplu
conditie
Grup de instructiuni 1
adevarat fals
Grup de instructiuni 2
if (Conditie)Comenzi Matlab
elseComenzi Matlab
end
IF-ELSEIF-ELSE
conditie1
Grup de Instructiuni 1
true
false
conditie2
Grup de Instructiuni 2
Grup de instructiuni 3
true
false
if (Conditie_1)Comenzi Matlab
elseif (Conditie_2)Comenzi Matlab
elseif (Conditie_3)Comenzi Matlab
elseComenzi Matlab
end
Rezolvarea ecuatiei de gradul 2
� ax2 + bx + c = 0� Pasii
� d = b2 – 4ac� if d > 0,
doua radacini realeelse if d == 0,
doua radacini reale identiceelse
doua radacini complexe
Rezolvarea ecuatiei de gradul 2
% Solicitarea coeficientilor ecuatieidisp ( 'ACEST PROGRAM REZOLVA ECUATIA') ;disp ( 'DE GRADUL AL DOILEA, DE FORMA A*X^2 + B*X + C = 0. ' ) ;a = input ( ‘Introduceti coeficientul A: ' ) ;b = input ( ‘Introduceti coeficientul B: ' ) ;c = input ( 'Introduceti coeficientul C: ' ) ;
% Calcularea discriminantuluidiscriminant = b ^2 - 4 * a * c;
% Gasirea radacinilor, in functie de valoarea discriminatuluiif discriminant > 0 % doua radacini reale, deci...
x1 = ( -b + sqrt(discriminant) ) / ( 2 * a ) ;x2 = ( -b - sqrt(discriminant) ) / ( 2 * a ) ;disp ( 'Aceasta ecuatie are doua radacini reale:' ) ;fprintf ( 'x1 = %f\n' , x1) ;fprintf ( 'x2 = %f\n' , x2) ;
elseif discriminant == 0 % doua radacini reale egale...x1 = ( -b ) / ( 2 * a ) ;disp ( ‘Aceasta ecuatie are doua radacini reale identice:' ) ;fprintf ( 'x1 = x2 = %f\n' , x1) ;
else % doua radacini complexe...real_part = ( -b ) / ( 2 * a ) ;imag_part = sqrt ( abs ( discriminant ) ) / ( 2 * a ) ;disp ( ‘Aceasta ecuatie are doua radacini complexe:' ) ;fprintf( 'x1 = %f +i %f\n' , real_part, imag_part ) ;fprintf( 'x2 = %f -i %f\n' , real_part, imag_part ) ;
end
Intrari/ Iesiri controlate de utilizator
� Intrari definite de utilizator� Iesiri definite de utilizator
Ramificatii: Constructia “switch”switch ( expression ),case value 1,
statement 1statement 2...
case value 2,statement 1statement 2...
...end
statementgroup 1
statementgroup 2
← expression este o constanta scalara sau sir
Ramificatii: Constructia “switch”switch ( expression ),case {value set 1},
statement 1statement 2...
case {value set 2},statement 1statement 2...
...otherwise,
statement 1statement 2...
end
statementgroup 1
statementgroup 2
optional statement group that is executed if none of the cases is satisfied
Exemplu
� Exemplu: numere pare si impareswitch (valoare),case {1,3,5,7,9},
disp( ‘Numar impar’ );case {2,4,6,8,10},
disp( ‘Numar par’ );otherwise,
disp( ‘In afara intervalului’ );end
Bucle
� Buclele sunt utilizate pentru a executa o secventa de instructiuni de mai multe ori
� Vom studia:� bucla while� bucla for
� Difera in modul in care este controlata repetarea
Bucle: bucla “while”
� Instructiunile sunt executate repetitiv cat timp conditia este indeplinitawhile ( condition ),
statement 1statement 2...
endgrup de
instructiuni
conditie
grup de instructiuni
true
false
Exemple� Exemplu: Media aritmetica si deviatia standard a unui set de
masuratori pozitive� Pseudocod:
� Initializeaza sum_x, sum_x2, n� Citeste prima valoare, x� while x >= 0,
n ← n + 1sum_x ← sum_x + xsum_x2 ← sum_x2 + x^2Citeste urmatoarea valoare, x
end� x_mean ← sum_x / n� x_std ← sqrt( ( n * sum_x2 – sum_x^2 ) / ( n * (n-1) ) )� Afiseaza rezultatul
Exemplu in Matlab% Initializeaza sumele.n = 0; sum_x = 0; sum_x2 = 0;
% Citeste prima valoareax = input( ‘Introduceti prima valoare: ' ) ;
% Bucla While pentru a citi intrarile.while x >= 0
% Acumuleaza sumele.n = n + 1;sum_x = sum_x + x;sum_x2 = sum_x2 + x^2;
% Citeste urmatoarea valoarex = input( ‘Introduceti urmatoarea valoare: ' ) ;
end
% Calculeaza media si deviatia standardx_bar = sum_x / n;std_dev = sqrt( (n * sum_x2 - sum_x^2) / (n * (n -1)) ) ;
% Afiseaza rezultatele.fprintf( ‘Media acestui set de date este: %f\n' , x_bar) ;fprintf( ‘Deviatia standard este: %f\n' , std_dev) ;fprintf( ‘Numarul de valori este: %f\n' , n) ;
Bucla: bucla “for”� Instructiunile sunt executate de un numar
specificat de ori
for index = expression,statement 1statement 2...
end
� Expresia este de obicei un vector in notatia scurta
primul:increment:ultimul
statementgroup
Exemple
� Exemplu:
for x = [ 1 5 13 ],x
end
� Output:
x =1
x =5
x =13
Exemple
� Exemplu:
for x = [ 1 2 3; 4 5 6 ],x
end
� Output:
x =14
x =25
x =36
Exemple� Factorialul (n!) unui numar intreg n
n = input( ‘Introduceti n: ‘ );if ( ( n < 0 ) | ( fix(n) ~= n ) ),
error( ‘n trebuie sa fie un intreg pozitiv’ );endif ( ( n == 0 ) | ( n == 1 ) ),
f = 1;else
f = 1;for ii = 2:n,
f = f * ii;end
end
Exemplu� Exemplu: Media aritmetica si deviatia standard a unui set de
masuratori pozitive� Pseudocod:
� Initializeaza sum_x, sum_x2� Citeste numarul de masuratori, n� for ii = 1:n,
Citeste valoarea, xsum_x ← sum_x + xsum_x2 ← sum_x2 + x^2
end� x_mean ← sum_x / n� x_std ← sqrt( ( n * sum_x2 – sum_x^2 ) / ( n * (n-1) ) )� Afiseaza rezultatul
Exemplul in Matlab% Intializare sumesum_x = 0; sum_x2 = 0;
% Numarul de valori.n = input( ‘Introduceti numarul de valori: ' ) ;
% Verficam daca sunt date suficiente.if n < 2 % Date insuficiente
disp ( ‘Trebuie sa introduceti cel putin 2 valori.' ) ;
else % Avem valori suficiente.
% Bucla in care se citesc valorile.for ii = 1:n
% Citeste urmatoarea valoarex = input( ‘Introduceti valoarea: ' ) ;% Acumuleaza sumele.sum_x = sum_x + x;sum_x2 = sum_x2 + x^2;
end
% Calculam media si dev std.x_bar = sum_x / n;std_dev = sqrt( (n * sum_x2 - sum_x^2) / (n * (n -1)) ) ;
% Afisam.fprintf( ‘Media acestui set de date este: %f\n' , x_bar) ;fprintf( ‘Deviatia standard este: %f\n' , std_dev) ;fprintf( ‘Numarul de valori este: %f\n' , n) ;
end
Alte exemple
� Ghicirea unui numar ales de calculator intre 1 asi 10
� Pseudocod:� Alege un numar la intamplare, num, in [1,10]� Citeste presupunerea utilizatorului� while ( guess ~= num ),
Citeste noua presupunereend
Codul Matlab
num = round( (10-1) * rand + 1 );guess = input( Numarul ghicit?' );tries = 1;while ( guess ~= num ),
guess = input( ‘Numarul ghicit?' );tries = tries + 1;
endfprintf( ‘Ati ghicit corect in %d incercari', tries );
Acelasi exemplu, numar limitat de incercari
� Acum utilizatorul are la dispozitie numai 3 incercari
� Pseudocode:� Pseudocod:
� Alege un numar la intamplare, num, in [1,10]� Citeste presupunerea utilizatorului� Initializeaza numarul de incercari cu 1� while ( (guess ~= num) & ( tries < 3 ) ),
Citeste noua presupunereIntrementeaza numarul de incercari
� end
In Matlabnum = round( (10-1) * rand + 1 );guess = input( Numarul ghicit?' );tries = 1;while ( ( guess ~= num ) & ( tries < 3 ) ),
guess = input( Numarul ghicit?' );tries = tries + 1;
endif ( guess == num ),
disp( ‘Felicitari, ati ghicit!' );else
disp( ‘N-ati ghicit!' );end
1.Să se selecteze elementele de pe poziţiile 2-6 şi 1, 4, 7 ale vectorului: A=[1 2 3 4 5 6 7 8].
RezolvareA=[1 2 3 4 5 6 7 8]B=A(2:6)C=A(1,4,7)
2. Fie o matrice A să se selecteze:a) linia 1;b) coloana 2;c) liniile 1-3 şi coloanele 3-5;d) liniile 1,3 şi coloanele 2, 3-5;
RezolvareA=[1 2 3 4 5 ;6 7 8 9 0; 1 4 6 8 6; 3 1 7 0 4]a=A(1,:)b=A(:,2)c=A(1:3,3:5)d=A([1,3],[2,3:5])
Recomandari
� Folositi indentatia pentru a imbunatati lizibilitatea codului
� Nu modificati niciodata valoarea indexului de bucla in interiorul buclei
� Atribuiti valori tuturor vectorilor utilizati intr-o bucla inainte de a executa bucla
� Daca se poate implementa un calcul fie printr-o bucla, fie folosind vectori, utilizati intotdeauna vectori
� Utilizati cu precadere functii Matlab predefinite in defavoarea reimplementarii lor
Utilizarea fisierelor M
Click to create a new M-File
• Extension “.m” • A text file containing script or function or program to run
Utilizarea fisierelor M
If you include “;” at the end of each statement,result will not be shown immediately
Functii definite de utilizator
� Functiile sunt subrutine stocate in fisiere m ce pot fi executate prin specificarea unui set de intrari si a iesilor unde acestea isi vor depune rezultatul
� Codul Matlab care spune ca un fisier m este o functie:
� Acestea trebuie scrise la inceputul fisierului iar fisierul trebuie salvat cu avand numele functiei
function out1=functionname(in1)function out1=functionname(in1,in2,in3)function [out1,out2]=functionname(in1,in2)
Functii definite de utilizator
� Exemple� Scrie o functie: out=squarer (A, ind)
� Care ridica la patrat o matrice daca parametrul ind este 1� Sau ridica la patrat matricea element cu element daca
parametrul ind este 2
Acelasi nume
Functii definite de utilizator� O alta functie ce primeste ca parametru un vector si intoarce ca rezultatsuma si produsul elementelor vectorului
� Functia sumprod(.) poate fi apelata in linie de comanda astfel:
Note:
� “%” este semnul de comentariu in Matlab (echivalent cu “//” in C). Orice altceva se regaseste pe aceeasi linie este neglijat de compilatorul Matlab.
� Uneori intarziere executiei unui program este intarziata in mod deliberat pentru a observa unele rezultate. Se foloseste comanda “pause” pentru acesta
pause %asteapta pana se apasa o tastapause(3) %asteapta 3 secunde
Comenzi utile
� Comenzi pentru a invoca ajutorul in Matlab
>>help numedefunctie
>>lookfor cuvantcheie
Top Related