3 votes

Comment assigner les entrées hors diagonale dans une matrice SymTridiagonale dans julia ?

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.

2voto

Simon Schoelly Points 525

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X