From: <nik...@al...> - 2001-09-30 13:04:04
|
j'ai pas mal avanc=E9 la lib de maths d'orion3d, voici les nouvelles classes= : - OR_MatrixNxP : matrice de taille quelconque=2E - OR_VectorND : vecteur de taille qcq=2E - OR_SparseMatrice : matrice creuse=2E =E0 chaque fois, il y a toutes les op=E9rations de base (mutliplication, addition, etc), sous forme d'op=E9rateurs, mais aussi de m=E9thodes classiques (pour faire des optimisations quand on peut se passer de l'utilisation des variables locales cr=E9es par les op=E9rateur= s)=2E j'ai aussi impl=E9ment=E9 des methodes de gradient conjugu=E9 pour r=E9soudr= e l'=E9quation A*x=3Db : static OR_Bool SolveBiConjugateGradient( const OR_VectorND& b, OR_VectorND& x, T_MatrixTimeVectorFunc atimes, T_MatrixTimeVectorFunc atransptimes, OR_I32 nNbrIterMax=3D-1, OR_Float rPrecision =3D OR_EPSILON ); static OR_Bool SolveConjugateGradient ( const OR_VectorND& b, OR_VectorND& x, T_MatrixTimeVectorFunc atimes, OR_I32 nNbrIterMax=3D-1, OR_Float rPrecision =3D OR_EPSILON ); la 1ere est utilis=E9e pour les matrices qcq, la 2e pour les matrices sym=E9triques d=E9finies positives (utile pour la r=E9solution des contraintes)=2E le GROS avantages, c'est quelles n'utilisent pas directement la matrice A : elles appellent deux fonctions de callback pour calculer A*v et transpose(A)*v=2E =E7a permet : - de les rendre g=E9n=E9rique - mais surtout d'=EAtre bien bien optimis=E9 pour les matrices creuses, o=F9= la multiplication se fait en tps constant=2E bien s=FBr, elles ne sont =E0 utiliser que les matrices creuses, sinon, il v= aut mieux utiliser les m=E9thodes classiques (LU et choleski)=2E gabriel |