Sunteți pe pagina 1din 25

CURSUL 1.

I. PREZENTAREA GENERAL A PROGRAMULUI SCILAB


II. ERORI DE CALCUL NUMERIC


I. 1. Ce este Scilab-ul?

Structural, SCILAB-ul este, cu mici modificri, o variant gratuit
a MATLAB-ului avnd versiuni pentru Unix i pentru Windows.
La adresa www.scilab.org se gsete documentaie gratuit pe
INTERNET referitoare la Scilab precum i programul corespunztor.
Pentru nceput, Scilab-ul se poate folosi pentru efectuarea
calculelor elementare, operaiilor cu vectori i matrice (cu elemente
reale i complexe) i reprezentrilor grafice de curbe i suprafee. De
asemenea, Scilabul poate fi un mediu agreabil de realizare a calculelor
numerice pentru c dispune de o serie de metode uzuale din acest
domeniu, de exemplu:
- rezolvarea sistemelor liniare,
- calculul valorilor i vectorilor proprii,
- rezolvarea ecuaiilor difereniale,
- rezolvarea sistemelor neliniare,
- noiuni de baz din algebra liniar,
- algoritmi de optimizare
Programarea n Scilab se efectueaz destul de uor, pentru
anumite secvene mai complicate se pot folosi subprograme realizate
n C sau fortran (77). Scilab-ul include aplicaii specifice, numite
TOOLBOX-uri - colecii extinse de funcii SCILAB care dezvolt mediul
de programare de la o versiune la alta, pentru a rezolva probleme din
domenii variate.


I. 2. Mediul Scilab

Mediul Scilab lucreaz cu mai multe tipuri de ferestre: o fereastr
de comenzi, o fereastr pentru fiiere sau grafice, o fereastr pentru
help. Cnd se lanseaz n execuie se deschide implicit fereastra de
comand care, conine meniurile File, Edit, Preferences, Control,
Editor, Applications i ? (help) i o bar de butoane

unde

n fereastra de comenzi, instruciunile se scriu pe prompterul -->
i se execut apsnd Enter; instruciunile se execut de la stanga la
dreapta i de sus n jos n ordinea n care s-au scris.

Buton
Semnificaie

Deschide o nou fereastr de
comand

Deschide Scipad-ul (editorul Scilab-
ului)

Deschide un fiier

Copieaz

Lipete

Schimb directorul

Consol Scilab

Alege font


Meniul File conine:



unde, un fiier specificat este executat cu Exec i ncrcat cu Load.
Activat meniul Editor face s se dechid editorul Scilab-ului n
care se pot scrie programe care se pot executa folosind Execute/Load
into Scilab.




Folosind Scicos din Applications se pot realiza diverse
diagrame i simulri n fereastra care se deschide.



Pentru realizarea diagramelor se pot alege obiecte folosind opiunea
Palettes din Edit (sau clic dreapta cu mouse-ul), de exemplu:




Se pot introduce instruciuni cu ajutorul ferestrei de dialog obinute prin
accesarea opiunii Context (clic dreapta cu mouse-ul).



ntr-o fereastr asemntoare se pot edita i personaliza graficele.




I. 3. Noiuni Scilab


Pachet de programe de nalt performan, dedicat calcului numeric
i reprezentrilor grafice n domeniul tiinei i ingineriei, precum i
simulrilor stocastice. Matricea este elementul de baza; cu aceasta se pot
rezolva probleme fr a fi necesar scrierea unui program ntr-un limbaj de
programare.
Lucreaz cu mai multe tipuri de ferestre: o fereastr de comenzi, o
fereastr pentru fiiere sau grafice, o fereastr pentru help. Include
aplicaii specifice, numite TOOLBOX-uri; colecii extinse de funcii SCILAB
care dezvolt mediul de programare de la o versiune la alta, pentru a
rezolva probleme din domenii variate. Structural, SCILAB-ul este (cu mici
modificri!) o variant gratuit a MATLAB-ului.

