Нахождение собственных значений симметричной матрицы
От: Khimik  
Дата: 05.08.24 18:32
Оценка:
У меня стоит такая задача: научиться решать ядерное уравнение Шредингера в приближении “жёсткий ротатор – гармонический осциллятор”. Есть набор силовых постоянных – вторых производных энергии молекулы по декартовым координатам (предполагается что первые производные нулевые – это минимум на поверхности потенциальной энергии). Это матрица размером 3N*3N, где N – размер молекулы. Матрица симметричная: Uij=Uji. Мне сказали что эту матрицу надо диагонализовать, и на диагонали будут частоты колебаний, соответствующие полосам в инфракрасном спектре молекулы. И я теряюсь, как конкретно её можно диагонализовать.
Методов диагонализации матрицы много; в данном случае нужно диагонализовать её так, чтобы на диагонали остались собственные значения матрицы, с учётом что матрица симметрична. Вроде для этого подходит метод Якоби, я уже делал его реализацию. Однако меня смущает то, что алгоритм Якоби итерационный, значит он относительно медленной. Разве нет для этой задачи нормального неитерационного метода?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Отредактировано 05.08.2024 18:34 Khimik . Предыдущая версия .
Re: Нахождение собственных значений симметричной матрицы
От: kov_serg Россия  
Дата: 05.08.24 21:58
Оценка:
Здравствуйте, Khimik, Вы писали:

K>У меня стоит такая задача: научиться решать ядерное уравнение Шредингера в приближении “жёсткий ротатор – гармонический осциллятор”. Есть набор силовых постоянных – вторых производных энергии молекулы по декартовым координатам (предполагается что первые производные нулевые – это минимум на поверхности потенциальной энергии). Это матрица размером 3N*3N, где N – размер молекулы. Матрица симметричная: Uij=Uji. Мне сказали что эту матрицу надо диагонализовать, и на диагонали будут частоты колебаний, соответствующие полосам в инфракрасном спектре молекулы. И я теряюсь, как конкретно её можно диагонализовать.

K>Методов диагонализации матрицы много; в данном случае нужно диагонализовать её так, чтобы на диагонали остались собственные значения матрицы, с учётом что матрица симметрична. Вроде для этого подходит метод Якоби, я уже делал его реализацию. Однако меня смущает то, что алгоритм Якоби итерационный, значит он относительно медленной. Разве нет для этой задачи нормального неитерационного метода?

А что вас смущает, в итерационных методах? Вам в realtime надо считать?

Для симметричной матрицы используют редукцию Хаусхолдера.
http://www.tdoc.ru/c/programming/programming-theory/matrix-vectors-values-page8.html
http://www.tdoc.ru/c/programming/programming-theory/matrix-vectors-values-page9.html
http://www.tdoc.ru/c/programming/programming-theory/matrix-vectors-values-page10.html

K> Есть набор силовых постоянных – вторых производных энергии молекулы по декартовым координатам

Лучше явно уравнение напишите с заложенными допущениями.
У вас просто две молекулы и вы силу взаимодействия в системе центра масс раскладываете по малым параметрам потенциала?
Жесткий ротатор это когда эта система болтается как жесткая гантеля. Тобишь есть куча симметрий и оно сводится к одномерному волновому уравнению.
Что такое размер молекулы N?
Re[2]: Нахождение собственных значений симметричной матрицы
От: Khimik  
Дата: 06.08.24 15:21
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>У вас просто две молекулы и вы силу взаимодействия в системе центра масс раскладываете по малым параметрам потенциала?


Почему две? Одна молекула из N атомов.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re: Нахождение собственных значений симметричной матрицы
От: Marzec19 Россия  
Дата: 06.08.24 20:01
Оценка:
Ответа у меня нет, но обалдеть. Обалдеть, я когда-то такими штуками немного занимался в 20 лет. Потом перестал и не стал.
Re[3]: Нахождение собственных значений симметричной матрицы
От: kov_serg Россия  
Дата: 06.08.24 20:01
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Почему две? Одна молекула из N атомов.


Уравнение приведите
Re: Нахождение собственных значений симметричной матрицы
От: · Великобритания  
Дата: 07.08.24 12:05
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Мне сказали что эту матрицу надо диагонализовать, и на диагонали будут частоты колебаний, соответствующие полосам в инфракрасном спектре молекулы. И я теряюсь, как конкретно её можно диагонализовать.

Ответ gemini

## Ответ на ваш вопрос о диагонализации матрицы в задаче о молекулярных колебаниях

**Понимание задачи и метода Якоби**

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

**Почему метод Якоби?**

* **Симметричность матрицы:** Метод Якоби специально разработан для симметричных матриц и гарантирует получение ортогональной матрицы преобразования.
* **Сходимость:** Метод Якоби сходится для любых симметричных матриц.
* **Простая реализация:** Алгоритм достаточно прост для реализации на компьютере.

**Почему другие методы могут не подойти?**

