Professional Documents
Culture Documents
Cursul 1. I. Prezentarea Generală A Programului Scilab Ii. Erori de Calcul Numeric
Cursul 1. I. Prezentarea Generală A Programului Scilab Ii. Erori de Calcul Numeric
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
0
-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
exy 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
xy 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
xy xy
E ( x y )z ( x y )z
Solutie:
x y
etE x y e z es e p
xy xy
cu marginea
x y
etE 15 10 t 3
xy
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