Tabel 1. Funcii SCILAB de interes general:
Denumire funcie Aciune funcie
exit, quit Comanda pentru ieirea din SCILAB
help Furnizeaz informaii on-line despre
SCILAB
who Listeaz variabilele curente
cd Schimb directorul de lucru
dir Afieaz lista directorului
clc terge fereastra de comenzi
mtlb_save Salveaz variabilele curente
error Afieaz mesaje de eroare
exist Verific dc o variabil sau un fiier exist
disp Afieaz o matrice sau un text
clear terge variabile i funcii
size Returneaz dimensiunile unei matrice
apropos Caut n help un cuvnt specificat


Manevrarea vectorilor i matricelorDefinirea matricelor:
- Introducerea explicit a listei de elemente;
- Generarea prin instruciuni i funcii;
- Crearea de fiiere script;
- ncrcarea din fiiere de date externe.
Introducerea explicit a unei matrice:
- Elementele unei linii sunt separate prin virgul sau spaiu;
- Lista elementelor matricei trebuie ncadrat ntre
paranteze drepte;
- Liniile se separ prin punct i virgul (;).

Exemplu pentru definirea unei matrice: comanda
-->A=[1 1 1;2 4 8;3 9 27]
are drept efect
A = ! 1. 1. 1. !
! 2. 4. 8. !
! 3. 9. 27. !
Exemplu pentru definirea unui vector:
-->b=[ 2 10 44 190]
b = ! 2. 10. 44. 190. !

Tabel 2. Funcii pentru construirea unui vector sau unei matrice tip
Funcia Semnificai
a
Exemplu
eye Matricea
unitate
I=eye(4,4)
I =
! 1. 0. 0. !
! 0. 1. 0. !
! 0. 0. 1. !
diag Matrice
diagonal
B=diag(b)
B =
! 2. 0. 0. 0. !
! 0. 10. 0. 0. !
! 0. 0. 44. 0. !
! 0. 0. 0. 190. !
zeros Matrice cu
toate
elementele
0
-->C=zeros(3,2)
C =
! 0. 0. !
! 0. 0. !
! 0. 0. !

ones Matrice cu
toate
elementele
1
-->D=ones(2,3)
D =
! 1. 1. 1. !
! 1. 1. 1. !
rand Matrice cu
elemente
aleatoare
-->M=rand(3,4)
M =
! 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
triunghiular
superioar a
unei matrice
-->U=triu(D)
U =
! 1. 1. 1. !
! 0. 1. 1. !
! 0. 0. 1. !
tril Partea
triunghiular
inferioar a
unei matrice
-->V=tril(D)
V =
! 1. 0. 0. !
! 1. 1. 0. !
! 1. 1. 1. !
linspace Vector cu
incrementar
e constant
ntre doua
valori
-->v=linspace(0,1,5)
v =
! 0. 0.25 0.5 0.75 1. !
Observaie: acelas lucru se obtine daca
-->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
grafic o
curba n 2D
-->x=linspace(0,2*%pi,101);
-->y=exp(x).*sin(4*x);
-->plot(x,y,'x','y','y=exp(x)*sin(4x)')

Observaie: Instruciunea plot va desena ntr-o alta fereastr graficul

Tabel 3. Funcii uzuale ale SCILAB-ului:
Apelarea
funciei
Semnificaia matematic
sin(x)
sinc(x)

