Laboraratorul 1. INTRODUCERE ÎN MATLAB - civile.utcb.rocivile.utcb.ro/cmat/cursrt/ms_l12.pdf ·...

17
Laboraratorul 1. INTRODUCERE ÎN MATLAB Bibliografie: 1. M. Ghinea, V. Fireţeanu, Matlab: Calcul numeric- Grafică-Aplicaţii, ed. Teora, Bucureşti, 1998. 2. I. Iatan , Îndrumător de laborator în Matlab 7.0, Ed. Conspress, Bucureşti, 2009. Scopuri: 1) Aplicarea Matlab-ului in calcule matematice fundamentale. 2) Calcul numeric în Matlab cu aplicaţii în Algebră. 3) Rezolvarea in Matlab a ecuaţiilor si sistemelor de ecuatii diferenţiale. 4) Notiunea fisier in Matlab: creare, scriere, adaugare de date, citire. 5) Grafica in Matlab: reprezentari grafice 2D, reprezentarea grafica a histogramelor, reprezentari grafice 3D. MATLAB-ul este un pachet de programe de o performanţă remarcabilă care are o vastă aplicabilitate atât în domeniul ştiinţei cât al ingineriei. Pentru lansarea în execuţie a programului se acţionează dublu click pe pictograma Matlab de pe Desktop sau se selectează Start All Programs Matlab. APLICAŢII ÎN CALCULE MATEMATICE FUNDAMENTALE 1) Să se calculeze expresiile următoare: a) 3 3 2 5 17 2 5 17 >> (17+5*sqrt(2))^(1/3)+(17-5*sqrt(2))^(1/3) ans = 5.0367 b) 3 3 1 1 1 1 i i i i >> ((1+i)/(1-i))^3-((1-i)/(1+i))^3 ans = 0 - 2.0000i c) 5 3 log x B , pentru 7 x ; Folosim formula de schimbare a bazei logaritmice

Transcript of Laboraratorul 1. INTRODUCERE ÎN MATLAB - civile.utcb.rocivile.utcb.ro/cmat/cursrt/ms_l12.pdf ·...

Laboraratorul 1. INTRODUCERE ÎN MATLAB

Bibliografie:

1. M. Ghinea, V. Fireţeanu, Matlab: Calcul numeric- Grafică-Aplicaţii, ed. Teora,

Bucureşti, 1998.

2. I. Iatan , Îndrumător de laborator în Matlab 7.0, Ed. Conspress, Bucureşti, 2009.

Scopuri:

1) Aplicarea Matlab-ului in calcule matematice fundamentale.

2) Calcul numeric în Matlab cu aplicaţii în Algebră.

3) Rezolvarea in Matlab a ecuaţiilor si sistemelor de ecuatii diferenţiale.

4) Notiunea fisier in Matlab: creare, scriere, adaugare de date, citire.

5) Grafica in Matlab: reprezentari grafice 2D, reprezentarea grafica a histogramelor,

reprezentari grafice 3D.

MATLAB-ul este un pachet de programe de o performanţă remarcabilă care are o vastă

aplicabilitate atât în domeniul ştiinţei cât al ingineriei.

Pentru lansarea în execuţie a programului se acţionează dublu click pe pictograma

Matlab de pe Desktop sau se selectează StartAll Programs Matlab.

APLICAŢII ÎN CALCULE MATEMATICE FUNDAMENTALE

1) Să se calculeze expresiile următoare:

a) 33 25172517

>> (17+5*sqrt(2))^(1/3)+(17-5*sqrt(2))^(1/3)

ans =

5.0367

b)

33

1

1

1

1

i

i

i

i

>> ((1+i)/(1-i))^3-((1-i)/(1+i))^3

ans =

0 - 2.0000i

c) 53log xB , pentru 7x ;

Folosim formula de schimbare a bazei logaritmice

2

a

xx

b

b

alog

loglog .

>> x=7;

>> log(x^(1/5))/log(3)

ans =

0.3542

d) xxxxC 7cos5cos3coscos 4444 , pentru 8

x ;

>> x=pi/8;

>> C=cos(x)^4+cos(3*x)^4+cos(5*x)^4+cos(7*x)^4

C =

1.5000

2) Să se sorteze în ordine descrescătoare elementele vectorului

7820176.0 x , cu precizarea indicelui fiecărui element.

>> x=[-0.76 -1 20 8 -7]

x =

-0.7600 -1.0000 20.0000 8.0000 -7.0000

>> [y,I]=sort(x,’descend’)

y =

20.0000 8.0000 -0.7600 -1.0000 -7.0000

I =

3 4 1 2 5

