Собственные значения четвертой точности, собственные векторы и матричные логарифмы - PullRequest
7 голосов
/ 29 февраля 2012

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

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

Matlab: НеТочность поддержки Quad.

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

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

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

Ответы [ 3 ]

8 голосов
/ 07 марта 2012

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

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

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

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

Обновление (27 марта 2013 г.) : теперь набор инструментов также включает режим быстрой четверной точности , что почти в 100 раз быстрее по сравнению с альтернативами. См. Быстрые четырехкратные прецизионные вычисления в MATLAB для сравнений и деталей.


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

Symbolic 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 для MATLAB ). Мне просто нужно это для моей работы.

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

3 голосов
/ 01 марта 2012

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

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

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

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

1 голос
/ 01 марта 2012

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

...