Linear Algebra

En plus de (et dans le cadre de) son support pour les tableaux multidimensionnels, Julia fournit des implémentations natives de nombreuses opérations d'algèbre linéaire courantes et utiles qui peuvent être chargées avec using LinearAlgebra. Les opérations de base, telles que tr, det, et inv sont toutes prises en charge :

julia> A = [1 2 3; 4 1 6; 7 8 1]
3×3 Matrix{Int64}:
 1  2  3
 4  1  6
 7  8  1

julia> tr(A)
3

julia> det(A)
104.0

julia> inv(A)
3×3 Matrix{Float64}:
 -0.451923   0.211538    0.0865385
  0.365385  -0.192308    0.0576923
  0.240385   0.0576923  -0.0673077

Ainsi que d'autres opérations utiles, telles que la recherche des valeurs propres ou des vecteurs propres :

julia> A = [-4. -17.; 2. 2.]
2×2 Matrix{Float64}:
 -4.0  -17.0
  2.0    2.0

julia> eigvals(A)
2-element Vector{ComplexF64}:
 -1.0 - 5.0im
 -1.0 + 5.0im

julia> eigvecs(A)
2×2 Matrix{ComplexF64}:
  0.945905-0.0im        0.945905+0.0im
 -0.166924+0.278207im  -0.166924-0.278207im

De plus, Julia fournit de nombreux factorizations qui peuvent être utilisés pour accélérer des problèmes tels que la résolution linéaire ou l'exponentiation de matrices en pré-factorisant une matrice dans une forme plus adaptée (pour des raisons de performance ou de mémoire) au problème. Consultez la documentation sur factorize pour plus d'informations. À titre d'exemple :

julia> A = [1.5 2 -4; 3 -1 -6; -10 2.3 4]
3×3 Matrix{Float64}:
   1.5   2.0  -4.0
   3.0  -1.0  -6.0
 -10.0   2.3   4.0

julia> factorize(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
L factor:
3×3 Matrix{Float64}:
  1.0    0.0       0.0
 -0.15   1.0       0.0
 -0.3   -0.132196  1.0
U factor:
3×3 Matrix{Float64}:
 -10.0  2.3     4.0
   0.0  2.345  -3.4
   0.0  0.0    -5.24947

Puisque A n'est pas hermitien, symétrique, triangulaire, tridiagonale ou bidiagonale, une factorisation LU est peut-être le mieux que nous puissions faire. Comparez avec :

julia> B = [1.5 2 -4; 2 -1 -3; -4 -3 5]
3×3 Matrix{Float64}:
  1.5   2.0  -4.0
  2.0  -1.0  -3.0
 -4.0  -3.0   5.0

julia> factorize(B)
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D factor:
3×3 Tridiagonal{Float64, Vector{Float64}}:
 -1.64286   0.0   ⋅
  0.0      -2.8  0.0
   ⋅        0.0  5.0
U factor:
3×3 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.142857  -0.8
  ⋅   1.0       -0.6
  ⋅    ⋅         1.0
permutation:
3-element Vector{Int64}:
 1
 2
 3

Ici, Julia a pu détecter que B est en fait symétrique et a utilisé une factorisation plus appropriée. Il est souvent possible d'écrire un code plus efficace pour une matrice qui est connue pour avoir certaines propriétés, par exemple, elle est symétrique ou tridiagonale. Julia fournit certains types spéciaux afin que vous puissiez "taguer" les matrices comme ayant ces propriétés. Par exemple :

julia> B = [1.5 2 -4; 2 -1 -3; -4 -3 5]
3×3 Matrix{Float64}:
  1.5   2.0  -4.0
  2.0  -1.0  -3.0
 -4.0  -3.0   5.0

julia> sB = Symmetric(B)
3×3 Symmetric{Float64, Matrix{Float64}}:
  1.5   2.0  -4.0
  2.0  -1.0  -3.0
 -4.0  -3.0   5.0

sB a été étiqueté comme une matrice qui est (réelle) symétrique, donc pour les opérations ultérieures que nous pourrions effectuer dessus, telles que l'eigenfactorisation ou le calcul de produits matrice-vecteur, des gains d'efficacité peuvent être trouvés en ne faisant référence qu'à la moitié. Par exemple :

julia> B = [1.5 2 -4; 2 -1 -3; -4 -3 5]
3×3 Matrix{Float64}:
  1.5   2.0  -4.0
  2.0  -1.0  -3.0
 -4.0  -3.0   5.0

julia> sB = Symmetric(B)
3×3 Symmetric{Float64, Matrix{Float64}}:
  1.5   2.0  -4.0
  2.0  -1.0  -3.0
 -4.0  -3.0   5.0

julia> x = [1; 2; 3]
3-element Vector{Int64}:
 1
 2
 3

julia> sB\x
3-element Vector{Float64}:
 -1.7391304347826084
 -1.1086956521739126
 -1.4565217391304346

L'opération \ ici effectue la solution linéaire. L'opérateur de division à gauche est assez puissant et il est facile d'écrire un code compact et lisible qui est suffisamment flexible pour résoudre toutes sortes de systèmes d'équations linéaires.

Special matrices

Matrices with special symmetries and structures surgissent souvent en algèbre linéaire et sont fréquemment associés à diverses factorizations de matrices. Julia propose une riche collection de types de matrices spéciaux, qui permettent un calcul rapide avec des routines spécialisées spécialement développées pour des types de matrices particuliers.

Les tableaux suivants résument les types de matrices spéciales qui ont été implémentées en Julia, ainsi que la disponibilité de crochets pour diverses méthodes optimisées pour elles dans LAPACK.

TypeDescription
SymmetricSymmetric matrix
HermitianHermitian matrix
UpperTriangularUpper triangular matrix
UnitUpperTriangularUpper triangular matrix with unit diagonal
LowerTriangularLower triangular matrix
UnitLowerTriangularLower triangular matrix with unit diagonal
UpperHessenbergUpper Hessenberg matrix
TridiagonalTridiagonal matrix
SymTridiagonalSymmetric tridiagonal matrix
BidiagonalUpper/lower bidiagonal matrix
DiagonalDiagonal matrix
UniformScalingUniform scaling operator

Elementary operations

Matrix type+-*\Other functions with optimized methods
SymmetricMVinv, sqrt, cbrt, exp
HermitianMVinv, sqrt, cbrt, exp
UpperTriangularMVMVinv, det, logdet
UnitUpperTriangularMVMVinv, det, logdet
LowerTriangularMVMVinv, det, logdet
UnitLowerTriangularMVMVinv, det, logdet
UpperHessenbergMMinv, det
SymTridiagonalMMMSMVeigmax, eigmin
TridiagonalMMMSMV
BidiagonalMMMSMV
DiagonalMMMVMVinv, det, logdet, /
UniformScalingMMMVSMVS/

Légende :

KeyDescription
M (matrix)An optimized method for matrix-matrix operations is available
V (vector)An optimized method for matrix-vector operations is available
S (scalar)An optimized method for matrix-scalar operations is available

Matrix factorizations

Matrix typeLAPACKeigeneigvalseigvecssvdsvdvals
SymmetricSYARI
HermitianHEARI
UpperTriangularTRAAA
UnitUpperTriangularTRAAA
LowerTriangularTRAAA
UnitLowerTriangularTRAAA
SymTridiagonalSTAARIAV
TridiagonalGT
BidiagonalBDAA
DiagonalDIA

Légende :

KeyDescriptionExample
A (all)An optimized method to find all the characteristic values and/or vectors is availablee.g. eigvals(M)
R (range)An optimized method to find the ilth through the ihth characteristic values are availableeigvals(M, il, ih)
I (interval)An optimized method to find the characteristic values in the interval [vl, vh] is availableeigvals(M, vl, vh)
V (vectors)An optimized method to find the characteristic vectors corresponding to the characteristic values x=[x1, x2,...] is availableeigvecs(M, x)

The uniform scaling operator

Un opérateur UniformScaling représente un scalaire multiplié par l'opérateur d'identité, λ*I. L'opérateur d'identité I est défini comme une constante et est une instance de UniformScaling. La taille de ces opérateurs est générique et correspond à l'autre matrice dans les opérations binaires +, -, * et \. Pour A+I et A-I, cela signifie que A doit être carrée. La multiplication avec l'opérateur d'identité I est une opération sans effet (sauf pour vérifier que le facteur d'échelle est un) et donc presque sans surcharge.

Pour voir l'opérateur UniformScaling en action :

julia> U = UniformScaling(2);

julia> a = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> a + U
2×2 Matrix{Int64}:
 3  2
 3  6

julia> a * U
2×2 Matrix{Int64}:
 2  4
 6  8

julia> [a U]
2×4 Matrix{Int64}:
 1  2  2  0
 3  4  0  2

julia> b = [1 2 3; 4 5 6]
2×3 Matrix{Int64}:
 1  2  3
 4  5  6

julia> b - U
ERROR: DimensionMismatch: matrix is not square: dimensions are (2, 3)
Stacktrace:
[...]

Si vous devez résoudre de nombreux systèmes de la forme (A+μI)x = b pour le même A et différents μ, il peut être bénéfique de d'abord calculer la factorisation de Hessenberg F de A via la fonction hessenberg. Étant donné F, Julia utilise un algorithme efficace pour (F+μ*I) \ b (équivalent à (A+μ*I)x \ b) et des opérations connexes comme les déterminants.

Matrix factorizations

Matrix factorizations (a.k.a. matrix decompositions) calcule la factorisation d'une matrice en un produit de matrices, et est l'un des concepts centraux de l'algèbre linéaire (numérique).

Le tableau suivant résume les types de factorizations de matrices qui ont été implémentées en Julia. Les détails de leurs méthodes associées peuvent être trouvés dans la section Standard functions de la documentation sur l'algèbre linéaire.

TypeDescription
BunchKaufmanBunch-Kaufman factorization
CholeskyCholesky factorization
CholeskyPivotedPivoted Cholesky factorization
LDLtLDL(T) factorization
LULU factorization
QRQR factorization
QRCompactWYCompact WY form of the QR factorization
QRPivotedPivoted QR factorization
LQQR factorization of transpose(A)
HessenbergHessenberg decomposition
EigenSpectral decomposition
GeneralizedEigenGeneralized spectral decomposition
SVDSingular value decomposition
GeneralizedSVDGeneralized SVD
SchurSchur decomposition
GeneralizedSchurGeneralized Schur decomposition

Les adjoints et les transposés des objets Factorization sont paresseusement enveloppés dans des objets AdjointFactorization et TransposeFactorization, respectivement. En général, le transposé des Factorizations réels est enveloppé sous la forme d'un AdjointFactorization.

Orthogonal matrices (AbstractQ)

Certaines factorizations de matrices génèrent des facteurs "matriciels" orthogonaux/unitaires. Ces factorizations incluent des factorizations liées à QR obtenues à partir d'appels à qr, c'est-à-dire QR, QRCompactWY et QRPivoted, la factorisation de Hessenberg obtenue à partir d'appels à hessenberg, et la factorisation LQ obtenue à partir de lq. Bien que ces facteurs orthogonaux/unitaires admettent une représentation matricielle, leur représentation interne est, pour des raisons de performance et de mémoire, différente. Par conséquent, ils doivent plutôt être considérés comme des opérateurs linéaires basés sur des matrices et fonctionnels. En particulier, lire, par exemple, une colonne de sa représentation matricielle nécessite d'exécuter un code de multiplication "matrice"-vecteur, plutôt que de simplement lire des données en mémoire (remplissant éventuellement des parties du vecteur avec des zéros structurels). Une autre distinction claire par rapport à d'autres types de matrices non triangulaires est que le code de multiplication sous-jacent permet une modification en place lors de la multiplication. De plus, des objets de sous-types spécifiques AbstractQ, tels que ceux créés via 4d61726b646f776e2e436f64652822222c202271722229_40726566, 4d61726b646f776e2e436f64652822222c202268657373656e626572672229_40726566 et 4d61726b646f776e2e436f64652822222c20226c712229_40726566, peuvent se comporter comme une matrice carrée ou rectangulaire selon le contexte :

julia> using LinearAlgebra

julia> Q = qr(rand(3,2)).Q
3×3 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}

julia> Matrix(Q)
3×2 Matrix{Float64}:
 -0.320597   0.865734
 -0.765834  -0.475694
 -0.557419   0.155628

julia> Q*I
3×3 Matrix{Float64}:
 -0.320597   0.865734  -0.384346
 -0.765834  -0.475694  -0.432683
 -0.557419   0.155628   0.815514

julia> Q*ones(2)
3-element Vector{Float64}:
  0.5451367118802273
 -1.241527373086654
 -0.40179067589600226

julia> Q*ones(3)
3-element Vector{Float64}:
  0.16079054743832022
 -1.674209978965636
  0.41372375588835797

julia> ones(1,2) * Q'
1×3 Matrix{Float64}:
 0.545137  -1.24153  -0.401791

julia> ones(1,3) * Q'
1×3 Matrix{Float64}:
 0.160791  -1.67421  0.413724

En raison de cette distinction par rapport aux matrices denses ou structurées, le type abstrait AbstractQ ne sous-type pas AbstractMatrix, mais a plutôt sa propre hiérarchie de types. Les types personnalisés qui sous-tendent AbstractQ peuvent s'appuyer sur des solutions génériques si l'interface suivante est satisfaite. Par exemple, pour

struct MyQ{T} <: LinearAlgebra.AbstractQ{T}
    # required fields
end

fournir des surcharges pour

Base.size(Q::MyQ) # size of corresponding square matrix representation
Base.convert(::Type{AbstractQ{T}}, Q::MyQ) # eltype promotion [optional]
LinearAlgebra.lmul!(Q::MyQ, x::AbstractVecOrMat) # left-multiplication
LinearAlgebra.rmul!(A::AbstractMatrix, Q::MyQ) # right-multiplication

Si la promotion eltype n'est pas d'intérêt, la méthode convert est inutile, car par défaut convert(::Type{AbstractQ{T}}, Q::AbstractQ{T}) retourne Q lui-même. Les adjoints des objets de type AbstractQ sont paresseusement enveloppés dans un type d'enveloppe AdjointQ, qui nécessite ses propres méthodes LinearAlgebra.lmul! et LinearAlgebra.rmul!. Étant donné cet ensemble de méthodes, tout Q::MyQ peut être utilisé comme une matrice, de préférence dans un contexte multiplicatif : la multiplication via * avec des scalaires, des vecteurs et des matrices à gauche et à droite, obtenir une représentation matricielle de Q via Matrix(Q) (ou Q*I) et indexer dans la représentation matricielle fonctionnent tous. En revanche, l'addition et la soustraction ainsi que, plus généralement, le broadcasting sur les éléments de la représentation matricielle échouent car cela serait très inefficace. Pour de tels cas d'utilisation, envisagez de calculer la représentation matricielle à l'avance et de la mettre en cache pour une réutilisation future.

Pivoting Strategies

Plusieurs des matrix factorizations prennent en charge pivoting, ce qui peut être utilisé pour améliorer leur stabilité numérique. En fait, certaines factorizations de matrices, telles que la factorisation LU, peuvent échouer sans pivotement.

In pivoting, first, a pivot element with good numerical properties is chosen based on a pivoting strategy. Next, the rows and columns of the original matrix are permuted to bring the chosen element in place for subsequent computation. Furthermore, the process is repeated for each stage of the factorization.

Par conséquent, en plus des facteurs de matrice conventionnels, les sorties des schémas de factorisation pivotés incluent également des matrices de permutation.

Dans ce qui suit, les stratégies de pivotement mises en œuvre en Julia sont brièvement décrites. Notez que toutes les factorizations de matrices ne peuvent pas les prendre en charge. Consultez la documentation du matrix factorization pour plus de détails sur les stratégies de pivotement prises en charge.

Voir aussi LinearAlgebra.ZeroPivotException.

LinearAlgebra.NoPivotType
NoPivot

Le pivotement n'est pas effectué. Les factorisations de matrices telles que la factorisation LU peuvent échouer sans pivotement et peuvent également être numériquement instables pour les matrices à virgule flottante face à l'erreur d'arrondi. Cette stratégie de pivotement est principalement utile à des fins pédagogiques.

source
LinearAlgebra.RowNonZeroType
RowNonZero

Le premier élément non nul dans les lignes restantes est choisi comme élément pivot.

Attention, pour les matrices à virgule flottante, l'algorithme LU résultant est numériquement instable — cette stratégie est principalement utile pour la comparaison avec des calculs manuels (qui utilisent généralement cette stratégie) ou pour d'autres types algébriques (par exemple, les nombres rationnels) non susceptibles d'erreurs d'arrondi. Sinon, la stratégie de pivotement par défaut RowMaximum devrait généralement être préférée dans l'élimination de Gauss.

Notez que le type d'élément de la matrice doit admettre une méthode iszero.

source
LinearAlgebra.RowMaximumType
RowMaximum

L'élément de plus grande magnitude dans les lignes restantes est choisi comme élément pivot. C'est la stratégie par défaut pour la factorisation LU des matrices à virgule flottante, et est parfois appelée l'algorithme de "pivotage partiel".

Notez que le type d'élément de la matrice doit admettre une méthode abs, dont le type de résultat doit admettre une méthode <.

source
LinearAlgebra.ColumnNormType
ColumnNorm

La colonne avec la norme maximale est utilisée pour les calculs ultérieurs. Cela est utilisé pour la factorisation QR pivotée.

Notez que le type d'élément de la matrice doit admettre les méthodes norm et abs, dont les types de résultats respectifs doivent admettre une méthode <.

source

Standard functions

Les fonctions d'algèbre linéaire en Julia sont principalement implémentées en appelant des fonctions de LAPACK. Les factorizations de matrices creuses appellent des fonctions de SuiteSparse. D'autres solveurs creux sont disponibles en tant que packages Julia.

Base.:*Method
*(A::AbstractMatrix, B::AbstractMatrix)

Multiplication de matrices.

Exemples

julia> [1 1; 0 1] * [1 0; 1 1]
2×2 Matrix{Int64}:
 2  1
 1  1
source
Base.:*Method
*(A, B::AbstractMatrix, C)
A * B * C * D

La multiplication en chaîne de 3 ou 4 matrices est effectuée dans la séquence la plus efficace, en fonction des tailles des tableaux. C'est-à-dire que le nombre de multiplications scalaires nécessaires pour (A * B) * C (avec 3 matrices denses) est comparé à celui pour A * (B * C) afin de choisir laquelle de ces opérations exécuter.

Si le dernier facteur est un vecteur, ou le premier un vecteur transposé, il est efficace de traiter ces cas en premier. En particulier, x' * B * y signifie (x' * B) * y pour une matrice ordinaire en colonne B::Matrix. Contrairement à dot(x, B, y), cela alloue un tableau intermédiaire.

Si le premier ou le dernier facteur est un nombre, cela sera fusionné avec la multiplication matricielle, en utilisant mul! à 5 arguments.

Voir aussi muladd, dot.

Julia 1.7

Ces optimisations nécessitent au moins Julia 1.7.

source
Base.:\Method
\(A, B)

Division de matrices utilisant un polyalgorithme. Pour les matrices d'entrée A et B, le résultat X est tel que A*X == B lorsque A est carrée. Le solveur utilisé dépend de la structure de A. Si A est triangulaire supérieure ou inférieure (ou diagonale), aucune factorisation de A n'est requise et le système est résolu par substitution avant ou arrière. Pour les matrices carrées non triangulaires, une factorisation LU est utilisée.

Pour A rectangulaire, le résultat est la solution des moindres carrés à norme minimale calculée par une factorisation QR pivotée de A et une estimation du rang de A basée sur le facteur R.

Lorsque A est sparse, un polyalgorithme similaire est utilisé. Pour les matrices indéfinies, la factorisation LDLt n'utilise pas de pivotement pendant la factorisation numérique et par conséquent, la procédure peut échouer même pour des matrices inversibles.

Voir aussi : factorize, pinv.

Exemples

julia> A = [1 0; 1 -2]; B = [32; -4];

julia> X = A \ B
2-element Vector{Float64}:
 32.0
 18.0

julia> A * X == B
true
source
Base.:/Method
A / B

La division à droite des matrices : A / B est équivalente à (B' \ A')'\ est l'opérateur de division à gauche. Pour les matrices carrées, le résultat X est tel que A == X*B.

Voir aussi : rdiv!.

Exemples

julia> A = Float64[1 4 5; 3 9 2]; B = Float64[1 4 2; 3 4 2; 8 7 1];

julia> X = A / B
2×3 Matrix{Float64}:
 -0.65   3.75  -1.2
  3.25  -2.75   1.0

julia> isapprox(A, X*B)
true

julia> isapprox(X, A*pinv(B))
true
source
LinearAlgebra.SingularExceptionType
SingularException

Exception levée lorsque la matrice d'entrée a une ou plusieurs valeurs propres nulles et n'est pas inversible. Une résolution linéaire impliquant une telle matrice ne peut pas être calculée. Le champ info indique l'emplacement de (l'une des) valeurs singulières.

source
LinearAlgebra.PosDefExceptionType
PosDefException

Exception levée lorsque la matrice d'entrée n'était pas définie positive. Certaines fonctions d'algèbre linéaire et factorizations ne sont applicables qu'aux matrices définies positives. Le champ info indique l'emplacement de (l'un des) valeurs propres qui est (sont) inférieure(s) ou égale(s) à 0.

source
LinearAlgebra.ZeroPivotExceptionType
ZeroPivotException <: Exception

