title: Matrix Template Library
text: # Matrix Template Library
  
  La Matrix Template Library (MTL) es una biblioteca de álgebra lineal para programas en C++.
  
  La MTL usa programación con plantillas, lo cual reduce considerablemente la extensión del código. Todas las matrices están disponibles para los tipos float, double, complex<float> y complex<double>. La MTL soporta diversas implementaciones de matrices densas y dispersas. MTL2 fue desarrollada por Jeremy Siek y Andrew Lumsdaine.
  
  La más reciente versión se denomina MTL4 y ha sido desarrollada por Andrew Lumsdaine y. MTL4 contiene la mayor parte de las funcionalidades de MTL2, e incluye nuevas técnicas de optimización tales como el "meta-tuning" (es posible especificar los detalles del "loop unrolling" para matrices y vectores de dimensión dinámica arbitraria en la llamada de la función). Las aplicaciones genéricas pueden ser introducidas en notación natural, v.g. v += A*q - w;, de forma que la biblioteca selecciona por sí misma el algoritmo apropiado: multiplicación matriz-vector, producto de matrices, producto escalar de vectores, etc. El objetivo es ofrecer una interfaz científica intuitiva, mientras que los detalles técnicos quedan encapsulados dentro de la biblioteca.
  
  Se puede clarificar la idea anterior del encapsulamiento usando el siguiente esquema gráfico de MTL4:
  
  Como se puede apreciar en la parte izquierda del esquema, usando la biblioteca MTL4, ese código se hace transparente al programador, ya que podrá usar una sintaxis más natural, como lo que se ve en la parte derecha.
  
  ## MTL4
  
  En la Matrix Template Library 4 s trató de conseguir una notación matemática natural (ver esquema superior) sin sacrificar desempeño, pudiendos escribir una expresión como por ejemplo x = y * z y la biblioteca llevará a cabo automáticamente la operación. Algunas operaciones, como el uso del producto matriz está realizado mediante el uso de otras bibliotecas por ejemplo Blas. En paralelo, todas las operaciones que se describen se realizaron también en C++, para que de esta forma la biblioteca MTL4 puede ser utilizado sin BLAS y no limitando su uso. Para abreviar las aplicaciones, en general se combina con el máximo rendimiento disponible.
  
  Se desarrollaron nuevas técnicas que hacen posible:
  
  ## Portabilidad
  
  MTL 4 fue escrita usando ANSI C++ y puede se compilada usando cualquier plataforma con un complidor de ANSI C++. Como por ejemplo:
  
  Para mayor información se pueden visitar los enlaces externos que están a continuación
  
  