3) Se consideră matricea

34.71278

78547.5

79.007.4

39971

A .

Se cere:

a) Transformaţi matricea A într-un vector coloană b ;

>> A=[1 -7 99 3;4.7 0 0.9 -7;5.7 4 5 78;-78 12 -7.4 3];

>> b=A(:);

3

b) Să se extragă submatricea D de dimensiune 23x , ce constă din elementele situate pe

ultimele trei linii şi primele două coloane ale matricei A .

>> D=A(2:4,1:2)

D =

4.7000 0

5.7000 4.0000

-78.0000 12.0000

CALCUL NUMERIC ÎN MATLAB CU APLICAŢII ÎN ALGEBRĂ

4) Rezolvaţi ecuaţiile neliniare:

a) arctgx1 x

>> f=@ (x) 1+x-atan(x);

>> x=fzero(f,[-3 3])

x =

-2.1323

>> f(x)

ans =

2.2204e-016

b) 0cos2 xx

>> f=@ (x) x.^2-cos(pi*x);

>> s=fsolve(f,[-0.5,0.5])

s =

-0.4384 0.4384

>> f(s)

ans =

1.0e-011 *

0.962 0.1001

5) Rezolvaţi sistemele neliniare:

a)

026

036

33

33

yyx

xyx (considerând ca punct iniţial 5.0,5.0 )

Pasul 1. Definim funcţia vectorială f .

4

>>f=@(x) [x(1)^3+x(2)^3-6*x(1)+3;

x(1)^3-x(2)^3-6*x(2)+2];

Pasul 2. Rezolvăm sistemul neliniar.

>> s = fsolve(f,[0.5 0.5])

s =

0.53237037226762 0.35125744755245

Pasul 3. Efectuăm verificarea soluţiei pe care am obţinut-o.

>> f(s)

ans =

1.0e-009 *

0.29623858921468

0.19358559200100

b)

0

1

9

2

222

zyx

xyz

zyx

(considerând ca punct iniţial 6.1,2.0,5.2 ).

>> f=@(x) [x(1)^2+x(2)^2+x(3)^2-9;x(1)*x(2)*x(3)-1;x(1)+x(2)-x(3)^2]

f =

@(x) [x(1)^2+x(2)^2+x(3)^2-9;x(1)*x(2)*x(3)-1;x(1)+x(2)-x(3)^2]

>> s = fsolve(f,[2.5 0.2 1.6])

s =

2.49137569683072 0.24274587875742 1.65351793930053

>> f(s)

ans =

1.0e-011 *

0.11226575225010

0.13493650641294

-0.05244693568329

REZOLVAREA IN MATLAB A ECUAŢIILOR SI SISTEMELOR DE ECUATII DIFERENŢIALE

6) Să se integreze ecuaţia de tip Riccati

xxyxyyx 212 22 , 0x

>> y=dsolve('x*Dy=y^2-(2*x+1)*y+x^2+2*x','x')

5

y =

(-x-1+x^2*C1)/(-1+x*C1)

7) Să se integereze ecuaţia diferenţiala Euler:

xyyx 1

>> y=dsolve('x*D3y+D2y=1+x','x')

y =

1/12*x^3+x*log(x)*C1-C1*x+1/2*x^2+C2*x+C3

8) Să se rezolve următorul sistem de ecuaţii diferenţiale liniare neomogen:

33

23

213

2312

2321

xyyy

xyyy

xxyyy

>> [y1,y2,y3]=dsolve('Dy1=y2+y3-x-x^2','Dy2=3*y1+y3-2-x^2','Dy3=3*y1+y2+x-3','x')

y1 =

1+2/3*C2*exp(3*x)-C3*exp(-2*x)

y2 =

x+exp(-x)*C1+C2*exp(3*x)+C3*exp(-2*x)

y3 =

-exp(-x)*C1+C2*exp(3*x)+C3*exp(-2*x)+x^2

NOTIUNEA FISIER IN MATLAB

9) Construiti un program in Matlab, cu ajutorul caruia:

- sa se creeze un fisier in care vor fi salvate doua matrice, una de tipul ( ) si

cealalta ( ) ;

- sa se citeasca continutul fisierului in alte doua matrice.

Se va construi un script in Matlab cu numele fisier.m, avand continutul:

W=[1 6; 7 8]; w=[-2 3 5; 6 7 8];

fid=fopen('pond1fb','w');

fprintf(fid,'%f\t',W);

fprintf(fid,'%f\t',w);

fclose(fid);

fid=fopen('pond1fb','r');

6

a=fscanf(fid,'%f\t',[2,3]);

