Матричная экспонента косоэрмитовой матрицы с фортраном 95 и LAPACK


11

Я просто заправлен в Фортран 95 для моделирования квантовой механики. Честно говоря, я был избалован Октавой, поэтому я воспринял возведение в матрицу как должное. Учитывая (малую, ) косоэрмитову матрицу размера n × n , каков наиболее эффективный способ использования LAPACK для решения этой проблемы? Я не использую оболочку LAPACK95, просто прямые звонки в LAPACK.N36N×N


2
Вам нужна матричная экспонента сама по себе, или вам нужна матричная экспонента, умноженная на вектор?
Павел

@Paul: Извините, не видел этого раньше. Нет, мне нужна вся матрица.
кв. В

Почему кто-то отрицает этот вопрос? Если вы отрицаете, пожалуйста, оставьте причину в комментариях! Возможно, вопрос можно улучшить таким образом.
кв. В

Мы полагаемся на DGPADM , но, по словам Джека Полсона, может быть лучший путь.
Майк Данлавей

Ответы:


16

Матричные экспоненты косоэрмитовых матриц дешевы для вычисления:

Предположим, что - это ваша косоэрмитова матрица, тогда i A - эрмитова, и через zheevd и друзей вы можете получить разложениеAяA

яAзнак равноUΛUЧАС,

где - унитарная матрица собственных векторов, а Λ - вещественная и диагональная. Тогда, тривиально,UΛ

Aзнак равноU(-яΛ)UЧАС,

Если у вас есть и Λ , легко вычислитьUΛ

ехр(A)знак равноехр(U(-яΛ)UЧАС)знак равноUехр(-яΛ)UЧАС

сначала возводя в степень собственные значения, устанавливая помощью zcopy , выполняя B : = B exp ( - i Λ ) , запуская zscal для каждого столбца с возведенным в степень собственным значением, и, наконец, устанавливая свой результат равнымВзнак равноUВзнак равноВехр(-яΛ)

ехр(A)знак равноВUЧАС

через згемм .


Благодаря! Я пропустил очевидный трюк с . Вы поместили меня в определенные подпрограммы LAPACK, которые мне нужны, поэтому большое спасибо за это. Я пока не буду отмечать это как правильное (сначала хочу проверить). я
кв. В

1
Нет спешки. Я на самом деле реализовал это раньше, так что я довольно уверен :-)
Джек Полсон

Это будет один из тех волшебных кусочков кода, которые я использую повсюду. За то, что это стоит, я также добавлю спасибо в строке комментария, который, вероятно, никто больше не увидит.
кв. В

2
@JackPoulson: Хорошо сыграно, сэр. Это то, что я получаю, выбирая мажор, который не верит в воображаемые числа (кроме собственных значений).
Джефф Оксберри

1
@JackPoulson: это прекрасно работает. Еще раз спасибо за это. Особенно немного zscal. У меня была большая часть кода в другой подпрограмме, но это было то, что я упустил.
кв. В

5

Поскольку я нахожусь на своем телефоне, я не могу связать вещи легко, и добавлю ссылки позже. Возможно, вам захочется взглянуть на статью «19 сомнительных способов вычисления экспоненциальной матрицы», библиотеку Фортрана EXPOKIT, статью Джитсе Нисена о методах Крылова для вычисления экспоненциальной матрицы и некоторые недавние статьи Ника Хайама об экспоненциальных показателях матрицы. Чаще всего требуется произведение экспоненциальной матрицы и вектора, а не только экспоненциальной матрицы, и здесь методы Крылова могут быть весьма полезны. Для более мелких плотных матриц, подобных тем, которые вы описываете, методы Паде могли бы быть лучше, но у меня был большой успех с методами Крылова, когда они использовались внутри экспоненциальных методов для численного интегрирования ОДУ.


Спасибо. Я знаю 19 сомнительных способов , а также expokit, но некоторые люди, с которыми я работаю, работают в промышленности, поэтому я хочу избежать этого по причинам авторского права. Я заинтересован в реализации этого с LAPACK / BLAS, так как я уже ссылаюсь на эти библиотеки. Хотя одна вещь; Мне нужна сама матрица экспоненциальная. Я работаю над вариантом квантовой томографии процесса, и данный процесс воплощен в матрице. Позже я буду иметь дело с интегратором в сочетании с этой экспоненциальной матрицей, и тогда она станет действительно интересной!
кв. В

1

Комплексный подход eigensolution математически корректен, но он выполняет больше работы, чем необходимо. К сожалению, улучшенный подход, который я собираюсь описать, не может быть реализован с вызовами LAPACK.

Посмотрите на RC Ward и LJ Grey, ACM Trans. Математика Мягкий. 4, 278 (1978). Здесь описывается программное обеспечение, которое доступно в алгоритме 530 TOMS и которое можно загрузить с netlib. Здесь описывается, как разложить асимметричную матрицу какИкс

Иксзнак равноUDUT

UD2×21×11×1ехр(0)знак равно12×2

ехр(0-TT0)знак равно(созT-грехTгрехTсозT)

Вы хотите получить экспоненциальную матрицу

ехр(Икс)знак равноUехр(D)UT

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


Привет @ Рон Шепард и добро пожаловать в Computational Exchange SE. Можете ли вы редактировать свое второе и третье уравнения? Их немного сложно понять.
Никогуаро

0

Если все, что вам нужно, это экспоненциальная матрица, умноженная на вектор, то эта подпрограмма на Фортране может быть вам полезна . Он вычисляет:

(еA)v

где v - вектор, а A - регулярная эрмитова матрица. Это подпрограмма из библиотеки EXPOKIT

В противном случае вы можете рассмотреть эту подпрограмму, которая работает для любой общей сложной матрицы A.


Это не похоже на ссылку на библиотеки Фортрана.
Джефф Оксберри

@GeoffOxberry: я переписал его, чтобы включить подпрограммы фортрана
Пол

@ Пол: Боюсь, ничего хорошего. То, что я делаю, это полностью матричная вариация на томографии процесса. Кроме косо- эрмитов!
кв. В

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

@GeoffOxberry: Наоборот ... Мои результаты пришли независимо от ваших, но вы писали до того, как я получил возможность переписать свой ответ :)
Пол
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.