+ All Categories

L1

Date post: 25-Dec-2015
Category:
Upload: adelina
View: 5 times
Download: 2 times
Share this document with a friend
Description:
.
20
Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I LABORATOR 1 INTRODUCERE ÎN QTOCTAVE Generalitati • GNU Octave este un limbaj de nivel inalt utilizat pentru calcule numerice; • este considerat o clona gratuita si redusa dpdv al capabilitatilor a lui MATLAB; • sistemul poate fi folosit in mod interactiv sau pentru rularea unor fisiere de comenzi; • limbajul este portat pe o multitudine de sisteme de operare; • este utilizat la ora actuala atat in industrie cat si in mediu academic; • limbajul este interpretat si poate fi extins prin adaugarea de module; • codul Octave poate fi apelat din C++ si invers; • are suport intrinsec pentru numere complexe si lucru cu matrice; • are o colectie bogata de functii matematice; • Octave este de cele mai multe ori exemplificat in linie de comanda, dar exista si interfete grafice de lucru cu acesta. Instalarea Octave In cele ce urmeaza se presupune ca instalarea se face pe un sistem de operare de tip Windows. Kitul de instalare se descarca de la http://octave.sourceforge.net/, varianta “Windows installer”. La ora scrierii acestui document, varianta disponibila este octave-3.6.4- vs2010-setup.exe. Se creaza un director, de exemplu C:\Octave\Octave3.6.4 in care se dezarhiveaza continutul fisierului descarcat anterior. Se poate lansa executabilul octave.exe cu calea completa: c:\octave\Octave3.6.4\bin\octave.exe Interpretorul este incarcat intr–o fereastra de tip linie de comanda. La prompt se pot scrie comenzi, de exemplu: 1+1 sau cos(pi): Iesirea se face cu comanda quit sau exit. 1/20
Transcript

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

LABORATOR 1

INTRODUCERE ÎN QTOCTAVE

Generalitati • GNU Octave este un limbaj de nivel inalt utilizat pentru calcule numerice;

• este considerat o clona gratuita si redusa dpdv al capabilitatilor a lui MATLAB;

• sistemul poate fi folosit in mod interactiv sau pentru rularea unor fisiere de comenzi;

• limbajul este portat pe o multitudine de sisteme de operare;

• este utilizat la ora actuala atat in industrie cat si in mediu academic;

• limbajul este interpretat si poate fi extins prin adaugarea de module;

• codul Octave poate fi apelat din C++ si invers;

• are suport intrinsec pentru numere complexe si lucru cu matrice;

• are o colectie bogata de functii matematice;

• Octave este de cele mai multe ori exemplificat in linie de comanda, dar exista si interfete

grafice de lucru cu acesta.

Instalarea Octave In cele ce urmeaza se presupune ca instalarea se face pe un sistem de operare de tip Windows. Kitul de instalare se descarca de la http://octave.sourceforge.net/, varianta “Windows installer”. La ora scrierii acestui document, varianta disponibila este octave-3.6.4-vs2010-setup.exe. Se creaza un director, de exemplu C:\Octave\Octave3.6.4 in care se dezarhiveaza continutul fisierului descarcat anterior. Se poate lansa executabilul octave.exe cu calea completa:

c:\octave\Octave3.6.4\bin\octave.exe Interpretorul este incarcat intr–o fereastra de tip linie de comanda. La prompt se pot scrie comenzi, de exemplu: 1+1 sau cos(pi): Iesirea se face cu comanda quit sau exit.

1/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

Instalarea mediului grafic de lucru QtOctave Desi se poate lucra din linia de comanda, e poate mai comod sa se foloseasca un mediu grafic de lucru. Acesta poate fi QtOctave, program gratuit disponibil aici. Se va descarca arhiva zip si se va dezarhiva intr-un fisier, de exemplu C:\QtOctave.

Lansarea in executie a programului QtOctave Pentru a lansa in executie programul QtOctave, se va apela fisierul

C:\QtOctave\bin\qtoctave.exe

La pornirea pentru prima oara a programului QtOctave in fereastra va aparea o eroare

din cauza ca mediul nu stie unde se afla instalat Octave. Pentru corectare se va proceda astfel: din meniul Config -> General Configuration se alege “Octave”

si in casuta de Octave Path se introduce calea completa catre directorul unde se afla fisierul octave.exe, asa cum a fost precizat mai sus:

c:\octave\Octave3.6.4\bin\ Dupa repornirea lui QtOctave se poate lucra.

2/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

