6. no ţiuni de programare matlabyi = interp1(x, y, xi, ’metoda ’); unde: x şi y sunt vectorii...

35
6. Noţiuni de programare Matlab 6.1. Fisiere de tip M (fisiere cu extensia .m) -Fisierele M sunt fisiere ce contin secvente de instructiuni Matlab executate succesiv si pot fi de tip script sau de tip function Fisiere Fisiere de tip script de tip script -Fisierele de tip script pot apela fisiere de tip function -Fisierele de tip script nu pot fi apelate de alte fisiere de tip script sau de alte fisiere de tip function - Dupa executia instructiunilor, variabilele utilizate raman in Workspace Fisiere Fisiere de tip function de tip function -Sunt fisiere care spre deosebire de fisierele script admit parametri de intrare - Prima linie a unui fisier de tip function are sintaxa: function function [par_iesire1, par_iesire2 ...] = nume_func nume_func t t ie ie(par_intrare1, par_intrare2 ...) - Dupa executia instructiunilor, nu raman in memorie decat variabilele de iesire - Fisierele de tip function pot sa nu aiba parametrii de iesire sau de intrare

Upload: others

Post on 02-Mar-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

6. Noţiuni de programare Matlab6.1. Fisiere de tip M (fisiere cu extensia .m)

-Fisierele M sunt fisiere ce contin secvente de instructiuni Matlabexecutate succesiv si pot fi de tip script sau de tip function

FisiereFisiere de tip scriptde tip script-Fisierele de tip script pot apela fisiere de tip function -Fisierele de tip script nu pot fi apelate de alte fisiere de tip script sau de altefisiere de tip function- Dupa executia instructiunilor, variabilele utilizate raman in Workspace

FisiereFisiere de tip functionde tip function-Sunt fisiere care spre deosebire de fisierele script admit parametri de intrare

- Prima linie a unui fisier de tip function are sintaxa:

functionfunction [par_iesire1, par_iesire2 ...] = nume_funcnume_functtieie(par_intrare1, par_intrare2 ...)

- Dupa executia instructiunilor, nu raman in memorie decat variabilele de iesire- Fisierele de tip function pot sa nu aiba parametrii de iesire sau de intrare

6.1. Fisiere de tip M - exemple

scripttest.mscripttest.ma=fix(rand(2, 2)*10)b=a.^2

lansare in executie

» scripttesta =

5 60 4

b =25 360 16

ftest.mftest.mfunction [a]=ftest(x)a=real(x) - i*imag(x);

lansare in executie

» [a] = ftest(2+i)a =

2.0000 - 1.0000i

6.2. Includerea de comentarii şi informaţii de tip help în fişiere M

ftest.mftest.mfunction [a] = ftest(x)% Calculul numarului complex conjugata = real(x) - i*imag(x);

lansare in executie

» help ftest

Calculul numarului complex conjugat

scripttest.mscripttest.m% Calcule cu matrice% Operatii element cu elementa = fix(rand(2, 2)*10)b = a.^2

lansare in executie

» help scripttest

Calcule cu matriceOperatii element cu element

6.3. Crearea şi editarea fişierelor M

- Folosind Matlab Editor

- Folosind editoare externe Notepad, WordPad cu salvarea fisierului in format text

- Fisierele trebuiesc salvate cu extensia .m

6.4. Tipuri de variabile şi de operatori6.4.1. Tipuri de variabile

Variabile locale-Nu necesita instructiuni de declaratie sau dimensionare-Nu raman in memorie de la un apel la altul al unei functii

Variabile globale-Necesita obligatoriu instructiuni de declaratie-Sunt vizibile si accesibile in interiorul oricarei functii in care sunt declarateca variabile globale, respectiv in Matlab Workspace-Trebuiesc utilizate doar cand este nevoie-Pentru a vizualiza doar variabilele globale se foloseste una din functiile whosau whos cu optiunea global:

» who global

» whos global

Variabile persistente-Necesita obligatoriu instructiuni de declaratie

-Pot fi utilizate doar in interiorul functiilor-Alte functii nu le pot accesa-Nu sunt sterse din memorie la parasirea functiei

6.5. Tipuri de operatori

Operatori relationali

Diferit de~ =

Egal cu= =

Mai mare sau egal cu>=

Mai mare decât>

Mai mic sau egal cu<=

Mai mic decât<

DescriereOperator

Operatori relationali - exemple

» 10>3

ans =1

» a=[1 2 3], b=[0 4 3], a<b, a>=b

