Sunteți pe pagina 1din 12

l1.

txt
Laborator #1 data limita de trimitere 28 oct 2010

Deschideti terminalul Octave dand dublu-click pe


iconita Octave de pe
desktop sau selectand Octave din meniul lista
MyPrograms

---------------------------------------
in terminal tipariti
>cos(pi/2)
>sin(pi/2)

>ans

>inf
>eps

>realmax
>realmin

tipariti apoi
>cos(pi/2);
deci pentru printare e suf sa omiteti ';'

tipariti

Page 1
l1.txt
>x=cos(pi)

>x
va afisa ce e in variabila x
>y=exp(2)

>y
----------------------------------------------------
-
> save tot

va salva toate variabilele(x,y) in fisierul tot.mat


pentru a le reincarca la o sesiune viitoare tipariti
>load tot

Comanda

>clear
va sterge toate valorile din octave

Exercitiul 1:

1) Calculati cos(pi/6), e^2, arctg(1). Puneti


aceste valori in variabilele x,y respectiv z.
Incarcati variabilele in fisierul tot.mat si apoi
stergeti toate
variabilele cu comanda clear.
Incarcati toate variabilele cu load si verificati
valoarea lor.

Page 2
l1.txt

Vectori:

tipariti

>a=[1 2 3]

acesta e un vector linie

>a=[1;2;3] e un vector coloana

tipariti
>a'

deci a' este transpusul lui a, daca a e coloana, a'


va fi linie, daca
a e linie, a' va fi coloana.

tipariti

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

aceasta este matricea A. in general semnul ';'


delimiteaza
liniile.
cum se calculeaza produse
Page 3
l1.txt
de vectori sau matrici?
calculati

>a=[1 2 3]
>b=[1;2;3]
>a*b

>a=[1 2 3;2 3 4;3 4 5]

>b=[1 2 3]'
>a*b

Cum se afla componente din vectori si matrici?

>a(2,3)

>a(1,1)

>b(2)
>b(3)

Cum se calculeaza inverse de matrici?

>inv(A)

Cum se inmultesc vectorii componenta cu componenta?


(Adica daca v=[v1,v2,v3] si w=[w1,w2,w3] atunci vrem
[v1*w1,v2*w2,v3*w3]

Page 4
l1.txt
exemplu:

>a=[1 2 3]
>b=[2,3,4]
>a.*b
deci pentru a calcula pe componente se utilizeaza un
punct inaintea
semnului *.

cum se afla dimensiunea unei matrici?

>A=[1 2 3;1 2 3; 2 3 4]
>size(A)

cum se genereaza vectori?

>x=0:0.1:1
x =

Columns 1 through 8:
0.00000 0.10000 0.20000 0.30000 0.40000
0.50000 0.60000 0.70000

Columns 9 through 11:

0.80000 0.90000 1.00000


adica componentele lui x sunt numerele de la 0 la 1
cu increment
Page 5
l1.txt
0.1

Tipariti
>x=0:1:10

Grafice:
Graficul lui f(x)=x^2
>v=0:0.1:1
>plot(v,v.*v)

in general primul vector v reprezinta valorile pe


care le poate lua
x, iar v.*v este vectorul cu valorile pe care le
poate lua f(x).

Exercitiu 2) Faceti graficul lui cos(x) pe


intervalul [0,2pi]

Fisiere cu extensia .m(m-files)

Creati un fisier, dati-i numele laborator1.m si


scrieti in el
liniile de text

Page 6
l1.txt
x=pi/2
cos(x)
sin(x)
exp(x)
Plasati acest fisier in directorul ce apare cand
executati pwd in
terminalul Octave.
Apoi de la terminalul octave
executati
>laborator1

---------------------------------
se observa ca toate comenzile din fisierul
laborator1.m se executa linie cu linie.

Cum se utilizeaza functiile in matlab?

creati un fisier pe care-l numiti cosx.m


in fisier, prima linie se va scrie

function z=cosx(x)
%aceasta functie calculeaza puterea 2 a numarului
cos(x)
dupa care scrieti

z=cos(x)^2

Salvati fisierul

iar apoi la linia de comanda din octave scrieti


cosx(0.5)
Page 7
l1.txt

in acest fel se apeleaza functia cosx.


