2012-02-29 4 views
7

Я пытаюсь диагонализировать матрицы с четной точностью и брать их логарифмы. Есть ли язык, на котором я могу выполнить это, используя встроенные функции?Четырехчетные прецизионные собственные значения, собственные векторы и матричные логарифмы

Обратите внимание, языки/пакеты в тегах являются недостаточными, страдают от следующих недостатков:

Matlab: Не поддерживает четырехъядерные точность.

Python/NumPy/SciPy: Матрицы с dtype float128 дают собственные векторы в float64.

Sage: Интерфейс через GP/PARI дает загадочные сообщения об ошибках.

Кто-нибудь выполнил диагонализацию и матричные логарифмы с точностью до четности, и если да, то как?

+2

Попробуйте следующее: [http://code.google.com/p/mpmath/] (http://code.google.com/p/mpmath/) –

+2

Я забыл упомянуть ранее, mpmath не поддерживает несколько -регулярная диагонализация и матричные функции. Тем не менее, это делает почти все остальное. –

+0

@BenCriger - для чего это стоит, я думаю, что основная проблема в случае numpy состоит в том, что большинство реализаций BLAS не поддерживают 128-битную точность float. –

ответ

8

@Matlab: Не поддерживает четырехмерную точность.

Multiprecision Computing Toolbox for MATLAB предлагает процедуры для вычислений линейной алгебры с произвольной точностью.

Он охватывает многие другие области - базовую математику, численные методы (интеграция, ode, оптимизацию), специальные функции и анализ основных данных.

Кроме того, он позволяет запускать существующие программы Matlab произвольной точностью с минимальными (или без каких-либо) модификациями исходного кода.

Update (27 марта 2013): Теперь набор инструментов также включает в себя режим точности быстрый четырехместный, что почти в 100 раз быстрее по сравнению с альтернативами. См. Fast Quadruple Precision Computations in MATLAB для сравнения и деталей.


Критика предложенных альтернативы:

Символический Math Toolbox (MATLAB) из Mathworks ориентирована на символьные вычисления. Как таковой, ему не хватает многих существенных функций, необходимых для произвольной точности численных вычислений.

Например, сравнивать цифры vpa() не представляется возможным, так как они имеют «символический» тип (по дизайну). Это ограничение ограничивает 99% алгоритмов численного анализа.

Другие основные функции линейной алгебры, отсутствующие в Symbolic Math Toolbox: norm, cond, max, min, sort, lu, qr, chol, schur.

Бесплатно Многоточечный набор инструментов (MATLAB).

Кроме того, что он чрезвычайно медленный (он выполняет преобразование чисел в строках в каждой арифметической операции: +, -, ...) и не имеет существенной функциональности (eig, det, cond, \, ...), он дает неправильные результаты в своих функциях.

Э.Г. неправильные результаты, полученные функцией svd, сделали мое исследование бессмысленным в какой-то момент, и ошибка была болезненной для поиска.

mpmath (Python)

основном ориентирован на специальные функции вычисления (гипергеометрическое семейство, в частности). И не поддерживает более или менее продвинутых числовых алгоритмов. Имеет очень небольшую поддержку матриц. Хотя, похоже, есть логарифм матрицы, который вы ищете в последней версии.


На самом деле все эти недостатки подтолкнула меня разработать собственные расширения для MATLAB, чтобы включить его с помощью произвольной точности вычислений (именуемых в начале - Multiprecision Computing Toolbox for MATLAB). Мне просто нужно это для моей работы.

Он находится в активной разработке (но уже исправил все перечисленные проблемы с другими альтернативами). - Буду признателен за любые отзывы.

2

Что касается диагонализации, возможно, this может вам помочь (он также нуждался в более точном собственном значении, чем в том, что удваивает, где его дает, и в конечном итоге использует четвёрную точность).

Он использует fortran. Переход на квадрациклы включал определение целого числа 16 вместо 8 и перекомпиляцию LAPACK с gfortran с использованием «-fdefault-real-8» для продвижения удвоений в квадрациклы. ¿Возможно, вы можете построить LAPACK таким образом, а затем использовать его из NumPy? Я не знаю.

Конечно, поскольку эта точность действительно моделируется, программа получает 10 раз медленнее.

Извините за то, что я не был более конкретным: я не пробовал ничего подобного, но я вспомнил сообщение в блоге, и вам может быть достаточно для вас, по крайней мере, для начала.

1

Был бы Symbolic Math Toolbox или свободно доступен Multiple Precision Toolbox, как для MATLAB, так и для ваших нужд? Множественный набор инструментов точности не имеет эквивалента eig, но он имеет svd.