Как использовать библиотеку GSL в C для диагонализации эрмитовой матрицы?

Имею базовые знания языка программирования C. Я знаю структуру цикла, массив и управляющие операторы. Внезапно мне нужно знать, как диагонализировать эрмитову матрицу, используя библиотеку GSL на языке C. Установка GSL не проблема. Но я хотел бы знать, как использовать его для этой конкретной цели. Я читаю руководство GSL в эти дни, но краткий и точный ответ был бы очень признателен?


c gsl
person amitoz    schedule 04.11.2014    source источник
comment
В какой операционной системе и с каким компилятором? Вы читали документацию, в ней есть Использование библиотеки GSL!   -  person Basile Starynkevitch    schedule 04.11.2014


Ответы (1)


Начните с просмотра раздела 15.2 Сложные Эрмитовы матрицы.

Чтобы вычислить собственные значения, вы сначала захотите посмотреть здесь:

gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const size_t n)

Эта функция выделяет рабочую область для вычисления собственных значений комплексных эрмитовых матриц размера n на n. Размер рабочей области O(3n).

Затем посмотрите на:

int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector * eval, gsl_eigen_herm_workspace * w)

Эта функция вычисляет собственные значения комплексной эрмитовой матрицы A. В w должно быть предусмотрено дополнительное рабочее пространство соответствующего размера. Диагональная и нижняя треугольная части A уничтожаются при вычислении, но строгая верхняя треугольная часть не упоминается. Мнимые части диагонали считаются равными нулю и не упоминаются. Собственные значения хранятся в векторе eval и неупорядочены.

Собственные значения и собственные векторы можно найти с помощью:

gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const size_t n)

int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_hermv_workspace * w)
person AGS    schedule 15.11.2014