Extras din proiect
Fie sistemul de ecuatii:
(1)
unde functiile fk:A Rn, A deschis, fk C1(A), iar Jacobianul
( ) x=(x1, x2, ..., xn) A (2)
Soluţia y=(y1, y2, ..., yn) A a sistemului (1) se determina cu ajutorul sirului aproximatiilor succesive, astfel:
Se alege (arbitrar) prima aproximaţie a soluţiei y:
x(0)=(x(0)1, x(0)2, ..., x(0)n) A (3)
[x(2)] = [x(1)]-[Jf x(1)]-1•[f(x(1))] A
…
[x(m)] = [x(m-1)]-[Jf x(m-1)]-1•[f(x(m-1))] A
unde, (5)
(6)
(7)
unde k = 0,1,2,...,m,...
Aproximaţia y=x(m) se consideră satisfacătoare când
, (8)
unde >0, dar suficient de mic, reprezintă precizia soluţiei, prescrisă iniţial.
Programul SISTEM_NELINIAR utilizează două subprograme: funcţia FUNCTIE şi procedura INVERSARE.
Programul principal îndeplineşte următoarele funcţiuni:
• asigura introducerea interactiva a valorilor variabilelor de intrare (dimensiunea spatiului) Rn, nN*, precizia impusă eps, numărul de iteraţii limită nmax, creşterea necesară evaluării numerice a derivatelor parţiale h, elementele primei aproximaţii (3), x1[i], 1 i n;
• realizează prelucrările corespunzătoare evaluării aproximaţiilor succesive (4) ale soluţiei sistemului (1), respectiv:
- calculează vectorul [f(x(k))], conform nr. (6);
- calculează matricea [Jf(x(k))], conform nr. (7); evaluând numeric derivatele corespunzătoare;
- calculează, cu ajutorul procedurii INVERSARE, matricea inversă [Jf(x(k))]-1;
- evaluează distanţa (8) dintre două aproximaţii succesive;
- repetă toate prelucrările anterioare, până când se atinge precizia dorită, sau se atinge numărul de iteraţii limită, nmax;
• afişează ultima aproximaţie a soluţiei, distanţa dintre ultimele două aproximaţii succesive şi numărul de iteraţii efectuat.
Funcţia FUNCTIE calculează valorile funcţiilor fi, 1 i n, în punctul curent x=(x1,x2,...,xn). Parametrii n şi nfunc precizează dimensiunea spaţiului Rn şi, respectiv, poziţia i a funcţiei fi în vectorul [f(x)]. Subprogramul FUNCTIE utilizează, în afară de funcţiile standard din limbajul PASCAL, o serie de funcţii definite în interiorul sau, care pot fi necesare ca explicitarea funcţiilor fi, 1 i n, respectiv:
• funcţia PUTERE(e,v), care evaluează funcţia ve, variabila fiind v;
• funcţia EXPA(e,v), care evaluează funcţia ev, variabila fiind v;
• funcţiile hiperbolice sh(v) şi ch(v), care evaluează funcţiile shv şi chv;
• funcţiile asin(v) şi acos(v), care evaluează funcţiile arcsin v şi, respectiv, arccos v.
Procedura INVERSARE realizează calculul matricei jacobiene inverse [Jf(x(k))]-1, în punctul x(k)=(xk1, ...,xkn), utilizând procedura SISTEM, care rezolva un sistem liniar de n ecuaţii cu n necunoscute, prin metoda eliminării Gauss, cu pivotare completă.
Programul sursa
PROGRAM SISTEM_NELINIAR;
{REZOLVA UN SISTEM NELINIAR N x N PRIN METODA APROXIMATIILOR SUCCESIVE. A LUI NEWTON}
CONST Dim = 10;
TYPE
vector = array[1..Dim] OF real;
matrice = array[1..Dim,1..Dim] OF real;
VAR
x,x1,x2,f: vector;
a,b: matrice;
n,nmax,i,j,k: integer;
eps,h,suma,dist: real;
FUNCTION FUNCTIE(n,nfunc: integer; x: vector): real;
{calculeaza valoarea functiei fi in punctul x}
CONST alfa = 1E-20;
FUNCTION PUTERE(e,v:real):real;
{functia 'v la puterea e', argument v}
VAR t: real;
BEGIN
t := e*ln(v); PUTERE := exp(t)
END;{PUTERE}
FUNCTION EXPA(e,v: real): real;
{functia 'e la puterea v', argument v}
VAR t: real;
BEGIN
t := v*ln(e); EXPA := exp(t)
END;{EXPA}
FUNCTION SH(v: real):real;
{functia sh(v)}
VAR
i: integer;
p,sum: real;
BEGIN
sum := v; p := v; i := 2;
REPEAT
p := p*sqr(v)/(i*(i+1));
sum := sum + p; i := i + 2
UNTIL p < alfa;
SH := sum
END;{SH}
FUNCTION CH(v: real):real;
{functia ch(v)}
VAR
i: integer;
p,sum: real;
BEGIN
Preview document
Conținut arhivă zip
- Modelare Economica si Calcul Neuronal.doc