cos(x)
tan(x)
cotg(x)
sinh(x)
cosh(x)
tanh(x)
asin(x)
acos(x)
atan(x)
exp(x)
log(x)
log10(x)
floor(x)
ceil(x)
Re(z)
Im(z)
lenght(v)
size(a)
max(v)
min(v)
sqrt(x)
sin x
x
x) sin(

cos x
tg x
ctg(x)
sh x
ch x
th x
arcsin x
arccos x
arctg x
e
x

ln(x)
lg x
[x]
[x]+1
Re z
Im z
Numrul elem. vectorului v
Dimensiunea matricei a
Cel mai mare elem. al vect. v
Cel mai mic elem. al vect. v
x

Tabel 4. Operatorii aritmetici SCILAB:
Operaia Scalari Matrice Tablouri
Adunare + + +
Scdere - - -
nmulire * * .*
mprire la stnga \ \ .\
mprire la dreapta / / ./
Ridicare la putere ^ ^ .^
Transpunere .

Tabel 5. Operatorii relaionali
Operator Semnificaie
< Mai mic
> Mai mare

Operator Semnificaie
<= Mai mic sau egal
>= Mai mare sau egal
== Identic
~= Diferit

Tabel 6. Operatorii logici
Operator Simbol SCILAB Prioritatea
NU ~ 1
I & 2
SAU | 3

Programare n SCILAB
SCILAB-ul poate lucra n urmatoarele moduri:
- n modul linie de comanda; fiecare linie este prelucrat imediat i
rezultatele sunt afiate;
- Cu programe coninute n fiiere. Un fiier const dintr-o succesiune de
instruciuni SCILAB, cu posibilitatea apelrii altor fiiere precum i a
apelrii recursive. Un program SCILAB poate fi scris sub forma
fiierelor:
- Script: conine o secvent de comenzi SCILAB; se execut
prin apelarea numelui fiierului: exec(nume_fisier)Funcie:
prima linie conine cuvntul function; poate lucra cu argumente.
Se pot defini mai multe funcii n acelai fiier.

Tabel 7. Instruciuni i funcii de control
Instruciune Semnificaia
if Instruciune pentru execuia condiional
else Instruciune asociat cu if
elseif Instruciune asociat cu if
case Instruciune folosit pentru a face o alegere
for Instruciune pentru crearea ciclurilor cu numr specificat
de pai
while Instruciune pentru crearea ciclurilor cu condiie logic
break Instruciune pentru terminarea forat ntr-un ciclu
return Returneaz execuia la funcia precizat
error Instruciune pentru afiarea unui mesaj de eroare
end Instruciune pentru ncheierea ciclurilor for, while i if

Tabel 8. Sintaxa instruciunilor SCILAB
Instruciune Sintax
If if expresie_logic grup instruciuni end
Else if expresie_logic grup instruciuni A
else grup instruciuni B end
Elseif if expresie_logic_1 grup instruciuni A
elseif expresie_logic_2 grup instruciuni B
end
Case select expr_0
case expr_1 Instr_1
case expr_n Instr_n else Instr end
For for index = expresie \\ expresie = iniial: pas:
final
grup_instruciuni
end
While while expresie
grup_instruciuni
end

Exemple de fiiere script
Definirea i reprezentarea grafic a funciilor cu acolad: cu ajutorul
Scipad-ului (editorul Scilab-ului) se editeaz un fiier script care se
salveaz, de exemplu, Functie.sce i conine urmtoarele instruciuni:
a=-4;b=4;d=0.01;c=0;
x=a:d:b;
k=max(size(x));
for i=1:k
if (x(i)>=a)&(x(i)<c)
y(i)=x(i)+sin(x(i));
end
if (x(i)>=c)&(x(i)<=%pi)
y(i)=sin(x(i));
elseif (x(i)>%pi)&(x(i)<=b)
y(i)=(x(i))^1/3-%pi^1/3;
end
end
plot(x,y)

n fereastra de comand se execut fiierul folosind instruciunea:
-->exec('functie.sce')
i se va obine ntr-o nou fereastr graficul funciei:












Observaie: Fiierul se poate executa direct, n editorul Scilab-ului folosind
din meniul Execute opiunea Load into Scilab.

Calculul limitei irurilor definite recurent: s se calculeze limita irului
1 ,
2
2
10 , lim
2
1 1

+ ++ +
= == = = == =
+ ++ +

n
c
c
c si c unde c
n
n
n n
n
.
Se scrie programul n fiierul numit SirRecurent.sce:
x=10;
c=(2+x^2)/(2*x);
while abs(c-x)>0.00001
x=c;
c=(2+x^2)/(2*x);
end
c
Se lanseaz n execuie n fereastra de comand scriind:
-->exec("SirRecurent.sce")
i se obtine rezultatul:
c = 1.4142136

Fiierele funcie sunt utilizate pentru crearea unor noi funcii SCILAB.
Forma general a unui fiier funcie este:
function [parametri_ieire] = nume_funcie (parametri_intrare)
-4 -3 -2 -1 0 1 2 3 4
-4
-3
-2
-1
0
1
f x ( ) x sin x ( ) + 4 x 0 < if
sin x ( ) 0 x if
3
x
3

( )
otherwise
:=

..instruciuni de definire a funciei.
endfunction
unde:
function: cuvnt cheie care declar fiierul ca fiier funcie (obligatoriu);
nume_functie: numele funciei, adic numele sub care se salveaz fiierul,
fr extensie; nu poate fi identic cu cel al unui fiier existent;
parametri_iesire: parametrii de ieire trebuie separai cu virgul i cuprinsi
ntre paranteze drepte. Dac funcia nu are parametri de ieire parantezele
drepte i semnul egal (=) nu mai au sens;
parametri_intrare: parametrii de intrare trebuie separai cu virgul i
cuprinsi ntre paranteze rotunde. Daca funcia nu are parametri de intrare
parantezele rotunde nu mai au sens.
endfunction: instruciunea de terminare a unei funcii.

Observaii:
Un fiier de tip funcie poate s contin mai multe funcii. Pentru utilizarea
unei funcii trebuie folosit, mai inti, comanda:
getf(NumeFunctie.sci)
Spre deosebire de fiierele script care au extensia sce, fiierele de tip
funcie au extensia sci.

Exemplu: Calculul factorialului
Se vor defini n acelai fiier (functii.sci) dou funcii care calculeaz
factorialul unui numr dat; prima nu verific dac argumentul este ntreg
pozitiv, a doua funcie face acest lucru nainte de a face calculul
function [f]=factorial(n)
f=prod(1:n)
endfunction

function [f]=factorial1(n)
//dac n nu este ntreg i pozitiv se transmite un mesaj de eroare,
//apoi se transform numrul ntr-un numr 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 funcii astfel:
-->getf('functii.sci')
-->factorial(5)
ans = 120.
-->factorial(0.5)
ans = 1.
-->factorial(-0.5)
ans = 1.

Dac argumentul nu este ntreg i pozitiv funcia factorial ntoarce un
rezultat oarecare, 1. Dac vom folosi funcia factorial1 se va obine:
-->factorial1(5)
ans = 120.

-->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.

Recursivitate: o funcie se poate apela pe ea nsi (exemplu: calculul
factorialului recursiv)
function [f]=fact(n)
if n<=1 then
f=1
else
f=n*fact(n-1)
end
endfunction

Observaie: O funcie se poate defini direct prin intermediul comenzii deff
deff([y1, y2,, ]=nume_functie(x1, x2, ),text)
Exemplu: deff([y]=f(x),y=sin(x).*cos(x))


Reprezentri grafice

Exemplul 1: Reprezentarea color, n plan a liniilor de contur ale unei
suprafee folosind Sgrayplot:
x=-10:10; y=-10:10;m =rand(21,21);
Sgrayplot(x,y,m,"111",[-20,-20,20,20])
t=-%pi:0.1:%pi; m=sin(t)'*cos(t);
clf()
Sgrayplot(t,t,m)









Exemplul 2: Reprezentarea liniilor de contur n plan a unei suprafee
contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11])
xset("fpf","%.2f")
clf()
contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11])
0.0 2.2 4.4 6.6 8.8 11.0
0.0
2.2
4.4
6.6
8.8
11.0
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.17
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.33
0.50
0.50
0.50
0.50 0.50
0.50
0.50
0.50
0.50
0.50
0.50
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.66
0.83
0.83
0.83
0.83
0.83
0.83
0.83