a =1 2 3

b =0 4 3

ans = 0 1 0

ans = 1 0 1

» 10<3

ans =0

» 10==3

ans =0

» 10=3??? 10=

|Missing operator, comma, or semi-colon.

» 10~=3

ans =1

Operatori logici

xor(A, B) = [1 0 1 0 0]Întoarce 1 pentru fiecare locatie de element care este adevărată doar într-un vector si 0 pentru toate celelalte elemente

xor

~A = [1 0 0 1 0]Întoarce 0 pentru fiecare locatie de element care este adevarată si 1 pentru fiecare locatie de element care este falsă

~

A | B = [1 1 1 0 1]Întoarce 1 pentru fiecare locatie de element care este adevarată în unul sau în celălalt vector

|

A & B = [0 1 0 0 1]Întoarce 1 pentru fiecare locatie de element care este adevarată în ambii vectori

&

ExempluDescriereOperator

A = [0 1 1 0 1], B = [1 1 0 0 1]

» A = [0 1 1 0], B = [1 1 0 0]

A =0 1 1 0

B =1 1 0 0

» A & B

ans =0 1 0 0

» A | B

ans =1 1 1 0

Operatori logici - exemple

» ~A

ans =1 0 0 1

» xor(A, B)

ans =1 0 1 0

6.6. Instrucţiuni de control logic6.6.1. Instructiunea if - exemple

SintaxaSintaxaif expresie_logica

instructiuni end

ExempluExemplu» a=3;» b=2;» if a>b

disp('a este mai mare decât b')elseif b>=a

disp('b este mai mare sau egal cu a')end

a este mai mare decât b

6.6.2. Instrucţiunea for - exemple

SintaxaSintaxafor index = start:increment:end

instrucţiuni end

ExempluExemplu» m=2;» n=3;» for i = 1:m

for j = 1:nA(i, j) = i + j;

endend» A

A =2 3 43 4 5

6.6.3. Instrucţiunea while - exemple

SintaxaSintaxawhile expresie_logica

instructiuni end

ExempluExemplu» n = 1;» while prod(1:n) < 10

n = n + 1end

n =2

n =3

n =4

6.6.4. Instrucţiunea break - exemple

SintaxaSintaxafor index = start:increment:end

instrucţiuni if expresie_logica

break;end

end

ExempluExemplu» clear;» m=30;» for i = 1:m

A(i) =floor(10*rand);if (A(i) ==0)

break; end

endA

A =3 0

6.7. Interacţiunea program-utilizator6.7.1. Obţinerea unui răspuns de la tastatură

SintaxaSintaxan = input('prompt_string')

ExempleExemple» adresa = input('Introduceti adresa: ','s');Introduceti adresa: 313 Spl. Independentei

» adresaadresa =

313 Spl. Independentei

» A = input('Introduceti matricea: ');Introduceti matricea: [1 2; 4 5]

» AA =

1 24 5

6.7.2. Definirea unei pauze - exemple

pause - opreste executia programului pana cand utilizatorul

apasa o tasta

pause(n) - opreste executia programului timp de n secunde

6.8. Operatii cu siruri de caractere

Converteste siruri de caractere în litere mariupper

Concatenează siruri de caractere verticalstrvcat

Înlocuieste un sir de caractere cu altulstrrep

Compară primele n caractere ale unor siruri de caractere neglijând faptul ca literele sunt mici sau mari

strncmpi

Compară primele n caractere ale unor siruri de caracterestrncmp

Caută un sir de caractere în altelestrmatch

Aliniază sirurile de caracterestrjust

Compară siruri de caractere neglijând faptul că literele sunt mici sau maristrcmpi

Compară siruri de caracterestrcmp

Concatenează siruri de caracterestrcat

Converteste un sir de caractere în litere micilower

Caută un sir de caractere în altulfindstrOperatii cu siruri de caractere (string-uri)

Sterge blancurile de la sfârsitul sirurilor de caracteredeblank

Crează vectori de caracterechar

Crează siruri de blancuriblanksGenerală

DescriereFunctieCategorie

6.8. Operatii cu siruri de caractere - continuare

Converteste sirurile de caractere în numerestr2num

Converteste sirurile de caractere în numere dublă precizie str2double

Scrie date formatate în siruri de caracteresprintf

Converteste numere în siruri de caracterenum2str

Converteste matrice în siruri de caracteremat2str

Converteste întregi în siruri de caractere int2str

Converteste sirurile de caractere în format numericdoubleConversie între siruri de caractere si numere