b=fscanf(fid,'%f\t',[2,2]);

fclose(fid);

In linia de comanda se scrie

>>fisier

GRAFICA IN MATLAB

10) Reprezentati grafic in Matlab printr-o histograma, notele obtinuite de cei 50 de studenti

inscrisi la cursul de Statistica. Notele se vor citi dintr-un fisier text.

Se construieste un script in Matlab, cu denumirea fis.m, ce contine:

fid=fopen('pond.txt','r');

u=fscanf(fid,'%f\t',[1,50]);

fclose(fid);

In linia de comanda scriem:

>> fis

>> for j=1:max(u)

v=find(u(1:length(u))==j);

n(j)=length(v);

end

>> sum(n)

ans =

50

>> v=1:10;

>> hist(u,v)

>> grid on

7

11) Reprezentaţi grafic următoarele funcţii în plan:

21

2arcsin)

x

xxfa

, 5,5x

Pasul 1. Se fixează intervalul pe care va fi reprezentată funcţia şi un anumit pas.

>>x=-5:0.1:5;

Pasul 2. Definim funcţia ce urmează să fie reprezentată.

>> f=@(x) asin(2*x./(1+x.^2));

Pasul 3. Realizăm reprezentarea grafică.

>> plot(f(x),'m','LineWidth',4)

0 20 40 60 80 100 120

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

8

xxfb arcsin) , xxg arccos , 1,1x

>>x=-1:0.01:1;

>> f=@(x) asin(x);

>> g=@(x) acos(x);

>> plot(x,f(x),'r',x,g(x),'b','LineWidth',3)

12) Reprezentati arcul de parabola 2: xyAB , care uneste punctele 1,1A si 4,2B .

Secventa Matlab urmatoare permite reprezentarea arcului AB .

>> x=-4:.1:4;

>> y=x.^2;

>> plot(x,y,1,1,'or',2,4,'or')

13) Scrieţi un fişier “function” în Matlab pentru a reprezenta grafic funcţia

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-2

-1

0

1

2

3

4

-4 -3 -2 -1 0 1 2 3 40

2

4

6

8

10

12

14

16

A(1,1)A(1,1)A(1,1)A(1,1)

B(2,4)

9

0,0

0,1

cos

x

xx

xxf , 5.0,5.0x , 01.0h

Se selectează succesiv File->New->M-file şi se scriu următoarele instructiuni

function r=f(x)

if x~=0

r=x*cos(1/x);

elseif x==0

r=0;

end

end

Se salvează fişierul cu f.m apoi în linia de comanda se scrie:

>> x=-0.5:0.01:0.5;

>> for k=1:length(x)

y(k)=f(x(k));

end

>> plot(x,y)

14) Reprezentati grafic in Matlab corpul solid, de forma tetraedrului din primul octant,

marginit de planele 1 zyx , 0x , 0y , 0z .

>> x=[1 0 0 0 1 0]; y=[0 0 1 0 0 1]; z=[0 0 0 1 0 0];

>> plot3(x,y,z,1,0,0,'ob',0,1,0,'ob',0,0,1,'ob',0,0,0,'ob')

-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

10

15) Realizati in Matlab graficul corpului, limitat de suprafetele: xzy 42 22 si 2x .

Secventa Matlab urmatoare permite reprezentarea corpului omogen.

>> [y,z]=meshgrid(-3:.03:3,-2.5:.03:2.5);

>> x=y.^2/4+z.^2/2;

>> [m,n]=size(x);

>> x1=2*ones(m,n);

>> plot3(x,y,z,x1,y,z)

00.2

0.40.6

0.81

0

0.2

0.4

0.6

0.8

1

0

0.2

0.4

0.6

0.8

1

xy

z

A(1,0,0)

O(0,0,0)

C(0,0,1)

B(0,1,0)

01

23

45

6

-5

0

5

-3

-2

-1

0

1

2

3

xy

z

Laboraratorul 2. Aplicatii ale testelor Chauvenet si Young

Bibliografie:

1. Văduva, I. Modele de simulare, Editura Universitatii din Bucureşti, 2004.

2. Trandafir, R. Note de curs, Facultatea de Hidrotehnica, an III, an AIA, 2011-2012.

3. M. Marusteri, Notiuni fundamentale de biostatisticã. Note de curs. University Press,

Târgu Mureş, 2006, http://www.umftgm.ro/info/Curs_Notiuni_fundamentale.pdf.

4. M. Ghinea, V. Fireţeanu, Matlab: Calcul numeric- Grafică-Aplicaţii, ed. Teora,

Bucureşti, 1998.

