Выполнение матричных операций с комплексными числами в C - PullRequest
3 голосов
/ 07 октября 2011

Я пытаюсь выполнить вычисления с использованием матричных операций и сложной математики - иногда вместе, в C. Я очень хорошо знаком с Matlab и знаю, что эти типы вычислений могут выполняться просто и эффективно.Например, две матрицы одинакового размера, A и B, каждая из которых имеет элементы комплексных значений, можно легко суммировать с помощью выражения A + B.Существуют ли какие-либо пакеты или методы, которые можно рекомендовать для программирования этих типов выражений в C или Objective C?Я знаю о complex.h, который позволяет выполнять операции над комплексными числами, но я не знаю, как выполнять операции со сложными матрицами, и это то, что мне действительно нужно.Точно так же я знаю о пакетах, которые допускают операции с матрицами, но не думаю, что они будут полезны при работе со сложными матрицами.

Ответы [ 2 ]

8 голосов
/ 07 октября 2011

Вы хотите использовать BLAS для базовых операций линейной алгебры, таких как суммирование или умножение двух матриц, и LAPACK для более ресурсоемких алгоритмов, таких как матрицы факторинга.

У подпрограмм BLAS есть забавные имена, похожие на алфавитный супЭто из-за старых ограничений Фортрана на длину имени функции.Первая буква имени указывает тип данных, на котором работает подпрограмма BLAS.Поскольку вас интересуют комплексные числа, вы хотите посмотреть на подпрограммы, начинающиеся с c (для комплексной одинарной точности) или z (для двойной комплексной двойной точности).Например, подпрограмма BLAS для умножения сложных матриц A и B равна CGEMM или ZGEMM (здесь GEMM обозначает умножение матриц общей матрицы).

Похоже, что в Задаче C,BLAS доступен через Accelerate framework.Соглашение о присвоении имен заключается в добавлении cblas_ к исходному имени BLAS.Например, вот документация для cblas_zgemm.

Обычно поставщики предоставляют оптимизированные версии BLAS для своей платформы.Эти подпрограммы часто могут быть значительно быстрее, чем наивные реализации этих матричных операций.Часто пиковая производительность машины с плавающей точкой может быть достигнута или почти достигнута с помощью этих процедур.Фактически, тест LINPACK (LINPACK был предшественником LAPACK) использует эти процедуры для тестирования и ранжирования суперкомпьютеров.

4 голосов
/ 07 октября 2011

Вы ищете BLAS или LAPACK. Это библиотеки линейной алгебры, которые вы можете загрузить и установить.

...