Как назначить недиагональные записи в матрице SymTridiagonal в Юлии? - PullRequest
2 голосов
/ 13 апреля 2020

Тип данных SymTridiagonal в Julia не позволяет мне назначать недиагональные значения чему-либо, кроме нуля. Я получаю эту ошибку: ArgumentError: невозможно установить недиагональную запись (2, 1). Мне нужно назначить недиагональные значения, потому что я пытаюсь реализовать алгоритм ImplicitSymmetricQRStep, который должен делать это в процессе.

1 Ответ

1 голос
/ 13 апреля 2020

На самом деле невозможно установить значения диагонали матрицы SymTridiagonal - почему это решение было принято, я не могу сказать.

Теперь я вижу две альтернативы:

1) В Юлия поля структуры не скрыты, поэтому можно изменить значение таким образом. Это опасно, поскольку внутренняя структура этой матрицы может измениться в будущих версиях без каких-либо предупреждений. Вот пример того, как вы это сделаете:

using LinearAlgebra: SymTridiagonal

a = SymTridiagonal([1 2 0; 2 1 2; 0 2 1)] # 1 on diagonal, 2 on off diagonals
a.ev[1] = 4 # a[1, 2] == 4 and a[2, 1] == 4

2) Вы также можете использовать матричный тип Tridiagonal, который также находится в пакете LinearAlgebra; этот тип позволяет устанавливать не диагональные записи. Тогда вам просто нужно убедиться, что вы не нарушаете свойства симметрии c этой матрицы, т. Е. Если вы установите a[i, j], то вам также придется установить a[j, i] в то же значение.

...