Documente Academic
Documente Profesional
Documente Cultură
METODE NUMERICE
ÎN MATLAB
G H ID P R A C T IC D E L A B O R A T O R
BRA{O V
Recenzenţi ştiinţifici: prof.dr.ing.mat. Sorin Vlase
Universitatea Transilvania Braşov
prof.dr.ing. Florin Comstantin
Universitatea Transilvania Braşov
Consilier editorial: prof.dr.ing. Florin Andreescu
Tehnoredactare: autorul
Coperta şi grafica: dr.ing. Bogdan Andreescu
Corectura: autorul
© 2011
ISBN 978-973-131-130-2
Mircea Mihãlcicã
METODE NUMERICE
ÎN MATLAB
G H ID P R A C T IC D E L A B O R A T O R
BRA{O V
CUPRINS
1 Introducere 5
2 Mediul de lucru 10
2.1 Introducere 10
2.2 Operații matematice simple 10
2.3 Variabile 12
2.4 Funcții matematice simple 15
2.5 Exerciții 18
3 Operații cu șiruri și matrici 20
3.1 Introducere 20
3.2 Definirea șirurilor 20
3.3 Operații matematice simple cu șiruri 23
3.4 Manipularea șirurilor 25
3.5 Definirea matricelor 26
3.6 Matrici speciale 28
3.7 Operații matematice simple cu matrici 29
3.8 Operații element cu element 32
3.9 Formatul de afișare 34
3.10 Exerciții 36
4 Funcții și polinoame. Ecuații 42
4.1 Introducere 42
4.2 Calculul valorilor funcțiilor 42
4.3 Exerciții 43
4.4 Șirul coeficienților unei funcții 45
4.5 Grafice de funcții 48
4.6 Grafice multiple 51
4.7 Lucrul direct pe grafic 53
4.8 Grafice în trei dimensiuni 54
4.9 Exerciții 55
4.10 Sisteme de ecuații liniare compat. determinate 57
4.11 Interpolare polinomială 59
3
4.12 Ecuații diferențiale în Matlab 64
4.13 Suprafețe în trei dimensiuni 69
5 Operatori statistici 71
5.1 Introducere 71
5.2 Media aritmetică 71
5.3 Mediana 72
5.4 Abaterea medie pătratică și dispersia 75
5.5 Exerciții 79
6 Analiză modală 81
6.1 Introducere 81
6.2 Exemplu - arbore cotit 81
Modul program. Introducerea și afișarea datelor.
7 87
Structuri repetitive și structuri condiționale
7.1 Introducere 87
7.2 Introducerea datelor de la tastatură 88
7.3 Instrucțiuni de afișare 91
7.4 Exerciții 93
7.5 Structuri repetitive 95
7.6 Structuri condiționale 97
7.7 Exerciții 105
7.8 Obiecte (structuri de date) în Matlab 113
8 Exerciții recapitulative 119
9 Calculatorul de funcții 135
9.1 Introducere 135
9.2 Zone și comenzi funtool 136
Anexă - Lista funcțiilor și constantelor descrise în volum 141
Bibliografie 145
4
1. INTRODUCERE
5
6
Plecând de la algoritmul prezentat în figură, în cadrul
tabelului am sistematizat o parte din metodele numerice utile în
ingineria mecanică legate de problemele practice care le
generează şi le-am încadrat în module mari specifice
bibliotecilor de rutine existente pe piaţă (biblioteca ştiinţifică
IBM, MATLAB, MATCAD etc.)
7
liniare mecanice
-vectori şi valori -dinamică
proprii -stabilitate
etc. etc.
-rădăcini -calcule statice de
-polinoame speciale rezistenţă
-rădăcini ecuaţii -stabilire regimuri de
neliniare încercări
-extremele funcţiilor pe standuri
-aproximare -stabilire regimuri de
Polinoame
-interpolare încercări
-analiză Fourier în exploatare
etc. -fiabilitatea
produselor
etc.
-diferenţiere -dinamica
numerică autovehiculelor
-ecuaţii diferenţiale -stabilitatea
Calcul
ordinare autovehiculelor
diferenţial şi
-funcţii speciale -vibraţii
integral
-cuadraturi numerice -controlul sistemelor
etc. mecanice
etc.
-linii -analiza datelor
-curbe experimentale
Grafică
-histograme -buletine de încercări
etc. etc.
8
Volumul de față se adresează inginerilor sau viitorilor
ingineri. Scopul materialelor prezentate nu este acela de a-l
transforma pe cititor într-un programator de elită, însă pentru a
fi capabili de a utiliza Matlab cu o anumită eficiență sunt
necesare o serie de cunoștințe de programare. În mod intenționat
codul scris pentru unele exemple nu este cel mai eficient (uneori
problema s-ar putea rezolva mai simplu) dar sunt alese
variantele prezente în această lucrare pentru a pune în evidență
anumite instrucțiuni, funcții și structuri de programare cu care
cititorul ar trebui să se familiarizeze.
9
2 MEDIUL DE LUCRU. SCALARI ȘI OPERAȚII
MATEMATICE SIMPLE. VARIABILE
2.1 Introducere
Se poate afirma cu tărie că nu este necesar să fim
programatori pentru a putea lucra în Matlab. De fapt am încercat
să dezvoltăm acest volum în ideea în care inginerii cu cunoștințe
doar tangențiale de programarea calculatoarelor să poată
beneficia de posibilitățile care le sunt oferite de către aplicație.
Totuși, trebuie să amintim că o persoană care posedă cunoștințe
de programare se va descurca mult mai ușor și eficient în
Matlab, iar a folosi aplicația fără a cunoaște măcar aspecte de
bază din programarea calculatoarelor este un lucru aproape
imposibil.
Mediul de lucru Matlab oferă două posibilități: lucrul în
mod „linie de comandă”, în care operatorul introduce comanda,
apasă tasta <Enter> și respectiva comandă (dacă nu face parte
dintr-o structură specială, la care ne vom referi mai târziu în
cadrul acestui material) este executată imediat, și lucrul în
modul „program”, în care toate instrucțiunile sunt scrise linie cu
linie într-un editor de text inclus în interiorul aplicației iar apoi
întregul cod este compilat și rulat. Pentru început vom prezenta
exemple în linie de comandă, fiind modul considerat „mai la
îndemână” de cei ce-și încep drumul în Matlab.
10
împărțirii, ridicării la putere (extragerea radicalului poate fi
considerată tot o ridicare la putere). Iată modul de lucru pentru
operațiile matematice simple (urmăriți imaginile de sus în jos și
de la stânga spre dreapta):
11
trebuie să folosim expresia 16^(1/2). Matlab va efectua prima
dată operația dintre paranteze, cu rezultat 0.5, iar apoi va ridica
numărul 16 la 0.5, cu rezultat final 4. Iată codul:
2.3 Variabile
În programare, o variabilă este un nume simbolic ales
pentru a fi folosit ca o reprezentare a unei cantități de
informație, cunoscută sau necunoscută. O variabilă este asociată
unei locații unde este stocată respectiva cantitate de informație.
De cele mai multe ori, valorile variabilelor se schimbă pe
parcursul unui program informatic (variabila este utilizată cu o
valoare într-un anumit loc în program, apoi valoarea ei se
schimbă și e folosită cu valoarea nouă într-un alt loc etc.)
Atunci când variabila „ia o valoare”, operațiunea
poartă numele de atribuire. Secvența din imagine
poate fi citită sub forma „variabilei a îi este
atribuită valoarea 7”.
12
un dezavantaj pentru acest răspuns: ecranul se umple mai
repede, făcând necesară derularea pentru a putea urmări codul.
Pentru a scăpa de acest răspuns, după linia de comandă, înainte
de a apăsa <Enter>, se poate adăuga simbolul ; (punct și
virgulă):
Se poate observa că, în cazul
folosirii simbolului ; la sfârșit,
Matlab sare direct la
următoarea linie de comandă
Pentru a „curăța” (șterge) ecranul, comanda folosită este clc .
!Atenție!
- Matlab este „case sensitive”, adică ține cont de literă mare -
literă mică atunci când lucrează cu variabile. Cu alte cuvinte,
dacă definim a=10 și A=20, aplicația le va trata ca variabile
diferite.
În exemplul de față observăm diferențele
dintre a și A ca variabile. De asemenea,
observăm că simbolul ; așezat după o
instrucțiune poate fi folosit ca separator
(am putut scrie pe același rând a=10 și
A=20 deoarece am folosit ; iar dacă veți
încerca să scrieți respectivele comenzi fără
; după, veți primi o eroare). De asemenea,
pentru a vedea valorile variabilelor, le-am
„apelat” pur și simplu în linia de comandă
(am tastat a <Enter> și A <Enter>)
13
Există o fereastră în Matlab unde puteți consulta valorile
actuale ale tuturor variabilelor pe care Matlab le are în memorie.
!Atenție!
Atunci când începeți un program nou, este recomandat să
ștergeți valorile variabilelor aflate în memorie, mai ales atunci
când ați mai lucrat în respectiva sesiune de lucru.
Variabilele în
Matlab respectă regulile
matematice ale
structurilor matematice pe
care le reprezintă. Acest
lucru este cel mai vizibil
în cazul scalarilor și
operațiilor matematice
simple.
14
!Atenție!
În limbajul pe care îl folosim atunci când descriem relațiile
matematice există tendința de a ignora operatorul „înmulțit”. De
exemplu, când ne referim la nu spunem „trei deînmulțit cu
x pătrat” ci „trei x pătrat”. Matlab însă nu face supoziții, are
nevoie de operator:
Funcția Efect
round(x) Rotunjește o valoare către cel mai apropiat întreg
Rotunjește o valoare către cel mai apropiat întreg
ceil(x)
superior
Rotunjește o valoare către cel mai apropiat întreg
floor(x)
inferior
Rotunjește o valoare către cel mai apropiat întreg
fix(x)
spre zero
15
!Atenție!
În reprezentarea
numerelor zecimale,
Matlab folosește
punctul și nu virgula.
Pentru a nu exista
confuzii, în cadrul
acestui volum vom
alege același tip de
reprezentare pentru
numerele care nu sunt
întregi.
Pentru a înțelege
comportamentul
funcțiilor ceil, floor și
fix urmăriți cu atenție
exemplele atât pentru
valoarea pozitivă
rotunjită cât și pentru
cea negativă.
Funcția Efect
rem(x,y) Restul împărțirii lui x la y
sqrt(x) Rădăcina pătrată a lui x
factor(x) Împarte valoarea x în factori primi
factorial(x) Calculează x factorial
lcm(x,y) Calculează cel mai mic multiplu comun pt. x și y
gcd(x,y) Calculează cel mai mare divizor comun pt. x și y
16
Matlab pune la dispoziție o serie de
constante ce pot fi folosite în
operațiile matematice comune.
Deocamdată amintim trei dintre ele:
Epsilon (simplificat, cea mai
eps
mică valoare posibilă)
pi Numărul
17
2.5 Exerciții:
1. Introduceți următoarele comenzi în Matlab:
>> 2*3*4*5
>> x1=17
>> x2=12
>> x3=9
>> x1/x2-x3
>> (x3-x2)^(1/2)
Răspunsuri:
a) 21
b) 47
c) 0.0714
a)
b)
c)
Răspunsuri:
18
a) 6.2727
b) 5184
c) 504
19
3 OPERAȚII CU ȘIRURI ȘI MATRICI
3.1 Introducere
Nu este cunoscut tuturor faptul că numele aplicației
Matlab nu este derivat din cuvântul matematică („Math”) -
Matlab vine de la MATrix LABoratory. Devine evident acum
faptul că matricile ocupă un rol important în Matlab și sunt un
subiect demn de a le fi dedicat propriul capitol în conținutul
acestui volum. De altfel, matricile sunt elemente de bază în
inginerie și mai ales în cea a autovehiculului.
Deși am intitulat capitolul „operații cu șiruri și matrici”,
trebuie spus că Matlab nu lucrează cu noțiunea de „șir”. Pentru
aplicație, un șir este de fapt o matrice de un rând și n coloane,
care suportă toate operațiile matematice specifice matricilor.
Vom prefera pe alocuri să numim acest tip special de matrice
„șir” deoarece considerăm că poate fi vizualizată mai ușor și, în
concluzie, lucrurile sunt mai lesne de înțeles.
20
comenzi simple de la tastatură. Acestea sunt șirurile în care
elementele se incrementează (pornind de la primul spre ultimul)
cu un anumit pas fix. De exemplu, comanda:
21
adeseori și situația în care sunt cunoscute capetele intervalului
(stâng și drept) dar nu se cunoaște pasul, ci numărul de puncte în
care se dorește împărțirea respectivului interval. De exemplu,
apare o problemă de genul „Realizați o scală de la 0 la 12, în 17
puncte”. Aceasta se rezolvă cu comanda linspace:
!Atenție!
În structura comenzii linspace ordinea este r=linspace(capătul
din stânga, capătul din dreapta, numărul de puncte), pe când
în cazul în care se cunoaște pasul, r=capătul din stânga:pas:
capătul din dreapta. Confuziile între aceste două sintaxe sunt
foarte întâlnite
În structura comenzii linspace, ultimul argument face referire la
numărul de puncte și nu la numărul de intervale. Dacă se
cunoaște numărul de intervale în care este necesar a se împărți
spațiul, trebuie ținut cont că numărul de intervale este numărul
de puncte -1.
22
3.3 Operații matematice simple cu șiruri
În Matlab, șirurile suportă operațiile algebrice clasice ale
matricilor. Să presupunem că avem șirul:
Adunarea cu un scalar:
Înmulțirea cu un scalar:
Împărțirea la un scalar:
23
Adunarea a două șiruri:
24
Dacă în exemplul de mai sus se dorește înmulțirea
matriceală dintre cele două șiruri a și b, este necesară
transpunerea șirului b.
Șirul b
Șirul b transpus
25
Comanda r(i) va returna valoarea elementului i din șirul r.
Numărul i este un indice, valoarea acestui indice nu are nici o
legătură cu valoarea elementului din șir pe care îl reprezintă:
26
șirurilor se aplică așadar și în cazul matricilor, diferența făcând-
o practic apariția celei de-a doua dimensiuni în cadrul matricilor
și posibilitatea pe care ne-o oferă aplicația de a folosi un set de
matrici speciale.
O matrice în Matlab poate fi definită prin două metode:
27
dimensiuni semnificative, considerăm a doua metodă de definire
(cu ; între rânduri) ca fiind mai eficientă.
Matricea nulă:
Comanda definește o
matrice de 4 rânduri și 3
coloane (argumentele
4,3 din paranteză) cu
elemente nule
Matricea unitate:
Dacă în paranteză
se specifică un
singur argument,
matricea generată
va fi pătratică
(numărul de linii al
matricei va fi egal
cu numărul de
coloane
28
Matricea 1:
29
Adunarea și scăderea unui scalar:
30
Pe lângă aceste operații, vom aminti și calculul
transpusei și inversei unei matrice, care în Matlab are sintaxa
următoare:
Transpusa
matricei A
31
Calculul inversei unei matrice (în cazul în care condiția
este îndeplinită) se face cu comanda inv:
32
fiecare la pătrat. Dar x^2=x*x în Matlab, iar x*x= înmulțire
matriceală, așadar eroare. O soluție ar fi să calculăm șirul:
33
înmulțirea matriceală este posibilă iar Matlab nu va returna
eroare, ci un rezultat complet greșit - atunci când rezultatul e
eroare este evident că am greșit ceva, dacă în schimb este
returnat un rezultat valid, avem tendința de a-l considera corect:
34
mai bine din punct de vedere al prezentării atunci când redactați
o lucrare). Stabilirea formatului de afișare se face cu comanda
format:
35
3.10 Exerciții:
1. Generați o matrice de 5x5 conținând numere întregi pătrate
perfecte între 1 și 100.
Rezolvare:
Pas1: Generăm o matrice de 5x5 conținând numere aleatoare
între 0 și 1:
36
Mare atenție însă, enunțul cere pătrate perfecte între 1 și
100, dacă am rotunji cu round și am ridica la pătrat, valorile mai
mici de 0.5 (în cazul matricei de mai sus, B(2,5) este 0.3571) s-
ar rotunji în 0, iar pătratele lor ar fi 0. Comanda floor rotunjește
absolut toate valorile spre inferior, deci aici lucrurile stau și mai
rău - pentru a avea siguranța valorii minime 1, este necesară
rotunjirea superioară, cu comanda ceil:
38
Pas3: Eliminăm partea zecimală a valorilor:
39
3. Realizați sortarea descrescătoare a șirului x=[1 7 4 9 2]
Rezolvare:
Matlab ne pune la
dispoziție sortarea
crescătoare.
Cu ajutorul acesteia
și prin operații
matematice simple,
vom rearanja șirul x
într-o formă des-
crescătoare. Planul
este de a înmulți
șirul cu -1, a-l sorta
apoi crescător iar în
final a-l înmulți din
nou cu -1.
Se observă că
rezultatul îl stocăm
tot în variabila x -
enunțul ne cere să
sortăm descrescător
șirul, așadar valorile
40
rezultate vor trebui să fie conținute în aceeași variabilă. Acest
lucru poate crea o oarecare confuzie în rândul celor neinițiați în
programare. Aspectul este și mai evident atunci când folosim o
singură linie de comandă:
41
4. FUNCȚII ȘI POLINOAME. ECUAȚII
4.1 Introducere
Pe parcursul acestui capitol vom considera expresiile
ca fiind funcții de
variabila x și vom folosi pentru apelarea lor în Matlab notația y,
. Operațiile care implică funcții și de care ne vom
ocupa în cadrul acestui capitol sunt: calculul valorilor funcțiilor,
aflarea rădăcinilor funcțiilor și grafice de funcții.
42
Pas2: Calculăm valorile funcției:
.
.
.
4.3 Exerciții:
1. Să se calculeze valorile funcțiilor sinus și cosinus între 0 și 2π
cu un pas de 0.1.
Rezolvare:
43
2. Să se calculeze valorile funcției
pentru x luând valori din 1 în 1.
Rezolvare:
Situația aici este mai complicată, își schimbă forma în
funcție de interval. Rezolvarea, cu elementele pe care le
cunoaștem până acum, arată de felul următor:
Se definește variabila
x, separat, pe cele două
intervale
Se calculează cele
două forme ale
funcției, pe fiecare
interval, și rezultatele
se stochează în
variabile diferite
În final, funcției y i se
vor atribui valorile
obținute la pasul
anterior (în ultima
expresie cele două
șiruri se concatenează -
al doilea șir este
adăugat în continuarea
primului.
44
Pentru rezolvarea acestui tip de probleme în care își
schimbă forma în funcție de interval vom prezenta o metodă mai
elegantă după ce vom introduce elemente privind structurile
repetitive și structurile condiționale.
45
Varianta cu polyval:
Pas1: Definim același șir al valorilor x:
!Atenție!
Există tendința ca, atunci când unul dintre coeficienți „lipsește”,
să-l „sărim”, să nu-l mai trecem în șirul coeficienților. Este o
greșeală foarte gravă, respectivul coeficient nu lipsește, ci este 0.
În exemplul anterior „nu apare” , dar în șirul coeficienților
este obligatoriu să trecem 0 în poziția lui. Dacă am fi scris
46
respectivul șir c=[3 -2 -1 -7], atunci funcția cu care lucra Matlab
era , nicidecum cea din enunț.
Calculul rădăcinilor funcțiilor cu ajutorul șirului
coeficienților se realizează folosind comanda roots. Exemplu:
Să se calculeze valorile funcției .
Matematic putem scrie:
47
4.5 Grafice de funcții
Pentru a realiza graficul în două dimensiuni al unei
funcții (de fapt, al unui set de valori y față de un set de valori x)
se folosește comanda plot(x,y). Exemplu:
Să se realizeze graficul funcției pentru
x luând valori între [-2,2] cu pas de 0.1.
Pas1: Calculul valorilor funcției:
48
În această formă, graficul nu este în nici un fel
spectaculos, nici din punct de vedere al informațiilor oferite, nici
din punct de vedere al prezentării. Matlab ne oferă însă
posibilitatea de a manipula acest grafic pentru a-l aduce în forma
dorită.
Stabilirea titlului și etichetelor axelor:
49
După cum se poate observa, în comanda cu care se
trasează efectiv graficul s-a adăugat în paranteză '--g'. Aceștia
sunt doi parametri cu ajutorul cărora se poate schimba tipul și
culoarea liniei cu care e trasat graficul. În cazul nostru, exemplul
se traduce prin „realizează graficul cu linie întreruptă și verde”.
Din punct de vedere al culorilor, variantele posibile sunt Red
Green Blue Cyan Magenta Yellow blacK (r,g,b,c,m,y,k) iar din
punct de vedere al tipului de linie se poate alege dintre - -. -- : . o
x * + s(quare) d(iamond) p(entagram) < > ^ (ultimele trei
simboluri stabilesc tipul liniei sub formă de triunghiuri cu vârful
orientat precum cel descris de fiecare simbol).
Parametrii se definesc în interiorul funcției plot, între
apostrofuri, și nu contează ordinea în care sunt definiți. De
exemplu, dacă în cazul nostru scriam plot(x,y,'g--') rezultatul
era identic.
50
4.6 Grafice multiple
Există două situații comune de care ne lovim atunci când
lucrăm cu grafice: fie dorim să afișăm simultan mai multe
grafice pe același spațiu de lucru, fie dorim ca, peste un grafic
deja existent în spațiul de lucru, să suprapunem un nou grafic,
proaspăt realizat. În Matlab trebuie acordată atenție deosebită
acestui aspect deoarece, în mod implicit, un nou grafic afișat
înlocuiește figura deja existentă pe ecran. De exemplu, avem
șirul de valori x și două funcții y(x) și z(x) pentru care dorim să
realizăm graficele. Dacă scriem plot(x,y) se va realiza primul
grafic, dar apoi dacă scriem plot(x,z) se va realiza cel de-al
doilea, dar primul va dispărea. Comanda pentru a le afișa
simultan ar fi plot(x,y,x,z). Exemplu:
Să se realizeze (simultan) graficul funcțiilor sinus și cosinus,
între 0 și 2π, în 50 de puncte.
52
special la hold, nu uitați să dezactivați această opțiune când nu
mai este necesară (hold off).
53
4.8 Grafice în trei dimensiuni
Dacă îi oferim cele trei seturi de coordonate, Matlab
poate afișa și grafice în trei dimensiuni. Exemplu:
Fie x între 0 și 2π, în 50 de puncte. Să se realizeze graficul în
trei dimensiuni cu axele {x, sin(x), cos(x)}.
Pas1: Se definesc cele trei axe:
Graficele în trei
dimensiuni se pot
roti astfel încât să
fie afișate din
perspectiva dorită.
54
4.9 Exerciții
1. Realizați graficul funcției pentru x între -3
și 3, cu caroiaj, folosind 50 de puncte, culoarea roșie și linie
întreruptă.
Pas1: Definim valorile pentru care vom calcula funcția:
sau
55
2. Realizați cu caroiaj graficul funcției pentru x
luând valori între 0 și 1, cu interval de 0.01.
56
4.10 Sisteme de ecuații liniare compatibil determinate
Sistemele de ecuații liniare compatibil determinate se
rezolvă foarte simplu cu ajutorul Matlab-ului.
Avem sistemul:
57
Fie sistemul . Să se verifice dacă este
58
4.11 Interpolare polinomială
În practică, în urma înregistrărilor făcute pentru
măsurarea unui fenomen sau proces în timp se obțin o serie de
tabele cu date experimentale. Dacă se pun într-un grafic și se
unesc punctele respective, se obțin grafice ale funcțiilor care
reprezintă respectivul fenomen sau proces. Funcțiile propriu-zise
nu sunt cunoscute, dar se cunosc valorile acestora în momentele
în care au fost măsurate. Funcțiile nu pot fi determinate exact,
dar este necesar să operăm cu aceste funcții și, uneori, sunt
necesare și valori care nu se regăsesc în tabelele cu înregistrări.
Din acest motiv este util să se găsească aproximări ale acestor
funcții, valabile pe întreg intervalul studiat.
Cele mai simple funcții care pot aproxima funcțiile
exacte sunt polinomialele, care vor fi utilizate în cele ce
urmează.
Ideea din spatele aproximării polinomiale este de a găsi
un polinom de un anumit grad a cărui evoluţie grafică să „se
suprapună” cât mai bine peste punctele graficelor noastre.
Trebuie să definim, de asemenea, într-o formă precisă, noțiunea
de „a se suprapune” cât mai bine. Ar exista mai multe
posibilități de abordare a aproximării polinomiale.
59
Problema care apare în acest caz este că, pentru n mare,
sistemul linear devine instabil, determinantul sistemului având
valori foarte mari. Dificultatea poate fi ocolită dacă se iau un
număr mai mic de înregistrări și se consideră separat polinoame
de grad mai mic pentru un număr de înregistrări consecutive. De
exemplu, se pot lua primele 5 înregistrări și se construiește un
polinom de grad 4. Apoi se iau înregistrările începând de la a 2
la 6 și se construiește un alt polinom de grad 4 și așa mai
departe. Principalul avantaj al acestei metode este că starea
fenomenului studiat poate fi aproximată printr-o funcţie cu
coeficienţi ficşi, care poate fi la rândul ei procesată mai departe
pentru alte scopuri, cum ar putea fi determinarea unor parametri.
Matlab ne pune la dispoziție posibilitatea de a folosi polinoame
de aproximare direct pe grafic. Exemplu:
Luăm un șir de 10 măsurători experimentale ale
comportamentului unui sistem în timp. Cum nu avem în acest
volum posibilitatea practică de a obține aceste date, generăm un
șir de 10 numere aleatoare între 1 și 10, care presupunem că ar
reprezenta șirul nostru de măsurători experimentale.
60
y - valorile noastre experimentale
x - momentele în timp pentru aceste valori
Interpolarea polinomială se poate alege din meniul Tools / Basic
Fitting:
61
utilizată interpolarea cu funcţii cubice Spline, care este pusă la
dispoziţie de aplicaţia Matlab. În interpolarea cu funcţii Spline,
funcţia cu ajutorul căreia se realizează interpolarea este un tip
special de polinom care efectuează interpolarea interval cu
interval. Practic, funcţia va trece prin toate punctele dar
coeficienţii ei se vor modifica pe fiecare interval al graficului
pentru care se realizează interpolarea.
Pentru a putea analiza matematic seturile de date
experimentale este nevoie de o serie de funcţii care ideal ar fi să
treacă prin toate punctele şi cu ajutorul cărora să poată fi
determinată matematic poziţia sistemului oriunde pe durata
evoluției acestuia în timp. După cum am spus, o funcţie care să
fie unică şi care să treacă prin toate punctele dorite este de
obicei foarte greu dacă nu imposibil de găsit, de aceea se preferă
o aproximare pe segmente. Fiecărui segment i se ataşează un
polinom de gradul al treilea (o expresie cubică), acesta trecând
prin cele două puncte (cele două capete ale segmentului). În
final, se obţine o funcţie pe segmente, continuă, de forma:
pentru .
Principalul dezavantaj al metodei de aproximare cu
funcţii Spline vine tocmai din natura multi-polinomială a acestor
62
funcții de interpolare. Faptul că funcţia îşi schimbă forma de la
segment la segment face post-procesarea datelor destul de
complicată, chiar dacă putem obţine destul de uşor în Matlab
coeficienţii de la .
Codul pentru generarea funcției spline cubice de aproximare și
afișarea peste graficul punctelor:
Graficul:
63
Coeficienţii de pe primul rând din tabelul de mai sus
reprezintă coeficienţii corespunzători polinomului de interpolare
al primului segment. De exemplu, pentru primul segment,
cubica de interpolare este
.
Rezolvare:
Primul lucru care se urmărește este să obținem o ecuație de
forma:
sau:
65
Iar rezultatul grafic va fi:
66
Pentru a face munca mai ușoară celor interesați de
ecuații diferențiale, ne-am gândit să adăugăm două tabele de
derivare și integrare pentru funcții simple:
67
TABEL PRIMITIVE SIMPLE
Funcția Derivata
68
4.13 Suprafețe în trei dimensiuni
În geometria în trei dimensiuni, o funcție de două
variabile de genul reprezintă o suprafață. Pentru a
putea reprezenta respectiva suprafață în Matlab, vom folosi
comanda mesh. Este necesară în prealabil o anumită „pregătire a
terenului” - folosind valorile x și y va trebui să creăm o structură
matriceală în două dimensiuni, iar pentru aceasta vom folosi
funcția meshgrid. Să luăm un exemplu:
Reprezentați grafic funcția a cărei ecuație este dată de:
69
Exemplu:
Reprezentați suprafețele plane:
Partea de afișare:
Rezultatul:
70
5. OPERATORI STATISTICI
5.1 Introducere
În lucrul cu date experimentale, de cele mai multe ori
volumul acestora este atât de mare încât datele, în forma în care
sunt ele, nu pot fi folosite sau prezentate într-un mod eficient.
De exemplu, dacă prelevăm date experimentale de la o
componentă a unui autovehicul (cum ar fi o punte) pe traseu, de-
a lungul câtorva săptămâni de zile, atunci când vrem să evaluăm
respectivele date experimentale este imposibil să ne putem face
o idee urmărind valorile una câte una. În realitate, toate aceste
valori se strâng într-o bază de date, urmează apoi anumite
prelucrări ale acestora, pentru ca în final să reprezentăm acele
valori printr-un anumit parametru, pe care l-am denumit aici
operator statistic. Ne vom ocupa pe parcursul acestui capitol de
media aritmetică, mediana, abaterea medie pătratică (sau
abaterea standard) și dispersia.
71
Pas2: Calculăm media aritmetică - determinăm suma
elementelor, pe care o împărțim la lungimea șirului
5.3 Mediana
De multe ori, media aritmetică nu este o mărime care să
reflecte eficient repartiția (natura, tendința) datelor noastre
72
experimentale. Pentru consumul de combustibil, media
aritmetică este metoda după care se calculează „consumul
mediu”, o mărime statistică eficientă în acest caz. Sunt unele
cazuri în care media aritmetică nu este însă relevantă.
Într-un șir ordonat de lungime impară, mediana
reprezintă valoarea de la mijlocul șirului. Într-un șir ordonat de
lungime pară, mediana reprezintă media aritmetică a celor două
valori de la mijlocul șirului. Exemplu:
Să se calculeze mediana pentru șirul de măsurători x=[-1 1 2 -2
3 1 0 14].
Pas1: Definim șirul de valori:
73
Pas3: Scriem rutina de calcul a medianei:
74
că majoritatea valorilor noastre sunt mai apropiate de 1 decât de
2.25. De fapt, ceea ce se întâmplă este că valoarea 14, fiind mult
prea mare (probabil, o eroare de măsurare) practic „strică”
media aritmetică a șirului nostru de măsurători. Media
aritmetică fără valoarea 14 ar fi fost 0.57, o valoare mult mai
aproape de repartiția (tendința) datelor noastre experimentale.
75
foarte mari de lichid dintre pahare. Din cauza acestor situații a
fost introdus operatorul statistic numit dispersie, având formula:
76
se urmărește a se obține valori cât mai mici pentru aceste
mărimi)
Exemplu:
Să se calculeze dispersia și abaterea medie pătratică a șirului de
măsurători x=[7 8 8 7 8 12 13 12 12 13].
Pas1: Definim șirul de valori:
77
Se observă că ambele au valoarea 10, deci șirul nostru ar trebui
să conțină elemente în jurul acestei valori. Din păcate, abaterea
medie pătratică este prea mare, măsurătorile noastre arată că este
ceva în neregulă cu fenomenul măsurat. Pentru lămurire, să
vedem cum ar fi arătat cei doi operatori statistici pentru un șir cu
valori apropiate de 10:
!Atenție!
Matlab folosește o formulă de calcul modificată pentru dispersie
(relația cu abaterea medie pătratică rămâne), dar care este
întâlnită în mod comun în perioada recentă:
78
5.5 Exerciții
1. Să se genereze un șir de 10 numere aleatoare între 0 și 10, să
se calculeze și să se pună în evidență grafic media aritmetică,
mediana, dispersia și abaterea medie pătratică.
Rezolvare:
Pas1: Generăm șirul de numere aleatoare între 0 și 10:
79
Urmează să așezăm punctele șirului x și operatorii statistici pe
un grafic:
Definim y ca fiind o scală
de la 1 la 10
Definim 3 șiruri cu 10
elemente, primul (z) cu
valoarea mediei aritmetice,
al doilea (t) cu valoarea
medianei și ultimul (v) cu
Realizăm graficul și, folosind valoarea dispersiei.
elemente de lucru direct pe
grafic, punem în evidență mărimile dorite:
80
6. ANALIZĂ MODALĂ
6.1 Introducere
În mecanică, analiza modală se regăsește în domeniul
vibrațiilor. Analiza la vibraţii înseamnă o analiză de vectori şi
valori proprii.
- vibraţiile sunt de 2 feluri – de torsiune (răsucire) şi
longitudinale (încovoiere)
- de torsiune – piese în mişcare de rotaţie - arbore cotit
- longitudinale – de încovoiere – şasiu
81
Analiza la vibraţii se face pentru a determina vibraţiile
proprii (în cazul în care sistemul mecanic este liber) şi vibraţiile
forţate (în cazul în care sistemul mecanic este solicitat).
Când se proiectează un arbore cotit, trebuie avut în
vedere ca turaţiile critice date de vibraţii să nu fie egale cu
turaţiile funcţionării motorului la cuplu maxim sau la putere
maximă. De exemplu, dacă un motor este proiectat la 2500 de
ture pentru puterea maximă şi 1800 pentru cuplu maxim, e
foarte important ca turaţiile critice de vibraţii să nu fie egale cu
acestea sau în jurul valorii acestora.
La sistemul solicitat se află doar amplitudinile
vibraţiilor. Pentru analiză, se scriu ecuaţiile de echilibru.
În cazul cel mai general, ecuaţiile de echilibru, dacă apar
şi amortizări şi solicitări, acestea se vor scrie sub forma:
82
J matricea momentelor de inerţie
C matricea amortizărilor
K matricea constantelor elastice (matricea de rigiditate)
F vectorul solicitărilor
J1 J3
J2
k1 k2
83
Rezolvarea acestui sistem se face căutând soluţii de
forma i (t ) ai cos(t ) , soluţii armonice de aceeaşi pulsaţie
dar cu amplitudini diferite.
Se calculează a doua derivată pentru , se înlocuieşte în
sistemul (1), din care rezultă sistemul de ecuaţii omogen:
K 2 j* 0
care admite soluţii (în afară de cea banală, 0) dacă şi numai dacă
determinantul sistemului e 0
Dacă se dezvoltă determinantul se obţine un polinom în
P det K 2 j * 0 , un polinom de gradul n,
2
84
2 2 0
D 3 5 2 0
0 2 2
Rezultă ecuaţia 3 92 14 0
cu comanda eig:
85
Pentru o soluție completă care să includă și vectorii proprii, se
va folosi comanda:
86
7. MODUL PROGRAM. INTRODUCEREA ȘI AFIȘAREA
DATELOR. STRUCTURI REPETITIVE ȘI STRUCTURI
CONDIȚIONALE
7.1 Introducere
Până acum am lucrat doar în modul linie de comandă,
adică am scris fiecare linie de cod, de la tastatură, direct în
fereastra care se deschide implicit în Matlab, apăsând tasta
<Enter> după și așteptând un rezultat. Pentru operații simple,
modul linie de comandă este atât suficient cât și eficient, dar
când problemele se complică (vom prezenta anumite structuri
mai complicate din programare în acest capitol) lucrul direct în
linie de comandă nu mai este eficient.
Principalele avantaje ale modului de lucru program sunt
faptul că putem modifica în cod atunci când greșim și ne putem
salva munca sub forma unui fișier (fișierele clasice în Matlab au
extensia .m). Modul program poate fi pornit fie din meniul File
New Blank M-File fie cu combinația de taste <Ctrl> <N>
87
Odată cu pornirea modului program se va deschide o
fereastră a editorului de cod din Matlab. După terminarea
introducerii codului, programul poate fi rulat la apăsarea tastei
<F5>.
88
89
Observăm în exemplul de mai sus că atunci când
introducem valoarea 15, aceasta apare lipită de text.
Recomandarea noastră este să evitați astfel de situații, acest
lucru realizându-se foarte ușor din codul programului (adăugăm
un spațiu înainte de a închide apostroful).
Codul vechi
Codul nou
Variabilei i se pot asocia și valori matriceale:
90
7.3 Instrucțiuni de afișare
O importanță aparte în programare o are și modul de
afișare a datelor. De exemplu, să presupunem că dorim să
realizăm un program de calcul al rădăcinilor ecuațiilor.
Realizăm programul în două moduri și iată rezultatele:
Prima variantă:
91
rădăcinile unei funcții cu coeficienții conținuți în variabila a). Să
comparăm acum funcționalitatea programului cu următoarea:
Varianta a doua:
Codul programului este următorul:
92
parantezele drepte din interiorul celor rotunde, iar în partea de
text, pentru a nu fi afișată lipită de rezultate, trebuie adăugat un
spațiu înainte de ultimul apostrof.
7.4 Exerciții
1. Să se realizeze un program care să împartă în factori primi un
număr introdus de la tastatură.
Rezolvare:
Codul programului:
Rezultat:
93
3. Să se calculeze şi să se afişeze restul împărţirii a două numere
întregi
Rezolvare:
Codul programului:
Rezultat:
94
dacă editorul de texte vă va lăsa să introduceți ș și ț, acestea nu
vor fi afișate corect.
Rezultat:
95
Pentru o mai bună înțelegere vom face o prezentare a
procesului, pe pași:
Și rezultatul final:
96
7.6 Structuri condiționale
Ca și cele repetitive, structurile condiționale reprezintă
structuri de bază în programare. Când scriem un program, apar
multe situații în care ne-am dori ca sistemul de calcul să aleagă
execuția doar a unuia dintre două sau mai multe procedee
matematice diferite, în funcție de un anumit eveniment. Pentru
aceasta, limbajul de programare trebuie să aibă abilitatea de a
evalua diferite situații și de a alege acțiunea potrivită în urma
acestei evaluări. Întregul proces se numește în programare
testarea condițiilor, sau parcurgerea unei structuri condiționale.
Deși structurile condiționale există în absolut toate
limbajele de programare iar funcționalitatea lor este similară,
sintaxa folosită diferă de la un mediu de programare la altul. În
Matlab, prima și cea mai importantă structură condițională este
cea al cărei început este determinat prin comanda if și care se
sfârșește prin comanda end, pe parcurs putând apărea ramificații
condiționale precum elseif și else:
if <condiţie 1> Dacă se îndeplineşte condiţia 1, se execută primul set de
comenzi și structura ia sfârșit
<comenzi 1>
elseif <condiţie 2> Dacă nu se îndeplinește condiția 1 dar se îndeplineşte condiţia 2,
<comenzi 2> se execută al doilea set de comenzi și structura ia sfârșit
end
97
Exemplu:
Să se dezvolte un program care să ceară utilizatorului să-și
introducă de la tastatură vârsta. Dacă vârsta este sub 3 ani, să se
afișeze mesajul „Ești un bebeluș”, dacă vârsta este între 3 și 15
ani să se afișeze „Ești un copil”, între 15 și 39 „Ești un tânăr”,
între 40 și 65 „Ești în floarea vârstei” iar peste 65 „Ești bătrân”.
Rezolvare:
Codul:
98
Se pot observa în cod, în interiorul condițiilor, o serie de
operatori. Aceștia sunt de două feluri, operatori condiționali,
care testează dacă o anumită condiție este îndeplinită, și
operatori logici, care conectează doi operatori condiționali și
returnează adevărat sau fals în funcție de valorile returnate de
cei doi operatori condiționali. În logica booleană, rezultatul unei
condiții care se adeverește (adevărat) este 1, iar rezultatul unei
condiții care nu se adeverește (fals) este 0. Vom folosi aceste
notații pentru a explica operatorii condiționali și logici.
99
1 1 1 logic este „adevărat”
0 0 0 „Sau” exclusiv. Dacă A și B
1 0 1 sunt condiții cu rezultate
A xor B
0 1 1 diferite, atunci rezultatul
1 1 0 logic este „adevărat”
0 1 Negație, primește valoarea
not A
1 0 opusă condiției A
!Atenție!
O greșeală comună care apare în cazul operatorilor condiționali
este folosirea simbolului „=” în loc de „==”. Secvența de cod
„a=1” atribuie variabilei a valoarea 1, pe când secvența de cod
„a==1” este o condiție care testează dacă variabila a are
valoarea 1 și este sintaxa corectă care trebuie introdusă într-o
structură condițională.
100
un șir valorile lui , iar apoi acel șir să îl afișăm sub formă de
matrice linie. Codul devine:
Rezultat:
case <valoare n-1> Dacă variabila a are valoarea valoare n-1, se execută setul de
comenzi n-1 și structura ia sfârșit
<comenzi n-1>
otherwise Dacă valoarea variabilei a nu este egală cu niciuna dintre cele
<comenzi n> anterioare, se execută setul de comenzi n și structura ia sfârșit
end
Comanda switch evaluează valoarea variabilei a (scalar
sau șir de caractere). În structură, secvențele <valoare 1>,
<valoare 2> etc. pot fi și grupuri de valori, nu doar valori
singulare.
Exemplu:
101
Să se realizeze un program care să ceară utilizatorului de la
tastatură clasa în care este, apoi pe baza acelei valori să
încadreze utilizatorul în clasa 1, școala primară, gimnaziu sau
liceu.
Codul:
102
funcționalitatea programului nu se schimba, rezultatul era
același deoarece se iese din ciclu în momentul în care se atinge
prima condiție adevărată (case 1).
!Observații finale!
De foarte multe ori structurile repetitive și structurile
condiționale se regăsesc împreună în programe, formează așa
numitele structuri compuse.
103
Toate structurile repetitive și condiționale se închid cu end.
Atunci când lucrați cu mai multe astfel de structuri în același
cod, acordați o atenție deosebită locului unde închideți fiecare
structură. Fiecărei structuri deschise trebuie să-i corespundă
propriul end.
Matlab vă ajută să identificați structurile repetitive și
condiționale în modul program, în sensul în care grupează și
aliniază instrucțiunile sub forma blocurilor de text, un bloc de
text corespunzând uneia dintre aceste structuri.
Pentru o mai ușoară identificare a secțiunilor unui program sau
pentru a face accesibil altora codul pe care îl scrieți, Matlab
oferă posibilitatea de a introduce comentarii în codul scris în
modul program. Aceste comentarii se introduc cu „%” la început
de rând și nu au nici un efect activ asupra funcționării
programului, doar fac codul pe înțelesul celor care îl citesc. De
exemplu codul nostru:
104
înțelege mult mai ușor pe cea de-a doua, tocmai datorită acestor
comentarii ajutătoare.
7.7 Exerciții
1. Să se genereze un șir x de 100 numere întregi aleatoare între 1
și 10 și pe baza acestuia să se calculeze valorile funcției:
105
Codul complet, cu comentarii explicative:
106
cu element, deoarece structura funcțiilor prezentate acolo ne
permitea folosirea acestei metode.
107
Funcția sum(A) realizează suma elementelor pe coloane (rezultat
- un șir de 5 elemente) iar sum(sum(A)) realizează suma celor 5
elemente (de fapt suma totală a elementelor matricei, rezultatul
căutat de noi).
Codul, modificat pentru exemplificare:
Rezultat:
108
Repetăm procesul până când, pentru oricare două elemente
consecutive, primul element nu va fi niciodată mai mic decât cel
de-al doilea (cu alte cuvinte, șirul este ordonat descrescător).
Iată codul:
109
Liniile 3 și 17 - structura while care de fapt este „inima”
programului, ciclul de instrucțiuni se repetă atâta timp cât
variabila noastră de control s păstrează valoarea 1
Liniile 4 și 11 - structura for care parcurge șirul element cu
element. Se observă că alegem un contor i de la 1 la 9, chiar
dacă avem 10 elemente - facem acest lucru pentru că vom lucra
în interiorul structurii for și cu x(i+1), care va acoperi acest al
10-lea element
Liniile de la 5 la 10 - structura if care realizează algoritmul de
calcul al programului. Dacă elementul din stânga x(i) este mai
mic decât elementul din dreapta x(i+1), atunci pozițiile celor
două elemente se schimbă între ele, folosind o variabilă
ajutătoare a. Foarte important, valoarea variabilei de control s
crește și devine mai mare decât 1
Liniile de la 12 la 16 - este testată variabila de control s. Dacă,
în urma ciclului dintre liniile de la 5 la 10, variabila de control s-
a incrementat, înseamnă că s-a realizat minim o inversare între
două elemente din șir și algoritmul matematic nu trebuie să ia
sfârșit. În acest caz, s devine 1 și structura while continuă. Dacă,
în urma ciclului dintre liniile de la 5 la 10, variabila de control
nu s-a incrementat, înseamnă că nu a fost nevoie să se realizeze
nici o inversare de poziții între elementele șirului, sau cu alte
cuvinte, pentru oricare două elemente, elementul din stânga x(i)
este mai mare decât elementul din dreapta x(i+1) sau practic
șirul este ordonat descrescător - se comandă ieșirea forțată din
program, cu comanda break
Linia 18 - este afișat șirul ordonat descrescător
110
În continuare vom prezenta modul de lucru al programului, pas
cu pas, pentru a face mai ușor de înțeles algoritmul utilizat. În
momentul în care veți înțelege acest exemplu, puteți considera
că ați înțeles funcționarea structurilor repetitive și condiționale.
Ce se întâmplă în interiorul primei structuri if:
111
Când această nouă iterație se pornește, variabila de control s are
valoarea reinițializată la 1 (acest lucru are loc în a doua structură
if). După cum am spus, ultima variantă a șirului din imaginea de
mai sus reprezintă șirul după prima iterație, șir devenit acum
inițial pentru cea de-a doua iterație, după cum se poate observa
în imaginea de mai jos.
Ce se întâmplă în restul programului, în exteriorul algoritmului
de calcul conținut în prima structură if:
112
7.8 Obiecte (structuri de date) în Matlab
113
Se observă că am creat un obiect piesa având cele patru
caracteristici urmărite de noi. Toate aceste caracteristici pot fi
apelate (așa cum facem cu variabilele) în Matlab și pot fi supuse
la diferite calcule matematice.
Dacă vrem să adăugăm încă o piesă în lista de obiecte
creată, va trebui să extindem piesa cu încă o poziție, creând
practic un șir, în felul următor:
114
De asemenea, dacă vom compara caracteristicile
câmpului dimensiuni pentru cele două elemente, ne dăm seama
că nu este obligatoriu ca un câmp de tip matrice să aibă aceleași
dimensiuni pentru toate elementele. Nici măcar tipul de câmp
(scalar, matriceal, șir de caractere) nu trebuie să fie la fel dar
recomandarea este să lucrați cu același tip de câmpuri, deoarece
aspectul este util pentru eventuale prelucrări ulterioare ale
obiectelor.
Generarea obiectului piesa cu cele două elemente alese
de noi se poate face și cu ajutorul comenzii struct:
115
Exemplu de lucru cu acest tip de obiecte: să presupunem
că vrem să extragem dimensiunile primei piese și să realizăm un
grafic care să ne ofere o idee despre profilul piesei. Putem lucra
în acest fel:
cu rezultatul:
116
1 și are același număr de elemente ca și dimensiunile
elementului 1 (acest al doilea șir îl vom folosi ca scală) iar în
final am afișat graficul cu comanda bar. Graficul e corect dacă
dimensiunile din câmpul dimensiuni sunt raze, dacă sunt trecute
diametrele segmentelor piesei, va trebui să realizăm graficul
considerând șirul x/2.
Putem adăuga elemente diferitelor câmpuri. Să
presupunem că la câmpurile pret ar trebui să schimbăm obiectul
pentru a adăuga și prețul cu un TVA de 20%. Iată cum putem
realiza acest lucru, pentru al doilea element:
având ca rezultat:
iar rezultatul:
117
118
8. EXERCIȚII RECAPITULATIVE
119
Rezultate:
Metri - Inci
Atmosfere - Pascali
Kilograme - Livre
Rezolvare:
Pas1: Stabilirea tipului de conversie dorit:
În acest pas vom cere utilizatorului să introducă tipul de
conversie pe care dorește să-l efectueze. Acest lucru îl vom
realiza cu ajutorul unei structuri Switch.
120
a) Pregătirea pentru structura Switch: cerem explicit
utilizatorului să introducă de la tastatură în mod exact șirul de
caractere pe care-l considerăm noi potrivit pentru respectiva
conversie:
121
de către utilizator între apostrofuri. Recomandarea noastră în
acest caz ar fi fie să specificați în prima linie de program acest
lucru (ceva de genul disp('Alegeti intre apostrofuri
tipul de conversie dorit:')) sau pur și simplu obligați
utilizatorul să aleagă după caractere numerice (adică în loc de c,
m, a, kg și mps folosiți 1,2,3,4,5).
Codul complet necesar execuției programului se obține prin
alipirea celor două secțiuni de cod de la punctele a) și b).
Rezultate:
122
structură Switch unde conversia se realizează invers dacă de
exemplu utilizatorul introduce tipul de conversie cu litere mari.
3. Calculați seria:
Rezolvare:
Pentru calculul acestei serii este necesar să folosim o structură
repetitivă. Deoarece semnul se schimbă întotdeauna de la un
termen la altul, vom defini o variabilă prin care vom controla
acest semn. Iată codul:
123
Remarcați sintaxa cu punct în codul de mai sus - împărțirea are
loc element cu element. Șirurile din codul de mai sus arată așa
(au fost afișate primele 5 elemente):
124
formatul sub formă de fracție, iar la sfârșitul programului s-a
revenit la formatul clasic, cu 4 zecimale.
125
Ca temă suplimentară, scrieți codul prin care numărați câte
zaruri de 1 ați aruncat, câte zaruri de 2 etc. până la 6.
Răspuns:
Răspuns:
126
7. Aveți sarcina de a vă angaja o echipă de lucru. Conducerea vă
indică să oferiți următorul model de plată a salariilor
potențialilor angajați:
- celor ce lucrează maxim 40 de ore pe săptămână, 25 de lei pe
oră
- celor ce lucrează minim 40 de ore pe săptămână dar cel mult
50, le oferiți 1000 de lei pe cele 40 de ore și apoi 35 de lei
pentru fiecare oră suplimentară
- celor care lucrează peste 50 de ore pe săptămână le oferiți 1350
de lei pe lună, plus 50 de lei pentru fiecare oră suplimentară
Adițional, pentru salariile de până în 1000 de lei va trebui să
plătiți un impozit de 16%, pentru cele între 1001 și 1300 de 18%
iar pentru cele de peste 1301 lei de 20%. Realizați un program
prin care, introducând de la tastatură numărul de ore, să calculați
costurile pe care le aveți cu respectivul angajat.
127
de rezolvare a sistemelor liniare specifice Matlab-ului, să obțină
soluțiile sistemul de două ecuații liniare cu două necunoscute de
forma:
128
Dacă restul este mai mare de 5 lei, se
va contabiliza o bancnotă de 5 lei iar
din restul inițial se vor sustrage 5 lei.
c) Afișarea:
129
10. Scrieți un program prin care să implementați algoritmul lui
Zeller de calcul a zilei din săptămână în care cade o dată
oarecare.
Formula lui Zeller pentru calendarul gregorian este:
unde:
- partea întreagă din respectiva expresie
z = a câta zi din lună (de exemplu 17 ianuarie = 17)
l = a câta lună din an
în acest algoritm, ianuarie și februarie sunt considerate lunile 13
și 14 din anul anterior: de exemplu februarie 2011 trebuie
calculat ca fiind decembrie 2010 (l=14, an=10), dar mai 2011
rămâne luna a cincea, anul 2011
an = al câtelea an din secol (de exemplu 2011 = 11, în afară de
cazul în care luna este ianuarie sau februarie - vezi mai sus)
s = al câtelea secol activ (de exemplu pentru 2011 secolul activ
este 20, partea întreagă din 20.11, și nu 21)
valorile lui h:
h=0 - sâmbătă, h=1 - duminică, h=2 - luni, h=3 - marți etc.
130
Ca date de intrare se va introduce data căutată de la tastatură,
sub forma [zz/ll/aaaa] a anului dorit.
Rezolvare:
a) Introducerea datelor și corelarea lunilor ianuarie și februarie
cu formula:
131
Rezultatele sunt prezentate sub următoarea formă:
132
este recomandată această metodă pentru a identifica ușor
greșeala.
Rezultat:
133
12. Determinați numărul natural i pentru care suma pătratelor
numerelor de la 1 la i este mai mică decât un număr natural a
introdus de la tastatură.
Rezolvare:
Răspuns:
134
9. CALCULATORUL DE FUNCȚII
9.1 Introducere
Pentru a ne face mai ușor lucrul cu operații curente care
implică funcții, Matlab ne pune la dispoziție o unealtă pe care
am denumit-o „calculator de funcții” și care poate fi accesată
prin comanda funtool.
135
operații de genul adunare sau înmulțire a valorilor funcției cu un
scalar etc. Vom prezenta în continuare funcționarea acestei
unelte și, pe rând, comenzile.
136
137
Zona inferioară a funtool ne pune la dispoziție operațiile
ce pot fi realizate cu acest calculator:
138
f+a Înlocuiește cu
f-a Înlocuiește cu
f*a Înlocuiește cu
f/a Înlocuiește cu
f^a Înlocuiește cu
f(x+a) Înlocuiește cu
f(x*a) Înlocuiește cu
139
f+g Înlocuiește cu
f-g Înlocuiește cu
f*g Înlocuiește cu
f/g Înlocuiește cu
f(g) Calculează
g=f Funcția primește expresia lui
swap Schimbă între ele și
140
ANEXĂ
141
elemente având valoarea 1
Definește o matrice de x rânduri și y coloane cu
rand(x,y) 29
elemente numere aleatoare între 0 și 1
Pentru scopurile acestui volum, poate fi considerată
A' 31
ca fiind transpusa matricei A
det(A) Calculează determinantul matricei A 31
inv(A) Inversa matricei A 32
Operații cu șiruri element cu element - sintaxa cu
x.^2 etc. 33
punct
Stabilește formatul de afișare, cu 3 opțiuni: short (4
format zecimale), long (15 zecimale) rat (sub formă de 35
fracție)
sin(x) sinus(x) 43
cos(x) cosinus(x) 43
tan(x) tangentă(x)
Calculează valorile unui polinom (sau ale unei
polyval 45
funcții) cu ajutorul șirului coeficienților acestuia
plot(x,y) Realizează graficul lui y în funcție de x 48
xlabel Stabilește eticheta abscisei într-un grafic 49
ylabel Stabilește eticheta ordonatei într-un grafic 49
title Stabilește titlul unui grafic 49
grid on/off Realizează un caroiaj pe grafic 52
Comandă folosită pentru realizarea graficelor
hold on/off 52
suprapuse
plot3(x,y,z) Realizează graficul în 3 dimensiuni pentru x,y,z 54
linsolve(A,B) Rezolvă sistemul liniar AX=B 57
A\B Rezolvă sistemul liniar AX=B 58
Generează funcția spline cubică de aproximare
csapi(x,y) 63
pentru perechile de valori (x,y)
Returnează lista coeficienților funcției spline cubică
cs.coefs 63
de aproximare
Cel mai popular solver de ecuații diferențiale de
ode45 64
ordinul întâi din Matlab
Definește o funcție ce poate fi apelată din alt
function 65
program Matlab
mesh(x,y,z) Reprezintă grafic o suprafață în Matlab 69
Realizează grid-ul [x,y] necesar reprezentării
meshgrid 69
suprafeței f(x,y)
mean(x) Calculează media aritmetică a șirului x 72
142
median(x) Calculează mediana șirului x 73
var(x) Calculează dispersia șirului x 76
Calculează abaterea medie pătratică (sau abaterea
std(x) 76
standard) a șirului x
eig(A) Calculează valorile proprii ale matricei A 85
Stochează vectorii proprii ai matricei A în matricea
[v,d]=eig(A) 86
v, iar valorile proprii în matricea d, pe diagonală
input Cere utilizatorului să introducă date de la tastatură 88
Afișează pe ecran valori ale variabilelor, șiruri de
disp 92
caractere, șiruri de caractere concatenate etc
Convertește o valoare numerică în valoare întreagă
int2str 92
și apoi pe aceasta din urmă în șir de caractere
num2str Convertește o valoare numerică în șir de caractere 92
for - end Structură repetitivă în Matlab 95
if - end Structură condițională în Matlab 97
& „Și” logic 99
or „Sau” logic 99
xor „Sau” exclusiv 100
not Negație 100
while-end Structură condițională în Matlab 100
switch-end Structură condițională de selecție în Matlab 101
break Forțează ieșirea dintr-o structură repetitivă 103
obiect.nume Definește proprietatea „nume” a obiectului „obiect” 113
Comandă cu care se pot genera structuri gen obiecte
struct 115
în Matlab
funtool Calculator de funcții în Matlab 135
143
144
BIBLIOGRAFIE
145
Hunt BR, Lipsman RL, Rosenberg JM. A Guide to Matlab for
Beginners and Experienced Users, Cambridge University Press
(2001)
146
Manassah JT. Elementary Mathematical and Computational
Tools for Electrical and Computer Engineers Using Matlab,
CRC Press LLC (2001)
147
Conference on Digital Object Identifier, Information
Visualization (2000)
148
Yang WY, Cao W, Chung TS, Morris J. Applied Numerical
Methods Using Matlab, John Wiley & Sons (2005)
149