Le type de données SymTridiagonal dans Julia ne me laisse pas assigner des valeurs non-diagonales à autre chose que zéro. Je reçois cette erreur : ArgumentError : cannot set off-diagonal entry (2, 1). J'ai besoin d'assigner des valeurs non-diagonales parce que j'essaie d'implémenter l'algorithme ImplicitSymmetricQRStep qui a besoin de le faire dans le processus.
Réponse
Trop de publicités?Il n'est en effet pas possible de fixer les valeurs hors diagonale de SymTridiagonal
matrice - je ne peux pas dire pourquoi cette décision a été prise.
Je vois maintenant deux alternatives :
1) Dans Julia les champs d'une structure ne sont pas cachés, il est donc possible de changer la valeur de cette façon. Ceci est dangereux cependant, car la structure interne de cette matrice pourrait changer dans les versions futures sans aucun avertissement. Voici un exemple de comment vous feriez cela :
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) Vous pouvez également utiliser le Tridiagonal
qui se trouve également dans le LinearAlgebra
Ce type permet de définir les entrées hors diagonale. Ensuite, vous devez simplement vous assurer que vous ne violez pas les propriétés symétriques de cette matrice, c'est-à-dire que si vous définissez a[i, j]
alors vous devez également définir a[j, i]
à la même valeur.