Întoarce adevărat în cazul blancurilorisspace

Întoarce adevărat în cazul literelor alfabetuluiisletter

Întoarce adevărat în cazul sirurilor de caractere ischarTeste pe siruri de caractere

6.8. Operatii cu siruri de caractere - exemple

» nume = input('Introduceti numele dvs. de familie : ','s');Introduceti numele dvs. de familie: Ionescu

Conţine sirul de caractere introdus doar litere ?

» isletter(nume)ans =

1 1 1 1 1 1 1

» length(nume) - sum(isletter(nume))

ans =0

7. Funcţii numerice speciale7.1. Funcţii MATLAB de interpolare şi aproximare a datelor

7.1.1. Interpolarea functiilor de o singura variabila

PrincipiulPrincipiul interpolariiinterpolarii liniareliniare::

x1 x2x

y2

y1

y

x

f(x)

y = f(x) = y1 + (x – x1)(y2 – y1)/(x2 – x1)

7.1.1. Interpolarea functiilor de o singura variabila - continuare

Fie o functie de o singura variabila:

y = y = f(xf(x))

Sintaxa

yi = interp1(x, y, xi, yi = interp1(x, y, xi, ’’metodametoda’’););

unde:x şi y sunt vectorii care conţin abscisele şi ordonatele datelor iniţiale,xi este un vector care conţine noile abscise, de regulă cu pas mai fin,yi este vectorul returnat, asociat lui xi.

'metoda' reprezinta unul din cuvintele cheie:'linear' – pentru interpolare liniară;'spline' – pentru interpolare spline cubică;'cubic' – pentru interpolare cubică;'nearest' – pentru interpolare de tipul cel mai apropiat vecin;'pchip' – pentru interpolare Hermite cubică pe porţiuni etc.

7.1.1. Interpolarea functiilor de o singura variabila - exemple

Considerăm o piesă metalică încălzită prin efect Joule. Se cunoaste evolutia în timp din 30 in 30 de secunde a temperaturii sale medii Teta.

Se cere evolutia in timp a temperaturii Teta, din 10 în 10 secunde, folosind interpolarea liniară, cubică şi spline cubică şi reprezentarea pe acelaşi grafic a rezultatelor obtinute, cu marcarea setului de date initiale.

1501209060300Timp [sec.]

4303002001206020Teta [˚C]

7.1.1. Interpolarea functiilor de o singura variabila - exemple

» Timp = [0 30 60 90 120 150];

» Teta = [20 60 120 200 300 430];

» Timpn = 0:10:150;

» Tetanl = interp1(Timp, Teta, Timpn, 'linear');

» Tetans = interp1(Timp, Teta, Timpn, 'spline');

» Tetanc = interp1(Timp, Teta, Timpn, 'cubic');

» plot(Timp, Teta,'ro', Timpn, Tetanl, Timpn, Tetans,Timpn,Tetanc);

» xlabel('Timp [s]');

» ylabel('Temperatura [grC]');

Timp = 0:30:150

1501209060300Timp [sec.]

4303002001206020Teta [˚C]

7.1.1. Interpolarea functiilor de o singura variabila - exemple

7.1.2. Interpolarea functiilor de doua variabile

Fie o functie de doua variabile:

z = z = f(xf(x, y), y)

Sintaxazi = interp2(x, y, z, xi, yi,’metoda’)

unde:x, y sunt matrice obtinute cu functia meshgrid si conţin coordonatele iniţiale, z = f(x, y) este matricea ce contine valorile functiei in punctele (x, y),xi, yi sunt matrice ce conţin noile coordonate, de regulă cu pas mai fin,zi = f(xi, yi) este matricea rezultanta, ce contine valorile functiei in noilepuncte (xi, yi).

’metoda’ poate fi unul din cuvintele cheie:’linear’ sau ’bilinear’ – pentru interpolare biliniară;’cubic’ sau ’bicubic’ – pentru interpolare bicubică;’spline’ – pentru interpolare spline cubică;’nearest’ – pentru interpolare de tipul cel mai apropiat vecin.

7.1.2. Interpolarea functiilor de doua variabile - continuare

Exemplu – functia meshgrid» [x, y] = meshgrid(0:4)

x =0 1 2 3 40 1 2 3 40 1 2 3 40 1 2 3 40 1 2 3 4

y =0 0 0 0 01 1 1 1 12 2 2 2 23 3 3 3 34 4 4 4 4

7.1.2. Interpolarea functiilor de doua variabile - exemple

