Documente Academic
Documente Profesional
Documente Cultură
CUPRINS
• Programarea în Octave (V)
❑ Algoritmi uzuali de căutare în vectori
✓Căutarea secvențială
✓Căutarea binară
❑ Funcții anonime și funcții inline (recapitulare)
❑ Calcul simbolic în Octave / Matlab
✓Instalarea pachetului Symbolic în Octave
✓Funcţii utilizate în vederea efectuării de calcule
simbolice cu aplicații în Algebră
✓Aplicații rezolvate
✓Funcţii utilizate în vederea efectuării de calcule
simbolice cu aplicații în Analiza matematică
✓Aplicații rezolvate
2
Algoritmi de căutare
• Algoritmii de căutare rezolvă următoarea problemă: dacă v
este un vector cu valori oarecare, să se decidă dacă o
anumită valoare x se află printre elementele sale.
• Multe situaţii din lumea reală necesită cunoaşterea acestui
lucru, iar algoritmii dezvoltaţi în această direcţie urmăresc să
rezolve această sarcină cât mai eficient.
• Sortarea şi căutarea sunt două sarcini deseori
interdependente – pentru a face o sortare este necesară
căutarea, pentru căutare uneori este necesară (sau
avantajoasă) sortarea.
3
Algoritmi de căutare
Căutarea secvențială
• Algoritmul de căutare secvențială
• este unul dintre cei mai simpli algoritmi de căutare
• urmăreşte să verifice apartenenţa unui element la un şir de
elemente de aceeaşi natură (în speţă a unui număr la un şir
de numere)
• Pentru aceasta, se parcurge şirul de la un capăt la celălalt
şi se compară numărul căutat cu fiecare element din şir
(pentru aflarea răspunsului, vectorul este parcurs
secvențial).
• În cazul în care s-a găsit corespondenţă (egalitate), un
indicator flag este poziţionat.
• La sfârşitul parcurgerii şirului, indicatorul va arăta dacă
numărul căutat aparţine sau nu şirului. 4
Algoritmi de căutare
• Căutarea secvențială (algoritm – implementare Octave (I) )
clc
clear
% citire vector
n=input('Nr. de elemente ale vectorului: ');
for i=1:n
printf('Dati elementul %i: ',i);
v(i)=input('');
endfor
% afisare vector
disp(v);
5
Algoritmi de căutare
• Căutarea secvențială (algoritm – implementare Octave (II) )
% cautarea secventiala a lui x in vector
gasit=0;
for i=1:n
if(v(i)==x)
gasit=1;
endif
endfor
if(gasit==1)
printf('S-a gasit in vector numarul %.0f \n',x);
else
printf('Nu s-a gasit in vector numarul %.0f \n',x);
endif
6
Algoritmi de căutare
Căutarea binară
• Algoritmul de căutare binară
• oferă performanţe mai bune decât algoritmul de căutare
secvenţială
• funcţionează astfel:
• se compară numărul căutat cu elementul aflat la mijlocul
şirului (element care se mai numeşte şi pivot).
• În cazul în care cele două elemente coincid, căutarea s-a
încheiat cu succes.
• Dacă numărul căutat este mai mare decât pivotul, se
continuă căutarea în aceeaşi manieră în subşirul delimitat
de pivot şi sfârșitul şirului iniţial.
• Dacă numărul căutat este mai mic decât pivotul, se
continuă căutarea în aceeaşi manieră în subşirul delimitat
de pivot şi începutul şirului iniţial.
7
Algoritmi de căutare
Căutarea binară
• Algoritmul de căutare binară
8
Algoritmi de căutare
Căutarea binară
• Căutarea binară (algoritm – implementare Octave (I) )
clc
clear
% citire vector
n=input('Nr. de elemente ale vectorului: ');
for i=1:n
printf('Dati elementul %i: ',i);
v(i)=input('');
endfor
% sortare vector
v=sort(v);
9
Algoritmi de căutare
Căutarea binară
• Căutarea binară (algoritm – implementare Octave (II) )
12
Funcții inline (recapitulare)
• Se definesc cu funcția inline() având drept argument un
string cu expresia funcției.
• Exemplu:
>> f=inline("2*x+sin(x)");
>> f(5)
ans = 9.0411
>> feval(f,3)
̀
ans = 6.1411
13
Calcul simbolic în Octave/Matlab
• Pe lângă evaluarea numerică (calcule cu valori numerice şi
rezultate întotdeauna numerice), Octave și Matlab permit şi
evaluare simbolică (calcule cu simboluri şi rezultate ce conţin
simboluri).
• În Matlab, pentru calculul simbolic se folosește modulul
Symbolic Math Toolbox.
• În Octave, pentru calcul simbolic se utilizează pachetul
Symbolic.
14
Calcul simbolic în Octave/Matlab
• Modulul Symbolic Math Toolbox (Matlab) / pachetul Symbolic
(Octave) suplimentează facilităţile numerice şi grafice ale mediului
Matlab/Octave, adăugând câteva tipuri diferite de calcule
matematice:
• calcul diferenţial, integral, limite, sume şi serii Taylor;
• algebră lineară: inverse, determinanţi, valori proprii, valori
singulare, descompunere şi forme canonice ale matricelor
simbolice;
• metode de simplificare a expresiilor algebrice;
• soluţii simbolice şi numerice ale ecuaţiilor algebrice şi
diferenţiale;
• funcţii speciale din matematica aplicată clasică;
• evaluarea numerică a funcţiilor matematice cu orice precizie
15
specificată.
Calcul simbolic în Octave
Instalarea pachetului Symbolic
• În Octave, pachetul Symbolic reprezintă o bibliotecă de
funcţii implementate în Python.
• Pentru a funcţiona corect în Octave, trebuie ca pe calculator
să fie instalat Python, împreună cu bibliotecile SimPy 1.0 şi
mpmath din Python.
• Descrierea pachetului Symbolic:
https://octave.sourceforge.io/symbolic/overview.html
16
Calcul simbolic în Octave
Instalarea pachetului Symbolic
1) Se verifică dacă pachetul Symbolic este instalat, cu comanda:
>> pkg list
• Este probabil ca pachetul să nu fie instalat. Atunci se vor parcurge
următorii paşi:
2) Se descarcă pachetul Symbolic de la adresa:
https://octave.sourceforge.io/symbolic/
3) Se instalează pachetul Symbolic în Octave cu comanda:
>> pkg install symbolic-2.7.1.tar.gz
• Verificaţi că pachetul s-a instalat:
>> pkg list
4) Se încarcă pachetul Symbolic, cu comanda:
17
>> pkg load symbolic
Calcul simbolic în Octave
Instalarea pachetului Symbolic
5) Se poate verifica folosirea pachetului Symbolic, scriind
comanda de creare a unei variabile simbolice:
>> syms x
• Dacă se obţine un mesaj de eroare, este posibil ca eroarea să
fie din cauză că nu este instalat Python sau versiunea de SymPy
este prea veche.
6) Se instalează Python 3.7 de la adresa:
https://www.python.org/ftp/python/3.7.2/python-3.7.2.exe
7) Se instalează Sympy 1.0 de la adresa:
https://github.com/sympy/sympy/releases/download/sympy-
18
1.0/sympy-1.0.win32.exe
Calcul simbolic în Octave
Instalarea pachetului Symbolic
8) Se instalează mpmath de la adresa:
https://storage.googleapis.com/google-code-archive-
downloads/v2/code.google.com/mpmath/mpmath-0.17.win32.exe
9) Dacă în continuare apare eroare că nu se poate deschide Python, se
definește în Octave o variabilă sistem, cu comanda:
>> setenv("Python","calea completă la
python.exe")
• De exemplu:
>> setenv("Python","C:\\Python\\Python36-
32\\python.exe")
9) Verificați din nou, cu comanda:
>> syms x
19
Calcul simbolic în Octave/Matlab
• Funcţii utilizate în vederea efectuării de calcule simbolice cu
aplicații în Algebră:
Funcție Semnificație
det(A) Calculează determinantul simbolic al matricei A
inv(A) Calculează inversa simbolică a matricei A
transpose(A) Determină transpusa simbolică a matricei A
simplify(E) Simplifică simbolic o expresie E
factor(E) Factorizează expresia E
[r,p,k]= Se obţine descompunerea în fracţii simple pe baza
residue(B,A) parametrilor de ieşire: r (vectorul coloană al
reziduurilor), p (vectorul coloană al polilor), k (vectorul
linie al termenilor liberi)
20
Calcul simbolic în Octave/Matlab
Funcție Semnificație
expand(E) Realizează expandarea expresiei E
coeffs(P,x) Determină coeficienţii polinomului P în raport cu x
solve(eq) Rezolvă ecuaţia eq=0 în raport cu variabila din
expresia eq
solve(eq,var) Rezolvă ecuaţia eq=0 în raport cu variabila var
din expresia eq
solve(eq1,…,eqn, Rezolvă sistemul format din ecuațiile eq1=0, …,
var1,…,varn) eqn=0 în raport cu variabilele var1, …, varn
21
Calcul simbolic în Octave/Matlab
• Variabilele
utilizate în calcule simbolice se declară prin
comanda “scurtă” syms:
syms var1 var2 … Este notația scurtă pentru:
var1=sym(‘var1’);
var2=sym(‘var2’); …
syms var1 var2 … real Este notația scurtă pentru:
var1=sym(‘var1’,’real’);
var2=sym(‘var2’,’real’); …
syms var1 var2 … positive Este notația scurtă pentru:
var1=sym(‘var1’,’positive’);
var2=sym(‘var2’,’positive’); …
22
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
1) Să se definească două variabile simbolice a și b.
>> a=sym(‘a’)
>> b=sym(‘b’)
sau, mai scurt:
>> syms a b
2) Să se calculeze (simbolic) expresiile:
a) 𝑎 + 3𝑎 + 2𝑎2 − 2𝑏 + 4𝑏3
>> E=a+3*a+2*a^2-2*b+4*b^3
E = (sym)
2 3
2*a + 4*a + 4*b - 2*b
b) 𝑎2 − 𝑏2
>> E=a^2-b^2
E = (sym)
2 2 23
a - b
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
3) Să se simplifice expresia:
3𝑛+2 5𝑛 + 3𝑛 5𝑛+1
𝐸 = 𝑛+1 𝑛
3 5 + 2 ∙ 3𝑛+1 5𝑛
>>syms n
>>E=(3^(n+2)*5^n+3^n*5^(n+1))/(3^(n+1)*5^n+2*3^(n
+1)*5^n);
>> simplify(E)
ans = (sym) 14/9
24
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
4) Să se calculeze determinantul, transpusa și inversa simbolică pentru
matricea:
cos 𝑥 − sin 𝑥
𝐴=
sin 𝑥 cos 𝑥
>> syms x
>> A=[cos(x) -sin(x); sin(x) cos(x)];
>> det(A)
ans = (sym)
2 2
sin (x) + cos (x)
>> simplify(det(A))
ans = (sym) 1
>> transpose(A)
ans = (sym 2x2 matrix)
[cos(x) sin(x)]
[-sin(x) cos(x)]
>> simplify(inv(A))
ans = (sym 2x2 matrix) 25
[cos(x) sin(x)]
[-sin(x) cos(x)]
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
5) Să se factorizeze expresia:
𝐸 = 𝑥 3 + 𝑦𝑥 2 − 2 3𝑥 2 𝑦 − 2 3𝑥𝑦 2 + 3𝑦 2 𝑥 + 3𝑦 3
>> E=x^3+y*x^2-2*sqrt(3)*x^2*y-2*sqrt(3)*x*y^2+3*y^2*x+3*y^3;
>> factor(E)
ans = (sym)
/ 2 ___ 2\
(x + y)*\x - 2*\/ 3 *x*y + 3*y /
26
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
6) Să se calculeze suma:
3 5 1
𝑆𝑛 = 2 + + + ⋯ + 1 + 𝑛−1 , 𝑛 ∈ ℕ
2 4 2
>> syms n i
>> S=simplify(symsum(1+1/(2^(i-1)),i,1,n))
S = (sym)
-n + 1
- 2 + n + 2
27
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
7) Descompuneți în fracții simple expresia:
𝑥+1
𝑥 3 − 7𝑥 2 + 15𝑥 − 9
• Pasul 1. Scriem vectorul linie ce conţine coeficienţii polinomului de la numărătorul
fracţiei.
>> B=[1 1];
>> syms x m
>> x=solve('x^2-2*(m+2)*x+m^2-1',x)
x = (sym 2x1 matrix)
[ _________ ]
[m - \/ 4*m + 5 + 2]
[ _________ ]
[m + \/ 4*m + 5 + 2]
30
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
9) Rezolvați sistemul de ecuații în raport cu 𝑥, 𝑦, 𝑧:
3𝑥 + 4𝑦 + 𝑚𝑧 = 0
ቐ 4𝑥 + 𝑚𝑦 + 3𝑧 = 6 ,𝑚 ∈ ℝ
𝑚𝑥 + 3𝑦 + 4𝑧 = 3 + 𝑚
>> syms x y z m
>> [x,y,z]=solve('3*x+4*y+m*z','4*x+m*y+3*z-6’,
'm*x+3*y+4*z-3-m',x,y,z)
x = (sym)
/ 2 \
-18*m + (m + 3)*\m - 12/ + 96
------------------------------
3
m - 36*m + 91
31
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
9) Rezolvați sistemul de ecuații în raport cu 𝑥, 𝑦, 𝑧:
3𝑥 + 4𝑦 + 𝑚𝑧 = 0
ቐ 4𝑥 + 𝑚𝑦 + 3𝑧 = 6 ,𝑚 ∈ ℝ
𝑚𝑥 + 3𝑦 + 4𝑧 = 3 + 𝑚
y = (sym)
2
2*m - 3*m - 45
---------------
3
m - 36*m + 91
z = (sym)
2
- 3*m - 17*m + 102
-------------------
3
m - 36*m + 91 32
Calcul simbolic în Octave/Matlab
• Funcţii utilizate în vederea efectuării de calcule simbolice cu
aplicații în Analiză matematică:
Funcție Semnificație
limit(f,x,a) Calculează limita expresiei simbolice f când 𝑥 → 𝑎
limit(f,x,a, Calculează limita expresiei simbolice f când 𝑥 → 𝑎, 𝑥 > 𝑎
’right’)
limit(f,x,a, Calculează limita expresiei simbolice f când 𝑥 → 𝑎, 𝑥 < 𝑎
’left’)
symsum(s,v,a,b) Calculează simbolic σ𝑏𝑣=𝑎 𝑠
diff(f,’x’) Calculează simbolic 𝑓 ′ (𝑥)
diff(f,’x’,n) Calculează simbolic 𝑓 (𝑛) (𝑥)
int(f) Calculează simbolic )𝑥(𝑓
33
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
1) Să se calculeze
1
lim 𝑒𝑥
𝑥→0,𝑥>0
>> syms x
>> limit(exp(1/x),x,0,'right')
ans = (sym) oo
2) Să se calculeze
𝑛 2𝑛 !
lim
𝑛→∞ 𝑛! 2
>> syms n
>> limit(('(2*n)!/(n!^2)')^(1/n),n,inf)
ans = (sym) 4
34
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
3) Să se calculeze
𝑛
𝑖 2 + 3𝑖 + 1
𝑛− 2
𝑖 + 3𝑖 + 2
𝑖=1
>> syms n i
>> s=(i^2+3*i+1)/(i^2+3*i+2);
>> simplify(n-symsum(s,i,1,n))
ans = (sym)
n
---------
2*(n + 2)
35
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
4) Să se calculeze derivata 𝑓 ′ 𝑥 a funcției:
𝑓 𝑥 = 𝑐𝑜𝑠 2 𝑥
>> diff(cos(sqrt(x))^2)
ans = (sym)
/ ___\ / ___\
-sin\\/ x /*cos\\/ x /
-----------------------
___
\/ x
Sau:
>> diff(diff(x*atan(x)-log(1+x^2)))
ans = (sym)
2
2*x
---------
2
/ 2 \
\x + 1/
Sau:
>> diff(x*atan(x)-log(1+x^2),2) 37
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
6) Să se calculeze
2
න 2 ⅆ𝑥
𝑥
>> syms x
>> simplify(int(2/x^2))
ans = (sym)
-2
---
x
38
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
7) Să se calculeze
1
න 𝑥 + 1 ⅆ𝑥
0
>> syms x
>> f=@(x) x+1;
>> int(f(x),0,1)
ans = (sym) 3/2
39
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
8) Să se calculeze
1
න sin 𝑥 + 2𝑥 ⅆ𝑥
0
>> syms x
>> f=@(x) sin(x)+2*x;
>> double(int(f(x),0,1))
ans = 1.4597
40
Calcul simbolic în Octave/Matlab
Aplicații rezolvate
9) Să se reprezinte graficul funcției
𝑓 𝑥 = sin 𝑥 + 2𝑥
pe intervalul [−2𝜋, 2𝜋]
>> syms x
>> f=@(x) sin(x)+2*x;
>> ezplot(f(x), [-2*pi,2*pi])
41