如何在julia中指定符号三对角矩阵中的非对角项?

如何在julia中指定符号三对角矩阵中的非对角项?,julia,linear-algebra,Julia,Linear Algebra,Julia中的symtriadiagonal数据类型不允许我将非对角值指定给零以外的任何值。我得到了这个错误:ArgumentError:无法抵消对角线条目(2,1)。 我需要分配非对角值,因为我正在尝试实现隐式对称QRSTEP算法,在这个过程中需要这样做 确实不可能设置symtriadiagonal矩阵的偏离对角线值-我不能说为什么做出这个决定 我现在看到两种选择: 1) 在Julia中,结构的字段不隐藏,因此可以通过这种方式更改值。但这是危险的,因为该矩阵的内部结构在未来版本中可能会在没有任

Julia中的symtriadiagonal数据类型不允许我将非对角值指定给零以外的任何值。我得到了这个错误:ArgumentError:无法抵消对角线条目(2,1)。
我需要分配非对角值,因为我正在尝试实现隐式对称QRSTEP算法,在这个过程中需要这样做

确实不可能设置
symtriadiagonal
矩阵的偏离对角线值-我不能说为什么做出这个决定

我现在看到两种选择:

1) 在Julia中,结构的字段不隐藏,因此可以通过这种方式更改值。但这是危险的,因为该矩阵的内部结构在未来版本中可能会在没有任何警告的情况下更改。以下是您将如何做到这一点的示例:

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) 您还可以使用
三对角
矩阵类型,该类型也在
linearagebra
包中;此类型允许设置非对角条目。然后你只需要确保你自己不违反矩阵的对称性质,也就是说,如果你设置
a[i,j]
,那么你也必须将
a[j,i]
设置为相同的值