Documente Academic
Documente Profesional
Documente Cultură
Cursul1 PDF
Cursul1 PDF
I. 1. Ce este Scilab-ul?
unde
Buton SemnificaŃie
Deschide o nouă fereastră de
comandă
Deschide Scipad-ul (editorul Scilab-
ului)
Deschide un fişier
Copiează
Lipeşte
Schimbă directorul
Consolă Scilab
Alege font
Tabel 2. FuncŃii pentru construirea unui vector sau unei matrice tip
FuncŃia SemnificaŃi Exemplu
a
eye Matricea I=eye(4,4)
unitate I =
! 1. 0. 0. !
! 0. 1. 0. !
! 0. 0. 1. !
diag Matrice B=diag(b)
diagonală B =
! 2. 0. 0. 0. !
! 0. 10. 0. 0. !
! 0. 0. 44. 0. !
! 0. 0. 0. 190. !
zeros Matrice cu -->C=zeros(3,2)
toate C =
elementele ! 0. 0. !
0 ! 0. 0. !
! 0. 0. !
ones Matrice cu -->D=ones(2,3)
toate D =
elementele ! 1. 1. 1. !
1 ! 1. 1. 1. !
rand Matrice cu -->M=rand(3,4)
elemente M =
aleatoare ! 0.2113249 0.3303271 0.8497452
0.0683740 !
! 0.7560439 0.6653811 0.6857310
0.5608486 !
! 0.0002211 0.6283918 0.8782165
0.6623569 !
triu Partea -->U=triu(D)
triunghiulară U =
superioară a ! 1. 1. 1. !
unei matrice ! 0. 1. 1. !
! 0. 0. 1. !
tril Partea -->V=tril(D)
triunghiulară V =
inferioară a ! 1. 0. 0. !
unei matrice ! 1. 1. 0. !
! 1. 1. 1. !
linspace Vector cu -->v=linspace(0,1,5)
incrementar v =
e constantă ! 0. 0.25 0.5 0.75 1. !
între doua ObservaŃie: acelas lucru se obtine daca
valori -->x=0:0.25:1
x =
! 0. 0.25 0.5 0.75 1. !
Pentru
-->y=1:5
se obtine
y =
! 1. 2. 3. 4. 5. !
plot Reprezintă -->x=linspace(0,2*%pi,101);
grafic o -->y=exp(x).*sin(4*x);
curba în 2D -->plot(x,y,'x','y','y=exp(x)*sin(4x)')
Programare în SCILAB
SCILAB-ul poate lucra în urmatoarele moduri:
- În modul linie de comanda; fiecare linie este prelucrată imediat şi
rezultatele sunt afişate;
- Cu programe conŃinute în fişiere. Un fişier constă dintr-o succesiune de
instrucŃiuni SCILAB, cu posibilitatea apelării altor fişiere precum şi a
apelării recursive. Un program SCILAB poate fi scris sub forma
fişierelor:
- Script: conŃine o secventă de comenzi SCILAB; se execută
prin apelarea numelui fişierului: exec(‘nume_fisier’)FuncŃie:
prima linie conŃine cuvântul function; poate lucra cu argumente.
Se pot defini mai multe funcŃii în acelaşi fişier.
-1
-2
-3
-4
-4 -3 -2 -1 0 1 2 3 4
Fişierele funcŃie sunt utilizate pentru crearea unor noi funcŃii SCILAB.
Forma generală a unui fişier funcŃie este:
function [parametri_ieşire] = nume_funcŃie (parametri_intrare)
…..instrucŃiuni de definire a funcŃiei….
endfunction
unde:
function: cuvânt cheie care declară fişierul ca fişier funcŃie (obligatoriu);
nume_functie: numele funcŃiei, adică numele sub care se salvează fişierul,
fără extensie; nu poate fi identic cu cel al unui fişier existent;
parametri_iesire: parametrii de ieşire trebuie separaŃi cu virgulă şi cuprinsi
între paranteze drepte. Dacă funcŃia nu are parametri de ieşire parantezele
drepte şi semnul egal (=) nu mai au sens;
parametri_intrare: parametrii de intrare trebuie separaŃi cu virgulă şi
cuprinsi între paranteze rotunde. Daca funcŃia nu are parametri de intrare
parantezele rotunde nu mai au sens.
endfunction: instrucŃiunea de terminare a unei funcŃii.
ObservaŃii:
Un fişier de tip funcŃie poate să contină mai multe funcŃii. Pentru utilizarea
unei funcŃii trebuie folosită, mai intâi, comanda:
getf(“NumeFunctie.sci”)
Spre deosebire de fişierele script care au extensia ‘sce’, fişierele de tip
funcŃie au extensia ‘sci’.
function [f]=factorial1(n)
//dacă n nu este întreg şi pozitiv se transmite un mesaj de eroare,
//apoi se transformă numărul într-un număr întreg pozitiv
if (n-floor(n)~=0)|n<0 then
n=floor(abs(n))
warning('argumentul nu este întreg pozitiv; se va calcula
'+sprintf("%d",n)+"!")
end
f=prod(1:n)
endfunction
În fereastra de comandă se vor folosi aceste funcŃii astfel:
-->getf('functii.sci')
-->factorial(5)
ans = 120.
-->factorial(0.5)
ans = 1.
-->factorial(-0.5)
ans = 1.
-->factorial1(0.5)
WARNING:argumentul nu este întreg pozitiv; se va calcula 0!
ans = 1.
-->factorial1(-5)
WARNING:argumentul nu este întreg pozitiv; se va calcula 5!
ans = 120.
-1
-2
-3
-3 -2 -1 0 1 2 3
11.0
0.50
0.66 0.83
0.50 0.50
0.66 0.33
0.33 0.83 0.17
2.2 0.66
0.33 0.17 0.66
0.50 0.50
0.66 0.33 0.83
0.0
0.0 2.2 4.4 6.6 8.8 11.0
Exemplul 3: Reprezentarea în 3D a suprafeŃei: z=sin(x)*cos(y)
t=%pi*(-10:10)/10;
deff('[z]=surf(x,y)','z=sin(x)*cos(y)');
rect=[-%pi,%pi,-%pi,%pi,-5,1];
z=feval(t,t,surf);
plot3d(t,t,z,35,45,'X@Y@Z',[2,1,3],rect);
title=['plot3d’];
plot3d
-1
Z -2
-3
-4 -4
-3
-5
-2
-4 -1
-3
-2 0
-1 1
0
2
1
2 3
3 4
4
b −1 ≤ f < 1
ex = x − x
ex
Raportul se numeşte eroare relativă, notată deseori cu ε x
x
ex
εx =
x
x = f ⋅ 10 n + g ⋅ 10 n −t , f , g ∈ [0.1 , 1)
g ⋅ 10 n −t
ex = ≤ 5 ⋅ 10 −t
f ⋅ 10 n
x = x + ex , y = y + e y
xy = ( x + ex )( y + e y ) = x y + yex + x e y
e xy ex e y
= + = εx + εy
xy x y
etp = ex + e y + e p
iar ca margine a erorii
etp ≤ ex + e y + e p < 15 ⋅ 10 − t
x ( x + ex ) x ex e y x
= = 1 + + = (1 + ε x + ε y )
y ( y + e y ) y x y y
ex
y
= εx − εy
x
y
etd = ex − e y + ed
ex + y
=
(e x + ey )
=
x
+
y
x+y (x + y ) (x + y )ε x ( x + y )ε y
adică o sumă ponderată a erorilor introduse la reprezentarea in calculator a
cantităŃii sumate. Şi în acest caz se introduce a eroare suplimentară la
reprezentarea sumei x + y , a cărei valoare relativă o vom nota cu ε s . Ca
urmare, eroarea relativă
la sumare ε ts va fi
x y
ets = εx + ε y + es
x+y x+y
E = ( x + y )z ≅ ( x + y )z
Solutie:
x y
etE = εx + ε y + e z + es + e p
x+y x+y
cu marginea
x + y
etE ≤ 15 ⋅ 10 −t + 3
x+y
Ca recomandare generală, în calculul numeric trebuie studiată şi
propagarea erorilor. În anumite cazuri, acurnularea erorilor poate conduce
la rezultate complet eronate. Pentru a ilustra această posibilitate, să
1
consideràrn calculul integralei I n = ∫ x n e x −1dx
0
I n = 1 − nI n −1 , n = 1,2,...
plecând de la valoarea I 0 = 1 − e −1 . Rezultatele calculelor pentru diferitele
valori ale lui n sunt date in tabelul de mai jos. Se observă că pentru n = 13,
se obŃine.o valoare negativă a integralei, ceea ce nu este posibil, funcŃia
integrată fiind pozitivă pe [0, 1]. Rezultă că valorile obŃinute sunt eronate,
incepând cu o anurnită valoar a lui n. ExplicaŃia o constituie faptul că
valoarea integralei I0 se calculează cu o eroare e0 care este amplificată prin
aplicarea formulei de recurenŃă, astfel că, la calculul lui I13 eroarea este
1 − In
I n −1 = , n = N , N − 1,...
n