0% au considerat acest document util (0 voturi)
13 vizualizări

Lab Num Scilab

Documentul prezintă un îndrumar de laborator pentru analiză numerică în Scilab. Cuprinde informații despre programarea în Scilab, algebră liniară numerică, rezolvarea sistemelor și ecuațiilor algebrice, interpolare, derivare numerică, metoda celor mai mici pătrate și integrare numerică. De asemenea, conține o culegere de probleme pentru fiecare temă.

Încărcat de

Coyotu
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
13 vizualizări

Lab Num Scilab

Documentul prezintă un îndrumar de laborator pentru analiză numerică în Scilab. Cuprinde informații despre programarea în Scilab, algebră liniară numerică, rezolvarea sistemelor și ecuațiilor algebrice, interpolare, derivare numerică, metoda celor mai mici pătrate și integrare numerică. De asemenea, conține o culegere de probleme pentru fiecare temă.

Încărcat de

Coyotu
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 81

E.

SCHEIBER

Laborator de ANALIZĂ NUMERICĂ

SCILAB

Braşov
Tema de LABORATOR

Pentru a fi primit în examen trebuie efectuată şi predată cadrului didactic


coordonator al activităţii de laborator Lucrarea de laborator de Analiză numer-
ică/Calcul numeric.
Lucrarea constă din 2 teme:

• Rezolvarea a câte unei probleme din toate temele cuprinse în Culegerea de


probleme.

• Programarea unor metode de calcul numeric.

Fiecare temă primeşte o notă iar media notelor reprezintă 50% din nota de exa-
men.

Rezolvarea problemelor din Culegerea de probleme


Pe o foaie A5 se vor scrie

1. Titlul capitolului;

2. Enunţul temei şi al problemei;

3. Rezultatele obţinute.

Pe prima foaie se trece

1. Numele şi prenumele;

2. Elemente de identificare a formaţiei de studiu;

3. Produsul informatic cu care s-au rezolvat problemele;

4. Numărul de ordine din catalog sau cel primit de la coordonatorul activităţii


de laborator. În continuare ne referim la acest număr prin notaţia I D.

2
3

La o temă, un student rezolvă problema având numărul de ordine I D. Dacă


I D este mai mare decât numărul problemelor atunci problema ce trebuie rezol-
vată se obţine cu formula

ID mod1 Numar ul P r obl emel or + 1.

Se va folosi următorul produs informatic

• Scilab - produs gratuit descărcabil din internet;

Îndrumarul de laborator de Analiză numerică/Calcul numeric prezintă modul


de rezolvare a problemelor.

1
Restul împărţirii.
Tema de programare

Programarea unor metode de calcul numeric


Fiecare student va prezenta 2 aplicaţii programate în Scilab.
Cele două aplicaţii se aleg dintre

1. Rezolvarea unui sistem algebric printr-o metodă finită;

2. Rezolvarea unui sistem algebric printr-o metodă iterativă;

3. Formulă de derivare numerică;

4. Formulă de integrare numerică.

Documentaţia realizată pe foi A4 cuprinde:

1. Datele de identificare.

(a) Autorul (nume, prenume, specializarea, grupa);


(b) Data predării proiectului;
(c) Tema proiectului.

2. Formulele de calcul utilizate.

3. Problema de test cu rezolvarea matematică şi calculele auxiliare pentru de-


panare.

4. Reprezentarea algoritmilor în pseudocod (l. română).

Exemplu de aplicaţie Scilab


Metoda tangentei pentru rezolvarea ecuaţiei algebrice f (x) = 0, f : R → R
f (x )
constă în construirea şirului (x k )k∈N definit prin x k+1 = x k − f 0 (xk ) .
k
Documentaţia cuprinde:

4
5

1. Formula de calcul.

x0 ∈ R
f (x k )
x k+1 = x k − , k ∈N
f 0 (x k )

2. Problema de test.
Să se rezolve ecuaţie 2x − x 2 = 0, x0 = 1
S-au calculat x 1 = 2.6294457, x 2 = 1.8807153.

3. Algoritmul metodei este dat pe pagina următoare.

Algorithm 1 Pseudocodul metodei


1: procedure METODA TANGENTEI
2: generarea aproximaţiei iniţiale xv
3: i t er ← 0
4: do
5: i t er ← i t er + 1
f (xv)
6: x ← xv − f 0 (xv)
7: nr m ← |x − xv|
8: xv ← x
9: while (nr m ≥ eps) şi i t er < nmi )
10: if nr m < eps then
11: er ← 0
12: else
13: er ← 1
14: end if
15: return x
16: end procedure

4. Textele sursă.
Proiectul este alcătuit din 3 programe Scilab:

(a) Datele problemei de test:


1 function [ f , df , x0 , nmi , t o l ]= datas ( )
2 d e f f ( ’ y= f ( x ) ’ , ’ y =2.^ x−x . * x ’ ) ;
3 d e f f ( ’ y=df ( x ) ’ , ’ y =2.^ x . * log (2) −2 * x ’ ) ;
4 x0 = −0.5;
5 nmi=50;
6 t o l =1e−5;
7 endfunction
6

(b) Rezolvarea problemei – nucleul proiectului:


1 function [ x , er ]= mtangentei ( f , df , x0 , nmi , t o l )
2 xv=x0 ;
3 sw=%t ;
4 i t e r =0;
5 while sw
6 i t e r = i t e r +1;
7 x=xv−f ( xv ) . / df ( xv ) ;
8 nrm=max( abs ( x−xv ) ) ;
9 xv=x ;
10 p r i n t f ( " i t e r =%d x=%f \n" , i t e r , x ) ;
11 i f ( ( i t e r >=nmi ) | ( nrm<= t o l ) )
12 sw=%f ;
13 end
14 i f (nrm<= t o l )
15 er =0;
16 el se
17 er =1;
18 end
19 end
20 endfunction

(c) Apelarea aplicaţiei:


1 function a p l i c a t i a ( path )
2 exec ( path+ ’ \ datas . s c i ’ , −1);
3 exec ( path+ ’ \ mtangentei . s c i ’ , −1);
4 [ f , df , x0 , nmi , t o l ]= datas ( ) ;
5 [ x , er ]= mtangentei ( f , df , x0 , nmi , t o l )
6 p r i n t f ( ’ error_code = %d\n ’ , er )
7 p r i n t f ( ’ computed_solution = %f \n ’ , x )
8 endfunction
7

În timp, la elaborarea acestui Îndru-


mar de laborator au contribuit:
• Silviu Dumitrescu
• Cristina Luca
• Vlad Monescu
Cuprins

I Scilab 10

1 Elemente de programare în SCILAB 11


1.1 Obiecte Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Elemente de programare in Scilab . . . . . . . . . . . . . . . . . . . . 20
1.3 Funcţii(subprograme) în Scilab . . . . . . . . . . . . . . . . . . . . . . 23
1.4 Salvarea şi restaurarea datelor . . . . . . . . . . . . . . . . . . . . . . 26
1.5 Grafică în Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.1 Grafică 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.2 Grafică 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2 Algebră liniară numerică 32


2.1 Factorizarea unei matrice . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2 Rezolvarea sistemelor algebrice de ecuaţii liniare . . . . . . . . . . . 34

3 Rezolvarea sistemelor şi ecuaţiilor algebrice 37


3.1 Rezolvarea sistemelor algebrice de ecuaţii neliniare . . . . . . . . . . 37
3.2 Rezolvarea ecuaţiilor algebrice . . . . . . . . . . . . . . . . . . . . . . 39
3.3 Rezolvarea ecuaţiilor polinomiale . . . . . . . . . . . . . . . . . . . . 40

4 Rezolvarea problemelor de interpolare 42


4.1 Interpolare polinomială . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Interpolare cu funcţii spline cubice . . . . . . . . . . . . . . . . . . . 45

5 Derivare numerică 48
5.1 Derivarea funcţiilor de o variabilă reală . . . . . . . . . . . . . . . . . 48
5.2 Cazul funcţiilor de mai multe variabile . . . . . . . . . . . . . . . . . 49

6 Metoda celor mai mici pătrate 51

8
CUPRINS 9

7 Integrare numerică 57
7.1 Integrarea funcţiilor de o variabilă reală . . . . . . . . . . . . . . . . . 57
7.2 Calculul numeric al integralelor duble . . . . . . . . . . . . . . . . . . 59

II CULEGERE DE PROBLEME 63
8 Metode numerice în algebra liniară 64

9 Sisteme şi ecuaţii algebrice 68

10 Probleme de interpolare 72

11 Derivare numerică 75

12 Metoda celor mai mici pătrate 77

13 Integrare numerică 78

Bibliografie 80
Part I

Scilab

10
Capitolul 1

Elemente de programare în SCILAB

Cap. 2

Prezentăm pe scurt elemente ale limbajului de programare utilizat în pro-


dusul Scilab. Elementele prezentate în secţiunile următoare reprezintă doar ghid
de utilizare rapidă. Se presupune că utilizatorul posedă cunoştinţe de progra-
mare, având experienţă de lucru în cel puţin un limbaj de programare procedu-
rală.
Scilab este un produs de calcul numeric produs de INRIA – Franţa – disponi-
bil în mediile Windows şi Linux. Produsul este distribuit gratuit. Produsul este
însoţit de o documentaţie cuprinzătoare.
Ca produs informatic Scilab are trăsături comune cu produsul comercial Mat-
lab.

1.1 Obiecte Scilab

• Constante

11
12 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

Tip Mnemonic Valoare


real %pi π
real %e e
real %eps ≈ 2.210−16
%inf ∞
complex %i i
boolean %t true
boolean %f false
polinom %s s
%nan Not A Number

%inf / %inf
Nan

• Literali

– Identificatori - denumiri date de utilizator diverselor entităţi Scilab


(variabile, funcţii, etc).

* Primul caracter al unui identificator este literă sau unul din car-
acterele %, , #, !, $, ?
* Următoarele caractere pot fi litere, cifre sau unul din caracterele
, #, !, $, ?
* Se face distincţie între literele mari şi mici.
* Numărul maxim de caractere este 24.
– Literali numerici
Exemple:
1. Numărul real 10,23 se poate scrie:
10.23=0.1023e+2=0.1023E+2=1023e-2=1023E-2.
2. Numărul complex 1 + 5i se scrie 1 + 5 ∗ %i .
– Literali nenumerici
Un caracter sau un şir se caractere – string – se defineşte (scrie):

’c’ sau "c"


’string’ sau "string"

• Funcţii matematice uzuale:


1.1. OBIECTE SCILAB 13

Mnemonic Semnificaţie Mnemonic Semnificaţie


abs(x) |x| exp(x) ex
log(x) ln(x) log10(x) lg(x)
sin(x) sin(x) asin(x) arcsin(x)
sinh(x) sh(x) asinh(x) arcsh(x)
cos(x) cos(x) acos(x) arccos(x)
cosh(x) ch(x) acosh(x) arcch(x)
tan(x) tg(x) atan(x) arctg(x)
tanh(x) th(x) atanh(x) arcth(x)
cotg(x) ctg(x) coth(x) cth(x)
p sin x
sqrt(x) x sinc(x) x
floor(x) [x] ceil(x) dxe
R x −t 2 R∞
erf(x) p2 e dt gamma(x) Γ(x) = t x−1 e −t dt
π 0 0
Γ (x)
0
gammah(x) ln Γ(x) dlgamma(x) Γ(x)
real(z) ℜ(z) imag(z) ℑ(z)
int32(x) conversie Z

Funcţii de mediu:

– Fixarea formatului de afişare a rezultatelor:


format(tip, lung)
unde ½ 0 0
v reprezentare în virgulă fixă
ti p = 0 0
e reprezentare cu exponent
şi l ung = numărul caracterelor destinate afişării.
– Tipul unui obiect Scilab
typeof(objScilab)

• Şiruri de numere
Progresia aritmetică introduce definind primul termen (a), raţia (r ) şi o
marginea superioară sau inferioară (M ), după cum raţia este pozitivă sau
negativă, prin sintaxa
a :r :M
Dacă parametrul r lipseşte atunci raţia este 1.

a=0.2:0.3:1
0.2 0.5. 0.8
14 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

b=1:-0.3:0
1. 0.7 0.4 0.1

Funcţia Scilab linspace(a, b, n) defineşte progresia a+i b−a


n−1 , i = 0, 1, . . . , n−
1.
Un şir de numere (a i )1≤i ≤n se poate defini prin

1. i=1:n
a=formula termenului general, functie de i
2. a = [a 1 , a 2 , . . . , a n ],
unde a 1 , a 2 , . . . , a n sunt termenii şirului.

Indicele primului termen al unui şir este 1.

i=1:4
1 2 3 4
a=i^2
1 4 9 16
b=[1,4,9,16]
a==b
T T T T

• Matrice

– Definirea unei matrice.


Exemplu: Matricea µ ¶
1 2 3
a=
4 5 6
se defineşte în Scilab prin

a=[1,2,3;4,5,6]
Elementele unei linii se pot separa prin virgulă sau spaţiu. Elementele
unei matrice pot fi: constante/variabile numerice, constante booleene,
şiruri de caractere, polinoame, funcţii raţionale.
O progresie aritmetică pr og = a : r : M este interpretată ca un vector
linie (adică o matrice cu o singură linie).
Exemplu. Progresiile aritmetice a = 0.2, 0.6, 1.0, 1.4, 1.8 şi b = 0, −1, −2, −3, −4
se obţin prin
1.1. OBIECTE SCILAB 15

a=0.2 : 0.4 : 2
a=
! 0.2 0.6 1.0 1.4 1.8 !
b=-1 : -1 : -4
b=
! -1 -2 -3 -4 !

Funcţia Scilab size(variabilaMatrice) returnează numărul liniilor şi


numărul coloanelor variabileiMatrice.

– Definirea unei matrice rară se face cu funcţia Scilab

a=sparse([l 1 , c 1 ; l 2 , c 2 ; . . .], [v 1 , v 2 , . . .])

unde a l i ,ci = v i . ∀i .
Funcţia full(a ) afişează o matrice rară a în formatul obişnuit.
Funcţia nnz(a) are ca valoare numărul elementelor nenule din a.

– Matrice speciale.

* zeros(m, n) defineşte o matrice nulă cu m linii şi n coloane;


* ones(m, n) defineşte o matrice cu toate elementele egale cu 1
având m linii şi n coloane;

* eye(m,n) defineşte o matrice unitate cu m linii şi n coloane;


* rand(m,n) defineşte o matrice cu m linii şi n coloane având ca
elemente numere (semi)aleatoare cuprinse între 0 şi 1.

– Selectarea unui element se obţine prin sintaxa

variabilaMatrice(numărLinie, numărColoană)

Prima linie şi prima coloană are numărul de ordine 1.


