Software Matematic - Matlab
-
Upload
florincarmen -
Category
Documents
-
view
277 -
download
2
Transcript of Software Matematic - Matlab
-
7/30/2019 Software Matematic - Matlab
1/63
Lector univ. dr. A. Dunca
Software matematic Matlab
Universitatea Spiru Haret, 2008
-
7/30/2019 Software Matematic - Matlab
2/63
Cuprins
1 Introducere 8
2 Lucrul cu fisiere in Matlab 10
3 Functii de gestionare a timpului 14
4 Lucrul cu vectori si matrici 18
5 Instructiuni de control 23
6 Siruri de caractere 27
7 Numere Complexe 29
8 Functii matematice 29
9 Operatii cu matrici 31
10 Functii pentru calcule statistice 34
11 Optimizari de functii, rezolvari de ecuatii neliniare 36
12 Operatii cu polinoame 40
13 Derivare si integrare numerica 47
14 Functii pentru grafica 49
5
-
7/30/2019 Software Matematic - Matlab
3/63
Prefata
Prezentele notite de curs se adreseaza studentilor de la Facul-
tatea de Matematica-Informatica a Universitatii Spiru Haret care
sunt nscrisi la cursul de Software Matematic.
Prezentele notite au fost redactate utilizand pachetul MikTex,
www.miktex.org, versiunea pentru Windows a sistemului LATEX.Editia electronica utilizeaza formatul PDF al companiei Adobe
Systems.
Lector univ. dr. A. Dunca
Facultatea de Matematica-Informatica
Universitatea Spiru Haret, Bucuresti, 2008
6
-
7/30/2019 Software Matematic - Matlab
4/63
7
-
7/30/2019 Software Matematic - Matlab
5/63
8
1 Introducere
Pachetul software Matlab al companiei MathWorks este un soft-ware special conceput pentru rezolvarea cu usurinta a problemelorde calcul numeric ce apar in domeniul stiintei si ingineriei. El are ogama bogata de rutine ce permite scrierea rapida de cod datoritafelului natural in care variabilele pot fi definite si initializate inMatlab. Printre domenii de aplicabilitate se afla:
1. calcul matricial si vectorial
2. operatii cu functii trigonometrice, exponentiale, polinomiale
3. rezolvarea de sisteme de ecuatii liniare si neliniare
4. interpolare
5. optimizari
6. statistica
7. grafica
8. operatii cu siruri de caractere
Pachetul software Matlab nu este gratis. Pentru rularea exem-
plelor din aceste note vom folosi Octave, versiunea free a softuluiMatlab. La data scrierii acestor note Octave putea fi downloa-dat de pe situl http://sourceforge.net, efectuati pe acel site ocautare dupa cuvantul cheie Octave. Downloadati de acolo fisierulOctave Forge Windows. Fisierul are aprox. 32Mb. Puteti gasiOctave deasemenea in distributia cygwin (linux emulator for win-dows),www.cygwin.com. Daca sunteti utilizator de linux atunciputeti instala Octave selectand in sectiunea Math din pachetele
dumneavoastra distributia Octave corespunzatoare versiunii de
http://sourceforge.net/http://www.cygwin.com/http://www.cygwin.com/http://www.cygwin.com/http://sourceforge.net/ -
7/30/2019 Software Matematic - Matlab
6/63
9
linux pe care o aveti. Exista compatibilitate foarte mare intreOctave si Matlab, scripturile Octave putand fi rulate pe platformaMatlab si invers.
Se poate spune ca Matlab e cel mai eficient limbaj de progra-mare pentru proiectarea de soft ce presupune un bogat continutmatematic precum calcule extinse sau grafica. Ca drawback, da-torita flexibilitatii ce duce la scriere foarte rapida de cod el ruleaza
mai incet decat executabile in C si chiar Java, de aceea pentruprobleme foarte mari ce presupun foarte multe calcule (de pildarezolvarea unui sistem cu matrice de dimesiunea milioanelor) e depreferat ca Matlab sa fie utilizat numai ca unealta pt proiectarearutinelor, verificarea lor pe probleme mai mici si apoi convertirearutinelor Matlab in cod C/C++ sau alt limbaj de programare mairapid.
Atat Matlab cat si versiunea free Octave sunt amplu documen-
tate atat online cat si in editii tiparite. Se pot consulta de pildasiturilesite-ul Gnu Octave, in englezaMathWorks site, in englezatutorial Matlab al Univ. of Ottawa, in englezatutorial Matlab al Univ. of Michigan, in englezatutorial Matlab, Univ. A.I. Cuza, Iasisau cartea [1].
http://www.gnu.org/software/octave/doc/interpreter/http://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/ref.htmlhttp://www.site.uottawa.ca/~adler/octave/octave_manual.pdfhttp://www.engin.umich.edu/group/ctm/basic/basic.htmlhttp://thor.info.uaic.ro/~fliacob/An2/2007-2008/Materiale%20pentru%20seminarii%20si%20laborator/Introducere%20in%20Matlab-Index%20cu%20exemple.pdfhttp://thor.info.uaic.ro/~fliacob/An2/2007-2008/Materiale%20pentru%20seminarii%20si%20laborator/Introducere%20in%20Matlab-Index%20cu%20exemple.pdfhttp://www.engin.umich.edu/group/ctm/basic/basic.htmlhttp://www.site.uottawa.ca/~adler/octave/octave_manual.pdfhttp://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/ref.htmlhttp://www.gnu.org/software/octave/doc/interpreter/ -
7/30/2019 Software Matematic - Matlab
7/63
10
2 Lucrul cu fisiere in Matlab
Presupunand ca ati instalat versiunea Windows a pachetului Oc-tave, trebuie doar ca sa deschideti terminalul de lucru Octave se-lectand Octave din sectiunea All Programs a calculatorului dum-neavoastra. Daca lucrati pe cygwin sau linux, tipariti comandaoctave in terminal si apoi apasati enter.Din acest moment aveti acces la comenzile built-in din Octave/Matlab.Comanda path
Puteti vedea caile de acces la aceste comenzi executand comandapath. In cazul meu, comanda path returneaza
octave:1> path
Octaves search path contains the following directories:
.
/usr/lib/octave/2.1.73/site/oct/i686-pc-cygwin//
/usr/lib/octave/site/oct/api-v13/i686-pc-cygwin//
/usr/lib/octave/site/oct/i686-pc-cygwin//
/usr/share/octave/2.1.73/site/m//
/usr/share/octave/site/api-v13/m//
/usr/share/octave/site/m//
/usr/lib/octave/2.1.73/oct/i686-pc-cygwin///usr/share/octave/2.1.73/m//
m-files
Fisierele in care dumneavoastra veti scrie instructiuni matlab tre-buie sa aiba extensia .m. Daca ele sunt plasate in directorul curent,adica directorul returnat de comanda pwd, ele pot fi apelate direct,altfel ele se apeleaza impreuna cu intreaga cale la ele.
-
7/30/2019 Software Matematic - Matlab
8/63
11
Instructiunile matlab se pot scrie la linia de comanda in terminaluloctave sau se pot plasa intr-un fisier si apoi executa apeland la liniade comanda numele fisierului respectiv.Presupunand ca ati scris instructiuni matlab in fisierul test.m indirectorul curent pentru a le executa tipariti la linia de comandadin octavetest
De pilda, daca fisierul test.m contine linia de codx=1atunci comanda test afiseaza valoarea 1. Fisierele matlab pot con-tine doar instructiuni matlab(scripturi matlab) sau pot continefunctii. Fisierele ce contin o functie trebuie sa aiba acelasi numeca si functia pe care o contin iar prima linie din fisier trebuie sacontina antetul functiei. De exemplu pentru implementarea uneifunctii numita patrat care calculeaza patratul unui numar real vom
crea fisierul patrat.m(cu notepad, de exemplu) in directorul curentdupa care adaugam in el liniile de cod
function z=patrat(x)
z=x^2;
Dupa efectuarea in terminalul octave a comenziipatrat(2)octave va afisa numarul 4.
Comanda help
Comanda help urmata de numele unei comenzi built-in matlabafiseaza intructiuni ajutatoare in legatura cu acea comanda.Comanda help urmata de numele unei functii matlab create dedumneavoastra si care se afla in path afiseaza intructiunile co-
mentate cu % pe care le-ati plasat imediat dupa antetul functiei.
-
7/30/2019 Software Matematic - Matlab
9/63
12
Revenind la exemplul anterior, daca vom considera functia pa-trat.m
function z=patrat(x)
%calculeaza patratul unui numar x
z=x^2;
comandahelp patratva afisa textul calculeaza patratul unui numar x. Acest mod decomentare a modului de utilizare a unei functii poate fi foarte utilpentru a obtine cu unsurinta informatii despre functii precum ceinput accepta si ce anume returneaza.
Tipuri de date
In matlab exista o flexibilitate foarte mare in ce priveste utilizareavariabilelor din spatiul de lucru.Variabilele pot fi printre altele de tip real, intreg, complex, sir decaractere, vectori sau matrici, ele nu necesita declarare si tipul lor edetectat automat de matlab la momentul intializarii lor. Deaseme-nea in timpul executiei tipul variabilei se poate schimba dand vari-abilei respective o valoare de un tip diferit.De pilda, se pot efectua succesiv la linia de comanda operatiile
x=1;
x=[1 2];
initializeaza mai intai variabila x cu valoare de tip intreg 1, dupacare se stocheaza in x vectorul linie de componente 1,2.
-
7/30/2019 Software Matematic - Matlab
10/63
13
Comanda which urmata de o comanda matlab functioneazaprecum comanda similara din sistemul linux. Ea returneaza caleacatre comanda matlab respectiva.
Comanda who listeaza numele variabilelor din sesiunea curenta.
Comanda whos listeaza numele variabilelor din sesiunea curenta
precum si tipul si dimensiunea lor.
Comanda diary test stocheaza in fisierul test din directorulcurent toate comenzile efectuate la linia de comanda si rezultateleafisate dupa efectuarea comenzii diary. Inregistrarea comenzilor sia rezultatelor se poate opri cu comanda diary off.
Pentru mai multe informatii si exemple in ce priveste utilizareacomenzilor which, whos, who, diary consultati [1] sau siturile re-comandate in primul capitol, Introducere.
-
7/30/2019 Software Matematic - Matlab
11/63
14
3 Functii de gestionare a timpului
Functiile matlab tic,toc,clock, etime ne dau informatii despre tim-pul de executia al unei comenzi si informatii despre data si ora mo-mentului curent conform ceasului calculatorului. Aceste comenzisunt utile atunci cand se doreste optimizarea timpului de executieal unei rutine.Liniile de cod
tic;
for(i=1:100)
i
end
toc
vor masura timpul necesar pentru afisarea tuturor numerelor in-tregi intre 1 si 100.Linia de codtic;lagrange1(12);tocva afisa timpul de executie in secunde al comenzii lagrange1(12).
Acelasi rezultat poate fi obtinut cu liniile de cod
t=clock;
lagrange1(12);
etime(clock,t)
Pentru a afla informatii despre data si ora curente se poate utilizacomanda clock. De exemplu,
data_curenta=fix(clock)
returneaza in vectorul data curenta (in aceasta ordine) anul, luna,
ziua, ora, minutul, secunda curente.
-
7/30/2019 Software Matematic - Matlab
12/63
15
octave:2> data_curenta=fix(clock)
data_curenta =
2008 4 21 9 30 40
octave:3>
-
7/30/2019 Software Matematic - Matlab
13/63
16
Variabile predefinite
Comenzile format long si format short pot fi folosite pen-tru controlul numarului de cifre ce vor fi afisate dintr-un numarzecimal. format short permite afisarea primelor 5 cifre iar formatlong afisarea primelor 15 cifre.
octave:3> format shortoctave:4> pi
pi = 3.1416
octave:5> format long
octave:6> pi
pi = 3.14159265358979
octave:7>
Vezi deasemenea [1] sau siturile recomandate in primul capitol,Introducere, pentru cateva exemple.Pentru afisarea de text sau valori numerice in interiorul unui pro-gram se poate folosi comanda disp . De exemplu, instructiuneadisp(soft matematic)va afisa textulsoft matematicIn cazul in care disp primeste ca input un vector sau matrice ea
va afisa valorile din vector sau matrice fara a mai afisa numelevariabilei.
octave:9> x=[1 2 3]
x =
1 2 3
octave:10> disp(x)
-
7/30/2019 Software Matematic - Matlab
14/63
17
1 2 3
octave:11>
Comenzile size si length
In calculul matricial este necesar sa se cunoasca dimensiunile unei
matrici precum si lungimea unui vector de finit in program. Pentruaceasta se pot utiliza functiile size si length.De exemplusize([1 2;3 7])va returna dimensiunea matricii cu linii 1 2 si 2 3, adica dimensi-unea 2,2 iar comandalength([1 2 3 9 5])va returna 5, adica lungimea vectorului linie [1 2 3 9 5].
variabila ans
Dupa fiecare instructiune efectuata, variabila ans stocheaza rezul-tatul obtinut in urma efectuarii acelei operatii, cata vreme rezul-tatul acelei operatii nu e deja stocat intr-o variabila deja definitade programator.
Iata mai jos un exemplu de utilizare a variabilei ans.
octave:21> 3
ans = 3
octave:22> x=4
x = 4
octave:23> ans
ans = 3
-
7/30/2019 Software Matematic - Matlab
15/63
18
octave:24> 5
ans = 5
octave:25> x=ans*6
x = 3 0
octave:26>
Alte variabile predefinite in matlab sunt eps, realmin, realmax, pi,i. Puteti consulta [1] sau siturile recomandate in primul capitol,
Introducere, sau executatihelp numele variabileipentru a afla informatii in legatura cu aceste variabile.
4 Lucrul cu vectori si matrici
Vectorii se definesc prin listarea componentelor incadrate de paran-
teze drepte.x=[1 2 3 4]e vectorul linie de componente 1 2 3 4. comandax=[1,2,3,4]returneaza acelasi lucru.Comandax=[1;2;3;4]e vectorul coloana de componente 1 2 3 4.
Comandaxcreeaza transpusul vectorului x. Deci daca x e un vector linie, xe vectorul coloana cu aceleasi componente, si invers.De pilda liniile
x=[1 2 3 4]
x
-
7/30/2019 Software Matematic - Matlab
16/63
19
vor returna vectorul coloana de componente1 2 3 4.Sunt valide operatii de concatenare de tipul
x=[1 2]
y=[3 4]
z=[x,y]
In urma acestor operatii z este vectorul linie de componente 1 2 34. Liniile
x=[1 2]
y=[3;4]
z=[x,y]
au acelasi efect.Comandax=0:3:9creeaza un vector obtinut prin impartirea segmentului [0,9] in treiparti egale si stocarea celor 4 numerelor echidistante aparute. decix=[0 3 6 9]Acelasi efect poate fi obtinut cu functia linspacex=linspace(0,9,4)gaseste 4 puncte echidistante in intervalul 0,9, primul fiind 0 iar
ultimul 9. decix=[0 3 6 9]Indexarea vectorilor in matlab incepe de la 1(spre deosebire de Csau Java unde incepe de la 0). Pentru a accesa prima componentaa vectoruluix=[1 2 3 4]putem efectua comandax(1)
Ea va afisa valoarea 1. In acelasi mod,
-
7/30/2019 Software Matematic - Matlab
17/63
20
dacax=[4 5 6 7]comandax(1:3)returneaza un vector ce contine toate componentele lui x de la 1la 3 , adica vectorul linie[4 5 6].
x(2:3) va afisa [5,6].Pentru a selecta din vectorul x componentele de index impar(adicaprima si a treia) se poate utiliza comandax(1:2:4)Ea selecteaza componentele lui x din 2 in 2, adica[4 6]Pentru a defini o matrice A de linii 1 2 si 3 4 se utilizeaza comandaA=[1 2;3 4]
Se specifica deci succesiv liniile separate de ;Urmatoarele linii
x=[1 2]
y=[3 4]
A=[x;y]
creeaza matricea de linii 1,2 si 3,4.Comandasize(A)returneaza dimensiunea lui A adica numerele 2,2.Pentru a acesa componenta matricii A de pe linia 2, coloana 1 sepoate utiliza comandaA(2,1)Pentru a selecta coloana 2 din A si stoca intr-un vector x putemfolosi comanda
x=A(:,2)
-
7/30/2019 Software Matematic - Matlab
18/63
21
Pentru a selecta linia 1din A si stoca intr-un vector x putem folosicomandax=A(1,:)ComandaB=[A;A]creeaza matricea 4x2 cu prima linie 1 2, a doua 3 4,a treia 1 2,apatra 3 4. (deci se pune A sub matricea A)
ComandaB=[A,A]creeaza matricea 2x4 cu linii 1 2 1 2 si 3 4 3 4 (deci se pune A indreapta lui A)Fie matriceaA=[1 2 3; 2 3 4; 4 5 6]pentru a selecta submatricea obtinuta prin intersectarea primelor2 linii cu primele doua coloane poate fi folosita comanda
A(1:2,1:2)ComandaAcalculeaza transpusa matricii A, deci daca A=[ 1 2; 3 4]A va fi matricea [1 3;2 4].Comandadet(A) calculeaza determinantul matricii A iar comanda trace(A)calculeaza suma elementelor de pe diagonala lui A.
Comandaeye(3) sau eye(3,3) genereaza matricea identica de dimensiune 3.Comandazeros(3,4)genereaza o matrice de dimensiune 3x4 cu toate componentele 0.Comandaones(3,4)
-
7/30/2019 Software Matematic - Matlab
19/63
22
genereaza o matrice de dimensiune 3x4 cu toate componenteleegale cu 1.Comandarand(3,3)genereaza o matrice de dimensiune 3x3 cu toate componentele gen-erate aleator in intervalul [0,1). Pentru mai multe exemple con-sultati [1] sau siturile recomandate in primul capitol, Introducere.
-
7/30/2019 Software Matematic - Matlab
20/63
23
5 Instructiuni de control
Operatorii relationali folositi in matlab sunt:
1. = mai mare sau egal
5. == egal cu
6. = diferit de
Formatul de utilizare este
A= B (operator relational) CDe pilda executandx = 2 = 3variabila x va stoca valoarea 1.
iar x = 2 = 2variabila x va stoca valoarea 0.In cazul comparatiilor intre vectori se compara fiecare componentedin vectorii respectivi.De pilda
x = [1 2 3] >= [3 2 1]initializeaza x cu valoarea [0 1 1].Operatorii logici folositi in matlab sunt
1. non2. & si
3.|
sau
-
7/30/2019 Software Matematic - Matlab
21/63
24
De pilda, operatiax = (2 > 3)|(3 < 4)da lui x valoarea 1 pe cand operatiax = (2 > 3)|(3 > 4)da lui x valoarea 0.Forma generala a instructiunii if esteif (expresie logica)
instructiuniendDaca expresia logica e adevarata se executa instructiunile.De exemplu, linia de cod
x=2;
if(x
-
7/30/2019 Software Matematic - Matlab
22/63
25
daca expresia logica e adevarata, executa instructiunile A, altfelexecuta B.Se mai poate utiliza si forma
if (expresie logica 1)
instructiuni 1
elseif (expresie logica 2)
instructiuni 2
elseif (expresie logica 3)
instructiuni 3
end
Daca expresia logica 1 e adevarata se executa instructiunile 1, al-tfel, daca expresia logica 2 e adevarata se executa instructiunile 2,altfel, daca expresia logica 3 e adevarata se executa instructiunile3.Vezi [1] sau siturile recomandate in primul capitol, Introducerepentru exemple.
Instructiunea repetitiva for. Forma generala este
for(i=a:b)
instructiuni
end
Pentru fiecare valoare i de la a la b(inclusiv) executa instructiunile.De pilda dupa executarea liniilor de cod
x=0;
-
7/30/2019 Software Matematic - Matlab
23/63
26
for(i=1:3)
x=x+i;
end
x va avea valoarea 6.o instructiune for de tipul
for(i=1:2:5)
instructiuniend
va executa instructiunile pentru i de la 1 la 5 din 2 in 2, adicai=1,3,5.Instructiunile while, break, return, switch ce se intalnesc si in altelimbaje de programare au variante similare in matlab, vezi [[1]]sau siturile recomandate in primul capitol, Introducere.Instructiunea any(conditii logice) testeaza daca vreuna din conditiie satisfacuta, caz in care returneaza valoarea 1, altfel returneazavaloarea 0. De pilda
any([1 2 3]>1)
va returna valoarea 1.Instructiunea all(conditii logice) testeaza daca toate conditiile suntsatisfacute, caz in care returneaza valoarea 1, altfel returneaza
valoarea 0. De pildaall([1 2 3] > 1) va returna valoarea 0.Instructiunea exist poate fi utilizata pentru a verifica daca o vari-abila exista.De pilda
x=1;
exist(x)
va returna valoarea 1.
-
7/30/2019 Software Matematic - Matlab
24/63
27
6 Siruri de caractere
Functia abs(x) returneaza codurile ASCII ale caracterelor din sirulde caratere x. Atentie, functia abs are o functionalitate diferitaatunci cand inputul este un numar real. abs(abc)returneaza vectorul de componente 97 98 99.In cazul in care un sir de caracatere contine o comanda matlab,aceasta comanda poate fie executata utilizand functia eval.De pilda
x=2;
z=x^2;
eval(z)
va returna valoarea 4.Comanda feval poate fi utilizata pentru evaluarea functiilor.
De pildafeval(f,2)va evalua functia f in valoarea 2. Functia feval e utila atunci candvrem ca o functie f1 sa accepte ca input o alta functie f2. Aceastase realizeaza pasand in functia f1 ca input sirul de caractere f2 siapoi apeland functia f2 cu comanda feval (f2, valoare).Sirurile de caractere se pot compara cu comanda strcmp. De pildastrcmp(xyz,Xyz) va returna valoarea 0 pentru ca xyz si Xyz
nu sunt identice.Comanda findstr(sir1,sir2) va cauta verifica daca sir2 contine sir1si va returna pozitia de inceput in care sir1 incape prima oara insir2.De pilda,findstr(sa,acasa) va returna valoarea 4.Comanda upper(sir) transforma toate caracterele din sir in literemari.
-
7/30/2019 Software Matematic - Matlab
25/63
28
De pildaupper(xyZ)returneaza sirul de caractere XYZlower(sir) transforma toate caracterele din sir in litere mici.Comanda str2num converteste un sir de caractere ce reprezinta unnumar in acel numar. de pilda comandax=str2num(12.3)
da lui x valoarea reala 12.3.Similar, num2str converteste o valoare reala intr-un sir de carac-tere. de pilda
y=2.3;
x=num2str(y)
va da lui x valoarea 2.3. Pentru mai multe explicatii si exemple ince priveste lucrul cu siruri de caractere consultati [[1]] sau siturile
recomandate in primul capitol, Introducere.
-
7/30/2019 Software Matematic - Matlab
26/63
29
7 Numere Complexe
Comandax=2+3*idefineste numarul real x cu parte reala 2 si parte imaginara 3.Partea reala a unui numar real dat x se calculeaza cu comandareal(x)iar partea imaginara cu imag(x). Conjugatul lui x se calculeazacu formula conj(x) argumentului lui cuangle(x) iar modulul cu comanda abs(x). Pentru mai multeexemple consultati [1] sau siturile recomandate in primul capitol,Introducere.
8 Functii matematice
Comandaceil(x) calculeaza cel mai mic numar intreg mai mare ca x. Depilda ceil(2.3) returneaza 3.Comanda floor(x) returneaza partea intreaga a lui x. Pentru acalcula restul impartirii unui numar natural x la numarul naturaly se poate utiliza comanda rem(x,y).De pilda rem(5,2) returneaza valoarea 1.Daca x si y sunt vectori atunci rem(x,y) va calcula restul impartirii
fiecarei componente din x la componenta corespunzatoare din y.Pentru a detecta scrierea fractionara a unui numar zecimal sepoate utiliza comanda rats.De pilda rats(1.5) va returna valorile 3 si 2 pentru ca 3/2 = 1.5Pentru a detecta semnul unei valori reale se poate utiliza functiasign.Daca x > 0 , sign(x) returneaza 1, daca x < 0 sign(x) returneaza-1 iar daca x=0 sign(x) returneaza 0.
-
7/30/2019 Software Matematic - Matlab
27/63
30
Pentru mai multe exemple consultati [1] sau siturile recomandatein primul capitol, Introducere.Operatia de ridicare la putere 23 se apeleaza cu comanda
2^3
Logaritmul natural al lui 2 se calculeaza cu formulalog(2)
iar logaritmul in baza 10 cu formulalog10(2).Pentru a calcula e2 se efectueaza comanda exp(2).
2 se calculeaza cu comanda sqrt(2)In ce priveste functiile trigonometrice, ele se apeleaza cu comenzilecos(x), sin(x), tan(x), cot(x)
unde x e un numar real.Functiile trigonometrice inverse se apeleaza cu comenzile
asin, acos, atan, acot. Comanda gcd(x,y) calculeaza cel mai maredivizor comun al numerelor naturale x si y iar lcm(x,y) cel mai micmultiplu comun al celor doua numere.de pilda gcd(12,15) returneaza valoarea 3iarlcm(4,3)returneaza valoarea 12.
-
7/30/2019 Software Matematic - Matlab
28/63
31
9 Operatii cu matrici
Valorile proprii precum si vectorii proprii ai unei matrici patraticedate se obtin cu comanda eig.x=eig(A)va stoca in vectorul x valorile proprii ale lui A iar[x y]=eig(A)va stoca pe diagonala lui y valorile proprii ale lui A iar in coloanelematricii x vectori proprii unitari asociati acelor valori proprii.Operatiainv(A) returneaza inversa unei matrici nesingulare A.comanda diag(A) returneaza un vector cu componentele de pediagonala lui A.de pilda diag([1 2; 2 3]) va returna vectorul linie de componente1,3.
Daca x e un vector dat atunci diag(x) returneaza o matrice ce arepeste tot 0 cu exceptia diagonalei unde regasim componentele luix.Rotirea unei matrici.Comandafliplr(A) inverseaza coloanele lui A. de pildafliplr ([1 2 3; 1 2 3])va returna matricea cu liniile 3 2 1 si 3 2 1, adica, in sintaxa matlab
[ 3 2 1; 3 2 1].Comandaflipud(A) functioneaza similar, numai ca se inverseaza liniile luiA. De pilda, daca A=[1 2;2 1] atunciflipud(A)va returna matricea[2 1; 1 2]Exemplu:
-
7/30/2019 Software Matematic - Matlab
29/63
32
octave:27> A=[1 2; 3 4]
A =
1 2
3 4
octave:28> fliplr(A)
ans =
2 1
4 3
octave:29> flipud(A)
ans =
3 41 2
octave:30>
Comanda triu(A) returneaza o matrice ce are deasupra diagonaleisi pe diagonala aceleasi componente ca si A si 0 in rest. De pildatriu([ 1 2;2 1]) va returna
[1 2;0 1].Comanda tril(A) returneaza o matrice ce are sub diagonala si pediagonala aceleasi componente ca si A si 0 in rest. De pilda tril([1 2;2 1]) va returna[1 0;2 1].Exemplu:
octave:30> A=[1 2 3;4 5 6;7 8 9]
A =
-
7/30/2019 Software Matematic - Matlab
30/63
33
1 2 3
4 5 6
7 8 9
octave:31> triu(A)
ans =
1 2 3
0 5 6
0 0 9
octave:32> tril(A)
ans =
1 0 04 5 0
7 8 9
-
7/30/2019 Software Matematic - Matlab
31/63
34
10 Functii pentru calcule statistice
Comanda mean(x) calculeaza media aritmetica a componentelorvectorului x. de pilda mean([1 2]) returneaza 1.5.Comandamedian(x)va sorta crescator componentele lui x si apoi va alege componentadin mijloc sau media aritmetica a componentelor din mijloc, dacasunt 2. De pildamedian([3 1 2])returneaza 2iar median([3 1 2 3]) va returna 2.5Comanda sum(x) calculeaza suma componentelor vectorului x.daca x este o matrice sum(x) calculeaza suma elementelor de pefiecare coloana a lui x.
Comanda prod(v) calculeaza produsul valorilor vectorului v.Abaterea medie patratica a componentelor unui vector x se cal-culeaza cu formula std(x).Comanda sort(x) sorteaza in ordine crescatoare elementele vec-torului x.Apelata sub forma[a,b]=sort(x)ea va returna in a componentele lui x ordonate crescator iar in b
indexul lor.De pilda [a,b]=sort([7 5 6]);va returna
a=[5 6 7]
b=[2 3 1]
Comanda max(x) va returna valoarea maxima a componentelorvectorului x.
-
7/30/2019 Software Matematic - Matlab
32/63
35
Apelat cu comanda [a b]=max(x)a va contine valoarea maxima iar b indicele acestei componente.daca x este o matrice max(x) devine un vector ce contine valorilemaxime pe fiecare coloana a lui x.De pilda comandamax([ 1 2;3 0]) va returna3 2
Comanda min(x) se defineste similar, vezi [1] sau siturile recoman-date in primul capitol, Introducere.
-
7/30/2019 Software Matematic - Matlab
33/63
36
11 Optimizari de functii, rezolvari de ecu-atii neliniare
Exemplele din acest capitol au fost verificate in Octave, imple-mentarea free a sistemului Matlab. E posibil ca rularea exemplelorin matlab sa necesite mici modificari.Pentru minimizarea unei functii de o singura variabila reala date
se poate utiliza comanda fmin.fmin(f,a,b, optiuni) va determina o aproximare(in functie de otoleranta specificata in optiuni) a valorii din intervalul [a,b] undefunctia f atinge cea mai mica valoare.Daca vom considera functia f(x) = x2 pe intervalul [-1,2], cea maimica valoare e atinsa in 0, deci o comanda de tipulfmin(f,-1,2) va returna o aproximare a valorii 0.In exemplul de mai jos, functia f al carei minim in intervalul [-1,1]
este aproximat este definita inline
octave:33> f=inline(x.^2);
octave:34> fmin(f,-1,1)
ans = -1.44247747862210e-17
octave:35>
Alternativ, functia f de mai sus putea fi definita intr-un m-filenumit f.m.Comandafmin(cos,3,4,[1,1.e-12])va calcula o aproximare cu 12 zecimale exacte a valorii (din mo-ment ce minimizeaza functia cos(x) pe intervalul [3, 4].Comanda fmax se defineste similar, vezi [1] sau siturile recoman-date in primul capitol, Introducere.Pentru minimizarea functiilor de mai multe variabile reale se poate
utiliza functia fmins. Aceasta functie necesita specificarea unei
-
7/30/2019 Software Matematic - Matlab
34/63
37
predictii initiale pentru gasirea unui minim local apropiat de pre-dictia initiala. E posibil ca functia sa nu returneze o aproximarea unui minim local in cazul cand schema numerica utilizata nuconverge. Sa consideram functia f1
function z=f1(x)
z=x(1)^4+x(2)^2
Un apel de tipulfmins(f1,[1,1],[0,0.0001])va calcula o aproximare a vectorului bidimensional unde f1 areun minim local, adica vectorul [0,0]. Toleranta aleasa, 0.0001, seaplica ambelor componente.
Pentru simplificarea exemplului se poate utiliza un function-handler de tipul
octave:48> f1=@(x)x(1)^4+x(2)^2;octave:49> fmins(f1,[1,1],[0,0.0001])
ans =
0 0
octave:50>
Pentru a rezolva o ecuatie de tipulf(x)=0unde x e o variabila reala, se poate utiliza comandafmin prezentata anterior tinandu-se seama de faptul casolutia x a ecuatiei f(x) = 0 minimizeaza functiaf2(x).De pilda, pentru rezolvarea ecuatiei cos(x) = 12 pe [0, /2]se poate minimiza functia
f(x) = (cos(x) 1/2)2 pe intervalul [0, /2]. Exemplu:
-
7/30/2019 Software Matematic - Matlab
35/63
38
octave:50> f=inline((cos(x)-1/2).^2);
octave:51> fmin(f,0,pi/2)
ans = 1.04719755119660
octave:52> pi/3
ans = 1.04719755119660
Altfel, se poate utiliza functia fzero care gaseste solutia uneiecuatii f(x) = 0 in preajma unei predictii initiale specificate x0
sau intr-un interval dat. Apelul functiei fzero estefzero(f, x0, optiuni)sau fzero(f, [a, b], optiuni)unde optiunile pot contine toleranta cu care solutia e aproximata.In prima varianta x0 este o predictie a solutiei iar in a doua seincearca gasirea unei solutii in intervalul [a,b].De exemplu, sa consideram functia f
function z=f(x)
z=sin(x);
x = fzero(f,0.1);va returna valoarea 0. iar x = fzero(f,-0.1,0.1); va returna val-oarea 0.Fie
function z=f(x)z=exp(x)-1;
Comandaoptions.abstol=0.01;x = fzero(f,-0.1,0.1,options);va aproxima solutia exacta a ecuatiei ex 1 = 0, adica 0, cu douazecimale exacte.Acelasi rezultat ca si fzero poate fi obtinut cu comanda fsolve. Sa
consideram functia matlab f definita mai jos
-
7/30/2019 Software Matematic - Matlab
36/63
39
function z=f(x)
z=exp(x)-1;
Comandax = fsolve(f,0.1);va calcula o aproximare a unei solutii a ecuatiei f(x) = 0 cu pre-dictie initiala 0.1 iar comandax = fsolve(f,-1,1)
va calcula o aproximare a unei solutii a ecuatiei f(x) = 0 in inter-valul [-1,1]. In ambele Cazuri comanda returneaza o aproximarea valorii 0.
-
7/30/2019 Software Matematic - Matlab
37/63
40
12 Operatii cu polinoame
Comanda poly(x) unde x este un vector va calcula coeficientii poli-nomului monic care admite ca radacini componentele vectorului x.De pilda poly([1 -1])va returna numerele1 0 -1, adica coeficientii polinomului x2 1.
octave:67> poly([-1,1])
ans =
1 0 -1
octave:68>
pentru a calcula radacinile unui polinom cu coeficienti stocati inordinea descrescatoare a puterilor lui x in vectorul v se poate uti-liza comanda roots(v).Exemplu:
octave:68> v=[1 -5 4]
v =
1 -5 4
octave:69> roots(v)
ans =
4
1
octave:70>
-
7/30/2019 Software Matematic - Matlab
38/63
41
ceea ce confirma previziunile noastre din moment ce polinomulde coeficienti 1,-5,4 este p(x) = x2 5x + 4 de radacini 1,4.Pentru a evalua intr-o valoare data a un polinom cu coeficientiistocati in vectorul x se poate utiliza comanda polyval(x,a). Depildapolyval([1 0 -1], 2)va returna valoarea 3. Observati ca 1 0 -1 sunt exact coeficientii
polinomuluix2 1.Comanda polyder(v) calculeaza derivata polinomului p ai carui
coeficienti sunt stocati in vectorul v in ordine descrescatoare aputerilor lui x din polinomul p.Exemplu:
octave:70> v=[1 0 -1];
octave:71> polyder(v)
ans =
2 0
octave:72>
Calculul de mai sus confirma ca derivata lui x2 1 este exact2x.
Comanda conv(p,q) calculeaza coeficientii produsului polinoamelorale caror coeficienti sunt stocati in vectorii p,q.Exemplu:
octave:72> p=[1 1 1];q=[1 -1];
octave:73> conv(p,q)
ans =
1 0 0 -1
-
7/30/2019 Software Matematic - Matlab
39/63
42
octave:74>
ceea ce confirma ca
(x2 + x + 1)(x 1) = x3 1
Comanda deconv poate fi utilizata pentru a afla restul si catul
impartirii unui polinom la alt polinom. Sintaxa este[q,r]=deconv(f,g)unde f contine coeficientii polinomului ce este inpartit, g srocheazacoeficientii polinomului prin care se imparte iar q si r contin coefi-cientii catului, respectiv restului in aceasta operatie de impartire.De pilda,
octave:74> f=[1 0 0 1 -1];g=[1 0 1];
octave:75> [q,r]=deconv(f,g)q =
1 0 -1
r =
0 0 0 1 0
octave:76>
ceea ce confirma faptul ca catul si restul impartirii lui f(x) =x4 + x 1 la g(x) = x2 + 1 sunt q(x) = x2 1 respectiv r(x) = x.Pentru aproximarea datelor dintr-un tabel cu graficul unui poli-nom de grad specificat se poate utiliza metoda celor mai micipatrate. Aceasta metoda e implementata in matlab cu ajutorul
comenzii polyfit.
-
7/30/2019 Software Matematic - Matlab
40/63
43
Daca x si y contin prima, respectiv a doua linie din tabelul datatuncio comanda polyfit(x,y,1) va returna coeficientii polinomului f degrad 1 care minimizeaza suma patratelor distantelor de la fiecarey din tabel la f(x) corespunzator lui.Exemplu:
octave:89> x=[-1,0,1,2]
x =
-1 0 1 2
octave:90> y=[0.2,0.8,2.2,2.9]
y =
0.2 0.8 2.2 2.9
octave:91> c=polyfit(x,y,1)
c =
0.95 1.05
octave:92> plot(x,y,*);hold on;plot(x,c(1)*x.+c(2))
va produce urmatorul grafic
-
7/30/2019 Software Matematic - Matlab
41/63
44
unde graficul verde reprezinta polinomul aproximant iar punctelenegre valorile aproximate.O comanda polyfit(x,y,3) va returna coeficientii polinomului f degrad 3 care minimizeaza suma patratelor distantelor de la fiecarey din tabel la f(x) corespunzator lui.Exemplu
octave:114> x=[-1.75 -1 -0.5 0 0.5 1 1.75]
x =
Columns 1 through 4:
-1.75 -1.0 -0.5 0.0
Columns 5 through 7:
-
7/30/2019 Software Matematic - Matlab
42/63
45
0.5 1.0 1.75
octave:115> y=[-6.5 0.3 0.4 -0.5 -0.5 -0.2 6]
y =
Columns 1 through 4:
-6.5 0.3 0.4 -0.5
Columns 5 through 7:
-0.5 -0.2 6.0
octave:116> c=polyfit(x,y,3)
c =
Columns 1 through 2:
1.7627568077263764 -0.0218522146044181
Columns 3 through 4:
-1.8418921621853301 -0.1159320927195561
octave:117> plot(x,y,*);
hold on;
plot(a,c(1)*a.^3+c(2)*a.^2+c(3)*a+c(4))
va produce graficul
-
7/30/2019 Software Matematic - Matlab
43/63
46
Aici graficul verde este graficul polinomului aproximant iarpunctele negre sunt punctele ce se doreste a fi aproximate.
Pentru mai multe exemple vezi [1] sau siturile recomandate inprimul capitol, Introducere.
-
7/30/2019 Software Matematic - Matlab
44/63
47
13 Derivare si integrare numerica
Comanda diff(v) calculeaza diferentele dintre componentele succe-sive ale vectorului v.De exemplu
octave:122> diff([-1 0 1])
ans =
1 1
Aceasta comanda poate fi utilizata pentru aproximarea derivateiunei functii. Se foloseste formula
f(a) = limxaf(x) f(a)
x a
ce conduce la formula de aproximare a derivatei
f(a) f(x) f(a)x a
atunci cand x este aproape de a. Pentru mai multe detalii ince priveste aceasta formula de aproximare consultati sintezele deanaliza numerica.Exemplu: Sa se aproximeze derivata functiei f(x) = x2
exp(x)
pe intervalul [-1,1].Pentru aceasta vom efectua comenzile
octave:124> x=-1:0.01:1;
octave:125> xprim=diff(x);
octave:126> y=x.^2-exp(x);
octave:127> yprim=diff(y);
octave:128> fprim=yprim./xprim;
-
7/30/2019 Software Matematic - Matlab
45/63
48
La sfarsitul acestui calcul vectorul fprim va stoca aproximari alederivatei lui f in numerele -0.99,-0.98,....,0.99,1.
O alta functie ce poate fi utilizata pentru calculul derivatelorpartiale ale unei functii este gradient, vezi [1] sau siturile recoman-date in primul capitol, Introducere.
Pentru a aproxima integrala unei functii date se pot utilizacomenzile quad (utilizeaza metoda lui Simpson, vezi sintezele de
analiza numerica) sau trapz(utilizeaza metoda trapezului, vezi sin-tezele de analiza numerica).Exemplu: Sa se aproximeze
10 e
(x2)dx.Cu quad
octave:132> f=inline(exp(x.^2))
f =
f(x) = exp(x.^2)
octave:133> quad(f,0,1)
ans = 1.46265174590718
Cu trapz
octave:134> x=0:0.01:1;
octave:135> y=exp(x.^2);
octave:136> trapz(x,y)ans = 1.46269704984927
-
7/30/2019 Software Matematic - Matlab
46/63
49
14 Functii pentru grafica
In foarte multe situatii graficele sunt utile pentru a obtine infor-matii despre o anumita functie, informatii ce nu pot fi extrase cuusurinta din forma analitica a functiei respective. In matematicade liceu ele pot fi utilizate de pilda pentru studiul derivabilitatiiunei functii, limita unei functii sau sir, monotonia unei functii saupentru generarea si studiul de suprafete in geometrie.
La baza rutinelor de grafica in matlab sta comanda plot.Pentru vectori x,y comandaplot(x,y) realizeaza graficul punctelor x(i),y(i) si apoi uneste punctesuccesive cu segmente.Comandaplot([1 2 3],[3 4 5])va face graficul punctelor (1,3),(2,4),(3,5) si apoi va uni
(1,3) cu (2,4) si (2,4) cu (3,5) prin segmente , vezi graficul urmator.
-
7/30/2019 Software Matematic - Matlab
47/63
50
Comandaplot(x,y,*) va reprezenta grafic numai punctele (x(i),y(i)).Exemplu: Comanda
plot([1 2 3],[3 4 5],*)
va produce graficul
-
7/30/2019 Software Matematic - Matlab
48/63
51
pentru mai multe optiuni vezi [1] sau siturile recomandate in primulcapitol, Introducere.Pentru a reprezenta vectori in coordonate semilogaritmice se potutiliza comenzilesemilogy si semilogx , vezi [1] sau siturile recomandate in primulcapitol, Introducere.
Exemplu Comandasemilogy([1 2 3],[10^3 10^4 10^5],*)
va produce graficul
-
7/30/2019 Software Matematic - Matlab
49/63
52
Pentru a realiza graficul functiei f(x) = sin(x) pe intervalul [, ]se pot utiliza comenzile
x=-pi:0.01:pi;
plot(x,sin(x))
Graficul produs este
-
7/30/2019 Software Matematic - Matlab
50/63
53
Pentru a realiza simultan graficul a doua functii f(x) = sin(x), g(x) =x2 pe intervalul [, ] se pot utiliza comenzilex=-pi:0.01:pi;
plot(x,sin(x)); hold on; plot(x,x.^2);
Graficul produs este
-
7/30/2019 Software Matematic - Matlab
51/63
54
Comanda hold on permite suprapunerea graficului lui g(x) =x2 peste graficul lui f(x) = sin(x). In cazul in care nu este efec-tuata comanda hold off orice alta comanda grafica va scrie pestegraficul curent fara a-l sterge.
Comanda grid permite suprapunerea unui grid pe grafic. Ex-emplu:
x=-pi:0.01:pi;
plot(x,sin(x)); hold on; plot(x,x.^2);grid
produce graficul
-
7/30/2019 Software Matematic - Matlab
52/63
55
Pentru a da un titlu graficului curent se poate utiliza comandatitle.Exemplu de utilizare:
plot(x,sin(x));grid;title(graficul lui sin)
-
7/30/2019 Software Matematic - Matlab
53/63
56
Comenzile xlabel si ylabel permit scrierea de text pe axa Oxrespectiv Oy.Exemplu de utilizare:
plot(x,sin(x));grid;title(graficul lui sin);
xlabel(valorile lui x);ylabel(valorile lui f(x))
-
7/30/2019 Software Matematic - Matlab
54/63
57
Pentru controlul axelor de coordonate se poate utiliza comandaaxis.
De pilda axis(on) va permite desenarea axelor de coordonatepe grafic in timp ce comanda axis(off) le va sterge.
Comanda axis(equal) stopeaza scalarea axelor, unitatea demasura in directia x e egala cu unitatea de masura in directia y.Pentru alte argumente pentru comanda axis efectuati comandahelp axis.
Alte comenzi utile sunt legend, text, vezi [1] sau siturile reco-mandate in primul capitol, Introducere.Comandafill(X,Y,c) va reprezenta grafic poligonul cu varfurile de coordonate
x stocate in X si coordonate y stocate in Y. Indexul c decide
-
7/30/2019 Software Matematic - Matlab
55/63
58
culoarea interiorului poligonului. Pentru mai multe optiuni si altefunctii de realizare de grafice vezi [1] sau siturile recomandate inprimul capitol, Introducere.
Pentru realizarea unui grafic tridimensional ce reprezinta osuprafata se poate utiliza comanda mesh. Pentru aceasta se genereazamai intai doua matrici x, y ce contin coordonatele punctelor inplanul xOy si apoi se construieste matricea ce contine coordonata
Z a punctelor de pe suprafata respectiva. de exemplu pentru a con-strui graficul unei functii f(x, y) = x2 + y2 pentru x, y [1, 1] sepot folosi comenzile
octave:179> x=-1:0.01:1;
octave:180> y=-1:0.01:1;
octave:181> [X,Y]=meshgrid(x,y);
octave:182> Z=X.^2+Y.^2;
octave:183> mesh(X,Y,Z)
va produce graficul
-
7/30/2019 Software Matematic - Matlab
56/63
59
Comanda surf(X,Y,Z) va produce un grafic identic cu cel pro-dus mai sus de comanda mesh.
Comanda surfc(X,Y,Z) realizeaza graficul suprafetei in acelasitimp cu liniile de acelasi nivel in planul xOy(sectiuni ale suprafeteicu plane paralele cu xOy).
De exemplu comanda
octave:179> x=-1:0.01:1;octave:180> y=-1:0.01:1;
octave:181> [X,Y]=meshgrid(x,y);
octave:182> Z=X.^2+Y.^2;
octave:183> surfc(X,Y,Z)
va produce graficul
-
7/30/2019 Software Matematic - Matlab
57/63
60
Se pot utiliza si pentru grafice in 3 dimensiuni comenzile xlabel,ylabel, legend, title, grid, text, axis mentionate anterior.
Toate setarile grafice efectuate se sterg cu comanda clf.
-
7/30/2019 Software Matematic - Matlab
58/63
61
-
7/30/2019 Software Matematic - Matlab
59/63
LISTA DE FIGURI 62
Lista de figuri
-
7/30/2019 Software Matematic - Matlab
60/63
Index
abs, 27, 29acos, 30acot, 30all, 26angle, 29ans, 17any, 26asin, 30atan, 30axis, 57
break, 26
ceil, 29clf, 60clock, 14concatenarea vectorilor, 19conj, 29conv, 41cos, 30cot, 30
deconv, 42determinantul unei matrici, 21diag, 31diary, 13diary off, 13diff, 47disp, 16
eig, 31eps, 18etime, 14eval, 27exist, 26eye, 21
feval, 27fill, 57findstr, 27flipr, 31flipud, 31floor, 29fmin, 36fmins, 36for, 25format long, 16format short, 16functii matlab, 11fzero, 38
gcd, cel mai mare divizor comun,30
gradient, 48grid, 54
help, 11hold off, 54hold on, 54
-
7/30/2019 Software Matematic - Matlab
61/63
INDEX 64
i, 18imag, 29Indexarea vectorilor in matlab,
19inline, 36inv, 31
lcm, cel mai mic multiplu co-mun, 30
length, 17linspace, 19logaritm in baza 10, 30logaritm natural, 30lower, 28
m-files, 10matrice, definire, 20matrici, 18max, 34mean, 34median, 34min, 35
NaN, 18num2str, 28
path, 10pi, 18plot, 49poly, 40polyder, 41polyfit, 43
polyval, 41prod, 34pwd, 10
radacina patrata, 30rand, 22rats, 29real, 29realmax, 18realmin, 18rem, 29return, 26ridicarea la putere, 30
scripturi matlab , 11semilogx, 51semilogy, 51sign, 29sin, 30size, 17sort, 34std, abaterea medie patratica, 34str2num, 28
strcmp, 27sum, 34surf, 59surfc, 59switch, 26
tan, 30tic,toc, 14
tipuri de date, 12
-
7/30/2019 Software Matematic - Matlab
62/63
INDEX 65
title, 55trace, 21transpusa unei matrici, 21transpusul unui vector, 18tril, 32triu, 32
upper, 27
vector coloana, 18vector generat cu pas constant,
19vector linie, 18vectori, 18
which, 13
while, 26who, 13whos, 13
xlabel, 56
ylabel, 56
zeros, 21
-
7/30/2019 Software Matematic - Matlab
63/63
BIBLIOGRAFIE 66
Bibliografie
[1] V. Fireteanu M. Ghinea. Matlab-Calcul numeric, Grafica,Aplicatii. Editura Teora, 2007.