* **Неитерационные методы:** Хотя существуют неитерационные методы диагонализации (например, для матриц специального вида), они не всегда применимы к произвольным симметричным матрицам.
* **Другие итерационные методы:** Существуют и другие итерационные методы, такие как метод Ланцоша или QR-алгоритм, но они могут быть более сложными в реализации или менее эффективными для конкретной задачи.

**Как ускорить метод Якоби?**

Если скорость вычислений является критичной для вашей задачи, можно рассмотреть следующие оптимизации:

* **Выбор начальной точки:** Удачный выбор начальной точки может ускорить сходимость метода.
* **Критерий остановки:** Правильный выбор критерия остановки позволяет избежать лишних итераций.
* **Параллельная реализация:** Метод Якоби может быть эффективно параллелен, что позволяет ускорить вычисления на многопроцессорных системах.
* **Использование специализированных библиотек:** Существуют библиотеки линейной алгебры, которые реализуют оптимизированные версии метода Якоби.

**Альтернативные подходы**

Если метод Якоби все же оказывается слишком медленным, можно рассмотреть следующие альтернативы:

* **Аппроксимация:** Для больших молекул можно использовать аппроксимации, которые позволяют уменьшить размер матрицы и ускорить вычисления.
* **Другие базисы:** Вместо декартовых координат можно использовать другие базисы (например, внутренние координаты), которые могут привести к более разреженной матрице и ускорить вычисления.
* **Специализированные алгоритмы:** Для задач молекулярной динамики существуют специализированные алгоритмы, которые позволяют эффективно решать уравнения движения и вычислять спектры колебаний.

**Рекомендации**

1. **Оцените размер вашей матрицы:** Для небольших матриц метод Якоби может быть вполне эффективен. Для больших матриц стоит рассмотреть оптимизации или альтернативные методы.
2. **Проанализируйте структуру матрицы:** Если матрица имеет специальную структуру (например, разреженная), можно использовать алгоритмы, которые учитывают эту структуру.
3. **Экспериментируйте с различными методами:** Попробуйте различные методы диагонализации и сравните их эффективность на вашей конкретной задаче.

**Дополнительные вопросы**

Чтобы дать более конкретные рекомендации, было бы полезно знать:

* **Размер молекулы:** Количество атомов в молекуле.
* **Язык программирования:** Какой язык вы используете для реализации алгоритма?
* **Требования к точности:** Какая точность необходима для полученных результатов?
* **Вычислительные ресурсы:** Какой компьютер вы используете?

**Заключение**

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

**Пожалуйста, задавайте дополнительные вопросы, если они у вас возникнут.**

**Ключевые слова:** метод Якоби, диагонализация матрицы, молекулярные колебания, силовые постоянные, инфракрасный спектр, оптимизация алгоритмов.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Нахождение собственных значений симметричной матрицы
От: swame  
Дата: 16.08.24 17:29
Оценка:
Здравствуйте, Khimik, Вы писали:

K>У меня стоит такая задача: научиться решать ядерное уравнение Шредингера в приближении “жёсткий ротатор – гармонический осциллятор”. Есть набор силовых постоянных – вторых производных энергии молекулы по декартовым координатам (предполагается что первые производные нулевые – это минимум на поверхности потенциальной энергии). Это матрица размером 3N*3N, где N – размер молекулы. Матрица симметричная: Uij=Uji. Мне сказали что эту матрицу надо диагонализовать, и на диагонали будут частоты колебаний, соответствующие полосам в инфракрасном спектре молекулы. И я теряюсь, как конкретно её можно диагонализовать.

K>Методов диагонализации матрицы много; в данном случае нужно диагонализовать её так, чтобы на диагонали остались собственные значения матрицы, с учётом что матрица симметрична. Вроде для этого подходит метод Якоби, я уже делал его реализацию. Однако меня смущает то, что алгоритм Якоби итерационный, значит он относительно медленной. Разве нет для этой задачи нормального неитерационного метода?


ПО методам решения не скажу, но советую посмотреть на оптимизированную библиотеку в т.ч. работы с матрицами

https://www.dewresearch.com/products/mtxvec
Re: Нахождение собственных значений симметричной матрицы
От: Pavel Dvorkin Россия  
Дата: 17.08.24 04:08
Оценка: 2 (1)
Здравствуйте, Khimik, Вы писали:

Есть еще метод Хаусхолдера. В отличие от метода Якоби он только O(N^2*logN), а не O(N^3)

http://www.tdoc.ru/c/programming/programming-theory/matrix-vectors-values-page8.html
With best regards
Pavel Dvorkin
Re[2]: Нахождение собственных значений симметричной матрицы
От: Khimik  
Дата: 17.08.24 17:45
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Есть еще метод Хаусхолдера. В отличие от метода Якоби он только O(N^2*logN), а не O(N^3)


PD>http://www.tdoc.ru/c/programming/programming-theory/matrix-vectors-values-page8.html


Ну вот, а я уже закодил метод Якоби. Слышал что он самый надёжный, так что может быть лучше оставлю.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.