Documente Academic
Documente Profesional
Documente Cultură
Curs 1 cont.
1. PREZENTARE GENERAL
MATLAB = Matrix laboratory este un limbaj de programare i un sistem de dezvoltare a aplicaiilor din
diverse domenii
Matlab este dezvoltat de The MathWorks, Inc., SUA
Domenii de utilizare:
Matematic, calcul numeric i simbolic
Dezvoltarea algoritmilor
Modelare, simulare i testarea prototipurilor
Achiziii date de la senzori, analiza i vizualizarea datelor
Grafica inginereasc i din tiinele aplicate
Dezvoltarea de aplicaii, inclusiv GUI
1.Limbajul MATLAB: - un limbaj de nivel nalt, tipul de baz este matricea, exist
instruciuni de control, funcii, structuri de date, intrri/ieiri i cu proprieti de programare
orientat pe obiecte. Facilitile de programare sunt organizate pe 6 directoare din toolbox/matlab/
1
ops
lang
strfun
Character strings.
iofun
File input/output.
fscanf, fseek
timefun
clock, date
datatypes
2.Mediul de lucru MATLAB Set de faciliti care permit manevrarea variabilelor n spaiul
de lucru, importul/exportul de date, dezvoltarea, manipularea, editarea i depanarea fiierelor
MATLAB (.m) i a aplicaiilor MATLAB. Aceste faciliti sunt n dir. general din toolbox/matlab/:
beep, delete, dir, rmdir, dos, echo, exit, import,
general General purpose commands.
load, who, whos, ver, save, quit etc.
3.Handle Graphics Reprezint sistemul grafic al MATLAB-ului. Cuprinde comenzi de
nalt nivel pentru vizualizarea datelor bi i tri-dimensionale, procesarea imaginilor, animaie,
prezentri grafice. Permite de asemenea utilizarea unor comenzi de nivel sczut pentru crearea unor
interfee grafice GUI. Funciile grafice sunt organizate n 5 directoare din toolbox/matlab/:
graph2d
Two-dimensional graphs:
graph3d
Specgraph
Specialized graphs:
graphics
uitools
Handle Graphics:
figure, hold, print etc.
Graphical user interface tools: menu etc.
elmat
elfun
specfun
abs(),sin(),tan,sinh,exp,
log, log2, log10, imag,real
bessel,cross,dot,factorial
matfun
trace,lu,rank,svd,eig ...
datafun
fft, ifft,mean,var,std,lscov
polyfun
funfun
sparfun
Sparse matrices.
full(), sparse()
Terminarea sesiunii de lucru: comanda >>quit la prompterul MATLAB sau exit din meniul File
Fereastra de comand (fereastra principal) unde Interpretorul MATLAB afieaz un prompter (>>).
De exemplu, pentru introducerea unei matrice 3 x 3 se poate tasta:
A = [1 2 3; 4 5 6; 7 8 10]
i la apsarea tastelor Enter sau Return, MATLAB-ul rspunde cu:
A =
1
2
3
4
5
6
7
8
10
sau: Ctrl-n
tergerea ferestrei de comand: >> clc
Linii de comand lungi: ntrerupere prin trei puncte urmate de Return sau Enter pentru a indica
faptul c expresia continu pe linia urmtoare. Exemplu:
s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 . . .
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
Fereastra de comand permite rularea comenzilor MATLAB, lansarea unor instrumente cum ar
fi Editor/Debugger i permite startarea toolbox-urilor.
Formatul n care comanda save stocheaz datele poate fi controlat prin adugarea unor flag-uri
(opiuni) n lista de nume de fiiere sau variabile:
-mat
-ascii
-ascii -double
-append
Exemple:
save
save f1_var [mat]
save('myfile','VAR1','VAR2')
A = 'myfile';
load(A)
Wildcards Comenzile load i save permit specificarea unui caracter special de tip wildcard (*).
Exemplu: save rundata x* %salveaz toate variabilele din workspace care ncep cu x n fiierul
rundata.mat.
Browser-ul Workspace (varianta grafic a comenzii whos) permite vizualizarea coninutului
spaiului de lucru curent.
Exemplu: vizualizarea datelor incrcate cu load
3.1. Cuvinte rezervate (Keywords) ale limbajului MATLAB: 'break' , 'case', 'continue' 'if '
'else' 'elseif' 'end' 'for' 'function' global' 'otherwise' 'persistent' 'return' 'switch'
'try' catch 'while'. Pentru listarea lor se tasteaz funcia: iskeyword
3.2. Expresii
MATLAB-ul lucreaz cu expresii matematice ca i celelalte limbaje de programare
Instruciunile Matlab sunt adesea de forma:
variabila=expresie
sau numai:
expresie
Se evalueaz valoarea expresiei din dreapta semnului = iar valoarea obinut se atribuie
variabilei din stnga semnului =.
Pentru forma simplificat (a doua) valoarea expresiei se atribuie unei variabile `ans` (answer)
create imediat de Matlab.
>> 1/3
>> sqrt(2)
>> exp(1)
>> tan(pi/4)^-1
ans
=
ans
=
ans
=
ans =
1.4142
2.7183
1.0000
0.3333
Expresia = niruire de operanzi i operatori; operanzii: nume de variabile, constante, nume
(sau apel) de funcii, operatorii: +, *, .*, ^, .^ etc.
>> 4 * sin(pi/6) / sqrt(2) + 3^2 - exp(2) * tan(pi/4)
ans =
3.0252
Matlab lucreaz n mod linie avnd la baz un interpretor (i nu compilator). Fiecare
instruciune pe rnd este trimis interpretorului i evaluat.
3.3. O variabil MATLAB este un nume care se asigneaz (asociaz) unei zone de memorie
unde sunt stocate valori. Prin nume citim/scriem valoarea din/n memorie, i folosim valoarea n
expresii. MATLAB dispune de trei tipuri de variabile: locale, globale i persistente(locale funciei, nu
se terg la ieire, valoarea lor este reinut i regsit la un nou apel al aceleai funcii).
MATLAB-ul NU necesit declararea dimensiunii variabilelor, deoarece la ntlnirea unui nou
nume de variabil genereaz automat variabila respectiv i aloc spaiul necesar de memorie.
Tipul de dat asociat numelui se poate schimba n acelai program:
>> a=123
>> a='qwer'
a=
123
a=
>> a=[1 2 3; 2 3 4; 3 4 5]
a=
1 2 3
2 3 4
3 4 5
qwer
Numele unei variabile este o liter, urmat de un numr orict de mare de litere, cifre sau
simboluri. Din nume numai primele 31 de caractere sunt folosite pentru identificare.
MATLAB-ul este case sensitive - face distincie ntre literele mici i cele mari (n nume).
Exemplu:
a = 30
>> exp(i*pi/2)
ans =
0.0 + 1.0000i
cos(pi/2) + i*sin(pi/2)
Operatori elementari
Operatori aritmetici n cadrul expresiilor:
+ adunare
- scdere
\ mprire la stnga
* multiplicare
/ mprire
^ ridicare la putere
` transpusa unei matrice sau complex conjugata unui numr complex
( ) operatorul de specificare a ordinii de evaluare (cu prioritate maxim)
3.4.Funcii matematice
MATLAB-ul furnizeaz un mare numr de funcii matematice elementare standard:
abs, angle, sqrt, exp, log,log10,log2, sin (argument n
radiani), asin, sind (argument grade), asind, atan2, sinh, imag,
real, rem, sign
>> angle(i)
ans =
1.5708
>> rem(5,3)
ans =
2
>> sind(30)
ans =
0.5000
>>exp(2) % 2.7183^2
ans =
7.3891
>> log(2.72)
ans =
1.0006
% f.logaritmica
>> atan2(1,0)
ans =
1.5708
>> atan2(-1,0)
ans =
-1.5708
%-pi<= ATAN2(Y,X)<=pi
O parte din funcii (cum ar fi sqrt, sin)sunt de tip built-in, fac parte din nucleul Matlab,
fiind compilate i astfel ofer vitez de execuie sporit (accesul la structura funciei nefiind
permis).
Unele funcii sunt implementate ca fiiere MATLAB (M-files) i pot fi modificate.
Pentru a gsi calea spre codul surs a unei funcii MATLAB M-file folosim funcia which:
>> which exp => built-in (D:\MATLAB\toolbox\matlab\elfun\@double\exp) % double method
>> which pascal => D:\MATLAB\toolbox\matlab\elmat\pascal.m
Sunt dou tipuri de fiiere M-files: script i function (pot primi i returna valori).
Cteva funcii furnizeaz valorile unor constante:
pi
3.14159265
i i j
Imaginary unit,
eps
realmin
realmax
Inf
Infinit
NaN
Not a Number
(sqrt(-1) )
a = abs(3+4i)
a =
5
huge1 = exp(log(realmax))
huge1 =
1.7977e+308
>> exp(i*pi)
ans =
-1.0000 + 0.0000i
toobig = pi*huge
toobig =
Inf
(pas=1, implicit)
1.0000 1.2000
t[7]
b) val initial, val final, numar valori inclusiv prima i ultima (Vector cu spaiere liniar)
x=linspace(-300, 100, 5)
Rezult: x = -300 -200 -100 0 100
c) Vector cu valori spaiate logaritmic
x1= logspace(2, 4, 3)
%3 valori 10^2 10^3 10^4
x1 =
100
1000
10000
x1= logspace(-1, 2, 5)
=>
ans = 0.1000 0.5623 3.1623 17.7828 100.
Genereaz 5 valori 10^-1 10^2
(inclusiv capetele)
3.6. Numere complexe (coordonate carteziene i polare):
>>z = 3.0000 + 4.0000i
% x + iy
>>conj(z)
ans = 3.0000 - 4.0000i
% x - iy
>> z '
ans = 3.0000 - 4.0000i
>> r = abs(z)
>> z+conj(z)
ans = 6
Faza:
r1 = 5
% x + iy + x iy = 2x
>> fi=angle(z)
fi = 0.9273
% cadran I
% pi/2=1.57rad
>> fi1=angle(conj(z))
fi1= - 0.9273 % cadran IV
>> pi/2
ans = 1.5708 % radiani
Fig. 1. Numrul complex z
n planul complex
Modulul:
z * conj(z)
ans= 25
compass([z, conj(z), z*conj(z)]) % figura
>> sqrt ( z * conj(z) )
ans = 5
% verificare egalitate/ expresie logic
>> sqrt ( z*conj(z)) == abs(z)
ans = 1 (true)
%
%
%
%
z = z e j
cos + j sin = e j
>> abs(z)*( cos(fi) +i*sin(fi) )
ans =
3.0000 + 4.0000i
z+z2= ( x + x 2 ) + j ( y + y 2 )
z-z2= ( x x2 ) + j ( y y 2 )
>> z + z2
ans = -1.0000 + 6.0000i
>> fi_sum=angle(z+z2)
fi_sum= 1.7359 % radiani
% rezultat in Cadran II
>> angle(z+z2) > pi/2
ans =
% s=square
>> hold
>> plot(z2,'s')
>> line([0 real(z2)],[0 imag(z2)])
% traseaza a doua linie
Reprezentare vectori cu originea n (0,0):
z = 3.0000 + 4.0000i
( x1 x2 y1 y 2 ) + j ( x1 y 2 + y1 x2 )
ans =
-20.0000 -10.0000i
z x + j y ( x + j y )(u jv ) ( xu + yv ) + j ( xv + yu )
=
=
=
w u + jv
(u + jv )(u jv )
u2 + v2
xu + yv j ( yu xv )
= 2
+ 2
u + v2
u + v2
>>z = 3.0000 + 4.0000i
>>z2= -4.00 + 2i
>> z / z2
ans =
-0.2000 - 1.1000i
Forme polare:
z e j1
z
z1
= 1 j = 1 e j (1 2 )
z2 z2 e 2
z2
= ctul modulelor i diferena fazelor
exp(fi*i)/
Inmulirea jz= j ( x + j y ) = jx y = y + jx
Numrul complex jz se obine prin rotirea lui z cu 90 grade n sens
trigonometric.
Varianta polar: j = 1 e
Imprirea z/j=
=> jz= 1e
* z e j = z e
j ( + )
2
x + j y jx y
=
= y jx
j
1
Varianta polar:
Fig. 4. z i z/ j=y-jx
10
j ( )
j ( )
j ( )
1
j
2
z = z
= z ( j ) = z 1 e 2 = z e j * e 2 = z e
j
1
Numrul complex z/j se obine prin rotirea lui z cu 90 grade n sens orar
Curs 2
Grafic z, z*j, z/j
4
-1
-2
-3
-4
-3
-2
-1
>> B'
ans =
-1 0
>> B'*A
ans =
4
1
%1x3 3x3 -> 1x3
4
ans =
19 28 37
>> A(1:4)* V'
ans =
%1x4 4x1->1x1
49
>> D^-1 %inversa 3x3
ans =
0.1407 -0.0281
0
-0.0398 0.2080
0
-0.0201 0.0040 0.1429
>> D^-1 * D
ans =
Prof.dr.ing. Iulian Lupea
Programarea i Utilizarea Calculatoarelor
1.0000
0
0
-0.0000 1.0000
0
0.0000 -0.0000 1.0000
>> 2*D = = D+D %test
ans =
1 1 1
1 1 1
1 1 1
Impriri / i \
>> M=magic(3)
ans =
8 1 6
3 5 7
4 9 2
>> M/D
ans =
0.9654
0.0824
0.1645
>> M\D
ans =
0.9474
-0.3146
0.0207
0.0069
0.9835
1.7671
0.8571
1.0000
0.2857
-0.5750 0.4472
0.0500 0.7389
0.9250 -0.7194
1.0000 0.0000
0
-0.0000 1.0000
0
-0.0000 -0.0000 1.0000
>> D*D= =D^2 %la putere
ans =
1 1 1
1 1 1
1 1 1
>> M * D^-1
ans =
0.9654 0.0069
0.0824 0.9835
0.1645 1.7671
>> M^-1 * D
ans =
0.9474 -0.5750
-0.3146 0.0500
0.0207 0.9250
%=M / D
0.8571
1.0000
0.2857
%M \ D
0.4472
0.7389
-0.7194
Tipul de dat
ntreg:
int8,
int16,
int32,
int64,
Exemple
uint16(65000)
( conversie la uint16 )
Descriere
Tablou de ntregi signed (int) i unsigned (uint)
O valoare ocup 8, 16, 32 resp. 64 bii n memorie
tip data
ce valori poate conine:
[de la -128 la 127]
int8
[de la 0
la 255]
uint
[-32768 la 32767]
int6
[ 0
la 65535]
uint16
[ -2^63 la (2^63)-1 ]
sau:
int64
single(3.1 * 10^38)
uint8,
uint16,
uint32,
uint64
[ -9.2234e+018 la 9.2234e+018]
Single
12
(4 octei)
single(5+6i)
%conversie 16->8oct
Double
(tip implicit)
3.4 * 10^300
5 + 6i
[1 2; 3 4.1]
(8 octei)
Logical
(1 octet)
Char
(2 octei/
caracter)
Structure
Cell array
a{1,1} = 12;
a{1,2} = 'Red';
a{1,3} = magic(4);
a{2,3}='a'
Function
handle
User class
Java class
polynom([0 -2 -5])
java.awt.Frame
Valorile numerice sunt stocate intern, implicit n format virgul mobil double-precision.
Pentru a stoca un ntreg trebuie realizat conversie (vezi funcii de conversie) de la tipul double la
tipul ntreg dorit.
Ex.1. Conversie la ntreg pentru a memora val. 325 ntr-o variabil ntreag cu semn pe 16-bit:
x = int16(325);
% x este un tablou 1 x 1 de ntregi cu semn
x1=int32(500.499) % se va memora 500 (partea fracionar este neglijat)
13
9.2
1
6
7
2
inf
4.8];
>> cell_array1{2}
ans =
Mircea Bolboaca
>> cell_array1{2}(2:4) % identific cell cu { }
ans =
% apoi in tablou refer cu ( )
irc
ans =
10
Exemple: Cell arrays
Tabloul(matricea) de celule este folosit la stocarea indexat a datelor de tipuri diferite. n
celulele tabloului pot fi stocate date de tipuri i mrimi diverse. Putem spune c celulele sunt
cmpuri fr nume (dar indexate pentru a putea fi referite).
Ex1: Urmtoarea instruciune creeaz un tablou A de 2 x 2 celule:
>>A = {[1 4 3; 0 5 8; 7 2 9], 'Marius Giurgiu' ; 3+7i, -pi : pi/4 : pi};
*se iniializeaz:
A{1,1} = { [1 4 3; 0 5 8; 7 2 9] }
% se obine un cell array pentru A{1,1}
A{1,3} = {'abc', 'de'} i >>A{2,2} = [1 2 3]
15
% s-a schimbat e cu a
WIREFRAME. Stack{1,1}(1,1)
Structura WIREFRAME cu cmpul Stack de tip cell array; se refer celula {1,1} care este
un ir de caractere => este referit primul caracter din ir.
2.Operatori
Operatorii MATLAB pot fi clasificai n trei categorii:
Operatori aritmetici
Operatori relaionali (compar operanzii cantitativ)
Operatori logici
*Operatori aritmetici
+
Adunare
.^
9 16]
Scdere
'
.*
'
.'
./
mprire la dreapta: 1 ./ [1 2 3]
1.0000 0.5000 0.3333
>>[1 2] . / [2 3]
0.5000 0.6667
.\
mprire la stnga: 2 .\ [1 2 3]
numerelor complexe
Plus unar
A/B
Minus unar
A\B
Operatorii aritmetici pe element (.*, ./) lucreaz cu elementele corespondente ale unor tablouri de
dimensiuni egale.
Unii operatori binari lucreaz cu un operand matrice i cellalt scalar. n acest caz MATLAB-ul aplic
scalarul fiecrui element al matricei, ex: [2 3] 1 [1 2] sau: [2 3] ./ 2
*Operatori relaionali
<
Mai mic
<=
Mai mic sau egal
>
Mai mare
>=
==
~=
Operatorii relaionali compar elementele corespondente ale unor tablouri de dimensiune egal.
Operatorii relaionali lucreaz totdeauna element cu element. Exemplu:
1 < sqrt(2)
ans =
1
A = [2 7 6; 9 0 5; 3 0.5 6];
B = [8 7 0; 3 2 5; 4 -1 7];
16
>> pi ~= 3.14
ans =
1
A == B
ans =
0
1
0
0
0
0
0
1
0
>> A >= B
0
1
0
1
0
1
1
1
0
*Operatori logici
&
|
~
1 & 1 -> 1
AND (I)
0 & 1 -> 0
OR (SAU)
NOT (Negatie) 1 & 0 -> 0
0 & 0 -> 0
1
0
1
0
I
I
I
I
1
1
0
0
-> 1
-> 1
-> 1
-> 0
XOR(0, 0) -> 0
XOR(0, 1) -> 1
XOR(1, 0) -> 1
XOR(1, 1) -> 0
% EXCLUSIVE OR
Operatorii logici aplicai elementelor corespondente ale unor tablouri de dimensiuni egale.
Pentru vectori i tablouri dreptunghiulare ambii operanzi trebuie s aib aceeai dimensiune
O expresie care utilizeaz operatorul & (I) este adevrat dac ambii operanzi sunt
adevrai. n termeni numerici, expresia este adevrat dac ambii operanzi sunt nenuli.
Exemplu:
u = [1 0 -2 3 0 -5];
v = [5 6 -1 0 0 7];
u & v
ans= 1 0 1 0 0 1
O expresie care utilizeaz operatorul | (SAU) este adevrat dac cel puin unul dintre
operanzi este logic adevrat. Pentru operanzi numerici, expresia este fals dac ambii
operanzi sunt nuli. Exemplu:
u | v
ans = 1
3 0 -5];
0 1
1 0
% numai 0 i 1
v = 5 6 -1 0
>> v & 4
ans =1 1 1 0
Funcii logice
n plus fa de operatorii logici MATLAB-ul furnizeaz i funcii logice:
Funcie
xor( )
all( )
Descriere
Exemple
Realizeaz sau exclusiv. Returneaz logic adevrat dac
a = 1;
unul din operanzi este adevrat i cellalt fals. n termeni
b = 1;
numerici, returneaz 1 dac un operand este nenul i cellalt
xor(a,b)
este zero.
ans = 0
u = [0 1 2 0];
Parametrul este vector: returneaz 1 dac toate elementele
all(u)
vectorului sunt adevrate sau nenule (true).
ans = 0
Parametrul este matrice (all() acioneaz pe coloane):
17
A = [0 1 2;
3 5 0];
all(A)
ans = 0 1 0
Prof.dr.ing. Iulian Lupea
Programarea i Utilizarea Calculatoarelor
any( )
v = [5 0 8];
any(v)
ans = 1
>> any([5 0 8 ;
2 0 0 ])
ans = 1 0 1
3.Prioritatea operatorilor
Se pot scrie expresii care folosesc orice combinaie de operatori aritmetici, relaionali i logici.
a) ordinea de evaluare a expresiei este dat de nivelele de precedena/prioritate
b) n cadrul fiecrui nivel de preceden operatorii au aceeai prioritate i se evalueaz de la
stnga la dreapta.
c) prioritatea maxim o au parantezele:
1. Paranteze ( )
2. Transpusa (.'), putere (.^), transpusa cu complex conjugate ( ' ), matrice la putere ( ^ )
3. plus unar (+), minus unar (-), negare logic (~)
4. nmulire (.*), mprire la dreapta (./), la stnga (.\), nmulire de matrice (*),
mprire matrice dreapta ( / ), mprire matrice stnga ( \ )
5. adunare ( + ), scdere ( - )
6. operatorul dou puncte ( : )
7. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal (>=),
test egalitate (= =), test diferit (~ =)
8. i (&)
9. sau (|)
1 + 4 2 r 2
(1 r 2 ) 2 + 4 2 r 2
>> ze * r
ans =
0 0.0001
0 0.0003
0 0.0005
0 0.0010
0 0.0025
0.0003
0.0005
0.0010
0.0020
0.0050
0.0004
0.0008
0.0015
0.0030
0.0075
0.0006
0.0010
0.0020
0.0040
0.0100
0.0007
0.0013
0.0025
0.0050
0.0125
0.0009
0.0015
0.0030
0.0060
0.0150
18
>> ones(size(ze))
ans =
1
1
1
1
1
>> [1 1 1]' * [4 5 6 7 8]
ans =
4 5 6 7 8
4 5 6 7 8
4 5 6 7 8
ones(size(ze))*(1-r.*r).^2
Sunt generate 5 linii identice care vor fi adunate cu
matricea (2*ze*r).^2 (n care fiecare linie (r) se
nmulete cu un alt zeta)
ze*r => matrice 5x501
X
=> matrice 5x501
plot(r,X) => 5 grafice, pentru abscisa (vectorul) r se
traseaz fiecare linie din matricea X.
if elseif - end
if expresie_logica
grup1 de instructiuni
else
grup2 de instructiuni
end
--------if x>0
fprintf('x este numar pozitiv\n')
else
fprintf('x negativ sau zero\n')
end
if a>b
a=input('a= '); b=input('b= ');
if a>b
disp('a>b')
elseif a<b
'a>b'
disp('a<b')
else
else
%a==b
'a mai mic sau egal cu b'
end
disp('egalitate')
end
n=input('n= ');
if n <= 0
%Daca n este negativ afisaza un mesaj de eroare.
disp('valoarea furnizata trebuie sa fie pozitiva');
elseif rem(n,2)==0 %Daca n este pozitiv si par, imparte n la 2.
A = n/2; disp('n par');
else
%Daca n este pozitiv si impar incrementeaza si imparte la 2
A = (n+1)/2; disp('n impar');
end
a=input('a= '); %carui interval apartine a?
%test daca a<-5 sau >5
if a<-20
a=input('dati valori vector a=');
if a(1)>5
disp('a<-20')
elseif a<-10
disp('a(1)>5')
elseif a(1)<-5
disp('-20 <= a <-10')
19
elseif a<0
disp('-10 <= a <0')
elseif a<10
disp( '0<=a<10')
else
disp('a>=10')
end
end
disp('a(1)<-5')
% pt. a intre [-5 si 5] nu se afisaza
case valoare_2
grup 2 instructiuni
% se execut dac: expresie == valoare_2 =>true
case valoare_n
grup n instructiuni
otherwise
grup n+1 instructiuni
% se execut dac expresie nu egaleaz nici un caz
end
switch var
case 1
disp('1')
case {2,3,4}
disp('2 sau 3 sau 4')
case 5
disp('5')
otherwise
disp('alt valoare')
end
exemplul 2
switch var1
case -1
disp('minus unu');
case 0
disp('zero');
case 1
disp('unu, pozitiv');
otherwise
disp('alta valoare');
end
Spre deosebire de limbajul C, daca un caz este adevrat i acesta se execut, se sare dup end fr a
folosi instruciune break. In C se execut implicit i cazurile urmtoare (daca nu exist instr. break).
20
for k=1:2:n
x(1)=1; %se adaug valori in vect. x(i)
n=100; %increment <0
. . .
for n = 2 : 6
for k=n:-1:1
end
x(n) = 2 * x(n - 1);
. . .
end
end
% rezulta: 1
2
4
8 16 32
i=sqrt(-1);
%valoarea implicita a lui i
for x=0: pi/30 : 2*pi
%pas real
fprintf('x=%6.4f sin(x)=%7.4f %g+ %gi\n', x, sin(x), real(exp(i*x)), imag(exp(i*x)) );
end
x=0.0000 sin(x)= 0.0000 1+ 0i
% Relaia lui Euler: e^(ix) = cos(x) + isin(x)
x=0.1047 sin(x)= 0.1045 0.994522+ 0.104528i
% Observm: x sin(x) pentru x=mic
x=0.2094 sin(x)= 0.2079 0.978148+ 0.207912i
x=0.3142 sin(x)= 0.3090 0.951057+ 0.309017i
x=0.4189 sin(x)= 0.4067 0.913545+ 0.406737i
x=0.5236 sin(x)= 0.5000 0.866025+ 0.5i
x=0.6283 sin(x)= 0.5878 0.809017+ 0.587785i
x=0.7330 sin(x)= 0.6691 0.743145+ 0.669131i
..
Instruciune for n corpul unei alte instruciuni for (for
imbricat):
lin=5; col=12;
for i =1:lin
%se repeta de lin ori
for j =1:col
%repeta de lin x col ori
B(i,j) = 1/(i+j-1);
end
end
plot(1:lin,B) %sau plot(B)= fiecare coloana o curb
Ciclul for
versus
x=1:.1:10; %Cod scalar:
for k=1:length(x)
y(k)=sin(x(k));
end
plot(x,y)
vectorizare
Cod echivalent prin vectorizare:
--------------
----------x=-5:0.1:25;
y=x+sin(x);
plot(x,y)
x=1:.1:10;
y=sin(x);
plot(x,y)
% Ciclul for
%vectorizare
21
x=[1 2 3 4]
miu = sum(x)/length(x); %scalar
suma=0;
for i=1:length(x)
suma=suma +(x(i)-miu)^2
end
variance1=suma/length(x);
% variance1 -> 1.25
miu = sum(x)/length(x);
variance2=sum(( x-miu).^2)/length(x);
sau:
sau:
sum((x-miu).*(x-miu))
(x-miu)*(x-miu)
n
VAR = x2 = 1 ( X [i ] ) 2
n
i =1
Calcule cu matrice
%Numrare elemente ai pozitive din vector
a=input(`Tastati sir numeric= `);
%exemplu [5 -3 1 -9 4 1]
contor=0;
for i=1:length(a)
if a(i)>0
contor=contor+1
end
end
display(contor)
---------------------------
2) i+j<n+1
3) a(i, j)>0
22
a=input('matricea a=');
b=input('matricea b=');
[aL aC]=size(a);
[bL bC]=size(b);
c=zeros(aL,bC);
if(aC ~= bL)
'nu se pot inmulti matricele'
else
for i=1:aL
for j=1:bC
for k=1:aC
c(i,j)=c(i,j)+a(i,k)*b(k,j);
end
end
end
display(c)
if all(all(a*b == c))
'corect'
end
end
CURS 4
-execut un grup de instruciuni de un numr nedefinit de ori, sub controlul unei condiii logice.
while expresie logica
bloc de instructiuni
end
23
..
if expresie_logica
grup1 de instructiuni
else
grup2 de instructiuni
end
..
24
S se traseze schema logic asociat programului de mai jos: conine decizii multiple n corpul ciclului for
Observai:
1.Asemnarea deciziei multiple realizate
cu if-elseif i cea realizat cu switch-case
2. S-au compus schemele logice pentru for
i if-elseif (sau switch)
3.Linia ntrerupt mrginete corpul
instruciunii de ciclare for i conine
deciziile multiple
4. Rescriei exemplul folosind
instruciunea switch-case
5. Rescriei exemplul numai cu if.
1. Funciile sunt subprograme (apelate) care folosesc parametri de intrare (in1, in2,) i parametri
de ieire/calculai (ou1,out2,) pentru a comunica cu programul apelant, cu alte funcii sau cu
fereastra de comenzi.
2. Definiia funciei este salvat ntr-un fiier ce poart acelai nume cu cel al funciei sau altul i
extensia .m In cazul n care numele funciei este diferit de al fiierului se folosete numele
fiierului la apel. Calea spre fiier trebuie setat Set Path dac fiierul nu se afl n directorul
curent sau n lista de ci spre directoare.
3. Apelul funciei este: nume_fun(a1, a2,,an) unde a1, a2, ,an sunt parametri efectivi
(actuali) avnd valori concrete/cunoscute (la momentul apelului).
25
4.Valorile parametrilor efectivi sunt transferate parametrilor formali n ordine de la stnga la dreap.
5. O funcie poate fi apelat de mai multe ori; la fiecare apel, prin parametri de intrare, se aplic
acelai algoritm de calcul unor date de intrare diferite.
6. Folosirea funciilor permite modularizarea programului (anumite sarcini de calcul s fie
ncapsulate)
7. Funciile folosesc variabile locale funciei, variabile care exist numai pe timpul execuiei
funciei: n fun_demo1: i, x; la ieirea din funcie variabilele locale se pierd (elibereaz memoria).
8. Variabilele locale sunt independente de variabilele cu acelai nume din programul principal
(apelant) sau din alte funcii.
9. Funcia poate fi apelat din linia de comand, dintr-o alt funcie sau dintr-un fiier script.
10. Funciile pot s nu aib argumente de intrare sau argumente de ieire.
11. Pentru funcia apelat dintr-o expresie, apelul se nlocuiete cu valoarea (valorile) returnat.
5.2. EXEMPLE - definiii i apeluri de funcii
1) Un parametru de intrare i unul de ieire
x = parametrul de intrare este vector
function y = average(x)
% AVERAGE media elementelor vectorului
y = parametrul de ieire este scalar
y = sum(x) / length(x);
Funcia average este salvat n fiierul average.m
end
APELURI valide ale funciei:
v=[1 2 3 -3 5];
v=[1 2 3 -3 5];
average([1 2 3 -3 5])
ave=average(v)
average(v)
ans =
ans = 1.6000
1.6000
2) 2 parametri de intrare i un (1) parametru de ieire
x,y doi parametri de intrare
function z=xplusy(x,y);
z=x+y;
z un parametru de ieire
Se salveaz definiia funciei ntr-un fisier cu numele xplusy.m
end
APELURI valide ale funciei:
a=1
a=[1 2 3; 3 4 5]
a=7
b=2
b=[7 8 9; 2 0 4]
b=[7 8 9; 2 0 4]
scal1=xplusy(a,b)
matr1=xplusy(a,b)
matr2=xplusy(a,b) * b' %apel n expresie
scal2=xplusy(1,2)
matr1=xplusy([1 2 3; 3 4 5] , b) matr2=xplusy(7, [7 8 9; 2 0 4])
3) 2 parametri de intrare, nu sunt parametri de ieire
function comp(a,b)
if a>b
'a>b'
elseif a<b
'a<b'
else
%a==b
'egalitate'
end
26
stdev =
1
n
( X [i ] mean 2)
i =1
5. Instruciunea break determin ntreruperea ciclrii for sau while i salt la prima instruciune
dup instruciunea end a ciclrii.
6. Instruciunea continue trece controlul sau realizeaz salt la prima instruciune din urmtoarea
iteraie n cadrul ciclrilor for sau while.
7. Instruciunea return determin ieirea forat din funcie (funcia apelat f_A) i ntoarcerea n
punctul de apel din funcia apelant f_An (care a apelat funcia f_A) (funcia returneaz valorile la acel
moment a parametrului de ieire).
function out=fun_demo1(in)
i=1;
while i < in
x(i)=rand(1);
if x(i)>0.95
'se executa break'
break; % intrerupe ciclul while
end
i=i+1;
end
out=x;
%salvare x in out
i
display('exemplu cu break')
end %incheiere functie cu end optional
function out=fun_demo2(in)
i=1;
while i < in
x(i)=rand(1);
if x(i)>0.95
out=x;
%salvam x in out
i
'se executa return'
return; %iesire din functie
end
i=i+1;
end
out=x;
display('exemplu cu return')
i
Apel: a=fun_demo1(1.e2);
Apel: b=fun_demo2(1.e2);
1. Se poate apela o funcie din corpul altei funcii (ambele definiii in acelai fiier):
Ex1: un argument: x
fun_ex=inline( 'x+sin(x)+x.^2' );
%parametrul este ir de caractere
Rez_1=fun_ex (2.2)
Rez_2=fun_ex ([2.2 3 5])
27
0.3624 + 0.9320i
graficul:
3.Variabile globale
VG permit folosirea unor variabile n corpul funciilor fr ca acele variabile s fie pasate
prin parametri n acele funcii.
Comunicare numai prin parametri
Fereastra de comenzi
Definiie fun_1
a=1;
functie y=fun_1(pa,pb,pc)
b=2;
.
c=5;
y=pa+pb+pc; %variabile locale
re=fun_1(a,b,c);
Variabilele a,b,c i-au transferat valorile parametrilor formali pa,pb respectiv pc.
Valoarea calculat y transfer valoarea variabilei re
Comunicare prin parametri i variabil global
a=1;
functie y=fun_2(pa,pb)
b=2;
.
global vgC;
global vgC;
vgC=55;
..
re=fun_2(a,b);
y=pa+pb+ vgC;
Variabilele a,b i-au transferat valorile parametrilor formali pa respectiv pb.
Variabila vbC este declarat global n funcia apelant i apelat (fun_2) deci poate fi folosit n
expresii n funcia apelat fun_2( )
Variabile persistente sunt locale funciei, nu se terg la ieirea din funcie, valoarea lor
este reinut i regsit la un nou apel al aceleai funcii; nu pot fi accesate dinafara funciei.
persistent var_persist;
CURS 5
3. Fiiere script Matlab sau macrouri
Scriptul Matlab este un segment de program Matlab salvat ntr-un fiier numefis.m.
Execuia fiierului script se obine prin apelul numelui fiierului numefis (fr extensie) n linia de
comand, n funcii sau n alte fiiere script.
Dup execuia fiierului script variabilele locale rmn n spaiul de lucru al aplicaiei spre
deosebire de funcie n care variabilele locale se dealoc.
Un program Matlab are forma fiierelor:
nume_script.m
i/sau:
nume_functie.m
Din fiierele de funcii sau fiierele script se pot apela alte funcii sau fiiere script.
Se pot face de asemenea apeluri recursive:
- din funcie se apeleaz aceeai funcie sau
- dintr-un fiier script s se apeleze acelai fiier script.
Funcii transmise ca parametru altei funcii:
Sunt definite trei funcii apelate: f(), g() i arie()
function [y]=g(x)
function [y]=f(x)
y=sin(x)+x;
y=x*cos(x);
end
end
28
function [F]=arie(f1,a,b,n)
F=f1(a)+ f1(b);
... %calcul arie intre a i b
end
f1
parametru formal din def. functiei arie
@f , @g parametrii actuali = adrese de funcii
la apel fun. arie
Grafic 2D n MATLAB
1. Funcii pentru reprezentri grafice 2D n MATLAB
subplot(abc) sau subplot(a,b,c) divizeaz fereastra n grafice aezate matriceal:
a=numr linii,
b=numr coloane,
c=stabilete poziia curent n matrice numrnd pe linii: a11, a12 a21
plot(y) realizeaz reprezentri grafice n coordonate liniare
a) y este vector => reprezint valorile lui y n funcie de numrul de ordine al fiecrui element din vector
b) y este matrice m x n => plot(y) reprezint n curbe cte o curb pentru fiecare coloan a matricei
Exemplul #1 vector
y=sin(x);
plot(y)
Exemplu #2 matrice
plot(x,y)
% acelai numr de valori n x i y
a) reprezint grafic vectorul y (ordonate) n funcie de vectorul x (abscise)
primul punct din grafic:
x(1), y(1)
punctul al doilea din grafic:
x(2), y(2)
ultimul punct:
x(end), y(end)
b) x vector, y matrice => coloanele/liniile matricei y vor fi reprezentate n funcie de vectorul x
subplot(131); plot(r, real(Ac))
subplot(132); plot(r, imag(Ac))
subplot(133); plot(r, [real(Ac); imag(Ac)]); % r=vector, [real(Ac); imag(Ac)]= matrice
29
10
-2
5
4
-4
2
0
-6
0
-8
-5
-2
-10
-4
-10
-12
-6
-8
0.5
1.5
2.5
-14
0.5
1.5
2.5
-15
0
0.5
1.5
2.5
c) plot(x1,y1, x2,y2) => n acelai grafic sunt reprezentate curbele (x1, y1) i (x2, y2)
plot(r, real(Ac), r, imag(Ac) );% sau plot( r, [real(Ac); imag(Ac)] ); identice
% fiecare linie din matrice n funcie de r
*Exemplu cu FFT + module de numere complexe
Profilul unei fore periodice este de forma:
4
subplot(312);
semilogx(abs(Y1(1:length(Y1)/4) ));
30
subplot(121)
fill([1 2 4],[1 6 8],'r') % un poligon
subplot(122)
fill([1 2 4],[1 6 8],'r', [2 4 8],[6 8 9], 'g') % doua poligoane
Reprezentare vectori compleci cu originea n (0,0):
z = 3.0000 + 4.0000i
31
[1.01
0.00002]
element x(
element x(
element x(
1)=
1)=
1)=
1.010
1.010e+000
1.01
element x(
element x(
element x(
2)=
2)=
2)=
0.000
2.000e-005
2e-005
% s-a tastat
%f
%e
%g
%e
%g a ales f. expon.
n cadrul parametrului actual de tip ir de caractere a funciei fprintf, pot fi folosite caractere de
formatare a textului (caractere de evitare):
Linefeed LF + carriage return CR = se trece (scrie) la
\n
\t Tab (se sare un numr de
inceputul liniei urmtoare
caractere/pozitii de scriere)
carriage return
\r
\b Backspace (inapoi un caracter)
Folosim:
\\
pentru a tipri un caracter backslash
%% pentru tiprirea unui caracter procent.
32
33
prod ( x ) = ( x 2 + 2 x + 3)( x 1)
x 1
Exemplu Matlab:
p1=[1 2 3];
p2=[1 -1];
prod=conv(p1,p2)
[cat, rest]=deconv(p1,p2)
p1_ini = conv(p2,cat) + rest
prod = 1 1 1 -3
cat =
1 3
rest =
0 0 6
p1_ini =1 2 3
s+2
10 s 2 + 3s + 6
B=
s+2
5 s 2 + 2s + 4
F ( w) =
% k1=2;k2=2;k3=4; m1=5;m2=10
detB=conv([-m2 0 k2+k3] , [-m1 0 k1+k2]) - [0 0 0 0
k2^2];
pZerouri=[-m2 0 k2+k3];
m2 w 2 + k 2 + k 3
( m2 w + k 2 + k 3)( m1w 2 + k 1 + k 2) k 22
2
pentru:
w=10:0.01:30;
FRF11=polyval(pZerouri,w) ./ polyval(detB,w);
plot(w,FRF11, 'linewidth',1.7);
grid on; zoom;
0.3
0.2
0.1
-0.1
-0.2
-0.3
14
16
18
20
22
24
26
28
r (1)
x p (1)
r ( 2)
x p ( 2)
+ ... +
r(n)
x p(n)
+ k ( x)
34
G( s) =
x2 + 4x + 1
x3 + 2x + 1
x + 4 x +1
x 3 + 2 x +1
r (1)
x p (1)
Rest:
k=
[]
r (2)
x p(2)
r ( 3)
x p ( 3)
0.6162 - 1.2316i
x ( 0.2267 + 1.4677i)
0.6162 + 1.2316i
x ( 0.2267 1.4677i)
-0.2324
x ( -0.4534)
Nyquist Diagram
6
Imaginary Axis
-2
-4
-6
-5
-4
-3
-2
-1
Real Axis
3. GRAFICE 3D
1. Curbe spaiale (3D) sintaxa funciei plot3()
plot3(x,y,z) % x, y, z = vectori de coordonate ale punctelor
plot3(x,y,z, tip-linie);
plot3(x1,y1,z1, tip-linie1, x2,y2,z2, tip-linie2, )
plot3(X,Y,Z)
Exemplu:
t=0 : pi/40 : 10*pi;
plot3(sin(t), sin(t) .*cos(t), 2*t); grid on;
Dou curbe spaiale:
plot3(sin(t), sin(t).*cos(t), 2*t, sin(t), cos(t), 2*t);
sau:
35
1
1
1
2
2
2
3
3
3
4
4
4
6 6 6 6
8 8 8 8
10 10 10 10
>> [X,Y]=meshgrid(3:6)
X=
3 4 5 6
3 4 5 6
3 4 5 6
3 4 5 6
Y=
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
Domeniu dreptunghiular:
-primul vector 0:4 genereaz matricea X
- liniile sunt identice i conin valorile vectorului 0:4 pe axa x
-attea linii cte valori sunt n vectorul 6:2:10 (direcia oy).
-al doilea vector 6:2:10 genereaz matricea Y
-coloanele sunt identice i conin valorile vect. 6:2:10 pe axa y
-attea coloane cte valori sunt n vect. 0:4 (pe direcia ox).
Cele dou matrice X i Y au acelai numr de lin. i col.
PERECHILE (X(i,j), Y(i,j) ) formeaz reeaua de puncte din
domeniul 2D oxy, dreptunghiular, de definiie al funciei z=f(x,y)
Domeniul este ptrat.
Perechile de puncte din plan sunt de forma ( X(i,j), Y(i,j) ):
(3,3), (4,3), (5,3), (6,3), (3,4), (4,4) etc.
z = sin( x 2 + y 2 ) / x 2 + y 2 )
36
Exemplul #2:
[X,Y]=meshgrid(-10:16);
Z=sqrt(X .^2+Y .^2);
surf(X,Y,Z);
37
Attributes
x=
x
syms x
f0=3*x^3+5*x^2-6*x+2 % definire f0
pretty(f0)
% vizualizare f0
3
2
3x +5x -6x+2
diff(f0)
ans = 9*x^2+10*x-6
diff(f)
% prima derivata
ans =
2*(x-1)*(x-2)*(x-3) + (x-1)^2*(x-3) + (x-1)^2*(x-2)
>>f1 = 2*x^2*exp(3*x)
% definire f1
>> diff(f1)
ans = > 4*x*exp(3*x) + 6*x^2*exp(3*x)
>> diff(log(x))
ans =
1/x
>> int(1/x)
ans =
log(x)
Derivare funcii trigonometrice:
>> diff(sin(5*x))
>> diff(sin(x)^2)
ans =
ans =
5*cos(5*x)
2*sin(x)*cos(x)
fps=simplify(fp),
fp=diff( f ) =>
fp =
(4*x+3)/(x^2-x+3) - (2*x^2+3*x-1)/(x^2-x+3)^2*(2*x-1)
- ->
fps =
-(5*x^2-14*x-8)/(x^2-x+3)^2
pretty(fps)
pretty(fp)
2
4 x + 3 (2 x + 3 x - 1) (2 x - 1)
---------- - -------------------------2
2
2
x -x+3
(x - x + 3)
sau:
2
5 x - 14 x - 8
- --------------2
2
(x - x + 3)
38
60*x^2
diff(g1,y)
ans =
15
Funcia ezplot():
x_y = [x y];
% vectorul linie al variabilelor
J = jacobian(g12, x_y)
% calcul Jacobian
J = [ 60*x^2, 15]
[ 1/4,
1]
easy plot
Grafice cu ezplot( )
syms x f1 f2;
% polinom cu solutii simetrice fat de oy:
f1=(x-2.16)*(x-12.7)*(x-38.3) * (x+2.16)*(x+12.7)*(x+38.3)
subplot(211)
ezplot(f1, [-40,40]) ; line([-40 40] , [0 0] , 'Color','r');
8
(x-54/25)
(x-127/10) (x-383/10) (x+54/25) (x+127/10) (x+383/10)
x 10
3
2
1
0
-1
-2
-3
-4
-40
f2= (x-1)*(x-1)*(x-2)*(x-3)+4
subplot(212)
ezplot(f2)
% easy plot -2 pi < x < 2 pi
ezplot(f2, [0,4]) % graficul fun. f pentru 0 <= x <= 4
-20
0
x
20
40
10
8
6
4
df1 = diff(f1);
% derivare + grafic derivata
ezplot(df1,[0,4])
line([0 4],[0 0],'Color','r')
2
x
pretty(x12)
[
2
1/2
[
b (b - 4 a c)
[- 1/2 ------------------[
a
x12 =
39
]
]
]
]
[
[
2
1/2
[
b + (b - 4 a c)
[- 1/2 ------------------[
a
]
]
]
]
]
% solutie simbolica
1/12*a-1/12*b
Soluie ecuatie n raport de r
apoi
n raport de ze:
ans =
-1/(1-2*ze^2)^(1/2)
1/(1-2*ze^2)^(1/2)
ans =
1/2*(-2+2*r^2)^(1/2)/r
pretty(1/(1-2*ze^2)^(1/2))
-1/2*(-2+2*r^2)^(1/2)/r
Soluii numerice:
Expresie matriceal (se reia exemplul cu polyval):
M=[5 0;0 10]; K=[4 -2;-2 6];
detB=det(eval(K-w^2*M))
detB =
20-70*w^2+50*w^4
solve( '20 - 70*w^2 + 50*w^4' ) %sau solve(detB)
ans =
% solutii numerice
[sx sy] = solve(' x + y = 1 ' , ' x - 11*y = 5 ')
sx =
4/3
sy =
-1/3
-1
% 4 solutii w1,w2,w3,w4
1
1/5*10^(1/2)
% (2/5)^(1/2)
-1/5*10^(1/2)
Sistem 3 ecuaii liniare:
[sx1 sx2 sx3] = solve(' 3*x1-x2=5 ' , ' -2*x1+x2+x3', ' 2*x1-x2+4*x3=15' )
sx1 =
2
sx2 =
1
sx3 =
3
clear
syms x1 x2
% definire funcii
h1 = x1*x1 + x2*x2 - 2;
h2 = 0.25*x1*x1 +0.75*x2*x2 -1;
sol = solve(h1,h2); %rezolva sist. pt. x1 i x2
%[x1 x2]=solve(h1,h2)
>> [sol.x1 sol.x2]
ans =
[ 1, 1]
[ -1, 1]
[ 1, -1]
[ -1, -1]
solutie #1
sol #2
sol #3
sol #4
>> int(1/x)
ans =
>> int(tan(x))
ans =
40
ans =
log(x)
-log(cos(x))
2/3*x^3
diff( -log(cos(x)) )
ans =
sin(x)/cos(x)
syms a b x
% variabile simbolice
f = 3*a*b*x + 2*exp(a*x + b);
% definitie f
f1 = diff(f, x) % derivata functiei f in rap. cu x
>> f1 =
3*a*b+2*a*exp(a*x+b)
Integrala definit:
int(f, x, 0, pi/2) % integrare n raport cu variabila x ntre 0 i pi/2
ans = > 1/8*(3*a^2*b*pi^2+16*exp(1/2*pi*a+b)-16*exp(b))/a
f2 = int(f, b, 0, pi/2)
% integrare n raport cu b ntre 0 i pi/2
f2 = > 3/8*a*pi^2*x+2*exp(a*x+1/2*pi)-2*exp(a*x)
Matrice
Funcia inv() inversare matrice, simbolic
syms m1 m2 M;
M=[m1 0; 0 m2]
inv(M)
%matrice diagonal
M=
[ m1, 0]
[ 0, m2]
ans =
[ 1/m1, 0]
[ 0, 1/m2]
syms a b c d A;
A=[a b; c d]
pretty(inv(A))
[ d
b
]
[ --------- - --------- ]
[ad-bc
a d - b c]
[
]
[
c
a
]
[- --------- --------- ]
[ ad-bc ad-bc ]
det(A)
ans = a*d - b*c
Funcia expand():
syms a b c ;
c=sin(a+b)
expand(c)
ans =
sin(a)*cos(b)+cos(a)*sin(b)
etc.
expand(cos(a+b))
ans =
cos(a)*cos(b)-sin(a)*sin(b)
Dezvoltare n serie
de funcii Taylor
f ( x0 + x ) = f ( x0 ) +
Serie MacLaurin
f ( 0 + x ) = f ( 0) +
syms x
f1 = sin(x);
T1 = taylor(f1,10),
f2=cos(x);
T2=taylor(f2,10)
f ' ( x0 )
f '' ( x 0 ) 2 f ' '' ( x 0 ) 3 f ( n ) ( x 0 ) n
x+
x +
x +
x + Rn
1!
2!
3!
n!
f ' ( 0)
f ' ' ( 0 ) 2 f ' '' ( 0) 3 f ( n ) ( 0 ) n
x+
x +
x +
x + Rn
1!
2!
3!
n!
% functii trigonometrice
% primii 10 termeni
e jx = cos(x) + j sin(x)
f3 =exp(j*x);
T3 = taylor(f3,10)
T3 = 1+ i*x- 1/2*x^2 - 1/6*i*x^3+ 1/24*x^4+ 1/120*i*x^5- 1/720*x^6 -1/5040*i*x^7+ 1/40320*x^8+ 1/362880*i*x^9
Diverse
1. Calculul funciei sin(x) folosind dezvoltarea n serie Taylor:
sin(x) = (-1 )n
n=0
x2
x 2n+1
=> Tn +1 = Tn
(2n + 1)!
(2n + 2 )( 2n + 3 )
Rulare:
x =0.4
Numar iteratii n= 23
Valoare calc=
0.389418342308650
Val calc Matlab= 0.389418342308651
2. Rezolvare sistem de ecuaii liniare de forma: AX=B
3 x1 x 2 = 5
2 x1 + x 2 + x3 = 0
2 x1 x 2 + 4 x3 = 15
sau: X1=A \ B
X1 =
2.0000
1.0000
3.0000
2.1. Metoda lui Cramer: x1= 1 / , x2= 2 / , x3= 3 / unde este determinantul sistemului iar i este
determinantul matricei coeficienilor (A) n care coloana i a fost nlocuit cu coloana termenilor liberi (B).
A=[3 -1 0;
-2 1 1;
2 -1 4]
B=[5 0 15]'
X=A^(-1)*B;
X= ...
A1=[5 -1 0;
0
1 1;
15 -1 4]
%calcul direct
% Cramer
x1=det(A1)/det(A)
A3=[3 -1 5;
-2 1 0;
2 -1 15];
x3=det(A3)/det(A)
3.
4.
(A-1)T=(AT)-1
det(A) * det(A-1)=1
5. (A+B)*C=A*C+B*C
det(AB)= det(BA)=det(A)*det(B)
42
6. Integrare
function y = myfun(x) %definitie functie
y = 1./(x.^3-2*x-5);
quad('myfun',1,2) %integrare
ans = -0.2860
>> quad('myfun',-1,7)
Warning: Minimum step size reached; singularity possible.
> In quad at 103
ans =
-0.3811
43