2010-12-01 58 views
8

Je travaille actuellement sur une bibliothèque basée sur C++ pour de grands problèmes d'algèbre linéaire clairsemée (oui, je sais que beaucoup de ces bibliothèques existent, mais je roule la plupart du temps pour apprendre sur les solveurs itératifs, les conteneurs de stockage clairsemés, etc.). Je suis au point où j'utilise mes solveurs dans d'autres projets de programmation, et je voudrais tester les solveurs contre des problèmes qui ne sont pas les miens. Principalement, je cherche à tester contre les systèmes clairsemés symétriques qui sont définis positifs. J'ai trouvé plusieurs sources pour ces matrices de système, telles que:Recherche de matrices/systèmes de test pour le solveur linéaire itératif

Matrix Market UF Sparse Matrix Collection

Cela étant dit, je n'ai pas encore trouvé de sources de bonnes matrices de test qui incluent l'ensemble de la matrice du système Système- et RHS. Ce serait génial d'avoir pour vérifier les résultats. Des conseils sur l'endroit où je peux trouver de tels systèmes complets, ou bien, ce que je pourrais faire pour générer un "bon" RHS pour les matrices système que je peux obtenir en ligne? Je suis en train de remplir une matrice avec des valeurs aléatoires, ou toutes, mais je soupçonne que ce n'est pas nécessairement la meilleure façon.

+0

« beaucoup de ces bibliothèques existent »: pas vraiment (au moins en mode natif écrit C++). L'écriture d'enveloppes propres pour les bibliothèques fortran traitant de grandes matrices creuses est déjà une sorte de défi pour être honnête. –

+0

Cependant, je me souviens avoir vu dans certains documents de recherche une référence à des cas de test mal conditionnés, mais IIRC ils n'étaient pas pour les matrices creuses SPD. Une façon simple de fabriquer des cas de test dans votre situation est de prendre une matrice n x p aléatoire, de la multiplier par sa propre transposition, et d'ajouter une certaine identité lambda * pour qu'elle soit inversible. Mais cela ne produira pas de matrices éparses. –

+0

En outre, quel est le problème avec la collection de matrice UF clairsemée? Prendre quelques RHS aléatoires me semble parfaitement OK. –

Répondre

0

Je ne l'ai pas encore utilisé, je suis sur le point de le faire, mais GiNAC semble être la meilleure chose que j'ai trouvée pour C++. C'est la bibliothèque utilisée derrière Maple pour CAS, je ne connais pas la performance qu'il a pour.

http://www.ginac.de/

0

il ferait bien de préciser quel type de problèmes vous à résoudre ... différents problèmes, il faudra différents RHS être d'aucune utilité pour vérifier la validité ..... ce que je vais suggérer est d'obtenir un exemple de code de certains projets comme DUNE Numerics (je travaille sur ce moment), FENICS, deal.ii qui utilisent déjà les solveurs pour résoudre les matrices ... généralement, ils auront quelques fonctionnalités pour sortir votre matrice en quelque sorte de fichier (DUNE Numerics a la fonctionnalité de sortie des matrices et RHS dans un fichier compatible matlab).

Vous pouvez nourrir vos solveurs .. puis utiliser à nouveau leur la fonctionnalité bibliothèques pour créer des données de sortie (comme DUNE Numerics utilise un format VTK) ... C'était, vous aurez à analyser les données en utilisant des outils puissants .....

vous devrez peut-être apprendre un peu plus sur la compilation et l'utilisation de ces bibliothèques ... mais ce n'est pas beaucoup ... et je crois que la fonctionnalité que vous obtiendrez vaudrait le temps investi ......

Je suppose que même un seul problème bien défini et raisonnablement complexe devrait être assez bon pour tester vos bibliothèques .... bien en fait deux un pour Ax = problèmes B et un autre pour Ax = CBX (problèmes de valeurs propres) ....

1

Je suggère d'utiliser un vecteur-droite obtenue à partir d'une solution « objectif » prédéfini x:

b = A*x 

Ensuite, vous avez une solution d'objectif, x, et une solution résultante, x, à partir du solveur. Cela signifie que vous pouvez comparer l'erreur (différence du but et des solutions résultantes) ainsi que les résidus (A * x - b).

Notez que pour une évaluation minutieuse d'un solveur itératif, vous devez également prendre en compte les éléments à utiliser pour le x initial.

Les collections en ligne de matrices contiennent principalement la matrice côté gauche, mais certains ne comprennent à droite-côtés et aussi certains ont des vecteurs de solution trop .:

http://www.cise.ufl.edu/research/sparse/matrices/rhs.txt

Par ailleurs, pour la collecte de la matrice clairsemée UF Je suggère ce lien à la place:

http://www.cise.ufl.edu/research/sparse/matrices/