Elementul unei matrice rare se selectează prin intermediul funcţiei
full:
full(variabilaMatrice(numărLinie, numărColoană).

– Operatori matriceali.
16 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

Simbol Semnificaţie
+ adunare
- scădere
∗ înmulţire de matrice
.∗ înmulţire pe componente
ˆ ridicare la putere prin produs matriceal
.ˆ ridicarea la putere a componentelor
\ a\b = a −1 · b
bi , j
.\ a.\b = ( a )i , j
i,j
/ b/a = b · a −1
bi , j
./ b/a = ( a )i , j
i,j
’ transpunere
– Funcţii matriceale.
Mnemonic Semnificaţia
triu(A) Matricea superior triunghiulară a lui A
tril(A) Matricea inferior triunghiulară a lui A
diag(A) Vectorul cu elementele diagonale ale lui A
size(A) Şir cu dimensiunile lui A
length(A) Numărul elementelor lui A
max(A) Cel mai mare element al lui A
min(A) Cel mai mic element al lui A
matrix(A, m, n) Transformă matricea A într-o matrice cu m
linii şi n coloane
– Extinderea unei matrice. Date fiind o matrice a şi un vector linie v
* adăugarea liniei v ca prima linie a matricei a se obţine prin
[v; a]

* adăugarea liniei v ca ultimă linie a matricei a se obţine prin


[a; v]

* adăugarea vectorului v ca prima coloană a matricei a se obţine


prin
[v 0 , a] sau [v; a 0 ]0
* adăugarea vectorului v ca ultimă coloană a matricei a se obţine
prin
[a, v 0 ] sau [a 0 ; v]0
1.1. OBIECTE SCILAB 17

Trebuie observată diferenţa dintre cazul în care extinderea se face prin


linie faţă de cel în care se extinde prin coloană prin utilizarea “;” şi
respectiv “,”.
– Extragerea unei submatrice. O zonă compactă fixată prin liniile l 1 : l 2
şi coloanele c 1 : c 2 , inclusiv, se extrage din matricea a prin

a(l 1 : l 2 , c 1 : c 2 )

Pentru extragerea unei zone necompacte – aflată la intersecţia liniilor


l 1 , l 2 , . . . , l p cu coloanele c 1 , c 2 , . . . , c q – dintr-o matrice a având m linii
şi n coloane există opţiunile:

*
a([l 1 , l 2 , . . . , l p ], [c 1 , c 2 , . . . , c q ])

* se definesc vectori linie


½
%t dacă i ∈ {l 1 , . . . , l p }
l i n = (l i n i )1≤i ≤m , l i ni =
%f în caz contrar
½
%t dacă j ∈ {c 1 , . . . , c q }
col = (col j )1≤ j ≤n , col j =
%f în caz contrar
Extragerea rezultă din
a(l i n, col )
Comenzile a(:, $) şi a($, :) extrag din matricea a ultima coloană, re-
spectiv ultima linie.

• Polinoame şi expresii raţionale


Scilab posedă o modalitate deosebită de lucru cu polinoame definite peste
R sau C .
Pentru a defini un polinom în nedeterminata (variabila) X se poate defini
întâi nedeterminata

X=poly(0,’X’);

iar apoi polinomul se introduce nemijlocit, de exemplu

p=X^2+3*X+2
18 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

Altfel, un polinom se defineşte prin intermediul funcţiei Scilab poly

polinom=poly(vector, nedeterminată, [string])

Dacă vec t or = (a 1 , a 2 , . . . , a n ) şi string=’coeff ’ atunci se obţine polinomul


de grad n − 1
pol i nom = a 1 + a 2 X + . . . + a n X n−1 ,
iar dacă string=’roots’ atunci se obţine polinomul de grad n
pol i nom = (X − a 1 )(X − a 2 ) . . . (X − a n )
A doua variantă este cea implicită.

v=[1,2,3];
p=poly(v,’X’)
p=
-6 + 11X - 6X^2 +X^3
q=poly(v,’X’,’coeff’)
q=
1 + 2X + 3X^2

Dacă A este o matrice pătrată atunci poly(A, ’X ’) generează polinomul car-


acteristic matricei A, adică det(X · I − A).
Dacă p şi q sunt două polinoame în nederminata X atunci p/q defineşte o
funcţie raţională.
Scilab efectuează operaţiile uzuale cu polinoame şi funcţii raţionale în mod
simbolic.
Dacă r este o funcţie raţională atunci r (’num’) sau numer(r ) furnizează numără-
torul şi r (’den’) sau denom(r ) furnizează numitorul lui r.
Funcţii Scilab având polinoane ca argumente:
Mnemonic Semnificaţia
v = coe f f (p) returnează coeficienţii polinomului p
v = hor ner (p, x) p polinom, v = p(x)
q = d er i v at (p) p, q polinoame, q = p 0
[q,U ] = g cd ([p 1 , p 2 , . . .]) q = cmmd c(p 1 , p 2 , . . .), [p 1 , p 2 , . . .] ∗U = [0, . . . , 0, q]
U matrice pătrată de dimensiune [p 1 , p 2 , . . .]
greatest common divisor
[q,U ] = l cm([p 1 , p 2 , . . .]) q = cmmmc(p 1 , p 2 , . . .)
[p 1 , p 2 , . . .]. ∗U = q ∗ ones([p 1 , p 2 , . . .])
least common multiple
1.1. OBIECTE SCILAB 19

X=poly(0,’X’)
p=(X-1)*(X-2)^2
q=(X-1)*(X-2)*(X-3)
[c,U]=gcd([p.q]);
c
2-3X+X^2
[p,q]*U
0 2-3X+X^2
[d,V]=lcm([p,q]);
d
12-28X+23X^2-8X^3+X^4
[p,q].*V-d*ones([p,q])
0 0

• Listă. O listă se defineşte prin

list(e 1 , e 2 , . . . , e n )

unde e i sunt obiecte Scilab.


Exemplu.

l=list(1,%t,’abc’,[1,2;3,4])
l=
l(1)
1
l(2)
T
l(3)
abc
l(4)
! 1. 2. 3. 4. !

Al i -lea element al unei liste l este accesibil cu l (i ).


l (i )=null şterge al i -lea element din lista l.

Exemplificarea tipurilor obiectelor Scilab cu funcţia typeof:


x=1
typeof(x)
constant
typeof(int32(%pi))
int32
typeof(’c’)
20 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

string
typeof(exp)
fptr
typeof(1:5)
constant
typeof(%t)
boolean
p=poly(0,’X’)
typeof(p)
polynomial
l=list(1,’c’)
typeof(l)
list
deff(’y=f(x)’,’y=x.^2’)
typeof(f)
function
l=[1,1];v=1;m=sparse(l,v)
typeof(m)
sparse

1.2 Elemente de programare in Scilab


Programarea în Scilab se face în cadrul funcţiilor definite în exterior. Pentru
editarea acestor funcţii Scilab posedă un editor propriu, dar se poate fi utilizat
orice editor de fişiere.
O linie de comentariu este // text - comentariu.
Fiecare instrucţiune introdusă în dreptul promptului Scilab este executată şi
rezultatul este afişat. Pe o linie pot fi puse mai multe instrucţiuni separate prin
, sau ;. În plus, încheierea unei comenzi cu caracterul ; are ca efect inhibarea
afişării rezultatului.
Pentru exprimarea condiţiilor se utilizează

Operatori relaţionali Operatori logici


Simbol Semnificaţie Simbol Semnificaţie
== = & şi
∼= 6= | sau
<= ≤ ∼ negaţia
< <
>= ≥
> >

• Instrucţiunea de atribuire
variabila=expresie

• Instrucţiuni condiţionate
1.2. ELEMENTE DE PROGRAMARE IN SCILAB 21

1.
½ ¾
,
if condiţie
then
instrucţiuni ½ ¾
,
elseif condiţie
then
instrucţiuni
else
instrucţiuni
end
Separatorii , sau then sunt obligatorii doar în cazul în care o instrucţiune
se scrie pe aceaşi linie cu if.

Exemplul 1.1 Rezolvarea ecuatiei x 2 + ax + b = 0 în linie de comandă.

a=3;b=2;delta=a^2-4*b;
if delta>=0 then x=(-a+sqrt(delta))/2;y=(-a-sqrt(delta))/2;
else x=-a/2;y=sqrt(-delta)/2;end

2.
select expresie
case expr esi e 1 then instrucţiuni
..
.
else
instrucţiuni
end
case şi then trebuie scrise pe aceeaşi linie.

• Instrucţiuni de ciclare
1.
½ ¾
,
for n = n1 : pas : n2 instrucţiuni end
do
Dacă pas = 1 atunci acest parametru este opţional.
Separatorii , sau do sunt obligatorii doar în cazul în care o instrucţiune se
scrie pe aceaşi linie cu for.

P5
Exemplul 1.2 i =1 i
22 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

s=0;
for i=1:5, s=s+i; end

Exemplul 1.3 Împărţirea elementelor unei mulţimi în clase de echivalenţă


modulo 3.
a=[1,2,3,4,5,6,7,8,9];
c0=zeros(3,1);c1=zeros(3,1);c2=zeros(3,1);
i0=0;i1=0;i2=0;
for i=1:length(a),
select a(i)-floor(a(i)/3)*3
case 0 then i0=i0+1;c0(i0)=a(i);
case 1 then i1=i1+1;c1(i1)=a(i);
case 2 then i2=i2+1;c2(i2)=a(i);
end
end

Exemplul 1.4 Şirul lui Fibonacci generat în linie de comandă.


F=[1,1];
n=15;
for i=3:n do F(i)=F(i-1)+F(i-2); end

2.
 
 , 
while condiţie do instrucţiuni end
 
then
while şi do sau then trebuie scrise pe aceaşi linie.
Separatorii , then sau do sunt obligatorii doar în cazul în care o instrucţiune
se scrie pe aceaşi linie cu while.
P5
Exemplul 1.5 i =1 i
s=0;
i=0;
while i<5, i=i+1;s=s+i; end

Instrucţiunea break realizează un salt necondiţionat la prima instrucţiune


aflată după instrucţiunea de ciclare.
Instrucţiunea continue realizează un salt necondiţionat la următorul pas
al ciclului.
Editarea unei instrucţiuni în linie de comandă se face într- o singură linie de
cod, prezenţa virgulei este obligatorie (acolo unde este cazul). Editarea codul
în funcţii externe se poate face pe mai multe linii, utilizând indentarea (scrierea
decalată). În acest caz se poate omite scrierea virgulelor date în sintaxa instrucţi-
unilor.
1.3. FUNCŢII(SUBPROGRAME) ÎN SCILAB 23

1.3 Funcţii(subprograme) în Scilab


O funcţie Scilab este corect definită dacă produce rezultate pentru diferite
tipuri de variabile: numere, vectori, matrice. În acest scop, uzual operaţiile de
înmulţire, împărţire şi ridicare la putere se folosesc în varianta cu punct, adică
operaţiile se fac pe componente.
Funcţiile Scilab predefinite satisfac această cerinţă.
Funcţiile se pot defini în
• Linie de comandă.

deff(’[y 1 , . . . , y n ]= f (x 1 , . . . , x m )’,[’y 1 = expr esi e 1 ’,. . .,’y n = expr esi e n ’])

Funcţia f : R2 → R2 definită prin


µ ¶
x+y
f (x, y) =
x2 + y 2
se defineşte prin

deff(’[u,v]=f(x,y)’,[’u=x+y’,’v=x^2+y^2’])

Variabilele funcţiei pot fi numere, vectori, matrice. În cazul în care vari-


abilele sunt tablouri, operaţiile algebrice se fac între componentele core-
spunzătoare.
O funcţie definită în linie de comandă se salvează

save(’cale\numeFişier.bin’,’ f ’)

Funcţia save salvează orice tip de obiect. Dacă a, b sunt variabile Scilab
atunci sintaxa utilizată va fi save(’cale\numeFişier.bin’,0 a 0 ,0 b 0 ).
Reîncărcarea se realizează prin

load(’cale\numeFişier.bin’)

• Exterior. Cu un editor de fişiere se crează subprogramul

function [y 1 , . . . , y n ]= f (x 1 , . . . , x m )
instructiuni Scilab
endfunction

care se salvează într-un fişier cu extensia sci sau sce.


Pentru a putea fi utilizată funcţia exterioară trebuie încărcată prin
24 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

exec(’cale\numeF i si er .sci’,-1)

Valoarea -1 pentru al doilea parametru are ca efect lipsa afişărilor legate de


operaţia de încărcare a funcţiei.
Este recomandat numeFisier=numeFuncţie, restricţie obligatorie în cazul
în care subprogramul se include într-o bibliotecă.
Pentru funcţia din exemplul anterior, codul macro-ului de definiţie exte-
rioară este

function [u,v]=f(x,y)
u=x+y;
v=x^2+y^2;
endfunction

Funcţiile definite în exterior pot fi organizate în biblioteci. Astfel funcţiile


Scilab – deci având extensia .sci – aflate într-un catalog localizat prin cale
sunt reunite într-o bibliotecă prin comanda

genlib(’numeBibliotecă’,’cale’)

Prin această operaţie are loc compilarea funcţiilor şi crearea unui fişier
names cu cuprinsul bibliotecii.
O bibliotecă odată creată, resursele ei pot fi utilizate după reîncărcarea ei
prin

lib(’cale’)

Exemplul 1.6 Funcţie pentru rezolvarea ecuaţiei de gradul al doilea.

function [u,v]=eq2(a,b)
delta=a*a-4*b
if delta>=0
u=0.5*(-a+sqrt(delta))
v=0.5*(-a-sqrt(delta))
disp(’Real roots’)
else
u=-a/2
v=sqrt(-delta)
disp(’Complex conjugate roots’)
end
endfunction
1.3. FUNCŢII(SUBPROGRAME) ÎN SCILAB 25

Funcţia disp(obiectScilab) afişează valoarea argumentului.

Exemplul 1.7 Funcţie pentru calculul valorii unui polinom.

function r=polyval1(x,c)
[l,n]=size(c)
r=c(1)
for i=2:n
r=r*x+c(i)
end
endfunction

function r=polyval2(x,c)
[l,n]=size(c)
i=0:n-1
u=x^i
r=u*c’
endfunction

Exemplul 1.8 Funcţie pentru calculul primelor n termeni ai şirului Fibonacci.

function t=fib(n)
t=[1,1];
for i=3:n
t(i)=t(i-1)+t(i-2)
end
endfunction
p
Exemplul 1.9 Funcţie pentru calculul limitei şirului (a n )n∈N definit prin a 0 = 2, a n+1 =
p
a n + 2.

function [l,error]=lim(tol,nmi)
v=sqrt(2)
cont=%t
ni=1
while(cont)
ni=ni+1
l=sqrt(v+2)
d=abs(v-l)
v=l
26 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

if(d<tol)&(ni>nmi)
cont=%f
end
end
if(d<tol)
error=0
else
error=1
end
endfunction

O functie Scilab poate avea un număr variabil de parametri formali de intrare.


Aceşti parametri se indică prin variabila varargin.

Exemplul 1.10 Procedură pentru generarea nodurilor lui Cebîşev de speţa a doua
dintr-un interval [l , r ]. În lipsa parametrilor suplimentari intervalul implicit este
[−1, 1].

În intervalul [−1, 1], pentru n ∈ N∗ , nodurilor lui Cebîşev de speţa a doua sunt
definite ca punctele de extrem ale polinomului lui Cebîşev Tn (x) : cos kπ n , k =0:
n.
Bijecţia între intervalele [−1, 1] şi [l , r ] este x 7→ l + r −l
2
(x + 1).

function x=chebpoints(n,varargin)
l=-1
r=1
if length(varargin)>0 then
if length(varargin)==2 then
l=varargin(1)
r=varargin(2)
else
error(’Wrong number of input parameters’)
end
end
k=0:n
x=l+0.5*(r-l)*(cos(k*%pi/n)+1)
endfunction

1.4 Salvarea şi restaurarea datelor


Salvarea şi restaurarea datelor în fişiere text se obţin cu funcţiile Scilab:

• csvWrite(M,filename, separator )
1.5. GRAFICĂ ÎN SCILAB 27

• csvWrite(M,filename)
M este matricea care se salvează iar separatorul implicit este virgula (csv -
Comma separated values).

• M =csvRead(filename)

• M =csvRead(filename, separator )

1.5 Grafică în Scilab


1.5.1 Grafică 2D
Din mulţimea funcţiilor grafice ale produsului Scilab amintim

• plot2d. Cea mai simplă formă de utilizare este

plot2d(x, y)

unde    
x 1,1 . . . x 1,n y 1,1 . . . y 1,n
x =  ... ... ...  y =  ... ... ... 
x m,1 . . . x m,n y m,1 . . . y m,n
sunt două matrice de acelaşi tip. Funcţia construieşte în acelaşi panou (fer-
eastră grafică) graficele a n curbe ce trec respectiv prin punctele

(x i , j , y i , j )1≤i ≤m , j ∈ {1, . . . , n}.

• fplot2d. Utilizarea funcţiei este

fplot2d(x, f )

unde

– x este un şir de numere reale;


– f este o funcţie Scilab

iar rezultatul este graficul funcţiei f construit pe baza valorilor ei în punctele


lui x.

• comet. Reprezentare grafică animată. Utilizarea este asemănătoare cu cea


a fucţiei plot2d.
28 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

• paramfplot2d realizează o animaţie reprezentând evoluţia graficele funcţi-


ilor f t (x), x ∈ [a, b] când parametrul t parcurge o mulţime de valori. Modul
de utilizare

paramfplot2d( f , x, t )

unde

– f (x, t ) este o funcţie Scilab.


– x şi t sunt şiruri.

Exemplul 1.11 Reprezentarea grafică a funcţiilor sin x şi cos x în [−π, π]

Reprezentarea grafică se obţine prin

t=-%pi:0.1:%pi;
x=[t’,t’];
y=[sin(t’),cos(t’)];
plot2d(x,y)

Va rezulta imaginea din Fig. 1.1

1.5.2 Grafică 3D
• plot3d(X,Y,Z)
X = (X i )1≤i ≤m şi Y = (Y1≤ j ≤n sunt vectori daţi în ordine crescătoare, iar
Z = (Zi , j ), i ∈ {1, . . . , m}, j ∈ {1, . . . , n} reprezintă valoarea funcţiei calculată
în (X i , Y j ).
Poziţia observatorului este indicată prin parametrii t het a = l ong i t ud i ne, al pha =
90 − l at i t ud i ne. Valorile implicite sunt t het a = 35, al pha = 45.
Dacă suprafaţa este definită prin z = f (x, y), x ∈ [a, b], y ∈ [c, d ] atunci se
defineşte funcţia Scilab

function [x,y,z]=suprafata(m,n)
u=linspace(a,b,m);
v=linspace(c,d,n);
for i=1:m
for j=1:n
x(i,j)=. . .
1.5. GRAFICĂ ÎN SCILAB 29

Figure 1.1: Grafică 2D.

y(i,j)=. . .
end
end
z=f(x,y);
endfunction

exec(’. . .\suprafata.sce’,-1)
[x,y,z]=suprafata(m,n);
plot3d(x,y,z)

Se poate proceda mai simplu

[x,y]=meshgrid(a:dx:b,c:dy:d);
z=f(x,y);
mesh(x,y,z)
30 CAPITOLUL 1. ELEMENTE DE PROGRAMARE ÎN SCILAB

• fplot3d(X,Y,f)

Exemplul 1.12 Reprezentarea sferei x 2 + y 2 + z 2 = 1.


p
Semisfera superioară este dată de z = 1 − x 2 − y 2 , pentru care construim
funcţia Scilab
function[x,y,z]=sfera(r,m,n)
x=linspace(-r,r,m)
y=linspace(-r,r,n)
for i=1:m
for j=1:n
if x(i)^2+y(j)^2<=r^2 then
z(i,j)=sqrt(r^2-x(i)^2-y(j)^2)
else
z(i,j)=%nan
end
end
end
endfunction

Imaginea obţinută este dată în Fig. 1.2.


Altfel
deff(’z=sf(x,y)’,[’z=sqrt(1-x.^2-y.^2)’])
x=-1:0.05:1;y=x;
fplot3d(x,y,sf)

Exerciţii
1. Să se reprezinte grafic funcţiile în intervalele indicate
p
a. |x| x ∈ [−4, 4]
−x 2
b. e x ∈ [−4, 4]
sin x−3
c. 4x 2+x x ∈ [0, 4]
p2
d. x − x 2 − 1 x ∈ [−4, 4]

2. Să se reprezinte evoluţia funcţiilor


a. xt x ∈ [0, 1] t ∈ {0, 1, 2, . . . , 500}
b. sin t x x ∈ [0, π/2] t ∈ {1, 2, . . . , 100}
c. sin t x x ∈ [0, 2π] t = 1 − 0.05i , i ∈ {0, 1, . . . , 20}
3. Să se reprezinte:
x2 y2
a. z= a2
+ b2 a = 4, b = 3 x ∈ [−3, 3], y ∈ [−3, 3]
Paraboloidul eliptic
x2 y2
b. z= a2
− b2 a = 4, b = 3 x ∈ [−3, 3], y ∈ [−3, 3]
Paraboloidul hiperbolic
1.5. GRAFICĂ ÎN SCILAB 31

Figure 1.2: Grafică 3D Semisfera superioară


Capitolul 2

Algebră liniară numerică

Cap. 1 Cap. 3

2.1 Factorizarea unei matrice


Funcţiile

• [L,U , P ] = lu(A) calculează factorizarea LU a matricei A : P A = LU .

• [Q, R] = qr(A) calculează factorizarea QR a matricei A : A = QR

Exemplul 2.1 Să se calculeze factorizarea LU a matricei


 
1 2 −1 3 2

 2 4 −2 5 1 

A= −1 −2 1 −3 −4  .
 
3 6 2 10 7 
 

1 2 4 0 4

A=[1,2,-1,3,2;2,4,-2,5,1;-1,-2,1,-3,-4;3,6,2,10,7;1,2,4,0,4];
[L,U,P]=lu(A)
P =

32
2.1. FACTORIZAREA UNEI MATRICE 33

0. 0. 0. 1. 0.
0. 1. 0. 0. 0.
0. 0. 0. 0. 1.
1. 0. 0. 0. 0.
0. 0. 1. 0. 0.
U =

3. 6. 2. 10. 7.
0. 0. - 3.3333333 - 1.6666667 - 3.6666667
0. 0. 3.3333333 - 3.3333333 1.6666667
0. 0. 0. - 2. 0.5
0. 0. 0. 0. - 2.
L =

1. 0. 0. 0. 0.
0.6666667 1. 0. 0. 0.
0.3333333 0. 1. 0. 0.
0.3333333 0. - 0.5 1. 0.
- 0.3333333 0. 0.5 - 1. 1.

Exemplul 2.2 Să se calculeze factorizarea QR a matricei


 
6 6 1
X = 3 6 1 
2 1 1

X=[6,6,1;3,6,1;2,1,1];

[Q,R]=qr(X)
R =

7. 8. 1.5714286
0. 3. 0.1428571
0. 0. 0.7142857
Q =

0.8571429 - 0.2857143 - 0.4285714


0.4285714 0.8571429 0.2857143
0.2857143 - 0.4285714 0.8571429
34 CAPITOLUL 2. ALGEBRĂ LINIARĂ NUMERICĂ

Q*R-X

0. 8.882D-16 4.441D-16
- 4.441D-16 - 5.329D-15 - 1.554D-15
0. - 3.109D-15 - 8.882D-16

2.2 Rezolvarea sistemelor algebrice de ecuaţii liniare


Pentru rezolvarea unui sistem algebric de ecuaţii liniare Ax = b, în cazul în
care

• numărul ecuaţiilor coincide cu numărul necunoscutelor;

• determinantul sistemului este diferit de zero;

se procedează după cum urmează:

1. se fixează matricele A şi b;

2. se calculează x = A −1 b.

Expresia A −1 se poate introduce întocmai (Aˆ(-1)) sau se poate utiliza funcţia


Scilab inv( A ).
Funcţia Scilab det( A ) calculează determinantul matricei A.

Exemplul 2.3 Să se rezolve sistemul algebric de ecuaţii liniare

x1 + 2x 2 + 3x 3 + 4x 4 11

 =

2x 1 + 3x 2 + 4x 3 + x4 = 12


 3x 1 + 4x 2 + x3 + 2x 4 = 13

4x 1 + x2 + 2x 3 + 3x 4 = 14

Rezolvarea constă din

A = [1,2,3,4;2,3,4,1;3,4,1,2;4,1,2,3];
b = [11;12;13;14];
det(A)
ans=
160
x=inv(A)*b
2.2. REZOLVAREA SISTEMELOR ALGEBRICE DE ECUAŢII LINIARE 35

x=
! 2 !
! 1 !
! 1 !
! 1 !
În general, pentru sistemul algebric de ecuaţii liniare Ax+b = 0, funcţia Scilab
[x,k]=linsolve(A,b) calculează
1. x – o soluţie particulară;

2. k – o bază a subspaţiului liniar Ker(A) = {x|Ax = 0}.

Soluţia sistemului Ax +b = 0 este x +kc unde c este un vector oarecare a cărui


dimensiune coincide cu numărul coloanelor matricei k.
Dacă sistemul este incompatibil atunci rezultatele sunt egale cu matricea vidă
[ ].

Exemplul 2.4 Să se rezolve sistemul algebric de ecuaţii liniare




 x1 + x2 + x3 + x4 = 2

 2x 1 − x 2 + 2x 3 − x 4 = 1


x 1 + 2x 2 − x 3 + 2x 4 = −1
2x x 2 + 4x 3 + x 4 = 7

1 +




 3x + 2x − 2x + 2x = −5
1 2 3 4

având soluţia x 1 = −1, x 2 = 1 − x 4 , x 3 = 2.


Scris matriceal, soluţia sistemului este
         
x1 −1 0 −1 0
−1
  p
 x 2   1   −1  1
       
  2  0
= + c =  + c .

 x3   2   0  2   0

 
x4 0 1 0 p1
2

Rezolvarea sistemului este

A=[1,1,1,1;2,-1,2,-1;1,2,-1,2;2,1,4,1;3,2,-2,2];
b=[2;1;-1;7;-5] ;
[x,k]=linsolve(A,-b)
k =

- 5.551D-17
36 CAPITOLUL 2. ALGEBRĂ LINIARĂ NUMERICĂ

0.7071068
2.776D-16
- 0.7071068
x =

- 1.
0.5
2.
0.5
Observaţie. k aproximează vectorul de normă euclidiană 1
 
0
 p1 
 2 
.
 0 

−1
p
2

În cazul unui sistem algebric de ecuaţii liniare incompatibil se poate calcula


elementul care minimizează funcţionala J (x) = kb − Axk22 . Acest element este
soluţia sistemului algebric de ecuaţii liniare compatibil A T Ax = A T b şi este dat
de funcţia Scilab x=lsq( A ,b ).

Exemplul 2.5 Să se rezolve sistemul algebric de ecuaţii liniare



 2x − y + 3z = 7
x + y + z = 4
3x − 3y + 5z = 8

în sensul celor mai mici pătrate.

Rezolvarea este

A=[2,-1,3;1,1,1;3,-3,5];
b=[7;4;8];
x=lsq(A,b)
x =

1.4871795
1.2948718
1.5512821
Funcţia linsolve( A ,−b ) returnează [ ].
Capitolul 3

Rezolvarea sistemelor şi ecuaţiilor


algebrice

Cap. 2 Cap. 4

3.1 Rezolvarea sistemelor algebrice de ecuaţii neliniare


Pentru rezolvarea sistemului algebric de ecuaţii neliniare

 f 1 (x 1 , . . . , x n ) = 0

..
 .
f n (x 1 , . . . , x n ) = 0

sau scris sub formă concentrată f (x) = 0 cu


   
x1 f 1 (x 1 , . . . , x n )
 .  ..
x =  ..  f (x) =  ,
 
.
xn f n (x 1 , . . . , x n )

se utilizează funcţia Scilab

[x [,y [,info ] ] ]=fsolve(x0, f [,fjac [,tol ] ] )

37
38 CAPITOLUL 3. REZOLVAREA SISTEMELOR ŞI ECUAŢIILOR ALGEBRICE

unde semnificaţia parametrilor este:

• x0 reprezintă o aproximaţie iniţială a soluţiei sistemului.

• f identificatorul funcţiei Scilab care defineţte sistemul neliniar


f (x) = 0.

• f j ac identificatorul funcţiei Scilab al jacobianului fincţiei f , adică


 ∂ f1 ∂ f1 
∂x 1 (x) ... ∂x n (x)
f j ac(x) =  ... ... ...
 

∂ fn ∂ fn
∂x 1
(x) ... ∂x n
(x)

• t ol toleranţă, parametrul utilizat în testele de precizie (scalar real).

• x aproximaţia calculată a soluţiei sistemului algebric.

• y reprezintă valoarea funcţiei f calculată în x; y = f (x).

• i n f o indicatorul de răspuns al programului fsolve. În cazul rezolvării cu


succes, valoarea indicatorului este 1.

Astfel, rezolvarea constă din

1. definirea funcţei f (şi eventual al jacobianului f j ac);

2. apelarea funcţiei Scilab fsolve.

Exemplul 3.1 Să se rezolve sistemul algebric de ecuaţii neliniare


 2
 10x 1 + x 1 − 2x 2 x 3 − 0.1 = 0
10x 2 − x 22 + 3x 1 x 3 + 0.2 = 0
10x 3 + x 32 + 2x 1 x 2 − 0.3 = 0

Rezolvarea constă din:

deff(’q=f(p)’,[’x=p(1)’,’y=p(2)’,’z=p(3)’,
’q(1)=10*x+x.^2-2*y.*z-0.1’,
’q(2)=10*y-y.^2+3*x.*z+0.2’,
’q(3)=10*z+z.^2+2*x.*y-0.3’])
p0=[0;0;0];
[p,q,info]=fsolve(p0,f)
3.2. REZOLVAREA ECUAŢIILOR ALGEBRICE 39

info=
1.
q=
1.0E-15*
! - .2636780 !
! .2775558 !
! .9436896 !
p=
! .0098702 !
! - .0200485 !
! .0299499 !

3.2 Rezolvarea ecuaţiilor algebrice


Dacă n = 1, adică dimensiunea spaţiului este 1, atunci f (x) = 0 cu f : I ⊂ R →
R reprezintă o ecuaţie algebrică.
Pentru rezolvarea ecuaţiilor algebrice se utilizează de asemenea funcţia Scilab
fsolve.

Exemplul 3.2 Să se rezolve ecuaţia 2x = x 2 .

Rezolvarea ecuaţiei f (x) = 2x − x 2 = 0 este

deff(’y=f(x)’,’y=2.^x-x.^2’)
[x,y,info]=fsolve(1,f)
info
1.
y=
0.
x=
2.
sau cu precizarea derivatei funcţiei f (x)

deff(’y=df(x)’,’y=(2.^ x).*log(x)-2*x’)
[x,y,info]=fsolve(1,f,df)
info=
1.
y=
40 CAPITOLUL 3. REZOLVAREA SISTEMELOR ŞI ECUAŢIILOR ALGEBRICE

0
x=
2.

Dacă x0 = 5 atunci x = 4, iar pentru x0 = −1 găsim x = −0.7666647.


Graficul funcţiei f este reprezentat în Fig. 3.1.

Figure 3.1: y = 2x − x 2

3.3 Rezolvarea ecuaţiilor polinomiale


În cazul particular al ecuaţiilor polinomiale se cere determinarea tuturor rădăcinilor
reale sau complexe.
Pentru aflarea rădăcinilor unui polinom se procedează astfel:

1. Se defineşte polinomul Scilab p de variabilă x.

2. Rădăcinile polinomului p sunt calcutate ajutorul funcţiei Scilab


3.3. REZOLVAREA ECUAŢIILOR POLINOMIALE 41

x=roots(p)

unde

• p este polinomul Scilab cu coeficienţi reali sau complecşi de grad cel


mult 100.
• x este un tablou cu rădăcinile polinomului p.

Exemplul 3.3 Să se determine rădăcinile polinomului p = x 4 + 2x 3 + 3x 2 + 2x + 1.

Rezolvarea constă din:

c=[1,2,3,2,1];
p=poly(c,’x’,’coeff’);
x=roots(p)
x=
! - .5 + .8660254i !
! - .5 - .8660254i !
! - .5 + .8660254i !
! - .5 - .8660254i !
Capitolul 4

Rezolvarea problemelor de
interpolare

Cap. 3 Cap. 5

Fie F o familie interpolatoare de ordin n pe axa reală. Dându-se nodurile


(x i )1≤i ≤n şi numerele (y i )1≤i ≤n , dacă ϕ ∈ F este funcţia de interpolare care satis-
face condiţiile ϕ(x i ) = y i , 1 ≤ i ≤ n, se cere să se calculeze ϕ(z), unde z este un
punct dat.

4.1 Interpolare polinomială


Pentru F = P n−1 soluţia problemei de interpolare Lagrange este polinomul
n n z −x
X Y j
L(P n−1 ; x 1 , . . . , x n ; y 1 , . . . , y n )(z) = yi
i =1 j =1 xi − x j
j 6=i

Valoarea acestui polinom este calculat de funcţia Scilab (formula baricentrică)

1 function f =lagrange ( xd , x , y )
2 [mx, nx]= s i z e ( x ) ;
3 [my, ny]= s i z e ( y ) ;

42
4.1. INTERPOLARE POLINOMIALĂ 43

4 i e r r o r =0;
5 i f ( nx~=ny ) | ( mx~ = 1 ) | (my~=1) ,
6 i e r r o r =1;
7 disp ( ’ data dimension e r r o r ’ )
8 abort
9 end
10 xx= gs o rt ( x ) ;
11 for k =1: nx−1,
12 i f xx ( k)== xx ( k +1) ,
13 i e r r o r =1;
14 break ,
15 end
16 end
17 i f i e r r o r ~=0 ,
18 disp ( ’ data e r r o r ’ )
19 abort
20 end
21 [m, n]= s i z e ( xd ) ;
22 f =zeros (m, n ) ;
23 p=zeros (m, n ) ;
24 q=zeros (m, n ) ;
25 w=ones ( 1 , nx ) ;
26 for i =1:nx ,
27 for j =1:nx ,
28 i f i ~=j ,
29 w( i )=w( i ) * ( x ( i )−x ( j ) ) ,
30 end
31 end
32 end
33 for i =1:m,
34 for j =1:n ,
35 u=find ( x==xd ( i , j ) ) ;
36 i f ~isempty (u ) ,
37 f ( i , j )= y (u ) ;
38 el se
39 for k =1: nx ,
40 p( i , j )=p( i , j )+ y ( k ) / ( xd ( i , j )−x ( k ) ) /w( k ) ;
41 q ( i , j )=q ( i , j ) + 1 / ( xd ( i , j )−x ( k ) ) /w( k ) ;
42 end
43 f ( i , j )=p( i , j ) / q ( i , j ) ;
44 end
45 end
46 end
47 endfunction

Semnificaţiile parametrilor formali şi a rezultatului sunt:

• xd este o matrice de numere. În fiecare element al matricei xd se cal-


culează valoarea polinomului de interpolare Lagrange.

• x = (x i )1≤i ≤n , şirul nodurilor de interpolare;

• y = (x i )1≤i ≤n , şirul valorilor interpolate;

• f este o matrice de aceleaşi dimensiuni ca xd şi are ca elemente valorile


44 CAPITOLUL 4. REZOLVAREA PROBLEMELOR DE INTERPOLARE

polinomului de interpolare Lagrange calculate în elementele corespunză-


toare ale matricei xd .

Programul de mai sus, pentru calculul valorii polinomului de interpolare La-


grange, foloseşte formula baricentrică.

Exemplul 4.1 Să se calculeze L(P n ; x 0 , . . . , x n ; f )(z) pentru

f (x) = x 2
xi = i , i ∈ {0, 1, . . . , 5}
z = 0.5, 3, 5, 10

Rezolvarea este:

deff(’y=fct(x)’,’y=x.^2’)
exec(’. . .\lagrange.sci’,-1)
x=0:5;
y=fct(x);
z=[0.5,3.5,10];
f=lagrange(z,x,y)
! 0.25 12.25 100 !

Facilităţile de programare cu polinoame din Scilab şi formula de recurenţă


permite calculul simbolic al polinomului de interpolare Lagrange:

1 function lag =polyLagrange ( x , y , s )


2 z=poly ( 0 , s ) ;
3 [ k , n]= s i z e ( x ) ;
4 [ k ,m]= s i z e ( y ) ;
5 i f m~=n then
6 lag ="Data error "
7 return
8 end
9 v=zeros ( 1 ,n ) ;
10 w=zeros ( 1 ,n ) ;
11 for i =1:n do
12 v ( i )= y ( i ) ;
13 end
14 for k =1:n−1 do
15 for i =1:n−k do
16 w( i ) = ( ( z−x ( i ) ) * v ( i +1)−(z−x ( i +k ) ) * v ( i ) ) / ( x ( i +k)−x ( i ) ) ;
17 end
18 for i =1:n−k do
19 v ( i )=w( i ) ;
20 end
21 end
22 lag =v ( 1 ) ;
23 endfunction
4.2. INTERPOLARE CU FUNCŢII SPLINE CUBICE 45

Pentru exemplul anterior calculul este

deff(’y=fct(x)’,’y=x.^2’)
exec(’. . .\polyLagrange.sci’,-1)
x=0:5;
y=fct(x);
polyLagrange(x,y,’x’)
x2

4.2 Interpolare cu funcţii spline cubice


Dacă F = S 3 , mulţimea funcţiilor spline cubice atunci pentru rezolvarea prob-
lemei de interpolare utilizăm funcţiile Scilab

1. d=splin(x,y);
sau
d=splin(x,y,[,spline_type[,der]])1

2. [f0 [,f1 [,f2 [,f3]]]]=interp(xd,x,y,d).

Semnificaţia parametrilor este

• x = (x i )1≤i ≤n , şirul nodurilor de interpolare;

• y = (x i )1≤i ≤n , şirul valorilor interpolate;

• spline_type este un string care precizează condiţiile la limită utilizate şi


poate fi:

– not_a_knot - alegerea implicită: Dacă x 1 < x 2 < . . . < x n−1 < x n atunci
condiţiile la limită sunt

s (3) (x 2 − 0) = s (3) (x 2 + 0)
s (3) (x n−1 − 0) = s (3) (x n−1 + 0)

– clamped:

s 0 (x 1 ) = d er 1
s 0 (x n ) = d er 2
1
Parantezele pătrate nu fac parte din sintaxă. Ele arată caracterul opţional al elementelor
cuprinse între ele.
46 CAPITOLUL 4. REZOLVAREA PROBLEMELOR DE INTERPOLARE

– natural:

s 00 (x 1 ) = 0
s 00 (x n ) = 0

– periodic: Dacă y 1 = y n , condiţiile la limită sunt

s 0 (x 1 ) = s 0 (x n )
s 00 (x 1 ) = s 00 (x n )

• d parametri funcţiei spline cubice de interpolare;

• xd este o matrice de numere. În fiecare element al matricei xd se cal-


culează valoarea funcţiei spline cubice de interpolare. Aceste elemente tre-
buie să fie cuprinse în intervalul determinat de nodurile din x.

• f 0, f 1, f 2, f 3 sunt matrice de aceleaşi dimensiuni ca xd şi au ca elemente


valorile funcţiei spline cubice de interpolare şi respectiv a derivatelor de
ordinul 1, 2 şi 3, calculate în elementele corespunzătoare ale matricei xd .

Exemplul 4.2 Să se calculeze valorile funcţiei spline cubice de interpolare şi ale
derivatelor sale de ordin 1, 2, 3 pentru datele de interpolare

f (x) = x 3
xi = i , i ∈ {0, 1, . . . , 5}
z = 0.5, 3, 5, 10

Rezolvarea constă din

deff(’y=f(x)’,’y=x^3’)
x=0:5;
y=f(x);
z=[0.5,3.5,10];
d=splin(x,y);
[s,s1,s2,s3]=interp(z,x,y,d)
s3=
! 6. !
! 6. !
! 0. !
s2=
4.2. INTERPOLARE CU FUNCŢII SPLINE CUBICE 47

! 3. !
! 21. !
! 0. !
s1=
! 0.75 !
! 36.75 !
! 0. !
s=
! .125 42.875 0 !
Capitolul 5

Derivare numerică

Cap. 4 Cap. 6

5.1 Derivarea funcţiilor de o variabilă reală


Pentru calculul derivatelor de ordinul 1,2,4 ale unei funcţii într-un punct şi
ale gradientului sau hessianului unei funcţii de mai multe variabile Scilab oferă
funcţia :

g = numderivative( f , x)
g = numderivative( f , x, h)
g = numderivative( f , x, h, or d er )
[J , H ] = numderivative(. . .)

unde

• f funcţia ale cărei derivate se cer calculate;

• x punctul în care se vor calcula derivatele;

48
5.2. CAZUL FUNCŢIILOR DE MAI MULTE VARIABILE 49

• h pasul în formula de integrare numerică (opţional, h este matrice de ordin


d i m(x) × 1);

• or d er ∈ {1, 2, 4} ordinul derivatelor care se vor calcula (opţional, valoarea


implicită este 2).

Exemplul 5.1 Să se calculeze f 0 (1) şi f 00 (1) pentru f (x) = x 3 .

Rezolvarea este:

deff(’y=f(x)’,’y=x^3’)
numderivative(f,1)
ans =
3.0000001
[d1,d2]=numderivative(f,1)
d2 =
6
d1 =
3

5.2 Cazul funcţiilor de mai multe variabile


x2 y
µ ¶
Exemplul 5.2 Să se calculeze jacobianul şi hessianul functiei f (x, y) =
x3 + y
în (1, 2).

Jacobianul şi hessianul funcţiei f sunt

2x y x 2
µ ¶
0
f (x, y) =
3x 2 1
µ ¶
00 2y 2x 2x 0
f (x, y) =
6x 0 0 0
Astfel rezultatele exacte sunt
µ ¶
0 4 1
f (1, 2) =
3 1
µ ¶
00 4 2 2 0
f (1, 2) =
6 0 0 0
Rezolvarea Scilab este
50 CAPITOLUL 5. DERIVARE NUMERICĂ

deff(’q=fct(p)’,[’x=p(1)’,’y=p(2)’,’q(1)=x.^2.*y’,’q(2)=x.^3+y’])
p=[1;2]
[J,H]=numderivative(fct,p)
H =

4. 2. 2. 0.
6. 0. 0. 0.
J =

4. 1.
3. 1.
Capitolul 6

Construirea unei funcţii


de aproximare prin metoda
celor mai mici pătrate

Cap. 5 Cap. 7

Cazul liniar. Determinarea unui polinom de aproximare construit prin metoda


celor mai mici pătrate de grad m pentru datele (x i , y i )1≤i ≤n (m << n) se obţine
cu ajutorul funcţiei

coef =lq(m,x,y)

unde

• coe f – sunt coeficienţii polinomului de aproximare;

• m – gradul polinomului de aproximare;

• x, y – doi vectori linie cu absisele şi respectiv, cu ordonatele datelor proble-


mei de aproximare.

Textul sursă al funcţiei lq este

51
52 CAPITOLUL 6. METODA CELOR MAI MICI PĂTRATE

1 function coef=lq (m, x , y )


2 [mx, nx]= s i z e ( x ) ;
3 [my, ny]= s i z e ( y ) ;
4 i f ( ( nx~=ny ) | ( mx~ = 1 ) | (my~ =1 ) ) ,
5 disp ( " data dimension error " )
6 abort
7 end
8 u=zeros (m+1 ,nx ) ;
9 for i =1:m+1 ,
10 for j =1:nx ,
11 u( i , j )= x ( j ) ^ ( i −1);
12 end
13 end
14 coef =(u * u’ ) ^ ( − 1 ) * u * y ’ ;
15 endfunction

Exemplul 6.1 Să se calculeze polinoamele de aproximare de grad unu şi doi, con-
stituite prin metoda celor mai mici pătrate, pentru datele (x i , y i )0≤i ≤20 unde x i =
−2 + 0.2i , y i = f (x i ), f (x) = |x|. Să se reprezinte grafic funcţiile astfel obţinute.

x=-2:0.2:2;
y=abs(x);
exec(’e:\scilab\lq.sci’,-1)
c1=lq(1,x,y)
c1=
1.047619
1.110D-16
c2=lq(2,x,y)
c2=
0.3883622
1.110D-16
0.4494933
//
// Reprezentarea grafica
//
deff(’y=p1(x)’,[’y=c1(1)+c1(2)*x’])
deff(’y=p2(x)’,[’y=c2(1)+c2(2)*x+c2(3)*x.*x’])
y1=p1(x);
y2=p2(x);
xx=[x’,x’,x’];
yy=[y’,y1’,y2’];
plot2d(xx,yy,[1,2,3],’121’,’abs@p1@p2’)
53

Astfel, polinoamele de aproximare de gradul întâi şi doi sunt

p 1 (x) = 1.047619

şi respectiv
p 2 (x) = 0.3883622 + 0.4494933x 2

Graficele celor trei funcţii sunt date Fig. 6.1.

Figure 6.1: Aproximarea funcţiei x 2 prin polinom de grad 1 şi 2.

Cazul neliniar.
Pentru determinarea funcţiei de aproximare y = ϕ(t , x 1 , . . . , x n ) care minimizează
expresia
m
Φ(x 1 , . . . , x n ) = [ϕ(t i , x 1 , . . . , x n ) − y i ]2
X
(6.1)
i =1

prezentăm două abordări prezente în Scilab.


54 CAPITOLUL 6. METODA CELOR MAI MICI PĂTRATE

1. Metoda Gauss-Newton. Se utilizează funcţia Scilab leastsq:


[fopt [,xopt [,gopt ]]]=leqstsq(fct,x0)
[fopt [,xopt [,gopt ]]]=leqstsq(fct,dfct,x0)

unde

• x0 este aproximaţia iniţială a parametrilor;


• f c t defineşte termenii din suma (6.1);
• d f c t este jacobianul funcţiei f c t ;
• f opt valoarea funcţiei Φ calculată în xopt ;
• xopt valoarea optimă găsită a parametrilor x;
• g opt gradientul funcţiei Φ calculată în xopt .

Exemplul 6.2 Să se calculeze funcţia de aproximare de forma y = ae bt în


cazul datelor

t=0:5;
y=2*exp(-t);

În fişierul fct.sce se definesc funcţiile f c t (x, t , y) şi f 1(t , x). Funcţia f 1 fix-
ează expresia funcţiei de aproximare ϕ(t , x 1 , . . . , x n ) iar funcţia f c t calculează
tabloul erorilor corespunzătoare datelor problemei.
Necunoscutele a, b devin componentele vectorului x (a = x 1 , b = x 2 ).
Fişierul fct.sce este
1 function u= f c t ( x , t , y )
2 u= f1 ( x , t )−y ;
3 endfunction

5 function y= f1 ( x , t )
6 y=x ( 1 ) * exp ( x ( 2 ) * t ) ;
7 endfunction

Rezolvarea este

exec(’. . .\fct.sce’,-1)
x=[2.5,-0.5];
[fopt,xopt,gopt]=leastsq(list(fct,t’,y’),x)
gopt =
55

0. 0.
xopt =

2. - 1.
fopt =

0.
∂f 1 ∂f 1 ∂f 1 ∂f 1
Dacă, în plus, se furnizează gradientul funcţiei f 1: d f 1 = ( ,
∂a ∂b
) = ( ∂x1 , ∂x2 ) =
(e bt , at e bt ) în fişierul fct1.sce, codul acestuia va fi
1 function u= f c t 1 ( x , t , y )
2 u= f1 ( x , t )−y ;
3 endfunction

5 function y= f1 ( x , t )
6 y=x ( 1 ) * exp ( x ( 2 ) * t ) ;
7 endfunction

9 function u=df1 ( x , t , y )
10 s=exp ( x ( 2 ) * t ) ;
11 u=[ s , x ( 1 ) . * t . * s ] ;
12 endfunction

atunci apelarea va fi

[fopt,xopt,gopt]=leastsq(list(fct1,t’,y’),df1,x)

Deşi în formulele derivatelor parţiale variabila y nu apare, codul Scilab so-


licită includerea unui al treilea argument, y în cazul de faţă.

2. Metoda Levenberg-Marquardt este implementată de funcţia scilab lsqr-


solve:
[xopt [,v]]=lsqrsolve(x0,fct,m)
[xopt [,v]]=lsqrsolve(x0,fct,m,dcft )

unde

• x0 este aproximaţia iniţială a parametrilor;


• f c t defineşte termenii din suma (6.1);
• m reprezintă numărul termenilor din suma (6.1);
• d f c t este jacobianul funcţiei f c t ;
56 CAPITOLUL 6. METODA CELOR MAI MICI PĂTRATE

• xopt valoarea optimă găsită a parametrilor x;


• v valoarea fiecărui termen din suma (6.1) calculată în xopt .

Rezolvarea exemplului anterior cu metoda Levenberg-Marquardt constă


din definirea funcţiilor f1.sce, data.sce şi fctlm.sce în fişierul fctlm.sce:
1 function u=fctlm ( x ,m)
2 [ t , y ]= data (m) ;
3 u= f1 ( x , t )−y ;
4 endfunction

6 function y= f1 ( x , t )
7 y=x ( 1 ) * exp ( x ( 2 ) * t ) ;
8 endfunction

10 function [ t , y ]= data (m)


11 t =0:m−1;
12 y=2 * exp(− t ) ;
13 endfunction

Funcţia data furnizează datele problemei. f 1 fixează forma funcţiei de


aproximare, ale cărui coeficienţi se caută prin metoda celor mai mici pă-
trate. Funcţia f c t l m(x, m) returnează tabloul erorilor cu

• x aproximaţia iniţială a coeficienţilor;


• m numărul datelor problemei.

Rezolvarea constă din

x=[2.5,-0.5];
exec(’. . .\fctlm.sce’,-1)
[xopt,v]=lsqrsolve(x,fctlm,6)
v =

0
0
0
0
0
0
xopt =

2. - 1.
Capitolul 7

Integrare numerică

Cap. 6 ??

7.1 Integrarea numerică a funcţiilor


de o variabilă reală
Pentru calculul integralei
Z b
I= f (x)dx
a
unde f : [a, b] → R este o funcţie continuă, Scilab oferă mai multe programe:

• [x]=integrate(exp, var, a, b [, ea [,er ] ] )


unde:

– x valuarea calculată a integralei;


– exp este expresia funcţiei de integrat, dat ca un şir de caractere;
– var este variabila de integrare dat ca string;
– a extremitatea stângă a intervalului de integrare;
– b extremitatea dreaptă a intervalului de integrare;

57
58 CAPITOLUL 7. INTEGRARE NUMERICĂ

– ea, er reprezintă o eroare absolută şi o eroare relativă. Precizând aceşti


parametri, regula de oprire a programului este |x−I | ≤ max{ea, er ·|I |}.

Exemplul 7.1 Să se calculeze integralele:


Z 1
1. 16 ∗ x 15 dx
0
π
sin(x)
Z
2
2. dx
0 x

Rezolvările sunt:
1.

I=integrate(’16*x.^15’,’x’,0,1)
I=
1.

2.

I=integrate(’if x==0 then 1; else sin(x)/x; end’,’x’,0,%pi/2)


I=
1.3707622

• [x, er r ]= intg(a, b, f [,ea [, er ] ] )


unde

– x valuarea calculată a integralei;


– er r valoarea estimată a erorii absolute;
– a extremitatea stângă a intervalului de integrare;
– b extremitatea dreaptă a intervalului de integrare;
– f identificatorul funcţiei Scilab de integrat;
– ea, er reprezintă o eroare absolută şi o eroare relativă. Precizând aceşti
parametri, regula de oprire a programului este |x−I | ≤ max{ea, er ·|I |}.

Utilizând intg, integralele exemplului anterior se calculează astfel:


1.
7.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 59

deff(’y=f(x)’,’y=16*x.^15’)
[x,err]=intg(a,b,f)
err=
1.110 E-14
x=
1.

2.

deff(’y=g(x)’,’if x==0 then y=1; else y=sin(x)/x; end’)


[x,err]=intg(0,%pi/2,g)
err=
1.522 E-14
x=
1.3707622

Dacă f (x, p 1 , p 2 , . . .) este o funcţie Scilab având pe prima poziţie variabila de


integrare atunci

intg(a,b,list( f , p 1 , p 2 , . . .))

calculează integrala
Z b
f (x, p 1 , p 2 , . . .)dx
a

7.2 Calculul numeric al integralelor duble


Pentru domeniul D definit prin

D = {(x, y) : a ≤ x ≤ b, f i n f (x) ≤ y ≤ f sup(x)}

integrala ZZ
f c t (x, y)dxdy
D
este calculată de programul [i nt eg , er ]=integr( f c t , a, b, f i n f , f sup, t ol ).
Semnificaţia parametrilor formali este:

• f c t funcţia de integrat;

• a, b, f i n f , f sup datele domeniului de integrare;


60 CAPITOLUL 7. INTEGRARE NUMERICĂ

• t ol toleranţa utilizată în regula de oprire;

• i nt eg – valoarea calculată a integralei duble;

• er – indicatorul de răspuns:

– 0 – integrala s-a calculat cu succes;


– 1 – nu s-a îndeplinit condiţia de convergenţă în 10 iteraţii.

Textele sursă ale funcţiilor sunt


1.
1 function [ integ , er ]= i n t e g r ( f c t , a , b , f i n f , fsup , t o l )
2 n=3
3 u= i n i t (n)
4 old=integ2 (u)
5 nmi=10
6 cont=0
7 ni=0
8 while cont==0 do
9 ni=ni+1
10 v=tab (u)
11 new=integ2 ( v )
12 nrm=abs (new−old )
13 old=new
14 u=v
15 i f nrm< t o l then
16 cont=1
17 er =0;
18 el se
19 er=1
20 i f ni==nmi , cont =1;end
21 end
22 end
23 integ=new
24 endfunction

2. Calculul tabelului cu valorile funcţiei de integrat pentru valoarea iniţială a


parametrului de discretizare:
1 function u= i n i t (n)
2 hx=(b−a ) /n
3 u=zeros (n+1 ,n+1)
4 for j =1:n+1 ,
5 x=a +( j −1) * hx
6 fi=finf (x)
7 f s =fsup ( x )
8 hy=( fs − f i ) /n
9 for i =1:n+1 ,
10 y= f i +( i −1) * hy
11 u( i , j )= f c t ( x , y )
12 end
13 end
14 endfunction
7.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 61

3. Extinderea tabelului cu valorile funcţiei de integrat pentru un nouă valoare


a parametrului de discretizare:
1 function v=tab (u)
2 [m, n]= s i z e (u)
3 hx=(b−a ) / ( n−1)
4 for j =1:n ,
5 for i =1:m,
6 v ( 2 * i −1 ,2 * j −1)=u( i , j )
7 end
8 x=a +( j −1) * hx
9 fi=finf (x)
10 f s =fsup ( x )
11 hy=( fs − f i ) / (m−1)
12 for i =1:m−1,
13 y= f i +hy * ( i −0.5)
14 v ( 2 * i , 2 * j −1)= f c t ( x , y )
15 end
16 end
17 for j =1:m−1,
18 x=a +( j −0.5) * hx
19 fi=finf (x)
20 f s =fsup ( x )
21 hy=( fs − f i ) / (m−1)/2
22 for i =1:2 * n−1,
23 y= f i +hy * ( i −1)
24 v ( i , 2 * j )= f c t ( x , y )
25 end
26 end
27 endfunction

4. Calculul integralei duble pentru o valoare a parametrului de discretizare:


1 function z=integ2 (u)
2 [m, n]= s i z e (u)
3 hx=(b−a ) / ( n−1)
4 w=zeros ( 1 ,n)
5 c=ones ( 1 ,n)
6 i f n==3 ,
7 c (2)=4
8 el se
9 n0=(n−1)/2
10 for j =1:n0 ,
11 c ( 2 * j )=4
12 end
13 for j =1:n0−1,
14 c ( 2 * j +1)=2
15 end
16 end
17 for j =1:n ,
18 x=a +( j −1) * hx
19 fi=finf (x)
20 f s =fsup ( x )
21 hy=( fs − f i ) / (m−1)
22 w( j )= c * u ( : , j ) * hy/3
23 end
24 z=c *w’ * hx/3
25 endfunction
62 CAPITOLUL 7. INTEGRARE NUMERICĂ

5. Datele problemei:
1 function [ f c t , a , b , f i n f , fsup , t o l ]= datas ( )
2 a=. . . ;
3 b= . . . ;
4 d e f f ( ’ z= f c t ( x , y ) ’ , ’ z = . . . ’ ) ;
5 d e f f ( ’ y= f i n f ( x ) ’ , ’ y = . . . ’ ) ;
6 d e f f ( ’ y=fsup ( x ) ’ , ’ y = . . . ’ ) ;
7 tol =. . . ;
8 endfunction

6. Apelarea aplicaţiei:
1 function a p l i c a t i a ( cale )
2 exec ( cale+ ’ \ datas . s c i ’ , −1)
3 exec ( cale+ ’ \ i n t e g r . s c i ’ , −1)
4 [ f c t , a , b , f i n f , fsup , t o l ]= datas ( ) ;
5 [ integ , er ]= i n t e g r ( f c t , a , b , f i n f , fsup , t o l ) ;
6 p r i n t f ( ’ error_code = %d\n ’ , er )
7 p r i n t f ( ’ computed_integral = %f \n ’ , integ )
8 endfunction

Codurile funcţiilor init, tab, integr2, prodscal sunt editate în fişierul integr.sci,
după codul funcţiei integr.
Utilizatorul trebuie să precizeze datele problemei în funcţia Scilab datas.
RR
Exemplul 7.2 Să se calculeze D x ydxdy unde domeniul D este delimitat de curbele
p
y = x 2 şi y = x.

În acest caz se defineşte funcţia:

1 function [ f c t , a , b , f i n f , fsup , t o l ]= datas ( )


2 a =0;
3 b=1;
4 d e f f ( ’ z= f c t ( x , y ) ’ , ’ z=x . * y ’ ) ;
5 d e f f ( ’ y= f i n f ( x ) ’ , ’ y=x . * x ’ ) ;
6 d e f f ( ’ y=fsup ( x ) ’ , ’ y= s q r t ( x ) ’ ) ;
7 t o l =1e−6;
8 endfunction

Rezolvarea finală este

exec(’c:\lucru\scilab\aplicatia.sci’,-1)
aplicatia(’c:\lucru\scilab’)
Rezultatele sunt
erro_code = 0

computed_integral = .0833333
Part II

CULEGERE DE PROBLEME

63
Capitolul 8

Metode numerice în algebra liniară

I. Să se calculeze factorizarea LU a matricei:

 
10 6 −2 1
10 10 −5 0
 
1.
 
−2 2 −2 1
 
 
1 3 −2 3
 
5 3 −11
2.  4 −5 4 
3 −13 19
 
2 −1 3 4
4 −2 5 6
 
3.
 
6 −3 7 8
 
 
8 −4 9 10
 
1 1 0 0 0 0

 1 2 1 0 0 0 

0 1 3 1 0 0
 
4.
 
0 0 1 4 1 0
 
 
 
 0 0 0 1 5 1 
7
0 0 0 0 1 33

II. Să se calculeze descompunerea / factorizarea QR a matricei:

64
65

 
4 5 2
1.  3 0 3 
0 4 6
 
2 1 3
2.  1 3 1 
2 8 5
 
3 4 7 −2
5 4 9 3 
 
3.

1 −1 0 3 
 

1 −1 0 0

III. Să se rezolve sistemele algebrice de ecuaţii liniare:


x1 + x2 − x3 − x4 = 1



4x 1 − 4x 2 + 6x 3 − 2x 4 = −4

1.
x + 3x 2 − 2x 3 − 2x 4 = 3
 1


6x 1 − 6x 2 + 9x 3 − 3x 4 = −6

x1 − 2x 2 + 3x 3 + 4x 4 = 22



−4x 1 + x2 + 2x 3 + 3x 4 = 6

2.

 3x 1 + 4x 2 − x3 + 2x 4 = −4

2x 1 + 3x 2 + 4x 3 − x4 = 6

6x 4y + z + 2t 3

 + =

6x + 5y + 3z + 5t = 6

3.

 12x + 8y + z + 5t = 8

6x + 5y + 3z + 7t = 8

x + 2y + 3z 4t

 + = −4

x + y + 2z + 3t = −2

4.

 x + 3y + z + 2t = −3

x + 3y + 3z + 2t = −5

2x + y + z + t 1

 =

3x − 2y − 5z + 4t = −30

5.

 x + 3y + 2z − 3t = 17

x − y + z − t = 2
66 CAPITOLUL 8. METODE NUMERICE ÎN ALGEBRA LINIARĂ

x + y + z + t 4

 =

2x + 2z + t = 4

6.

 −2x + 2y − t = 4

3x + y − z = 0

2x 1 + 3x 2 + 2x 3 + x4 2

 =

x1 + x2 + 3x 3 + 2x 4 = 6

7.

 −3x 1 + 2x 2 − x3 − x4 = 0

x1 − x2 + x3 + 3x 4 = 6

x y + z + t 2

 + =

2y + 2z + t = 2

8.

 −2x + 2y − t = 2

3x + y − z = 2

x + y + 2z + 3t = 2



3x − y − 4z − 6t = 0

9.

 2x + 3y − 6z − 9t = −7

x − 2y + 8z − 12t = 3


 x + y z − 2t
+ + 7u = 10

 2x + 5z − 2u = 32


10. 3x + y − t = 1
2y − 5z + u = −39





 x − y + 3t = 7

2x + 3y − z + t = 5



x − y + 2z − 2t = −5

11.

 3x + y + 2z − 2t = −3

−3x − y − 2z + 2t = 3

x + 2y + 3z + 4t = 30



2x − 3y + 5z − 2t = 3

12.

 3x + 4y − 2z − t = 1

4x − y + 6z − 3t = 8

x + 2y + 3z − 2t = 6



2x − y − 2z − 3t = 8

13.

 3x + 2y − z + 2t = 4

2x − 3y + 2z + t = −8

2x − y + z − t = 1



2x − y − 3t = 2

14.

 3x − y + t = −3

2x + 2y − 2z + 5t = −6
67



 x + 2y + 3z + 4t + 5u = 13



 2x + y + 2z + 3t + 4u = 10
15. 2x + 2y + z + 2t + 3u = 11
2x 2y 2z t 2u = 6



 + + + +

 2x + 2y + 2z + 2t + u = 3


 x + 2y − 3z + 4t − u = −1



 2x − y + 3z − 4t + 2u = 8
16. 3x + y − z + 2t − u = 3
4x + 3y + 4z + 2t + 2u = −2





 x − y − z + 2t − 3u = −3

x + y + z + t 10

 =

x + y − z + 2t = −8

17.

 5x + 5y − z − 4t = −4

x + y + 3z + 4t = 28

IV. Să se rezolve sistemele algebrice de ecuaţii liniare incompatibile în sensul


celor mai mici pătrate:

 3x 1 − x 2 + x 3 = 3
1. x + 2x 2 − x 3 = −4
 1
2x 1 − 3x 2 + 2x 3 = 3

 x 1 − 3x 2 + x 3 + x 4 = 1
2. x − 3x 2 + x 3 − 2x 4 = −1
 1
x 1 − 3x 2 + x 3 + 5x 4 = 6

2x − 3y + z

 = −1

x + 2y − 3z = 0

3.

 x − 12y + 11z = −1

4x − 15y + 9z = 0

 5x + 3y − 11z = 13
4. 4x − 5y + 4z = 18
3x − 13y + 19z = 22

Capitolul 9

Sisteme şi ecuaţii algebrice

I. Să se rezolve ecuaţiile polinomiale:

1. x 6 − 2x 5 + x 3 − 6x + 6 = 0

2. 2x 6 − x 5 − 5x 4 + 2x 3 + 20x 2 − 9x − 9 = 0

3. x 5 − 56x 4 − 10x 3 + 560x 2 + x − 56 = 0

4. x 5 − x 4 − 2x 3 + 4x 2 − 4 = 0

5. x 5 − 4x 4 − 9x 3 + 18x 2 + 14x − 20 = 0

6. x 6 − 5x 5 + 5x 4 − 2x 3 + 13x 2 + 3x + 9 = 0

7. x 5 − 12x 4 + 50x 3 − 88x 2 + 96x − 128 = 0

8. x 6 − 6x 5 + 8x 4 + 3x 3 − 16x 2 + 18x − 8 = 0

9. x 5 − 3x 4 + 2x 3 − x 2 + 5x − 2 = 0

10. x 5 − 4x 3 − 8x 2 + 32 = 0

11. x n − nx + 1 = 0, n = 3, 4, 5

12. x n − (1 + x + . . . + x n−1 ) = 0, n = 3, 4, 5

13. x n+1 − (1 + x + . . . + x n−1 ) = 0, n = 2, 3, 4

14. x n+1 − x n − 1 = 0, n = 2, 3, 4

Observaţie. Justificaţi afirmaţiile:

68
69

1. Pentru orice n ∈ N, n > 2 ecuaţia x n − nx + 1 = 0 are două rădăcini pozitive,


a n ∈ (0, 1), b n ∈ (1, 2).

2. Pentru orice p ∈ N, ecuaţia x p+1 − x p − 1 = 0 are o singură rădăcină x p > 1


şi limp→∞ x p = 1.

3. Pentru orice n ∈ N∗ , p ∈ N, ecuaţia x n+p −(1+x +. . .+x n−1 ) = 0 are o singură


rădăcină x n,p > 1 şi limn→∞ x n,p = x p .

II. Să se rezolve ecuaţiile algebrice:

1. 2x − ln x − 4 = 0

2. ln 8x − 9x + 3 = 0

3. x − 2 cos x = 0

4. e −0.5x − x = 0

1
5. ln x = x

6. ln x = x 2 − 1

7. x 2 − 2 cos x = 0

8. x ln x − 14 = 0

9. x x + 2x − 6 = 0

10. e x + e −3x − 4 = 0

11. ln 7x − 8x + 1 = 0

12. x + e x = e

III. Să se rezolve sistemele algebrice de ecuaţii neliniare

2x 3 − y 2 − 1 = 0
½
1.
x y3 − y − 4 = 0
70 CAPITOLUL 9. SISTEME ŞI ECUAŢII ALGEBRICE

ex − y = 0
½
2.
x − e −y = 0
y
e −x = x 2 − y + 1
½
3.
(x + 0.5)2 + y 2 = 0.6
 2 2 2
 x +y +z =3
4. x y + xz − 3y z = 1
 2
x + y 2 − z2 = 1

x2 + y 2 − 1 = 0
½
5.
x3 − y = 0

2x 2 − x y − 5x + 1 = 0
½
6.
x + 3 ln x − y 2 = 0

2x 2 − x y − y 2 + 2x − 2y + 6 = 0
½
7.
y −x −1 = 0

x3 − y 2 − 1 = 0
½
8.
x y3 − y − 4 = 0
 2 2 2
 x −x −y −y +z =0
9. y − ex = 0
z − ln(y) = 0

x2 − x − y 2 = 1
½
10.
y − ex = 0

x + 3 ln x − y 2 = 0
½
11.
2x 2 − x y − 5x + 1 = 0
 2
 x + x − 2y z − 0.1 = 0
12. y − y 2 + 3xz + 0.2 = 0
z − z 2 + 2x y − 0.3 = 0

x3 − y + 1 = 0
½
13.
0.25x 2 + y 2 − 1 = 0

 x − cos(x − y − z) = 0
14. y − cos(y − x − z) = 0
z − cos(z − x − y) = 0

½
tan(x) − cos(1.5y) = 0
15.
2y 3 − x 2 − 4x − 3 = 0
71

3x 2 + 14y 2 − 1 = 0
½
16.
sin(3x + 0.1y) + x = 0

1 + x 2 − y 2 + e x cos y = 0
½
x 0 = −1
17.
2x y + e x sin y = 0 y0 = 4

sin x + cos y + e x y = 0
½
18.
arctan (x + y) − x y = 0
72
73

Capitolul 10

Probleme de interpolare

I. Să se calculeze L(P n , x 0 , x 1 , ..., x n ; f )(z) pentru


f (x) = x 3 − 5x 2 + x − 1
1. x i = 2i + 1, i ∈ {0, 1, 2, 3, 4, 5}
z =4

f (x) = x 4 − 10x 3 + 2x 2 + 3x + 1
2. x i = 1 + i , i ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
z = 4.5

f (x) = lg(x)
3. x i = e i , i ∈ {0, 1, 2, 3, 4, 5}
z = 1.7

f (x) = e x
4. x i = −3 + i , i ∈ {0, 1, 2, 3, 4, 5, 6}
z = 1.5

f (x) = sin (x)


5. x i = − π2 + i 10
π
, i ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
π
z = 13

f (x) = cos (x)


π
6. x i = i 10 , i ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
π
z= 7
p
f (x) = x
7. x i = i 2 , i ∈ {0, 1, 2, 3, 4, 5}
z =5
74 CAPITOLUL 10. PROBLEME DE INTERPOLARE

2
f (x) = x x+1
8 x i = 1 + 5i , i ∈ {0, 1, 2, 3, 4, 5}
z = 1.3, z = 1.5, z = 1.7
II. Să se deducă expresia polinomului de interpolare pentru datele problemei
I.
III. Să se calculeze valoarea funcţiei spline cubice de interpolare pentru datele
problemei I.
Capitolul 11

Derivare numerică

I. Să se calculeze derivate funcţiilor în punctul indicat:

1. f (x) = 2x − ln x − 4 x0 = 1
2. f (x) = ln 8x − 9x + 3 x0 = 1
3. f (x) = x − 2 cos x x0 = 1
4. f (x) = e −0.5x − x x0 = 1
5. f (x) = ln x − x1 x0 = 1
6. f (x) = ln x − x 2 + 1 x0 = 1
7. f (x) = x 2 − 2 cos x x0 = 1
8. f (x) = x x + 2x − 6 x0 = 2
9. f (x) = e x + e −3x − 4 x0 = 1

II. Să se calculeze jacobianul şi hessianul funcţiilor în punctul indicat:

75
76 CAPITOLUL 11. DERIVARE NUMERICĂ

2x 3 − y 2 − 1
µ ¶
1. f (x, y) = (x, y) = (1, 2)
x y3 − y − 4

x2 − y
µ ¶
2. f (x, y) = (x, y) = (1, 2)
x(y + 1)

tan(x y) − x 2
µ ¶
3. f (x, y) = (x, y) = (1, 2)
0.5x 2 + 2y 2 − 1
y
e −x − x 2 − y − 1
µ ¶
4. f (x, y) = (x, y) = (2, 2)
(x + 0.5)2 + y 2 − 0.6

x 3 + y 3 − 6x + 3
µ ¶
5. f (x, y) = (x, y) = (1, 2)
x 3 − y 3 − 6y + 2

x2 + y 2 − 1
µ ¶
6. f (x, y) = (x, y) = (1, 2)
x3 − y

2x 2 − x y − 5x + 1
µ ¶
7. f (x, y) = (x, y) = (1, 2)
x + 3 ln x − y 2

2x 2 − x y − y 2 + 2x − 2y + 6
µ ¶
8. f (x, y) = (x, y) = (1, 2)
y −x −1
Capitolul 12

Calculul unui element de aproximare


prin metoda celor mai mici pătrate

I. Să se calculeze polinoamele de aproximare de grad unu, doi si trei constru-


ite prin metoda celor mai mici pătrate pentru datele Problemei 1 din capitolul
Interpolare.
II. Să se calculeze funcţiile de aproximare construite prin metoda celor mai
mici pătrate pentru metoda Gauss-Newton de forma şi datele indicate (t = 0 : 9):

1. ϕ(t ) = a ln(bt + c) y = 2 ln(3t + 1)

2. ϕ(t ) = a exp(bt 2 + c) y = 2 exp(−t 2 )

3. ϕ(t ) = a sin(bt ) exp(−c t ) y = 2 sin(t ) exp(−2t )

4. ϕ(t ) = a + bt + c exp(d t ) y = 1 − 2t + 2 exp(−t )


III. Să se calculeze funcţiile de aproximare construite prin metoda celor mai
mici pătrate pentru metoda Levenberg-Marquardt pentru cazurile exerciţiului II.

77
Capitolul 13

Integrare numerică

I. Să se calculeze integralele:

R1 Rπ
1. x 2 e x dx 2. x 2 cos xdx
0 0

R5 p R2
3. x 2 − 9dx 4. x 2 ln xdx
4 1

π π
R4 2
R2 sin 2x
5. x tan xdx 6. 1+sin2 x
dx
0 0

R2 p R1 2
7. 4x − x 2 dx 8 arcsin xx 2 +1
−1
dx
0 0

π
Rπ 2
R2 1+sin 2x+cos 2x
9. cos x cos 4xdx 10. sin x+cos x
dx
0 π
6

R1 p R1
p 2x dx
2
11. x3 1 + e x dx 12.
−1 0 3+4x 2

p π
R3 R4 tan x
13. arctan x1 dx 14. p dx
p 1+ 2 cos x
3 0
3

II. Să se calculeze integralele duble:

78
79

(x 2 + y)dxdy D : (delimitat de) y = x 2 ; y 2 = x.


RR
1.
D

x2
D : y = x1 ; y = x; x = 1; x = 2.
RR
2. y2
dxdy
D

x
D : y = x; y = (x − 1)2 .
RR
3. x 2 +y 2
dxdy
D

RR p
4. 4x 2 − y 2 dxdy D : y = x; y = 0; x = 1.
D

p 1 p dxdy D : x = 1, y = 0, x − y = 12 .
RR
5. x+ y
D

2x
RR
6. p dxdy D : y = x, x = 0, y = 1.
D 1+y 4 −x 4

(x 2 y 1 − x 2 − y 2 dxdy D : x ≥ 0, y ≥ 0, x 2 + y 2 = 1.
RR p
7.
D

RR p
8. x y − y 2 dxdy D este triunghiul cu vârfurile
D
O(0, 0), A(10, 1), B (1, 1).
Bibliografie

[1] BLAGA P., COMAN GH., POP S., TRÂMBIŢAŞ R., VASARU D., 1994, Anal-
iză numerică. Îndrumar de laborator. Univ. "Babeş–Bolyai" Cluj-Napoca
(litografiat).

[2] CIRA O., MĂRUŞTER Ş., 2008, Metode numerice pentru ecuaţii neliniare.
Ed. Matrix-Rom, Bucureşti.

[3] CURTEANU S., 2001, Calculul numeric şi simbolic în Mathcad. Ed. Matrix-
Rom, Bucureşti.

[4] DINU M., LINCĂ Gh., 1999, Algoritmi şi teme speciale de analiză numerică.
Ed. Matrix rom, Bucureşti.

[5] GAVRILĂ C., 2007, SCILAB Aplicaţii, Modele şi simulare Scicos Ed. Matrix-
Rom, Bucureşti.

[6] KINCAID D., CHENEY W., 1991, Numerical Analysis. Brooks / Cole, Pacific
Grove, Ca.

[7] MARINESCU GH., BADEA L., GRIGORE G., JAMBOR C., MAZILU P., RIZ-
ZOLI I., ŞTEFAN C., 1978, Probleme de analiză numerică. E.D.P., Bucureşti.

[8] MARINESCU GH., RIZZOLI I., POPESCU I., ŞTEFAN C., 1987, Probleme de
analiză numerică rezolvate cu calculatorul. Ed. Acad. R.S.R., Bucureşti.

[9] MARTIN O., 1998, Probleme de analiză numerică. Ed. Matrix rom, Bu-
cureşti.

[10] PLIS A. I., SLIVINA N.A., 1983, Laboratornyi praktikum po bysxei


matematike. Vysxa Xkola, Moskva.

[11] SCHEIBER E., LIXĂNDROIU D., CISMAŞIU C., 1982, Analiză numerică. În-
drumar de laborator. Univ. Braşov (litografiat).

80
BIBLIOGRAFIE 81

[12] SCHEIBER E., SÂNGEORZAN L., GROVU M., 1993, Analiză numerică. În-
drumar de laborator. Univ. "Transilvania" Braşov (litografiat).

[13] SCHEIBER E., 2010, Java în calculul ştiinţific. Ed. Univ. Transilvania
Braşov.

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