Si su matriz tiene una dimensión de decenas de miles o menos, use un método directo, aunque no hay muchos métodos directos disponibles libremente para sistemas simétricos indefinidos (en realidad, ninguno de los que conozco son de código abierto). Hay MA57 de HSL, pero solo es gratis para uso académico. Ciertamente puede ignorar la simetría y usar UMFPACK .
Alrededor de las decenas de cientos de dimensiones, el uso de memoria de un método directo comienza a exceder lo que una computadora de escritorio típica puede manejar razonablemente, por lo que a menos que tenga una máquina de memoria compartida robusta, deberá pasar a métodos iterativos. Para problemas indefinidos, puede especializarse BiCG (gradiente de biconjugado) para sistemas simétricos, aunque es posible un desglose. Existe un MINRES-QLP recientemente lanzado para sistemas simétricos que proporciona más estabilidad numérica.
Los dos métodos requieren implementaciones bastante diferentes, ya que para los métodos directos realmente necesita formar la matriz, mientras que en el enfoque iterativo, generalmente no formará la matriz explícitamente.
Existen varias razones por las cuales un enfoque puede ser más rápido que el otro, especialmente en función de la dimensión de la matriz. Para sistemas muy mal condicionados, los métodos iterativos pueden estancarse bastante mal. Para las matrices no tan escasas, los métodos directos terminan creando mucho relleno, lo que ralentiza mucho las cosas. Además, los métodos directos en Matlab están altamente optimizados (usa UMFPACK o MA57 internamente), mientras que los métodos iterativos generalmente se codifican directamente en Matlab, y hay menos oportunidades para explotar BLAS de nivel 3 ya que los cuellos de botella son la aplicación de matvecs y productos de punto.