Exception levée lorsqu'une factorisation/résolution de matrice rencontre un zéro dans une position de pivot (diagonale) et ne peut pas continuer. Cela ne signifie pas que la matrice est singulière : il peut être utile de passer à une autre factorisation telle que LU avec pivot qui peut réorganiser les variables pour éliminer les pivots nuls spuriques. Le champ info indique l'emplacement de (l'un des) pivots nuls.

source
LinearAlgebra.RankDeficientExceptionType
RankDeficientException

Exception levée lorsque la matrice d'entrée est déficiente en rang. Certaines fonctions d'algèbre linéaire, telles que la décomposition de Cholesky, ne s'appliquent qu'aux matrices qui ne sont pas déficientes en rang. Le champ info indique le rang calculé de la matrice.

source
LinearAlgebra.LAPACKExceptionType
LAPACKException

Exception générique LAPACK lancée soit lors d'appels directs aux fonctions LAPACK, soit lors d'appels à d'autres fonctions qui utilisent les fonctions LAPACK en interne mais qui manquent de gestion d'erreurs spécialisée. Le champ info contient des informations supplémentaires sur l'erreur sous-jacente et dépend de la fonction LAPACK qui a été invoquée.

source
LinearAlgebra.dotFunction
dot(x, y)
x ⋅ y

Calculez le produit scalaire entre deux vecteurs. Pour les vecteurs complexes, le premier vecteur est conjugué.

dot fonctionne également sur des objets itérables arbitraires, y compris des tableaux de n'importe quelle dimension, tant que dot est défini sur les éléments.

dot est sémantiquement équivalent à sum(dot(vx,vy) for (vx,vy) in zip(x, y)), avec la restriction supplémentaire que les arguments doivent avoir des longueurs égales.

x ⋅ y (où peut être tapé en complétant par tabulation \cdot dans le REPL) est un synonyme de dot(x, y).

Exemples

julia> dot([1; 1], [2; 3])
5

julia> dot([im; im], [1; 1])
0 - 2im

julia> dot(1:5, 2:6)
70

julia> x = fill(2., (5,5));

julia> y = fill(3., (5,5));

julia> dot(x, y)
150.0
source
LinearAlgebra.dotMethod
dot(x, A, y)

Calcule le produit scalaire généralisé dot(x, A*y) entre deux vecteurs x et y, sans stocker le résultat intermédiaire de A*y. Comme pour la fonction à deux arguments dot(_,_), cela agit de manière récursive. De plus, pour les vecteurs complexes, le premier vecteur est conjugué.

Julia 1.4

La fonction dot à trois arguments nécessite au moins Julia 1.4.

Exemples

julia> dot([1; 1], [1 2; 3 4], [2; 3])
26

julia> dot(1:5, reshape(1:25, 5, 5), 2:6)
4850

julia> ⋅(1:5, reshape(1:25, 5, 5), 2:6) == dot(1:5, reshape(1:25, 5, 5), 2:6)
true
source
LinearAlgebra.crossFunction
cross(x, y)
×(x,y)

Calculez le produit vectoriel de deux vecteurs à 3 dimensions.

Exemples

julia> a = [0;1;0]
3-element Vector{Int64}:
 0
 1
 0

julia> b = [0;0;1]
3-element Vector{Int64}:
 0
 0
 1

julia> cross(a,b)
3-element Vector{Int64}:
 1
 0
 0
source
LinearAlgebra.axpy!Function
axpy!(α, x::AbstractArray, y::AbstractArray)

Écrase y avec x * α + y et retourne y. Si x et y ont les mêmes axes, c'est équivalent à y .+= x .* a.

Exemples

julia> x = [1; 2; 3];

julia> y = [4; 5; 6];

julia> axpy!(2, x, y)
3-element Vector{Int64}:
  6
  9
 12
source
LinearAlgebra.axpby!Function
axpby!(α, x::AbstractArray, β, y::AbstractArray)

Écrase y avec x * α + y * β et retourne y. Si x et y ont les mêmes axes, c'est équivalent à y .= x .* a .+ y .* β.

Exemples

julia> x = [1; 2; 3];

julia> y = [4; 5; 6];

julia> axpby!(2, x, 2, y)
3-element Vector{Int64}:
 10
 14
 18
source
LinearAlgebra.rotate!Function
rotate!(x, y, c, s)

Écrase x avec c*x + s*y et y avec -conj(s)*x + c*y. Renvoie x et y.

Julia 1.5

rotate! nécessite au moins Julia 1.5.

source
LinearAlgebra.reflect!Function
reflect!(x, y, c, s)

Écrase x avec c*x + s*y et y avec conj(s)*x - c*y. Renvoie x et y.

Julia 1.5

reflect! nécessite au moins Julia 1.5.

source
LinearAlgebra.factorizeFunction
factoriser(A)

Calcule une factorisation pratique de A, basée sur le type de la matrice d'entrée. factoriser vérifie A pour voir si elle est symétrique/triangulaire/etc. si A est passée comme une matrice générique. factoriser vérifie chaque élément de A pour vérifier/réfuter chaque propriété. Elle s'arrêtera dès qu'elle pourra exclure la symétrie/la structure triangulaire. La valeur de retour peut être réutilisée pour résoudre efficacement plusieurs systèmes. Par exemple : A=factoriser(A); x=A\b; y=A\C.

Propriétés de Atype de factorisation
Positive définieCholesky (voir cholesky)
Dense Symétrique/HermitienBunch-Kaufman (voir bunchkaufman)
Sparse Symétrique/HermitienLDLt (voir ldlt)
TriangulaireTriangulaire
DiagonaleDiagonale
BidiagonaleBidiagonale
TridiagonaleLU (voir lu)
Tridiagonale réelle symétriqueLDLt (voir ldlt)
Carrée généraleLU (voir lu)
Non carrée généraleQR (voir qr)

Si factoriser est appelé sur une matrice hermitienne positive définie, par exemple, alors factoriser renverra une factorisation de Cholesky.

Exemples

julia> A = Array(Bidiagonal(fill(1.0, (5, 5)), :U))
5×5 Matrix{Float64}:
 1.0  1.0  0.0  0.0  0.0
 0.0  1.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0  0.0
 0.0  0.0  0.0  1.0  1.0
 0.0  0.0  0.0  0.0  1.0

julia> factoriser(A) # factoriser vérifiera si A est déjà factorisée
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

Cela renvoie un 5×5 Bidiagonal{Float64}, qui peut maintenant être passé à d'autres fonctions d'algèbre linéaire (par exemple, des solveurs d'autovalues) qui utiliseront des méthodes spécialisées pour les types Bidiagonal.

source
LinearAlgebra.DiagonalType
Diagonal(V::AbstractVector)

Construit une matrice paresseuse avec V comme sa diagonale.

Voir aussi UniformScaling pour la matrice identité paresseuse I, diagm pour créer une matrice dense, et diag pour extraire les éléments diagonaux.

Exemples

julia> d = Diagonal([1, 10, 100])
3×3 Diagonal{Int64, Vector{Int64}}:
 1   ⋅    ⋅
 ⋅  10    ⋅
 ⋅   ⋅  100

julia> diagm([7, 13])
2×2 Matrix{Int64}:
 7   0
 0  13

julia> ans + I
2×2 Matrix{Int64}:
 8   0
 0  14

julia> I(2)
2×2 Diagonal{Bool, Vector{Bool}}:
 1  ⋅
 ⋅  1
Note

Une matrice à une colonne n'est pas traitée comme un vecteur, mais appelle plutôt la méthode Diagonal(A::AbstractMatrix) qui extrait 1 élément diag(A):

julia> A = transpose([7.0 13.0])
2×1 transpose(::Matrix{Float64}) avec eltype Float64:
  7.0
 13.0

julia> Diagonal(A)
1×1 Diagonal{Float64, Vector{Float64}}:
 7.0
source
Diagonal(A::AbstractMatrix)

Construit une matrice à partir de la diagonale principale de A. La matrice d'entrée A peut être rectangulaire, mais la sortie sera carrée.

Exemples

julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> D = Diagonal(A)
2×2 Diagonal{Int64, Vector{Int64}}:
 1  ⋅
 ⋅  4

julia> A = [1 2 3; 4 5 6]
2×3 Matrix{Int64}:
 1  2  3
 4  5  6

julia> Diagonal(A)
2×2 Diagonal{Int64, Vector{Int64}}:
 1  ⋅
 ⋅  5
source
Diagonal{T}(undef, n)

Construit un Diagonal{T} non initialisé de longueur n. Voir undef.

source
LinearAlgebra.BidiagonalType
Bidiagonal(dv::V, ev::V, uplo::Symbol) where V <: AbstractVector

Construit une matrice bidiagonale supérieure (uplo=:U) ou inférieure (uplo=:L) en utilisant les vecteurs diagonaux (dv) et hors-diagonaux (ev) donnés. Le résultat est de type Bidiagonal et fournit des solveurs linéaires spécialisés efficaces, mais peut être converti en une matrice régulière avec convert(Array, _) (ou Array(_) pour faire court). La longueur de ev doit être inférieure d'un à la longueur de dv.

Exemples

julia> dv = [1, 2, 3, 4]
4-element Vector{Int64}:
 1
 2
 3
 4

julia> ev = [7, 8, 9]
3-element Vector{Int64}:
 7
 8
 9

julia> Bu = Bidiagonal(dv, ev, :U) # ev est sur la première superdiagonale
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

julia> Bl = Bidiagonal(dv, ev, :L) # ev est sur la première sous-diagonale
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 7  2  ⋅  ⋅
 ⋅  8  3  ⋅
 ⋅  ⋅  9  4
source
Bidiagonal(A, uplo::Symbol)

Construit une matrice Bidiagonal à partir de la diagonale principale de A et de sa première super-diagonale (si uplo=:U) ou sous-diagonale (si uplo=:L).

Exemples

julia> A = [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4]
4×4 Matrix{Int64}:
 1  1  1  1
 2  2  2  2
 3  3  3  3
 4  4  4  4

julia> Bidiagonal(A, :U) # contient la diagonale principale et la première superdiagonale de A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # contient la diagonale principale et la première sous-diagonale de A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 2  2  ⋅  ⋅
 ⋅  3  3  ⋅
 ⋅  ⋅  4  4
source
LinearAlgebra.SymTridiagonalType
SymTridiagonal(dv::V, ev::V) où V <: AbstractVector

Construit une matrice tridiagonale symétrique à partir de la diagonale (dv) et de la première sous/super-diagonale (ev), respectivement. Le résultat est de type SymTridiagonal et fournit des solveurs propres spécialisés efficaces, mais peut être converti en une matrice régulière avec convert(Array, _) (ou Array(_) pour faire court).

Pour les matrices de blocs SymTridiagonal, les éléments de dv sont symétrisés. L'argument ev est interprété comme la superdiagonale. Les blocs de la sous-diagonale sont (matérialisés) transposés des blocs de la superdiagonale correspondante.

Exemples

julia> dv = [1, 2, 3, 4]
4-élément Vector{Int64}:
 1
 2
 3
 4

julia> ev = [7, 8, 9]
3-élément Vector{Int64}:
 7
 8
 9

julia> SymTridiagonal(dv, ev)
4×4 SymTridiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 7  2  8  ⋅
 ⋅  8  3  9
 ⋅  ⋅  9  4

julia> A = SymTridiagonal(fill([1 2; 3 4], 3), fill([1 2; 3 4], 2));

julia> A[1,1]
2×2 Symmetric{Int64, Matrix{Int64}}:
 1  2
 2  4

julia> A[1,2]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> A[2,1]
2×2 Matrix{Int64}:
 1  3
 2  4
source
SymTridiagonal(A::AbstractMatrix)

Construit une matrice tridiagonale symétrique à partir de la diagonale et de la première superdiagonale de la matrice symétrique A.

Exemples

julia> A = [1 2 3; 2 4 5; 3 5 6]
3×3 Matrix{Int64}:
 1  2  3
 2  4  5
 3  5  6

julia> SymTridiagonal(A)
3×3 SymTridiagonal{Int64, Vector{Int64}}:
 1  2  ⋅
 2  4  5
 ⋅  5  6

julia> B = reshape([[1 2; 2 3], [1 2; 3 4], [1 3; 2 4], [1 2; 2 3]], 2, 2);

julia> SymTridiagonal(B)
2×2 SymTridiagonal{Matrix{Int64}, Vector{Matrix{Int64}}}:
 [1 2; 2 3]  [1 3; 2 4]
 [1 2; 3 4]  [1 2; 2 3]
source
LinearAlgebra.TridiagonalType
Tridiagonal(dl::V, d::V, du::V) où V <: AbstractVector

Construit une matrice tridiagonale à partir de la première sous-diagonale, de la diagonale et de la première super-diagonale, respectivement. Le résultat est de type Tridiagonal et fournit des solveurs linéaires spécialisés efficaces, mais peut être converti en une matrice régulière avec convert(Array, _) (ou Array(_) pour faire court). Les longueurs de dl et du doivent être inférieures d'une unité à la longueur de d.

Note

La sous-diagonale dl et la super-diagonale du ne doivent pas être aliasées l'une à l'autre. Si un aliasing est détecté, le constructeur utilisera une copie de du comme argument.

Exemples

julia> dl = [1, 2, 3];

julia> du = [4, 5, 6];

julia> d = [7, 8, 9, 0];

julia> Tridiagonal(dl, d, du)
4×4 Tridiagonal{Int64, Vector{Int64}}:
 7  4  ⋅  ⋅
 1  8  5  ⋅
 ⋅  2  9  6
 ⋅  ⋅  3  0
source
Tridiagonal(A)

Construit une matrice tridiagonale à partir de la première sous-diagonale, de la diagonale et de la première super-diagonale de la matrice A.

Exemples

julia> A = [1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4]
4×4 Matrix{Int64}:
 1  2  3  4
 1  2  3  4
 1  2  3  4
 1  2  3  4

julia> Tridiagonal(A)
4×4 Tridiagonal{Int64, Vector{Int64}}:
 1  2  ⋅  ⋅
 1  2  3  ⋅
 ⋅  2  3  4
 ⋅  ⋅  3  4
source
LinearAlgebra.SymmetricType
Symmetric(A::AbstractMatrix, uplo::Symbol=:U)

Construit une vue Symmetric du triangle supérieur (si uplo = :U) ou inférieur (si uplo = :L) de la matrice A.

Les vues Symmetric sont principalement utiles pour les matrices réelles symétriques, pour lesquelles des algorithmes spécialisés (par exemple pour les problèmes propres) sont activés pour les types Symmetric. Plus généralement, voir aussi Hermitian(A) pour les matrices hermitiennes A == A', qui est effectivement équivalent à Symmetric pour les matrices réelles mais est également utile pour les matrices complexes. (Alors que les matrices Symmetric complexes sont prises en charge mais ont peu, voire aucun, algorithme spécialisé.)

Pour calculer la partie symétrique d'une matrice réelle, ou plus généralement la partie hermitienne (A + A') / 2 d'une matrice réelle ou complexe A, utilisez hermitianpart.

Exemples

julia> A = [1 2 3; 4 5 6; 7 8 9]
3×3 Matrix{Int64}:
 1  2  3
 4  5  6
 7  8  9

julia> Supper = Symmetric(A)
3×3 Symmetric{Int64, Matrix{Int64}}:
 1  2  3
 2  5  6
 3  6  9

julia> Slower = Symmetric(A, :L)
3×3 Symmetric{Int64, Matrix{Int64}}:
 1  4  7
 4  5  8
 7  8  9

julia> hermitianpart(A)
3×3 Hermitian{Float64, Matrix{Float64}}:
 1.0  3.0  5.0
 3.0  5.0  7.0
 5.0  7.0  9.0

Notez que Supper ne sera pas égal à Slower à moins que A ne soit elle-même symétrique (par exemple si A == transpose(A)).

source
LinearAlgebra.HermitianType
Hermitian(A::AbstractMatrix, uplo::Symbol=:U)

Construit une vue Hermitian du triangle supérieur (si uplo = :U) ou inférieur (si uplo = :L) de la matrice A.

Pour calculer la partie hermitienne de A, utilisez hermitianpart.

Exemples

julia> A = [1 2+2im 3-3im; 4 5 6-6im; 7 8+8im 9]
3×3 Matrix{Complex{Int64}}:
 1+0im  2+2im  3-3im
 4+0im  5+0im  6-6im
 7+0im  8+8im  9+0im

julia> Hupper = Hermitian(A)
3×3 Hermitian{Complex{Int64}, Matrix{Complex{Int64}}}:
 1+0im  2+2im  3-3im
 2-2im  5+0im  6-6im
 3+3im  6+6im  9+0im

julia> Hlower = Hermitian(A, :L)
3×3 Hermitian{Complex{Int64}, Matrix{Complex{Int64}}}:
 1+0im  4+0im  7+0im
 4+0im  5+0im  8-8im
 7+0im  8+8im  9+0im

julia> hermitianpart(A)
3×3 Hermitian{ComplexF64, Matrix{ComplexF64}}:
 1.0+0.0im  3.0+1.0im  5.0-1.5im
 3.0-1.0im  5.0+0.0im  7.0-7.0im
 5.0+1.5im  7.0+7.0im  9.0+0.0im

Notez que Hupper ne sera pas égal à Hlower à moins que A ne soit lui-même hermitien (par exemple, si A == adjoint(A)).

Toutes les parties non réelles de la diagonale seront ignorées.

Hermitian(fill(complex(1,1), 1, 1)) == fill(1, 1, 1)
source
LinearAlgebra.LowerTriangularType
LowerTriangular(A::AbstractMatrix)

Construit une vue LowerTriangular de la matrice A.

Exemples

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

julia> LowerTriangular(A)
3×3 LowerTriangular{Float64, Matrix{Float64}}:
 1.0   ⋅    ⋅
 4.0  5.0   ⋅
 7.0  8.0  9.0
source
LinearAlgebra.UpperTriangularType
UpperTriangular(A::AbstractMatrix)

Construit une vue UpperTriangular de la matrice A.

Exemples

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

julia> UpperTriangular(A)
3×3 UpperTriangular{Float64, Matrix{Float64}}:
 1.0  2.0  3.0
  ⋅   5.0  6.0
  ⋅    ⋅   9.0
source
LinearAlgebra.UnitLowerTriangularType
UnitLowerTriangular(A::AbstractMatrix)

Construit une vue UnitLowerTriangular de la matrice A. Une telle vue a le oneunit du eltype de A sur sa diagonale.

Exemples

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

julia> UnitLowerTriangular(A)
3×3 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0   ⋅    ⋅
 4.0  1.0   ⋅
 7.0  8.0  1.0
source
LinearAlgebra.UnitUpperTriangularType
UnitUpperTriangular(A::AbstractMatrix)

Construit une vue UnitUpperTriangular de la matrice A. Une telle vue a le oneunit du eltype de A sur sa diagonale.

Exemples

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

julia> UnitUpperTriangular(A)
3×3 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  2.0  3.0
  ⋅   1.0  6.0
  ⋅    ⋅   1.0
source
LinearAlgebra.UpperHessenbergType
UpperHessenberg(A::AbstractMatrix)

Construit une vue UpperHessenberg de la matrice A. Les entrées de A en dessous de la première sous-diagonale sont ignorées.

Julia 1.3

Ce type a été ajouté dans Julia 1.3.

Des algorithmes efficaces sont implémentés pour H \ b, det(H), et similaires.

Voir aussi la fonction hessenberg pour factoriser n'importe quelle matrice en une matrice supérieure de Hessenberg similaire.

Si F::Hessenberg est l'objet de factorisation, la matrice unitaire peut être accédée avec F.Q et la matrice de Hessenberg avec F.H. Lorsque Q est extrait, le type résultant est l'objet HessenbergQ, et peut être converti en une matrice régulière avec convert(Array, _) (ou Array(_) pour faire court).

L'itération de la décomposition produit les facteurs F.Q et F.H.

Exemples

julia> A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
4×4 Matrix{Int64}:
  1   2   3   4
  5   6   7   8
  9  10  11  12
 13  14  15  16

julia> UpperHessenberg(A)
4×4 UpperHessenberg{Int64, Matrix{Int64}}:
 1   2   3   4
 5   6   7   8
 ⋅  10  11  12
 ⋅   ⋅  15  16
source
LinearAlgebra.UniformScalingType
UniformScaling{T<:Number}

Opérateur de mise à l'échelle uniforme de taille générique défini comme un scalaire multiplié par l'opérateur d'identité, λ*I. Bien qu'il n'ait pas de size explicite, il agit de manière similaire à une matrice dans de nombreux cas et inclut le support pour certains indexages. Voir aussi I.

Julia 1.6

L'indexation utilisant des plages est disponible depuis Julia 1.6.

Exemples

julia> J = UniformScaling(2.)
UniformScaling{Float64}
2.0*I

julia> A = [1. 2.; 3. 4.]
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

julia> J*A
2×2 Matrix{Float64}:
 2.0  4.0
 6.0  8.0

julia> J[1:2, 1:2]
2×2 Matrix{Float64}:
 2.0  0.0
 0.0  2.0
source
LinearAlgebra.IConstant
I

Un objet de type UniformScaling, représentant une matrice identité de n'importe quelle taille.

Exemples

julia> fill(1, (5,6)) * I == fill(1, (5,6))
true

julia> [1 2im 3; 1im 2 3] * I
2×3 Matrix{Complex{Int64}}:
 1+0im  0+2im  3+0im
 0+1im  2+0im  3+0im
source
LinearAlgebra.UniformScalingMethod
(I::UniformScaling)(n::Integer)

Construit une matrice Diagonal à partir d'un UniformScaling.

Julia 1.2

Cette méthode est disponible depuis Julia 1.2.

Exemples

julia> I(3)
3×3 Diagonal{Bool, Vector{Bool}}:
 1  ⋅  ⋅
 ⋅  1  ⋅
 ⋅  ⋅  1

julia> (0.7*I)(3)
3×3 Diagonal{Float64, Vector{Float64}}:
 0.7   ⋅    ⋅
  ⋅   0.7   ⋅
  ⋅    ⋅   0.7
source
LinearAlgebra.LUType
LU <: Factorization

Type de factorisation matricielle de la factorisation LU d'une matrice carrée A. C'est le type de retour de lu, la fonction de factorisation matricielle correspondante.

Les composants individuels de la factorisation F::LU peuvent être accédés via getproperty:

ComposantDescription
F.Lpartie L (triangulaire inférieure unitaire) de LU
F.Upartie U (triangulaire supérieure) de LU
F.ppermutation Vector (droite)
F.Ppermutation Matrix (droite)

L'itération sur la factorisation produit les composants F.L, F.U et F.p.

Exemples

julia> A = [4 3; 6 3]
2×2 Matrix{Int64}:
 4  3
 6  3

julia> F = lu(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
L facteur:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U facteur:
2×2 Matrix{Float64}:
 6.0  3.0
 0.0  1.0

julia> F.L * F.U == A[F.p, :]
true

julia> l, u, p = lu(A); # déstructuration via itération

julia> l == F.L && u == F.U && p == F.p
true
source
LinearAlgebra.luFunction
lu(A::AbstractSparseMatrixCSC; check = true, q = nothing, control = get_umfpack_control()) -> F::UmfpackLU

Calculez la factorisation LU d'une matrice creuse A.

Pour une matrice creuse A avec un type d'élément réel ou complexe, le type de retour de F est UmfpackLU{Tv, Ti}, avec Tv = Float64 ou ComplexF64 respectivement et Ti est un type entier (Int32 ou Int64).

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Le permutation q peut être soit un vecteur de permutation soit nothing. Si aucun vecteur de permutation n'est fourni ou si q est nothing, le défaut d'UMFPACK est utilisé. Si la permutation n'est pas basée sur zéro, une copie basée sur zéro est faite.

Le vecteur control par défaut correspond à la configuration par défaut du package Julia SparseArrays pour UMFPACK (NB : cela est modifié par rapport aux défauts d'UMFPACK pour désactiver le raffinement itératif), mais peut être changé en passant un vecteur de longueur UMFPACK_CONTROL, voir le manuel d'UMFPACK pour les configurations possibles. Par exemple, pour réactiver le raffinement itératif :

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # lire la configuration par défaut de Julia pour une matrice creuse Float64
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # optionnel - afficher les valeurs
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # réactiver le raffinement itératif (2 est le maximum par défaut d'UMFPACK)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # résoudre Ax = b, y compris le raffinement itératif d'UMFPACK

Les composants individuels de la factorisation F peuvent être accessibles par indexation :

ComposantDescription
Lpartie L (triangulaire inférieure) de LU
Upartie U (triangulaire supérieure) de LU
ppermutation à droite Vector
qpermutation à gauche Vector
RsVector de facteurs d'échelle
:composants (L,U,p,q,Rs)

La relation entre F et A est

F.L*F.U == (F.Rs .* A)[F.p, F.q]

F prend également en charge les fonctions suivantes :

Voir aussi lu!

Note

lu(A::AbstractSparseMatrixCSC) utilise la bibliothèque UMFPACK[ACM832] qui fait partie de SuiteSparse. Comme cette bibliothèque ne prend en charge que les matrices creuses avec des éléments Float64 ou ComplexF64, lu convertit A en une copie de type SparseMatrixCSC{Float64} ou SparseMatrixCSC{ComplexF64} selon le cas.

source
lu(A, pivot = RowMaximum(); check = true, allowsingular = false) -> F::LU

Calculez la factorisation LU de A.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Par défaut, avec check = true, une erreur est également levée lorsque la décomposition produit des facteurs valides, mais que le facteur triangulaire supérieur U est de rang déficient. Cela peut être modifié en passant allowsingular = true.

Dans la plupart des cas, si A est un sous-type S de AbstractMatrix{T} avec un type d'élément T supportant +, -, * et /, le type de retour est LU{T,S{T}}.

En général, la factorisation LU implique une permutation des lignes de la matrice (correspondant à la sortie F.p décrite ci-dessous), connue sous le nom de "pivotement" (car elle correspond à choisir quelle ligne contient le "pivot", l'entrée diagonale de F.U). L'une des stratégies de pivotement suivantes peut être sélectionnée via l'argument optionnel pivot :

  • RowMaximum() (par défaut) : la stratégie de pivotement standard ; le pivot correspond à l'élément de valeur absolue maximale parmi les lignes restantes à factoriser. Cette stratégie de pivotement nécessite que le type d'élément supporte également abs et <. (C'est généralement la seule option numériquement stable pour les matrices à virgule flottante.)
  • RowNonZero() : le pivot correspond au premier élément non nul parmi les lignes restantes à factoriser. (Cela correspond au choix typique dans les calculs manuels, et est également utile pour des types de nombres algébriques plus généraux qui supportent iszero mais pas abs ou <.)
  • NoPivot() : pivotement désactivé (échouera si une entrée nulle est rencontrée dans une position de pivot, même lorsque allowsingular = true).

Les composants individuels de la factorisation F peuvent être accessibles via getproperty :

ComposantDescription
F.LL (partie triangulaire inférieure) de LU
F.UU (partie triangulaire supérieure) de LU
F.ppermutation Vector (droite)
F.Ppermutation Matrix (droite)

L'itération de la factorisation produit les composants F.L, F.U et F.p.

La relation entre F et A est

F.L*F.U == A[F.p, :]

F prend également en charge les fonctions suivantes :

Fonction prise en chargeLULU{T,Tridiagonal{T}}
/
\
inv
det
logdet
logabsdet
size
Julia 1.11

L'argument clé allowsingular a été ajouté dans Julia 1.11.

Exemples

julia> A = [4 3; 6 3]
2×2 Matrix{Int64}:
 4  3
 6  3

julia> F = lu(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
Facteur L :
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
Facteur U :
2×2 Matrix{Float64}:
 6.0  3.0
 0.0  1.0

julia> F.L * F.U == A[F.p, :]
true

julia> l, u, p = lu(A); # déstructuration via itération

julia> l == F.L && u == F.U && p == F.p
true

julia> lu([1 2; 1 2], allowsingular = true)
LU{Float64, Matrix{Float64}, Vector{Int64}}
Facteur L :
2×2 Matrix{Float64}:
 1.0  0.0
 1.0  1.0
Facteur U (déficient en rang) :
2×2 Matrix{Float64}:
 1.0  2.0
 0.0  0.0
source
LinearAlgebra.lu!Function
lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC; check=true, reuse_symbolic=true, q=nothing) -> F::UmfpackLU

Calcule la factorisation LU d'une matrice creuse A, réutilisant la factorisation symbolique d'une factorisation LU déjà existante stockée dans F. À moins que reuse_symbolic ne soit défini sur false, la matrice creuse A doit avoir un motif de non-zéros identique à la matrice utilisée pour créer la factorisation LU F, sinon une erreur est levée. Si la taille de A et F diffère, tous les vecteurs seront redimensionnés en conséquence.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

La permutation q peut être soit un vecteur de permutation, soit nothing. Si aucun vecteur de permutation n'est fourni ou si q est nothing, le défaut d'UMFPACK est utilisé. Si la permutation n'est pas basée sur zéro, une copie basée sur zéro est faite.

Voir aussi lu

Note

lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC) utilise la bibliothèque UMFPACK qui fait partie de SuiteSparse. Comme cette bibliothèque ne prend en charge que les matrices creuses avec des éléments Float64 ou ComplexF64, lu! convertira automatiquement les types en ceux définis par la factorisation LU ou SparseMatrixCSC{ComplexF64} selon le cas.

Julia 1.5

lu! pour UmfpackLU nécessite au moins Julia 1.5.

Exemples

julia> A = sparse(Float64[1.0 2.0; 0.0 3.0]);

julia> F = lu(A);

julia> B = sparse(Float64[1.0 1.0; 0.0 1.0]);

julia> lu!(F, B);

julia> F \ ones(2)
2-element Vector{Float64}:
 0.0
 1.0
source
lu!(A, pivot = RowMaximum(); check = true, allowsingular = false) -> LU

lu! est identique à lu, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Une exception InexactError est levée si la factorisation produit un nombre non représentable par le type d'élément de A, par exemple pour les types entiers.

Julia 1.11

L'argument clé allowsingular a été ajouté dans Julia 1.11.

Exemples

julia> A = [4. 3.; 6. 3.]
2×2 Matrix{Float64}:
 4.0  3.0
 6.0  3.0

julia> F = lu!(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
Facteur L :
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
Facteur U :
2×2 Matrix{Float64}:
 6.0  3.0
 0.0  1.0

julia> iA = [4 3; 6 3]
2×2 Matrix{Int64}:
 4  3
 6  3

julia> lu!(iA)
ERREUR: InexactError: Int64(0.6666666666666666)
Trace de la pile :
[...]
source
LinearAlgebra.CholeskyType
Cholesky <: Factorisation

Type de factorisation matricielle de la factorisation de Cholesky d'une matrice dense symétrique/Hermite positive définie A. C'est le type de retour de cholesky, la fonction de factorisation matricielle correspondante.

Le facteur triangulaire de Cholesky peut être obtenu à partir de la factorisation F::Cholesky via F.L et F.U, où A ≈ F.U' * F.U ≈ F.L * F.L'.

Les fonctions suivantes sont disponibles pour les objets Cholesky : size, \, inv, det, logdet et isposdef.

L'itération de la décomposition produit les composants L et U.

Exemples

julia> A = [4. 12. -16.; 12. 37. -43.; -16. -43. 98.]
3×3 Matrix{Float64}:
   4.0   12.0  -16.0
  12.0   37.0  -43.0
 -16.0  -43.0   98.0

julia> C = cholesky(A)
Cholesky{Float64, Matrix{Float64}}
U factor:
3×3 UpperTriangular{Float64, Matrix{Float64}}:
 2.0  6.0  -8.0
  ⋅   1.0   5.0
  ⋅    ⋅    3.0

julia> C.U
3×3 UpperTriangular{Float64, Matrix{Float64}}:
 2.0  6.0  -8.0
  ⋅   1.0   5.0
  ⋅    ⋅    3.0

julia> C.L
3×3 LowerTriangular{Float64, Matrix{Float64}}:
  2.0   ⋅    ⋅
  6.0  1.0   ⋅
 -8.0  5.0  3.0

julia> C.L * C.U == A
true

julia> l, u = C; # destructuration via itération

julia> l == C.L && u == C.U
true
source
LinearAlgebra.CholeskyPivotedType
CholeskyPivoted

Type de factorisation matricielle de la factorisation de Cholesky pivotée d'une matrice dense symétrique/Hermétique positive semi-définie A. C'est le type de retour de cholesky(_, ::RowMaximum), la fonction de factorisation matricielle correspondante.

Le facteur triangulaire de Cholesky peut être obtenu à partir de la factorisation F::CholeskyPivoted via F.L et F.U, et la permutation via F.p, où A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' avec Ur = F.U[1:F.rank, :] et Lr = F.L[:, 1:F.rank], ou alternativement A ≈ Up' * Up ≈ Lp * Lp' avec Up = F.U[1:F.rank, invperm(F.p)] et Lp = F.L[invperm(F.p), 1:F.rank].

Les fonctions suivantes sont disponibles pour les objets CholeskyPivoted : size, \, inv, det, et rank.

L'itération de la décomposition produit les composants L et U.

Exemples

julia> X = [1.0, 2.0, 3.0, 4.0];

julia> A = X * X';

julia> C = cholesky(A, RowMaximum(), check = false)
CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}
U facteur avec rang 1 :
4×4 UpperTriangular{Float64, Matrix{Float64}}:
 4.0  2.0  3.0  1.0
  ⋅   0.0  6.0  2.0
  ⋅    ⋅   9.0  3.0
  ⋅    ⋅    ⋅   1.0
permutation :
4-element Vector{Int64}:
 4
 2
 3
 1

julia> C.U[1:C.rank, :]' * C.U[1:C.rank, :] ≈ A[C.p, C.p]
true

julia> l, u = C; # déstructuration via itération

julia> l == C.L && u == C.U
true
source
LinearAlgebra.choleskyFunction
cholesky(A, NoPivot(); check = true) -> Cholesky

Calculez la factorisation de Cholesky d'une matrice dense symétrique définie positive A et renvoyez une Cholesky factorisation. La matrice A peut être soit une Symmetric ou Hermitian AbstractMatrix ou une AbstractMatrix parfaitement symétrique ou hermitienne.

Le facteur triangulaire de Cholesky peut être obtenu à partir de la factorisation F via F.L et F.U, où A ≈ F.U' * F.U ≈ F.L * F.L'.

Les fonctions suivantes sont disponibles pour les objets Cholesky : size, \, inv, det, logdet et isposdef.

Si vous avez une matrice A qui est légèrement non hermitienne en raison d'erreurs d'arrondi dans sa construction, enveloppez-la dans Hermitian(A) avant de la passer à cholesky afin de la traiter comme parfaitement hermitienne.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Exemples

julia> A = [4. 12. -16.; 12. 37. -43.; -16. -43. 98.]
3×3 Matrix{Float64}:
   4.0   12.0  -16.0
  12.0   37.0  -43.0
 -16.0  -43.0   98.0

julia> C = cholesky(A)
Cholesky{Float64, Matrix{Float64}}
U factor:
3×3 UpperTriangular{Float64, Matrix{Float64}}:
 2.0  6.0  -8.0
  ⋅   1.0   5.0
  ⋅    ⋅    3.0

julia> C.U
3×3 UpperTriangular{Float64, Matrix{Float64}}:
 2.0  6.0  -8.0
  ⋅   1.0   5.0
  ⋅    ⋅    3.0

julia> C.L
3×3 LowerTriangular{Float64, Matrix{Float64}}:
  2.0   ⋅    ⋅
  6.0  1.0   ⋅
 -8.0  5.0  3.0

julia> C.L * C.U == A
true
source
cholesky(A, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivoted

Calcule la factorisation de Cholesky pivotée d'une matrice dense symétrique semi-définit positive A et renvoie une factorisation CholeskyPivoted. La matrice A peut être soit une Symmetric soit une Hermitian AbstractMatrix ou une AbstractMatrix parfaitement symétrique ou hermitienne.

Le facteur triangulaire de Cholesky peut être obtenu à partir de la factorisation F via F.L et F.U, et la permutation via F.p, où A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' avec Ur = F.U[1:F.rank, :] et Lr = F.L[:, 1:F.rank], ou alternativement A ≈ Up' * Up ≈ Lp * Lp' avec Up = F.U[1:F.rank, invperm(F.p)] et Lp = F.L[invperm(F.p), 1:F.rank].

Les fonctions suivantes sont disponibles pour les objets CholeskyPivoted : size, \, inv, det, et rank.

L'argument tol détermine la tolérance pour déterminer le rang. Pour les valeurs négatives, la tolérance est la précision machine.

Si vous avez une matrice A qui est légèrement non hermitienne en raison d'erreurs d'arrondi dans sa construction, enveloppez-la dans Hermitian(A) avant de la passer à cholesky afin de la traiter comme parfaitement hermitienne.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Exemples

julia> X = [1.0, 2.0, 3.0, 4.0];

julia> A = X * X';

julia> C = cholesky(A, RowMaximum(), check = false)
CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}
U facteur avec rang 1 :
4×4 UpperTriangular{Float64, Matrix{Float64}}:
 4.0  2.0  3.0  1.0
  ⋅   0.0  6.0  2.0
  ⋅    ⋅   9.0  3.0
  ⋅    ⋅    ⋅   1.0
permutation :
4-element Vector{Int64}:
 4
 2
 3
 1

julia> C.U[1:C.rank, :]' * C.U[1:C.rank, :] ≈ A[C.p, C.p]
true

julia> l, u = C; # déstructuration via itération

julia> l == C.L && u == C.U
true
source
cholesky(A::SparseMatrixCSC; shift = 0.0, check = true, perm = nothing) -> CHOLMOD.Factor

Calcule la factorisation de Cholesky d'une matrice creuse définie positive A. A doit être une SparseMatrixCSC ou une vue Symmetric/Hermitian d'une SparseMatrixCSC. Notez que même si A n'a pas l'étiquette de type, elle doit toujours être symétrique ou hermitienne. Si perm n'est pas donné, une permutation réduisant le remplissage est utilisée. F = cholesky(A) est le plus souvent utilisé pour résoudre des systèmes d'équations avec F\b, mais les méthodes diag, det et logdet sont également définies pour F. Vous pouvez également extraire des facteurs individuels de F, en utilisant F.L. Cependant, comme le pivotement est activé par défaut, la factorisation est représentée en interne comme A == P'*L*L'*P avec une matrice de permutation P ; utiliser simplement L sans tenir compte de P donnera des réponses incorrectes. Pour inclure les effets de la permutation, il est généralement préférable d'extraire des facteurs "combinés" comme PtL = F.PtL (l'équivalent de P'*L) et LtP = F.UP (l'équivalent de L'*P).

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Définir l'argument clé optionnel shift calcule la factorisation de A+shift*I au lieu de A. Si l'argument perm est fourni, il doit être une permutation de 1:size(A,1) donnant l'ordre à utiliser (au lieu de l'ordre AMD par défaut de CHOLMOD).

Exemples

Dans l'exemple suivant, la permutation réduisant le remplissage utilisée est [3, 2, 1]. Si perm est défini sur 1:3 pour imposer aucune permutation, le nombre d'éléments non nuls dans le facteur est de 6.

julia> A = [2 1 1; 1 2 0; 1 0 2]
3×3 Matrix{Int64}:
 2  1  1
 1  2  0
 1  0  2

julia> C = cholesky(sparse(A))
SparseArrays.CHOLMOD.Factor{Float64, Int64}
type:    LLt
method:  simplicial
maxnnz:  5
nnz:     5
success: true

julia> C.p
3-element Vector{Int64}:
 3
 2
 1

julia> L = sparse(C.L);

julia> Matrix(L)
3×3 Matrix{Float64}:
 1.41421   0.0       0.0
 0.0       1.41421   0.0
 0.707107  0.707107  1.0

julia> L * L' ≈ A[C.p, C.p]
true

julia> P = sparse(1:3, C.p, ones(3))
3×3 SparseMatrixCSC{Float64, Int64} avec 3 entrées stockées:
  ⋅    ⋅   1.0
  ⋅   1.0   ⋅
 1.0   ⋅    ⋅

julia> P' * L * L' * P ≈ A
true

julia> C = cholesky(sparse(A), perm=1:3)
SparseArrays.CHOLMOD.Factor{Float64, Int64}
type:    LLt
method:  simplicial
maxnnz:  6
nnz:     6
success: true

julia> L = sparse(C.L);

julia> Matrix(L)
3×3 Matrix{Float64}:
 1.41421    0.0       0.0
 0.707107   1.22474   0.0
 0.707107  -0.408248  1.1547

julia> L * L' ≈ A
true
Note

Cette méthode utilise la bibliothèque CHOLMOD[ACM887][DavisHager2009] de SuiteSparse. CHOLMOD ne prend en charge que les types réels ou complexes en simple ou double précision. Les matrices d'entrée qui ne sont pas de ces types d'éléments seront converties en ces types si nécessaire.

De nombreuses autres fonctions de CHOLMOD sont enveloppées mais non exportées du module Base.SparseArrays.CHOLMOD.

source
LinearAlgebra.cholesky!Function
cholesky!(A::AbstractMatrix, NoPivot(); check = true) -> Cholesky

Le même que cholesky, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Une exception InexactError est levée si la factorisation produit un nombre non représentable par le type d'élément de A, par exemple pour les types entiers.

Exemples

julia> A = [1 2; 2 50]
2×2 Matrix{Int64}:
 1   2
 2  50

julia> cholesky!(A)
ERROR: InexactError: Int64(6.782329983125268)
Stacktrace:
[...]
source
cholesky!(A::AbstractMatrix, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivoted

Le même que cholesky, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Une exception InexactError est levée si la factorisation produit un nombre non représentable par le type d'élément de A, par exemple pour les types entiers.

source
cholesky!(F::CHOLMOD.Factor, A::SparseMatrixCSC; shift = 0.0, check = true) -> CHOLMOD.Factor

Calcule la factorisation de Cholesky ($LL'$) de A, en réutilisant la factorisation symbolique F. A doit être une SparseMatrixCSC ou une vue Symmetric/ Hermitian d'une SparseMatrixCSC. Notez que même si A n'a pas l'étiquette de type, elle doit toujours être symétrique ou hermétique.

Voir aussi cholesky.

Note

Cette méthode utilise la bibliothèque CHOLMOD de SuiteSparse, qui ne prend en charge que les types réels ou complexes en précision simple ou double. Les matrices d'entrée qui ne sont pas de ces types d'éléments seront converties en ces types si nécessaire.

source
LinearAlgebra.lowrankupdateFunction
lowrankupdate(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Met à jour une factorisation de Cholesky C avec le vecteur v. Si A = C.U'C.U alors CC = cholesky(C.U'C.U + v*v') mais le calcul de CC n'utilise que O(n^2) opérations.

source
lowrankupdate(F::CHOLMOD.Factor, C::AbstractArray) -> FF::CHOLMOD.Factor

Obtenez une factorisation LDLt de A + C*C' donnée une factorisation LDLt ou LLt F de A.

Le facteur retourné est toujours une factorisation LDLt.

Voir aussi lowrankupdate!, lowrankdowndate, lowrankdowndate!.

source
LinearAlgebra.lowrankdowndateFunction
lowrankdowndate(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Met à jour une factorisation de Cholesky C avec le vecteur v. Si A = C.U'C.U alors CC = cholesky(C.U'C.U - v*v') mais le calcul de CC n'utilise que O(n^2) opérations.

source
lowrankdowndate(F::CHOLMOD.Factor, C::AbstractArray) -> FF::CHOLMOD.Factor

Obtenez une factorisation LDLt de A + C*C' donnée une factorisation LDLt ou LLt F de A.

Le facteur retourné est toujours une factorisation LDLt.

Voir aussi lowrankdowndate!, lowrankupdate, lowrankupdate!.

source
LinearAlgebra.lowrankupdate!Function
lowrankupdate!(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Met à jour une factorisation de Cholesky C avec le vecteur v. Si A = C.U'C.U alors CC = cholesky(C.U'C.U + v*v') mais le calcul de CC n'utilise que O(n^2) opérations. La factorisation d'entrée C est mise à jour sur place de sorte qu'à la sortie C == CC. Le vecteur v est détruit pendant le calcul.

source
lowrankupdate!(F::CHOLMOD.Factor, C::AbstractArray)

Met à jour une factorisation LDLt ou LLt F de A à une factorisation de A + C*C'.

Les factorizations LLt sont converties en LDLt.

Voir aussi lowrankupdate, lowrankdowndate, lowrankdowndate!.

source
LinearAlgebra.lowrankdowndate!Function
lowrankdowndate!(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Met à jour une factorisation de Cholesky C avec le vecteur v. Si A = C.U'C.U alors CC = cholesky(C.U'C.U - v*v') mais le calcul de CC n'utilise que O(n^2) opérations. La factorisation d'entrée C est mise à jour sur place de sorte qu'à la sortie C == CC. Le vecteur v est détruit pendant le calcul.

source
lowrankdowndate!(F::CHOLMOD.Factor, C::AbstractArray)

Met à jour une factorisation LDLt ou LLt F de A à une factorisation de A - C*C'.

Les factorizations LLt sont converties en LDLt.

Voir aussi lowrankdowndate, lowrankupdate, lowrankupdate!.

source
LinearAlgebra.LDLtType
LDLt <: Factorisation

Type de factorisation matricielle de la factorisation LDLt d'une matrice réelle SymTridiagonal S telle que S = L*Diagonal(d)*L', où L est une matrice UnitLowerTriangular et d est un vecteur. L'utilisation principale d'une factorisation LDLt F = ldlt(S) est de résoudre le système d'équations linéaires Sx = b avec F\b. C'est le type de retour de ldlt, la fonction de factorisation matricielle correspondante.

Les composants individuels de la factorisation F::LDLt peuvent être accédés via getproperty :

ComposantDescription
F.LL (partie triangulaire inférieure unitaire) de LDLt
F.DD (partie diagonale) de LDLt
F.LtLt (partie triangulaire supérieure unitaire) de LDLt
F.dvaleurs diagonales de D sous forme de Vector

Exemples

julia> S = SymTridiagonal([3., 4., 5.], [1., 2.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 3.0  1.0   ⋅
 1.0  4.0  2.0
  ⋅   2.0  5.0

julia> F = ldlt(S)
LDLt{Float64, SymTridiagonal{Float64, Vector{Float64}}}
Facteur L :
3×3 UnitLowerTriangular{Float64, SymTridiagonal{Float64, Vector{Float64}}}:
 1.0        ⋅         ⋅
 0.333333  1.0        ⋅
 0.0       0.545455  1.0
Facteur D :
3×3 Diagonal{Float64, Vector{Float64}}:
 3.0   ⋅        ⋅
  ⋅   3.66667   ⋅
  ⋅    ⋅       3.90909
source
LinearAlgebra.ldltFunction
ldlt(S::SymTridiagonal) -> LDLt

Calcule une factorisation LDLt (c'est-à-dire, $LDL^T$) de la matrice tridiagonale symétrique réelle S telle que S = L*Diagonal(d)*L'L est une matrice triangulaire inférieure unitaire et d est un vecteur. L'utilisation principale d'une factorisation LDLt F = ldlt(S) est de résoudre le système d'équations linéaires Sx = b avec F\b.

Voir aussi bunchkaufman pour une factorisation similaire, mais pivotée, de matrices symétriques ou hermitiennes arbitraires.

Exemples

julia> S = SymTridiagonal([3., 4., 5.], [1., 2.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 3.0  1.0   ⋅
 1.0  4.0  2.0
  ⋅   2.0  5.0

julia> ldltS = ldlt(S);

julia> b = [6., 7., 8.];

julia> ldltS \ b
3-element Vector{Float64}:
 1.7906976744186047
 0.627906976744186
 1.3488372093023255

julia> S \ b
3-element Vector{Float64}:
 1.7906976744186047
 0.627906976744186
 1.3488372093023255
source
ldlt(A::SparseMatrixCSC; shift = 0.0, check = true, perm=nothing) -> CHOLMOD.Factor

Calcule la factorisation $LDL'$ d'une matrice creuse A. A doit être une SparseMatrixCSC ou une vue Symmetric/Hermitian d'une SparseMatrixCSC. Notez que même si A n'a pas l'étiquette de type, elle doit toujours être symétrique ou hermitienne. Une permutation réduisant le remplissage est utilisée. F = ldlt(A) est le plus souvent utilisé pour résoudre des systèmes d'équations A*x = b avec F\b. L'objet de factorisation retourné F prend également en charge les méthodes diag, det, logdet et inv. Vous pouvez extraire des facteurs individuels de F en utilisant F.L. Cependant, comme le pivotement est activé par défaut, la factorisation est représentée en interne comme A == P'*L*D*L'*P avec une matrice de permutation P ; utiliser simplement L sans tenir compte de P donnera des réponses incorrectes. Pour inclure les effets de la permutation, il est généralement préférable d'extraire des facteurs "combinés" comme PtL = F.PtL (l'équivalent de P'*L) et LtP = F.UP (l'équivalent de L'*P). La liste complète des facteurs pris en charge est :L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Le paramètre optionnel shift calcule la factorisation de A+shift*I au lieu de A. Si l'argument perm est fourni, il doit être une permutation de 1:size(A,1) donnant l'ordre à utiliser (au lieu de l'ordre AMD par défaut de CHOLMOD).

Note

Cette méthode utilise la bibliothèque CHOLMOD[ACM887][DavisHager2009] de SuiteSparse. CHOLMOD ne prend en charge que les types réels ou complexes en simple ou double précision. Les matrices d'entrée qui ne sont pas de ces types d'éléments seront converties en ces types si nécessaire.

De nombreuses autres fonctions de CHOLMOD sont enveloppées mais ne sont pas exportées du module Base.SparseArrays.CHOLMOD.

source
LinearAlgebra.ldlt!Function
ldlt!(S::SymTridiagonal) -> LDLt

Identique à ldlt, mais économise de l'espace en écrasant l'entrée S, au lieu de créer une copie.

Exemples

julia> S = SymTridiagonal([3., 4., 5.], [1., 2.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 3.0  1.0   ⋅
 1.0  4.0  2.0
  ⋅   2.0  5.0

julia> ldltS = ldlt!(S);

julia> ldltS === S
false

julia> S
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 3.0       0.333333   ⋅
 0.333333  3.66667   0.545455
  ⋅        0.545455  3.90909
source
ldlt!(F::CHOLMOD.Factor, A::SparseMatrixCSC; shift = 0.0, check = true) -> CHOLMOD.Factor

Calcule la factorisation $LDL'$ de A, en réutilisant la factorisation symbolique F. A doit être un SparseMatrixCSC ou une vue Symmetric/Hermitian d'un SparseMatrixCSC. Notez que même si A n'a pas l'étiquette de type, elle doit toujours être symétrique ou hermitienne.

Voir aussi ldlt.

Note

Cette méthode utilise la bibliothèque CHOLMOD de SuiteSparse, qui ne prend en charge que les types réels ou complexes en précision simple ou double. Les matrices d'entrée qui ne sont pas de ces types d'éléments seront converties en ces types si nécessaire.

source
LinearAlgebra.QRType
QR <: Factorization

Une factorisation matricielle QR stockée dans un format compact, généralement obtenue à partir de qr. Si $A$ est une matrice m×n, alors

\[A = Q R\]

$Q$ est une matrice orthogonale/unitaire et $R$ est triangulaire supérieure. La matrice $Q$ est stockée sous la forme d'une séquence de réflecteurs de Householder $v_i$ et de coefficients $\tau_i$ où :

\[Q = \prod_{i=1}^{\min(m,n)} (I - \tau_i v_i v_i^T).\]

L'itération de la décomposition produit les composants Q et R.

L'objet a deux champs :

  • factors est une matrice m×n.

    • La partie triangulaire supérieure contient les éléments de $R$, c'est-à-dire R = triu(F.factors) pour un objet QR F.
    • La partie subdiagonale contient les réflecteurs $v_i$ stockés dans un format compact où $v_i$ est la $i$-ème colonne de la matrice V = I + tril(F.factors, -1).
  • τ est un vecteur de longueur min(m,n) contenant les coefficients $au_i$.

source
LinearAlgebra.QRCompactWYType
QRCompactWY <: Factorization

Une factorisation matricielle QR stockée dans un format compact bloqué, généralement obtenue à partir de qr. Si $A$ est une matrice m×n, alors

\[A = Q R\]

$Q$ est une matrice orthogonale/unitaire et $R$ est triangulaire supérieure. C'est similaire au format QR sauf que la matrice orthogonale/unitaire $Q$ est stockée au format Compact WY [Schreiber1989]. Pour la taille de bloc $n_b$, elle est stockée sous la forme d'une matrice trapézoïdale inférieure m×n $V$ et d'une matrice $T = (T_1 \; T_2 \; ... \; T_{b-1} \; T_b')$ composée de $b = \lceil \min(m,n) / n_b \rceil$ matrices triangulaires supérieures $T_j$ de taille $n_b$×$n_b$ ($j = 1, ..., b-1$) et d'une matrice trapézoïdale supérieure $n_b$×$\min(m,n) - (b-1) n_b$ $T_b'$ ($j=b$) dont la partie carrée supérieure est notée avec $T_b$ satisfaisant

\[Q = \prod_{i=1}^{\min(m,n)} (I - \tau_i v_i v_i^T) = \prod_{j=1}^{b} (I - V_j T_j V_j^T)\]

tel que $v_i$ est la $i$-ème colonne de $V$, $\tau_i$ est le $i$-ème élément de [diag(T_1); diag(T_2); …; diag(T_b)], et $(V_1 \; V_2 \; ... \; V_b)$ est le bloc gauche m×min(m, n) de $V$. Lorsqu'il est construit à l'aide de qr, la taille de bloc est donnée par $n_b = \min(m, n, 36)$.

L'itération de la décomposition produit les composants Q et R.

L'objet a deux champs :

  • factors, comme dans le type QR, est une matrice m×n.

    • La partie triangulaire supérieure contient les éléments de $R$, c'est-à-dire R = triu(F.factors) pour un objet QR F.
    • La partie subdiagonale contient les réflecteurs $v_i$ stockés dans un format compact tel que V = I + tril(F.factors, -1).
  • T est une matrice $n_b$-par-$\min(m,n)$ comme décrit ci-dessus. Les éléments subdiagonaux pour chaque matrice triangulaire $T_j$ sont ignorés.

Note

Ce format ne doit pas être confondu avec l'ancienne représentation WY [Bischof1987].

source
LinearAlgebra.QRPivotedType
QRPivoted <: Factorization

Une factorisation matricielle QR avec pivotement de colonnes dans un format compact, généralement obtenue à partir de qr. Si $A$ est une matrice m×n, alors

\[A P = Q R\]

$P$ est une matrice de permutation, $Q$ est une matrice orthogonale/unitaire et $R$ est triangulaire supérieure. La matrice $Q$ est stockée sous forme d'une séquence de réflecteurs de Householder :

\[Q = \prod_{i=1}^{\min(m,n)} (I - \tau_i v_i v_i^T).\]

L'itération de la décomposition produit les composants Q, R et p.

L'objet a trois champs :

  • factors est une matrice m×n.

    • La partie triangulaire supérieure contient les éléments de $R$, c'est-à-dire R = triu(F.factors) pour un objet QR F.
    • La partie sous-diagonale contient les réflecteurs $v_i$ stockés dans un format compact où $v_i$ est la $i$-ème colonne de la matrice V = I + tril(F.factors, -1).
  • τ est un vecteur de longueur min(m,n) contenant les coefficients $au_i$.

  • jpvt est un vecteur entier de longueur n correspondant à la permutation $P$.

source
LinearAlgebra.qrFunction
qr(A::SparseMatrixCSC; tol=_default_tol(A), ordering=ORDERING_DEFAULT) -> QRSparse

Calcule la factorisation QR d'une matrice creuse A. Des permutations de lignes et de colonnes réduisant le remplissage sont utilisées de sorte que F.R = F.Q'*A[F.prow,F.pcol]. L'application principale de ce type est de résoudre des problèmes de moindres carrés ou sous-déterminés avec \. La fonction appelle la bibliothèque C SPQR[ACM933].

Note

qr(A::SparseMatrixCSC) utilise la bibliothèque SPQR qui fait partie de SuiteSparse. Comme cette bibliothèque ne prend en charge que les matrices creuses avec des éléments de type Float64 ou ComplexF64, à partir de Julia v1.4, qr convertit A en une copie de type SparseMatrixCSC{Float64} ou SparseMatrixCSC{ComplexF64} selon le cas.

Exemples

julia> A = sparse([1,2,3,4], [1,1,2,2], [1.0,1.0,1.0,1.0])
4×2 SparseMatrixCSC{Float64, Int64} avec 4 entrées stockées :
 1.0   ⋅
 1.0   ⋅
  ⋅   1.0
  ⋅   1.0

julia> qr(A)
SparseArrays.SPQR.QRSparse{Float64, Int64}
Facteur Q :
4×4 SparseArrays.SPQR.QRSparseQ{Float64, Int64}
Facteur R :
2×2 SparseMatrixCSC{Float64, Int64} avec 2 entrées stockées :
 -1.41421    ⋅
   ⋅       -1.41421
Permutation de lignes :
Vecteur de 4 éléments Int64 :
 1
 3
 4
 2
Permutation de colonnes :
Vecteur de 2 éléments Int64 :
 1
 2
source
qr(A, pivot = NoPivot(); blocksize) -> F

Calcule la factorisation QR de la matrice A : une matrice orthogonale (ou unitaire si A est à valeurs complexes) Q, et une matrice triangulaire supérieure R telle que

\[A = Q R\]

L'objet retourné F stocke la factorisation dans un format compact :

  • si pivot == ColumnNorm() alors F est un objet QRPivoted,
  • sinon, si le type d'élément de A est un type BLAS (Float32, Float64, ComplexF32 ou ComplexF64), alors F est un objet QRCompactWY,
  • sinon F est un objet QR.

Les composants individuels de la décomposition F peuvent être récupérés via des accesseurs de propriété :

  • F.Q : la matrice orthogonale/unitaire Q
  • F.R : la matrice triangulaire supérieure R
  • F.p : le vecteur de permutation du pivot (QRPivoted uniquement)
  • F.P : la matrice de permutation du pivot (QRPivoted uniquement)
Note

Chaque référence au facteur triangulaire supérieur via F.R alloue un nouveau tableau. Il est donc conseillé de mettre en cache ce tableau, par exemple, en R = F.R et de continuer à travailler avec R.

L'itération de la décomposition produit les composants Q, R, et si présent p.

Les fonctions suivantes sont disponibles pour les objets QR : inv, size, et \. Lorsque A est rectangulaire, \ renverra une solution des moindres carrés et si la solution n'est pas unique, celle avec la plus petite norme est retournée. Lorsque A n'est pas de rang complet, une factorisation avec (colonne) pivot est requise pour obtenir une solution de norme minimale.

La multiplication par rapport à Q complet/carré ou non complet/carré est autorisée, c'est-à-dire que F.Q*F.R et F.Q*A sont pris en charge. Une matrice Q peut être convertie en une matrice régulière avec Matrix. Cette opération renvoie le facteur Q "mince", c'est-à-dire que si A est m×n avec m>=n, alors Matrix(F.Q) produit une matrice m×n avec des colonnes orthonormales. Pour récupérer le facteur Q "complet", une matrice orthogonale m×m, utilisez F.Q*I ou collect(F.Q). Si m<=n, alors Matrix(F.Q) produit une matrice orthogonale m×m.

La taille de bloc pour la décomposition QR peut être spécifiée par l'argument clé blocksize :: Integer lorsque pivot == NoPivot() et A isa StridedMatrix{<:BlasFloat}. Elle est ignorée lorsque blocksize > minimum(size(A)). Voir QRCompactWY.

Julia 1.4

L'argument clé blocksize nécessite Julia 1.4 ou une version ultérieure.

Exemples

julia> A = [3.0 -6.0; 4.0 -8.0; 0.0 1.0]
3×2 Matrix{Float64}:
 3.0  -6.0
 4.0  -8.0
 0.0   1.0

julia> F = qr(A)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}, Matrix{Float64}}
Facteur Q : 3×3 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
Facteur R :
2×2 Matrix{Float64}:
 -5.0  10.0
  0.0  -1.0

julia> F.Q * F.R == A
true
Note

qr renvoie plusieurs types car LAPACK utilise plusieurs représentations qui minimisent les besoins de stockage mémoire des produits de réflecteurs élémentaires de Householder, de sorte que les matrices Q et R peuvent être stockées de manière compacte plutôt que comme deux matrices denses séparées.

source
LinearAlgebra.qr!Function
qr!(A, pivot = NoPivot(); blocksize)

qr! est identique à qr lorsque A est un sous-type de AbstractMatrix, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Une exception InexactError est levée si la factorisation produit un nombre non représentable par le type d'élément de A, par exemple pour les types entiers.

Julia 1.4

L'argument clé blocksize nécessite Julia 1.4 ou une version ultérieure.

Exemples

julia> a = [1. 2.; 3. 4.]
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

julia> qr!(a)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}, Matrix{Float64}}
Facteur Q : 2×2 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
Facteur R :
2×2 Matrix{Float64}:
 -3.16228  -4.42719
  0.0      -0.632456

julia> a = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> qr!(a)
ERREUR : InexactError: Int64(3.1622776601683795)
Trace de la pile :
[...]
source
LinearAlgebra.LQType
LQ <: Factorization

Type de factorisation matricielle de la factorisation LQ d'une matrice A. La décomposition LQ est la décomposition QR de transpose(A). C'est le type de retour de lq, la fonction de factorisation matricielle correspondante.

Si S::LQ est l'objet de factorisation, le composant triangulaire inférieur peut être obtenu via S.L, et le composant orthogonal/unitaire via S.Q, tel que A ≈ S.L*S.Q.

L'itération de la décomposition produit les composants S.L et S.Q.

Exemples

julia> A = [5. 7.; -2. -4.]
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> S = lq(A)
LQ{Float64, Matrix{Float64}, Vector{Float64}}
L facteur:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q facteur: 2×2 LinearAlgebra.LQPackedQ{Float64, Matrix{Float64}, Vector{Float64}}

julia> S.L * S.Q
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> l, q = S; # déstructuration via itération

julia> l == S.L &&  q == S.Q
true
source
LinearAlgebra.lqFunction
lq(A) -> S::LQ

Calculez la décomposition LQ de A. Le composant triangulaire inférieur de la décomposition peut être obtenu à partir de l'objet LQ S via S.L, et le composant orthogonal/unitaire via S.Q, de sorte que A ≈ S.L*S.Q.

L'itération de la décomposition produit les composants S.L et S.Q.

La décomposition LQ est la décomposition QR de transpose(A), et elle est utile pour calculer la solution à norme minimale lq(A) \ b à un système d'équations sous-déterminé (A a plus de colonnes que de lignes, mais a un rang de ligne complet).

Exemples

julia> A = [5. 7.; -2. -4.]
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> S = lq(A)
LQ{Float64, Matrix{Float64}, Vector{Float64}}
L facteur :
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q facteur : 2×2 LinearAlgebra.LQPackedQ{Float64, Matrix{Float64}, Vector{Float64}}

julia> S.L * S.Q
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> l, q = S; # déstructuration via itération

julia> l == S.L &&  q == S.Q
true
source
LinearAlgebra.lq!Function
lq!(A) -> LQ

Calculez la factorisation LQ de A, en utilisant la matrice d'entrée comme espace de travail. Voir aussi lq.

source
LinearAlgebra.BunchKaufmanType
BunchKaufman <: Factorization

Type de factorisation matricielle de la factorisation de Bunch-Kaufman d'une matrice symétrique ou hermitienne A sous la forme P'UDU'P ou P'LDL'P, selon que le triangle supérieur (par défaut) ou le triangle inférieur est stocké dans A. Si A est symétrique complexe, alors U' et L' désignent les transposées non conjuguées, c'est-à-dire transpose(U) et transpose(L), respectivement. C'est le type de retour de bunchkaufman, la fonction de factorisation matricielle correspondante.

Si S::BunchKaufman est l'objet de factorisation, les composants peuvent être obtenus via S.D, S.U ou S.L selon ce qui est approprié étant donné S.uplo, et S.p.

L'itération de la décomposition produit les composants S.D, S.U ou S.L selon ce qui est approprié étant donné S.uplo, et S.p.

Exemples

julia> A = Float64.([1 2; 2 3])
2×2 Matrix{Float64}:
 1.0  2.0
 2.0  3.0

julia> S = bunchkaufman(A) # A est enveloppé en interne par Symmetric(A)
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D facteur:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U facteur:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutation:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # déstructuration via itération

julia> d == S.D && u == S.U && p == S.p
true

julia> S = bunchkaufman(Symmetric(A, :L))
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D facteur:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L facteur:
2×2 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
permutation:
2-element Vector{Int64}:
 2
 1
source
LinearAlgebra.bunchkaufmanFunction
bunchkaufman(A, rook::Bool=false; check = true) -> S::BunchKaufman

Calculez la factorisation de Bunch-Kaufman [Bunch1977] d'une matrice symétrique ou hermitienne A sous la forme P'*U*D*U'*P ou P'*L*D*L'*P, selon le triangle qui est stocké dans A, et renvoyez un objet BunchKaufman. Notez que si A est symétrique complexe, alors U' et L' désignent les transposées non conjuguées, c'est-à-dire transpose(U) et transpose(L).

L'itération de la décomposition produit les composants S.D, S.U ou S.L selon ce qui est approprié étant donné S.uplo, et S.p.

Si rook est true, un pivotement de rook est utilisé. Si rook est faux, le pivotement de rook n'est pas utilisé.

Lorsque check = true, une erreur est levée si la décomposition échoue. Lorsque check = false, la responsabilité de vérifier la validité de la décomposition (via issuccess) incombe à l'utilisateur.

Les fonctions suivantes sont disponibles pour les objets BunchKaufman : size, \, inv, issymmetric, ishermitian, getindex.

Exemples

julia> A = Float64.([1 2; 2 3])
2×2 Matrix{Float64}:
 1.0  2.0
 2.0  3.0

julia> S = bunchkaufman(A) # A est enveloppé en interne par Symmetric(A)
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
Facteur D :
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
Facteur U :
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutation :
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # déstructuration via itération

julia> d == S.D && u == S.U && p == S.p
true

julia> S.U*S.D*S.U' - S.P*A*S.P'
2×2 Matrix{Float64}:
 0.0  0.0
 0.0  0.0

julia> S = bunchkaufman(Symmetric(A, :L))
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
Facteur D :
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
Facteur L :
2×2 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
permutation :
2-element Vector{Int64}:
 2
 1

julia> S.L*S.D*S.L' - A[S.p, S.p]
2×2 Matrix{Float64}:
 0.0  0.0
 0.0  0.0
source
LinearAlgebra.bunchkaufman!Function
bunchkaufman!(A, rook::Bool=false; check = true) -> BunchKaufman

bunchkaufman! est identique à bunchkaufman, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie.

source
LinearAlgebra.EigenType
Eigen <: Factorization

Type de factorisation de matrice de la décomposition en valeurs propres/spectrales d'une matrice carrée A. C'est le type de retour de eigen, la fonction de factorisation de matrice correspondante.

Si F::Eigen est l'objet de factorisation, les valeurs propres peuvent être obtenues via F.values et les vecteurs propres comme les colonnes de la matrice F.vectors. (Le k-ième vecteur propre peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Exemples

julia> F = eigen([1.0 0.0 0.0; 0.0 3.0 0.0; 0.0 0.0 18.0])
Eigen{Float64, Float64, Matrix{Float64}, Vector{Float64}}
values:
3-element Vector{Float64}:
  1.0
  3.0
 18.0
vectors:
3×3 Matrix{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia> F.values
3-element Vector{Float64}:
  1.0
  3.0
 18.0

julia> F.vectors
3×3 Matrix{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia> vals, vecs = F; # destructuring via iteration

julia> vals == F.values && vecs == F.vectors
true
source
LinearAlgebra.GeneralizedEigenType
GeneralizedEigen <: Factorization

Type de factorisation matricielle de la décomposition généralisée des valeurs propres/spectrales de A et B. C'est le type de retour de eigen, la fonction de factorisation matricielle correspondante, lorsqu'elle est appelée avec deux arguments matriciels.

Si F::GeneralizedEigen est l'objet de factorisation, les valeurs propres peuvent être obtenues via F.values et les vecteurs propres comme les colonnes de la matrice F.vectors. (Le k-ième vecteur propre peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Exemples

julia> A = [1 0; 0 -1]
2×2 Matrix{Int64}:
 1   0
 0  -1

julia> B = [0 1; 1 0]
2×2 Matrix{Int64}:
 0  1
 1  0

julia> F = eigen(A, B)
GeneralizedEigen{ComplexF64, ComplexF64, Matrix{ComplexF64}, Vector{ComplexF64}}
values:
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im
vectors:
2×2 Matrix{ComplexF64}:
  0.0+1.0im   0.0-1.0im
 -1.0+0.0im  -1.0-0.0im

julia> F.values
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im

julia> F.vectors
2×2 Matrix{ComplexF64}:
  0.0+1.0im   0.0-1.0im
 -1.0+0.0im  -1.0-0.0im

julia> vals, vecs = F; # destructuring via iteration

julia> vals == F.values && vecs == F.vectors
true
source
LinearAlgebra.eigvalsFunction
eigvals(A; permute::Bool=true, scale::Bool=true, sortby) -> values

Retourne les valeurs propres de A.

Pour les matrices non symétriques générales, il est possible de spécifier comment la matrice est équilibrée avant le calcul des valeurs propres. Les mots-clés permute, scale et sortby sont les mêmes que pour eigen.

Exemples

julia> diag_matrix = [1 0; 0 4]
2×2 Matrix{Int64}:
 1  0
 0  4

julia> eigvals(diag_matrix)
2-element Vector{Float64}:
 1.0
 4.0
source

Pour une entrée scalaire, eigvals renverra un scalaire.

Exemples

julia> eigvals(-2)
-2
source
eigvals(A, B) -> valeurs

Calculez les valeurs propres généralisées de A et B.

Exemples

julia> A = [1 0; 0 -1]
2×2 Matrix{Int64}:
 1   0
 0  -1

julia> B = [0 1; 1 0]
2×2 Matrix{Int64}:
 0  1
 1  0

julia> eigvals(A,B)
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im
source
eigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> valeurs

Retourne les valeurs propres de A. Il est possible de calculer seulement un sous-ensemble des valeurs propres en spécifiant une UnitRange irange couvrant les indices des valeurs propres triées, par exemple, les 2ème à 8ème valeurs propres.

Exemples

julia> A = SymTridiagonal([1.; 2.; 1.], [2.; 3.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 1.0  2.0   ⋅
 2.0  2.0  3.0
  ⋅   3.0  1.0

julia> eigvals(A, 2:2)
1-element Vector{Float64}:
 0.9999999999999996

julia> eigvals(A)
3-element Vector{Float64}:
 -2.1400549446402604
  1.0000000000000002
  5.140054944640259
source
eigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> values

Retourne les valeurs propres de A. Il est possible de calculer seulement un sous-ensemble des valeurs propres en spécifiant une paire vl et vu pour les limites inférieure et supérieure des valeurs propres.

Exemples

julia> A = SymTridiagonal([1.; 2.; 1.], [2.; 3.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 1.0  2.0   ⋅
 2.0  2.0  3.0
  ⋅   3.0  1.0

julia> eigvals(A, -1, 2)
1-element Vector{Float64}:
 1.0000000000000009

julia> eigvals(A)
3-element Vector{Float64}:
 -2.1400549446402604
  1.0000000000000002
  5.140054944640259
source
LinearAlgebra.eigvals!Function
eigvals!(A; permute::Bool=true, scale::Bool=true, sortby) -> valeurs

Identique à eigvals, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Les mots-clés permute, scale et sortby sont les mêmes que pour eigen.

Note

La matrice d'entrée A ne contiendra pas ses valeurs propres après que eigvals! ait été appelé dessus - A est utilisé comme espace de travail.

Exemples

julia> A = [1. 2.; 3. 4.]
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

julia> eigvals!(A)
2-element Vector{Float64}:
 -0.3722813232690143
  5.372281323269014

julia> A
2×2 Matrix{Float64}:
 -0.372281  -1.0
  0.0        5.37228
source
eigvals!(A, B; sortby) -> values

Identique à eigvals, mais économise de l'espace en écrasant l'entrée A (et B), au lieu de créer des copies.

Note

Les matrices d'entrée A et B ne contiendront pas leurs valeurs propres après l'appel de eigvals!. Elles sont utilisées comme espaces de travail.

Exemples

julia> A = [1. 0.; 0. -1.]
2×2 Matrix{Float64}:
 1.0   0.0
 0.0  -1.0

julia> B = [0. 1.; 1. 0.]
2×2 Matrix{Float64}:
 0.0  1.0
 1.0  0.0

julia> eigvals!(A, B)
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im

julia> A
2×2 Matrix{Float64}:
 -0.0  -1.0
  1.0  -0.0

julia> B
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
source
eigvals!(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> values

Identique à eigvals, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. irange est une plage d'indices de valeurs propres à rechercher - par exemple, les 2ème à 8ème valeurs propres.

source
eigvals!(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> values

Identique à eigvals, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. vl est la borne inférieure de l'intervalle à rechercher pour les valeurs propres, et vu est la borne supérieure.

source
LinearAlgebra.eigmaxFunction
eigmax(A; permute::Bool=true, scale::Bool=true)

Retourne la plus grande valeur propre de A. L'option permute=true permute la matrice pour se rapprocher d'une forme triangulaire supérieure, et scale=true met à l'échelle la matrice par ses éléments diagonaux pour rendre les lignes et les colonnes plus égales en norme. Notez que si les valeurs propres de A sont complexes, cette méthode échouera, car les nombres complexes ne peuvent pas être triés.

Exemples

julia> A = [0 im; -im 0]
2×2 Matrix{Complex{Int64}}:
 0+0im  0+1im
 0-1im  0+0im

julia> eigmax(A)
1.0

julia> A = [0 im; -1 0]
2×2 Matrix{Complex{Int64}}:
  0+0im  0+1im
 -1+0im  0+0im

julia> eigmax(A)
ERROR: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` ne peut pas avoir de valeurs propres complexes.
Stacktrace:
[...]
source
LinearAlgebra.eigminFunction
eigmin(A; permute::Bool=true, scale::Bool=true)

Retourne la plus petite valeur propre de A. L'option permute=true permute la matrice pour se rapprocher d'une forme triangulaire supérieure, et scale=true met à l'échelle la matrice par ses éléments diagonaux pour rendre les lignes et les colonnes plus égales en norme. Notez que si les valeurs propres de A sont complexes, cette méthode échouera, car les nombres complexes ne peuvent pas être triés.

Exemples

julia> A = [0 im; -im 0]
2×2 Matrix{Complex{Int64}}:
 0+0im  0+1im
 0-1im  0+0im

julia> eigmin(A)
-1.0

julia> A = [0 im; -1 0]
2×2 Matrix{Complex{Int64}}:
  0+0im  0+1im
 -1+0im  0+0im

julia> eigmin(A)
ERROR: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` ne peut pas avoir de valeurs propres complexes.
Stacktrace:
[...]
source
LinearAlgebra.eigvecsFunction
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

Renvoie une matrice M dont les colonnes sont les vecteurs propres de A. (Le k-ème vecteur propre peut être obtenu à partir de la tranche M[:, k].)

Si le vecteur optionnel de valeurs propres eigvals est spécifié, eigvecs renvoie les vecteurs propres correspondants spécifiques.

Exemples

julia> A = SymTridiagonal([1.; 2.; 1.], [2.; 3.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 1.0  2.0   ⋅
 2.0  2.0  3.0
  ⋅   3.0  1.0

julia> eigvals(A)
3-element Vector{Float64}:
 -2.1400549446402604
  1.0000000000000002
  5.140054944640259

julia> eigvecs(A)
3×3 Matrix{Float64}:
  0.418304  -0.83205      0.364299
 -0.656749  -7.39009e-16  0.754109
  0.627457   0.5547       0.546448

julia> eigvecs(A, [1.])
3×1 Matrix{Float64}:
  0.8320502943378438
  4.263514128092366e-17
 -0.5547001962252291
source
eigvecs(A; permute::Bool=true, scale::Bool=true, `sortby`) -> Matrix

Renvoie une matrice M dont les colonnes sont les vecteurs propres de A. (Le k-ème vecteur propre peut être obtenu à partir de la tranche M[:, k].) Les mots-clés permute, scale et sortby sont les mêmes que pour eigen.

Exemples

julia> eigvecs([1.0 0.0 0.0; 0.0 3.0 0.0; 0.0 0.0 18.0])
3×3 Matrix{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0
source
eigvecs(A, B) -> Matrix

Retourne une matrice M dont les colonnes sont les vecteurs propres généralisés de A et B. (Le k-ème vecteur propre peut être obtenu à partir de la tranche M[:, k].)

Exemples

julia> A = [1 0; 0 -1]
2×2 Matrix{Int64}:
 1   0
 0  -1

julia> B = [0 1; 1 0]
2×2 Matrix{Int64}:
 0  1
 1  0

julia> eigvecs(A, B)
2×2 Matrix{ComplexF64}:
  0.0+1.0im   0.0-1.0im
 -1.0+0.0im  -1.0-0.0im
source
LinearAlgebra.eigenFunction
eigen(A; permute::Bool=true, scale::Bool=true, sortby) -> Eigen

Calcule la décomposition en valeurs propres de A, retournant un objet de factorisation Eigen F qui contient les valeurs propres dans F.values et les vecteurs propres dans les colonnes de la matrice F.vectors. Cela correspond à la résolution d'un problème de valeurs propres de la forme Ax = λx, où A est une matrice, x est un vecteur propre, et λ est une valeur propre. (Le k-ième vecteur propre peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Les fonctions suivantes sont disponibles pour les objets Eigen : inv, det, et isposdef.

Pour les matrices générales non symétriques, il est possible de spécifier comment la matrice est équilibrée avant le calcul des vecteurs propres. L'option permute=true permute la matrice pour la rapprocher d'une forme triangulaire supérieure, et scale=true met à l'échelle la matrice par ses éléments diagonaux pour rendre les lignes et les colonnes plus égales en norme. La valeur par défaut est true pour les deux options.

Par défaut, les valeurs et vecteurs propres sont triés lexicographiquement par (real(λ),imag(λ)). Une fonction de comparaison différente by(λ) peut être passée à sortby, ou vous pouvez passer sortby=nothing pour laisser les valeurs propres dans un ordre arbitraire. Certains types de matrices spéciaux (par exemple Diagonal ou SymTridiagonal) peuvent implémenter leur propre convention de tri et ne pas accepter un mot-clé sortby.

Exemples

julia> F = eigen([1.0 0.0 0.0; 0.0 3.0 0.0; 0.0 0.0 18.0])
Eigen{Float64, Float64, Matrix{Float64}, Vector{Float64}}
values:
3-element Vector{Float64}:
  1.0
  3.0
 18.0
vectors:
3×3 Matrix{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia> F.values
3-element Vector{Float64}:
  1.0
  3.0
 18.0

julia> F.vectors
3×3 Matrix{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia> vals, vecs = F; # destructuration via itération

julia> vals == F.values && vecs == F.vectors
true
source
eigen(A, B; sortby) -> GeneralizedEigen

Calcule la décomposition des valeurs propres généralisées de A et B, retournant un objet de factorisation GeneralizedEigen F qui contient les valeurs propres généralisées dans F.values et les vecteurs propres généralisés dans les colonnes de la matrice F.vectors. Cela correspond à la résolution d'un problème de valeurs propres généralisées de la forme Ax = λBx, où A, B sont des matrices, x est un vecteur propre, et λ est une valeur propre. (Le k-ième vecteur propre généralisé peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Par défaut, les valeurs propres et les vecteurs sont triés lexicographiquement par (real(λ),imag(λ)). Une fonction de comparaison différente by(λ) peut être passée à sortby, ou vous pouvez passer sortby=nothing pour laisser les valeurs propres dans un ordre arbitraire.

Exemples

julia> A = [1 0; 0 -1]
2×2 Matrix{Int64}:
 1   0
 0  -1

julia> B = [0 1; 1 0]
2×2 Matrix{Int64}:
 0  1
 1  0

julia> F = eigen(A, B);

julia> F.values
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im

julia> F.vectors
2×2 Matrix{ComplexF64}:
  0.0+1.0im   0.0-1.0im
 -1.0+0.0im  -1.0-0.0im

julia> vals, vecs = F; # destructuring via iteration

julia> vals == F.values && vecs == F.vectors
true
source
eigen(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> Eigen

Calcule la décomposition en valeurs propres de A, retournant un objet de factorisation Eigen F qui contient les valeurs propres dans F.values et les vecteurs propres dans les colonnes de la matrice F.vectors. (Le k-ème vecteur propre peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Les fonctions suivantes sont disponibles pour les objets Eigen : inv, det, et isposdef.

La UnitRange irange spécifie les indices des valeurs propres triées à rechercher.

Note

Si irange n'est pas 1:n, où n est la dimension de A, alors la factorisation retournée sera une factorisation tronquée.

source
eigen(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> Eigen

Calcule la décomposition en valeurs propres de A, retournant un objet de factorisation Eigen F qui contient les valeurs propres dans F.values et les vecteurs propres dans les colonnes de la matrice F.vectors. (Le k-ième vecteur propre peut être obtenu à partir de la tranche F.vectors[:, k].)

L'itération de la décomposition produit les composants F.values et F.vectors.

Les fonctions suivantes sont disponibles pour les objets Eigen : inv, det, et isposdef.

vl est la borne inférieure de la fenêtre des valeurs propres à rechercher, et vu est la borne supérieure.

Note

Si [vl, vu] ne contient pas toutes les valeurs propres de A, alors la factorisation retournée sera une factorisation tronquée.

source
LinearAlgebra.eigen!Function
eigen!(A; permute, scale, sortby)
eigen!(A, B; sortby)

Identique à eigen, mais économise de l'espace en écrasant l'entrée A (et B), au lieu de créer une copie.

source
LinearAlgebra.HessenbergType
Hessenberg <: Factorisation

Un objet Hessenberg représente la factorisation de Hessenberg QHQ' d'une matrice carrée, ou un décalage Q(H+μI)Q' de celle-ci, qui est produit par la fonction hessenberg.

source
LinearAlgebra.hessenbergFunction
hessenberg(A) -> Hessenberg

Calculez la décomposition de Hessenberg de A et renvoyez un objet Hessenberg. Si F est l'objet de factorisation, la matrice unitaire peut être accédée avec F.Q (de type LinearAlgebra.HessenbergQ) et la matrice de Hessenberg avec F.H (de type UpperHessenberg), l'une ou l'autre pouvant être convertie en une matrice régulière avec Matrix(F.H) ou Matrix(F.Q).

Si A est Hermitienne ou Symétrique réelle, alors la décomposition de Hessenberg produit une matrice tridiagonale réelle-symétrique et F.H est de type SymTridiagonal.

Notez que la factorisation décalée A+μI = Q (H+μI) Q' peut être construite efficacement par F + μ*I en utilisant l'objet UniformScaling I, qui crée un nouvel objet Hessenberg avec un stockage partagé et un décalage modifié. Le décalage d'un F donné est obtenu par F.μ. Cela est utile car plusieurs résolutions décalées (F + μ*I) \ b (pour différents μ et/ou b) peuvent être effectuées efficacement une fois que F est créé.

L'itération de la décomposition produit les facteurs F.Q, F.H, F.μ.

Exemples

julia> A = [4. 9. 7.; 4. 4. 1.; 4. 3. 2.]
3×3 Matrix{Float64}:
 4.0  9.0  7.0
 4.0  4.0  1.0
 4.0  3.0  2.0

julia> F = hessenberg(A)
Hessenberg{Float64, UpperHessenberg{Float64, Matrix{Float64}}, Matrix{Float64}, Vector{Float64}, Bool}
Q facteur : 3×3 LinearAlgebra.HessenbergQ{Float64, Matrix{Float64}, Vector{Float64}, false}
H facteur :
3×3 UpperHessenberg{Float64, Matrix{Float64}}:
  4.0      -11.3137       -1.41421
 -5.65685    5.0           2.0
   ⋅        -8.88178e-16   1.0

julia> F.Q * F.H * F.Q'
3×3 Matrix{Float64}:
 4.0  9.0  7.0
 4.0  4.0  1.0
 4.0  3.0  2.0

julia> q, h = F; # déstructuration via itération

julia> q == F.Q && h == F.H
true
source
LinearAlgebra.SchurType
Schur <: Factorization

Type de factorisation matricielle de la factorisation de Schur d'une matrice A. C'est le type de retour de schur(_), la fonction de factorisation matricielle correspondante.

Si F::Schur est l'objet de factorisation, le facteur de Schur (quasi) triangulaire peut être obtenu via F.Schur ou F.T et les vecteurs de Schur orthogonaux/unitaires via F.vectors ou F.Z de sorte que A = F.vectors * F.Schur * F.vectors'. Les valeurs propres de A peuvent être obtenues avec F.values.

L'itération de la décomposition produit les composants F.T, F.Z et F.values.

Exemples

julia> A = [5. 7.; -2. -4.]
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> F = schur(A)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T factor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z factor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
eigenvalues:
2-element Vector{Float64}:
  3.0
 -2.0

julia> F.vectors * F.Schur * F.vectors'
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> t, z, vals = F; # destructuring via iteration

julia> t == F.T && z == F.Z && vals == F.values
true
source
LinearAlgebra.GeneralizedSchurType
GeneralizedSchur <: Factorization

Type de factorisation matricielle de la factorisation de Schur généralisée de deux matrices A et B. C'est le type de retour de schur(_, _), la fonction de factorisation matricielle correspondante.

Si F::GeneralizedSchur est l'objet de factorisation, les facteurs de Schur (quasi) triangulaires peuvent être obtenus via F.S et F.T, les vecteurs de Schur unitaires/orthogonaux à gauche via F.left ou F.Q, et les vecteurs de Schur unitaires/orthogonaux à droite peuvent être obtenus avec F.right ou F.Z de sorte que A=F.left*F.S*F.right' et B=F.left*F.T*F.right'. Les valeurs propres généralisées de A et B peuvent être obtenues avec F.α./F.β.

L'itération de la décomposition produit les composants F.S, F.T, F.Q, F.Z, F.α, et F.β.

source
LinearAlgebra.schurFunction
schur(A) -> F::Schur

Calcule la factorisation de Schur de la matrice A. Le facteur de Schur (quasi) triangulaire peut être obtenu à partir de l'objet Schur F avec soit F.Schur soit F.T et les vecteurs de Schur orthogonaux/unitaires peuvent être obtenus avec F.vectors ou F.Z de sorte que A = F.vectors * F.Schur * F.vectors'. Les valeurs propres de A peuvent être obtenues avec F.values.

Pour un A réel, la factorisation de Schur est "quasitriangulaire", ce qui signifie qu'elle est supérieurement triangulaire sauf avec des blocs diagonaux de 2×2 pour toute paire conjuguée de valeurs propres complexes ; cela permet à la factorisation d'être purement réelle même lorsqu'il y a des valeurs propres complexes. Pour obtenir la factorisation de Schur (complexe) purement supérieurement triangulaire à partir d'une factorisation quasitriangulaire réelle, vous pouvez utiliser Schur{Complex}(schur(A)).

L'itération de la décomposition produit les composants F.T, F.Z et F.values.

Exemples

julia> A = [5. 7.; -2. -4.]
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> F = schur(A)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T factor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z factor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
valeurs propres:
2-element Vector{Float64}:
  3.0
 -2.0

julia> F.vectors * F.Schur * F.vectors'
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> t, z, vals = F; # déstructuration via itération

julia> t == F.T && z == F.Z && vals == F.values
true
source
schur(A, B) -> F::GeneralizedSchur

Calcule la factorisation de Schur généralisée (ou QZ) des matrices A et B. Les facteurs de Schur (quasi) triangulaires peuvent être obtenus à partir de l'objet Schur F avec F.S et F.T, les vecteurs de Schur unitaires/orthogonaux à gauche peuvent être obtenus avec F.left ou F.Q et les vecteurs de Schur unitaires/orthogonaux à droite peuvent être obtenus avec F.right ou F.Z de sorte que A=F.left*F.S*F.right' et B=F.left*F.T*F.right'. Les valeurs propres généralisées de A et B peuvent être obtenues avec F.α./F.β.

L'itération de la décomposition produit les composants F.S, F.T, F.Q, F.Z, F.α et F.β.

source
LinearAlgebra.schur!Function
schur!(A) -> F::Schur

Identique à schur mais utilise l'argument d'entrée A comme espace de travail.

Exemples

julia> A = [5. 7.; -2. -4.]
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> F = schur!(A)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T facteur :
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z facteur :
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
valeurs propres :
2-element Vector{Float64}:
  3.0
 -2.0

julia> A
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
source
schur!(A::StridedMatrix, B::StridedMatrix) -> F::GeneralizedSchur

Identique à schur mais utilise les matrices d'entrée A et B comme espace de travail.

source
LinearAlgebra.ordschurFunction
ordschur(F::Schur, select::Union{Vector{Bool},BitVector}) -> F::Schur

Réorganise la factorisation de Schur F d'une matrice A = Z*T*Z' selon le tableau logique select, retournant l'objet de factorisation réordonné F. Les valeurs propres sélectionnées apparaissent dans la diagonale principale de F.Schur et les colonnes principales correspondantes de F.vectors forment une base orthogonale/unitaire du sous-espace invariant à droite correspondant. Dans le cas réel, une paire de valeurs propres conjuguées complexes doit être soit entièrement incluse, soit entièrement exclue via select.

source
ordschur(F::GeneralizedSchur, select::Union{Vector{Bool},BitVector}) -> F::GeneralizedSchur

Réorganise la factorisation de Schur généralisée F d'une paire de matrices (A, B) = (Q*S*Z', Q*T*Z') selon le tableau logique select et renvoie un objet GeneralizedSchur F. Les valeurs propres sélectionnées apparaissent dans la diagonale principale de F.S et F.T, et les vecteurs de Schur orthogonaux/unitaires à gauche et à droite sont également réorganisés de sorte que (A, B) = F.Q*(F.S, F.T)*F.Z' reste valide et que les valeurs propres généralisées de A et B puissent toujours être obtenues avec F.α./F.β.

source
LinearAlgebra.ordschur!Function
ordschur!(F::Schur, select::Union{Vector{Bool},BitVector}) -> F::Schur

Identique à ordschur mais écrase la factorisation F.

source
ordschur!(F::GeneralizedSchur, select::Union{Vector{Bool},BitVector}) -> F::GeneralizedSchur

Identique à ordschur mais écrase la factorisation F.

source
LinearAlgebra.SVDType
SVD <: Factorization

Type de factorisation matricielle de la décomposition en valeurs singulières (SVD) d'une matrice A. C'est le type de retour de svd(_), la fonction de factorisation matricielle correspondante.

Si F::SVD est l'objet de factorisation, U, S, V et Vt peuvent être obtenus via F.U, F.S, F.V et F.Vt, de sorte que A = U * Diagonal(S) * Vt. Les valeurs singulières dans S sont triées par ordre décroissant.

L'itération de la décomposition produit les composants U, S et V.

Exemples

julia> A = [1. 0. 0. 0. 2.; 0. 0. 3. 0. 0.; 0. 0. 0. 0. 0.; 0. 2. 0. 0. 0.]
4×5 Matrix{Float64}:
 1.0  0.0  0.0  0.0  2.0
 0.0  0.0  3.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0
 0.0  2.0  0.0  0.0  0.0

julia> F = svd(A)
SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}
U factor:
4×4 Matrix{Float64}:
 0.0  1.0   0.0  0.0
 1.0  0.0   0.0  0.0
 0.0  0.0   0.0  1.0
 0.0  0.0  -1.0  0.0
valeurs singulières:
4-element Vector{Float64}:
 3.0
 2.23606797749979
 2.0
 0.0
Vt factor:
4×5 Matrix{Float64}:
 -0.0        0.0  1.0  -0.0  0.0
  0.447214   0.0  0.0   0.0  0.894427
  0.0       -1.0  0.0   0.0  0.0
  0.0        0.0  0.0   1.0  0.0

julia> F.U * Diagonal(F.S) * F.Vt
4×5 Matrix{Float64}:
 1.0  0.0  0.0  0.0  2.0
 0.0  0.0  3.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0
 0.0  2.0  0.0  0.0  0.0

julia> u, s, v = F; # déstructuration via itération

julia> u == F.U && s == F.S && v == F.V
true
source
LinearAlgebra.GeneralizedSVDType
GeneralizedSVD <: Factorization

Type de factorisation matricielle de la décomposition en valeurs singulières généralisée (SVD) de deux matrices A et B, telle que A = F.U*F.D1*F.R0*F.Q' et B = F.V*F.D2*F.R0*F.Q'. C'est le type de retour de svd(_, _), la fonction de factorisation matricielle correspondante.

Pour une matrice M-par-N A et une matrice P-par-N B,

  • U est une matrice orthogonale M-par-M,
  • V est une matrice orthogonale P-par-P,
  • Q est une matrice orthogonale N-par-N,
  • D1 est une matrice diagonale M-par-(K+L) avec des 1 dans les K premières entrées,
  • D2 est une matrice P-par-(K+L) dont le bloc supérieur droit L-par-L est diagonal,
  • R0 est une matrice (K+L)-par-N dont le bloc supérieur droit (K+L)-par-(K+L) est non singulier et triangulaire supérieur,

K+L est le rang numérique effectif de la matrice [A; B].

L'itération de la décomposition produit les composants U, V, Q, D1, D2, et R0.

Les entrées de F.D1 et F.D2 sont liées, comme expliqué dans la documentation LAPACK pour le SVD généralisé et la routine xGGSVD3 qui est appelée en dessous (dans LAPACK 3.6.0 et versions ultérieures).

Exemples

julia> A = [1. 0.; 0. -1.]
2×2 Matrix{Float64}:
 1.0   0.0
 0.0  -1.0

julia> B = [0. 1.; 1. 0.]
2×2 Matrix{Float64}:
 0.0  1.0
 1.0  0.0

julia> F = svd(A, B)
GeneralizedSVD{Float64, Matrix{Float64}, Float64, Vector{Float64}}
U factor:
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
V factor:
2×2 Matrix{Float64}:
 -0.0  -1.0
  1.0   0.0
Q factor:
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
D1 factor:
2×2 Matrix{Float64}:
 0.707107  0.0
 0.0       0.707107
D2 factor:
2×2 Matrix{Float64}:
 0.707107  0.0
 0.0       0.707107
R0 factor:
2×2 Matrix{Float64}:
 1.41421   0.0
 0.0      -1.41421

julia> F.U*F.D1*F.R0*F.Q'
2×2 Matrix{Float64}:
 1.0   0.0
 0.0  -1.0

julia> F.V*F.D2*F.R0*F.Q'
2×2 Matrix{Float64}:
 -0.0  1.0
  1.0  0.0
source
LinearAlgebra.svdFunction
svd(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVD

Calcule la décomposition en valeurs singulières (SVD) de A et renvoie un objet SVD.

U, S, V et Vt peuvent être obtenus à partir de la factorisation F avec F.U, F.S, F.V et F.Vt, de sorte que A = U * Diagonal(S) * Vt. L'algorithme produit Vt et donc Vt est plus efficace à extraire que V. Les valeurs singulières dans S sont triées par ordre décroissant.

L'itération de la décomposition produit les composants U, S et V.

Si full = false (par défaut), une SVD "mince" est renvoyée. Pour une matrice A de taille $M \times N$, dans la factorisation complète U est de taille $M \times M$ et V est de taille $N \times N$, tandis que dans la factorisation mince U est de taille $M \times K$ et V est de taille $N \times K$, où $K = \min(M,N)$ est le nombre de valeurs singulières.

Si alg = DivideAndConquer(), un algorithme de diviser pour régner est utilisé pour calculer la SVD. Une autre option (typiquement plus lente mais plus précise) est alg = QRIteration().

Julia 1.3

L'argument clé alg nécessite Julia 1.3 ou une version ultérieure.

Exemples

julia> A = rand(4,3);

julia> F = svd(A); # Stocker l'objet de factorisation

julia> A ≈ F.U * Diagonal(F.S) * F.Vt
true

julia> U, S, V = F; # déstructuration via itération

julia> A ≈ U * Diagonal(S) * V'
true

julia> Uonly, = svd(A); # Stocker uniquement U

julia> Uonly == U
true
source
svd(A, B) -> GeneralizedSVD

Calculez le SVD généralisé de A et B, retournant un objet de factorisation GeneralizedSVD F tel que [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q'

  • U est une matrice orthogonale de M par M,
  • V est une matrice orthogonale de P par P,
  • Q est une matrice orthogonale de N par N,
  • D1 est une matrice diagonale de M par (K+L) avec des 1 dans les K premières entrées,
  • D2 est une matrice de P par (K+L) dont le bloc supérieur droit de L par L est diagonal,
  • R0 est une matrice de (K+L) par N dont le bloc supérieur droit de (K+L) par (K+L) est non singulier et triangulaire supérieur,

K+L est le rang numérique effectif de la matrice [A; B].

L'itération de la décomposition produit les composants U, V, Q, D1, D2, et R0.

Le SVD généralisé est utilisé dans des applications telles que lorsque l'on veut comparer combien appartient à A par rapport à combien appartient à B, comme dans le génome humain contre le génome de la levure, ou le signal contre le bruit, ou entre les clusters contre à l'intérieur des clusters. (Voir Edelman et Wang pour discussion : https://arxiv.org/abs/1901.00485)

Il décompose [A; B] en [UC; VS]H, où [UC; VS] est une base orthogonale naturelle pour l'espace des colonnes de [A; B], et H = RQ' est une base non orthogonale naturelle pour l'espace des lignes de [A;B], où les lignes supérieures sont le plus étroitement attribuées à la matrice A, et les lignes inférieures à la matrice B. Les matrices multi-cosinus/sinus C et S fournissent une mesure multiple de combien A contre combien B, et U et V fournissent des directions dans lesquelles ces mesures sont effectuées.

Exemples

julia> A = randn(3,2); B=randn(4,2);

julia> F = svd(A, B);

julia> U,V,Q,C,S,R = F;

julia> H = R*Q';

julia> [A; B] ≈ [U*C; V*S]*H
true

julia> [A; B] ≈ [F.U*F.D1; F.V*F.D2]*F.R0*F.Q'
true

julia> Uonly, = svd(A,B);

julia> U == Uonly
true
source
LinearAlgebra.svd!Function
svd!(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVD

svd! est identique à svd, mais économise de l'espace en écrasant l'entrée A, au lieu de créer une copie. Voir la documentation de svd pour plus de détails.

source
svd!(A, B) -> GeneralizedSVD

svd! est identique à svd, mais modifie les arguments A et B sur place, au lieu de faire des copies. Voir la documentation de svd pour plus de détails.

source
LinearAlgebra.svdvalsFunction
svdvals(A)

Retourne les valeurs singulières de A dans l'ordre décroissant.

Exemples

julia> A = [1. 0. 0. 0. 2.; 0. 0. 3. 0. 0.; 0. 0. 0. 0. 0.; 0. 2. 0. 0. 0.]
4×5 Matrix{Float64}:
 1.0  0.0  0.0  0.0  2.0
 0.0  0.0  3.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0
 0.0  2.0  0.0  0.0  0.0

julia> svdvals(A)
4-element Vector{Float64}:
 3.0
 2.23606797749979
 2.0
 0.0
source
svdvals(A, B)

Retourne les valeurs singulières généralisées de la décomposition en valeurs singulières généralisées de A et B. Voir aussi svd.

Exemples

julia> A = [1. 0.; 0. -1.]
2×2 Matrix{Float64}:
 1.0   0.0
 0.0  -1.0

julia> B = [0. 1.; 1. 0.]
2×2 Matrix{Float64}:
 0.0  1.0
 1.0  0.0

julia> svdvals(A, B)
2-element Vector{Float64}:
 1.0
 1.0
source
LinearAlgebra.svdvals!Function
svdvals!(A)

Retourne les valeurs singulières de A, économisant de l'espace en écrasant l'entrée. Voir aussi svdvals et svd.

source
svdvals!(A, B)

Retourne les valeurs singulières généralisées de la décomposition en valeurs singulières généralisées de A et B, en économisant de l'espace en écrasant A et B. Voir aussi svd et svdvals.

source
LinearAlgebra.GivensType
LinearAlgebra.Givens(i1,i2,c,s) -> G

Un opérateur linéaire de rotation de Givens. Les champs c et s représentent le cosinus et le sinus de l'angle de rotation, respectivement. Le type Givens prend en charge la multiplication à gauche G*A et la multiplication par la transposée conjuguée à droite A*G'. Le type n'a pas de size et peut donc être multiplié avec des matrices de taille arbitraire tant que i2<=size(A,2) pour G*A ou i2<=size(A,1) pour A*G'.

Voir aussi givens.

source
LinearAlgebra.givensFunction
givens(f::T, g::T, i1::Integer, i2::Integer) where {T} -> (G::Givens, r::T)

Calcule la rotation de Givens G et le scalaire r tels que pour tout vecteur x

x[i1] = f
x[i2] = g

le résultat de la multiplication

y = G*x

a la propriété que

y[i1] = r
y[i2] = 0

Voir aussi LinearAlgebra.Givens.

source
givens(A::AbstractArray, i1::Integer, i2::Integer, j::Integer) -> (G::Givens, r)

Calcule la rotation de Givens G et le scalaire r tels que le résultat de la multiplication

B = G*A

a la propriété que

B[i1,j] = r
B[i2,j] = 0

Voir aussi LinearAlgebra.Givens. ```

source
givens(x::AbstractVector, i1::Integer, i2::Integer) -> (G::Givens, r)

Calcule la rotation de Givens G et le scalaire r de sorte que le résultat de la multiplication

B = G*x

ait la propriété que

B[i1] = r
B[i2] = 0

Voir aussi LinearAlgebra.Givens. ```

source
LinearAlgebra.triuFunction
triu(M)

Triangle supérieur d'une matrice.

Exemples

julia> a = fill(1.0, (4,4))
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> triu(a)
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 0.0  1.0  1.0  1.0
 0.0  0.0  1.0  1.0
 0.0  0.0  0.0  1.0
source
triu(M, k::Integer)

Renvoie le triangle supérieur de M à partir de la k-ième superdiagonale.

Exemples

julia> a = fill(1.0, (4,4))
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> triu(a,3)
4×4 Matrix{Float64}:
 0.0  0.0  0.0  1.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0

julia> triu(a,-3)
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
source
LinearAlgebra.triu!Function
triu!(M)

Triangle supérieure d'une matrice, en écrasant M dans le processus. Voir aussi triu.

source
triu!(M, k::Integer)

Renvoie le triangle supérieur de M à partir de la k-ième superdiagonale, en écrasant M dans le processus.

Exemples

julia> M = [1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5]
5×5 Matrix{Int64}:
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5

julia> triu!(M, 1)
5×5 Matrix{Int64}:
 0  2  3  4  5
 0  0  3  4  5
 0  0  0  4  5
 0  0  0  0  5
 0  0  0  0  0
source
LinearAlgebra.trilFunction
tril(M)

Triangle inférieur d'une matrice.

Exemples

julia> a = fill(1.0, (4,4))
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> tril(a)
4×4 Matrix{Float64}:
 1.0  0.0  0.0  0.0
 1.0  1.0  0.0  0.0
 1.0  1.0  1.0  0.0
 1.0  1.0  1.0  1.0
source
tril(M, k::Integer)

Retourne le triangle inférieur de M à partir de la k-ième superdiagonale.

Exemples

julia> a = fill(1.0, (4,4))
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> tril(a,3)
4×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> tril(a,-3)
4×4 Matrix{Float64}:
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 1.0  0.0  0.0  0.0
source
LinearAlgebra.tril!Function
tril!(M)

Triangle inférieure d'une matrice, en écrasant M dans le processus. Voir aussi tril.

source
tril!(M, k::Integer)

Renvoie le triangle inférieur de M à partir de la k-ième superdiagonale, en écrasant M dans le processus.

Exemples

julia> M = [1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5]
5×5 Matrix{Int64}:
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5

julia> tril!(M, 2)
5×5 Matrix{Int64}:
 1  2  3  0  0
 1  2  3  4  0
 1  2  3  4  5
 1  2  3  4  5
 1  2  3  4  5
source
LinearAlgebra.diagindFunction
diagind(M::AbstractMatrix, k::Integer = 0, indstyle::IndexStyle = IndexLinear())
diagind(M::AbstractMatrix, indstyle::IndexStyle = IndexLinear())

Un AbstractRange donnant les indices de la k-ième diagonale de la matrice M. En option, un style d'index peut être spécifié, ce qui détermine le type de la plage retournée. Si indstyle isa IndexLinear (par défaut), cela retourne un AbstractRange{Integer}. D'autre part, si indstyle isa IndexCartesian, cela retourne un AbstractRange{CartesianIndex{2}}.

Si k n'est pas fourni, il est supposé être 0 (correspondant à la diagonale principale).

Voir aussi : diag, diagm, Diagonal.

Exemples

julia> A = [1 2 3; 4 5 6; 7 8 9]
3×3 Matrix{Int64}:
 1  2  3
 4  5  6
 7  8  9

julia> diagind(A, -1)
2:4:6

julia> diagind(A, IndexCartesian())
StepRangeLen(CartesianIndex(1, 1), CartesianIndex(1, 1), 3)
Julia 1.11

Spécifier un IndexStyle nécessite au moins Julia 1.11.

source
LinearAlgebra.diagFunction
diag(M, k::Integer=0)

La k-ième diagonale d'une matrice, sous forme de vecteur.

Voir aussi diagm, diagind, Diagonal, isdiag.

Exemples

julia> A = [1 2 3; 4 5 6; 7 8 9]
3×3 Matrix{Int64}:
 1  2  3
 4  5  6
 7  8  9

julia> diag(A,1)
2-element Vector{Int64}:
 2
 6
source
LinearAlgebra.diagmFunction
diagm(kv::Pair{<:Integer,<:AbstractVector}...)
diagm(m::Integer, n::Integer, kv::Pair{<:Integer,<:AbstractVector}...)

Construit une matrice à partir de `Pair`s de diagonales et de vecteurs. Le vecteur `kv.second` sera placé sur la diagonale `kv.first`. Par défaut, la matrice est carrée et sa taille est déduite de `kv`, mais une taille non carrée `m`×`n` (remplie de zéros si nécessaire) peut être spécifiée en passant `m,n` comme premiers arguments. Pour les indices de diagonale répétés `kv.first`, les valeurs des vecteurs correspondants `kv.second` seront additionnées.

`diagm` construit une matrice complète ; si vous souhaitez des versions économes en stockage avec une arithmétique rapide, consultez [`Diagonal`](@ref), [`Bidiagonal`](@ref), [`Tridiagonal`](@ref) et [`SymTridiagonal`](@ref).

# Exemples

jldoctest julia> diagm(1 => [1,2,3]) 4×4 Matrix{Int64}: 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0

julia> diagm(1 => [1,2,3], -1 => [4,5]) 4×4 Matrix{Int64}: 0 1 0 0 4 0 2 0 0 5 0 3 0 0 0 0

julia> diagm(1 => [1,2,3], 1 => [1,2,3]) 4×4 Matrix{Int64}: 0 2 0 0 0 0 4 0 0 0 0 6 0 0 0 0 ```

source
diagm(v::AbstractVector)
diagm(m::Integer, n::Integer, v::AbstractVector)

Construit une matrice avec les éléments du vecteur comme éléments diagonaux. Par défaut, la matrice est carrée et sa taille est donnée par length(v), mais une taille non carrée m×n peut être spécifiée en passant m,n comme premiers arguments.

Exemples

julia> diagm([1,2,3])
3×3 Matrix{Int64}:
 1  0  0
 0  2  0
 0  0  3
source
LinearAlgebra.rankFunction
rank(::QRSparse{Tv,Ti}) -> Ti

Retourne le rang de la factorisation QR

source
rank(S::SparseMatrixCSC{Tv,Ti}; [tol::Real]) -> Ti

Calcule le rang de S en calculant sa factorisation QR. Les valeurs inférieures à tol sont considérées comme nulles. Voir le manuel de SPQR.

source
rank(A::AbstractMatrix; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
rank(A::AbstractMatrix, rtol::Real)

Calculez le rang numérique d'une matrice en comptant combien de valeurs de sortie de svdvals(A) sont supérieures à max(atol, rtol*σ₁)σ₁ est la plus grande valeur singulière calculée de A. atol et rtol sont respectivement les tolérances absolue et relative. La tolérance relative par défaut est n*ϵ, où n est la taille de la plus petite dimension de A, et ϵ est le eps du type d'élément de A.

Note

Le rang numérique peut être une caractérisation sensible et imprécise des matrices mal conditionnées avec des valeurs singulières proches de la tolérance seuil max(atol, rtol*σ₁). Dans de tels cas, de légères perturbations dans le calcul des valeurs singulières ou dans la matrice peuvent changer le résultat de rank en déplaçant une ou plusieurs valeurs singulières au-delà du seuil. Ces variations peuvent même se produire en raison de changements dans les erreurs de flottement entre différentes versions de Julia, architectures, compilateurs ou systèmes d'exploitation.

Julia 1.1

Les arguments de mot-clé atol et rtol nécessitent au moins Julia 1.1. Dans Julia 1.0, rtol est disponible en tant qu'argument positionnel, mais cela sera obsolète dans Julia 2.0.

Exemples

julia> rank(Matrix(I, 3, 3))
3

julia> rank(diagm(0 => [1, 0, 2]))
2

julia> rank(diagm(0 => [1, 0.001, 2]), rtol=0.1)
2

julia> rank(diagm(0 => [1, 0.001, 2]), rtol=0.00001)
3

julia> rank(diagm(0 => [1, 0.001, 2]), atol=1.5)
1
source
LinearAlgebra.normFunction
norm(A, p::Real=2)

Pour tout conteneur itérable A (y compris les tableaux de n'importe quelle dimension) de nombres (ou tout type d'élément pour lequel norm est défini), calculez la p-norme (par défaut p=2) comme si A était un vecteur de la longueur correspondante.

La p-norme est définie comme

\[\|A\|_p = \left( \sum_{i=1}^n | a_i | ^p \right)^{1/p}\]

avec $a_i$ les entrées de A, $| a_i |$ la norm de $a_i$, et $n$ la longueur de A. Puisque la p-norme est calculée en utilisant les norms des entrées de A, la p-norme d'un vecteur de vecteurs n'est pas compatible avec l'interprétation de celui-ci comme un vecteur bloc en général si p != 2.

p peut prendre n'importe quelle valeur numérique (bien que toutes les valeurs ne produisent pas une norme vectorielle mathématiquement valide). En particulier, norm(A, Inf) renvoie la plus grande valeur dans abs.(A), tandis que norm(A, -Inf) renvoie la plus petite. Si A est une matrice et p=2, alors cela équivaut à la norme de Frobenius.

Le deuxième argument p n'est pas nécessairement une partie de l'interface pour norm, c'est-à-dire qu'un type personnalisé peut n'implémenter que norm(A) sans deuxième argument.

Utilisez opnorm pour calculer la norme opérateur d'une matrice.

Exemples

julia> v = [3, -2, 6]
3-element Vector{Int64}:
  3
 -2
  6

julia> norm(v)
7.0

julia> norm(v, 1)
11.0

julia> norm(v, Inf)
6.0

julia> norm([1 2 3; 4 5 6; 7 8 9])
16.881943016134134

julia> norm([1 2 3 4 5 6 7 8 9])
16.881943016134134

julia> norm(1:9)
16.881943016134134

julia> norm(hcat(v,v), 1) == norm(vcat(v,v), 1) != norm([v,v], 1)
true

julia> norm(hcat(v,v), 2) == norm(vcat(v,v), 2) == norm([v,v], 2)
true

julia> norm(hcat(v,v), Inf) == norm(vcat(v,v), Inf) != norm([v,v], Inf)
true
source
norm(x::Number, p::Real=2)

Pour les nombres, retourner $\left( |x|^p \right)^{1/p}$.

Exemples

julia> norm(2, 1)
2.0

julia> norm(-2, 1)
2.0

julia> norm(2, 2)
2.0

julia> norm(-2, 2)
2.0

julia> norm(2, Inf)
2.0

julia> norm(-2, Inf)
2.0
source
LinearAlgebra.opnormFunction
opnorm(A::AbstractMatrix, p::Real=2)

Calculez la norme opérateur (ou norme de matrice) induite par la norme vectorielle p, où les valeurs valides de p sont 1, 2 ou Inf. (Notez que pour les matrices creuses, p=2 n'est actuellement pas implémenté.) Utilisez norm pour calculer la norme de Frobenius.

Lorsque p=1, la norme opérateur est la somme maximale des valeurs absolues des colonnes de A :

\[\|A\|_1 = \max_{1 ≤ j ≤ n} \sum_{i=1}^m | a_{ij} |\]

avec $a_{ij}$ les éléments de $A$, et $m$ et $n$ ses dimensions.

Lorsque p=2, la norme opérateur est la norme spectrale, égale à la plus grande valeur singulière de A.

Lorsque p=Inf, la norme opérateur est la somme maximale des valeurs absolues des lignes de A :

\[\|A\|_\infty = \max_{1 ≤ i ≤ m} \sum _{j=1}^n | a_{ij} |\]

Exemples

julia> A = [1 -2 -3; 2 3 -1]
2×3 Matrix{Int64}:
 1  -2  -3
 2   3  -1

julia> opnorm(A, Inf)
6.0

julia> opnorm(A, 1)
5.0
source
opnorm(x::Number, p::Real=2)

Pour les nombres, renvoyez $\left( |x|^p \right)^{1/p}$. Cela équivaut à norm.

source
opnorm(A::Adjoint{<:Any,<:AbstractVector}, q::Real=2)
opnorm(A::Transpose{<:Any,<:AbstractVector}, q::Real=2)

Pour les vecteurs enveloppés dans Adjoint/Transpose, renvoie la norme opérateur $q$-norm de A, qui est équivalente à la p-norm avec la valeur p = q/(q-1). Elles coïncident à p = q = 2. Utilisez norm pour calculer la norme p de A en tant que vecteur.

La différence de norme entre un espace vectoriel et son dual apparaît pour préserver la relation entre la dualité et le produit scalaire, et le résultat est cohérent avec la norme opérateur p d'une matrice 1 × n.

Exemples

julia> v = [1; im];

julia> vc = v';

julia> opnorm(vc, 1)
1.0

julia> norm(vc, 1)
2.0

julia> norm(v, 1)
2.0

julia> opnorm(vc, 2)
1.4142135623730951

julia> norm(vc, 2)
1.4142135623730951

julia> norm(v, 2)
1.4142135623730951

julia> opnorm(vc, Inf)
2.0

julia> norm(vc, Inf)
1.0

julia> norm(v, Inf)
1.0
source
LinearAlgebra.normalize!Function
normalize!(a::AbstractArray, p::Real=2)

Normalisez le tableau a sur place de sorte que sa norme p soit égale à l'unité, c'est-à-dire norm(a, p) == 1. Voir aussi normalize et norm.

source
LinearAlgebra.normalizeFunction
normalize(a, p::Real=2)

Normaliser a de sorte que sa p-norme soit égale à l'unité, c'est-à-dire norm(a, p) == 1. Pour les scalaires, cela est similaire à sign(a), sauf que normalize(0) = NaN. Voir aussi normalize!, norm, et sign.

Exemples

julia> a = [1,2,4];

julia> b = normalize(a)
3-element Vector{Float64}:
 0.2182178902359924
 0.4364357804719848
 0.8728715609439696

julia> norm(b)
1.0

julia> c = normalize(a, 1)
3-element Vector{Float64}:
 0.14285714285714285
 0.2857142857142857
 0.5714285714285714

julia> norm(c, 1)
1.0

julia> a = [1 2 4 ; 1 2 4]
2×3 Matrix{Int64}:
 1  2  4
 1  2  4

julia> norm(a)
6.48074069840786

julia> normalize(a)
2×3 Matrix{Float64}:
 0.154303  0.308607  0.617213
 0.154303  0.308607  0.617213

julia> normalize(3, 1)
1.0

julia> normalize(-8, 1)
-1.0

julia> normalize(0, 1)
NaN
source
LinearAlgebra.condFunction
cond(M, p::Réel=2)

Nombre de condition de la matrice M, calculé en utilisant la norme opérateur p. Les valeurs valides pour p sont 1, 2 (par défaut) ou Inf.

source
LinearAlgebra.condskeelFunction
condskeel(M, [x, p::Real=Inf])

\[\kappa_S(M, p) = \left\Vert \left\vert M \right\vert \left\vert M^{-1} \right\vert \right\Vert_p \\ \kappa_S(M, x, p) = \frac{\left\Vert \left\vert M \right\vert \left\vert M^{-1} \right\vert \left\vert x \right\vert \right\Vert_p}{\left \Vert x \right \Vert_p}\]

Le nombre de condition de Skeel $\kappa_S$ de la matrice M, éventuellement par rapport au vecteur x, est calculé en utilisant la norme opérateur p. $\left\vert M \right\vert$ désigne la matrice des valeurs absolues (élément par élément) de $M$; $\left\vert M \right\vert_{ij} = \left\vert M_{ij} \right\vert$. Les valeurs valides pour p sont 1, 2 et Inf (par défaut).

Cette quantité est également connue dans la littérature sous le nom de nombre de condition de Bauer, nombre de condition relatif, ou nombre de condition relatif élément par élément.

source
LinearAlgebra.trFunction
tr(M)

Trace de la matrice. Somme des éléments diagonaux de M.

Exemples

julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> tr(A)
5
source
LinearAlgebra.logdetFunction
logdet(M)

Logarithme du déterminant de matrice. Équivalent à log(det(M)), mais peut offrir une précision accrue et évite le débordement/sous-dépassement.

Exemples

julia> M = [1 0; 2 2]
2×2 Matrix{Int64}:
 1  0
 2  2

julia> logdet(M)
0.6931471805599453

julia> logdet(Matrix(I, 3, 3))
0.0
source
LinearAlgebra.logabsdetFunction
logabsdet(M)

Logarithme de la valeur absolue du déterminant de la matrice. Équivalent à (log(abs(det(M))), sign(det(M))), mais peut offrir une précision et/ou une vitesse accrues.

Exemples

julia> A = [-1. 0.; 0. 1.]
2×2 Matrix{Float64}:
 -1.0  0.0
  0.0  1.0

julia> det(A)
-1.0

julia> logabsdet(A)
(0.0, -1.0)

julia> B = [2. 0.; 0. 1.]
2×2 Matrix{Float64}:
 2.0  0.0
 0.0  1.0

julia> det(B)
2.0

julia> logabsdet(B)
(0.6931471805599453, 1.0)
source
Base.invMethod
inv(M)

Inverse de matrice. Calcule la matrice N telle que M * N = I, où I est la matrice identité. Calculé en résolvant la division à gauche N = M \ I.

Exemples

julia> M = [2 5; 1 3]
2×2 Matrix{Int64}:
 2  5
 1  3

julia> N = inv(M)
2×2 Matrix{Float64}:
  3.0  -5.0
 -1.0   2.0

julia> M*N == N*M == Matrix(I, 2, 2)
true
source
LinearAlgebra.pinvFunction
pinv(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
pinv(M, rtol::Real) = pinv(M; rtol=rtol) # à déprécier dans Julia 2.0

Calcule la pseudo-inverse de Moore-Penrose.

Pour les matrices M avec des éléments à virgule flottante, il est pratique de calculer la pseudo-inverse en inversant uniquement les valeurs singulières supérieures à max(atol, rtol*σ₁)σ₁ est la plus grande valeur singulière de M.

Le choix optimal de la tolérance absolue (atol) et de la tolérance relative (rtol) varie à la fois avec la valeur de M et l'application prévue de la pseudo-inverse. La tolérance relative par défaut est n*ϵ, où n est la taille de la plus petite dimension de M, et ϵ est le eps du type d'élément de M.

Pour inverser des matrices denses mal conditionnées dans un sens des moindres carrés, rtol = sqrt(eps(real(float(oneunit(eltype(M)))))) est recommandé.

Pour plus d'informations, voir [issue8859], [B96], [S84], [KY88].

Exemples

julia> M = [1.5 1.3; 1.2 1.9]
2×2 Matrix{Float64}:
 1.5  1.3
 1.2  1.9

julia> N = pinv(M)
2×2 Matrix{Float64}:
  1.47287   -1.00775
 -0.930233   1.16279

julia> M * N
2×2 Matrix{Float64}:
 1.0          -2.22045e-16
 4.44089e-16   1.0
source
LinearAlgebra.nullspaceFunction
nullspace(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
nullspace(M, rtol::Real) = nullspace(M; rtol=rtol) # à déprécier dans Julia 2.0

Calcule une base pour le noyau de `M` en incluant les vecteurs singuliers de `M` dont les valeurs singulières ont des magnitudes inférieures à `max(atol, rtol*σ₁)`, où `σ₁` est la plus grande valeur singulière de `M`.

Par défaut, la tolérance relative `rtol` est `n*ϵ`, où `n` est la taille de la plus petite dimension de `M`, et `ϵ` est le [`eps`](@ref) du type d'élément de `M`.

# Exemples

jldoctest julia> M = [1 0 0; 0 1 0; 0 0 0] 3×3 Matrix{Int64}: 1 0 0 0 1 0 0 0 0

julia> nullspace(M) 3×1 Matrix{Float64}: 0.0 0.0 1.0

julia> nullspace(M, rtol=3) 3×3 Matrix{Float64}: 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0

julia> nullspace(M, atol=0.95) 3×1 Matrix{Float64}: 0.0 0.0 1.0 ```

source
Base.kronFunction
kron(A, B)

Calcule le produit de Kronecker de deux vecteurs, matrices ou nombres.

Pour les vecteurs réels v et w, le produit de Kronecker est lié au produit extérieur par kron(v,w) == vec(w * transpose(v)) ou w * transpose(v) == reshape(kron(v,w), (length(w), length(v))). Notez comment l'ordre de v et w diffère à gauche et à droite de ces expressions (en raison du stockage en colonne). Pour les vecteurs complexes, le produit extérieur w * v' diffère également par la conjugaison de v.

Exemples

julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> B = [im 1; 1 -im]
2×2 Matrix{Complex{Int64}}:
 0+1im  1+0im
 1+0im  0-1im

julia> kron(A, B)
4×4 Matrix{Complex{Int64}}:
 0+1im  1+0im  0+2im  2+0im
 1+0im  0-1im  2+0im  0-2im
 0+3im  3+0im  0+4im  4+0im
 3+0im  0-3im  4+0im  0-4im

julia> v = [1, 2]; w = [3, 4, 5];

julia> w*transpose(v)
3×2 Matrix{Int64}:
 3   6
 4   8
 5  10

julia> reshape(kron(v,w), (length(w), length(v)))
3×2 Matrix{Int64}:
 3   6
 4   8
 5  10
source
Base.kron!Function
kron!(C, A, B)

Calcule le produit de Kronecker de A et B et stocke le résultat dans C, écrasant le contenu existant de C. C'est la version en place de kron.

Julia 1.6

Cette fonction nécessite Julia 1.6 ou une version ultérieure.

source
Base.expMethod
exp(A::AbstractMatrix)

Calcule l'exponentielle matricielle de A, définie par

\[e^A = \sum_{n=0}^{\infty} \frac{A^n}{n!}.\]

Pour A symétrique ou hermitien, une décomposition en valeurs propres (eigen) est utilisée, sinon l'algorithme de mise à l'échelle et de mise au carré (voir [H05]) est choisi.

Exemples

julia> A = Matrix(1.0I, 2, 2)
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0

julia> exp(A)
2×2 Matrix{Float64}:
 2.71828  0.0
 0.0      2.71828
source
Base.cisMethod
cis(A::AbstractMatrix)

Méthode plus efficace pour exp(im*A) de la matrice carrée A (surtout si A est Hermitienne ou Symétrique réel).

Voir aussi cispi, sincos, exp.

Julia 1.7

Le support de l'utilisation de cis avec des matrices a été ajouté dans Julia 1.7.

Exemples

julia> cis([π 0; 0 π]) ≈ -I
true
source
Base.:^Method
^(A::AbstractMatrix, p::Number)

Puissance de matrice, équivalente à $\exp(p\log(A))$

Exemples

julia> [1 2; 0 3]^3
2×2 Matrix{Int64}:
 1  26
 0  27
source
Base.:^Method
^(b::Number, A::AbstractMatrix)

Exponential de matrice, équivalent à $\exp(\log(b)A)$.

Julia 1.1

Le support pour l'élévation des nombres Irrational (comme ) à une matrice a été ajouté dans Julia 1.1.

Exemples

julia> 2^[1 2; 0 3]
2×2 Matrix{Float64}:
 2.0  6.0
 0.0  8.0

julia> ℯ^[1 2; 0 3]
2×2 Matrix{Float64}:
 2.71828  17.3673
 0.0      20.0855
source
Base.logMethod
log(A::AbstractMatrix)

Si A n'a pas de valeur propre réelle négative, calculez le logarithme matriciel principal de A, c'est-à-dire la matrice unique $X$ telle que $e^X = A$ et $-\pi < Im(\lambda) < \pi$ pour toutes les valeurs propres $\lambda$ de $X$. Si A a des valeurs propres non positives, une fonction matricielle non principale est renvoyée chaque fois que cela est possible.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée, si A est triangulaire, une version améliorée de la méthode d'inversion par mise à l'échelle et de mise à l'échelle est employée (voir [AH12] et [AHR13]). Si A est réel sans valeurs propres négatives, alors la forme de Schur réelle est calculée. Sinon, la forme de Schur complexe est calculée. Ensuite, l'algorithme triangulaire supérieur (quasi-)triangulaire dans [AHR13] est utilisé sur le facteur supérieur (quasi-)triangulaire.

Exemples

julia> A = Matrix(2.7182818*I, 2, 2)
2×2 Matrix{Float64}:
 2.71828  0.0
 0.0      2.71828

julia> log(A)
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
source
Base.sqrtMethod
sqrt(x)

Retourne $\sqrt{x}$.

Lève une DomainError pour les arguments Real négatifs. Utilisez plutôt des arguments complexes négatifs. Notez que sqrt a une coupure de branche le long de l'axe réel négatif.

L'opérateur préfixe est équivalent à sqrt.

Voir aussi : hypot.

Exemples

julia> sqrt(big(81))
9.0

julia> sqrt(big(-81))
ERROR: DomainError with -81.0:
NaN result for non-NaN input.
Stacktrace:
 [1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]

julia> sqrt(big(complex(-81)))
0.0 + 9.0im

julia> sqrt(-81 - 0.0im)  # -0.0im est en dessous de la coupure de branche
0.0 - 9.0im

julia> .√(1:4)
4-element Vector{Float64}:
 1.0
 1.4142135623730951
 1.7320508075688772
 2.0
source
sqrt(A::AbstractMatrix)

Si A n'a pas d'autovalues réelles négatives, calculez la racine carrée principale de la matrice A, c'est-à-dire la matrice unique $X$ dont les autovalues ont une partie réelle positive telle que $X^2 = A$. Sinon, une racine carrée non principale est retournée.

Si A est réelle-symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer la racine carrée. Pour de telles matrices, les autovalues λ qui semblent légèrement négatives en raison d'erreurs d'arrondi sont traitées comme si elles étaient nulles. Plus précisément, les matrices avec toutes les autovalues ≥ -rtol*(max |λ|) sont considérées comme semi-définies (produisant une racine carrée hermitienne), avec les autovalues négatives considérées comme nulles. rtol est un argument clé pour sqrt (dans le cas hermitien/réel-symétrique uniquement) qui par défaut est la précision machine multipliée par size(A,1).

Sinon, la racine carrée est déterminée par la méthode de Björck-Hammarling [BH83], qui calcule la forme de Schur complexe (schur) puis la racine carrée complexe du facteur triangulaire. Si une racine carrée réelle existe, alors une extension de cette méthode [H87] qui calcule la forme de Schur réelle puis la racine carrée réelle du facteur quasi-triangulaire est utilisée à la place.

Exemples

julia> A = [4 0; 0 4]
2×2 Matrix{Int64}:
 4  0
 0  4

julia> sqrt(A)
2×2 Matrix{Float64}:
 2.0  0.0
 0.0  2.0
source
Base.Math.cbrtMethod
cbrt(A::AbstractMatrix{<:Real})

Calcule la racine cubique réelle d'une matrice réelle A. Si T = cbrt(A), alors nous avons T*T*T ≈ A, voir l'exemple donné ci-dessous.

Si A est symétrique, c'est-à-dire de type HermOrSym{<:Real}, alors (eigen) est utilisé pour trouver la racine cubique. Sinon, une version spécialisée de l'algorithme de racine p-th [S03] est utilisée, qui exploite la décomposition de Schur réelle (schur) pour calculer la racine cubique.

Exemples

julia> A = [0.927524 -0.15857; -1.3677 -1.01172]
2×2 Matrix{Float64}:
  0.927524  -0.15857
 -1.3677    -1.01172

julia> T = cbrt(A)
2×2 Matrix{Float64}:
  0.910077  -0.151019
 -1.30257   -0.936818

julia> T*T*T ≈ A
true
source
Base.cosMethod
cos(A::AbstractMatrix)

Calcule le cosinus matriciel d'une matrice carrée A.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer le cosinus. Sinon, le cosinus est déterminé en appelant exp.

Exemples

julia> cos(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
source
Base.sinMethod
sin(A::AbstractMatrix)

Calcule le sinus matriciel d'une matrice carrée A.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer le sinus. Sinon, le sinus est déterminé en appelant exp.

Exemples

julia> sin(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649
source
Base.Math.sincosMethod
sincos(A::AbstractMatrix)

Calcule le sinus et le cosinus matriciels d'une matrice carrée A.

Exemples

julia> S, C = sincos(fill(1.0, (2,2)));

julia> S
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649

julia> C
2×2 Matrix{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
source
Base.tanMethod
tan(A::AbstractMatrix)

Calcule la tangente matricielle d'une matrice carrée A.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer la tangente. Sinon, la tangente est déterminée en appelant exp.

Exemples

julia> tan(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 -1.09252  -1.09252
 -1.09252  -1.09252
source
Base.Math.secMethod
sec(A::AbstractMatrix)

Calcule la sécante matricielle d'une matrice carrée A.

source
Base.Math.cscMethod
csc(A::AbstractMatrix)

Calculez la cosecante de matrice d'une matrice carrée A.

source
Base.Math.cotMethod
cot(A::AbstractMatrix)

Calculez la cotangente matricielle d'une matrice carrée A.

source
Base.coshMethod
cosh(A::AbstractMatrix)

Calculez le cosinus hyperbolique matriciel d'une matrice carrée A.

source
Base.sinhMethod
sinh(A::AbstractMatrix)

Calculez le sinus hyperbolique matriciel d'une matrice carrée A.

source
Base.tanhMethod
tanh(A::AbstractMatrix)

Calculez la tangente hyperbolique de matrice d'une matrice carrée A.

source
Base.Math.sechMethod
sech(A::AbstractMatrix)

Calculez la sécante hyperbolique de matrice de la matrice carrée A.

source
Base.Math.cschMethod
csch(A::AbstractMatrix)

Calculez la cosecante hyperbolique de matrice de la matrice carrée A.

source
Base.Math.cothMethod
coth(A::AbstractMatrix)

Calculez le cotangent hyperbolique de matrice de la matrice carrée A.

source
Base.acosMethod
acos(A::AbstractMatrix)

Calcule le cosinus inverse d'une matrice carrée A.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer le cosinus inverse. Sinon, le cosinus inverse est déterminé en utilisant log et sqrt. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_1].

Exemples

julia> acos(cos([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5-8.32667e-17im  0.1+0.0im
 -0.2+2.63678e-16im  0.3-3.46945e-16im
source
Base.asinMethod
asin(A::AbstractMatrix)

Calculez le sinus inverse de matrice d'une matrice carrée A.

Si A est symétrique ou hermitienne, sa décomposition en valeurs propres (eigen) est utilisée pour calculer le sinus inverse. Sinon, le sinus inverse est déterminé en utilisant log et sqrt. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_2].

Exemples

julia> asin(sin([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5-4.16334e-17im  0.1-5.55112e-17im
 -0.2+9.71445e-17im  0.3-1.249e-16im
source
Base.atanMethod
atan(A::AbstractMatrix)

Calcule la tangente inverse de matrice d'une matrice carrée A.

Si A est symétrique ou hermitienne, son eigendecomposition (eigen) est utilisée pour calculer la tangente inverse. Sinon, la tangente inverse est déterminée en utilisant log. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_3].

Exemples

julia> atan(tan([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5+1.38778e-17im  0.1-2.77556e-17im
 -0.2+6.93889e-17im  0.3-4.16334e-17im
source
Base.Math.acscMethod
acsc(A::AbstractMatrix)

Calculez la cosecante de matrice inverse de A.

source
Base.Math.acotMethod
acot(A::AbstractMatrix)

Calculez la cotangente inverse de la matrice A.

source
Base.acoshMethod
acosh(A::AbstractMatrix)

Calculez le cosinus hyperbolique inverse d'une matrice carrée A. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_4].

source
Base.asinhMethod
asinh(A::AbstractMatrix)

Calculez le sinus hyperbolique inverse d'une matrice carrée A. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_5].

source
Base.atanhMethod
atanh(A::AbstractMatrix)

Calculez la tangente hyperbolique inverse d'une matrice carrée A. Pour la théorie et les formules logarithmiques utilisées pour calculer cette fonction, voir [AH16_6].

source
Base.Math.asechMethod
asech(A::AbstractMatrix)

Calculez la matrice inverse de la sécante hyperbolique de A.

source
Base.Math.acschMethod
acsch(A::AbstractMatrix)

Calculez le cosécante hyperbolique inverse de la matrice A.

source
Base.Math.acothMethod
acoth(A::AbstractMatrix)

Calculez le cotangente hyperbolique inverse de A.

source
LinearAlgebra.lyapFunction
lyap(A, C)

Calcule la solution X de l'équation de Lyapunov continue AX + XA' + C = 0, où aucun eigenvalue de A n'a de partie réelle nulle et aucun deux eigenvalues ne sont des conjugués complexes négatifs l'un de l'autre.

Exemples

julia> A = [3. 4.; 5. 6]
2×2 Matrix{Float64}:
 3.0  4.0
 5.0  6.0

julia> B = [1. 1.; 1. 2.]
2×2 Matrix{Float64}:
 1.0  1.0
 1.0  2.0

julia> X = lyap(A, B)
2×2 Matrix{Float64}:
  0.5  -0.5
 -0.5   0.25

julia> A*X + X*A' ≈ -B
true
source
LinearAlgebra.sylvesterFunction
sylvester(A, B, C)

Calcule la solution X de l'équation de Sylvester AX + XB + C = 0, où A, B et C ont des dimensions compatibles et A et -B n'ont pas d'autovalues avec une partie réelle égale.

Exemples

julia> A = [3. 4.; 5. 6]
2×2 Matrix{Float64}:
 3.0  4.0
 5.0  6.0

julia> B = [1. 1.; 1. 2.]
2×2 Matrix{Float64}:
 1.0  1.0
 1.0  2.0

julia> C = [1. 2.; -2. 1]
2×2 Matrix{Float64}:
  1.0  2.0
 -2.0  1.0

julia> X = sylvester(A, B, C)
2×2 Matrix{Float64}:
 -4.46667   1.93333
  3.73333  -1.8

julia> A*X + X*B ≈ -C
true
source
LinearAlgebra.issuccessFunction
issuccess(F::Factorization)

Testez si une factorisation d'une matrice a réussi.

Julia 1.6

issuccess(::CholeskyPivoted) nécessite Julia 1.6 ou une version ultérieure.

Exemples

julia> F = cholesky([1 0; 0 1]);

julia> issuccess(F)
true
source
issuccess(F::LU; allowsingular = false)

Testez si la factorisation LU d'une matrice a réussi. Par défaut, une factorisation qui produit un facteur U valide mais de rang déficient est considérée comme un échec. Cela peut être modifié en passant allowsingular = true.

Julia 1.11

L'argument clé allowsingular a été ajouté dans Julia 1.11.

Exemples

julia> F = lu([1 2; 1 2], check = false);

julia> issuccess(F)
false

julia> issuccess(F, allowsingular = true)
true
source
LinearAlgebra.issymmetricFunction
issymmetric(A) -> Bool

Teste si une matrice est symétrique.

Exemples

julia> a = [1 2; 2 -1]
2×2 Matrix{Int64}:
 1   2
 2  -1

julia> issymmetric(a)
true

julia> b = [1 im; -im 1]
2×2 Matrix{Complex{Int64}}:
 1+0im  0+1im
 0-1im  1+0im

julia> issymmetric(b)
false
source
LinearAlgebra.isposdefFunction
isposdef(A) -> Bool

Testez si une matrice est définie positive (et Hermitienne) en essayant d'effectuer une factorisation de Cholesky de A.

Voir aussi isposdef!, cholesky.

Exemples

julia> A = [1 2; 2 50]
2×2 Matrix{Int64}:
 1   2
 2  50

julia> isposdef(A)
true
source
LinearAlgebra.isposdef!Function
isposdef!(A) -> Bool

Testez si une matrice est définie positive (et Hermitienne) en essayant d'effectuer une factorisation de Cholesky de A, en écrasant A dans le processus. Voir aussi isposdef.

Exemples

julia> A = [1. 2.; 2. 50.];

julia> isposdef!(A)
true

julia> A
2×2 Matrix{Float64}:
 1.0  2.0
 2.0  6.78233
source
LinearAlgebra.istrilFunction
istril(A::AbstractMatrix, k::Integer = 0) -> Bool

Testez si A est triangulaire inférieure à partir de la k-ième superdiagonale.

Exemples

julia> a = [1 2; 2 -1]
2×2 Matrix{Int64}:
 1   2
 2  -1

julia> istril(a)
false

julia> istril(a, 1)
true

julia> c = [1 1 0; 1 1 1; 1 1 1]
3×3 Matrix{Int64}:
 1  1  0
 1  1  1
 1  1  1

julia> istril(c)
false

julia> istril(c, 1)
true
source
LinearAlgebra.istriuFunction
istriu(A::AbstractMatrix, k::Integer = 0) -> Bool

Testez si A est triangulaire supérieure à partir de la k-ième superdiagonale.

Exemples

julia> a = [1 2; 2 -1]
2×2 Matrix{Int64}:
 1   2
 2  -1

julia> istriu(a)
false

julia> istriu(a, -1)
true

julia> c = [1 1 1; 1 1 1; 0 1 1]
3×3 Matrix{Int64}:
 1  1  1
 1  1  1
 0  1  1

julia> istriu(c)
false

julia> istriu(c, -1)
true
source
LinearAlgebra.isdiagFunction
isdiag(A) -> Bool

Testez si une matrice est diagonale dans le sens où iszero(A[i,j]) est vrai sauf si i == j. Notez qu'il n'est pas nécessaire que A soit carrée ; si vous souhaitez également vérifier cela, vous devez vérifier que size(A, 1) == size(A, 2).

Exemples

julia> a = [1 2; 2 -1]
2×2 Matrix{Int64}:
 1   2
 2  -1

julia> isdiag(a)
false

julia> b = [im 0; 0 -im]
2×2 Matrix{Complex{Int64}}:
 0+1im  0+0im
 0+0im  0-1im

julia> isdiag(b)
true

julia> c = [1 0 0; 0 2 0]
2×3 Matrix{Int64}:
 1  0  0
 0  2  0

julia> isdiag(c)
true

julia> d = [1 0 0; 0 2 3]
2×3 Matrix{Int64}:
 1  0  0
 0  2  3

julia> isdiag(d)
false
source
LinearAlgebra.ishermitianFunction
ishermitian(A) -> Bool

Testez si une matrice est Hermitienne.

Exemples

julia> a = [1 2; 2 -1]
2×2 Matrix{Int64}:
 1   2
 2  -1

julia> ishermitian(a)
true

julia> b = [1 im; -im 1]
2×2 Matrix{Complex{Int64}}:
 1+0im  0+1im
 0-1im  1+0im

julia> ishermitian(b)
true
source
Base.transposeFunction
transpose(A)

Transposition paresseuse. La mutation de l'objet retourné doit muter A de manière appropriée. Souvent, mais pas toujours, cela donne Transpose(A), où Transpose est un wrapper de transposition paresseuse. Notez que cette opération est récursive.

Cette opération est destinée à un usage en algèbre linéaire - pour la manipulation générale des données, voir permutedims, qui est non récursive.

Exemples

julia> A = [3 2; 0 0]
2×2 Matrix{Int64}:
 3  2
 0  0

julia> B = transpose(A)
2×2 transpose(::Matrix{Int64}) with eltype Int64:
 3  0
 2  0

julia> B isa Transpose
true

julia> transpose(B) === A # la transposition d'une transposition déplie le parent
true

julia> Transpose(B) # cependant, le constructeur enveloppe toujours son argument
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # modifier B modifiera automatiquement A

julia> A
2×2 Matrix{Int64}:
 3  2
 4  0

Pour les matrices complexes, l'opération adjoint est équivalente à une transposition conjuguée.

julia> A = reshape([Complex(x, x) for x in 1:4], 2, 2)
2×2 Matrix{Complex{Int64}}:
 1+1im  3+3im
 2+2im  4+4im

julia> adjoint(A) == conj(transpose(A))
true

La transpose d'un AbstractVector est un vecteur ligne :

julia> v = [1,2,3]
3-element Vector{Int64}:
 1
 2
 3

julia> transpose(v) # retourne un vecteur ligne
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia> transpose(v) * v # calcule le produit scalaire
14

Pour une matrice de matrices, les blocs individuels sont opérés de manière récursive :

julia> C = [1 3; 2 4]
2×2 Matrix{Int64}:
 1  3
 2  4

julia> D = reshape([C, 2C, 3C, 4C], 2, 2) # construire une matrice bloc
2×2 Matrix{Matrix{Int64}}:
 [1 3; 2 4]  [3 9; 6 12]
 [2 6; 4 8]  [4 12; 8 16]

julia> transpose(D) # les blocs sont transposés de manière récursive
2×2 transpose(::Matrix{Matrix{Int64}}) with eltype Transpose{Int64, Matrix{Int64}}:
 [1 2; 3 4]   [2 4; 6 8]
 [3 6; 9 12]  [4 8; 12 16]
source
transpose(F::Factorization)

Transposition paresseuse de la factorisation F. Par défaut, renvoie une TransposeFactorization, sauf pour les Factorization avec un eltype réel, auquel cas renvoie une AdjointFactorization.

source
LinearAlgebra.transpose!Function
transpose!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

Transposer la matrice A et la stocke dans la matrice X. size(X) doit être égal à size(transpose(A)). Aucune mémoire supplémentaire n'est allouée en dehors du redimensionnement de rowval et nzval de X, si nécessaire.

Voir halfperm!

source
transpose!(dest,src)

Transposer le tableau src et stocker le résultat dans le tableau préalloué dest, qui doit avoir une taille correspondant à (size(src,2),size(src,1)). Aucune transposition en place n'est supportée et des résultats inattendus se produiront si src et dest ont des régions de mémoire qui se chevauchent.

Exemples

julia> A = [3+2im 9+2im; 8+7im  4+6im]
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im

julia> B = zeros(Complex{Int64}, 2, 2)
2×2 Matrix{Complex{Int64}}:
 0+0im  0+0im
 0+0im  0+0im

julia> transpose!(B, A);

julia> B
2×2 Matrix{Complex{Int64}}:
 3+2im  8+7im
 9+2im  4+6im

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im
source
LinearAlgebra.TransposeType
Transposé

Type d'enveloppe paresseux pour une vue transposée de l'objet d'algèbre linéaire sous-jacent, généralement un AbstractVector/AbstractMatrix. En général, le constructeur Transpose ne doit pas être appelé directement, utilisez plutôt transpose. Pour matérialiser la vue, utilisez copy.

Ce type est destiné à une utilisation en algèbre linéaire - pour la manipulation générale des données, voir permutedims.

Exemples

julia> A = [2 3; 0 0]
2×2 Matrix{Int64}:
 2  3
 0  0

julia> Transpose(A)
2×2 transpose(::Matrix{Int64}) with eltype Int64:
 2  0
 3  0
source
Base.adjointFunction
A'
adjoint(A)

Adjoint paresseux (transposition conjuguée). Notez que adjoint est appliqué de manière récursive aux éléments.

Pour les types numériques, adjoint renvoie le conjugué complexe, et donc il est équivalent à la fonction identité pour les nombres réels.

Cette opération est destinée à une utilisation en algèbre linéaire - pour la manipulation générale des données, voir permutedims.

Exemples

julia> A = [3+2im 9+2im; 0  0]
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 0+0im  0+0im

julia> B = A' # équivalent à adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im

julia> B isa Adjoint
true

julia> adjoint(B) === A # l'adjoint d'un adjoint déplie le parent
true

julia> Adjoint(B) # cependant, le constructeur enveloppe toujours son argument
2×2 adjoint(adjoint(::Matrix{Complex{Int64}})) with eltype Complex{Int64}:
 3+2im  9+2im
 0+0im  0+0im

julia> B[1,2] = 4 + 5im; # modifier B modifiera automatiquement A

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 4-5im  0+0im

Pour les matrices réelles, l'opération adjoint est équivalente à une transpose.

julia> A = reshape([x for x in 1:4], 2, 2)
2×2 Matrix{Int64}:
 1  3
 2  4

julia> A'
2×2 adjoint(::Matrix{Int64}) with eltype Int64:
 1  2
 3  4

julia> adjoint(A) == transpose(A)
true

L'adjoint d'un AbstractVector est un vecteur ligne :

julia> x = [3, 4im]
2-element Vector{Complex{Int64}}:
 3 + 0im
 0 + 4im

julia> x'
1×2 adjoint(::Vector{Complex{Int64}}) with eltype Complex{Int64}:
 3+0im  0-4im

julia> x'x # calculer le produit scalaire, équivalent à x' * x
25 + 0im

Pour une matrice de matrices, les blocs individuels sont opérés de manière récursive :

julia> A = reshape([x + im*x for x in 1:4], 2, 2)
2×2 Matrix{Complex{Int64}}:
 1+1im  3+3im
 2+2im  4+4im

julia> C = reshape([A, 2A, 3A, 4A], 2, 2)
2×2 Matrix{Matrix{Complex{Int64}}}:
 [1+1im 3+3im; 2+2im 4+4im]  [3+3im 9+9im; 6+6im 12+12im]
 [2+2im 6+6im; 4+4im 8+8im]  [4+4im 12+12im; 8+8im 16+16im]

julia> C'
2×2 adjoint(::Matrix{Matrix{Complex{Int64}}}) with eltype Adjoint{Complex{Int64}, Matrix{Complex{Int64}}}:
 [1-1im 2-2im; 3-3im 4-4im]    [2-2im 4-4im; 6-6im 8-8im]
 [3-3im 6-6im; 9-9im 12-12im]  [4-4im 8-8im; 12-12im 16-16im]
source
adjoint(F::Factorization)

Adjoint paresseux de la factorisation F. Par défaut, renvoie un wrapper AdjointFactorization.

source
LinearAlgebra.adjoint!Function
adjoint!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

Transposer la matrice A et stocke l'adjoint des éléments dans la matrice X. size(X) doit être égal à size(transpose(A)). Aucune mémoire supplémentaire n'est allouée en dehors du redimensionnement de rowval et nzval de X, si nécessaire.

Voir halfperm!

source
adjoint!(dest,src)

Transpose conjuguée du tableau src et stockez le résultat dans le tableau préalloué dest, qui doit avoir une taille correspondant à (size(src,2),size(src,1)). Aucune transposition en place n'est prise en charge et des résultats inattendus se produiront si src et dest ont des régions de mémoire qui se chevauchent.

Exemples

julia> A = [3+2im 9+2im; 8+7im  4+6im]
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im

julia> B = zeros(Complex{Int64}, 2, 2)
2×2 Matrix{Complex{Int64}}:
 0+0im  0+0im
 0+0im  0+0im

julia> adjoint!(B, A);

julia> B
2×2 Matrix{Complex{Int64}}:
 3-2im  8-7im
 9-2im  4-6im

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im
source
LinearAlgebra.AdjointType
Adjoint

Type d'enveloppe paresseux pour une vue adjoint de l'objet d'algèbre linéaire sous-jacent, généralement un AbstractVector/AbstractMatrix. En général, le constructeur Adjoint ne doit pas être appelé directement, utilisez plutôt adjoint. Pour matérialiser la vue, utilisez copy.

Ce type est destiné à une utilisation en algèbre linéaire - pour la manipulation générale des données, voir permutedims.

Exemples

julia> A = [3+2im 9+2im; 0 0]
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 0+0im  0+0im

julia> Adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im
source
Base.copyMethod
copy(A::Transpose)
copy(A::Adjoint)

Évaluez avec empressement la transposition/adjointe de matrice paresseuse. Notez que la transposition est appliquée de manière récursive aux éléments.

Cette opération est destinée à un usage en algèbre linéaire - pour une manipulation générale des données, voir permutedims, qui est non récursive.

Exemples

julia> A = [1 2im; -3im 4]
2×2 Matrix{Complex{Int64}}:
 1+0im  0+2im
 0-3im  4+0im

julia> T = transpose(A)
2×2 transpose(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 1+0im  0-3im
 0+2im  4+0im

julia> copy(T)
2×2 Matrix{Complex{Int64}}:
 1+0im  0-3im
 0+2im  4+0im
source
LinearAlgebra.stride1Function
stride1(A) -> Int

Retourne la distance entre les éléments successifs du tableau dans la dimension 1 en unités de taille d'élément.

Exemples

julia> A = [1,2,3,4]
4-element Vector{Int64}:
 1
 2
 3
 4

julia> LinearAlgebra.stride1(A)
1

julia> B = view(A, 2:2:4)
2-element view(::Vector{Int64}, 2:2:4) with eltype Int64:
 2
 4

julia> LinearAlgebra.stride1(B)
2
source
LinearAlgebra.checksquareFunction
LinearAlgebra.checksquare(A)

Vérifiez qu'une matrice est carrée, puis renvoyez sa dimension commune. Pour plusieurs arguments, renvoyez un vecteur.

Exemples

julia> A = fill(1, (4,4)); B = fill(1, (5,5));

julia> LinearAlgebra.checksquare(A, B)
2-element Vector{Int64}:
 4
 5
source
LinearAlgebra.peakflopsFunction
LinearAlgebra.peakflops(n::Integer=4096; eltype::DataType=Float64, ntrials::Integer=3, parallel::Bool=false)

peakflops calcule le taux de flop maximal de l'ordinateur en utilisant la précision double gemm!. Par défaut, si aucun argument n'est spécifié, il multiplie deux matrices Float64 de taille n x n, où n = 4096. Si le BLAS sous-jacent utilise plusieurs threads, des taux de flop plus élevés sont réalisés. Le nombre de threads BLAS peut être défini avec BLAS.set_num_threads(n).

Si l'argument clé eltype est fourni, peakflops construira des matrices avec des éléments de type eltype pour calculer le taux de flop maximal.

Par défaut, peakflops utilisera le meilleur timing parmi 3 essais. Si l'argument clé ntrials est fourni, peakflops utilisera ce nombre d'essais pour choisir le meilleur timing.

Si l'argument clé parallel est défini sur true, peakflops est exécuté en parallèle sur tous les processeurs de travail. Le taux de flop de l'ensemble de l'ordinateur parallèle est retourné. Lors de l'exécution en parallèle, un seul thread BLAS est utilisé. L'argument n fait toujours référence à la taille du problème qui est résolu sur chaque processeur.

Julia 1.1

Cette fonction nécessite au moins Julia 1.1. Dans Julia 1.0, elle est disponible dans la bibliothèque standard InteractiveUtils.

source
LinearAlgebra.hermitianpartFunction
hermitianpart(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

Retourne la partie hermitienne de la matrice carrée A, définie comme (A + A') / 2, sous forme d'une matrice Hermitian. Pour les matrices réelles A, cela est également connu sous le nom de partie symétrique de A ; on l'appelle parfois la "partie réelle de l'opérateur". L'argument optionnel uplo contrôle l'argument correspondant de la vue Hermitian. Pour les matrices réelles, cette dernière est équivalente à une vue Symmetric.

Voir aussi hermitianpart! pour l'opération correspondante en place.

Julia 1.10

Cette fonction nécessite Julia 1.10 ou une version ultérieure.

source
LinearAlgebra.hermitianpart!Function
hermitianpart!(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

Écrasez la matrice carrée A sur place avec sa partie hermitienne (A + A') / 2, et retournez Hermitian(A, uplo). Pour les matrices réelles A, cela est également connu sous le nom de partie symétrique de A.

Voir aussi hermitianpart pour l'opération correspondante hors place.

Julia 1.10

Cette fonction nécessite Julia 1.10 ou une version ultérieure.

source
LinearAlgebra.copy_adjoint!Function
copy_adjoint!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
                A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> B

Copier efficacement les éléments de la matrice A vers B avec adjunction comme suit :

B[ir_dest, jr_dest] = adjoint(A)[jr_src, ir_src]

Les éléments B[ir_dest, jr_dest] sont écrasés. De plus, les paramètres de plage d'index doivent satisfaire length(ir_dest) == length(jr_src) et length(jr_dest) == length(ir_src).

source
LinearAlgebra.copy_transpose!Function
copy_transpose!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
                A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> B

Copier efficacement les éléments de la matrice A vers B avec transposition comme suit :

B[ir_dest, jr_dest] = transpose(A)[jr_src, ir_src]

Les éléments B[ir_dest, jr_dest] sont écrasés. De plus, les paramètres de plage d'index doivent satisfaire length(ir_dest) == length(jr_src) et length(jr_dest) == length(ir_src).

source
copy_transpose!(B::AbstractMatrix, ir_dest::AbstractUnitRange, jr_dest::AbstractUnitRange,
                tM::AbstractChar,
                M::AbstractVecOrMat, ir_src::AbstractUnitRange, jr_src::AbstractUnitRange) -> B

Copier efficacement les éléments de la matrice M vers B en fonction du paramètre de caractère tM comme suit :

tMDestinationSource
'N'B[ir_dest, jr_dest]transpose(M)[jr_src, ir_src]
'T'B[ir_dest, jr_dest]M[jr_src, ir_src]
'C'B[ir_dest, jr_dest]conj(M)[jr_src, ir_src]

Les éléments B[ir_dest, jr_dest] sont écrasés. De plus, les paramètres de plage d'index doivent satisfaire length(ir_dest) == length(jr_src) et length(jr_dest) == length(ir_src).

Voir aussi copyto! et copy_adjoint!.

source

Low-level matrix operations

Dans de nombreux cas, il existe des versions en place des opérations matricielles qui vous permettent de fournir un vecteur ou une matrice de sortie pré-alloué. Cela est utile lors de l'optimisation de code critique afin d'éviter le surcoût des allocations répétées. Ces opérations en place sont suffixées par ! ci-dessous (par exemple mul!) selon la convention habituelle de Julia.

LinearAlgebra.mul!Function
mul!(Y, A, B) -> Y

Calcule le produit matrice-matrice ou matrice-vecteur $A B$ et stocke le résultat dans Y, écrasant la valeur existante de Y. Notez que Y ne doit pas être aliasé avec A ou B.

Exemples

julia> A = [1.0 2.0; 3.0 4.0]; B = [1.0 1.0; 1.0 1.0]; Y = similar(B);

julia> mul!(Y, A, B) === Y
true

julia> Y
2×2 Matrix{Float64}:
 3.0  3.0
 7.0  7.0

julia> Y == A * B
true

Implémentation

Pour les types de matrices et de vecteurs personnalisés, il est recommandé d'implémenter mul! à 5 arguments plutôt que d'implémenter directement mul! à 3 arguments si possible.

source
mul!(C, A, B, α, β) -> C

Multiplication-addition de matrices ou de vecteurs en place combinée $A B α + C β$. Le résultat est stocké dans C en le remplaçant. Notez que C ne doit pas être aliasé avec A ou B.

Julia 1.3

mul! à cinq arguments nécessite au moins Julia 1.3.

Exemples

julia> A = [1.0 2.0; 3.0 4.0]; B = [1.0 1.0; 1.0 1.0]; C = [1.0 2.0; 3.0 4.0];

julia> α, β = 100.0, 10.0;

julia> mul!(C, A, B, α, β) === C
true

julia> C
2×2 Matrix{Float64}:
 310.0  320.0
 730.0  740.0

julia> C_original = [1.0 2.0; 3.0 4.0]; # Une copie de la valeur originale de C

julia> C == A * B * α + C_original * β
true
source
LinearAlgebra.lmul!Function
lmul!(a::Number, B::AbstractArray)

Échelle d'un tableau B par un scalaire a en écrasant B sur place. Utilisez rmul! pour multiplier le scalaire par la droite. L'opération de mise à l'échelle respecte la sémantique de la multiplication * entre a et un élément de B. En particulier, cela s'applique également à la multiplication impliquant des nombres non finis tels que NaN et ±Inf.

Julia 1.1

Avant Julia 1.1, les entrées NaN et ±Inf dans B étaient traitées de manière incohérente.

Exemples

julia> B = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> lmul!(2, B)
2×2 Matrix{Int64}:
 2  4
 6  8

julia> lmul!(0.0, [Inf])
1-element Vector{Float64}:
 NaN
source
lmul!(A, B)

Calcule le produit matriciel $AB$, en écrasant B, et retourne le résultat. Ici, A doit être d'un type de matrice spécial, comme, par exemple, Diagonal, UpperTriangular ou LowerTriangular, ou d'un type orthogonal, voir QR.

Exemples

julia> B = [0 1; 1 0];

julia> A = UpperTriangular([1 2; 0 3]);

julia> lmul!(A, B);

julia> B
2×2 Matrix{Int64}:
 2  1
 3  0

julia> B = [1.0 2.0; 3.0 4.0];

julia> F = qr([0 1; -1 0]);

julia> lmul!(F.Q, B)
2×2 Matrix{Float64}:
 3.0  4.0
 1.0  2.0
source
LinearAlgebra.rmul!Function
rmul!(A::AbstractArray, b::Number)

Échelle un tableau A par un scalaire b en écrasant A sur place. Utilisez lmul! pour multiplier le scalaire par la gauche. L'opération de mise à l'échelle respecte la sémantique de la multiplication * entre un élément de A et b. En particulier, cela s'applique également à la multiplication impliquant des nombres non finis tels que NaN et ±Inf.

Julia 1.1

Avant Julia 1.1, les entrées NaN et ±Inf dans A étaient traitées de manière incohérente.

Exemples

julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> rmul!(A, 2)
2×2 Matrix{Int64}:
 2  4
 6  8

julia> rmul!([NaN], 0.0)
1-element Vector{Float64}:
 NaN
source
rmul!(A, B)

Calcule le produit matrice-matrice $AB$, en écrasant A, et retourne le résultat. Ici, B doit être d'un type de matrice spécial, comme, par exemple, Diagonal, UpperTriangular ou LowerTriangular, ou d'un type orthogonal, voir QR.

Exemples

julia> A = [0 1; 1 0];

julia> B = UpperTriangular([1 2; 0 3]);

julia> rmul!(A, B);

julia> A
2×2 Matrix{Int64}:
 0  3
 1  2

julia> A = [1.0 2.0; 3.0 4.0];

julia> F = qr([0 1; -1 0]);

julia> rmul!(A, F.Q)
2×2 Matrix{Float64}:
 2.0  1.0
 4.0  3.0
source
LinearAlgebra.ldiv!Function
ldiv!(Y, A, B) -> Y

Calcule A \ B sur place et stocke le résultat dans Y, en retournant le résultat.

L'argument A ne doit pas être une matrice. Au lieu de matrices, il doit s'agir d'un objet de factorisation (par exemple, produit par factorize ou cholesky). La raison en est que la factorisation elle-même est à la fois coûteuse et nécessite généralement d'allouer de la mémoire (bien qu'elle puisse également être effectuée sur place via, par exemple, lu!), et les situations critiques en termes de performance nécessitant ldiv! exigent généralement un contrôle fin sur la factorisation de A.

Note

Certains types de matrices structurées, tels que Diagonal et UpperTriangular, sont autorisés, car ils sont déjà sous une forme factorisée.

Exemples

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> X = [1; 2.5; 3];

julia> Y = zero(X);

julia> ldiv!(Y, qr(A), X);

julia> Y ≈ A\X
true
source
ldiv!(A, B)

Calcule A \ B sur place et écrase B pour stocker le résultat.

L'argument A ne doit pas être une matrice. Au lieu de matrices, il doit s'agir d'un objet de factorisation (par exemple, produit par factorize ou cholesky). La raison en est que la factorisation elle-même est à la fois coûteuse et nécessite généralement d'allouer de la mémoire (bien qu'elle puisse également être effectuée sur place via, par exemple, lu!), et les situations critiques en termes de performance nécessitant ldiv! nécessitent généralement également un contrôle fin sur la factorisation de A.

Note

Certains types de matrices structurées, tels que Diagonal et UpperTriangular, sont autorisés, car ils sont déjà sous une forme factorisée

Exemples

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> X = [1; 2.5; 3];

julia> Y = copy(X);

julia> ldiv!(qr(A), X);

julia> X ≈ A\Y
true
source
ldiv!(a::Number, B::AbstractArray)

Divise chaque entrée d'un tableau B par un scalaire a en écrasant B sur place. Utilisez rdiv! pour diviser le scalaire par la droite.

Exemples

julia> B = [1.0 2.0; 3.0 4.0]
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

julia> ldiv!(2.0, B)
2×2 Matrix{Float64}:
 0.5  1.0
 1.5  2.0
source
ldiv!(A::Tridiagonal, B::AbstractVecOrMat) -> B

Calcule A \ B sur place par élimination de Gauss avec pivotement partiel et stocke le résultat dans B, retournant le résultat. Dans le processus, les diagonales de A sont également écrasées.

Julia 1.11

ldiv! pour les côtés gauche Tridiagonal nécessite au moins Julia 1.11.

source
LinearAlgebra.rdiv!Function
rdiv!(A, B)

Calcule A / B sur place et écrase A pour stocker le résultat.

L'argument B ne doit pas être une matrice. Au lieu de matrices, il doit s'agir d'un objet de factorisation (par exemple, produit par factorize ou cholesky). La raison en est que la factorisation elle-même est à la fois coûteuse et nécessite généralement de l'allocation de mémoire (bien qu'elle puisse également être effectuée sur place via, par exemple, lu!), et les situations critiques en termes de performance nécessitant rdiv! exigent généralement un contrôle fin sur la factorisation de B.

Note

Certains types de matrices structurées, tels que Diagonal et UpperTriangular, sont autorisés, car ils sont déjà sous une forme factorisée.

source
rdiv!(A::AbstractArray, b::Number)

Divise chaque entrée d'un tableau A par un scalaire b en écrasant A sur place. Utilisez ldiv! pour diviser le scalaire par la gauche.

Exemples

julia> A = [1.0 2.0; 3.0 4.0]
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

julia> rdiv!(A, 2.0)
2×2 Matrix{Float64}:
 0.5  1.0
 1.5  2.0
source

BLAS functions

En Julia (comme dans une grande partie du calcul scientifique), les opérations d'algèbre linéaire dense sont basées sur le LAPACK library, qui est lui-même construit sur des blocs de construction d'algèbre linéaire de base connus sous le nom de BLAS. Il existe des implémentations hautement optimisées de BLAS disponibles pour chaque architecture informatique, et parfois, dans des routines d'algèbre linéaire haute performance, il est utile d'appeler directement les fonctions BLAS.

LinearAlgebra.BLAS fournit des wrappers pour certaines des fonctions BLAS. Les fonctions BLAS qui écrasent l'un des tableaux d'entrée ont des noms se terminant par '!'. En général, une fonction BLAS a quatre méthodes définies, pour Float32, Float64, ComplexF32, et ComplexF64 tableaux.

BLAS character arguments

De nombreuses fonctions BLAS acceptent des arguments qui déterminent s'il faut transposer un argument (trans), quel triangle d'une matrice référencer (uplo ou ul), si la diagonale d'une matrice triangulaire peut être supposée être entièrement composée de uns (dA) ou de quel côté d'une multiplication de matrices l'argument d'entrée appartient (side). Les possibilités sont :

Multiplication order

sideMeaning
'L'The argument goes on the left side of a matrix-matrix operation.
'R'The argument goes on the right side of a matrix-matrix operation.

Triangle referencing

uplo/ulMeaning
'U'Only the upper triangle of the matrix will be used.
'L'Only the lower triangle of the matrix will be used.

Transposition operation

trans/tXMeaning
'N'The input matrix X is not transposed or conjugated.
'T'The input matrix X will be transposed.
'C'The input matrix X will be conjugated and transposed.

Unit diagonal

diag/dXMeaning
'N'The diagonal values of the matrix X will be read.
'U'The diagonal of the matrix X is assumed to be all ones.
LinearAlgebra.BLAS.set_num_threadsFunction
set_num_threads(n::Integer)
set_num_threads(::Nothing)

Définissez le nombre de threads que la bibliothèque BLAS doit utiliser égal à n::Integer.

Accepte également nothing, auquel cas julia essaie de deviner le nombre par défaut de threads. Passer nothing est déconseillé et existe principalement pour des raisons historiques.

source

Les fonctions BLAS peuvent être divisées en trois groupes, également appelés trois niveaux, en fonction de la date à laquelle elles ont été proposées pour la première fois, du type de paramètres d'entrée et de la complexité de l'opération.

Level 1 BLAS functions

Les fonctions BLAS de niveau 1 ont été proposées pour la première fois dans [(Lawson, 1979)][Lawson-1979] et définissent des opérations entre des scalaires et des vecteurs.

[Lawson-1979]: https://dl.acm.org/doi/10.1145/355841.355847

LinearAlgebra.BLAS.rot!Function
rot!(n, X, incx, Y, incy, c, s)

Écrase X avec c*X + s*Y et Y avec -conj(s)*X + c*Y pour les premiers n éléments du tableau X avec un pas incx et les premiers n éléments du tableau Y avec un pas incy. Renvoie X et Y.

Julia 1.5

rot! nécessite au moins Julia 1.5.

source
LinearAlgebra.BLAS.scal!Function
scal!(n, a, X, incx)
scal!(a, X)

Écrasez X avec a*X pour les premiers n éléments du tableau X avec un pas incx. Renvoie X.

Si n et incx ne sont pas fournis, length(X) et stride(X,1) sont utilisés.

source
LinearAlgebra.BLAS.scalFunction
scal(n, a, X, incx)
scal(a, X)

Renvoie X mis à l'échelle par a pour les premiers n éléments du tableau X avec un pas incx.

Si n et incx ne sont pas fournis, length(X) et stride(X,1) sont utilisés.

source
LinearAlgebra.BLAS.blascopy!Function
blascopy!(n, X, incx, Y, incy)

Copie n éléments du tableau X avec un pas incx vers le tableau Y avec un pas incy. Renvoie Y.

source
LinearAlgebra.BLAS.dotFunction
dot(n, X, incx, Y, incy)

Produit scalaire de deux vecteurs consistant en n éléments du tableau X avec un pas incx et n éléments du tableau Y avec un pas incy.

Exemples

julia> BLAS.dot(10, fill(1.0, 10), 1, fill(1.0, 20), 2)
10.0
source
LinearAlgebra.BLAS.dotuFunction
dotu(n, X, incx, Y, incy)

Fonction Dot pour deux vecteurs complexes consistant en n éléments du tableau X avec un pas incx et n éléments du tableau Y avec un pas incy.

Exemples

julia> BLAS.dotu(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
-10.0 + 10.0im
source
LinearAlgebra.BLAS.dotcFunction
dotc(n, X, incx, U, incy)

Fonction Dot pour deux vecteurs complexes, consistant en n éléments du tableau X avec un pas incx et n éléments du tableau U avec un pas incy, conjuguant le premier vecteur.

Exemples

julia> BLAS.dotc(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
10.0 - 10.0im
source
LinearAlgebra.BLAS.nrm2Function
nrm2(n, X, incx)

2-norme d'un vecteur composé de n éléments du tableau X avec un pas incx.

Exemples

julia> BLAS.nrm2(4, fill(1.0, 8), 2)
2.0

julia> BLAS.nrm2(1, fill(1.0, 8), 2)
1.0
source
LinearAlgebra.BLAS.asumFunction
asum(n, X, incx)

Somme des magnitudes des premiers n éléments du tableau X avec un pas incx.

Pour un tableau réel, la magnitude est la valeur absolue. Pour un tableau complexe, la magnitude est la somme de la valeur absolue de la partie réelle et de la valeur absolue de la partie imaginaire.

Exemples

julia> BLAS.asum(5, fill(1.0im, 10), 2)
5.0

julia> BLAS.asum(2, fill(1.0im, 10), 5)
2.0
source
LinearAlgebra.BLAS.iamaxFunction
iamax(n, dx, incx)
iamax(dx)

Trouvez l'indice de l'élément de dx ayant la valeur absolue maximale. n est la longueur de dx, et incx est le pas. Si n et incx ne sont pas fournis, ils supposent des valeurs par défaut de n=length(dx) et incx=stride1(dx).

source

Level 2 BLAS functions

Les fonctions BLAS de niveau 2 ont été publiées dans [(Dongarra, 1988)][Dongarra-1988] et définissent des opérations matrice-vecteur.

[Dongarra-1988]: https://dl.acm.org/doi/10.1145/42288.42291

retourner un vecteur

LinearAlgebra.BLAS.gemv!Function
gemv!(tA, alpha, A, x, beta, y)

Met à jour le vecteur y comme alpha*A*x + beta*y ou alpha*A'x + beta*y selon tA. alpha et beta sont des scalaires. Retourne le y mis à jour.

source
LinearAlgebra.BLAS.gbmv!Function
gbmv!(trans, m, kl, ku, alpha, A, x, beta, y)

Met à jour le vecteur y comme alpha*A*x + beta*y ou alpha*A'*x + beta*y selon trans. La matrice A est une matrice bande générale de dimension m par size(A,2) avec kl sous-diagonales et ku super-diagonales. alpha et beta sont des scalaires. Retourne le y mis à jour.

source
LinearAlgebra.BLAS.gbmvFunction
gbmv(trans, m, kl, ku, alpha, A, x)

Retourne alpha*A*x ou alpha*A'*x selon trans. La matrice A est une matrice bande générale de dimension m par size(A,2) avec kl sous-diagonales et ku super-diagonales, et alpha est un scalaire.

source
LinearAlgebra.BLAS.hemv!Function
hemv!(ul, alpha, A, x, beta, y)

Met à jour le vecteur y comme alpha*A*x + beta*y. A est supposé être hermitien. Seul le triangle ul de A est utilisé. alpha et beta sont des scalaires. Retourne le y mis à jour.

source
LinearAlgebra.BLAS.hemvMethod
hemv(ul, alpha, A, x)

Retourne alpha*A*x. A est supposé être hermitien. Seule la ul triangle de A est utilisée. alpha est un scalaire.

source
LinearAlgebra.BLAS.hpmv!Function
hpmv!(uplo, α, AP, x, β, y)

Met à jour le vecteur y comme α*A*x + β*y, où A est une matrice hermitienne fournie au format packagé AP.

Avec uplo = 'U', le tableau AP doit contenir la partie triangulaire supérieure de la matrice hermitienne packagée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[1, 2] et A[2, 2], et ainsi de suite.

Avec uplo = 'L', le tableau AP doit contenir la partie triangulaire inférieure de la matrice hermitienne packagée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[2, 1] et A[3, 1], et ainsi de suite.

Les entrées scalaires α et β doivent être des nombres complexes ou réels.

Les entrées de tableau x, y et AP doivent toutes être de type ComplexF32 ou ComplexF64.

Retourne le y mis à jour.

Julia 1.5

hpmv! nécessite au moins Julia 1.5.

source
LinearAlgebra.BLAS.symv!Function
symv!(ul, alpha, A, x, beta, y)

Met à jour le vecteur y comme alpha*A*x + beta*y. A est supposé être symétrique. Seule la triangle ul de A est utilisée. alpha et beta sont des scalaires. Retourne le y mis à jour.

source
LinearAlgebra.BLAS.symvMethod
symv(ul, alpha, A, x)

Retourne alpha*A*x. A est supposé être symétrique. Seule la ul triangle de A est utilisée. alpha est un scalaire.

source
LinearAlgebra.BLAS.sbmv!Function
sbmv!(uplo, k, alpha, A, x, beta, y)

Met à jour le vecteur y comme alpha*A*x + beta*yA est une matrice symétrique en bande d'ordre size(A,2) avec k super-diagonales stockées dans l'argument A. La disposition de stockage pour A est décrite dans le module de référence BLAS, BLAS de niveau 2 à https://www.netlib.org/lapack/explore-html/. Seul le triangle uplo de A est utilisé.

Retourne le y mis à jour.

source
LinearAlgebra.BLAS.sbmvMethod
sbmv(uplo, k, alpha, A, x)

Retourne alpha*A*xA est une matrice symétrique en bande d'ordre size(A,2) avec k super-diagonales stockées dans l'argument A. Seul le triangle uplo de A est utilisé.

source
LinearAlgebra.BLAS.sbmvMethod
sbmv(uplo, k, A, x)

Retourne A*xA est une matrice symétrique en bande d'ordre size(A,2) avec k super-diagonales stockées dans l'argument A. Seule la triangle uplo de A est utilisée.

source
LinearAlgebra.BLAS.spmv!Function
spmv!(uplo, α, AP, x, β, y)

Met à jour le vecteur y comme α*A*x + β*y, où A est une matrice symétrique fournie au format packagé AP.

Avec uplo = 'U', le tableau AP doit contenir la partie triangulaire supérieure de la matrice symétrique emballée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[1, 2] et A[2, 2], et ainsi de suite.

Avec uplo = 'L', le tableau AP doit contenir la partie triangulaire inférieure de la matrice symétrique emballée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[2, 1] et A[3, 1], et ainsi de suite.

Les entrées scalaires α et β doivent être réelles.

Les entrées de tableau x, y et AP doivent toutes être de type Float32 ou Float64.

Retourne le y mis à jour.

Julia 1.5

spmv! nécessite au moins Julia 1.5.

source
LinearAlgebra.BLAS.trmv!Function
trmv!(ul, tA, dA, A, b)

Retourne op(A)*b, où op est déterminé par tA. Seul le triangle ul de A est utilisé. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un. La multiplication se fait en place sur b.

source
LinearAlgebra.BLAS.trmvFunction
trmv(ul, tA, dA, A, b)

Retourne op(A)*b, où op est déterminé par tA. Seule la triangle ul de A est utilisée. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un.

source
LinearAlgebra.BLAS.trsv!Function
trsv!(ul, tA, dA, A, b)

Écrasez b avec la solution de A*x = b ou l'une des deux autres variantes déterminées par tA et ul. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un. Retournez le b mis à jour.

source
LinearAlgebra.BLAS.trsvFunction
trsv(ul, tA, dA, A, b)

Retourne la solution de A*x = b ou l'une des deux autres variantes déterminées par tA et ul. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un.

source

retourner une matrice

LinearAlgebra.BLAS.ger!Function
ger!(alpha, x, y, A)

Mise à jour de rang-1 de la matrice A avec les vecteurs x et y comme alpha*x*y' + A.

source
LinearAlgebra.BLAS.her!Function
her!(uplo, alpha, x, A)

Méthodes uniquement pour les tableaux complexes. Mise à jour de rang 1 de la matrice hermitienne A avec le vecteur x comme alpha*x*x' + A. uplo contrôle quel triangle de A est mis à jour. Renvoie A.

source
LinearAlgebra.BLAS.syr!Function
syr!(uplo, alpha, x, A)

Mise à jour de rang-1 de la matrice symétrique A avec le vecteur x sous la forme alpha*x*transpose(x) + A. uplo contrôle quel triangle de A est mis à jour. Renvoie A.

source
LinearAlgebra.BLAS.spr!Function
spr!(uplo, α, x, AP)

Mettre à jour la matrice A comme A+α*x*x', où A est une matrice symétrique fournie au format packagé AP et x est un vecteur.

Avec uplo = 'U', le tableau AP doit contenir la partie triangulaire supérieure de la matrice symétrique emballée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[1, 2] et A[2, 2], et ainsi de suite.

Avec uplo = 'L', le tableau AP doit contenir la partie triangulaire inférieure de la matrice symétrique emballée séquentiellement, colonne par colonne, de sorte que AP[1] contienne A[1, 1], AP[2] et AP[3] contiennent respectivement A[2, 1] et A[3, 1], et ainsi de suite.

L'entrée scalaire α doit être réelle.

Les entrées de tableau x et AP doivent toutes être de type Float32 ou Float64. Retournez le AP mis à jour.

Julia 1.8

spr! nécessite au moins Julia 1.8.

source

Level 3 BLAS functions

Les fonctions BLAS de niveau 3 ont été publiées dans [(Dongarra, 1990)][Dongarra-1990] et définissent des opérations matrice-matrice.

[Dongarra-1990]: https://dl.acm.org/doi/10.1145/77626.79170

LinearAlgebra.BLAS.gemmt!Function
gemmt!(uplo, tA, tB, alpha, A, B, beta, C)

Met à jour la partie triangulaire inférieure ou supérieure spécifiée par uplo de C comme alpha*A*B + beta*C ou les autres variantes selon tA et tB. Retourne le C mis à jour.

Julia 1.11

gemmt! nécessite au moins Julia 1.11.

source
LinearAlgebra.BLAS.gemmtMethod
gemmt(uplo, tA, tB, alpha, A, B)

Retourne la partie triangulaire inférieure ou supérieure spécifiée par uplo de A*B ou les trois autres variantes selon tA et tB.

Julia 1.11

gemmt nécessite au moins Julia 1.11.

source
LinearAlgebra.BLAS.gemmtMethod
gemmt(uplo, tA, tB, A, B)

Retourne la partie triangulaire inférieure ou supérieure spécifiée par uplo de A*B ou les trois autres variantes selon tA et tB.

Julia 1.11

gemmt nécessite au moins Julia 1.11.

source
LinearAlgebra.BLAS.gemm!Function
gemm!(tA, tB, alpha, A, B, beta, C)

Mettre à jour C comme alpha*A*B + beta*C ou les trois autres variantes selon tA et tB. Retourner le C mis à jour.

source
LinearAlgebra.BLAS.symm!Function
symm!(côté, ul, alpha, A, B, beta, C)

Mettez à jour C en tant que alpha*A*B + beta*C ou alpha*B*A + beta*C selon side. A est supposé être symétrique. Seul le triangle ul de A est utilisé. Retournez le C mis à jour.

source
LinearAlgebra.BLAS.symmMethod
symm(côté, ul, alpha, A, B)

Retourne alpha*A*B ou alpha*B*A selon side. A est supposé être symétrique. Seul le triangle ul de A est utilisé.

source
LinearAlgebra.BLAS.hemm!Function
hemm!(côté, ul, alpha, A, B, beta, C)

Mettez à jour C en tant que alpha*A*B + beta*C ou alpha*B*A + beta*C selon côté. A est supposé être hermitien. Seul le triangle ul de A est utilisé. Retournez le C mis à jour.

source
LinearAlgebra.BLAS.hemmMethod
hemm(side, ul, alpha, A, B)

Retourne alpha*A*B ou alpha*B*A selon side. A est supposé être hermitien. Seule la triangle ul de A est utilisée.

source
LinearAlgebra.BLAS.syrk!Function
syrk!(uplo, trans, alpha, A, beta, C)

Mise à jour de rang-k de la matrice symétrique C sous la forme alpha*A*transpose(A) + beta*C ou alpha*transpose(A)*A + beta*C selon trans. Seul le triangle uplo de C est utilisé. Retourne C.

source
LinearAlgebra.BLAS.syrkFunction
syrk(uplo, trans, alpha, A)

Retourne soit le triangle supérieur soit le triangle inférieur de A, selon uplo, de alpha*A*transpose(A) ou alpha*transpose(A)*A, selon trans.

source
LinearAlgebra.BLAS.herk!Function
herk!(uplo, trans, alpha, A, beta, C)

Méthodes uniquement pour les tableaux complexes. Mise à jour de rang-k de la matrice hermitienne C sous la forme alpha*A*A' + beta*C ou alpha*A'*A + beta*C selon trans. Seul le triangle uplo de C est mis à jour. Renvoie C.

source
LinearAlgebra.BLAS.syr2k!Function
syr2k!(uplo, trans, alpha, A, B, beta, C)

Mise à jour de rang-2k de la matrice symétrique C sous la forme alpha*A*transpose(B) + alpha*B*transpose(A) + beta*C ou alpha*transpose(A)*B + alpha*transpose(B)*A + beta*C selon trans. Seul le triangle uplo de C est utilisé. Retourne C.

source
LinearAlgebra.BLAS.syr2kFunction
syr2k(uplo, trans, alpha, A, B)

Renvoie le triangle uplo de alpha*A*transpose(B) + alpha*B*transpose(A) ou alpha*transpose(A)*B + alpha*transpose(B)*A, selon trans.

source
syr2k(uplo, trans, A, B)

Retourne le triangle uplo de A*transpose(B) + B*transpose(A) ou transpose(A)*B + transpose(B)*A, selon trans.

source
LinearAlgebra.BLAS.her2k!Function
her2k!(uplo, trans, alpha, A, B, beta, C)

Mise à jour de rang-2k de la matrice hermitienne C sous la forme alpha*A*B' + alpha*B*A' + beta*C ou alpha*A'*B + alpha*B'*A + beta*C selon trans. Le scalaire beta doit être réel. Seut le triangle uplo de C est utilisé. Retourne C.

source
LinearAlgebra.BLAS.trmm!Function
trmm!(côté, ul, tA, dA, alpha, A, B)

Mettez à jour B en tant que alpha*A*B ou l'une des trois autres variantes déterminées par côté et tA. Seul le triangle ul de A est utilisé. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un. Retournez le B mis à jour.

source
LinearAlgebra.BLAS.trmmFunction
trmm(côté, ul, tA, dA, alpha, A, B)

Retourne alpha*A*B ou l'une des trois autres variantes déterminées par side et tA. Seul le triangle ul de A est utilisé. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un.

source
LinearAlgebra.BLAS.trsm!Function
trsm!(côté, ul, tA, dA, alpha, A, B)

Écrase B avec la solution de A*X = alpha*B ou l'une des trois autres variantes déterminées par side et tA. Seul le triangle ul de A est utilisé. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un. Renvoie le B mis à jour.

source
LinearAlgebra.BLAS.trsmFunction
trsm(côté, ul, tA, dA, alpha, A, B)

Retourne la solution de A*X = alpha*B ou l'une des trois autres variantes déterminées par side et tA. Seul le triangle ul de A est utilisé. dA détermine si les valeurs diagonales sont lues ou supposées être toutes égales à un.

source

LAPACK functions

LinearAlgebra.LAPACK fournit des wrappers pour certaines des fonctions LAPACK pour l'algèbre linéaire. Les fonctions qui écrasent l'un des tableaux d'entrée ont des noms se terminant par '!'.

Habituellement, une fonction a 4 méthodes définies, une pour chacune de Float64, Float32, ComplexF64 et ComplexF32 tableaux.

Notez que l'API LAPACK fournie par Julia peut et va changer à l'avenir. Étant donné que cette API n'est pas destinée aux utilisateurs, il n'y a aucun engagement à prendre en charge/déprécier cet ensemble spécifique de fonctions dans les futures versions.

LinearAlgebra.LAPACK.gbtrf!Function
gbtrf!(kl, ku, m, AB) -> (AB, ipiv)

Calculez la factorisation LU d'une matrice en bande AB. kl est la première sous-diagonale contenant une bande non nulle, ku est la dernière superdiagonale contenant une bande, et m est la première dimension de la matrice AB. Renvoie la factorisation LU sur place et ipiv, le vecteur de pivots utilisés.

source
LinearAlgebra.LAPACK.gbtrs!Function
gbtrs!(trans, kl, ku, m, AB, ipiv, B)

Résoudre l'équation AB * X = B. trans détermine l'orientation de AB. Il peut être N (pas de transposition), T (transposition) ou C (transposition conjuguée). kl est la première sous-diagonale contenant une bande non nulle, ku est la dernière superdiagonale contenant une, et m est la première dimension de la matrice AB. ipiv est le vecteur de pivots retourné par gbtrf!. Renvoie le vecteur ou la matrice X, écrasant B sur place.

source
LinearAlgebra.LAPACK.gebal!Function
gebal!(job, A) -> (ilo, ihi, scale)

Équilibrez la matrice A avant de calculer son système d'eigenvalues ou sa factorisation de Schur. job peut être l'un de N (A ne sera pas permuté ou mis à l'échelle), P (A sera seulement permuté), S (A sera seulement mis à l'échelle), ou B (A sera à la fois permuté et mis à l'échelle). Modifie A sur place et retourne ilo, ihi et scale. Si la permutation a été activée, A[i,j] = 0 si j > i et 1 < j < ilo ou j > ihi. scale contient des informations sur les mises à l'échelle/permutations effectuées.

source
LinearAlgebra.LAPACK.gebak!Function
gebak!(job, side, ilo, ihi, scale, V)

Transformez les vecteurs propres V d'une matrice équilibrée à l'aide de gebal! en les vecteurs propres non mis à l'échelle/non permutés de la matrice d'origine. Modifie V sur place. side peut être L (les vecteurs propres à gauche sont transformés) ou R (les vecteurs propres à droite sont transformés).

source
LinearAlgebra.LAPACK.gebrd!Function
gebrd!(A) -> (A, d, e, tauq, taup)

Réduit A sur place à la forme bidiagonale A = QBP'. Renvoie A, contenant la matrice bidiagonale B; d, contenant les éléments diagonaux de B; e, contenant les éléments hors-diagonaux de B; tauq, contenant les réflecteurs élémentaires représentant Q; et taup, contenant les réflecteurs élémentaires représentant P.

source
LinearAlgebra.LAPACK.gelqf!Function
gelqf!(A, tau)

Calcule la factorisation LQ de A, A = LQ. tau contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation. tau doit avoir une longueur supérieure ou égale à la plus petite dimension de A.

Renvoie A et tau modifiés sur place.

source
gelqf!(A) -> (A, tau)

Calcule la factorisation LQ de A, A = LQ.

Renvoie A, modifié sur place, et tau, qui contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.geqlf!Function
geqlf!(A, tau)

Calcule la factorisation QL de A, A = QL. tau contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation. tau doit avoir une longueur supérieure ou égale à la plus petite dimension de A.

Renvoie A et tau modifiés sur place.

source
geqlf!(A) -> (A, tau)

Calcule la factorisation QL de A, A = QL.

Renvoie A, modifié sur place, et tau, qui contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.geqrf!Function
geqrf!(A, tau)

Calcule la factorisation QR de A, A = QR. tau contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation. tau doit avoir une longueur supérieure ou égale à la plus petite dimension de A.

Renvoie A et tau modifiés sur place.

source
geqrf!(A) -> (A, tau)

Calcule la factorisation QR de A, A = QR.

Renvoie A, modifié sur place, et tau, qui contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.geqp3!Function
geqp3!(A, [jpvt, tau]) -> (A, tau, jpvt)

Calculez la factorisation QR pivotée de A, AP = QR en utilisant BLAS niveau 3. P est une matrice de pivotement, représentée par jpvt. tau stocke les réflecteurs élémentaires. Les arguments jpvt et tau sont optionnels et permettent de passer des tableaux préalloués. Lorsqu'ils sont passés, jpvt doit avoir une longueur supérieure ou égale à n si A est une matrice (m x n) et tau doit avoir une longueur supérieure ou égale à la plus petite dimension de A. À l'entrée, si jpvt[j] n'est pas égal à zéro, alors la j-ème colonne de A est permutée au début de AP.

A, jpvt et tau sont modifiés sur place.

source
LinearAlgebra.LAPACK.gerqf!Function
gerqf!(A, tau)

Calcule la factorisation RQ de A, A = RQ. tau contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation. tau doit avoir une longueur supérieure ou égale à la plus petite dimension de A.

Renvoie A et tau modifiés sur place.

source
gerqf!(A) -> (A, tau)

Calcule la factorisation RQ de A, A = RQ.

Renvoie A, modifié sur place, et tau, qui contient des scalaires qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.geqrt!Function
geqrt!(A, T)

Calcule la factorisation QR bloquée de A, A = QR. T contient des réflecteurs de blocs triangulaires supérieurs qui paramètrent les réflecteurs élémentaires de la factorisation. La première dimension de T définit la taille du bloc et doit être comprise entre 1 et n. La deuxième dimension de T doit être égale à la plus petite dimension de A.

Renvoie A et T modifiés sur place.

source
geqrt!(A, nb) -> (A, T)

Calcule la factorisation QR bloquée de A, A = QR. nb définit la taille du bloc et doit être comprise entre 1 et n, la deuxième dimension de A.

Renvoie A, modifié sur place, et T, qui contient des réflecteurs de blocs triangulaires supérieurs qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.geqrt3!Function
geqrt3!(A, T)

Calcule récursivement la factorisation QR bloquée de A, A = QR. T contient des réflecteurs de blocs triangulaires supérieurs qui paramètrent les réflecteurs élémentaires de la factorisation. La première dimension de T définit la taille du bloc et doit être comprise entre 1 et n. La deuxième dimension de T doit être égale à la plus petite dimension de A.

Renvoie A et T modifiés sur place.

source
geqrt3!(A) -> (A, T)

Calcule de manière récursive la factorisation QR bloquée de A, A = QR.

Renvoie A, modifié sur place, et T, qui contient des réflecteurs de blocs triangulaires supérieurs qui paramètrent les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.getrf!Function
getrf!(A, ipiv) -> (A, ipiv, info)

Calculez la factorisation LU pivotée de A, A = LU. ipiv contient les informations de pivotement et info un code qui indique le succès (info = 0), une valeur singulière dans U (info = i, dans ce cas U[i,i] est singulier), ou un code d'erreur (info < 0).

source
getrf!(A) -> (A, ipiv, info)

Calcule la factorisation LU avec pivot de A, A = LU.

Renvoie A, modifié sur place, ipiv, les informations de pivotement, et un code info qui indique le succès (info = 0), une valeur singulière dans U (info = i, dans ce cas U[i,i] est singulier), ou un code d'erreur (info < 0).

source
LinearAlgebra.LAPACK.tzrzf!Function
tzrzf!(A) -> (A, tau)

Transforme la matrice trapézoïdale supérieure A en forme triangulaire supérieure sur place. Renvoie A et tau, les paramètres scalaires pour les réflecteurs élémentaires de la transformation.

source
LinearAlgebra.LAPACK.ormrz!Function
ormrz!(côté, trans, A, tau, C)

Multiplie la matrice C par Q à partir de la transformation fournie par tzrzf!. Selon côté ou trans, la multiplication peut être à gauche (côté = L, Q*C) ou à droite (côté = R, C*Q) et Q peut être non modifié (trans = N), transposé (trans = T), ou conjugué transposé (trans = C). Renvoie la matrice C qui est modifiée en place avec le résultat de la multiplication.

source
LinearAlgebra.LAPACK.gels!Function
gels!(trans, A, B) -> (F, B, ssr)

Résout l'équation linéaire A * X = B, transpose(A) * X = B, ou adjoint(A) * X = B en utilisant une factorisation QR ou LQ. Modifie la matrice/vecteur B sur place avec la solution. A est écrasé avec sa factorisation QR ou LQ. trans peut être l'un de N (aucune modification), T (transposée), ou C (transposée conjuguée). gels! recherche la solution de norme minimale/moins carrés. A peut être sous ou sur déterminé. La solution est renvoyée dans B.

source
LinearAlgebra.LAPACK.gesv!Function
gesv!(A, B) -> (B, A, ipiv)

Résout l'équation linéaire A * X = BA est une matrice carrée utilisant la factorisation LU de A. A est écrasé avec sa factorisation LU et B est écrasé avec la solution X. ipiv contient les informations de pivotage pour la factorisation LU de A.

source
LinearAlgebra.LAPACK.getrs!Function
getrs!(trans, A, ipiv, B)

Résout l'équation linéaire A * X = B, transpose(A) * X = B, ou adjoint(A) * X = B pour une matrice carrée A. Modifie la matrice/vecteur B sur place avec la solution. A est la factorisation LU provenant de getrf!, avec ipiv les informations de pivotement. trans peut être l'un de N (aucune modification), T (transposée), ou C (transposée conjuguée).

source
LinearAlgebra.LAPACK.getri!Function
getri!(A, ipiv)

Calcule l'inverse de A, en utilisant sa factorisation LU trouvée par getrf!. ipiv est l'information de pivot sortie et A contient la factorisation LU de getrf!. A est écrasé avec son inverse.

source
LinearAlgebra.LAPACK.gesvx!Function
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)

Résout l'équation linéaire A * X = B (trans = N), transpose(A) * X = B (trans = T), ou adjoint(A) * X = B (trans = C) en utilisant la factorisation LU de A. fact peut être E, auquel cas A sera équilibré et copié dans AF ; F, auquel cas AF et ipiv d'une factorisation LU précédente sont des entrées ; ou N, auquel cas A sera copié dans AF puis factorisé. Si fact = F, equed peut être N, signifiant que A n'a pas été équilibré ; R, signifiant que A a été multiplié par Diagonal(R) par la gauche ; C, signifiant que A a été multiplié par Diagonal(C) par la droite ; ou B, signifiant que A a été multiplié par Diagonal(R) par la gauche et Diagonal(C) par la droite. Si fact = F et equed = R ou B, les éléments de R doivent tous être positifs. Si fact = F et equed = C ou B, les éléments de C doivent tous être positifs.

Retourne la solution X ; equed, qui est une sortie si fact n'est pas N, et décrit l'équilibrage qui a été effectué ; R, le diagonal d'équilibrage des lignes ; C, le diagonal d'équilibrage des colonnes ; B, qui peut être écrasé par sa forme équilibrée Diagonal(R)*B (si trans = N et equed = R,B) ou Diagonal(C)*B (si trans = T,C et equed = C,B) ; rcond, le nombre de condition réciproque de A après équilibrage ; ferr, la limite d'erreur directe pour chaque vecteur de solution dans X ; berr, la limite d'erreur directe pour chaque vecteur de solution dans X ; et work, le facteur de croissance de pivot réciproque.

source
gesvx!(A, B)

La simplification sans équilibrage et sans transposition de gesvx!.

source
LinearAlgebra.LAPACK.gelsd!Function
gelsd!(A, B, rcond) -> (B, rnk)

Calcule la solution de norme minimale de A * X = B en trouvant la factorisation SVD de A, puis en divisant et conquérant le problème. B est écrasé avec la solution X. Les valeurs singulières inférieures à rcond seront considérées comme nulles. Renvoie la solution dans B et le rang effectif de A dans rnk.

source
LinearAlgebra.LAPACK.gelsy!Function
gelsy!(A, B, rcond) -> (B, rnk)

Calcule la solution de norme minimale de A * X = B en trouvant la factorisation complète QR de A, puis en divisant et conquérant le problème. B est écrasé avec la solution X. Les valeurs singulières inférieures à rcond seront traitées comme zéro. Renvoie la solution dans B et le rang effectif de A dans rnk.

source
LinearAlgebra.LAPACK.gglse!Function
gglse!(A, c, B, d) -> (X,res)

Résout l'équation A * x = cx est soumis à la contrainte d'égalité B * x = d. Utilise la formule ||c - A*x||^2 = 0 pour résoudre. Renvoie X et la somme des carrés résiduels.

source
LinearAlgebra.LAPACK.geev!Function
geev!(jobvl, jobvr, A) -> (W, VL, VR)

Trouve le système d'autovalues de A. Si jobvl = N, les autovecteurs à gauche de A ne sont pas calculés. Si jobvr = N, les autovecteurs à droite de A ne sont pas calculés. Si jobvl = V ou jobvr = V, les autovecteurs correspondants sont calculés. Renvoie les autovalues dans W, les autovecteurs à droite dans VR, et les autovecteurs à gauche dans VL.

source
LinearAlgebra.LAPACK.gesdd!Function
gesdd!(job, A) -> (U, S, VT)

Trouve la décomposition en valeurs singulières de A, A = U * S * V', en utilisant une approche de diviser pour régner. Si job = A, toutes les colonnes de U et les lignes de V' sont calculées. Si job = N, aucune colonne de U ou ligne de V' n'est calculée. Si job = O, A est écrasé avec les colonnes de (mince) U et les lignes de (mince) V'. Si job = S, les colonnes de (mince) U et les lignes de (mince) V' sont calculées et retournées séparément.

source
LinearAlgebra.LAPACK.gesvd!Function
gesvd!(jobu, jobvt, A) -> (U, S, VT)

Trouve la décomposition en valeurs singulières de A, A = U * S * V'. Si jobu = A, toutes les colonnes de U sont calculées. Si jobvt = A, toutes les lignes de V' sont calculées. Si jobu = N, aucune colonne de U n'est calculée. Si jobvt = N, aucune ligne de V' n'est calculée. Si jobu = O, A est écrasé avec les colonnes de (mince) U. Si jobvt = O, A est écrasé avec les lignes de (mince) V'. Si jobu = S, les colonnes de (mince) U sont calculées et retournées séparément. Si jobvt = S, les lignes de (mince) V' sont calculées et retournées séparément. jobu et jobvt ne peuvent pas être tous deux O.

Retourne U, S, et Vt, où S sont les valeurs singulières de A.

source
LinearAlgebra.LAPACK.ggsvd!Function
ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Trouve la décomposition en valeurs singulières généralisées de A et B, U'*A*Q = D1*R et V'*B*Q = D2*R. D1 a alpha sur sa diagonale et D2 a beta sur sa diagonale. Si jobu = U, la matrice orthogonale/unitaire U est calculée. Si jobv = V, la matrice orthogonale/unitaire V est calculée. Si jobq = Q, la matrice orthogonale/unitaire Q est calculée. Si jobu, jobv ou jobq est N, cette matrice n'est pas calculée. Cette fonction n'est disponible que dans les versions de LAPACK antérieures à 3.6.0.

source
LinearAlgebra.LAPACK.ggsvd3!Function
ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Trouve la décomposition en valeurs singulières généralisées de A et B, U'*A*Q = D1*R et V'*B*Q = D2*R. D1 a alpha sur sa diagonale et D2 a beta sur sa diagonale. Si jobu = U, la matrice orthogonale/unitaire U est calculée. Si jobv = V, la matrice orthogonale/unitaire V est calculée. Si jobq = Q, la matrice orthogonale/unitaire Q est calculée. Si jobu, jobv ou jobq est N, cette matrice n'est pas calculée. Cette fonction nécessite LAPACK 3.6.0.

source
LinearAlgebra.LAPACK.geevx!Function
geevx!(balanc, jobvl, jobvr, sense, A) -> (A, w, VL, VR, ilo, ihi, scale, abnrm, rconde, rcondv)

Trouve le système d'eigen de A avec équilibrage de matrice. Si jobvl = N, les vecteurs propres à gauche de A ne sont pas calculés. Si jobvr = N, les vecteurs propres à droite de A ne sont pas calculés. Si jobvl = V ou jobvr = V, les vecteurs propres correspondants sont calculés. Si balanc = N, aucun équilibrage n'est effectué. Si balanc = P, A est permuté mais pas mis à l'échelle. Si balanc = S, A est mis à l'échelle mais pas permuté. Si balanc = B, A est permuté et mis à l'échelle. Si sense = N, aucun nombre de condition réciproque n'est calculé. Si sense = E, des nombres de condition réciproque sont calculés uniquement pour les valeurs propres. Si sense = V, des nombres de condition réciproque sont calculés uniquement pour les vecteurs propres à droite. Si sense = B, des nombres de condition réciproque sont calculés pour les vecteurs propres à droite et les vecteurs propres. Si sense = E,B, les vecteurs propres à droite et à gauche doivent être calculés.

source
LinearAlgebra.LAPACK.ggev!Function
ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Trouve la décomposition des valeurs propres généralisées de A et B. Si jobvl = N, les vecteurs propres à gauche ne sont pas calculés. Si jobvr = N, les vecteurs propres à droite ne sont pas calculés. Si jobvl = V ou jobvr = V, les vecteurs propres correspondants sont calculés.

source
LinearAlgebra.LAPACK.ggev3!Function
ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Trouve la décomposition des valeurs propres généralisées de A et B en utilisant un algorithme bloqué. Si jobvl = N, les vecteurs propres à gauche ne sont pas calculés. Si jobvr = N, les vecteurs propres à droite ne sont pas calculés. Si jobvl = V ou jobvr = V, les vecteurs propres correspondants sont calculés. Cette fonction nécessite LAPACK 3.6.0.

source
LinearAlgebra.LAPACK.gtsv!Function
gtsv!(dl, d, du, B)

Résout l'équation A * X = BA est une matrice tridiagonale avec dl sur la sous-diagonale, d sur la diagonale, et du sur la super-diagonale.

Écrase B avec la solution X et la retourne.

source
LinearAlgebra.LAPACK.gttrf!Function
gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

Trouve la factorisation LU d'une matrice tridiagonale avec dl sur la sous-diagonale, d sur la diagonale, et du sur la superdiagonale.

Modifie dl, d, et du sur place et les retourne ainsi que la deuxième superdiagonale du2 et le vecteur de pivotage ipiv.

source
LinearAlgebra.LAPACK.gttrs!Function
gttrs!(trans, dl, d, du, du2, ipiv, B)

Résout l'équation A * X = B (trans = N), transpose(A) * X = B (trans = T), ou adjoint(A) * X = B (trans = C) en utilisant la factorisation LU calculée par gttrf!. B est écrasé avec la solution X.

source
LinearAlgebra.LAPACK.orglq!Function
orglq!(A, tau, k = length(tau))

Trouve explicitement la matrice Q d'une factorisation LQ après avoir appelé gelqf! sur A. Utilise la sortie de gelqf!. A est écrasé par Q.

source
LinearAlgebra.LAPACK.orgqr!Function
orgqr!(A, tau, k = length(tau))

Trouve explicitement la matrice Q d'une factorisation QR après avoir appelé geqrf! sur A. Utilise la sortie de geqrf!. A est écrasé par Q.

source
LinearAlgebra.LAPACK.orgql!Function
orgql!(A, tau, k = length(tau))

Trouve explicitement la matrice Q d'une factorisation QL après avoir appelé geqlf! sur A. Utilise la sortie de geqlf!. A est écrasé par Q.

source
LinearAlgebra.LAPACK.orgrq!Function
orgrq!(A, tau, k = length(tau))

Trouve explicitement la matrice Q d'une factorisation RQ après avoir appelé gerqf! sur A. Utilise la sortie de gerqf!. A est écrasé par Q.

source
LinearAlgebra.LAPACK.ormlq!Function
ormlq!(côté, trans, A, tau, C)

Calcule Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) pour côté = L ou la multiplication équivalente à droite pour côté = R en utilisant Q d'une factorisation LQ de A calculée à l'aide de gelqf!. C est écrasé.

source
LinearAlgebra.LAPACK.ormqr!Function
ormqr!(côté, trans, A, tau, C)

Calcule Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) pour côté = L ou la multiplication équivalente à droite pour côté = R en utilisant Q d'une factorisation QR de A calculée à l'aide de geqrf!. C est écrasé.

source
LinearAlgebra.LAPACK.ormql!Function
ormql!(side, trans, A, tau, C)

Calcule Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) pour side = L ou la multiplication équivalente à droite pour side = R en utilisant Q d'une factorisation QL de A calculée à l'aide de geqlf!. C est écrasé.

source
LinearAlgebra.LAPACK.ormrq!Function
ormrq!(côté, trans, A, tau, C)

Calcule Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) pour côté = L ou la multiplication équivalente à droite pour côté = R en utilisant Q d'une factorisation RQ de A calculée à l'aide de gerqf!. C est écrasé.

source
LinearAlgebra.LAPACK.gemqrt!Function
gemqrt!(côté, trans, V, T, C)

Calcule Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) pour côté = L ou la multiplication équivalente à droite pour côté = R en utilisant Q d'une factorisation QR de A calculée à l'aide de geqrt!. C est écrasé.

source
LinearAlgebra.LAPACK.posv!Function
posv!(uplo, A, B) -> (A, B)

Trouve la solution de A * X = BA est une matrice symétrique ou hermitienne définie positive. Si uplo = U, la décomposition de Cholesky supérieure de A est calculée. Si uplo = L, la décomposition de Cholesky inférieure de A est calculée. A est écrasée par sa décomposition de Cholesky. B est écrasé avec la solution X.

source
LinearAlgebra.LAPACK.potrf!Function
potrf!(uplo, A)

Calcule la décomposition de Cholesky (supérieure si uplo = U, inférieure si uplo = L) de la matrice définie positive A. A est écrasée et renvoyée avec un code d'information.

source
LinearAlgebra.LAPACK.potri!Function
potri!(uplo, A)

Calcule l'inverse de la matrice définie positive A après avoir appelé potrf! pour trouver sa décomposition de Cholesky (supérieure si uplo = U, inférieure si uplo = L).

A est écrasée par son inverse et retournée.

source
LinearAlgebra.LAPACK.potrs!Function
potrs!(uplo, A, B)

Trouve la solution de A * X = BA est une matrice symétrique ou hermitienne définie positive dont la décomposition de Cholesky a été calculée par potrf!. Si uplo = U, la décomposition de Cholesky supérieure de A a été calculée. Si uplo = L, la décomposition de Cholesky inférieure de A a été calculée. B est écrasé avec la solution X.

source
LinearAlgebra.LAPACK.pstrf!Function
pstrf!(uplo, A, tol) -> (A, piv, rank, info)

Calcule la décomposition de Cholesky pivotée (supérieure si uplo = U, inférieure si uplo = L) de la matrice définie positive A avec une tolérance définie par l'utilisateur tol. A est écrasée par sa décomposition de Cholesky.

Renvoie A, les pivots piv, le rang de A, et un code info. Si info = 0, la factorisation a réussi. Si info = i > 0, alors A est indéfinie ou déficiente en rang.

source
LinearAlgebra.LAPACK.ptsv!Function
ptsv!(D, E, B)

Résout A * X = B pour A tridiagonale définie positive. D est la diagonale de A et E est l'off-diagonale. B est écrasé avec la solution X et retourné.

source
LinearAlgebra.LAPACK.pttrf!Function
pttrf!(D, E)

Calcule la factorisation LDLt d'une matrice tridiagonale définie positive avec D comme diagonale et E comme hors-diagonale. D et E sont écrasés et retournés.

source
LinearAlgebra.LAPACK.pttrs!Function
pttrs!(D, E, B)

Résout A * X = B pour A tridiagonale définie positive avec la diagonale D et les éléments hors diagonale E après avoir calculé la factorisation LDLt de A en utilisant pttrf!. B est écrasé avec la solution X.

source
LinearAlgebra.LAPACK.trtri!Function
trtri!(uplo, diag, A)

Trouve l'inverse de la matrice triangulaire A (supérieure si uplo = U, inférieure si uplo = L). Si diag = N, A a des éléments diagonaux non unitaires. Si diag = U, tous les éléments diagonaux de A sont un. A est écrasé avec son inverse.

source
LinearAlgebra.LAPACK.trtrs!Function
trtrs!(uplo, trans, diag, A, B)

Résout A * X = B (trans = N), transpose(A) * X = B (trans = T), ou adjoint(A) * X = B (trans = C) pour la matrice triangulaire A (supérieure si uplo = U, inférieure si uplo = L). Si diag = N, A a des éléments diagonaux non unitaires. Si diag = U, tous les éléments diagonaux de A sont un. B est écrasé avec la solution X.

source
LinearAlgebra.LAPACK.trcon!Function
trcon!(norm, uplo, diag, A)

Trouve le nombre de condition réciproque de la matrice triangulaire A (supérieure si uplo = U, inférieure si uplo = L). Si diag = N, A a des éléments diagonaux non unitaires. Si diag = U, tous les éléments diagonaux de A sont un. Si norm = I, le nombre de condition est trouvé dans la norme infinie. Si norm = O ou 1, le nombre de condition est trouvé dans la norme un.

source
LinearAlgebra.LAPACK.trevc!Function
trevc!(side, howmny, select, T, VL = similar(T), VR = similar(T))

Trouve le système d'eigen de la matrice triangulaire supérieure T. Si side = R, les vecteurs propres droits sont calculés. Si side = L, les vecteurs propres gauches sont calculés. Si side = B, les deux ensembles sont calculés. Si howmny = A, tous les vecteurs propres sont trouvés. Si howmny = B, tous les vecteurs propres sont trouvés et rétrotransformés en utilisant VL et VR. Si howmny = S, seuls les vecteurs propres correspondant aux valeurs dans select sont calculés.

source
LinearAlgebra.LAPACK.trrfs!Function
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)

Estime l'erreur dans la solution de A * X = B (trans = N), transpose(A) * X = B (trans = T), adjoint(A) * X = B (trans = C) pour side = L, ou les équations équivalentes d'un side = R X * A après avoir calculé X en utilisant trtrs!. Si uplo = U, A est triangulaire supérieure. Si uplo = L, A est triangulaire inférieure. Si diag = N, A a des éléments diagonaux non unitaires. Si diag = U, tous les éléments diagonaux de A sont un. Ferr et Berr sont des entrées optionnelles. Ferr est l'erreur avant et Berr est l'erreur arrière, chacune composante par composante.

source
LinearAlgebra.LAPACK.stev!Function
stev!(job, dv, ev) -> (dv, Zmat)

Calcule le système d'autovalues pour une matrice tridiagonale symétrique avec dv comme diagonale et ev comme hors-diagonale. Si job = N, seuls les autovalues sont trouvés et retournés dans dv. Si job = V, alors les vecteurs propres sont également trouvés et retournés dans Zmat.

source
LinearAlgebra.LAPACK.stebz!Function
stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

Calcule les valeurs propres pour une matrice tridiagonale symétrique avec dv comme diagonale et ev comme hors-diagonale. Si range = A, toutes les valeurs propres sont trouvées. Si range = V, les valeurs propres dans l'intervalle semi-ouvert (vl, vu] sont trouvées. Si range = I, les valeurs propres avec des indices entre il et iu sont trouvées. Si order = B, les valeurs propres sont ordonnées dans un bloc. Si order = E, elles sont ordonnées à travers tous les blocs. abstol peut être défini comme une tolérance pour la convergence.

source
LinearAlgebra.LAPACK.stegr!Function
stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

Calcule les valeurs propres (jobz = N) ou les valeurs propres et les vecteurs propres (jobz = V) pour une matrice tridiagonale symétrique avec dv comme diagonale et ev comme hors-diagonale. Si range = A, toutes les valeurs propres sont trouvées. Si range = V, les valeurs propres dans l'intervalle semi-ouvert (vl, vu] sont trouvées. Si range = I, les valeurs propres avec des indices entre il et iu sont trouvées. Les valeurs propres sont retournées dans w et les vecteurs propres dans Z.

source
LinearAlgebra.LAPACK.stein!Function
stein!(dv, ev_in, w_in, iblock_in, isplit_in)

Calcule les vecteurs propres pour une matrice tridiagonale symétrique avec dv comme diagonale et ev_in comme hors-diagonale. w_in spécifie les valeurs propres d'entrée pour lesquelles trouver les vecteurs propres correspondants. iblock_in spécifie les sous-matrices correspondant aux valeurs propres dans w_in. isplit_in spécifie les points de séparation entre les blocs de sous-matrices.

source
LinearAlgebra.LAPACK.syconv!Function
syconv!(uplo, A, ipiv) -> (A, work)

Convertit une matrice symétrique A (qui a été factorisée en une matrice triangulaire) en deux matrices L et D. Si uplo = U, A est triangulaire supérieure. Si uplo = L, elle est triangulaire inférieure. ipiv est le vecteur de pivot de la factorisation triangulaire. A est écrasée par L et D.

source
LinearAlgebra.LAPACK.sysv!Function
sysv!(uplo, A, B) -> (B, A, ipiv)

Trouve la solution de A * X = B pour la matrice symétrique A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. B est écrasé par la solution X. A est écrasé par sa factorisation de Bunch-Kaufman. ipiv contient des informations de pivotage sur la factorisation.

source
LinearAlgebra.LAPACK.sytrf!Function
sytrf!(uplo, A) -> (A, ipiv, info)

Calcule la factorisation de Bunch-Kaufman d'une matrice symétrique A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée.

Renvoie A, écrasée par la factorisation, un vecteur de pivots ipiv, et le code d'erreur info qui est un entier non négatif. Si info est positif, la matrice est singulière et la partie diagonale de la factorisation est exactement zéro à la position info.

source
sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

Calcule la factorisation de Bunch-Kaufman d'une matrice symétrique A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée.

Renvoie A, écrasée par la factorisation, le vecteur de pivot ipiv, et le code d'erreur info qui est un entier non négatif. Si info est positif, la matrice est singulière et la partie diagonale de la factorisation est exactement zéro à la position info.

source
LinearAlgebra.LAPACK.sytri!Function
sytri!(uplo, A, ipiv)

Calcule l'inverse d'une matrice symétrique A en utilisant les résultats de sytrf!. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. A est écrasée par son inverse.

source
LinearAlgebra.LAPACK.sytrs!Function
sytrs!(uplo, A, ipiv, B)

Résout l'équation A * X = B pour une matrice symétrique A en utilisant les résultats de sytrf!. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. B est écrasé par la solution X.

source
LinearAlgebra.LAPACK.hesv!Function
hesv!(uplo, A, B) -> (B, A, ipiv)

Trouve la solution de A * X = B pour la matrice hermitienne A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. B est écrasé par la solution X. A est écrasé par sa factorisation de Bunch-Kaufman. ipiv contient des informations de pivotage sur la factorisation.

source
LinearAlgebra.LAPACK.hetrf!Function
hetrf!(uplo, A) -> (A, ipiv, info)

Calcule la factorisation de Bunch-Kaufman d'une matrice hermitienne A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée.

Renvoie A, écrasée par la factorisation, un vecteur de pivots ipiv, et le code d'erreur info qui est un entier non négatif. Si info est positif, la matrice est singulière et la partie diagonale de la factorisation est exactement zéro à la position info.

source
hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

Calcule la factorisation de Bunch-Kaufman d'une matrice hermitienne A. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée.

Renvoie A, écrasée par la factorisation, le vecteur de pivot ipiv, et le code d'erreur info qui est un entier non négatif. Si info est positif, la matrice est singulière et la partie diagonale de la factorisation est exactement zéro à la position info.

source
LinearAlgebra.LAPACK.hetri!Function
hetri!(uplo, A, ipiv)

Calcule l'inverse d'une matrice hermitienne A en utilisant les résultats de sytrf!. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. A est écrasée par son inverse.

source
LinearAlgebra.LAPACK.hetrs!Function
hetrs!(uplo, A, ipiv, B)

Résout l'équation A * X = B pour une matrice hermitienne A en utilisant les résultats de sytrf!. Si uplo = U, la moitié supérieure de A est stockée. Si uplo = L, la moitié inférieure est stockée. B est écrasé par la solution X.

source
LinearAlgebra.LAPACK.syev!Function
syev!(jobz, uplo, A)

Trouve les valeurs propres (jobz = N) ou les valeurs propres et les vecteurs propres (jobz = V) d'une matrice symétrique A. Si uplo = U, le triangle supérieur de A est utilisé. Si uplo = L, le triangle inférieur de A est utilisé.

source
LinearAlgebra.LAPACK.syevr!Function
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

Trouve les valeurs propres (jobz = N) ou les valeurs propres et les vecteurs propres (jobz = V) d'une matrice symétrique A. Si uplo = U, le triangle supérieur de A est utilisé. Si uplo = L, le triangle inférieur de A est utilisé. Si range = A, toutes les valeurs propres sont trouvées. Si range = V, les valeurs propres dans l'intervalle semi-ouvert (vl, vu] sont trouvées. Si range = I, les valeurs propres avec des indices entre il et iu sont trouvées. abstol peut être défini comme une tolérance pour la convergence.

Les valeurs propres sont retournées dans W et les vecteurs propres dans Z.

source
LinearAlgebra.LAPACK.syevd!Function
syevd!(jobz, uplo, A)

Trouve les valeurs propres (jobz = N) ou les valeurs propres et les vecteurs propres (jobz = V) d'une matrice symétrique A. Si uplo = U, le triangle supérieur de A est utilisé. Si uplo = L, le triangle inférieur de A est utilisé.

Utilise la méthode de diviser pour régner, au lieu de l'itération QR utilisée par syev! ou des représentations relativement robustes multiples utilisées par syevr!. Voir James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008) pour une comparaison de la précision et des performances des différentes méthodes.

source
LinearAlgebra.LAPACK.sygvd!Function
sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

Trouve les valeurs propres généralisées (jobz = N) ou les valeurs propres et vecteurs propres (jobz = V) d'une matrice symétrique A et d'une matrice symétrique définie positive B. Si uplo = U, les triangles supérieurs de A et B sont utilisés. Si uplo = L, les triangles inférieurs de A et B sont utilisés. Si itype = 1, le problème à résoudre est A * x = lambda * B * x. Si itype = 2, le problème à résoudre est A * B * x = lambda * x. Si itype = 3, le problème à résoudre est B * A * x = lambda * x.

source
LinearAlgebra.LAPACK.bdsqr!Function
bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

Calcule la décomposition en valeurs singulières d'une matrice bidiagonale avec d sur la diagonale et e_ sur l'off-diagonale. Si uplo = U, e_ est la superdiagonale. Si uplo = L, e_ est la sous-diagonale. Peut également calculer en option le produit Q' * C.

Renvoie les valeurs singulières dans d, et la matrice C écrasée avec Q' * C.

source
LinearAlgebra.LAPACK.bdsdc!Function
bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

Calcule la décomposition en valeurs singulières d'une matrice bidiagonale avec d sur la diagonale et e_ sur l'off-diagonale en utilisant une méthode de division et conquête. Si uplo = U, e_ est la superdiagonale. Si uplo = L, e_ est la sous-diagonale. Si compq = N, seules les valeurs singulières sont trouvées. Si compq = I, les valeurs et vecteurs singuliers sont trouvés. Si compq = P, les valeurs et vecteurs singuliers sont trouvés sous forme compacte. Fonctionne uniquement pour les types réels.

Renvoie les valeurs singulières dans d, et si compq = P, les vecteurs singuliers compacts dans iq.

source
LinearAlgebra.LAPACK.gecon!Function
gecon!(normtype, A, anorm)

Trouve le nombre de condition réciproque de la matrice A. Si normtype = I, le nombre de condition est trouvé dans la norme infinie. Si normtype = O ou 1, le nombre de condition est trouvé dans la norme un. A doit être le résultat de getrf! et anorm est la norme de A dans la norme pertinente.

source
LinearAlgebra.LAPACK.gehrd!Function
gehrd!(ilo, ihi, A) -> (A, tau)

Convertit une matrice A en forme de Hessenberg. Si A est équilibrée avec gebal!, alors ilo et ihi sont les sorties de gebal!. Sinon, ils doivent être ilo = 1 et ihi = size(A,2). tau contient les réflecteurs élémentaires de la factorisation.

source
LinearAlgebra.LAPACK.orghr!Function
orghr!(ilo, ihi, A, tau)

Trouve explicitement Q, la matrice orthogonale/unitaire de gehrd!. ilo, ihi, A et tau doivent correspondre à l'entrée/sortie de gehrd!.

source
LinearAlgebra.LAPACK.gees!Function
gees!(jobvs, A) -> (A, vs, w)

Calcule les valeurs propres (jobvs = N) ou les valeurs propres et les vecteurs de Schur (jobvs = V) de la matrice A. A est écrasée par sa forme de Schur.

Renvoie A, vs contenant les vecteurs de Schur, et w, contenant les valeurs propres.

source
LinearAlgebra.LAPACK.gges!Function
gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Calcule les valeurs propres généralisées, la forme de Schur généralisée, les vecteurs de Schur à gauche (jobsvl = V), ou les vecteurs de Schur à droite (jobvsr = V) de A et B.

Les valeurs propres généralisées sont retournées dans alpha et beta. Les vecteurs de Schur à gauche sont retournés dans vsl et les vecteurs de Schur à droite sont retournés dans vsr.

source
LinearAlgebra.LAPACK.gges3!Function
gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Calcule les valeurs propres généralisées, la forme de Schur généralisée, les vecteurs de Schur à gauche (jobsvl = V), ou les vecteurs de Schur à droite (jobvsr = V) de A et B en utilisant un algorithme bloqué. Cette fonction nécessite LAPACK 3.6.0.

Les valeurs propres généralisées sont retournées dans alpha et beta. Les vecteurs de Schur à gauche sont retournés dans vsl et les vecteurs de Schur à droite sont retournés dans vsr.

source
LinearAlgebra.LAPACK.trexc!Function
trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

Réorganiser la factorisation de Schur T d'une matrice, de sorte que le bloc diagonal de T avec l'indice de ligne ifst soit déplacé à l'indice de ligne ilst. Si compq = V, les vecteurs de Schur Q sont réordonnés. Si compq = N, ils ne sont pas modifiés. La méthode à 4 arguments appelle la méthode à 5 arguments avec compq = V.

source
LinearAlgebra.LAPACK.trsen!Function
trsen!(job, compq, select, T, Q) -> (T, Q, w, s, sep)
trsen!(select, T, Q) -> (T, Q, w, s, sep)

Réorganise la factorisation de Schur d'une matrice et trouve éventuellement des nombres de condition réciproques. Si job = N, aucun nombre de condition n'est trouvé. Si job = E, seul le nombre de condition pour ce groupe de valeurs propres est trouvé. Si job = V, seul le nombre de condition pour l'espace invariant est trouvé. Si job = B, alors les nombres de condition pour le groupe et l'espace sont trouvés. Si compq = V, les vecteurs de Schur Q sont mis à jour. Si compq = N, les vecteurs de Schur ne sont pas modifiés. select détermine quelles valeurs propres sont dans le groupe. La méthode à 3 arguments appelle la méthode à 5 arguments avec job = N et compq = V.

Retourne T, Q, les valeurs propres réordonnées dans w, le nombre de condition du groupe de valeurs propres s, et le nombre de condition de l'espace invariant sep.

source
LinearAlgebra.LAPACK.tgsen!Function
tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

Réorganise les vecteurs d'une décomposition de Schur généralisée. select spécifie les valeurs propres dans chaque cluster.

source
LinearAlgebra.LAPACK.trsyl!Function
trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

Résout l'équation matricielle de Sylvester A * X +/- X * B = scale*CA et B sont tous deux quasi-triangulaires supérieurs. Si transa = N, A n'est pas modifié. Si transa = T, A est transposé. Si transa = C, A est conjugué transposé. De même pour transb et B. Si isgn = 1, l'équation A * X + X * B = scale * C est résolue. Si isgn = -1, l'équation A * X - X * B = scale * C est résolue.

Renvoie X (écrasant C) et scale.

source
LinearAlgebra.LAPACK.hseqr!Function
hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

Calcule toutes les valeurs propres et (optionnellement) la factorisation de Schur d'une matrice réduite à la forme de Hessenberg. Si H est équilibré avec gebal!, alors ilo et ihi sont les sorties de gebal!. Sinon, ils doivent être ilo = 1 et ihi = size(H,2). tau contient les réflecteurs élémentaires de la factorisation.

source
  • ACM832Davis, Timothy A. (2004b). Algorithm 832: UMFPACK V4.3–-an Unsymmetric-Pattern Multifrontal Method. ACM Trans. Math. Softw., 30(2), 196–199. doi:10.1145/992200.992206
  • ACM887Chen, Y., Davis, T. A., Hager, W. W., & Rajamanickam, S. (2008). Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate. ACM Trans. Math. Softw., 35(3). doi:10.1145/1391989.1391995
  • DavisHager2009Davis, Timothy A., & Hager, W. W. (2009). Dynamic Supernodes in Sparse Cholesky Update/Downdate and Triangular Solves. ACM Trans. Math. Softw., 35(4). doi:10.1145/1462173.1462176
  • Bischof1987C Bischof et C Van Loan, "La représentation WY pour les produits de matrices de Householder", SIAM J Sci Stat Comput 8 (1987), s2-s13. doi:10.1137/0908009
  • Schreiber1989R Schreiber et C Van Loan, "Une représentation WY efficace en termes de stockage pour les produits de transformations de Householder", SIAM J Sci Stat Comput 10 (1989), 53-57. doi:10.1137/0910005
  • ACM933Foster, L. V., & Davis, T. A. (2013). Algorithm 933: Reliable Calculation of Numerical Rank, Null Space Bases, Pseudoinverse Solutions, and Basic Solutions Using SuitesparseQR. ACM Trans. Math. Softw., 40(1). doi:10.1145/2513109.2513116
  • Bunch1977J R Bunch et L Kaufman, Some stable methods for calculating inertia and solving symmetric linear systems, Mathematics of Computation 31:137 (1977), 163-179. url.
  • issue8859Issue 8859, "Fix least squares", https://github.com/JuliaLang/julia/pull/8859
  • B96Åke Björck, "Numerical Methods for Least Squares Problems", SIAM Press, Philadelphia, 1996, "Other Titles in Applied Mathematics", Vol. 51. doi:10.1137/1.9781611971484
  • S84G. W. Stewart, "Rank Degeneracy", SIAM Journal on Scientific and Statistical Computing, 5(2), 1984, 403-413. doi:10.1137/0905030
  • KY88Konstantinos Konstantinides et Kung Yao, "Statistical analysis of effective singular values in matrix rank determination", IEEE Transactions on Acoustics, Speech and Signal Processing, 36(5), 1988, 757-763. doi:10.1109/29.1585
  • H05Nicholas J. Higham, "The squaring and scaling method for the matrix exponential revisited", SIAM Journal on Matrix Analysis and Applications, 26(4), 2005, 1179-1193. doi:10.1137/090768539
  • AH12Awad H. Al-Mohy et Nicholas J. Higham, "Amélioration des algorithmes d'inversion par mise à l'échelle et de mise à l'échelle pour le logarithme matriciel", SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553
  • AHR13Awad H. Al-Mohy, Nicholas J. Higham et Samuel D. Relton, "Calcul du dérivé de Fréchet du logarithme matriciel et estimation du nombre de condition", SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
  • BH83Åke Björck et Sven Hammarling, "A Schur method for the square root of a matrix", Linear Algebra and its Applications, 52-53, 1983, 127-140. doi:10.1016/0024-3795(83)80010-X
  • H87Nicholas J. Higham, "Computing real square roots of a real matrix", Linear Algebra and its Applications, 88-89, 1987, 405-430. doi:10.1016/0024-3795(87)90118-2
  • S03Matthew I. Smith, "A Schur Algorithm for Computing Matrix pth Roots", SIAM Journal on Matrix Analysis and Applications, vol. 24, 2003, pp. 971–989. doi:10.1137/S0895479801392697
  • AH16_1Mary Aprahamian et Nicholas J. Higham, "Fonctions trigonométriques inverses de matrice et fonctions hyperboliques inverses : théorie et algorithmes", MIMS EPrint : 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_2Mary Aprahamian et Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_3Mary Aprahamian et Nicholas J. Higham, "Fonctions trigonométriques inverses de matrice et fonctions hyperboliques inverses : théorie et algorithmes", MIMS EPrint : 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_4Mary Aprahamian et Nicholas J. Higham, "Fonctions trigonométriques inverses de matrice et fonctions hyperboliques inverses : théorie et algorithmes", MIMS EPrint : 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_5Mary Aprahamian et Nicholas J. Higham, "Fonctions trigonométriques inverses de matrice et fonctions hyperboliques inverses : théorie et algorithmes", MIMS EPrint : 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_6Mary Aprahamian et Nicholas J. Higham, "Fonctions trigonométriques inverses de matrice et fonctions hyperboliques inverses : théorie et algorithmes", MIMS EPrint : 2016.4. https://doi.org/10.1137/16M1057577