Exemplu – functia meshgrid» [x, y] = meshgrid(0:2:4, -1:2)

x =0 2 40 2 40 2 40 2 4

y =-1 -1 -10 0 01 1 12 2 2

7.1.2. Interpolarea functiilor de doua variabile - exemple

Date initiale» [x,y] = meshgrid(-3:3);» z = peaks(x, y);» figure(1);» surf(x, y, z);» grid on;

7.1.2. Interpolarea functiilor de doua variabile - exemple

Date interpolate» [xi, yi] = meshgrid(-3:0.25:3);» zi1 = interp2(x, y, z, xi, yi, 'nearest');» figure(2);» surf(xi, yi, zi1);» grid on;

7.1.2. Interpolarea functiilor de doua variabile - exemple

Date interpolate» [xi, yi] = meshgrid(-3:0.25:3);» zi2 = interp2(x, y, z, xi, yi, 'bilinear');» figure(3);» surf(xi, yi, zi2);» grid on;

7.1.2. Interpolarea functiilor de doua variabile - exemple

Date interpolate» [xi, yi] = meshgrid(-3:0.25:3);» zi3 = interp2(x, y, z, xi, yi, 'bicubic');» figure(4);» surf(xi, yi, zi3);» grid on;

7.1.3. Interpolarea datelor pe un grid 2D

SintaxaSintaxa

ZIZI = griddata(x, y, z, = griddata(x, y, z, XIXI, , YIYI))

unde:x, y sunt vectori ce conţin coordonatele iniţiale, z = f(x, y) este un vector ce contine valorile functiei in punctele (x, y),XI, YI sunt matrice obtinute cu meshgrid ce conţin noile coordonate ceformeaza un grid,ZI = f(XI, YI) este matricea rezultanta, ce contine valorile functiei in noul grid (XI, YI).

7.1.3. Interpolarea datelor pe un grid 2D - exemple

SSă ă presupunempresupunem ccăă se se cunosccunosc valorilevalorile funcfuncţţiieiei îîn 100 de puncte n 100 de puncte

aleatoare aleatoare îîn intervalul [n intervalul [--2; 2]2; 2] sisi se se dorescdoresc valorilevalorile functieifunctiei interpolate interpolate pepe un gridun grid

» x = rand(100, 1)*4-2;

» y = rand(100, 1)*4-2;

» z = x.*exp(-x.^2-y.^2);

» gr = -2:.25:2;

» [XI,YI] = meshgrid(gr, gr);

» ZI = griddata(x, y, z, XI, YI);

» mesh(XI, YI, ZI), hold on

» plot3(x, y, z, 'o'), hold off

22yx

xez−−

=

x, y, z vectoriXI, YI, ZI matrice

7.1.4. Aproximarea polinomială prin metoda celor mai mici pătrate

NotiuniNotiuni utile:utile:-Fie un set de date (xi, yi), i = 1...n, care se afla pe curba yi = f(xi)-Se cauta functia polinomiala care aproximeaza cel mai bine curba initialaasa incat suma patratelor distantelor de la punctele initiale la curbapolinomiala sa fie minima-Este posibil ca nici un punct din setul de date initiale sa se afle pe curbapolinomiala-Trebuie identificati coeficientii functiei polinomialep(x) = a0x

n + a1xn-1 +... + an-1x + an

SintaxaSintaxa

p = polyfit(x, y, n)p = polyfit(x, y, n)

undeunde::x si y reprezinta vectori ce contin setul initial de date

n reprezinta gradul polinomului de aproximare

7.1.4. Aproximarea polinomială prin metoda celor mai mici pătrate - exemple

Sa Sa consideramconsideram setulsetul initial de date:initial de date:

» x = [1 2 3 4 5];

» y = [5.5 43.1 128 290.7 498.4];

CautamCautam un un polinompolinom de de ordinulordinul 3 care 3 care aproximeazaaproximeaza celcel maimai binebine setulsetul initialinitial

» p = polyfit(x, y, 3)

p = -0.1917 31.5821 -60.3262 35.3400

CCalculalcululul valorilvaloriloror polinomului rezultant pe un set de date mai finpolinomului rezultant pe un set de date mai fin

» x2 = 1:0.1:5;

» y2 = polyval(p, x2);

PPlotalotarearea comparativcomparativa aa a rezultatelrezultateloror

» plot(x, y, ‘*', x2, y2);

7.1.4. Aproximarea polinomială prin metoda celor mai mici pătrate - exemple