Ferestrele de lucru Programul QtOCTAVE lucrează cu cinci tipuri de ferestre: o fereastra pentru afisarea variabilelor locale si a functiilor disponibile, o fereastra tip navigator, o fereastra tip editor, o fereastra de comenzi (terminal) si o fereastra pentru afisarea comenzilor lansate in terminal, si a rezultatelor acestora. Ferestrele pot fi inchise sau deschise din meniul View.

Fig.1 - Interfata implicita QtOCTAVE

Fiecare comandă din meniul principal furnizează un meniu specific, selecţia comenzii dorite făcându-se prin deplasarea zonei active cu ajutorul săgeţilor sau prin selecţia directă cu ajutorul mouse-lui. Aceste submeniuri sunt prezentate în Fig.2.

3/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

Fig. 2. - Submeniurile programului OtOCTAVE

Expresii fundamentale

OCTAVE lucrează cu expresii matematice ca şi celelalte limbaje de programare, dar spre deosebire de majoritatea acestor limbaje, aceste expresii implică la scară largă lucrul cu matrici. Expresiile sunt alcătuite cu ajutorul următoarelor tipuri:

4/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

• Variabile • Constante numerice • Operatori • Funcţii

Variabile OCTAVE nu necesită declararea dimensiunii variabilelor, deoarece la întâlnirea unui nou

nume de variabilă generează automat variabila respectivă şi alocă spaţiul necesar de memorie.

Numele unei variabile este o literă, urmată de un număr oricât de mare de litere, cifre sau simboluri. Din acest număr “oricât de mare” sunt oprite primele 31 de caractere.

OCTAVE este case sensitive - face distincţie între literele mici şi cele mari. Ex: A si a reprezinta doua variabile distincte Exemplu: » a = 30

creează o matrice 1 x 1 cu numele a şi stochează valoarea acesteia 30 într-o singură locaţie corespunzătoare singurului element al matricei. Constante numerice OCTAVE utilizează notaţia zecimală, cu punct zecimal opţional şi cu semn + sau -. Se utilizează şi notaţia ştiinţifică cu litera e pentru a specifica o putere a lui 10. Reprezentarea numerelor imaginare este realizată cu litera i sau j ca sufix.

Exemple: 3 -99 0.0001 9.6397238 1.60210e-20 6.02252e23 -3.14159j 3e5i Constante speciale:

pi 3.14159265

i unitate imaginară

j la fel ca i

eps precizia relativă în virgulă mobilă, 2-52

realmin cel mai mic număr în virgulă mobilă, 2-1022

realmax cel mai mare număr în virgulă mobilă, 21023

Inf infinit

NaN nu este număr (Not-a-Number) Numele constantelor speciale nu sunt rezervate şi deci este posibilă suprascrierea lor.

Exemplu:

5/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

>> eps = 1.e-6 Funcţia originală este reconstituită prin comanda: » clear eps

Operatori

Expresiile utilizează operatori aritmetici uzuali:

+ Adunare

- Scădere

* Multiplicare

/ Împărţire

\ Împărţire la stânga

^ Ridicarea la o putere

' Transpusa complex conjugată

( ) Operatorul de specificare a ordinii de evaluare

Funcţii OCTAVE furnizează un mare număr de funcţii matematice elementare standard (abs,

sqrt, exp, sin …). Există şi funcţii matematice avansate O parte din funcţii (cum ar fi sqrt, sin) sunt de tip built-in, adică sunt o parte a

nucleului OCTAVE, au o mare eficienţă, dar detaliile constructive nu sunt accesibile utilizatorului.

Alte funcţii sunt implementate ca fişiere OCTAVE (M-files) şi pot fi chiar modificate. Cele mai utilizate funcţii:

• funcţii trigonometrice sin – sinus asin – arcsinus cos – cosinus acos – arccosinus tan – tangentă atan – arctangentă cot – cotangentă acot – arccotangentă sec – secantă asec – arcsecantă csc – cosecantă acsc – arccosecantă

6/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

• funcţii putere exp – funcţia exponenţială log – logaritm natural log2 – logaritm în baza 2 log10 – logaritm în baza 10 sqrt – funcţia radical;

• alte funcţii

abs – valoarea absolută, modul min – minimum max – maximum

Exemplu: Pentru a calcula expresia

