2012-02-29 16 views
7

Estoy intentando diagonalizar matrices en precisión cuádruple y tomar sus logaritmos. ¿Hay algún idioma en el que pueda lograr esto usando las funciones incorporadas?Valores propios de precisión cuádruple, vectores propios y logaritmos de matriz

Nota, los idiomas/paquetes en las etiquetas son insuficientes, que sufren de las siguientes deficiencias:

Matlab: No es compatible con la precisión cuádruple.

Python/NumPy/SciPy: matrices con dtype float128 rendimiento autovectores en float64.

Sage: La interfaz a través de GP/PARI produce mensajes de error crípticos.

¿Alguien ha realizado diagonales y logaritmos de matrices con cuádruple precisión, y si es así, cómo?

+2

Pruebe esto: [http://code.google.com/p/mpmath/] (http://code.google.com/p/mpmath/) –

+2

Olvidé mencionarlo antes, mpmath no es compatible con múltiples -diagonalización de precisión y funciones de matriz. Aunque hace casi todo lo demás. –

+0

@BenCriger - Por lo que vale, creo que el problema subyacente en el caso de numpy es que la mayoría de las implementaciones BLAS no admiten la precisión de flotación de 128 bits. –

Respuesta

8

@Matlab: No es compatible con la precisión cuádruple.

Multiprecision Computing Toolbox for MATLAB proporciona rutinas para cálculos de álgebra lineal con precisión arbitraria.

Cubre muchos otros campos: matemática básica, métodos numéricos (integración, oda, optimización), funciones especiales y análisis de datos básicos.

Además, permite ejecutar los programas existentes de Matlab con precisión arbitraria con modificaciones mínimas (o sin ninguna) en el código fuente.

Actualización (27 de marzo de 2013): Ahora caja de herramientas también incluye el modo de precisión cuádruple rápida, que es cerca de 100 veces más rápido en comparación con otras alternativas. Ver Fast Quadruple Precision Computations in MATLAB para comparaciones y detalles.


críticos sobre las alternativas sugeridas:

Symbolic Math Toolbox (MATLAB) de Mathworks dirigidos a cálculos simbólicos. Como tal, carece de muchas características esenciales necesarias para la computación numérica de precisión arbitraria.

Por ejemplo, ni siquiera es posible comparar dos números vpa() ya que son de tipo "simbólico" (por diseño). Esta única limitación descarta el 99% de los algoritmos del análisis numérico.

Otras funciones básicas de álgebra lineal que faltan en Symbolic Math Toolbox son: norm, cond, max, min, sort, lu, qr, chol, schur.

Gratis Multiple Precision Toolbox (MATLAB).

Además de ser extremadamente lento (realiza la conversión número a cadena de operandos en cada operación aritmética: +, -, ...) y carece de la funcionalidad esencial (eig, det, cond, \, ...), da resultados incorrectos en las funciones que tiene.

E.g. los resultados incorrectos entregados por la función svd hicieron que mi investigación careciera de sentido en algún momento y el error fue doloroso de encontrar.

mpmath (Python)

Principalmente dirigido a las funciones de computación especial (familia hipergeométrica en particular). Y no tiene soporte para algoritmos numéricos más o menos avanzados. Tiene muy poco soporte para matrices. Aunque parece tener un logaritmo de matriz que está buscando en la última versión.


En realidad todos estos inconvenientes me empujó a desarrollar mi propia extensión para MATLAB para permitir que la computación con precisión arbitraria (en lo al principio - Multiprecision Computing Toolbox for MATLAB). Solo lo necesito para mi trabajo.

Está en desarrollo activo (pero ya corrige todos los problemas enumerados con otras alternativas) - Agradecería cualquier comentario.

2

En cuanto a la diagonalización, tal vez this puede ayudarle (también necesitaba valores propios más precisos que lo que le daba el doble y terminaba usando la precisión cuádruple).

Él está usando fortran. Cambiar a quads implicaba definir un entero que fuera 16 en lugar de 8 y recompilar LAPACK con gfortran usando "-fdefault-real-8" para promocionar dobles a cuádriceps. ¿Tal vez puedas construir LAPACK así y luego usarlo desde NumPy? No lo sé.

Por supuesto, dado que esta precisión es realmente simulada, el programa se volvió 10 veces más lento.

Disculpa por no ser más específico: no he intentado algo así, pero recordé la publicación del blog y puede ser suficiente para que al menos comiences.

Cuestiones relacionadas