-3 -2 -1 0 1 2 3
-3
-2
-1
0
1
2
3
+

Exemplul 3: Reprezentarea n 3D a suprafeei: 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];
pl ot3d
-5
-4
-3
-2
-1
0
1
Z
-4
-3
-2
-1
0
1
2
3
4

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

Citirea / Scrierea din/n fiier n Scilab
Citire:read (citirea se face n matrice)
[x]=read(file-desc,m,n,[format]) sau [x]=read(file-desc,m,n,k,format)
file-desc: ir de caractere specificnd numele fiierului sau valoare
ntreag specificnd unitatea logic
m, n: numere ntregi reprezentnd dimensiunile matricei. Dac nu se
d numrul de linii, se citete tot fiierul
format: ir de caractere ce specific un format Fortran
k: ntreg sau vector de ntregi

Scriere n fiier: write(fisier,text_de_scris)

Alte instruciuni pentru fiiere:
Deschidere fiier: [unit,[err]]=file(open,nume_fisier,[status]) unde
status poate fi new (pentru fiier nou), old (pentru fiier deja existent),
unknown (cnd nu se tie exact). unit este un identificator pentru fiier,
iar err conine posibilele erori.
nchidere fiier: file(close, unit)
Pozitionare la sfrit de fiier: file(last,unit)
Pozitionare la nceput de fiier: file(rewind,unit)
Pentru mai multe detalii s se apeleze apropos comanda.


