Showing posts with label algoritmi. Show all posts
Showing posts with label algoritmi. Show all posts

Wednesday, December 27, 2017

Inversa matricei nesingulare

Inversarea matricei nesingulare este subprogramul cel mai căutat căci nenumărate aplicații folosesc inversa matricei, de la ecuația de regresie până la rezolvarea de sisteme liniare.
Am tot căutat subprograme pentru inversarea unei matrice și dintre toate am găsit unul interesant în cartea PROBLEME DE ANALIZĂ NUMERICĂ REZOLVATE CU CALCULATORUL avându-i ca autori pe acad. Gheorghe MARINESCU, Irona RIZZOLI, Ileana POPESCU și Cristina ȘTEFAN, carte publicată îmn Editura Academiei RSR, în anul 1987 și care la paginile 171-173 prezintă metoda iterativă HOTELLING-BODEWING de inversare a unei matrice. Se construiește șirul lui NEWTON de torma X(n+1) = X(n) +(I-X(n)*A)*X(n), unde A, I, X, sunt matrice pătrate cu m linii și m coloane, iar cifrele cuprinse între paranteze acolo la indici arată numărul iterației. X(n+1) înseamnă matricea X la iterația n+1, iar X(n) înseamnă matricea X la iterația n. I este matricea unitate, A este matricea ce trebuie inversată. Subprogramul are ca prim pas evaluarea expresiei X1=X0 +(I+X0*A)*X0. În final matricea X1 va conține matricea inversă, iar X0 este matricea de start care se obține prin convenție dintr-o evaluare de forma: X0 = 1./(maxaij) * I. Variabila maxaij este de fapt elementul maxim dintre elementele matricei A. În subprogramul INVMAT, X0 se va referi la matricea de la iterația precedentă și X1 se va referi la matyricea de la iterația următoare.
Se observă că aici trebuie să fie apelate alte subprograme precum:
- subprogram de copiere matrice;
- subprogram de adunare matrice;
- subprogram de scădere matrice;
- subprogram de calcul normă matrice;
- subprogram de înmulțire matrice.
Față de programul dat în cartea pe care am citat-o am făcut o serie de modificări, căci m-am gândit ca utilizatorul să fie scutit în a da el acolo valoarea de start X0, eroarea, criteriu de stopare a procesului iterativ și matricea unitate.
         SUBROUTINE START(A,N,X0)
         MAXAIJ=A(1,1)
         DO  10 I=1,N
         DO  10 J=1,N
         IF(MAXAIJ.GT.A(I,J)) GO TO 10
         MAXAIJ=A(I,J)
10     CONTINUE
         DO  20 I=1,N
         DO  20 J=1,N
20     X0(I,J)=0.
         ALFA=1./MAXAIJ
         DO  30 I=1,N
30     X0(I,I)=ALFA
         RETURN
         END
Această subrutină construiește matricea de start X0 ca fiind matricea unitate înmulțită cu inversul elementului maxim din matricea A.
Pentru scăderea a două matrice pătrate având n linii și n coloane se foolosește subprogramul:
         SUBROUTINE ADMAT(A,B,C,N)
         MAXAIJ=A(1,1)
         DO  10 I=1,N
         DO  10 J=1,N
         C(I,J)=A(I,J)+B(I,J) 
10     CONTINUE
         RETURN
         END
Pentru scăderea a două matrice pătrate având n linii și n coloane se foolosește subprogramul:
         SUBROUTINE ADMAT(A,B,C,N)
         MAXAIJ=A(1,1)
         DO  10 I=1,N
         DO  10 J=1,N
         C(I,J)=A(I,J)-B(I,J) 
10     CONTINUE
         RETURN
         END
Pentru copierea matricei A în matricea C, ambele având n linii și n coloane se foolosește subprogramul:
         SUBROUTINE SCMAT(A,C,N)
         MAXAIJ=A(1,1)
         DO  10 I=1,N
         DO  10 J=1,N
         C(I,J)=A(I,J)
10     CONTINUE
         RETURN
         END
Generarea unei matrice unitate de ordin n se face cu subprogramul:
         SUBROUTINE UNIMT(N,UNIT)
         DO  20 I=1,N
         DO  10 J=1,N
         UNIT(I,J)=0.
