Я думаю, что Джулия правильно обрабатывает матрицы со сложными элементами.
Моя задача - изменить спектр эрмитовой матрицы H и вернуть только матрицу с измененным спектром. т. е. у меня есть функция f(real_vec)->real_vec
, которая изменяет спектр s(H)
эрмитова matrix H=U[s(H)]U'
. Мне нужен результат f(H) = U[f(s(H))]U'
. Я думаю, что можно оптимизировать, не вычисляя явно eigfact(H)
.
Поэтому я попытался написать свой собственный eigmodif
на основе реализации eigfact
Джулией. Это было сложно, потому что я потерялся на строке 4816 в lapack.jl, где syevr()
завернуто.
Мне нужно понять, где и как, Юля преобразовала СЛОЖНУЮ ЭРМИТОВУЮ матрицу в ВЕЩЕСТВЕННО-СИММЕТРИЧНУЮ. Теоретически это возможно, поскольку у нас есть матрица J размером 2n на 2n, квадрат которой равен минус единице; для любой n на n КОМПЛЕКСНОЙ ЭРМИТОВОЙ матрице H мы затем превращаем ее в real(H).I + imag(H).J
или в блочную форму
[ real(H) -imag(H) ]
[ imag(H) real(H) ]
Но как Юля это делает?