daca tipariti
help cosx
veti obtine lina de ajutor de sub antetul functiei.
Este util
sa scrieti linii de ajutor pentru a va reaminti de
scopul pentru care
a fost scrisa functia.

Bucle for, while, if

creati un fisier numit bucle.m


scrieti in el urmatorul text

% bucla for
a=0;
for(i=0:4)
a=a+i
end

% controale if, else


for(i=0:4)
if(i==0)
disp(i)
end
end

Page 8
l1.txt
% bucla while
x=0;a=0;

while(x<20)
a=a+x
x++;
end

executati scriptul bucle.m pentru a vedea care e


efectul liniilor de cod
expuse mai sus.

Exercitiu: Construiti o functie care sa calculeze


suma primelor n numere naturale, o alta care sa
calculeze suma
numerelor pare mai mici ca n utilizand bucla for.
Faceti acelasi lucru utilizand bucla 'while';

----------------------------------------------------
--------------
REZOLVARI DE ECUATII NELINIARE
METODA BISECTIEI

Consideram ecuatia

f(x)=tg(x)-2x=0 pe care incercam sa o rezolvam pe


[0.1,1.5]
utilizand metoda bisectiei

Page 9
l1.txt
1)faceti un grafic pe [0.1,1.5] utilizand functia
plot pentru a vizualiza
intersectia lui f cu Ox.

2)faceti un m-file numit tanx.m care sa calculeze


functia f(x) in orice punct x.

3) creati un fisier numit bisect.m


in el scrieti liniile urmatoare plasate intre
-----------------------------
function aprox_sol = bisect(f, a, b)
%f defineste ecuatia ce urmeaza a fi rezolvata
%a,b intervalul pe care se cauta solutia
%comanda 'feval(f,a)' evalueaza functia f in a.

EPSILON = 1.0e-5;

aprox_sol = ( a + b ) / 2;
n = 0; %iteratia curenta

while ( abs ( b - a) > EPSILON )

n++;
disp(n)
c = ( a + b ) / 2;
aprox_sol = c;

if ( feval(f,c) == 0 )
break;
elseif ( sign(feval(f,a)) * sign(feval(f,c)) <= 0
)
b = c;
Page 10
l1.txt
else
a = c;
end
end
---------------------------------

Intrebari:
1) ce reprezinta constanta EPSILON?
2)ce reprezinta sign(feval(f,a))?
3) care e rostul liniei de cod
aprox_sol = ( a + b ) / 2;
dinaintea buclei 'while'?
4) Incercati comanda 'help bisect' . ea va va arata
ce face functia bisect.

5) Explicati conditia de iesire din bucla 'while'.

6) Care este solutia ecuatiei f(x)=0 cu 5 zecimale


exacte?

7) Cate iteratii garanteaza teoria o eroare mai mica


decat 10^(-5)?

EXERCITIUL 2:

Construiti un fisier poly.m ce va contine


function z= poly(x)
z=x^3;
Ecuatia poly(x)=0 admite solutia exacta x=0;
Incercam sa aproximam aceasta
solutie utilizand metoda bisectiei pe intervalul

[-1,1.01].

Page 11
l1.txt
Utilizati codul bisect.m construit anterior pentru a
aplica metoda bisectiei
functiei poly definita anterior.
introduceti linia de cod

disp(strcat('pas=',num2str(n),'solutie exacta
=',num2str(0),', solutie aproximanta=',num2str(c), '
eroare=',num2str(abs(c-0))))

chiar inaintea liniei de cod ce contine 'if' in


bisect.m
scrieti
>bisect('poly',-1,1.01);

Ultimul numar din aceasta comanda de printare ne


arata eroarea la fiecare iteratie.
O putem calcula deoarece stim solutia exacta.

1) Faceti un tabel
iteratie eroare
1 |solutie_exacta-x_1|
2 |solutie_exacta-x_2|
3 |solutie_exacta-x_3|
4 |solutie_exacta-x_4|
5 |solutie_exacta-x_5|

2) Dupa cate iteratii garanteaza teoria din metoda


bisectiei o eroare mai mica decat 0.01?

3) Cu toate acestea in experimentul de mai sus prima


iteratie da o eroare mai mica decat toleranta 0.01.
De ce?
Page 12

S-ar putea să vă placă și