Преобразование и численное решение матриц. Вот вопрос, который попадает между программированием и
линейной алгеброй. Задача имеет отношение к расчету колебательных
спектров и потенциальных поверхностей молекул.
Имеются три симметричные положительно-определенные матрицы,
A, B и F. О них известно следующее.
1. Все три матрицы "плохие", т.е. величины их элементов разбросаны
в пределах 16 порядков.
2. Разброс по величинам у элементов всех матриц не "случаен".
Матрицы A и B можно привести к "хорошему" виду путем операции,
например, А'=RAR, где R диагональная матрица с элементами от 1 до
10-8, так, что элементы А' отличаются друг от друга
не больше чем на порядок.
3. Матрица F приводится к "хорошему виду" путем F'=R-1FR-1, так, что
элементы F' отличаются друг от друга не более, чем на порядок.
4. Матрицы A и B "похожие", т.е. матрица Х, определяемая как
A=XТBX, близка к диагональной (не-диагональные
элементы близки к нулю, диагональные элементы отличаются от
единицы не более чем в 2 раза). Матрица Х не унитарна.
5. Матрицы AF и BF несимметричные, но "хорошие", любые операции,
вроде поиска собственных значений и векторов на копутере устойчивы.
Требуется:
1. Вычислить элементы и собственные вектора матрицы A1/2FA1/2 и B1/2FB1/2
на компутере.
Проблема состоит в том, что вычисление A1/2 и B1/2
неустойчиво, и приводит к большим ошибкам, выражающимся в том,
что собственные значения вычисленной "в лоб" A1/2FA1/2
существенно отличаются от собственных значений AF.
Вычисление A'1/2F'A'1/2 (A' и F' определены
в пп. 2 и 3 выше) дает верные собственные значения, но иногда
дает собственные вектора, не удовлетворяющие свойствам
симметрии задачи. Я нахожу это неожиданным.
2. Требуется также вычислить A1/2B-1/2. Попытка
вычислять корни из матриц методом диагонализации приводит к такому
же типу неустойчивости, как описано выше.
3. Существует ли способ вычислить A1/2, с помощью вычислений
A'1/2 (R известна) с последующим преобразованием результата?
Я пошарил литературу в зоне непосредственной досягаемости, но ничего
релевантного не обнаружил.
Спасибо.