Question

Je voudrais résoudre le système d'équations linéaires:

 Ax = b

A est une matrice de n x m (non carré), b et x sont tous deux des vecteurs de n x 1. Où A et B sont connues, n est de l'ordre de 50 à 100 et m est égal à 2 (en d'autres termes, A pourrait être au maximum de [100X2]).

Je sais que la solution de x: $x = \inv(A^T A) A^T b$

J'ai trouvé quelques façons de le résoudre: uBLAS (Boost), Lapack, Eigen, etc, mais je ne sais pas comment sont rapides le temps de calcul du processeur de « x » en utilisant ces paquets. Je ne sais pas non si cela numériquement un rapide pourquoi résoudre « x »

Quel est mon important est que le temps de calcul du processeur serait plus court possible et une bonne documentation depuis que je suis débutant.

Après avoir résolu l'équation normale Ax = b je voudrais améliorer mon approximation en utilisant régressive et peut-être plus tard application du filtre de Kalman.

Ma question est que la bibliothèque C est le plus rapide et robuster pour les besoins que je décris ci-dessus?

Était-ce utile?

La solution

Ceci est une solution moins carrés, parce que vous avez plus d'inconnues que d'équations. Si m est en effet égal à 2, qui me dit que d'une simple linéaire des moindres carrés sera suffisant pour vous. Les formules peuvent être écrites sous forme fermée. Vous n'avez pas besoin d'une bibliothèque.

Si m est en un seul chiffre, je dirais encore dire que vous pouvez facilement résoudre ce en utilisant A (Transpose) * A * X = A (Transpose) * b. Une simple décomposition de LU à résoudre pour les coefficients seraient suffisants. Il devrait être un problème beaucoup plus simple que vous faites dehors pour être.

Autres conseils

uBLAS ne sont pas optimisés à moins que vous l'utilisez avec des liaisons BLAS optimisées.

Ce qui suit est optimisée pour les multi-threading et SIMD:

  1. bibliothèque Intel MKL. FORTRAN avec l'interface C. Pas libre mais très bon.
  2. Eigen. bibliothèque ++ C est vrai. libre et open source. Facile à utiliser et bon.
  3. Atlas. FORTRAN et C. libre et open source. Pas Windows amical, mais sinon bon.

BTW, je ne sais pas exactement ce que vous faites, mais en règle générale les équations normales ne sont pas une bonne façon de faire une régression linéaire. À moins que votre matrice est bien conditionnée, devrait être préféré QR ou SVD.

Si liscencing est pas un problème, vous pouvez essayer la bibliothèque scientifique gnu

http://www.gnu.org/software/gsl/

Il est livré avec une bibliothèque de blas que vous pouvez échanger pour une bibliothèque optimisée si vous avez besoin plus tard (par exemple le processeur Intel, ATLAS, ou d'une bibliothèque ACML (puce AMD).

Si vous avez accès à Matlab, je vous recommande d'utiliser ses bibliothèques C.

Si vous avez vraiment besoin de se spécialiser, vous pouvez rapprocher l'inversion de la matrice (à la précision arbitraire) en utilisant la méthode Skilling. Il utilise l'ordre des opérations (N ^ 2) seulement (au lieu de l'ordre N ^ 3 de l'inversion de la matrice d'habitude - LU décomposition etc).

Son décrit dans la thèse de Gibbs liée ici (vers la page 27):

http: //www.inference.phy. cam.ac.uk/mng10/GP/thesis.ps.gz

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top