5. I. Tutunea, Algoritmi, logica si programare¸ Reprografia Universitatii Craiova, 1993.

6. I. Iatan , Îndrumător de laborator în Matlab 7.0, Ed. Conspress, Bucureşti, 2009.

Scopuri:

1) Aplicarea testului Chauvenet privind eliminarea datelor afectate de erori aberante;

2) Aplicarea testului Young pentru identificarea erorilor sistematice.

TESTUL CHAUVENET

Fiind date valorile, nxx ,......,1 rezultate din măsurători, se consideră că valoarea ix este

afectată de erori aberante dacă verifică relaţia:

zxxi || , (1)

unde:

x = n

xn

jj

1 este media aritmetică a valorilor observate,

n

ii xx

n 1

21 semnifica abaterea standard a valorilor observate,

z se ia din tabele (în functie de numarul n de valori din sir, ce reprezinta

dimensiunea sirului sau volumul esantionului) sau se aproximează conform relatiei

următoare: 2213,3604,31

862,0435,0

aa

az

, cu

n

na

4

12 .

Observatie. Este suficient ca verificarea relatiei (1) sa fie efectuata doar pentru

valorile extreme (minima si maxima) din cadrul esantionului.

Daca, în urma aplicarii testului, rezulta ca una dintre valorile testate este afectata de

erori aberante, valoarea respectiva este eliminata din cadrul esantionului, se recalculeaza

valorile mediei si abaterii standard pentru valorile ramase si se reia verificarea conditiei (1),

2

algoritmul aplicându-se pâna când conditia respectiva nu mai este verificata pentru nici una

dintre cele doua valori extreme ale esantionului.

Exemplul 1. În simularea utilizării unei imprimante conectate la o reţea se urmăreşte

repartiţia numărului maxim de fişiere care sunt in lista de aşteptare pentru listare pe o

perioada de 30 de zile, înregistrându-se valorile:

săpt L Ma Mi J V săpt L Ma Mi J V

I 15 19 13 18 20 IV 19 21 13 23 17

II 12 21 22 19 21 V 18 20 21 13 15

III 13 13 13 14 17 VI 20 19 12 18 12

Să se verifice dacă acest eşantion are valori aberante şi dacă există, să se elimine! Scrieţi un

program Matlab pentru testul Chauvenet. Datele de intrare se iau dintr-un fişier text.

Componentele

esantionului

(ordonate

crescator)

Valori

extreme

|| xxi z

1 15 12 12 5.0333 8.3158

2 19 12 12 5.0333

3 13 12 12 5.0333

4 18 13 23 5.9667

5 20 13

6 12 13

7 21 13

8 22 13

9 19 13

10 21 14

11 13 15

12 13 15

13 13 17

14 14 17

15 17 18

16 19 18

17 21 18

18 13 19

19 23 19

20 17 19

21 18 19

22 20 20

23 21 20

24 13 20

25 15 21

26 20 21

3

3

27 19 21

28 12 21

29 18 22

30 12 23

0333.17x , 5183.3

In concluzie, nici una dintre valorile extreme nu este afectata de erori aberante.

Exemplul 2. A fost măsurată greutatea a 15 indivizi adulţi. Rezultatele măsurătorilor

sunt cele din tabelul următor. Să se verifice dacă acest eşantion are valori aberante şi dacă

există, să se elimine! Scrieţi un program Matlab pentru testul Chauvenet. Datele de intrare se

iau dintr-un fişier text.

Prima aplicare a criteriului Chauvenet

Componentele

esantionului

(ordonate

crescator)

Valori

extreme

|| xxi z

1 58 35 35 38.9333 56.53065

2 60 50 160 86.06667

3 80 55

4 77 58

5 83 60

6 75 65

7 82 70

8 79 75

9 50 77

10 35 79

11 70 80

12 160 80

13 80 82

14 65 83

15 55 160

9333.73x , 652.26

După cum rezultă din tabel, valoarea 160 va trebui să fie eliminată din datele supuse

prelucrării.

A doua aplicare a criteriului Chauvenet

Componentele

esantionului

(ordonate

crescator)

Valori

extreme

|| xxi z

1 35 35 32.7857 29.19275

2 50 83 15.2143

3 55

4 58

4

5 60

6 65

7 70

8 75

9 77

10 79

11 80

12 80

13 82

14 83

7857.67x , 93443.13

De data aceasta trebuie eliminata din tabel valoarea 35.

A treia aplicare a criteriului Chauvenet

Componentele

esantionului

(ordonate

crescator)

Valori

extreme

|| xxi z

1 50 50 20.30769 22.64275

2 55 83 12.69231