II.1. Erori de calcul numeric
O formula de calcul numeric se aplica, de obicei, in mod repetat. In
consecina, prezint importanta nu numai eroarea introdusa intr-o etapa, ci
si tendina de a amplifica sau, dimpotriv, de a atenua erorile introduse de
anterior, adic stabilitatea metodei numerice. Studiul erorilor numerice
rmne deci o problema deschisa, care trebuie luata in considerare pentru
fiecare metoda de calcul in parte.

II.1.1. Surse de erori
Erorile inerente: sunt erorile legate de cunoaterea aproximativa a
unor valori provenite din msurtori sau din faptul c avem de-a face cu
numere iraionale (algebrice sau transcendente: numerele , e, 3 , etc.).
Evident, rezultatul oricror calcule depinde i de precizia datelor introduse
iniial. Ca erori inerente pot fi considerate i erorile de conversie fcute la
trecerea in baza 2 a unor numere care se introduc in memoria
calculatoarelor numerice actuale. Spre exemplu, numrul 0.1 reprezentat
printr-un numr finit de zecimale in baza 10, devine o frac zecimala
periodica in baza 2 (0.1
10
0.0(0011)
2
).
Erorile de metod sau erorile de trunchiere sunt provenite din
aproximaiile fcute la deducerea formulelor de calcul. Exemple: restul
R
N
(x) la interpolarea polinomial, distana
+1 n
x la rdcin, din metodele
iterative de calcul, erorile introduse prin trunchierea seriilor la un anumit
rang, etc. Spre deosebire de erorile inerente, erorile de metod pot fi
reduse, in principiu, orict de mult.
Erorile de rotunjire sunt legate de posibilitile limitate de
reprezentare a numerelor in calculatoarele numerice. In general, orice
calculator poate reprezenta numerele cu un numr redus de cifre
semnificative, depinznd de lungimea cuvntului (numrul de bii utilizat la
stocarea unui numr In mod curent se lucreaz cu un echivalent de circa 7

cifre semnificative n simpl precizie i de circa 15 cifre semnificative in
dubla precizie.
Dup cum se tie, n memoria intern a calculatoarelor actuale se folosete
reprezentarea n virgul mobil, in forrna normalizat. Astfel, orice numr
real x se scrie 1 < = f , b f x
n
unde f este un numr real denumit mantis,
b > 0(b 1) este baza sistemului de numeraie utilizat, iar n (ntreg) este
exponentul.
n forma normalizat mantisa este cuprins in intervalul [b
-1
, 1)
1
1
<

f b
Singura excepie de la acest regul de reprezentare este numrul zero.
In consecin un numr real cu mai multe cifre semnificative este rotunjit
la numrul de cifre maxim. Acest lucru se realizeaz prin rotunjirea
mantisei, Alte rotunjiri se efectueaz n decursul operaiilor.
In general, notand cu x valoarea exact a numdrului i cu x valoarea
calculat (aproximativ), eroarea absolut e
x
se definete ca diferena
dintre valoarea exact i cea aproxirnativ
x x e
x
=
Raportul
x
e
x
se numete eroare relativ, notat deseori cu
x

x
e
x
x
=
Fie t numrul de cifre semnificative. Pentru comoditate, s presupunem c
lucrm in baza 10 (b = 10). Atunci, un numr x a crui valoare o
presupunem iniial cunoscut cu exactitate. se va scrie
| ) 1 1 0 10 10 , . g , f , g f x
t n n
+ =


