2010-12-01 13 views
8

Actualmente estoy trabajando en una biblioteca basada en C++ para problemas de álgebra lineal grandes y dispersos (sí, sé que existen muchas de estas bibliotecas, pero estoy haciendo mi propia mayoría para aprender sobre solucionadores iterativos, contenedores de almacenamiento dispersos, etc.).Buscando matrices de prueba/sistemas para el solucionador lineal iterativo

Estoy al punto en que estoy usando mis solucionadores dentro de otros proyectos de programación míos, y me gustaría probar los solucionadores contra problemas que no son míos. Principalmente, estoy buscando probar contra sistemas dispersos simétricos que son definitivamente positivos. He encontrado varias fuentes para tales matrices del sistema, tales como:

Matrix Market UF Sparse Matrix Collection

Dicho esto, todavía no han encontrado ninguna fuentes de buenas matrices de prueba que incluyen toda la matriz del sistema System- y RHS. Sería genial tener esto para verificar los resultados. ¿Algún consejo sobre dónde puedo encontrar esos sistemas completos o, alternativamente, qué podría hacer para generar un RHS "bueno" para las matrices de sistema que puedo ponerme en línea? Actualmente estoy completando una matriz con valores aleatorios, o todos, pero sospecho que esta no es necesariamente la mejor manera.

+0

"existen muchas de estas bibliotecas": en realidad no (al menos de forma nativa por escrito para C++). Escribir las envolturas limpias para las bibliotecas de Fortran que tratan con grandes matrices dispersas ya es una especie de desafío para ser honesto. –

+0

Sin embargo, recuerdo haber visto en algunos documentos de investigación alguna referencia a casos de prueba mal acondicionados, pero IIRC no eran para matrices dispersas SPD. Una forma simple de fabricar casos de prueba en su situación es tomar una matriz aleatoria n x p M, multiplicarla por su propia transposición y agregar alguna identidad lambda * para que sea invertible. Pero esto no producirá matrices dispersas. –

+0

Además, ¿qué pasa con la colección de matriz dispersa de UF? Tomar algunas RHS al azar me parece perfectamente bien. –

Respuesta

0

No lo he usado todavía, estoy a punto, pero GiNAC parece ser lo mejor que he encontrado para C++. Es la biblioteca utilizada detrás de Maple para CAS, no conozco el rendimiento que tiene.

http://www.ginac.de/

0

haría bien para especificar qué tipo de problemas está resolviendo problemas ... diferentes requerirán diferentes RHS a ser de alguna utilidad para comprobar la validez ..... lo que voy a sugerir es obtener un código de ejemplo de algunos proyectos como DUNE Numerics (estoy trabajando en esto ahora), FENICS, deal.ii que ya están usando los solucionadores para resolver matrices ... en general, tendrán alguna funcionalidad para generar algún tipo de matriz de archivo (DUNE Numerics tiene funcionalidad para generar matrices y RHS en archivos compatibles con matlab).

Este luego se puede alimentar a sus solucionadores .. y luego otra vez utilizar su funcionalidad para crear bibliotecas de datos de salida (como DUNE Numerics utiliza un formato VTK) ... Eso fue, obtendrá para analizar los datos usando potentes herramientas .....

es posible que tenga que aprender un poco sobre cómo compilar y usar esas bibliotecas ... pero no es mucho ... y creo que la funcionalidad que obtendrá valdrá la pena el tiempo invertido ......

supongo que incluso un solo problema bien definido y razonablemente complejo debería ser lo suficientemente bueno para probar sus bibliotecas ... bueno en realidad dos uno para Ax = problemas B y otro para Ax = CBX (problemas de valores propios) ....

1

que sugeriría el uso de un vector del lado de la mano derecha obtenido a partir de un 'meta' predefinido solución x:

b = A*x 

Luego tiene una solución de objetivo, x, y una solución resultante, x, del solucionador. Esto significa que puede comparar el error (diferencia del objetivo y las soluciones resultantes) así como los residuos (A * x - b).

Tenga en cuenta que para una evaluación cuidadosa de un solucionador iterativo también deberá considerar qué usar para la x inicial.

Las colecciones en línea de matrices contener principalmente la matriz del lado de la mano izquierda, pero algunos no incluir la mano derecha-lados y también algunos tienen vectores solución demasiado .:

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

Por cierto, para la recogida de matrices dispersas UF me gustaría sugerir este enlace en su lugar:

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

Cuestiones relacionadas