3 58

4 60

5 65

6 70

7 75

8 77

9 79

10 80

11 80

12 82

13 83

30769.70x , 95715.10

Utilizand Matlab 7.9, vom construi programul corespunzator testului Chauvenet:

Etapa 1. Din fisierul dateb.txt se vor citi datele initiale.

Etapa 2. Se scrie functia sterge.m, ce permite stergerea unei componente a unui vector.

function v=sterge(u,k,n) for i=1:k-1 v(i)=u(i); end if n~=0 for j=k:n-1

5

5 v(j)=u(j+1); end end end

Etapa 3. Se scrie programul propriu- zis.

fid=fopen('dateb.txt','r'); u=fscanf(fid,'%f\t',[1,15]); fclose(fid); m=mean(u); sigma=std(u); n=length(u); a=(2*n-1)/(4*n) z=(0.435-0.862*a)/(1-3.604*a+3.213*a^2); it=1; u=sort(u); mi=min(u); ma=max(u); p1=length(find(u==mi)); p2=length(find(u==ma)); for i=1:p1 w(i)=mi; end for i=p1+1:p1+p2 w(i)=ma; end q=find(abs(w-m)>z*sigma); while (length(q)~=0) it=it+1; for k=1:length(q) h=find(u==w(q(k))); for l=1:length(h) v=sterge(u,h(l),n); n=n-1; u=v; end end m=mean(u); sigma=std(u); n=length(u); a=(2*n-1)/(4*n); z=(0.435-0.862*a)/(1-3.604*a+3.213*a^2); u=sort(u); mi=min(u); ma=max(u); p1=length(find(u==mi)); p2=length(find(u==ma)); for i=1:p1 w(i)=mi; end for i=p1+1:p1+p2 w(i)=ma; end q=find(abs(w-m)>z*sigma); end

6

TESTUL LUI YOUNG

Problema depistarii si eliminarii erorilor sistematice este mai dificila datorita

multitudinii de factori care se interconditioneaza. Vom prezenta testul lui Young, test care nu

ofera posibilitatea eliminarii erorilor sistematice, ci doar pe aceea a aprecierii influentei

cauzelor sistematice asupra datelor de sondaj.

Pasul 1. Intrare: nxx ,......,1 - şir de date experimentale şi probabilitatea de acceptare

(coeficient de încredere); se calculează mărimile:

.

1

1

2

2

21

11

2

M

xxn

n

iii

Pasul 2. Se compară M cu valoarea critică (VCI) inferioară şi valoarea critică superioară

(VCS), VCI<M<VCS, valori luate din tabele în funcţie de n şi sau determinate cu relaţiile:

a) Dacă 95,0 atunci

341,0919,8

2

057,1317,3

003,0081,0491,0

neVCS

nnVCI

b) Dacă 99,0 atunci

388,1574,33

33,2

33,2

882,0484,3

427,411

269,1883,192

neVCS

n

nVCI

Dacă inegalitatea este satisfăcută, atunci se consideră că şirul de date experimentale are un

caracter aleator (nu este afectat de erori sistematice) cu probabilitatea .

Pasul 3. Stop!

Observatie. În tabele se dau valori pentru corespunzătoare diferitelor valori ale lui n

)25( n

Exemplul 3. Testati daca esantionul de date experimentale, ce consta din valorile ix

ale timpului de latenţă a instalării efectului hipnotic în cazul amobarbitalului (vezi tabelul

urmator) are sau nu un caracter aleator cu probabilitatea 95.0 :

7

7

Componentele esantionului (secunde)

1 16.1

2 15.5

3 13.4

4 22.8

5 12.1

6 11.3

7 11.6

8 6.3

9 8.8

10 7.1 function [VCI, VCS]=valcrit(n,al) if al==0.95 VCI=0.491+0.081*n-0.003*n^2; VCS=3.317-1.057*exp(-8.919*n^(-0.341)); elseif al==0.99 VCI=(192.883+1.269*n^2.33)/(411.427+n^2.33); VCS=3.484-0.882*exp(-33.574*n^(-1.388)); end end

fid=fopen('data.txt','r'); x=fscanf(fid,'%f\t',[1,10]); fclose(fid) n=10;al=0.95 sigma=var(x) delta=0; for i=1:n-1 delta=delta+(x(i+1)-x(i))^2; end delta=delta/(n-1); M=delta/sigma [VCI,VCS]=valcrit(10,al); if VCI<M<VCS disp(['esantionul datelor experimentale are un caracter aleator cu

probabilitatea:', num2str(al)]); else disp('esantionul datelor experimentale este afectat de erori

sistematice') end