unde g conine cifrele care nu pot fi incluse in mantisa f. Rotunjirea se face
de obicei simetric, adic se nlocuiete

5 0 0 5 0 1 . g daca g , . g daca g < = =
n acest fel, marginea erorii relative este
t
n
t n
x
f
g
e

= 10 5
10
10

Erorile cu marginea data de formula de mai sus se fac la introducerea
numerelor reale in memoria calculatorului numeric. Ele afecteaz
rezultatele in funcie de operaiile la care sunt supuse valorile introduse.

II.2. Propagarea erorilor in calcule
II.2.1. Propagarea erorilor la nmultire
Vom considera dou nurnere, x i y, introduse cu erorile e
x
respectiv e
y

y x
e y y , e x x + = + =
Presupunem c se efectueaz produsul numerelor
( )( )
y x y x
e x e y y x e y e x xy + + = + + =
unde s-a neglijat produsul e
x
e
y
considerat ca avnd un ordin do mrime
suficient de mic. Rezult eroarea la nmulire
y x
y
x
xy
y
e
x
e
y x
e
+ = + =
Rezult c la nmu1ire erorile relative introduse iniial se adun. n afar
de aceste erori, pot aprea ns noi erori, deoarece produsul poate avea, la
rndul su un numr de cifre semnificative mai mare dect cel admis (notat
cu t) necesitnd o nou rotunjire (simetrica). Notnd cu
p
aceast nou
eroare, vom obine eroarea relativ total
tp
la nmulirea a dou numere
p y x tp
e e e e + + =

iar ca margine a erorii
t
p y x tp
e e e e

< + + 10 15
Desigur, aceast evaluare este acoperitoare deoarece erorile nu se adun,
ci se compun dup legi mai complicate (probabilistice).

II.2.2. Propagarea erorilor la mprire
( )
( )
( )
y x
y
x
y
x
y
x
y
e
x
e
y
x
e y
e x
y
x
+ + =
|
|

\
|
+ + =
+
+
= 1 1
unde am neglijat termenii de grad superior lui 2 in e
x
i e
y
. S-a folosit
dezvoltarea n serie Taylor pentru ...
y
y
+
+
1
1
1
. Rezult c eroarea
relativ la mprire, datorat erorilor de reprezentare in calculator (e
x
i e
y
),
este
y x
y
x
y
x
e
=
adic este egal cu diferena erorilor relative introduse iniial in valorile
numrtorului i numitorului. La acestea se adaug eroarea de rotunjire la
reprezentarea raportului
y
x
, pe care o vom nota cu
d
, astfel nct eroarea
relativ total la mprirea dou numere x, y este
d y x td
e e e e + =

II.2.3. Propagarea erorilor la adunare
In acest caz, suma a dou numere este

y x
e e y x y x + + + = +
astfel nct eroarea relativa la sumare este
( )
( ) ( ) ( )
y x
y x y x
y x
y
y x
x
y x
e e
y x
e
+
+
+
=
+
+
=
+
+

