Имею базовые знания языка программирования C. Я знаю структуру цикла, массив и управляющие операторы. Внезапно мне нужно знать, как диагонализировать эрмитову матрицу, используя библиотеку GSL на языке C. Установка GSL не проблема. Но я хотел бы знать, как использовать его для этой конкретной цели. Я читаю руководство GSL в эти дни, но краткий и точный ответ был бы очень признателен?
Как использовать библиотеку GSL в C для диагонализации эрмитовой матрицы?
Ответы (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)