10     CONTINUE
         UNIT(I,I)=1.
20     CONTINUE
         RETURN
         END
Norma ANOR a matricei A este calculată cu subprogramul:
         SUBROUTINE NMMAT(A,N,ANOR)
         ANOR=ABS(A1,1))
         DO  20 I=1,N
         DO  10 J=1,N
         IF(ANOR.GT.ABS(A(I,J)) GO TO 10
         ANOR=ABS(A(I,J))
10     CONTINUE
         RETURN
         END
Pentru înmulțirea a două matrice A și B pătrate având n linii și n coloane, rezultatul fiind matricea C tot cu n linii și n coloane se foolosește subprogramul:
         SUBROUTINE PRMAT(A,C,N)
         MAXAIJ=A(1,1)
         DO  20 I=1,N
         DO  20 J=1,N
         CIJ=0.
         DO  10 K=1,N
         CIJ=CIJ+A(I,K)*B(K,J)
10     CONTINUE
         C(I,J)=CIJ
20     CONTINUE
         RETURN
         END
Subprogramul pentru calculul matricei inverse AINV a matricei A cu n linii și n coloane este:
         SUBROUTINE INVMAT(A,AINV,N,IK)
         ITER=0
         Q=.01
         EPS=.0001
         CALL START(A,N,X0)
10     CALL UNIMT(N,U)
         CALL PRMAT(A,X0,X1,N)
         CALL SCMAT(UNIT,X1,DIF,N)
         ITER=ITER+1
         CALL PRMAT(DIF,X0,X1,N)
         CALL ADMAT(X0,X1,X1,N)
         CALL NMMAT(X0,N,ANOR)
         IF(Q**ITER*ANOR/(1.-Q).LE.EPS) GO TO 20
         CALL CPMAT(X1,X0,N)        
         GO TO 10
20     CONTINUE
         CALL CPMAT(X1,AINV,N)
         RETURN
         END
Față de varianta inițială, aici sunt date valorile care dau finețea rezultatului, fără a da flexibilitate utilizatorului să obțină el precizia dorită, din dorința de a nu avea mulți paramertrii în listă.

(27 decembrie 2017)

Sunday, October 29, 2017

Cătălina COCIANU

Despre profesoara Cătălina COCIANU am a spune extrem de multe lucruri pentru că eu o cunosc de când s-a născut, fiind coleg de grupă în studenție cu mămica ei. Fără a o lăuda nicio clipă Cătălina COCIANU săa dovedit a fi un copil de excepție, o elevă de excepție, o studentă de excepție și de când a devenit membră a departamentului de Informatică Economică, un cadru didactic de excepție. Toate se demonstrează nu prin vorbe, ci prin rezultate.
A finalizat în mod strălucit studiile.
A susținut cu succes două teze de doctorat în 2001 cu teza Procesarea imaginilor prin metode statistice şi de analiză complexă și 2008 cu teza Analiza frecvenţă-timp a semnalelor cu aplicaţii.
A urcat toate treptele academice de la asistent universitar în 1999, lector universitar în 2002, conferențiar în 2005 și profesor universitar în anul 2007. A făcut ucenicie adevărată în cercetarea științifică din zona informaticii între anii 1993 -1999.
A publicat cărți fie ca singur autor, fie în colaborare după cum urmează:
Cătălina-Lucia Cocianu, Cristian Uscatu - Programare evolutivă și algoritmi genetici,
Editura ASE, București, 2015, 216 pg
Cristian Uscatu, Cătălina-Lucia Cocianu, Marinela Mircea, Lorena Bătăgan -  Algoritmi
si tehnici de programare. Aplicații, Editura ASE, București, 2015, 178 pg
Cătălina-Lucia Cocianu, Cristian Uscatu - Capitole speciale de calcul numeric cu
aplicaţii, Editura ASE, ucurești, 2013, 254 pagini
Bogdan Ghilic-Micu, Marian Stoica, Catalina Cocianu, Cristian Uscatu, Marinela Mircea, Lorena Batagan - Bazele programarii calculatoarelor. Suport de curs, Editura ASE, București, 2013, 200 pg.
Cătălina-Lucia Cocianu, Luminiţa State - Tehnici de clasificare cu aplicaţii în analiza datelor document, Editura ASE, ucurești, 2008, 201 pg
Ion Gh. Roşca, Bogdan Ghilic-Micu, Cătălina-Lucia Cocianu, Marian Stoica, Cristian Uscatu, Marinela Mircea, Lorena Bătăgan, Cătălin Silvestru, “Bazele programării calculatoarelor. Teorie şi aplicaţii în C”, Editura ASE, București, 2006, 251 pg
Zenovic Gherasim, Cătălina-Lucia Cocianu - Sisteme expert în economie, Editura Fundatiei Romania de Maine, București, 2005, 156 pg
Ion Gh. Roşca, Bogdan Ghilic-Micu, Constantin Apostol, Valer Roşca, Cătălina-Lucia Cocianu - Programarea calculatoarelor. Tehnica programării în limbajul Pascal, Editura ASE, București, 235 pg.
Profesoara Cătălina COCIANU a publicat numeroase articole în reviste ISI și a avut comunicări deosebit de bine primite de specialiști la conferințe internaționale de specialitate. 
Din anul 2009 conduce doctorate în specializarea Informatică Economică în cadrul ASE.



(29 octombrie 2017)

Wednesday, October 4, 2017

Metode numerice

             Metodele numerice numerice sau analiza numerică reprezintă pentru informatician exact ceea ce reprezintă marele secret al celui care face lulele. Fără a ști acel secret, toate lulele se crapă după ce sunt introduse în cuptorul de ardere.
La disciplina numită Metode numerice sau Analiză numerică se lămuresc lucruri privind:
- diferențele la stânga și la dreapta;
- derivarea și integrarea numerică;
- calculul aproximativ;
- precizia și numărul de iterații;
- resolvarea aproximativă a sistemelor de ecuații liniare;
- aflarea punctului ne minim al unei funcții;
- soluționarea aproximativă a ecuațiilor neliniare;
- soluționarea aproximativă a sistemelor neliniare;
- soluționarea aproximativă a ecuațiilor diferentiale;
- inversarea unei matrice prin metode aproximative;
- calcului unor funcții  dezvoltate în serii Fourier;
- lucru cu matrice rare de foarte mari dimensiuni;
- analiza complexității calculelor și prelucrărilor.
Din punctul meu de   vedere este regretabil că metodele numerice cu care au scris istorie în utilizarea calculatoarelor au căzut în desuetitudine și sunt înlocuite pe colo și pe cole cu chestii de u modernism strident, care sunt sigur că ne vor aduce aminte de versurile Mariei Manuș:
Tu te vei stinge rock and roll,
Dar valsul nu, dar valsul, nu.
Metodele numerice sunt totul pentru programatorii care doresc să fie altfel decât toți ceilalți programatori, care ar forma o masă amorfă, de tipi care fac lucruri obișnuite, ca să nu le zic banale. Un joc inteligent este acela în care legile fizicii nu sunt ignorate, ceea ce face să se rezolve în timp real o ecuație integro-diferențială sofisticată, unde numai știind metode numerice se rezolvă dacă în vreo bibliotecă nu este gata rezolvată.
Mă întrebam uneori cum se face că marii matematicien de la noi s-au apropiat de metodele numerice și chiar la Cluj a existat marele Tiberiu POPOVICIU care a lucrat pe acest domeniu, iar acum contemporanii noști întorc spatele exact acelui domeniu feritl care ar mai da o șansă dezvoltării de software de mare complexitate exact acolo unde lucrurile par a fi simple și clare, dar nu sunt.
Cărți de metode numerice sunt:
Gh. MARINESCU, Irina RIZZOLI, Ileana POPESCU, Cristina STEFAN- Probleme de analiza numerica rezolvate cu calculatorul,Editura Academiei RSR, Bucuresti, 1987, 264pg.
Marin TOMA, Ion ODAGESCU - Metode numerice si subrutine, Editura tehnica, Bucuresti, 1980, 215 pagini
Aristide HALANAY - Matematici, Calcul Numeric și Programare, Litografia Universității
București, 1979
Afrodita IORGULESCU - Metode numerice si programe PASCAL, Editura INFOREC, București, 1996, 333pg.
   







(04 octombrie 2017)