¿Cómo debo escribir mi propia biblioteca de álgebra lineal de C ++?

Este podría ser un proyecto a largo plazo y, por lo tanto, requeriría planificación y diseño. Lo primero es que necesita enumerar las características que necesita. Al igual que todas las operaciones que apoyarías. Hasta qué precisión. ¿Cuál sería el espacio vectorial máximo que permitiría? Hay muchas más preguntas que debo enumerar y luego explorar.

En cuanto a la Estructura de datos (DS), en su mayoría necesitará matrices. Pero a veces su matriz puede ser escasa y luego debe buscar un DS escaso. La mayor parte de la operación de álgebra lineal se ocupa de la operación matricial y, por lo tanto, debe implementarlos todos.

Debes hacer el diseño correctamente. Puede escribir su propia administración de memoria o solicitar ayuda de la biblioteca de administración de memoria de google.

Se debe hacer hincapié en el diseño. Hay muchas más facetas y es difícil responderlo aquí.

Supongo que desea hacer esto solo por el ejercicio, porque las bibliotecas existentes tienen un rendimiento y flexibilidad que no podrá tocar si trabaja en él durante 10 años …

Cuando diseñe su biblioteca, debe tener alguna aplicación en mente. ¿Quieres lidiar con matrices densas? Eso dicta muchas cosas internas; por ejemplo, realmente no desea almacenar su matriz como una lista de triples (i, j, v). Pero si desea hacer algo con matrices dispersas, dicho almacenamiento no es a priori lo peor.

¿Desea realizar análisis de datos con su biblioteca matricial, de modo que necesite admitir matrices extremadamente escasas con estructura dinámica? Más decisiones de diseño ……

Entonces, comenzaría desde arriba: qué operaciones quieres apoyar, y luego pensar qué implica eso para los niveles inferiores.

Oh, ¿quieres apoyar el paralelismo? Más decisiones …

¿Alguna vez leíste el libro Sísifo de Camus? ¿Por que lo harias? Netlib [1] es un repositorio de bibliotecas matemáticas LAPACK. No lo tocarás. Tienen personas dedicadas que son mucho más hábiles. Hay miles de investigadores calificados que están haciendo cosas nuevas y crean cosas nuevas. Cuando finalmente actualice una clase, habrá cambiado.

Notas al pie

[1] El Netlib