adic o sum ponderat a erorilor introduse la reprezentarea in calculator a
cantitii sumate. i n acest caz se introduce a eroare suplimentar la
reprezentarea sumei y x + , a crei valoare relativ o vom nota cu
s
. Ca
urmare, eroarea relativ
la sumare
ts
va fi
s y x ts
e
y x
y
y x
x
e +
+
+
+
=
Aplicaie: s scriem eroarea total la calculul expresiei
z ) y x ( z ) y x ( E + + =
Solutie:
p s z y x tE
e e e
y x
y
y x
x
e + + +
+
+
+
=
cu marginea
|
|

\
|
+
+
+


3 10 15
y x
y x
e
t
tE

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
considerrn calculul integralei


=
1
0
1
dx e x I
x n
n

O modalitate de calcul o reprezint utilizarea unei relaii de recuren
,... , n , nI I
n n
2 1 1
1
= =



plecnd de la valoarea
1
0
1

= e I . Rezultatele calculelor pentru diferitele
valori ale lui n sunt date in tabelul de mai jos. Se observ c pentru n = 13,
se obine.o valoare negativ a integralei, ceea ce nu este posibil, funcia
integrat fiind pozitiv pe [0, 1]. Rezult c valorile obinute sunt eronate,
incepnd cu o anurnit valoar a lui n. Explicaia o constituie faptul c
valoarea integralei I
0
se calculeaz cu o eroare e
0
care este amplificat prin
aplicarea formulei de recuren, astfel c, la calculul lui I
13
eroarea este
0
9
0 13
10 6227 13 e e ! e =
Pentru a obine o valoare corect n cazul indicilor n mari se aplic formula
de recuren sub forma
,... N , N n ,
n
I
I
n
n
1
1
1
=


in care erorile sunt reduse in fiecare etap. Prin urmare, plecnd de la un N
suficient de mare eroarea introdus din necunoa valorii I
n
va fi redus,
astfel nct s obinem rezultate corecte. Observnd c valoarea integralei
scade cu n, vom alege N = 20 i vom aproxima I
20
0, calculnd
integralele de indice mai mic din ce n ce rnai precis. Valonile obinute sunt
date in acelade mai sus. Se observ c rezultatele sunt rnai bune la indici
mari i identice la indici mici (n < 7).
Tabel. Exemplu de amplificare a erorilor
n
,... , n , nI I
n n
2 1 1
1
= =

,... N , N n ,
n
I
I
n
n
1
1
1
=


0 0.632121 0.632121
1 0.367879 0.367879
3 0.207277 0.207277
7 0.112383 0.112383
9 0.091586 0.091612
13 -0.377925 0.066948
17 - 0.052778
20 - 0.000000


Exercitii pentru seminarul 1
1. Sa se genereze o matrice A, cu n linii si n+1 coloane, ale carei elemente
sunt:





= == =
= == =
= == =
rest in
j i daca
j i daca
A
, 0
1 , 1
, 2
.
2. Sa se scrie un program utilizand while care calculeaza suma elementelor
vectorului x=(5 2 9 10 1 9 1) pana cand intalneste un nr mai mare ca 8.
3. Sa se calculeze si sa se afiseze ( (( ( ) )) )

= == = = == =
+ ++ + = == =
10
1
10
1
2 3
3 1 2
k k
k k A
4. S se calculeze suma elementelor unui vector care sunt cuprinse intre
valorile a i b cu a<b.
5. S se calculeze produsul elementelor diferite de zero ale unui vector.
6. Se d irul de numere x
1
, x
2
, , x
n
. S se determine numrul de elemente
pozitive i s se calculeze produsul lor.
7. S se calculeze media aritmetic a elementelor unui vector care sunt mai
mari decat o valoare dat.
8. Se dau dou siruri de cte n numere: a
1
, a
2
, , a
n
i b
1
, b
2
, , b
n
. S se
formeze irul c
1
, c
2
, , c
n
n care termenii se obin dup urmtorul
procedeu: pentru orice i, n i , 1 = == = ,
{ {{ { } }} }






< << <
+ ++ +
= == =
0 , , max
0 ,
2
i i i i
i i
i i
i
b a daca b a
b a daca
b a
c

9. Sa se calculeze si sa se afiseze suma patratelor elementelor mai mari decat 1
ale unei matrice patratice.
10. Sa se calculeze media aritmetica a elementelor de pe diagonala principala a
unei matrice patratice de ordinul n, cu n<10
11. Sa se determine valorile maxime si minime ale unui vector si ale unei
matrice, apoi sa se determine si indicele (pozitia acestora).
12. S se calculeze suma elementelor diferite de o valoare dat, v, ale unei
matrice.
13. Sa se determine elementul maxim al unui matrice de numere reale.
14. S se calculeze produsul elementelor diferite de zero de pe diagonala
principal (secundar) ale unei matrice.
15. S se calculeze suma elementelor unei matrice situate deasupra (dedesubtul)
diagonalei principale (secundare).
16. Se dau numerele a i j
ij
, , ,..., ; , ,..., = = 1 2 100 1 2 50 si b j
j
=1 2 50 , , ..., . Sa se realizeze
un program care calculeaza: c a b i
i ij j
j
= =
=
, , ,..., 1 2 100
1
50
.