17.05.1)7ln(53

cos4

sin

−+

+ππ

Se va scrie comanda:

>> (sin(pi/4)+cos(pi/3))/(sqrt(5+log(7))-1.5^0.17) ans = 0.7717 >>

Observatii:

1. ans este numele unei variabile careia i se asigneaza rezultatul evaluarii expresiei, daca ceea ce s-a introdus nu este o atribuire.

2. Daca se scrie o expresie (fie ea si de atribuire) si nu se finalizeaza randul cu caracterul ; atunci rezultatul evaluarii acelei expresii este scris in mediul de rulare. Pentru a se inhiba afisarea rezultatului se pune la sfarsit ;

3. Pentru ştergerea tuturor variabilelor curente din memoria de lucru se poate utiliza comanda clear.

7/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

Vectori si matrice

>> A = [1 2; 3 4; 5 6] A = 1 2 3 4 5 6

In secventa de mai sus s-a definit o matrice cu 3 linii si 2 coloane; trecerea de la o linie la alta se face cu punct si virgula. Accesarea unui element al matricei se face cu formatul matrice(linie, coloana), cu indicele de linie si de coloana pornind de la 1:

>> A(1, 2) ans = 2

Pentru definirea unui vector linie se foloseste:

>> v = [1 2 3]

iar pentru un vector coloana: >> u = [1; 2; 3] u = 1 2 3 v si u sunt in mod evident matrice de 1x3 si respectiv 3x1: >> size(v) ans = 1 3 >> size(u) ans = 3 1 Pentru scrierea unei progresii aritmetice incepand de la vi, cu pasul pas si cu termeni nu mai mari decat vf se foloseste expresia

vi:pas:vf: >> [1:0.5:5] ans = Columns 1 through 9: 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 >> size([1:0.5:5]) ans = 1 9 >> [0:0.3:1] ans = 0.00000 0.30000 0.60000 0.90000 Numerele întregi de la 10 la 100 din 5 în 5:

8/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

>> 10:5:100 ans = Columns 1 through 14 10 15 20 25 30 35 40 45 50 55 60 65 70 75 Columns 15 through 19 80 85 90 95 100 Numerele de la 1 la 0 din 0.2 în 0.2: >> 1:-0.2:0 ans = 1.0000 0.8000 0.6000 0.4000 0.2000 0 Dupa cum se observa, rezultatul este un vector linie. Daca pasul lipseste, se presupune a fi implicit 1: >> v = 1:6 v = 1 2 3 4 5 6 Pentru generarea unor matrice particulare avem functiile:

ones(nrLnii, nrColoane) zeros(nrLnii, nrColoane) eye(nrLnii, nrColoane)

>> ones(2, 3) ans = 1 1 1 1 1 1 >> zeros(2, 3) ans = 0 0 0 0 0 0 >> v = 2 * ones(2, 3) v = 2 2 2 2 2 2 Matricea unitate se obtine cu functia eye: >> I = eye(4) I = Diagonal Matrix 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Obtinerea unei matrice cu valori aleatoare, uniform distribuite intre 0 si 1 se face cu: >> w = rand(1,3) w =

9/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

0.23989 0.18998 0.47958 iar pentru a obtine numere dintr-o distributie normala, centrata in 0 si cu dispersia 1 se foloseste: >> w = randn(1,3) w = -1.60819 -1.30364 -0.41856 Evident, functiile se pot folosi si pentru generarea de matrice: >> rand(3, 3) ans = 0.72054 0.84622 0.20286 0.16965 0.15998 0.73834 0.56582 0.47004 0.67899 >> randn(3, 3) ans = 0.14664 -1.41418 -0.57935 -0.39136 -1.15935 0.85834 -1.00617 -0.12719 -0.80026 Se pot combina expresii; unele functii (radical, logaritm) care functioneaza pe scalari pot fi de asemenea folosite si pentru vectori sau matrice: >> x = 1:10 x = 1 2 3 4 5 6 7 8 9 10 >> y = sqrt(x) y = Columns 1 through 10: 1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458 2.8284 3.0000 3.1623 Determinarea dimensiunii unei matrice se face cu functia size: >> A = [1 2; 3 4; 5 6] A = 1 2 3 4 5 6 11 >> size(A) ans = 3 2 Rezultatul functiei size este o matrice de 1 linie si 2 coloane, date care se pot accesa individual: >> size(A, 1) %numarul de linii ans = 3 >> size(A, 2) %numarul de coloane ans = 3 Pentru vectori se poate inca folosi functia size, dar este disponibila si functia length:

10/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

>> v = 1:4 v = 1 2 3 4 >> length(v) ans = 4 >> length([1; 2; 3; 4; 5]) ans = 5 Referirea elementelor dintr-o matrice se poate face pe baza indicilor; indicii incep de la 1. Putem sa referim elemente individuale cu forma

numeMatrice(linie, coloana) sau portiuni intregi din ea: >> A(3,2) % elemental de pe linia a 3-a si coloana a 2-a ans = 6 >> A(2,:) % toate elementele de pe linia a 2-a ans = 3 4 ":" inseamna “toate elemente de pe acea linie/coloana >> A(:,2) % toate elementele de pe coloana a 2-a ans = 2 4 6 >> A([1 3],:) % toate elementele de pe liniile 1 si 3 ans = 1 2 5 6 Exemple: >> A=[1 2 0; 2 5 -1; 4 10 -1] A = 1 2 0 2 5 -1 4 10 -1

o Elementele de pe linia 1, începând cu a doua coloană: >> A(1,2:end) ans = 2 0

o Elementele aflate în poziţii impare de pe linia 2: >> A(2,1:2:end) ans = 2 -1

o Elementele aflate în poziţii pare de pe coloana 1: >> A(2:2:end,1)

11/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

ans = 2

o Elementele pozitive:

>> A(A>0) ans = 1 2 4 2 5 10

o Toate elementele: >> A(:) ans = 1 2 4 2 5 10 0 -1 -1

Datele din matrice pot fi si modificate folosind adresarea pe portiuni: >> A(:,2) = [10; 11; 12] % modifica a 2-a coloana A = 16 1 10 3 11 5 12 La o matrice se pot adauga linii si coloane: >>A = [A, [100; 101; 102]]; % adauga o coloana sau se pot concatena chiar doua matrice cu conditia ca operatia sa aiba sens: >>B = [11 12; 13 14; 15 16] % aceeasi dimensiune cu A >>[A B] >>[A; B] Obs. Concatenarea:

• Pentru concatenarea pe orizontală a matricelor A cu B se scrie [A,B] matricele A şi B trebuind să aibă acelaşi număr de linii.

• Pentru concatenarea pe verticală se scrie [A;B] de data aceasta matricele A şi B trebuind să aibă acelaşi număr de coloane.

12/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

Efectuarea de calcule >> A=[1 2 0; 2 5 -1; 4 10 -1] A = 1 2 0 2 5 -1 4 10 -1

• Calculul transpusei matricei A:

>> B = A’ B = 1 2 4 2 5 10 0 -1 -1

• Adunarea matricelor: >> C=A+B C = 2 4 4 4 10 9 4 9 -2

• Adunarea cu matricea identitate:

>> D=A+eye(3) D = 2 2 0 2 6 -1 4 10 0

• Înmulţirea matricelor:

>> E=A*B E = 5 12 24 12 30 59 24 59 117

După cum se ştie, înmulţirea matricelor nu este comutativă:

>> F=B*A F = 21 52 -6 52 129 -15 -6 -15 2

13/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

• Înmulţirea elementelor corespunzătoare a 2 matrice: >> G=A.*B G = 1 4 0 4 25 -10 0 -10 1

Obs. S-a utilizat o aşa-numită “operaţie punctuala” (produs Hadamard), cu conditia

ca matricele sa aiba aceleasi dimensiuni:

• Ridicarea la o putere a unei matrice: >> A^2 ans = 5 12 -2 8 19 -4 20 48 -9

• Ridicarea la o putere a elementelor matricei: >> A.^2 ans = 1 4 0 4 25 1 16 100 1

• Numărul elementelor matricei: >> numel(A) ans = 9

• Elementul maxim de pe fiecare coloană a unei matrice:

>> max(A) ans = 4 10 0

• Elementul minim de pe fiecare coloană a unei matrice: >> min(A) ans = 1 2 -1

• Suma elementelor de pe fiecare coloană: >> sum(A) ans = 7 17 -2

14/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

• Produsul elementelor de pe fiecare coloană:

>> prod(A) ans = 8 100 0

• Elementele de pe diagonala principală: >> diag(A) ans = 1 5 -1

• Produsul scalar a doi vectori >>a = [1 2 3] a = 1 2 3 >>b = [1;2;3] b = 1 2 3 >>prod_scalar = a*b prod_scalar = 14

• Produsul tensor a doi vectori

>>a = a’ a = 1 2 3 >>b = [1;2;3] b = 1 2 3 >>prod_tensor = a*b’ prod_tensor = 14

• Produsul vectorial a doi vectori – un vector perpendicular pe planul format de cei doi vectori

15/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

>> b = [-2 1 2]; >>cp = cross(a,b) cp = 1 -8 5

• Norma euclidiana a unui vector se calculeaza prin functia norm. >>a = -2:2 a = -2 -1 0 1 2 >>ne = norm(a) ne = 3.1623 Pentru un vector sau o matrice, o expresie logica va produce un vector sau matrice de acelasi fel cu cea initiala in care avem valoarea 1 (adevarat) acolo unde expresia este adevarata si 0 (fals) in rest: >> a = [1 15 2 0.5] a = 1.00000 15.00000 2.00000 0.50000 >> a < 3 ans = 1 0 1 1 Pentru a determina care sunt indicii pentru care o expresie este adevarata se poate folosi functia find: >> find(a < 3) ans = 1 3 4 Pentru cazul in care se aplica functia find pe o matrice: >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> [r,c] = find(A>=7)

16/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

r = 1 3 2 c = 1 2 3

Functie Descriere Floor Rotunjeste la cel mai mic intreg Ceil Rotunjeste la cel mai mare intreg Fix Rotunjeste la 0 Round Rotunjeste la cel mai apropiat intreg >>T = randn(5) T = 1.1650 1.6961 -1.4462 -0.3600 -0.0449 0.6268 0.0591 -0.7012 -0.1356 -0.7989 0.0751 1.7971 1.2460 -1.3493 -0.7652 0.3516 0.2641 -0.6390 -1.2704 0.8617 -0.6965 0.8717 0.5774 0.9846 -0.0562 >>A = floor(T) A = 1 1 -2 -1 -1 0 0 -1 -1 -1 0 1 1 -2 -1 0 0 -1 -2 0 -1 0 0 0 -1 >>B = ceil(T) B = 2 2 -1 0 0 1 1 0 0 0 1 2 2 -1 0 1 1 0 -1 1 0 1 1 1 0 >>C = fix(T) C = 1 1 -1 0 0 0 0 0 0 0 0 1 1 -1 0 0 0 0 -1 0 0 0 0 0 0 >>D = round(T) D =

17/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

1 2 -1 0 0 1 0 -1 0 -1 0 2 1 -1 -1 0 0 -1 -1 1 -1 1 1 1 0 Exerciţii:

1. Să se calculeze:

251+ =

( ) 3

2

π

=

3cos10 22 ππ ⋅− =

3

3

331

3

π

π π

+− =

2. Pentru x=0.5 şi t= 2 să se calculeze expresiile:

( ) ( )23 1ln1 ttx ++⋅+ =

( )txe tx cos1 ++⋅+=

txetxarctgtx++

+2cos =

3. Să se definească vectorii şi matricele de mai jos:

( )3,2,1=v

( )6,5,4=w

−=

101

u

18/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

−=

102

z

=

100010001

A

−−=

221111102

B

4. Să se genereze vectorii având următoarele elemente:

v1: 2, 4, 6, 8,…, 100 v2: 50, 48, 46,…, -50

5. Prin concatenarea vectorilor şi matricelor de la ex. 1, să se genereze vectorii şi

matricele de mai jos:

( )654321=r

−−

=

1011

02

t

−−

=

333221333111333102500000050000005000

C

6. Cu vectorii şi matricele de la ex. 1, 2, 3 să se calculeze:

=⋅−+

=⋅−⋅=⋅=⋅

333 15 EDCzBuA

trzv

19/20

Facultatea de Constructii Informatica Aplicata An univ. 2014-2015 Semestrul I

7. Fie matricea

=

334524644332343323234322324543433432

A

a. Să se calculeze elementele maxim si minim ale matricei A. b. Sa se calculeze elementul maxim de pe pozitiile pare de pe linia a doua a

matricei A. 8. Utilizând matricele A şi B să se genereze matricele:

−−

=

221000111000102000000100000010000001

G

−−−−

−−

=

221221111111102102100100

010010001001

H

9. Să se genereze:

a) Vectorul elementelor impare ale lui r ; b) Vectorul elementelor pozitive ale lui H; c) Suma elementelor lui H; d) Matricea elementelor lui H aflate la intersecţia liniilor 1, 2 şi 3 cu coloanele 2, 4 şi 6; e) vectorul ri în care elementele lui r sunt în ordine inversă.

10. Utilizând matricea B să se scrie comenzile necesare pentru a obţine:

a) un vector format din elementele primei linii a lui B; b) o matrice formată cu ultimele două linii ale lui B; c) un vector ale cărui elemente sunt sumele elementelor din coloanele lui B; d) un vector ale cărui elemente sunt sumele elementelor din liniile lui B; e) o matrice formată din elementele din colţurile lui B.

20/20


Recommended