Linear Algebra

Zusätzlich zu (und als Teil von) seiner Unterstützung für mehrdimensionale Arrays bietet Julia native Implementierungen vieler gängiger und nützlicher lineare Algebraoperationen, die mit using LinearAlgebra geladen werden können. Grundlegende Operationen wie tr, det und inv werden alle unterstützt:

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

Neben anderen nützlichen Operationen, wie dem Finden von Eigenwerten oder Eigenvektoren:

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

Darüber hinaus bietet Julia viele factorizations, die verwendet werden können, um Probleme wie lineare Lösungen oder Matrixexponentiation zu beschleunigen, indem eine Matrix in eine Form vorfaktorisiert wird, die für das Problem besser geeignet ist (aus Leistungs- oder Speichergründen). Siehe die Dokumentation zu factorize für weitere Informationen. Als Beispiel:

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

Da A nicht hermitesch, symmetrisch, dreieckig, tridiagonal oder bidiagonal ist, könnte eine LU-Zerlegung das Beste sein, was wir tun können. Vergleiche mit:

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

Hier konnte Julia feststellen, dass B tatsächlich symmetrisch ist, und verwendete eine passendere Faktorisierung. Oft ist es möglich, effizienteren Code für eine Matrix zu schreiben, von der bekannt ist, dass sie bestimmte Eigenschaften hat, z. B. dass sie symmetrisch oder tridiagonal ist. Julia bietet einige spezielle Typen an, damit Sie Matrizen mit diesen Eigenschaften "taggen" können. Zum Beispiel:

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 wurde als eine (reelle) symmetrische Matrix gekennzeichnet, sodass für spätere Operationen, die wir an ihr durchführen könnten, wie Eigenfaktorisierung oder Berechnung von Matrix-Vektor-Produkten, Effizienzen gefunden werden können, indem wir nur auf die Hälfte davon verweisen. Zum Beispiel:

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

Der \-Operator führt hier die lineare Lösung durch. Der Links-Teilungsoperator ist ziemlich leistungsfähig und es ist einfach, kompakte, lesbare Codes zu schreiben, die flexibel genug sind, um alle Arten von Systemen linearer Gleichungen zu lösen.

Special matrices

Matrices with special symmetries and structures treten häufig in der linearen Algebra auf und sind oft mit verschiedenen Matrixfaktorisierungen verbunden. Julia bietet eine reiche Sammlung spezieller Matrizenarten, die eine schnelle Berechnung mit spezialisierten Routinen ermöglichen, die speziell für bestimmte Matrizenarten entwickelt wurden.

Die folgenden Tabellen fassen die Arten von speziellen Matrizen zusammen, die in Julia implementiert wurden, sowie ob Hooks zu verschiedenen optimierten Methoden für sie in LAPACK verfügbar sind.

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/

Legende:

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

Legende:

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

Ein UniformScaling Operator repräsentiert einen Skalar mal den Identitätsoperator, λ*I. Der Identitätsoperator I ist als Konstante definiert und ist eine Instanz von UniformScaling. Die Größe dieser Operatoren ist generisch und entspricht der anderen Matrix in den binären Operationen +, -, * und \. Für A+I und A-I bedeutet dies, dass A quadratisch sein muss. Die Multiplikation mit dem Identitätsoperator I ist ein Noop (außer zur Überprüfung, dass der Skalierungsfaktor eins ist) und daher nahezu ohne Overhead.

Um den UniformScaling-Operator in Aktion zu sehen:

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:
[...]

Wenn Sie viele Systeme der Form (A+μI)x = b für dasselbe A und unterschiedliche μ lösen müssen, kann es vorteilhaft sein, zuerst die Hessenberg-Faktorisierung F von A über die hessenberg-Funktion zu berechnen. Mit F verwendet Julia einen effizienten Algorithmus für (F+μ*I) \ b (äquivalent zu (A+μ*I)x \ b) und verwandte Operationen wie Determinanten.

Matrix factorizations

Matrix factorizations (a.k.a. matrix decompositions) berechnet die Faktorisierung einer Matrix in ein Produkt von Matrizen und ist eines der zentralen Konzepte in der (numerischen) linearen Algebra.

Die folgende Tabelle fasst die Arten von Matrixfaktorisierungen zusammen, die in Julia implementiert wurden. Einzelheiten zu den zugehörigen Methoden finden Sie im Abschnitt Standard functions der Dokumentation zur linearen Algebra.

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

Adjunkte und Transponierte von Factorization Objekten sind faul in AdjointFactorization und TransposeFactorization Objekten eingewickelt. Generell werden Transponierte von reellen Factorizations als AdjointFactorization eingewickelt.

Orthogonal matrices (AbstractQ)

Einige Matrixfaktorisierungen erzeugen orthogonale/einheitliche "Matrix"-Faktoren. Diese Faktorisierungen umfassen QR-bezogene Faktorisierungen, die aus Aufrufen von qr erhalten werden, d.h. QR, QRCompactWY und QRPivoted, die Hessenberg-Faktorisierung, die aus Aufrufen von hessenberg erhalten wird, und die LQ-Faktorisierung, die aus lq erhalten wird. Während diese orthogonalen/einheitlichen Faktoren eine Matrixdarstellung zulassen, ist ihre interne Darstellung aus Leistungs- und Speichergründen unterschiedlich. Daher sollten sie eher als matrixgestützte, funktionsbasierte lineare Operatoren betrachtet werden. Insbesondere erfordert das Lesen beispielsweise einer Spalte ihrer Matrixdarstellung das Ausführen von "Matrix"-Vektor-Multiplikationscode, anstatt einfach Daten aus dem Speicher zu lesen (möglicherweise Teile des Vektors mit strukturellen Nullen zu füllen). Ein weiterer klarer Unterschied zu anderen, nicht-triangularen Matrizenarten besteht darin, dass der zugrunde liegende Multiplikationscode eine In-Place-Modifikation während der Multiplikation ermöglicht. Darüber hinaus können Objekte spezifischer AbstractQ-Subtypen, wie sie über 4d61726b646f776e2e436f64652822222c202271722229_40726566, 4d61726b646f776e2e436f64652822222c202268657373656e626572672229_40726566 und 4d61726b646f776e2e436f64652822222c20226c712229_40726566 erstellt werden, je nach Kontext wie eine quadratische oder rechteckige Matrix verhalten:

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

Aufgrund dieser Unterscheidung von dichten oder strukturierten Matrizen unterliegt der abstrakte AbstractQ-Typ nicht dem AbstractMatrix, sondern hat stattdessen seine eigene Typ-Hierarchie. Benutzerdefinierte Typen, die von AbstractQ abgeleitet sind, können auf generische Rückfalle zurückgreifen, wenn die folgende Schnittstelle erfüllt ist. Zum Beispiel für

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

Überladungen bereitstellen für

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

Wenn die eltype-Promotion nicht von Interesse ist, ist die convert-Methode nicht erforderlich, da convert(::Type{AbstractQ{T}}, Q::AbstractQ{T}) standardmäßig Q selbst zurückgibt. Adjunkte von Objekten des Typs AbstractQ werden faul in einem AdjointQ-Wrapper-Typ verpackt, der seine eigenen LinearAlgebra.lmul!- und LinearAlgebra.rmul!-Methoden benötigt. Mit diesem Satz von Methoden kann jede Q::MyQ wie eine Matrix verwendet werden, vorzugsweise in einem multiplikativen Kontext: Multiplikation über * mit Skalaren, Vektoren und Matrizen von links und rechts, das Erhalten einer Matrixdarstellung von Q über Matrix(Q) (oder Q*I) und das Indizieren in die Matrixdarstellung funktionieren alle. Im Gegensatz dazu schlagen Addition und Subtraktion sowie allgemeiner das Broadcasting über Elemente in der Matrixdarstellung fehl, da dies sehr ineffizient wäre. Für solche Anwendungsfälle sollten Sie in Betracht ziehen, die Matrixdarstellung im Voraus zu berechnen und sie für die zukünftige Wiederverwendung zu cachen.

Pivoting Strategies

Mehrere von Julias matrix factorizations unterstützen pivoting, was verwendet werden kann, um ihre numerische Stabilität zu verbessern. Tatsächlich können einige Matrixfaktorisierungen, wie die LU-Faktorisierung, ohne Pivotierung fehlschlagen.

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.

Folglich umfassen neben den herkömmlichen Matrixfaktoren die Ausgaben von pivotierten Faktorisierungsschemata auch Permutationsmatrizen.

In the following, the pivoting strategies implemented in Julia are briefly described. Note that not all matrix factorizations may support them. Consult the documentation of the respective matrix factorization for details on the supported pivoting strategies.

Siehe auch LinearAlgebra.ZeroPivotException.

LinearAlgebra.NoPivotType
NoPivot

Pivotierung wird nicht durchgeführt. Matrixfaktorisierungen wie die LU-Faktorisierung können ohne Pivotierung fehlschlagen und können auch numerisch instabil für Gleitkommatrizen im Angesicht von Rundungsfehlern sein. Diese Pivotstrategie ist hauptsächlich zu pädagogischen Zwecken nützlich.

source
LinearAlgebra.RowNonZeroType
RowNonZero

Das erste von null verschiedene Element in den verbleibenden Zeilen wird als Pivot-Element gewählt.

Seien Sie vorsichtig, dass der resultierende LU-Algorithmus für Gleitkomma-Matrizen numerisch instabil ist — diese Strategie ist hauptsächlich nützlich für den Vergleich mit Handberechnungen (die typischerweise diese Strategie verwenden) oder für andere algebraische Typen (z. B. rationale Zahlen), die nicht anfällig für Rundungsfehler sind. Andernfalls sollte die Standard-Pivotierungsstrategie RowMaximum im Allgemeinen bei der Gauß-Elimination bevorzugt werden.

Beachten Sie, dass der Elementtyp der Matrix eine iszero Methode unterstützen muss.

source
LinearAlgebra.RowMaximumType
RowMaximum

Das Element mit der maximalen Größe in den verbleibenden Zeilen wird als Pivot-Element gewählt. Dies ist die Standardstrategie für die LU-Faktorisierung von Gleitkommazahlen und wird manchmal als der "partielle Pivotierungs"-Algorithmus bezeichnet.

Beachten Sie, dass der Elementtyp der Matrix eine abs-Methode unterstützen muss, deren Ergebnistyp eine <-Methode unterstützen muss.

source
LinearAlgebra.ColumnNormType
ColumnNorm

Die Spalte mit der maximalen Norm wird für die nachfolgende Berechnung verwendet. Dies wird für die pivotierte QR-Faktorisierung verwendet.

Beachten Sie, dass der Elementtyp der Matrix die Methoden norm und abs zulassen muss, deren jeweilige Ergebnistypen eine < Methode zulassen müssen.

source

Standard functions

Lineare Algebra-Funktionen in Julia werden größtenteils durch den Aufruf von Funktionen aus LAPACK implementiert. Sparse-Matrix-Faktorisierungen rufen Funktionen aus SuiteSparse auf. Andere spärliche Solver sind als Julia-Pakete verfügbar.

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

Matrixmultiplikation.

Beispiele

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

Die verkettete Multiplikation von 3 oder 4 Matrizen erfolgt in der effizientesten Reihenfolge, basierend auf den Größen der Arrays. Das heißt, die Anzahl der benötigten skalaren Multiplikationen für (A * B) * C (mit 3 dichten Matrizen) wird mit der für A * (B * C) verglichen, um zu entscheiden, welche dieser beiden Ausdrücke ausgeführt werden soll.

Wenn der letzte Faktor ein Vektor ist oder der erste ein transponierter Vektor, ist es effizient, diese zuerst zu behandeln. Insbesondere bedeutet x' * B * y, dass (x' * B) * y für eine gewöhnliche spaltenmajorisierte B::Matrix. Im Gegensatz zu dot(x, B, y) wird dabei ein Zwischenarray alloziert.

Wenn der erste oder letzte Faktor eine Zahl ist, wird dies mit der Matrizenmultiplikation fusioniert, unter Verwendung von 5-arg mul!.

Siehe auch muladd, dot.

Julia 1.7

Diese Optimierungen erfordern mindestens Julia 1.7.

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

Matrixdivision mit einem Polyalgorithmus. Für die Eingabematrizen A und B ist das Ergebnis X so beschaffen, dass A*X == B, wenn A quadratisch ist. Der verwendete Solver hängt von der Struktur von A ab. Wenn A ober- oder unterdreieckig (oder diagonal) ist, ist keine Faktorisierung von A erforderlich und das System wird mit Vorwärts- oder Rückwärtssubstitution gelöst. Für nicht-triangular quadratische Matrizen wird eine LU-Faktorisierung verwendet.

Für rechteckige A ist das Ergebnis die Lösung der minimalen Norm der kleinsten Quadrate, die durch eine pivotierte QR-Faktorisierung von A und eine Rangschätzung von A basierend auf dem R-Faktor berechnet wird.

Wenn A spärlich ist, wird ein ähnlicher Polyalgorithmus verwendet. Für indefiniten Matrizen verwendet die LDLt-Faktorisierung während der numerischen Faktorisierung kein Pivoting, und daher kann das Verfahren selbst bei invertierbaren Matrizen fehlschlagen.

Siehe auch: factorize, pinv.

Beispiele

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

Matrix-Rechtsdivision: A / B ist äquivalent zu (B' \ A')', wobei \ der Linksdivisionsoperator ist. Für quadratische Matrizen ist das Ergebnis X so, dass A == X*B.

Siehe auch: rdiv!.

Beispiele

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

Ausnahme, die ausgelöst wird, wenn die Eingabematrix ein oder mehrere Eigenwerte mit dem Wert Null hat und nicht umkehrbar ist. Eine lineare Lösung, die eine solche Matrix beinhaltet, kann nicht berechnet werden. Das Feld info gibt den Standort des (eines) der singulären Werte an.

source
LinearAlgebra.PosDefExceptionType
PosDefException

Ausnahme, die ausgelöst wird, wenn die Eingabematrix nicht positiv definit ist. Einige lineare Algebra-Funktionen und Faktorisierungen sind nur für positiv definite Matrizen anwendbar. Das Feld info gibt den Standort von (einem der) Eigenwerte an, die kleiner/gleich 0 sind.

source
LinearAlgebra.ZeroPivotExceptionType
ZeroPivotException <: Exception

Ausnahme, die ausgelöst wird, wenn eine Matrixfaktorisierung/-lösung auf eine Null in einer Pivot- (diagonal) Position stößt und nicht fortfahren kann. Dies bedeutet nicht unbedingt, dass die Matrix singulär ist: Es kann sinnvoll sein, zu einer anderen Faktorisierung wie pivotiertem LU zu wechseln, die Variablen neu anordnen kann, um spurious Null-Pivots zu eliminieren. Das Feld info gibt den Standort (einen der) Null-Pivots an.

source
LinearAlgebra.RankDeficientExceptionType
RankDeficientException

Ausnahme, die ausgelöst wird, wenn die Eingabematrix Rang-defizient ist. Einige Funktionen der linearen Algebra, wie die Cholesky-Zerlegung, sind nur auf Matrizen anwendbar, die nicht rang-defizient sind. Das Feld info gibt den berechneten Rang der Matrix an.

source
LinearAlgebra.LAPACKExceptionType
LAPACKException

Allgemeine LAPACK-Ausnahme, die entweder während direkter Aufrufe der LAPACK-Funktionen oder während Aufrufen anderer Funktionen, die die LAPACK-Funktionen intern verwenden, aber keine spezialisierte Fehlerbehandlung haben, ausgelöst wird. Das Feld info enthält zusätzliche Informationen über den zugrunde liegenden Fehler und hängt von der aufgerufenen LAPACK-Funktion ab.

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

Berechne das Skalarprodukt zwischen zwei Vektoren. Bei komplexen Vektoren wird der erste Vektor konjugiert.

dot funktioniert auch mit beliebigen iterierbaren Objekten, einschließlich Arrays beliebiger Dimension, solange dot für die Elemente definiert ist.

dot ist semantisch äquivalent zu sum(dot(vx,vy) for (vx,vy) in zip(x, y)), mit der zusätzlichen Einschränkung, dass die Argumente die gleiche Länge haben müssen.

x ⋅ y (wobei durch Tab-Vervollständigung von \cdot im REPL eingegeben werden kann) ist ein Synonym für dot(x, y).

Beispiele

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)

Berechne das verallgemeinerte Skalarprodukt dot(x, A*y) zwischen zwei Vektoren x und y, ohne das Zwischenergebnis von A*y zu speichern. Wie beim zweiarugumentigen dot(_,_) wirkt dies rekursiv. Darüber hinaus wird für komplexe Vektoren der erste Vektor konjugiert.

Julia 1.4

Drei-argumentige dot erfordert mindestens Julia 1.4.

Beispiele

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)

Berechne das Kreuzprodukt von zwei 3-Vektoren.

Beispiele

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)

Überschreibe y mit x * α + y und gebe y zurück. Wenn x und y die gleichen Achsen haben, ist es äquivalent zu y .+= x .* a.

Beispiele

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)

Überschreibe y mit x * α + y * β und gebe y zurück. Wenn x und y die gleichen Achsen haben, ist es äquivalent zu y .= x .* a .+ y .* β.

Beispiele

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)

Überschreibt x mit c*x + s*y und y mit -conj(s)*x + c*y. Gibt x und y zurück.

Julia 1.5

rotate! erfordert mindestens Julia 1.5.

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

Überschreibt x mit c*x + s*y und y mit conj(s)*x - c*y. Gibt x und y zurück.

Julia 1.5

reflect! erfordert mindestens Julia 1.5.

source
LinearAlgebra.factorizeFunction
factorize(A)

Berechnet eine geeignete Faktorisierung von A, basierend auf dem Typ der Eingabematrix. factorize überprüft A, um festzustellen, ob es symmetrisch/triangular/etc. ist, wenn A als generische Matrix übergeben wird. factorize überprüft jedes Element von A, um jede Eigenschaft zu verifizieren/auszuschließen. Es wird sofort abgebrochen, sobald es Symmetrie/triangular Struktur ausschließen kann. Der Rückgabewert kann für eine effiziente Lösung mehrerer Systeme wiederverwendet werden. Zum Beispiel: A=factorize(A); x=A\b; y=A\C.

Eigenschaften von AArt der Faktorisierung
Positiv definitCholesky (siehe cholesky)
Dicht symmetrisch/HermiteschBunch-Kaufman (siehe bunchkaufman)
Spärlich symmetrisch/HermiteschLDLt (siehe ldlt)
TriangularTriangular
DiagonalDiagonal
BidiagonalBidiagonal
TridiagonalLU (siehe lu)
Symmetrisch reell tridiagonalLDLt (siehe ldlt)
Allgemein quadratischLU (siehe lu)
Allgemein nicht-quadratischQR (siehe qr)

Wenn factorize auf einer hermitischen positiv definiten Matrix aufgerufen wird, wird factorize beispielsweise eine Cholesky-Faktorisierung zurückgeben.

Beispiele

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> factorize(A) # factorize wird überprüfen, ob A bereits faktorisierte ist
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

Dies gibt ein 5×5 Bidiagonal{Float64} zurück, das nun an andere lineare Algebra-Funktionen (z. B. Eigenlöser) übergeben werden kann, die spezialisierte Methoden für Bidiagonal-Typen verwenden.

source
LinearAlgebra.DiagonalType
Diagonal(V::AbstractVector)

Konstruiere eine faule Matrix mit V als ihrer Diagonale.

Siehe auch UniformScaling für die faule Identitätsmatrix I, diagm um eine dichte Matrix zu erstellen, und diag um diagonale Elemente zu extrahieren.

Beispiele

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

!!! Hinweis Eine einspaltige Matrix wird nicht wie ein Vektor behandelt, sondern ruft stattdessen die Methode Diagonal(A::AbstractMatrix) auf, die 1-element diag(A) extrahiert:

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

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

Konstruiere eine Matrix aus der Hauptdiagonale von A. Die Eingabematrix A kann rechteckig sein, aber die Ausgabe wird quadratisch sein.

Beispiele

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)

Konstruiere ein nicht initialisiertes Diagonal{T} der Länge n. Siehe undef.

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

Konstruiert eine obere (uplo=:U) oder untere (uplo=:L) bidiagonale Matrix unter Verwendung der gegebenen Diagonal-(dv) und Off-Diagonal-(ev) Vektoren. Das Ergebnis ist vom Typ Bidiagonal und bietet effiziente spezialisierte lineare Solver, kann jedoch in eine reguläre Matrix mit convert(Array, _) (oder Array(_) für kurz) umgewandelt werden. Die Länge von ev muss um eins kleiner sein als die Länge von dv.

Beispiele

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 ist auf der ersten Superdiagonale
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

julia> Bl = Bidiagonal(dv, ev, :L) # ev ist auf der ersten Subdiagonale
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 7  2  ⋅  ⋅
 ⋅  8  3  ⋅
 ⋅  ⋅  9  4
source
Bidiagonal(A, uplo::Symbol)

Konstruiere eine Bidiagonal-Matrix aus der Hauptdiagonale von A und ihrer ersten Über- (wenn uplo=:U) oder Unterdiagonale (wenn uplo=:L).

Beispiele

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) # enthält die Hauptdiagonale und die erste Überdiagonale von A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # enthält die Hauptdiagonale und die erste Unterdiagonale von A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 2  2  ⋅  ⋅
 ⋅  3  3  ⋅
 ⋅  ⋅  4  4
source
LinearAlgebra.SymTridiagonalType
SymTridiagonal(dv::V, ev::V) where V <: AbstractVector

Konstruiere eine symmetrische tridiagonale Matrix aus der Diagonale (dv) und der ersten Unter-/Überdiagonale (ev). Das Ergebnis ist vom Typ SymTridiagonal und bietet effiziente spezialisierte Eigenlöser, kann jedoch in eine reguläre Matrix mit convert(Array, _) (oder Array(_) für kurz) umgewandelt werden.

Für SymTridiagonal Blockmatrizen werden die Elemente von dv symmetriert. Das Argument ev wird als Überdiagonale interpretiert. Blöcke von der Unterdiagonale sind (materialisierte) Transponierte der entsprechenden Überdiagonalblöcke.

Beispiele

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> 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)

Konstruiere eine symmetrische tridiagonale Matrix aus der Diagonalen und der ersten Überdiagonalen der symmetrischen Matrix A.

Beispiele

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) where V <: AbstractVector

Konstruiere eine tridiagonale Matrix aus der ersten Subdiagonale, der Diagonale und der ersten Superdiagonale. Das Ergebnis ist vom Typ Tridiagonal und bietet effiziente spezialisierte lineare Solver, kann jedoch in eine reguläre Matrix mit convert(Array, _) (oder Array(_) für kurz) umgewandelt werden. Die Längen von dl und du müssen um eins kleiner sein als die Länge von d.

!!! Hinweis Die Subdiagonale dl und die Superdiagonale du dürfen sich nicht gegenseitig aliasieren. Wenn ein Alias erkannt wird, verwendet der Konstruktor eine Kopie von du als Argument.

Beispiele

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)

Konstruiere eine tridiagonale Matrix aus der ersten Unterdiagonale, Diagonale und ersten Oberdiagonale der Matrix A.

Beispiele

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
Symmetrisch(A::AbstractMatrix, uplo::Symbol=:U)

Konstruiert eine Symmetrisch-Ansicht des oberen (wenn uplo = :U) oder unteren (wenn uplo = :L) Dreiecks der Matrix A.

Symmetrisch-Ansichten sind hauptsächlich nützlich für reelle symmetrische Matrizen, für die spezialisierte Algorithmen (z. B. für Eigenwertprobleme) für Symmetrisch-Typen aktiviert sind. Allgemeiner siehe auch Hermitian(A) für hermitische Matrizen A == A', die effektiv äquivalent zu Symmetrisch für reelle Matrizen sind, aber auch für komplexe Matrizen nützlich sind. (Während komplexe Symmetrisch-Matrizen unterstützt werden, gibt es nur wenige, wenn überhaupt, spezialisierte Algorithmen.)

Um den symmetrischen Teil einer reellen Matrix oder allgemeiner den hermitischen Teil (A + A') / 2 einer reellen oder komplexen Matrix A zu berechnen, verwenden Sie hermitianpart.

Beispiele

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 = Symmetrisch(A)
3×3 Symmetrisch{Int64, Matrix{Int64}}:
 1  2  3
 2  5  6
 3  6  9

julia> Slower = Symmetrisch(A, :L)
3×3 Symmetrisch{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

Beachten Sie, dass Supper nicht gleich Slower sein wird, es sei denn, A ist selbst symmetrisch (z. B. wenn A == transpose(A)).

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

Konstruiere eine Hermitian-Ansicht des oberen (wenn uplo = :U) oder unteren (wenn uplo = :L) Dreiecks der Matrix A.

Um den hermiteschen Teil von A zu berechnen, verwende hermitianpart.

Beispiele

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

Beachte, dass Hupper nicht gleich Hlower sein wird, es sei denn, A ist selbst hermitesch (z. B. wenn A == adjoint(A)).

Alle nicht-reellen Teile der Diagonalen werden ignoriert.

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

Konstruiere eine LowerTriangular-Ansicht der Matrix A.

Beispiele

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)

Konstruiere eine UpperTriangular-Ansicht der Matrix A.

Beispiele

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)

Konstruiere eine UnitLowerTriangular-Ansicht der Matrix A. Eine solche Ansicht hat das oneunit des eltype von A auf ihrer Diagonalen.

Beispiele

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)

Konstruiere eine UnitUpperTriangular-Ansicht der Matrix A. Eine solche Ansicht hat das oneunit des eltype von A auf ihrer Diagonalen.

Beispiele

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)

Konstruiere eine UpperHessenberg-Ansicht der Matrix A. Einträge von A unterhalb der ersten Subdiagonale werden ignoriert.

Julia 1.3

Dieser Typ wurde in Julia 1.3 hinzugefügt.

Effiziente Algorithmen sind für H \ b, det(H) und Ähnliches implementiert.

Siehe auch die hessenberg Funktion, um jede Matrix in eine ähnliche obere Hessenberg-Matrix zu faktorisieren.

Wenn F::Hessenberg das Faktorisierungsobjekt ist, kann die unitäre Matrix mit F.Q und die Hessenberg-Matrix mit F.H abgerufen werden. Wenn Q extrahiert wird, ist der resultierende Typ das HessenbergQ-Objekt und kann mit convert(Array, _) (oder Array(_) kurz) in eine reguläre Matrix umgewandelt werden.

Das Iterieren über die Zerlegung erzeugt die Faktoren F.Q und F.H.

Beispiele

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}

Generisch dimensionierter einheitlicher Skalierungsoperator, definiert als ein Skalar mal den Identitätsoperator, λ*I. Obwohl ohne eine explizite size, verhält er sich in vielen Fällen ähnlich wie eine Matrix und unterstützt einige Indizierungen. Siehe auch I.

Julia 1.6

Indizierung mit Bereichen ist seit Julia 1.6 verfügbar.

Beispiele

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

Ein Objekt vom Typ UniformScaling, das eine Einheitsmatrix beliebiger Größe darstellt.

Beispiele

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)

Konstruiere eine Diagonal-Matrix aus einer UniformScaling.

Julia 1.2

Diese Methode ist seit Julia 1.2 verfügbar.

Beispiele

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 <: Faktorisierung

Matrixfaktorisierungstyp der LU-Faktorisierung einer quadratischen Matrix A. Dies ist der Rückgabetyp von lu, der entsprechenden Matrixfaktorisierungsfunktion.

Die einzelnen Komponenten der Faktorisierung F::LU können über getproperty zugegriffen werden:

KomponenteBeschreibung
F.LL (einheitsuntere Dreiecksmatrix) Teil von LU
F.UU (obere Dreiecksmatrix) Teil von LU
F.p(rechte) Permutations-Vector
F.P(rechte) Permutations-Matrix

Das Iterieren über die Faktorisierung erzeugt die Komponenten F.L, F.U und F.p.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U-Faktor:
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); # Destrukturierung über Iteration

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

Berechnen Sie die LU-Zerlegung einer spärlichen Matrix A.

Für spärliche A mit reellem oder komplexem Elementtyp ist der Rückgabewert von F UmfpackLU{Tv, Ti}, wobei Tv = Float64 oder ComplexF64 entsprechend und Ti ein ganzzahliger Typ (Int32 oder Int64) ist.

Wenn check = true, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Der Permutationsvektor q kann entweder ein Permutationsvektor oder nothing sein. Wenn kein Permutationsvektor bereitgestellt wird oder q nothing ist, wird das Standardverhalten von UMFPACK verwendet. Wenn die Permutation nicht nullbasiert ist, wird eine nullbasierte Kopie erstellt.

Der control-Vektor hat standardmäßig die Standardkonfiguration des Julia SparseArrays-Pakets für UMFPACK (NB: dies wurde von den UMFPACK-Standardeinstellungen geändert, um die iterative Verfeinerung zu deaktivieren), kann jedoch geändert werden, indem ein Vektor der Länge UMFPACK_CONTROL übergeben wird. Siehe das UMFPACK-Handbuch für mögliche Konfigurationen. Um beispielsweise die iterative Verfeinerung wieder zu aktivieren:

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # Julia-Standardkonfiguration für eine Float64-spärliche Matrix lesen
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # optional - Werte anzeigen
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # iterative Verfeinerung wieder aktivieren (2 ist UMFPACK-Standard für maximale Schritte der iterativen Verfeinerung)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # löse Ax = b, einschließlich der iterativen Verfeinerung von UMFPACK

Die einzelnen Komponenten der Zerlegung F können durch Indizierung zugegriffen werden:

KomponenteBeschreibung
LL (untere Dreiecksmatrix) Teil von LU
UU (obere Dreiecksmatrix) Teil von LU
prechte Permutation Vector
qlinke Permutation Vector
RsVector der Skalierungsfaktoren
:(L,U,p,q,Rs) Komponenten

Die Beziehung zwischen F und A ist

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

F unterstützt außerdem die folgenden Funktionen:

Siehe auch lu!

!!! Hinweis lu(A::AbstractSparseMatrixCSC) verwendet die UMFPACK[ACM832] Bibliothek, die Teil von SuiteSparse ist. Da diese Bibliothek nur spärliche Matrizen mit Float64 oder ComplexF64-Elementen unterstützt, konvertiert lu A in eine Kopie, die vom Typ SparseMatrixCSC{Float64} oder SparseMatrixCSC{ComplexF64} ist, je nach Bedarf.

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

Berechnen Sie die LU-Zerlegung von A.

Wenn check = true ist, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false ist, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Standardmäßig wird mit check = true auch ein Fehler ausgelöst, wenn die Zerlegung gültige Faktoren produziert, aber der obere dreieckige Faktor U rangdefizient ist. Dies kann geändert werden, indem allowsingular = true übergeben wird.

In den meisten Fällen, wenn A ein Subtyp S von AbstractMatrix{T} mit einem Elementtyp T ist, der +, -, * und / unterstützt, ist der Rückgabetyp LU{T,S{T}}.

Im Allgemeinen umfasst die LU-Zerlegung eine Permutation der Zeilen der Matrix (entsprechend der F.p Ausgabe, die unten beschrieben ist), bekannt als "Pivotierung" (weil sie entspricht, welche Zeile den "Pivot" enthält, den diagonalen Eintrag von F.U). Eine der folgenden Pivotierungsstrategien kann über das optionale Argument pivot ausgewählt werden:

  • RowMaximum() (Standard): die Standard-Pivotierungsstrategie; der Pivot entspricht dem Element mit dem maximalen Absolutwert unter den verbleibenden, zu zerlegenden Zeilen. Diese Pivotierungsstrategie erfordert, dass der Elementtyp auch abs und < unterstützt. (Dies ist im Allgemeinen die einzige numerisch stabile Option für Gleitkommatrizen.)
  • RowNonZero(): der Pivot entspricht dem ersten nicht-null Element unter den verbleibenden, zu zerlegenden Zeilen. (Dies entspricht der typischen Wahl in Handberechnungen und ist auch nützlich für allgemeinere algebraische Zahlentypen, die iszero unterstützen, aber nicht abs oder <.)
  • NoPivot(): Pivotierung deaktiviert (schlägt fehl, wenn ein Null-Eintrag in einer Pivot-Position auftritt, selbst wenn allowsingular = true).

Die einzelnen Komponenten der Zerlegung F können über getproperty abgerufen werden:

KomponenteBeschreibung
F.LL (untere dreieckige) Teil von LU
F.UU (obere dreieckige) Teil von LU
F.p(rechte) Permutation Vector
F.P(rechte) Permutation Matrix

Die Iteration über die Zerlegung produziert die Komponenten F.L, F.U und F.p.

Die Beziehung zwischen F und A ist

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

F unterstützt außerdem die folgenden Funktionen:

Unterstützte FunktionLULU{T,Tridiagonal{T}}
/
\
inv
det
logdet
logabsdet
size
Julia 1.11

Das Schlüsselwortargument allowsingular wurde in Julia 1.11 hinzugefügt.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U-Faktor:
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); # Destrukturierung über Iteration

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}}
L-Faktor:
2×2 Matrix{Float64}:
 1.0  0.0
 1.0  1.0
U-Faktor (rangdefizient):
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

Berechnet die LU-Zerlegung einer spärlichen Matrix A, wobei die symbolische Zerlegung einer bereits vorhandenen LU-Zerlegung, die in F gespeichert ist, wiederverwendet wird. Sofern reuse_symbolic nicht auf false gesetzt ist, muss die spärliche Matrix A ein identisches Nicht-Null-Muster wie die Matrix haben, die zur Erstellung der LU-Zerlegung F verwendet wurde, andernfalls wird ein Fehler ausgelöst. Wenn die Größe von A und F unterschiedlich ist, werden alle Vektoren entsprechend angepasst.

Wenn check = true ist, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false ist, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Die Permutation q kann entweder ein Permutationsvektor oder nothing sein. Wenn kein Permutationsvektor bereitgestellt wird oder q nothing ist, wird das Standardverfahren von UMFPACK verwendet. Wenn die Permutation nicht nullbasiert ist, wird eine nullbasierte Kopie erstellt.

Siehe auch lu

Note

lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC) verwendet die UMFPACK-Bibliothek, die Teil von SuiteSparse ist. Da diese Bibliothek nur spärliche Matrizen mit Float64 oder ComplexF64-Elementen unterstützt, wird lu! die Typen automatisch in die von der LU-Zerlegung festgelegten oder SparseMatrixCSC{ComplexF64}-Typen konvertieren, wie es angemessen ist.

Julia 1.5

lu! für UmfpackLU erfordert mindestens Julia 1.5.

Beispiele

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! ist dasselbe wie lu, speichert jedoch Platz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Eine InexactError Ausnahme wird ausgelöst, wenn die Faktorisierung eine Zahl produziert, die vom Elementtyp von A nicht darstellbar ist, z. B. für Ganzzahltypen.

Julia 1.11

Das Schlüsselwortargument allowsingular wurde in Julia 1.11 hinzugefügt.

Beispiele

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}}
L-Faktor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U-Faktor:
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)
ERROR: InexactError: Int64(0.6666666666666666)
Stacktrace:
[...]
source
LinearAlgebra.CholeskyType
Cholesky <: Faktorisierung

Matrixfaktorisierungstyp der Cholesky-Faktorisierung einer dichten symmetrischen/Hermiteschen positiv definiten Matrix A. Dies ist der Rückgabetyp von cholesky, der entsprechenden Matrixfaktorisierungsfunktion.

Der dreieckige Cholesky-Faktor kann aus der Faktorisierung F::Cholesky über F.L und F.U erhalten werden, wobei A ≈ F.U' * F.U ≈ F.L * F.L'.

Die folgenden Funktionen sind für Cholesky-Objekte verfügbar: size, \, inv, det, logdet und isposdef.

Das Iterieren über die Zerlegung erzeugt die Komponenten L und U.

Beispiele

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-Faktor:
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; # Destrukturierung über Iteration

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

Matrixfaktorisierungstyp der pivotierten Cholesky-Faktorisation einer dichten symmetrischen/Hermiteschen positiv semi-definiten Matrix A. Dies ist der Rückgabetyp von cholesky(_, ::RowMaximum), der entsprechenden Matrixfaktorierungsfunktion.

Der triangulierte Cholesky-Faktor kann aus der Faktorisierung F::CholeskyPivoted über F.L und F.U sowie die Permutation über F.p erhalten werden, wobei A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' mit Ur = F.U[1:F.rank, :] und Lr = F.L[:, 1:F.rank] oder alternativ A ≈ Up' * Up ≈ Lp * Lp' mit Up = F.U[1:F.rank, invperm(F.p)] und Lp = F.L[invperm(F.p), 1:F.rank].

Die folgenden Funktionen sind für CholeskyPivoted-Objekte verfügbar: size, \, inv, det und rank.

Die Iteration der Zerlegung erzeugt die Komponenten L und U.

Beispiele

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-Faktor mit 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; # Destrukturierung über Iteration

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

Berechnen Sie die Cholesky-Zerlegung einer dichten symmetrischen positiv definiten Matrix A und geben Sie eine Cholesky Zerlegung zurück. Die Matrix A kann entweder eine Symmetric oder Hermitian AbstractMatrix oder eine perfekt symmetrische oder hermitische AbstractMatrix sein.

Der dreieckige Cholesky-Faktor kann aus der Zerlegung F über F.L und F.U erhalten werden, wobei A ≈ F.U' * F.U ≈ F.L * F.L'.

Die folgenden Funktionen sind für Cholesky-Objekte verfügbar: size, \, inv, det, logdet und isposdef.

Wenn Sie eine Matrix A haben, die aufgrund von Rundungsfehlern bei ihrer Konstruktion leicht nicht-hermitisch ist, wickeln Sie sie in Hermitian(A) ein, bevor Sie sie an cholesky übergeben, um sie als perfekt hermitisch zu behandeln.

Wenn check = true, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Beispiele

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-Faktor:
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

Berechnen Sie die pivotierte Cholesky-Zerlegung einer dichten symmetrischen positiv semi-definierten Matrix A und geben Sie eine CholeskyPivoted Zerlegung zurück. Die Matrix A kann entweder eine Symmetric oder Hermitian AbstractMatrix oder eine perfekt symmetrische oder hermitische AbstractMatrix sein.

Der dreieckige Cholesky-Faktor kann aus der Zerlegung F über F.L und F.U sowie die Permutation über F.p erhalten werden, wobei A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' mit Ur = F.U[1:F.rank, :] und Lr = F.L[:, 1:F.rank], oder alternativ A ≈ Up' * Up ≈ Lp * Lp' mit Up = F.U[1:F.rank, invperm(F.p)] und Lp = F.L[invperm(F.p), 1:F.rank].

Die folgenden Funktionen sind für CholeskyPivoted-Objekte verfügbar: size, \, inv, det und rank.

Das Argument tol bestimmt die Toleranz zur Bestimmung des Rangs. Bei negativen Werten ist die Toleranz die Maschinenpräzision.

Wenn Sie eine Matrix A haben, die aufgrund von Rundungsfehlern bei ihrer Konstruktion leicht nicht-hermitisch ist, wickeln Sie sie in Hermitian(A) ein, bevor Sie sie an cholesky übergeben, um sie als perfekt hermitisch zu behandeln.

Wenn check = true, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Beispiele

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-Faktor mit 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; # Destrukturierung über Iteration

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

Berechnen Sie die Cholesky-Zerlegung einer spärlichen positiv definiten Matrix A. A muss eine SparseMatrixCSC oder eine Symmetric/Hermitian Ansicht einer SparseMatrixCSC sein. Beachten Sie, dass A, auch wenn es nicht den Typ-Tag hat, dennoch symmetrisch oder hermitisch sein muss. Wenn perm nicht angegeben ist, wird eine füllreduzierende Permutation verwendet. F = cholesky(A) wird am häufigsten verwendet, um Gleichungssysteme mit F\b zu lösen, aber auch die Methoden diag, det und logdet sind für F definiert. Sie können auch einzelne Faktoren aus F extrahieren, indem Sie F.L verwenden. Da das Pivotieren standardmäßig aktiviert ist, wird die Zerlegung intern als A == P'*L*L'*P mit einer Permutationsmatrix P dargestellt; die Verwendung von nur L ohne Berücksichtigung von P führt zu falschen Ergebnissen. Um die Auswirkungen der Permutation einzubeziehen, ist es typischerweise vorzuziehen, "kombinierte" Faktoren wie PtL = F.PtL (das Äquivalent von P'*L) und LtP = F.UP (das Äquivalent von L'*P) zu extrahieren.

Wenn check = true, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Durch Setzen des optionalen Schlüsselwortarguments shift wird die Zerlegung von A+shift*I anstelle von A berechnet. Wenn das Argument perm angegeben ist, sollte es eine Permutation von 1:size(A,1) sein, die die zu verwendende Reihenfolge angibt (anstatt der standardmäßigen AMD-Reihenfolge von CHOLMOD).

Beispiele

Im folgenden Beispiel wird die füllreduzierende Permutation verwendet: [3, 2, 1]. Wenn perm auf 1:3 gesetzt wird, um keine Permutation zu erzwingen, beträgt die Anzahl der Nicht-Null-Elemente im Faktor 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} mit 3 gespeicherten Einträgen:
  ⋅    ⋅   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

Diese Methode verwendet die CHOLMOD[ACM887][DavisHager2009] Bibliothek von SuiteSparse. CHOLMOD unterstützt nur reale oder komplexe Typen in einfacher oder doppelter Präzision. Eingabematrizen, die nicht diesen Elementtypen entsprechen, werden bei Bedarf in diese Typen konvertiert.

Viele andere Funktionen von CHOLMOD sind umschlossen, aber nicht aus dem Modul Base.SparseArrays.CHOLMOD exportiert.

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

Das gleiche wie cholesky, aber spart Speicher, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Eine InexactError Ausnahme wird ausgelöst, wenn die Faktorisierung eine Zahl produziert, die vom Elementtyp von A nicht darstellbar ist, z. B. für Ganzzahltypen.

Beispiele

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

Das gleiche wie cholesky, aber spart Speicherplatz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Eine InexactError Ausnahme wird ausgelöst, wenn die Faktorisierung eine Zahl produziert, die vom Elementtyp von A nicht darstellbar ist, z. B. für Ganzzahltypen.

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

Berechne die Cholesky ($LL'$) Faktorisierung von A, indem die symbolische Faktorisierung F wiederverwendet wird. A muss eine SparseMatrixCSC oder eine Symmetric/ Hermitian Ansicht einer SparseMatrixCSC sein. Beachte, dass A, auch wenn es nicht den Typ-Tag hat, dennoch symmetrisch oder hermitesch sein muss.

Siehe auch cholesky.

!!! Hinweis Diese Methode verwendet die CHOLMOD-Bibliothek von SuiteSparse, die nur reale oder komplexe Typen in einfacher oder doppelter Präzision unterstützt. Eingabematrizen, die nicht diesen Elementtypen entsprechen, werden bei Bedarf in diese Typen umgewandelt.

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

Aktualisiert eine Cholesky-Faktorisierung C mit dem Vektor v. Wenn A = C.U'C.U dann ist CC = cholesky(C.U'C.U + v*v'), aber die Berechnung von CC verwendet nur O(n^2) Operationen.

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

Erhalten Sie eine LDLt-Faktorisierung von A + C*C', gegeben eine LDLt- oder LLt-Faktorisierung F von A.

Der zurückgegebene Faktor ist immer eine LDLt-Faktorisierung.

Siehe auch lowrankupdate!, lowrankdowndate, lowrankdowndate!.

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

Führen Sie eine Downdate einer Cholesky-Faktorisierung C mit dem Vektor v durch. Wenn A = C.U'C.U dann ist CC = cholesky(C.U'C.U - v*v'), aber die Berechnung von CC verwendet nur O(n^2) Operationen.

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

Erhalte eine LDLt-Faktorisierung von A + C*C', gegeben eine LDLt- oder LLt-Faktorisierung F von A.

Der zurückgegebene Faktor ist immer eine LDLt-Faktorisierung.

Siehe auch lowrankdowndate!, lowrankupdate, lowrankupdate!.

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

Aktualisiert eine Cholesky-Faktorisierung C mit dem Vektor v. Wenn A = C.U'C.U dann ist CC = cholesky(C.U'C.U + v*v'), aber die Berechnung von CC verwendet nur O(n^2) Operationen. Die Eingabefaktorisierung C wird vor Ort aktualisiert, sodass beim Verlassen C == CC gilt. Der Vektor v wird während der Berechnung zerstört.

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

Aktualisiert eine LDLt- oder LLt-Faktorisierung F von A zu einer Faktorisierung von A + C*C'.

LLt-Faktorisierungen werden in LDLt umgewandelt.

Siehe auch lowrankupdate, lowrankdowndate, lowrankdowndate!.

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

Aktualisieren Sie eine Cholesky-Faktorisierung C mit dem Vektor v. Wenn A = C.U'C.U dann ist CC = cholesky(C.U'C.U - v*v'), aber die Berechnung von CC verwendet nur O(n^2) Operationen. Die Eingabefaktorisierung C wird vor Ort aktualisiert, sodass beim Verlassen C == CC gilt. Der Vektor v wird während der Berechnung zerstört.

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

Aktualisiert eine LDLt- oder LLt-Faktorisierung F von A zu einer Faktorisierung von A - C*C'.

LLt-Faktorisierungen werden in LDLt umgewandelt.

Siehe auch lowrankdowndate, lowrankupdate, lowrankupdate!.

source
LinearAlgebra.LDLtType
LDLt <: Faktorisierung

Matrixfaktorisierungstyp der LDLt-Faktorisierung einer reellen SymTridiagonal Matrix S, sodass S = L*Diagonal(d)*L', wobei L eine UnitLowerTriangular Matrix und d ein Vektor ist. Der Hauptzweck einer LDLt-Faktorisierung F = ldlt(S) besteht darin, das lineare Gleichungssystem Sx = b mit F\b zu lösen. Dies ist der Rückgabetyp von ldlt, der entsprechenden Matrixfaktorisierungsfunktion.

Die einzelnen Komponenten der Faktorisierung F::LDLt können über getproperty zugegriffen werden:

KomponenteBeschreibung
F.LL (einheitlich untere Dreiecksmatrix) Teil von LDLt
F.DD (diagonal) Teil von LDLt
F.LtLt (einheitlich obere Dreiecksmatrix) Teil von LDLt
F.ddiagonale Werte von D als Vector

Beispiele

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}}}
L-Faktor:
3×3 UnitLowerTriangular{Float64, SymTridiagonal{Float64, Vector{Float64}}}:
 1.0        ⋅         ⋅
 0.333333  1.0        ⋅
 0.0       0.545455  1.0
D-Faktor:
3×3 Diagonal{Float64, Vector{Float64}}:
 3.0   ⋅        ⋅
  ⋅   3.66667   ⋅
  ⋅    ⋅       3.90909
source
LinearAlgebra.ldltFunction
ldlt(S::SymTridiagonal) -> LDLt

Berechne eine LDLt (d.h. $LDL^T$) Faktorisierung der reellen symmetrischen tridiagonalen Matrix S, sodass S = L*Diagonal(d)*L', wobei L eine einheitsuntere Dreiecksmatrix und d ein Vektor ist. Der Hauptzweck einer LDLt-Faktorisierung F = ldlt(S) besteht darin, das lineare Gleichungssystem Sx = b mit F\b zu lösen.

Siehe auch bunchkaufman für eine ähnliche, aber pivotierte Faktorisierung beliebiger symmetrischer oder hermitescher Matrizen.

Beispiele

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

Berechnen Sie die $LDL'$-Faktorisierung einer spärlichen Matrix A. A muss eine SparseMatrixCSC oder eine Symmetric/Hermitian Ansicht einer SparseMatrixCSC sein. Beachten Sie, dass A, auch wenn es nicht den Typ-Tag hat, dennoch symmetrisch oder hermitesch sein muss. Eine füllreduzierende Permutation wird verwendet. F = ldlt(A) wird am häufigsten verwendet, um Gleichungssysteme A*x = b mit F\b zu lösen. Das zurückgegebene Faktorisierungsobjekt F unterstützt auch die Methoden diag, det, logdet und inv. Sie können einzelne Faktoren aus F mit F.L extrahieren. Da jedoch das Pivoting standardmäßig aktiviert ist, wird die Faktorisierung intern als A == P'*L*D*L'*P mit einer Permutationsmatrix P dargestellt; die Verwendung von nur L ohne Berücksichtigung von P führt zu falschen Ergebnissen. Um die Auswirkungen der Permutation einzubeziehen, ist es typischerweise vorzuziehen, "kombinierte" Faktoren wie PtL = F.PtL (das Äquivalent von P'*L) und LtP = F.UP (das Äquivalent von L'*P) zu extrahieren. Die vollständige Liste der unterstützten Faktoren ist :L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP.

Wenn check = true, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Durch Setzen des optionalen Schlüsselwortarguments shift wird die Faktorisierung von A+shift*I anstelle von A berechnet. Wenn das Argument perm bereitgestellt wird, sollte es eine Permutation von 1:size(A,1) sein, die die zu verwendende Reihenfolge angibt (anstatt der standardmäßigen AMD-Reihenfolge von CHOLMOD).

!!! Hinweis Diese Methode verwendet die CHOLMOD[ACM887][DavisHager2009] Bibliothek von SuiteSparse. CHOLMOD unterstützt nur reale oder komplexe Typen in einfacher oder doppelter Präzision. Eingabematrizen, die nicht diesen Elementtypen entsprechen, werden bei Bedarf in diese Typen konvertiert.

Viele andere Funktionen von CHOLMOD sind verpackt, aber nicht aus dem Modul `Base.SparseArrays.CHOLMOD` exportiert.
source
LinearAlgebra.ldlt!Function
ldlt!(S::SymTridiagonal) -> LDLt

Dasselbe wie ldlt, aber spart Speicher, indem es die Eingabe S überschreibt, anstatt eine Kopie zu erstellen.

Beispiele

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

Berechne die $LDL'$-Faktorisierung von A, indem die symbolische Faktorisierung F wiederverwendet wird. A muss eine SparseMatrixCSC oder eine Symmetric/Hermitian Ansicht einer SparseMatrixCSC sein. Beachte, dass A, auch wenn es nicht den Typ-Tag hat, dennoch symmetrisch oder hermitesch sein muss.

Siehe auch ldlt.

!!! Hinweis Diese Methode verwendet die CHOLMOD-Bibliothek von SuiteSparse, die nur reale oder komplexe Typen in einfacher oder doppelter Präzision unterstützt. Eingabematrizen, die nicht diesen Elementtypen entsprechen, werden bei Bedarf in diese Typen umgewandelt.

source
LinearAlgebra.QRType
QR <: Faktorisierung

Eine QR-Matrixfaktorisierung, die in einem kompakten Format gespeichert ist, typischerweise erhalten von qr. Wenn $A$ eine m×n Matrix ist, dann

\[A = Q R\]

wobei $Q$ eine orthogonale/einheitliche Matrix und $R$ oberes Dreieck ist. Die Matrix $Q$ wird als eine Folge von Householder-Reflektoren $v_i$ und Koeffizienten $\tau_i$ gespeichert, wobei:

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

Das Iterieren der Zerlegung erzeugt die Komponenten Q und R.

Das Objekt hat zwei Felder:

  • factors ist eine m×n Matrix.

    • Der obere Dreiecksteil enthält die Elemente von $R$, das heißt R = triu(F.factors) für ein QR Objekt F.
    • Der subdiagonale Teil enthält die Reflektoren $v_i$, die in einem kompakten Format gespeichert sind, wobei $v_i$ die $i$-te Spalte der Matrix V = I + tril(F.factors, -1) ist.
  • τ ist ein Vektor der Länge min(m,n), der die Koeffizienten $au_i$ enthält.

source
LinearAlgebra.QRCompactWYType
QRCompactWY <: Factorization

Eine QR-Matrixfaktorisierung, die in einem kompakten Blockformat gespeichert ist, typischerweise erhalten von qr. Wenn $A$ eine m×n Matrix ist, dann

\[A = Q R\]

wobei $Q$ eine orthogonale/einheitliche Matrix und $R$ oberes Dreieck ist. Es ist ähnlich zum QR Format, mit dem Unterschied, dass die orthogonale/einheitliche Matrix $Q$ im Compact WY Format gespeichert ist [Schreiber1989]. Für die Blockgröße $n_b$ wird es als eine m×n untere trapezförmige Matrix $V$ und eine Matrix $T = (T_1 \; T_2 \; ... \; T_{b-1} \; T_b')$ gespeichert, die aus $b = \lceil \min(m,n) / n_b \rceil$ oberen Dreiecksmatrizen $T_j$ der Größe $n_b$×$n_b$ ($j = 1, ..., b-1$) und einer oberen trapezförmigen $n_b$×$\min(m,n) - (b-1) n_b$ Matrix $T_b'$ ($j=b$) besteht, deren oberer quadratischer Teil mit $T_b$ bezeichnet wird und die erfüllt

\[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)\]

so dass $v_i$ die $i$-te Spalte von $V$ ist, $\tau_i$ das $i$-te Element von [diag(T_1); diag(T_2); …; diag(T_b)] ist, und $(V_1 \; V_2 \; ... \; V_b)$ der linke m×min(m, n) Block von $V$ ist. Wenn es mit qr konstruiert wird, wird die Blockgröße durch $n_b = \min(m, n, 36)$ gegeben.

Das Iterieren der Zerlegung erzeugt die Komponenten Q und R.

Das Objekt hat zwei Felder:

  • factors, wie im QR Typ, ist eine m×n Matrix.

    • Der obere Dreiecksteil enthält die Elemente von $R$, das heißt R = triu(F.factors) für ein QR Objekt F.
    • Der subdiagonale Teil enthält die Reflektoren $v_i$, die in einem gepackten Format gespeichert sind, so dass V = I + tril(F.factors, -1).
  • T ist eine $n_b$-by-$\min(m,n)$ Matrix, wie oben beschrieben. Die subdiagonalen Elemente für jede Dreiecksmatrix $T_j$ werden ignoriert.

Note

Dieses Format sollte nicht mit der älteren WY Darstellung [Bischof1987] verwechselt werden.

source
LinearAlgebra.QRPivotedType
QRPivoted <: Factorization

Eine QR-Matrixfaktorisierung mit Spaltenpivotierung in einem kompakten Format, typischerweise erhalten von qr. Wenn $A$ eine m×n Matrix ist, dann

\[A P = Q R\]

wobei $P$ eine Permutationsmatrix ist, $Q$ eine orthogonale/einheitliche Matrix und $R$ oberhalb dreieckig ist. Die Matrix $Q$ wird als eine Folge von Householder-Reflektoren gespeichert:

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

Das Iterieren der Zerlegung produziert die Komponenten Q, R und p.

Das Objekt hat drei Felder:

  • factors ist eine m×n Matrix.

    • Der obere dreieckige Teil enthält die Elemente von $R$, das heißt R = triu(F.factors) für ein QR Objekt F.
    • Der subdiagonale Teil enthält die Reflektoren $v_i$, die in einem kompakten Format gespeichert sind, wobei $v_i$ die $i$-te Spalte der Matrix V = I + tril(F.factors, -1) ist.
  • τ ist ein Vektor der Länge min(m,n), der die Koeffizienten $au_i$ enthält.

  • jpvt ist ein ganzzahliger Vektor der Länge n, der der Permutation $P$ entspricht.

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

Berechnen Sie die QR-Faktorisierung einer spärlichen Matrix A. Es werden zeilen- und spaltenreduzierende Permutationen verwendet, sodass F.R = F.Q'*A[F.prow,F.pcol]. Die Hauptanwendung dieses Typs besteht darin, kleinste Quadrate oder unterbestimmte Probleme mit \ zu lösen. Die Funktion ruft die C-Bibliothek SPQR[ACM933] auf.

!!! Hinweis qr(A::SparseMatrixCSC) verwendet die SPQR-Bibliothek, die Teil von SuiteSparse ist. Da diese Bibliothek nur spärliche Matrizen mit Float64 oder ComplexF64-Elementen unterstützt, konvertiert qr ab Julia v1.4 A in eine Kopie, die vom Typ SparseMatrixCSC{Float64} oder SparseMatrixCSC{ComplexF64} ist, je nach Bedarf.

Beispiele

julia> A = sparse([1,2,3,4], [1,1,2,2], [1.0,1.0,1.0,1.0])
4×2 SparseMatrixCSC{Float64, Int64} mit 4 gespeicherten Einträgen:
 1.0   ⋅
 1.0   ⋅
  ⋅   1.0
  ⋅   1.0

julia> qr(A)
SparseArrays.SPQR.QRSparse{Float64, Int64}
Q-Faktor:
4×4 SparseArrays.SPQR.QRSparseQ{Float64, Int64}
R-Faktor:
2×2 SparseMatrixCSC{Float64, Int64} mit 2 gespeicherten Einträgen:
 -1.41421    ⋅
   ⋅       -1.41421
Zeilenpermutation:
4-element Vector{Int64}:
 1
 3
 4
 2
Spaltenpermutation:
2-element Vector{Int64}:
 1
 2
source
qr(A, pivot = NoPivot(); blocksize) -> F

Berechne die QR-Zerlegung der Matrix A: eine orthogonale (oder unitäre, wenn A komplexwertig ist) Matrix Q und eine obere Dreiecksmatrix R, sodass

\[A = Q R\]

Das zurückgegebene Objekt F speichert die Zerlegung in einem kompakten Format:

  • wenn pivot == ColumnNorm() dann ist F ein QRPivoted Objekt,
  • andernfalls, wenn der Elementtyp von A ein BLAS-Typ ist (Float32, Float64, ComplexF32 oder ComplexF64), dann ist F ein QRCompactWY Objekt,
  • andernfalls ist F ein QR Objekt.

Die einzelnen Komponenten der Zerlegung F können über Eigenschaftsaccessoren abgerufen werden:

  • F.Q: die orthogonale/unitäre Matrix Q
  • F.R: die obere Dreiecksmatrix R
  • F.p: der Permutationsvektor des Pivots (QRPivoted nur)
  • F.P: die Permutationsmatrix des Pivots (QRPivoted nur)

!!! Hinweis Jeder Zugriff auf den oberen Dreifaktor über F.R allokiert ein neues Array. Es ist daher ratsam, dieses Array zu cachen, z.B. durch R = F.R und weiter mit R zu arbeiten.

Die Iteration der Zerlegung erzeugt die Komponenten Q, R und, falls vorhanden, p.

Die folgenden Funktionen sind für die QR-Objekte verfügbar: inv, size und \. Wenn A rechteckig ist, gibt \ eine Lösung der kleinsten Quadrate zurück, und wenn die Lösung nicht eindeutig ist, wird die mit der kleinsten Norm zurückgegeben. Wenn A nicht vollen Rang hat, ist eine Zerlegung mit (Spalten-)Pivotierung erforderlich, um eine Lösung mit minimaler Norm zu erhalten.

Die Multiplikation in Bezug auf entweder volle/quadratische oder nicht volle/quadratische Q ist erlaubt, d.h. sowohl F.Q*F.R als auch F.Q*A werden unterstützt. Eine Q-Matrix kann mit Matrix in eine reguläre Matrix umgewandelt werden. Diese Operation gibt den "dünnen" Q-Faktor zurück, d.h., wenn A m×n mit m>=n ist, dann ergibt Matrix(F.Q) eine m×n Matrix mit orthonormalen Spalten. Um den "vollen" Q-Faktor, eine m×m orthogonale Matrix, abzurufen, verwenden Sie F.Q*I oder collect(F.Q). Wenn m<=n, dann ergibt Matrix(F.Q) eine m×m orthogonale Matrix.

Die Blockgröße für die QR-Zerlegung kann durch das Schlüsselwort-Argument blocksize :: Integer angegeben werden, wenn pivot == NoPivot() und A isa StridedMatrix{<:BlasFloat}. Es wird ignoriert, wenn blocksize > minimum(size(A)). Siehe QRCompactWY.

!!! Kompatibilität "Julia 1.4" Das Schlüsselwort-Argument blocksize erfordert Julia 1.4 oder höher.

Beispiele

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}}
Q-Faktor: 3×3 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R-Faktor:
2×2 Matrix{Float64}:
 -5.0  10.0
  0.0  -1.0

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

!!! Hinweis qr gibt mehrere Typen zurück, da LAPACK mehrere Darstellungen verwendet, die die Speicheranforderungen für Produkte von Householder-Elementarreflektoren minimieren, sodass die Q- und R-Matrizen kompakt gespeichert werden können, anstatt als zwei separate dichte Matrizen.

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

qr! ist dasselbe wie qr, wenn A ein Subtyp von AbstractMatrix ist, speichert jedoch Platz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Eine InexactError Ausnahme wird ausgelöst, wenn die Faktorisierung eine Zahl produziert, die vom Elementtyp von A nicht darstellbar ist, z. B. für Ganzzahltypen.

Julia 1.4

Das Schlüsselwortargument blocksize erfordert Julia 1.4 oder höher.

Beispiele

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}}
Q-Faktor: 2×2 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R-Faktor:
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)
ERROR: InexactError: Int64(3.1622776601683795)
Stacktrace:
[...]
source
LinearAlgebra.LQType
LQ <: Faktorisierung

Matrixfaktorisierungstyp der LQ-Faktorisierung einer Matrix A. Die LQ-Zerlegung ist die QR Zerlegung von transpose(A). Dies ist der Rückgabetyp von lq, der entsprechenden Matrixfaktorisierungsfunktion.

Wenn S::LQ das Faktorisierungsobjekt ist, kann die untere dreieckige Komponente über S.L und die orthogonale/einheitliche Komponente über S.Q abgerufen werden, sodass A ≈ S.L*S.Q.

Das Iterieren über die Zerlegung erzeugt die Komponenten S.L und S.Q.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q-Faktor: 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; # Destrukturierung über Iteration

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

Berechnen Sie die LQ-Zerlegung von A. Die untere dreieckige Komponente der Zerlegung kann aus dem LQ Objekt S über S.L abgerufen werden, und die orthogonale/einheitliche Komponente über S.Q, sodass A ≈ S.L*S.Q.

Durch Iteration der Zerlegung werden die Komponenten S.L und S.Q erzeugt.

Die LQ-Zerlegung ist die QR-Zerlegung von transpose(A), und sie ist nützlich, um die Lösung mit minimaler Norm lq(A) \ b für ein unterbestimmtes Gleichungssystem zu berechnen (A hat mehr Spalten als Zeilen, hat aber vollen Zeilenrang).

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q-Faktor: 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; # Destrukturierung über Iteration

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

Berechnen Sie die LQ Faktorisierung von A, indem Sie die Eingabematrix als Arbeitsbereich verwenden. Siehe auch lq.

source
LinearAlgebra.BunchKaufmanType
BunchKaufman <: Faktorisierung

Matrixfaktorisierungstyp der Bunch-Kaufman-Faktorisierung einer symmetrischen oder hermiteschen Matrix A als P'UDU'P oder P'LDL'P, abhängig davon, ob das obere (der Standard) oder das untere Dreieck in A gespeichert ist. Wenn A komplex symmetrisch ist, dann bezeichnen U' und L' die unkonjugierten Transponierten, d.h. transpose(U) und transpose(L), jeweils. Dies ist der Rückgabetyp von bunchkaufman, der entsprechenden Matrixfaktorisierungsfunktion.

Wenn S::BunchKaufman das Faktorisierungsobjekt ist, können die Komponenten über S.D, S.U oder S.L je nach S.uplo und S.p abgerufen werden.

Das Iterieren über die Zerlegung erzeugt die Komponenten S.D, S.U oder S.L je nach S.uplo und S.p.

Beispiele

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

julia> S = bunchkaufman(A) # A wird intern von Symmetric(A) umschlossen
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D-Faktor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U-Faktor:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
Permutation:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # Destrukturierung über Iteration

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

julia> S = bunchkaufman(Symmetric(A, :L))
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D-Faktor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L-Faktor:
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

Berechne die Bunch-Kaufman [Bunch1977] Faktorisierung einer symmetrischen oder hermiteschen Matrix A als P'*U*D*U'*P oder P'*L*D*L'*P, abhängig davon, welches Dreieck in A gespeichert ist, und gebe ein BunchKaufman Objekt zurück. Beachte, dass wenn A komplex symmetrisch ist, dann U' und L' die unkonjugierten Transponierten bezeichnen, d.h. transpose(U) und transpose(L).

Das Iterieren über die Zerlegung erzeugt die Komponenten S.D, S.U oder S.L je nach dem, was S.uplo angibt, und S.p.

Wenn rook true ist, wird Rook-Pivoting verwendet. Wenn rook false ist, wird kein Rook-Pivoting verwendet.

Wenn check = true ist, wird ein Fehler ausgelöst, wenn die Zerlegung fehlschlägt. Wenn check = false ist, liegt die Verantwortung für die Überprüfung der Gültigkeit der Zerlegung (über issuccess) beim Benutzer.

Die folgenden Funktionen sind für BunchKaufman Objekte verfügbar: size, \, inv, issymmetric, ishermitian, getindex.

Beispiele

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

julia> S = bunchkaufman(A) # A wird intern von Symmetric(A) umschlossen
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D-Faktor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U-Faktor:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
Permutation:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # Destrukturierung durch Iteration

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}}
D-Faktor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L-Faktor:
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! ist dasselbe wie bunchkaufman, speichert jedoch Platz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen.

source
LinearAlgebra.EigenType
Eigen <: Factorization

Matrixfaktorisierungstyp der Eigenwert-/Spektralzerlegung einer quadratischen Matrix A. Dies ist der Rückgabetyp von eigen, der entsprechenden Matrixfaktorierungsfunktion.

Wenn F::Eigen das Faktorisierungsobjekt ist, können die Eigenwerte über F.values und die Eigenvektoren als Spalten der Matrix F.vectors abgerufen werden. (Der k-te Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung erzeugt die Komponenten F.values und F.vectors.

Beispiele

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

Matrixfaktorisierungstyp der verallgemeinerten Eigenwert-/Spektralzerlegung von A und B. Dies ist der Rückgabetyp von eigen, der entsprechenden Matrixfaktorierungsfunktion, wenn sie mit zwei Matrixargumenten aufgerufen wird.

Wenn F::GeneralizedEigen das Faktorisierungsobjekt ist, können die Eigenwerte über F.values und die Eigenvektoren als Spalten der Matrix F.vectors abgerufen werden. (Der k-te Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung erzeugt die Komponenten F.values und F.vectors.

Beispiele

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

Gibt die Eigenwerte von A zurück.

Für allgemeine nicht-symmetrische Matrizen ist es möglich, anzugeben, wie die Matrix vor der Berechnung der Eigenwerte ausgewogen werden soll. Die Schlüsselwörter permute, scale und sortby sind dieselben wie für eigen.

Beispiele

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

Für einen skalaren Eingabewert gibt eigvals einen Skalar zurück.

Beispiele

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

Berechnen Sie die verallgemeinerten Eigenwerte von A und B.

Beispiele

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) -> values

Gibt die Eigenwerte von A zurück. Es ist möglich, nur eine Teilmenge der Eigenwerte zu berechnen, indem man einen UnitRange irange angibt, der Indizes der sortierten Eigenwerte abdeckt, z.B. die 2. bis 8. Eigenwerte.

Beispiele

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

Gibt die Eigenwerte von A zurück. Es ist möglich, nur eine Teilmenge der Eigenwerte zu berechnen, indem man ein Paar vl und vu für die unteren und oberen Grenzen der Eigenwerte angibt.

Beispiele

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) -> values

Dasselbe wie eigvals, aber spart Speicherplatz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Die Schlüsselwörter permute, scale und sortby sind dieselben wie für eigen.

!!! Hinweis Die Eingabematrix A enthält nach dem Aufruf von eigvals! keine Eigenwerte mehr - A wird als Arbeitsbereich verwendet.

Beispiele

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

Gleich wie eigvals, aber spart Speicherplatz, indem die Eingabe A (und B) überschrieben wird, anstatt Kopien zu erstellen.

!!! Hinweis Die Eingabematrizen A und B enthalten nach dem Aufruf von eigvals! ihre Eigenwerte nicht mehr. Sie werden als Arbeitsräume verwendet.

Beispiele

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

Gleich wie eigvals, aber spart Speicherplatz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. irange ist ein Bereich von Eigenwert Indizes, nach denen gesucht werden soll - zum Beispiel die 2. bis 8. Eigenwerte.

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

Dasselbe wie eigvals, aber spart Speicherplatz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. vl ist die Untergrenze des Intervalls, in dem nach Eigenwerten gesucht wird, und vu ist die Obergrenze.

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

Gibt den größten Eigenwert von A zurück. Die Option permute=true permutiert die Matrix, um näher an eine obere Dreiecksmatrix zu gelangen, und scale=true skaliert die Matrix nach ihren Diagonalelementen, um die Zeilen und Spalten normgleichmäßiger zu machen. Beachten Sie, dass diese Methode fehlschlägt, wenn die Eigenwerte von A komplex sind, da komplexe Zahlen nicht sortiert werden können.

Beispiele

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` kann keine komplexen Eigenwerte haben.
Stacktrace:
[...]
source
LinearAlgebra.eigminFunction
eigmin(A; permute::Bool=true, scale::Bool=true)

Gibt den kleinsten Eigenwert von A zurück. Die Option permute=true permutiert die Matrix, um näher an eine obere Dreiecksmatrix zu gelangen, und scale=true skaliert die Matrix nach ihren Diagonalelementen, um Zeilen und Spalten normgleichmäßiger zu machen. Beachten Sie, dass diese Methode fehlschlägt, wenn die Eigenwerte von A komplex sind, da komplexe Zahlen nicht sortiert werden können.

Beispiele

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` kann keine komplexen Eigenwerte haben.
Stacktrace:
[...]
source
LinearAlgebra.eigvecsFunction
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

Gibt eine Matrix M zurück, deren Spalten die Eigenvektoren von A sind. (Der kte Eigenvektor kann aus dem Slice M[:, k] abgerufen werden.)

Wenn der optionale Vektor von Eigenwerten eigvals angegeben ist, gibt eigvecs die entsprechenden spezifischen Eigenvektoren zurück.

Beispiele

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

Gibt eine Matrix M zurück, deren Spalten die Eigenvektoren von A sind. (Der k-te Eigenvektor kann aus dem Slice M[:, k] abgerufen werden.) Die Schlüsselwörter permute, scale und sortby sind die gleichen wie für eigen.

Beispiele

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

Gibt eine Matrix M zurück, deren Spalten die verallgemeinerten Eigenvektoren von A und B sind. (Der kte Eigenvektor kann aus dem Slice M[:, k] abgerufen werden.)

Beispiele

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

Berechnen Sie die Eigenwertzerlegung von A, wobei ein Eigen Faktorisierungsobjekt F zurückgegeben wird, das die Eigenwerte in F.values und die Eigenvektoren in den Spalten der Matrix F.vectors enthält. Dies entspricht der Lösung eines Eigenwertproblems der Form Ax = λx, wobei A eine Matrix ist, x ein Eigenvektor und λ ein Eigenwert. (Der k-te Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung produziert die Komponenten F.values und F.vectors.

Die folgenden Funktionen sind für Eigen-Objekte verfügbar: inv, det und isposdef.

Für allgemeine unsymmetrische Matrizen ist es möglich, anzugeben, wie die Matrix vor der Berechnung der Eigenvektoren balanciert werden soll. Die Option permute=true permutiert die Matrix, um näher an eine obere Dreiecksmatrix zu gelangen, und scale=true skaliert die Matrix durch ihre Diagonalelemente, um Zeilen und Spalten in der Norm gleichmäßiger zu machen. Der Standardwert ist true für beide Optionen.

Standardmäßig werden die Eigenwerte und -vektoren lexikografisch nach (real(λ),imag(λ)) sortiert. Eine andere Vergleichsfunktion by(λ) kann an sortby übergeben werden, oder Sie können sortby=nothing übergeben, um die Eigenwerte in einer beliebigen Reihenfolge zu belassen. Einige spezielle Matrizenarten (z. B. Diagonal oder SymTridiagonal) können ihre eigene Sortierkonvention implementieren und akzeptieren möglicherweise kein sortby-Schlüsselwort.

Beispiele

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; # destrukturieren über Iteration

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

Berechnen Sie die verallgemeinerte Eigenwertzerlegung von A und B, wobei ein GeneralizedEigen Faktorisierungsobjekt F zurückgegeben wird, das die verallgemeinerten Eigenwerte in F.values und die verallgemeinerten Eigenvektoren in den Spalten der Matrix F.vectors enthält. Dies entspricht der Lösung eines verallgemeinerten Eigenwertproblems der Form Ax = λBx, wobei A, B Matrizen sind, x ein Eigenvektor ist und λ ein Eigenwert ist. (Der k-te verallgemeinerte Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung erzeugt die Komponenten F.values und F.vectors.

Standardmäßig sind die Eigenwerte und -vektoren lexikografisch nach (real(λ),imag(λ)) sortiert. Eine andere Vergleichsfunktion by(λ) kann an sortby übergeben werden, oder Sie können sortby=nothing übergeben, um die Eigenwerte in einer beliebigen Reihenfolge zu belassen.

Beispiele

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; # Destrukturierung durch Iteration

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

Berechnet die Eigenwertzerlegung von A und gibt ein Eigen Faktorisierungsobjekt F zurück, das die Eigenwerte in F.values und die Eigenvektoren in den Spalten der Matrix F.vectors enthält. (Der k-te Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung erzeugt die Komponenten F.values und F.vectors.

Die folgenden Funktionen sind für Eigen-Objekte verfügbar: inv, det und isposdef.

Der UnitRange irange gibt die Indizes der sortierten Eigenwerte an, nach denen gesucht werden soll.

!!! Hinweis Wenn irange nicht 1:n ist, wobei n die Dimension von A ist, wird die zurückgegebene Faktorisierung eine trunkierte Faktorisierung sein.

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

Berechnet die Eigenwertzerlegung von A und gibt ein Eigen Faktorisierungsobjekt F zurück, das die Eigenwerte in F.values und die Eigenvektoren in den Spalten der Matrix F.vectors enthält. (Der k-te Eigenvektor kann aus dem Slice F.vectors[:, k] abgerufen werden.)

Das Iterieren über die Zerlegung produziert die Komponenten F.values und F.vectors.

Die folgenden Funktionen sind für Eigen-Objekte verfügbar: inv, det und isposdef.

vl ist die untere Grenze des Fensters von Eigenwerten, nach denen gesucht werden soll, und vu ist die obere Grenze.

Note

Wenn [vl, vu] nicht alle Eigenwerte von A enthält, wird die zurückgegebene Faktorisierung eine trunkierte Faktorisierung sein.

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

Dasselbe wie eigen, aber spart Speicherplatz, indem es die Eingabe A (und B) überschreibt, anstatt eine Kopie zu erstellen.

source
LinearAlgebra.HessenbergType
Hessenberg <: Faktorisierung

Ein Hessenberg-Objekt repräsentiert die Hessenberg-Faktorisierung QHQ' einer quadratischen Matrix oder eine Verschiebung Q(H+μI)Q' davon, die durch die hessenberg Funktion erzeugt wird.

source
LinearAlgebra.hessenbergFunction
hessenberg(A) -> Hessenberg

Berechnen Sie die Hessenberg-Zerlegung von A und geben Sie ein Hessenberg-Objekt zurück. Wenn F das Faktorisierungsobjekt ist, kann die unitäre Matrix mit F.Q (vom Typ LinearAlgebra.HessenbergQ) und die Hessenberg-Matrix mit F.H (vom Typ UpperHessenberg) zugegriffen werden, von denen jede in eine reguläre Matrix mit Matrix(F.H) oder Matrix(F.Q) umgewandelt werden kann.

Wenn A Hermitian oder reell-Symmetric ist, produziert die Hessenberg-Zerlegung eine reell-symmetrische tridiagonale Matrix und F.H ist vom Typ SymTridiagonal.

Beachten Sie, dass die verschobene Faktorisierung A+μI = Q (H+μI) Q' effizient durch F + μ*I unter Verwendung des UniformScaling Objekts I konstruiert werden kann, das ein neues Hessenberg-Objekt mit gemeinsamem Speicher und einer modifizierten Verschiebung erstellt. Die Verschiebung eines gegebenen F wird durch F.μ erhalten. Dies ist nützlich, da mehrere verschobene Lösungen (F + μ*I) \ b (für unterschiedliche μ und/oder b) effizient durchgeführt werden können, sobald F erstellt ist.

Die Iteration der Zerlegung produziert die Faktoren F.Q, F.H, F.μ.

Beispiele

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-Faktor: 3×3 LinearAlgebra.HessenbergQ{Float64, Matrix{Float64}, Vector{Float64}, false}
H-Faktor:
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; # Destrukturierung durch Iteration

julia> q == F.Q && h == F.H
true
source
LinearAlgebra.hessenberg!Function
hessenberg!(A) -> Hessenberg

hessenberg! ist dasselbe wie hessenberg, speichert jedoch Platz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen.

source
LinearAlgebra.SchurType
Schur <: Faktorisierung

Matrixfaktorisierungstyp der Schur-Faktorisierung einer Matrix A. Dies ist der Rückgabetyp von schur(_), der entsprechenden Matrixfaktorisierungsfunktion.

Wenn F::Schur das Faktorisierungsobjekt ist, kann der (quasi) dreieckige Schur-Faktor entweder über F.Schur oder F.T und die orthogonalen/einheitlichen Schur-Vektoren über F.vectors oder F.Z erhalten werden, sodass A = F.vectors * F.Schur * F.vectors'. Die Eigenwerte von A können mit F.values erhalten werden.

Das Iterieren über die Zerlegung produziert die Komponenten F.T, F.Z und F.values.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z-Faktor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
Eigenwerte:
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; # Destrukturierung über Iteration

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

Matrixfaktorisierungstyp der verallgemeinerten Schur-Faktorisierung von zwei Matrizen A und B. Dies ist der Rückgabetyp von schur(_, _), der entsprechenden Matrixfaktorisierungsfunktion.

Wenn F::GeneralizedSchur das Faktorisierungsobjekt ist, können die (quasi) dreieckigen Schur-Faktoren über F.S und F.T erhalten werden, die linken unitären/orthogonalen Schur-Vektoren über F.left oder F.Q, und die rechten unitären/orthogonalen Schur-Vektoren können mit F.right oder F.Z erhalten werden, sodass A=F.left*F.S*F.right' und B=F.left*F.T*F.right'. Die verallgemeinerten Eigenwerte von A und B können mit F.α./F.β erhalten werden.

Das Iterieren der Zerlegung produziert die Komponenten F.S, F.T, F.Q, F.Z, F.α und F.β.

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

Berechnet die Schur-Faktorisierung der Matrix A. Der (quasi) dreieckige Schur-Faktor kann aus dem Schur-Objekt F entweder mit F.Schur oder F.T abgerufen werden, und die orthogonalen/einheitlichen Schur-Vektoren können mit F.vectors oder F.Z abgerufen werden, sodass A = F.vectors * F.Schur * F.vectors'. Die Eigenwerte von A können mit F.values abgerufen werden.

Für reelles A ist die Schur-Faktorisierung "quasitriangular", was bedeutet, dass sie oberdreieckig ist, außer mit 2×2-Diagonalblöcken für jedes konjugierte Paar komplexer Eigenwerte; dies ermöglicht es, die Faktorisierung rein reell zu halten, selbst wenn komplexe Eigenwerte vorhanden sind. Um die (komplexe) rein oberdreieckige Schur-Faktorisierung aus einer reellen quasitriangularen Faktorisierung zu erhalten, können Sie Schur{Complex}(schur(A)) verwenden.

Die Iteration der Zerlegung produziert die Komponenten F.T, F.Z und F.values.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z-Faktor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
Eigenwerte:
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; # Destrukturierung durch Iteration

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

Berechnet die verallgemeinerte Schur- (oder QZ-) Faktorisierung der Matrizen A und B. Die (quasi) dreieckigen Schur-Faktoren können aus dem Schur-Objekt F mit F.S und F.T erhalten werden, die linken unitären/orthogonalen Schur-Vektoren können mit F.left oder F.Q und die rechten unitären/orthogonalen Schur-Vektoren können mit F.right oder F.Z erhalten werden, sodass A=F.left*F.S*F.right' und B=F.left*F.T*F.right'. Die verallgemeinerten Eigenwerte von A und B können mit F.α./F.β erhalten werden.

Das Iterieren der Zerlegung produziert die Komponenten F.S, F.T, F.Q, F.Z, F.α und F.β.

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

Dasselbe wie schur, verwendet jedoch das Eingabeargument A als Arbeitsbereich.

Beispiele

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-Faktor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z-Faktor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
Eigenwerte:
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

Dasselbe wie schur, verwendet jedoch die Eingabematrizen A und B als Arbeitsbereich.

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

Ordnet die Schur-Zerlegung F einer Matrix A = Z*T*Z' gemäß dem logischen Array select neu und gibt das neu angeordnete Zerlegungsobjekt F zurück. Die ausgewählten Eigenwerte erscheinen in der Hauptdiagonalen von F.Schur und die entsprechenden führenden Spalten von F.vectors bilden eine orthogonale/einheitliche Basis des entsprechenden rechtsinvarianten Unterraums. Im reellen Fall muss ein komplex konjugiertes Eigenwertpaar entweder vollständig einbezogen oder vollständig ausgeschlossen werden über select.

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

Ordnet die verallgemeinerte Schur-Faktorisierung F eines Matrixpaars (A, B) = (Q*S*Z', Q*T*Z') gemäß dem logischen Array select neu und gibt ein GeneralizedSchur-Objekt F zurück. Die ausgewählten Eigenwerte erscheinen in der Hauptdiagonalen von sowohl F.S als auch F.T, und die linken und rechten orthogonalen/einheitlichen Schur-Vektoren werden ebenfalls so umgeordnet, dass (A, B) = F.Q*(F.S, F.T)*F.Z' weiterhin gilt und die verallgemeinerten Eigenwerte von A und B weiterhin mit F.α./F.β erhalten werden können.

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

Dasselbe wie ordschur, aber überschreibt die Faktorisierung F.

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

Gleich wie ordschur, aber überschreibt die Faktorisierung F.

source
LinearAlgebra.SVDType
SVD <: Faktorisierung

Matrixfaktorisierungstyp der singulären Wertzerlegung (SVD) einer Matrix A. Dies ist der Rückgabetyp von svd(_), der entsprechenden Matrixfaktorisierungsfunktion.

Wenn F::SVD das Faktorisierungsobjekt ist, können U, S, V und Vt über F.U, F.S, F.V und F.Vt abgerufen werden, sodass A = U * Diagonal(S) * Vt. Die singulären Werte in S sind in absteigender Reihenfolge sortiert.

Das Iterieren über die Zerlegung erzeugt die Komponenten U, S und V.

Beispiele

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-Faktor:
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
singuläre Werte:
4-element Vector{Float64}:
 3.0
 2.23606797749979
 2.0
 0.0
Vt-Faktor:
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; # Destrukturierung über Iteration

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

Matrixfaktorisierungstyp der verallgemeinerten singulären Wertzerlegung (SVD) von zwei Matrizen A und B, sodass A = F.U*F.D1*F.R0*F.Q' und B = F.V*F.D2*F.R0*F.Q'. Dies ist der Rückgabetyp von svd(_, _), der entsprechenden Matrixfaktorierungsfunktion.

Für eine M-by-N-Matrix A und eine P-by-N-Matrix B gilt:

  • U ist eine M-by-M orthogonale Matrix,
  • V ist eine P-by-P orthogonale Matrix,
  • Q ist eine N-by-N orthogonale Matrix,
  • D1 ist eine M-by-(K+L) diagonale Matrix mit 1en in den ersten K Einträgen,
  • D2 ist eine P-by-(K+L) Matrix, deren oberes rechtes L-by-L Block diagonal ist,
  • R0 ist eine (K+L)-by-N Matrix, deren rechtester (K+L)-by-(K+L) Block nicht singulär oberblocktriangular ist,

K+L ist der effektive numerische Rang der Matrix [A; B].

Die Iteration der Zerlegung erzeugt die Komponenten U, V, Q, D1, D2 und R0.

Die Einträge von F.D1 und F.D2 sind miteinander verbunden, wie in der LAPACK-Dokumentation für die verallgemeinerte SVD und die xGGSVD3 Routine, die darunter aufgerufen wird (in LAPACK 3.6.0 und neuer).

Beispiele

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

Berechnet die singuläre Wertzerlegung (SVD) von A und gibt ein SVD-Objekt zurück.

U, S, V und Vt können aus der Faktorisierung F mit F.U, F.S, F.V und F.Vt abgerufen werden, sodass A = U * Diagonal(S) * Vt. Der Algorithmus erzeugt Vt, und daher ist es effizienter, Vt zu extrahieren als V. Die singulären Werte in S sind in absteigender Reihenfolge sortiert.

Das Iterieren über die Zerlegung erzeugt die Komponenten U, S und V.

Wenn full = false (Standard), wird eine "dünne" SVD zurückgegeben. Für eine $M \times N$-Matrix A ist in der vollen Faktorisierung U $M \times M$ und V $N \times N$, während in der dünnen Faktorisierung U $M \times K$ und V $N \times K$ ist, wobei $K = \min(M,N)$ die Anzahl der singulären Werte ist.

Wenn alg = DivideAndConquer() ein Divide-and-Conquer-Algorithmus verwendet wird, um die SVD zu berechnen. Eine andere (typischerweise langsamere, aber genauere) Option ist alg = QRIteration().

Julia 1.3

Das Schlüsselwortargument alg erfordert Julia 1.3 oder später.

Beispiele

julia> A = rand(4,3);

julia> F = svd(A); # Speichern Sie das Faktorisierungsobjekt

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

julia> U, S, V = F; # Destrukturierung über Iteration

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

julia> Uonly, = svd(A); # Speichern Sie nur U

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

Berechnen Sie die verallgemeinerte SVD von A und B, die ein GeneralizedSVD-Faktorisierungsobjekt F zurückgibt, sodass [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q'

  • U ist eine M-by-M orthogonale Matrix,
  • V ist eine P-by-P orthogonale Matrix,
  • Q ist eine N-by-N orthogonale Matrix,
  • D1 ist eine M-by-(K+L) diagonale Matrix mit 1en in den ersten K Einträgen,
  • D2 ist eine P-by-(K+L) Matrix, deren oberer rechter L-by-L Block diagonal ist,
  • R0 ist eine (K+L)-by-N Matrix, deren rechtester (K+L)-by-(K+L) Block nicht-singulär oberblocktriangular ist,

K+L ist der effektive numerische Rang der Matrix [A; B].

Das Iterieren der Zerlegung produziert die Komponenten U, V, Q, D1, D2 und R0.

Die verallgemeinerte SVD wird in Anwendungen verwendet, wie z.B. wenn man vergleichen möchte, wie viel zu A vs. wie viel zu B gehört, wie im menschlichen vs. Hefegenom, oder Signal vs. Rauschen, oder zwischen Clustern vs. innerhalb von Clustern. (Siehe Edelman und Wang für eine Diskussion: https://arxiv.org/abs/1901.00485)

Sie zerlegt [A; B] in [UC; VS]H, wobei [UC; VS] eine natürliche orthogonale Basis für den Spaltenraum von [A; B] ist, und H = RQ' eine natürliche nicht-orthogonale Basis für den Zeilenraum von [A;B], wobei die obersten Zeilen am engsten dem A-Matrix zugeordnet sind und die unteren der B-Matrix. Die Multi-Cosinus/Sinus-Matrizen C und S bieten eine Multi-Messung dafür, wie viel A vs wie viel B, und U und V bieten Richtungen, in denen diese gemessen werden.

Beispiele

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! ist dasselbe wie svd, speichert jedoch Platz, indem es die Eingabe A überschreibt, anstatt eine Kopie zu erstellen. Siehe Dokumentation von svd für Details.

source
svd!(A, B) -> GeneralizedSVD

svd! ist dasselbe wie svd, ändert jedoch die Argumente A und B in-place, anstatt Kopien zu erstellen. Siehe Dokumentation von svd für Details.

source
LinearAlgebra.svdvalsFunction
svdvals(A)

Gibt die singulären Werte von A in absteigender Reihenfolge zurück.

Beispiele

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)

Gibt die verallgemeinerten singulären Werte aus der verallgemeinerten singulären Wertzerlegung von A und B zurück. Siehe auch svd.

Beispiele

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)

Gibt die singulären Werte von A zurück und spart Speicherplatz, indem die Eingabe überschrieben wird. Siehe auch svdvals und svd.

source
svdvals!(A, B)

Gibt die verallgemeinerten singulären Werte aus der verallgemeinerten singulären Wertzerlegung von A und B zurück und spart Speicherplatz, indem A und B überschrieben werden. Siehe auch svd und svdvals.

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

Ein Givens-Rotationslinearoperator. Die Felder c und s repräsentieren den Kosinus und den Sinus des Rotationswinkels. Der Givens-Typ unterstützt die linke Multiplikation G*A und die konjugiert-transponierte rechte Multiplikation A*G'. Der Typ hat keine size und kann daher mit Matrizen beliebiger Größe multipliziert werden, solange i2<=size(A,2) für G*A oder i2<=size(A,1) für A*G'.

Siehe auch givens.

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

Berechnet die Givens-Rotation G und den Skalar r, so dass für jeden Vektor x, bei dem

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

das Ergebnis der Multiplikation

y = G*x

die Eigenschaft hat, dass

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

Siehe auch LinearAlgebra.Givens.

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

Berechnet die Givens-Rotation G und den Skalar r, so dass das Ergebnis der Multiplikation

B = G*A

die Eigenschaft hat, dass

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

Siehe auch LinearAlgebra.Givens. ```

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

Berechnet die Givens-Rotation G und den Skalar r, so dass das Ergebnis der Multiplikation

B = G*x

die Eigenschaft hat, dass

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

Siehe auch LinearAlgebra.Givens. ```

source
LinearAlgebra.triuFunction
triu(M)

Obere Dreiecksmatrix einer Matrix.

Beispiele

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)

Gibt das obere Dreieck von M zurück, beginnend von der k-ten Superdiagonale.

Beispiele

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)

Obere Dreiecksmatrix einer Matrix, wobei M dabei überschrieben wird. Siehe auch triu.

source
triu!(M, k::Integer)

Gibt das obere Dreieck von M zurück, beginnend von der k-ten Superdiagonale, und überschreibt dabei M.

Beispiele

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)

Untere Dreiecksmatrix einer Matrix.

Beispiele

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)

Gibt das untere Dreieck von M zurück, beginnend von der k-ten Superdiagonale.

Beispiele

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)

Untere Dreiecksmatrix einer Matrix, wobei M dabei überschrieben wird. Siehe auch tril.

source
tril!(M, k::Integer)

Gibt das untere Dreieck von M zurück, beginnend von der k-ten Superdiagonale, und überschreibt dabei M.

Beispiele

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())

Ein AbstractRange, der die Indizes der k-ten Diagonale der Matrix M angibt. Optional kann ein Indexstil angegeben werden, der den Typ des zurückgegebenen Bereichs bestimmt. Wenn indstyle isa IndexLinear (Standard), gibt dies einen AbstractRange{Integer} zurück. Andererseits, wenn indstyle isa IndexCartesian, gibt dies einen AbstractRange{CartesianIndex{2}} zurück.

Wenn k nicht angegeben ist, wird angenommen, dass es 0 ist (entsprechend der Hauptdiagonale).

Siehe auch: diag, diagm, Diagonal.

Beispiele

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

Die Angabe eines IndexStyle erfordert mindestens Julia 1.11.

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

Die k-te Diagonale einer Matrix, als Vektor.

Siehe auch diagm, diagind, Diagonal, isdiag.

Beispiele

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}...)

Konstruiere eine Matrix aus `Pair`s von Diagonalen und Vektoren. Der Vektor `kv.second` wird auf der `kv.first` Diagonale platziert. Standardmäßig ist die Matrix quadratisch und ihre Größe wird aus `kv` abgeleitet, aber eine nicht-quadratische Größe `m`×`n` (mit Nullen aufgefüllt, falls nötig) kann angegeben werden, indem `m,n` als erste Argumente übergeben werden. Bei wiederholten diagonalen Indizes `kv.first` werden die Werte in den entsprechenden Vektoren `kv.second` addiert.

`diagm` konstruiert eine vollständige Matrix; wenn Sie speichereffiziente Versionen mit schneller Arithmetik wünschen, sehen Sie sich [`Diagonal`](@ref), [`Bidiagonal`](@ref), [`Tridiagonal`](@ref) und [`SymTridiagonal`](@ref) an.

# Beispiele

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)

Konstruiere eine Matrix mit den Elementen des Vektors als Diagonalelemente. Standardmäßig ist die Matrix quadratisch und ihre Größe wird durch length(v) angegeben, aber eine nicht-quadratische Größe m×n kann angegeben werden, indem m,n als die ersten Argumente übergeben werden.

Beispiele

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

Gibt den Rang der QR-Zerlegung zurück

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

Berechne den Rang von S, indem du seine QR-Zerlegung berechnest. Werte kleiner als tol werden als null betrachtet. Siehe das Handbuch von SPQR.

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

Berechnen Sie den numerischen Rang einer Matrix, indem Sie zählen, wie viele Ausgaben von svdvals(A) größer sind als max(atol, rtol*σ₁), wobei σ₁ der größte berechnete Singularwert von A ist. atol und rtol sind die absoluten und relativen Toleranzen, respectively. Die standardmäßige relative Toleranz ist n*ϵ, wobei n die Größe der kleinsten Dimension von A ist und ϵ die eps des Elementtyps von A.

Note

Der numerische Rang kann eine empfindliche und ungenaue Charakterisierung von schlecht konditionierten Matrizen mit Singularwerten sein, die nahe an der Schwellenwerttoleranz max(atol, rtol*σ₁) liegen. In solchen Fällen können geringfügige Störungen bei der Berechnung des Singularwerts oder an der Matrix das Ergebnis von rank ändern, indem ein oder mehrere Singularwerte über die Schwelle gedrückt werden. Diese Variationen können sogar aufgrund von Änderungen in den Gleitkommafehlern zwischen verschiedenen Julia-Versionen, Architekturen, Compilern oder Betriebssystemen auftreten.

Julia 1.1

Die Schlüsselwortargumente atol und rtol erfordern mindestens Julia 1.1. In Julia 1.0 ist rtol als positionsbasiertes Argument verfügbar, aber dies wird in Julia 2.0 veraltet sein.

Beispiele

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)

Für jeden iterierbaren Container A (einschließlich Arrays beliebiger Dimension) von Zahlen (oder jedem Elementtyp, für den norm definiert ist), berechne die p-Norm (standardmäßig p=2), als ob A ein Vektor der entsprechenden Länge wäre.

Die p-Norm ist definiert als

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

wobei $a_i$ die Einträge von A sind, $| a_i |$ die norm von $a_i$ ist und $n$ die Länge von A ist. Da die p-Norm unter Verwendung der norms der Einträge von A berechnet wird, ist die p-Norm eines Vektors von Vektoren im Allgemeinen nicht mit der Interpretation als Blockvektor kompatibel, wenn p != 2.

p kann jeden numerischen Wert annehmen (auch wenn nicht alle Werte eine mathematisch gültige Vektornorm erzeugen). Insbesondere gibt norm(A, Inf) den größten Wert in abs.(A) zurück, während norm(A, -Inf) den kleinsten zurückgibt. Wenn A eine Matrix ist und p=2, dann entspricht dies der Frobenius-Norm.

Das zweite Argument p ist nicht unbedingt Teil der Schnittstelle für norm, d.h. ein benutzerdefinierter Typ kann nur norm(A) ohne zweites Argument implementieren.

Verwende opnorm, um die Operatornorm einer Matrix zu berechnen.

Beispiele

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)

Für Zahlen, geben Sie $\left( |x|^p \right)^{1/p}$ zurück.

Beispiele

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)

Berechne die Operatornorm (oder Matrizenorm), die durch die Vektor p-Norm induziert wird, wobei gültige Werte für p 1, 2 oder Inf sind. (Beachte, dass für spärliche Matrizen p=2 derzeit nicht implementiert ist.) Verwende norm, um die Frobeniusnorm zu berechnen.

Wenn p=1, ist die Operatornorm die maximale absolute Spaltensumme von A:

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

mit $a_{ij}$ den Einträgen von A, und $m$ und $n$ seinen Dimensionen.

Wenn p=2, ist die Operatornorm die spektrale Norm, die dem größten singulären Wert von A entspricht.

Wenn p=Inf, ist die Operatornorm die maximale absolute Zeilensumme von A:

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

Beispiele

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)

Für Zahlen, geben Sie $\left( |x|^p \right)^{1/p}$ zurück. Dies ist äquivalent zu norm.

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

Für Adjoint/Transpose-umwickelte Vektoren gibt die Funktion die Operator-$q$-Norm von A zurück, die äquivalent zur p-Norm mit dem Wert p = q/(q-1) ist. Sie stimmen bei p = q = 2 überein. Verwenden Sie norm, um die p-Norm von A als Vektor zu berechnen.

Der Unterschied in der Norm zwischen einem Vektorraum und seinem Dualraum entsteht, um die Beziehung zwischen Dualität und dem Skalarprodukt zu bewahren, und das Ergebnis ist konsistent mit der Operator p-Norm einer 1 × n-Matrix.

Beispiele

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.normalizeFunction
normalize(a, p::Real=2)

Normalisiere a, sodass seine p-Norm gleich Eins ist, d.h. norm(a, p) == 1. Für Skalare ist dies ähnlich wie sign(a), außer dass normalize(0) = NaN ist. Siehe auch normalize!, norm und sign.

Beispiele

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::Real=2)

Bedingungszahl der Matrix M, berechnet mit der Operator p-Norm. Gültige Werte für p sind 1, 2 (Standard) oder 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}\]

Skeel-Bedingungszahl $\kappa_S$ der Matrix M, optional in Bezug auf den Vektor x, wie mit der Operator p-Norm berechnet. $\left\vert M \right\vert$ bezeichnet die Matrix der (einträgeweise) absoluten Werte von $M$; $\left\vert M \right\vert_{ij} = \left\vert M_{ij} \right\vert$. Gültige Werte für p sind 1, 2 und Inf (Standard).

Diese Größe ist auch in der Literatur als Bauer-Bedingungszahl, relative Bedingungszahl oder komponentenweise relative Bedingungszahl bekannt.

source
LinearAlgebra.trFunction
tr(M)

Matrix-Spur. Summiert die Diagonalelemente von M.

Beispiele

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

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

Logarithmus der Determinante einer Matrix. Entspricht log(det(M)), kann jedoch eine höhere Genauigkeit bieten und Überlauf/Unterlauf vermeiden.

Beispiele

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)

Logarithmus des Absolutwerts der Determinante einer Matrix. Entspricht (log(abs(det(M))), sign(det(M))), kann jedoch erhöhte Genauigkeit und/oder Geschwindigkeit bieten.

Beispiele

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)

Matrixinversion. Berechnet die Matrix N, sodass M * N = I, wobei I die Einheitsmatrix ist. Berechnet durch Lösen der Linksdivision N = M \ I.

Beispiele

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) # wird in Julia 2.0 veraltet sein

Berechnet die Moore-Penrose-Pseudoinverse.

Für Matrizen M mit Gleitkommaelementen ist es praktisch, die Pseudoinverse zu berechnen, indem nur singuläre Werte größer als max(atol, rtol*σ₁) invertiert werden, wobei σ₁ der größte singuläre Wert von M ist.

Die optimale Wahl der absoluten (atol) und relativen Toleranz (rtol) variiert sowohl mit dem Wert von M als auch mit der beabsichtigten Anwendung der Pseudoinverse. Die standardmäßige relative Toleranz ist n*ϵ, wobei n die Größe der kleinsten Dimension von M ist und ϵ die eps des Elementtyps von M ist.

Für die Inversion dichter, schlecht konditionierter Matrizen im Sinne der kleinsten Quadrate wird rtol = sqrt(eps(real(float(oneunit(eltype(M)))))) empfohlen.

Für weitere Informationen siehe [issue8859], [B96], [S84], [KY88].

Beispiele

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) # wird in Julia 2.0 veraltet sein

Berechnet eine Basis für den Nullraum von `M`, indem die singulären Vektoren von `M` einbezogen werden, deren singulären Werte Beträge kleiner als `max(atol, rtol*σ₁)` haben, wobei `σ₁` der größte singuläre Wert von `M` ist.

Standardmäßig ist die relative Toleranz `rtol` `n*ϵ`, wobei `n` die Größe der kleinsten Dimension von `M` ist und `ϵ` die [`eps`](@ref) des Elementtyps von `M`.

# Beispiele

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)

Berechnet das Kronecker-Produkt von zwei Vektoren, Matrizen oder Zahlen.

Für reelle Vektoren v und w steht das Kronecker-Produkt in Beziehung zum äußeren Produkt durch kron(v,w) == vec(w * transpose(v)) oder w * transpose(v) == reshape(kron(v,w), (length(w), length(v))). Beachten Sie, wie die Anordnung von v und w links und rechts dieser Ausdrücke unterschiedlich ist (aufgrund der spaltenweisen Speicherung). Bei komplexen Vektoren unterscheidet sich das äußere Produkt w * v' ebenfalls durch die Konjugation von v.

Beispiele

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)

Berechnet das Kronecker-Produkt von A und B und speichert das Ergebnis in C, wobei der vorhandene Inhalt von C überschrieben wird. Dies ist die In-Place-Version von kron.

Julia 1.6

Diese Funktion erfordert Julia 1.6 oder höher.

source
Base.expMethod
exp(A::AbstractMatrix)

Berechne die Matrixexponentialfunktion von A, definiert durch

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

Für symmetrisches oder hermitesches A wird eine Eigenzerlegung (eigen) verwendet, andernfalls wird der Skalierungs- und Quadraturalgorithmus gewählt (siehe [H05]).

Beispiele

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)

Effizientere Methode für exp(im*A) einer quadratischen Matrix A (insbesondere wenn A Hermitesch oder reell-symmetrisch ist).

Siehe auch cispi, sincos, exp.

Julia 1.7

Unterstützung für die Verwendung von cis mit Matrizen wurde in Julia 1.7 hinzugefügt.

Beispiele

julia> cis([π 0; 0 π]) ≈ -I
true
source
Base.:^Method
^(A::AbstractMatrix, p::Number)

Matrix-Potenz, äquivalent zu $\exp(p\log(A))$

Beispiele

julia> [1 2; 0 3]^3
2×2 Matrix{Int64}:
 1  26
 0  27
source
Base.:^Method
^(b::Number, A::AbstractMatrix)

Matrix-Exponential, äquivalent zu $\exp(\log(b)A)$.

Julia 1.1

Unterstützung für das Erhöhen von Irrational Zahlen (wie ) auf eine Matrix wurde in Julia 1.1 hinzugefügt.

Beispiele

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)

Wenn A keinen negativen reellen Eigenwert hat, berechne den Hauptmatrixlogarithmus von A, d.h. die eindeutige Matrix $X$, so dass $e^X = A$ und $-\pi < Im(\lambda) < \pi$ für alle Eigenwerte $\lambda$ von $X$. Wenn A nichtpositive Eigenwerte hat, wird wann immer möglich eine nicht-hauptsächliche Matrixfunktion zurückgegeben.

Wenn A symmetrisch oder hermitesch ist, wird die Eigenzerlegung (eigen) verwendet, wenn A dreieckig ist, wird eine verbesserte Version der inversen Skalierungs- und Quadraturmethode angewendet (siehe [AH12] und [AHR13]). Wenn A reell ist und keine negativen Eigenwerte hat, wird die reelle Schur-Form berechnet. Andernfalls wird die komplexe Schur-Form berechnet. Dann wird der obere (quasi-)dreieckige Algorithmus in [AHR13] auf den oberen (quasi-)dreieckigen Faktor angewendet.

Beispiele

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)

Gibt $\sqrt{x}$ zurück.

Wirft DomainError für negative Real Argumente. Verwenden Sie stattdessen komplexe negative Argumente. Beachten Sie, dass sqrt einen Zweigschnitt entlang der negativen reellen Achse hat.

Der Präfixoperator ist äquivalent zu sqrt.

Siehe auch: hypot.

Beispiele

julia> sqrt(big(81))
9.0

julia> sqrt(big(-81))
ERROR: DomainError mit -81.0:
NaN-Ergebnis für nicht-NaN-Eingabe.
Stacktrace:
 [1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]

julia> sqrt(big(complex(-81)))
0.0 + 9.0im

julia> sqrt(-81 - 0.0im)  # -0.0im liegt unter dem Zweigschnitt
0.0 - 9.0im

julia> .√(1:4)
4-element Vector{Float64}:
 1.0
 1.4142135623730951
 1.7320508075688772
 2.0
source
sqrt(A::AbstractMatrix)

Wenn A keine negativen reellen Eigenwerte hat, berechne die Hauptmatrixwurzel von A, das heißt die eindeutige Matrix $X$ mit Eigenwerten, die einen positiven Realteil haben, sodass $X^2 = A$. Andernfalls wird eine nicht-hauptsächliche Wurzel zurückgegeben.

Wenn A reell-symmetrisch oder hermitesch ist, wird die Eigenzerlegung (eigen) verwendet, um die Wurzel zu berechnen. Für solche Matrizen werden Eigenwerte λ, die aufgrund von Rundungsfehlern leicht negativ erscheinen, so behandelt, als wären sie null. Genauer gesagt, werden Matrizen mit allen Eigenwerten ≥ -rtol*(max |λ|) als semidefinit betrachtet (was eine hermitesche Wurzel ergibt), wobei negative Eigenwerte als null betrachtet werden. rtol ist ein Schlüsselwort-Argument für sqrt (nur im hermitesch/reell-symmetrischen Fall), das standardmäßig auf die Maschinenpräzision skaliert mit size(A,1) gesetzt ist.

Andernfalls wird die Wurzel mittels der Björck-Hammarling-Methode [BH83] bestimmt, die die komplexe Schur-Form (schur) berechnet und dann die komplexe Wurzel des dreieckigen Faktors. Wenn eine reelle Wurzel existiert, wird stattdessen eine Erweiterung dieser Methode [H87] verwendet, die die reelle Schur-Form berechnet und dann die reelle Wurzel des quasi-dreieckigen Faktors.

Beispiele

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})

Berechnet die reellwertige Kubikwurzel einer reellwertigen Matrix A. Wenn T = cbrt(A), dann gilt T*T*T ≈ A, siehe das unten gegebene Beispiel.

Wenn A symmetrisch ist, d.h. vom Typ HermOrSym{<:Real}, dann wird (eigen) verwendet, um die Kubikwurzel zu finden. Andernfalls wird eine spezialisierte Version des p-ten Wurzelalgorithmus [S03] verwendet, die die reellwertige Schur-Zerlegung (schur) nutzt, um die Kubikwurzel zu berechnen.

Beispiele

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)

Berechne den Matrix-Cosinus einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den Cosinus zu berechnen. Andernfalls wird der Cosinus durch den Aufruf von exp bestimmt.

Beispiele

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)

Berechne den Matrizensinus einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den Sinus zu berechnen. Andernfalls wird der Sinus durch den Aufruf von exp bestimmt.

Beispiele

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)

Berechne den Matrix-Sinus und -Kosinus einer quadratischen Matrix A.

Beispiele

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)

Berechne den Matrizen-Tangens einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den Tangens zu berechnen. Andernfalls wird der Tangens durch den Aufruf von exp bestimmt.

Beispiele

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)

Berechne die Sekantenmatrix einer quadratischen Matrix A.

source
Base.Math.cscMethod
csc(A::AbstractMatrix)

Berechne die Kosekante einer quadratischen Matrix A.

source
Base.Math.cotMethod
cot(A::AbstractMatrix)

Berechne den Matrix-Cotangens einer quadratischen Matrix A.

source
Base.coshMethod
cosh(A::AbstractMatrix)

Berechne den hyperbolischen Kosinus einer Matrix für eine quadratische Matrix A.

source
Base.sinhMethod
sinh(A::AbstractMatrix)

Berechne den hyperbolischen Sinus einer Matrix für eine quadratische Matrix A.

source
Base.tanhMethod
tanh(A::AbstractMatrix)

Berechne den hyperbolischen Tangens der Matrix einer quadratischen Matrix A.

source
Base.Math.sechMethod
sech(A::AbstractMatrix)

Berechne die hyperbolische Sekante der Matrix der quadratischen Matrix A.

source
Base.Math.cschMethod
csch(A::AbstractMatrix)

Berechne die hyperbolische Kosekans der Matrix des quadratischen Matrix A.

source
Base.Math.cothMethod
coth(A::AbstractMatrix)

Berechne den hyperbolischen Kotangens der Matrix der quadratischen Matrix A.

source
Base.acosMethod
acos(A::AbstractMatrix)

Berechne den inversen Matrix-Cosinus einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den inversen Cosinus zu berechnen. Andernfalls wird der inverse Cosinus unter Verwendung von log und sqrt bestimmt. Für die Theorie und die logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_1].

Beispiele

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)

Berechne den inversen Matrixsinus einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den inversen Sinus zu berechnen. Andernfalls wird der inverse Sinus unter Verwendung von log und sqrt bestimmt. Für die Theorie und die logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_2].

Beispiele

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)

Berechne den inversen Matrixtangens einer quadratischen Matrix A.

Wenn A symmetrisch oder hermitesch ist, wird ihre Eigenzerlegung (eigen) verwendet, um den inversen Tangens zu berechnen. Andernfalls wird der inverse Tangens unter Verwendung von log bestimmt. Für die Theorie und die logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_3].

Beispiele

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.asecMethod
asec(A::AbstractMatrix)

Berechne die inverse Matrix der Sekante von A.

source
Base.acoshMethod
acosh(A::AbstractMatrix)

Berechne den inversen hyperbolischen Matrix-Cosinus einer quadratischen Matrix A. Für die Theorie und logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_4].

source
Base.asinhMethod
asinh(A::AbstractMatrix)

Berechne den inversen hyperbolischen Sinus einer quadratischen Matrix A. Für die Theorie und logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_5].

source
Base.atanhMethod
atanh(A::AbstractMatrix)

Berechne den inversen hyperbolischen Matrixtangens einer quadratischen Matrix A. Für die Theorie und logarithmischen Formeln, die zur Berechnung dieser Funktion verwendet werden, siehe [AH16_6].

source
Base.Math.asechMethod
asech(A::AbstractMatrix)

Berechne die inverse Matrix hyperbolischer Sekante von A.

source
Base.Math.acschMethod
acsch(A::AbstractMatrix)

Berechne die inverse Matrix hyperbolischer Kosekanten von A.

source
Base.Math.acothMethod
acoth(A::AbstractMatrix)

Berechne den inversen Matrix-Hyperbelcotangens von A.

source
LinearAlgebra.lyapFunction
lyap(A, C)

Berechnet die Lösung X der kontinuierlichen Lyapunov-Gleichung AX + XA' + C = 0, wobei kein Eigenwert von A einen reellen Teil von null hat und keine zwei Eigenwerte negative komplexe Konjugierte voneinander sind.

Beispiele

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)

Berechnet die Lösung X der Sylvester-Gleichung AX + XB + C = 0, wobei A, B und C kompatible Dimensionen haben und A und -B keine Eigenwerte mit gleichem Realteil besitzen.

Beispiele

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::Faktorisierung)

Überprüfen, ob eine Faktorisierung einer Matrix erfolgreich war.

Julia 1.6

issuccess(::CholeskyPivoted) erfordert Julia 1.6 oder höher.

Beispiele

julia> F = cholesky([1 0; 0 1]);

julia> issuccess(F)
true
source
issuccess(F::LU; allowsingular = false)

Überprüfen Sie, ob die LU-Zerlegung einer Matrix erfolgreich war. Standardmäßig wird eine Zerlegung, die einen gültigen, aber rangdefizienten U-Faktor produziert, als Fehlschlag betrachtet. Dies kann geändert werden, indem allowsingular = true übergeben wird.

Julia 1.11

Das Schlüsselwortargument allowsingular wurde in Julia 1.11 hinzugefügt.

Beispiele

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

Überprüfen, ob eine Matrix symmetrisch ist.

Beispiele

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

Überprüfen, ob eine Matrix positiv definit (und hermitesch) ist, indem versucht wird, eine Cholesky-Zerlegung von A durchzuführen.

Siehe auch isposdef!, cholesky.

Beispiele

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

Testen Sie, ob eine Matrix positiv definit (und hermitesch) ist, indem Sie versuchen, eine Cholesky-Zerlegung von A durchzuführen, wobei A im Prozess überschrieben wird. Siehe auch isposdef.

Beispiele

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

Überprüfen, ob A untere Dreiecksmatrix ist, beginnend von der k-ten Superdiagonale.

Beispiele

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

Überprüfen, ob A oberhalb der Diagonale ist, beginnend von der k-ten Überdiagonale.

Beispiele

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

Überprüfen, ob eine Matrix diagonal ist, im Sinne von iszero(A[i,j]), was wahr ist, es sei denn, i == j. Beachten Sie, dass es nicht notwendig ist, dass A quadratisch ist; wenn Sie das auch überprüfen möchten, müssen Sie sicherstellen, dass size(A, 1) == size(A, 2).

Beispiele

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

Überprüfen, ob eine Matrix hermitesch ist.

Beispiele

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)

Fauler Transponieren. Das Mutieren des zurückgegebenen Objekts sollte A entsprechend mutieren. Oft, aber nicht immer, ergibt sich Transpose(A), wobei Transpose ein Wrapper für das faule Transponieren ist. Beachten Sie, dass diese Operation rekursiv ist.

Diese Operation ist für die Verwendung in der linearen Algebra gedacht - für allgemeine Datenmanipulation siehe permutedims, die nicht rekursiv ist.

Beispiele

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 # das Transponieren eines Transponierten entpackt den Elternteil
true

julia> Transpose(B) # jedoch umschließt der Konstruktor immer sein Argument
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # das Modifizieren von B wird A automatisch ändern

julia> A
2×2 Matrix{Int64}:
 3  2
 4  0

Für komplexe Matrizen ist die adjoint-Operation äquivalent zu einer konjugierten Transponierung.

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

Das transpose eines AbstractVector ist ein Zeilenvektor:

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

julia> transpose(v) # gibt einen Zeilenvektor zurück
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia> transpose(v) * v # berechnet das Skalarprodukt
14

Für eine Matrix von Matrizen werden die einzelnen Blöcke rekursiv bearbeitet:

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

julia> D = reshape([C, 2C, 3C, 4C], 2, 2) # konstruiert eine Blockmatrix
2×2 Matrix{Matrix{Int64}}:
 [1 3; 2 4]  [3 9; 6 12]
 [2 6; 4 8]  [4 12; 8 16]

julia> transpose(D) # Blöcke werden rekursiv transponiert
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::Faktorisierung)

Faulheitstransposition der Faktorisierung F. Gibt standardmäßig eine TransposeFactorization zurück, es sei denn, es handelt sich um Faktorisierungen mit reellem eltype, in diesem Fall wird eine AdjointFactorization zurückgegeben.

source
LinearAlgebra.transpose!Function
transpose!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

Transponiere die Matrix A und speichere sie in der Matrix X. size(X) muss gleich size(transpose(A)) sein. Es wird kein zusätzlicher Speicher zugewiesen, außer wenn die rowval und nzval von X bei Bedarf angepasst werden.

Siehe halfperm!

source
transpose!(dest,src)

Transponiere das Array src und speichere das Ergebnis im vorab allokierten Array dest, das eine Größe entsprechend (size(src,2),size(src,1)) haben sollte. Es wird keine In-Place-Transposition unterstützt, und unerwartete Ergebnisse treten auf, wenn src und dest überlappende Speicherbereiche haben.

Beispiele

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
Transponieren

Fauler Wrapper-Typ für eine Transponierungsansicht des zugrunde liegenden linearen Algebraobjekts, normalerweise ein AbstractVector/AbstractMatrix. Normalerweise sollte der Transpose-Konstruktor nicht direkt aufgerufen werden, verwenden Sie stattdessen transpose. Um die Ansicht zu materialisieren, verwenden Sie copy.

Dieser Typ ist für die Verwendung in der linearen Algebra gedacht - für allgemeine Datenmanipulation siehe permutedims.

Beispiele

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)

Fauler Adjungierte (konjugierte Transposition). Beachten Sie, dass adjoint rekursiv auf Elemente angewendet wird.

Für Zahlentypen gibt adjoint das komplexe Konjugat zurück und ist daher für reelle Zahlen äquivalent zur Identitätsfunktion.

Dieser Vorgang ist für die Verwendung in der linearen Algebra gedacht - für allgemeine Datenmanipulation siehe permutedims.

Beispiele

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 zu adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) mit eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im

julia> B isa Adjoint
true

julia> adjoint(B) === A # die Adjungierte einer Adjungierten entfaltet den Elternteil
true

julia> Adjoint(B) # jedoch umschließt der Konstruktor immer sein Argument
2×2 adjoint(adjoint(::Matrix{Complex{Int64}})) mit eltype Complex{Int64}:
 3+2im  9+2im
 0+0im  0+0im

julia> B[1,2] = 4 + 5im; # das Ändern von B ändert automatisch A

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 4-5im  0+0im

Für reelle Matrizen ist die adjoint-Operation äquivalent zu einer 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}) mit eltype Int64:
 1  2
 3  4

julia> adjoint(A) == transpose(A)
true

Die Adjungierte eines AbstractVector ist ein Zeilenvektor:

julia> x = [3, 4im]
2-element Vector{Complex{Int64}}:
 3 + 0im
 0 + 4im

julia> x'
1×2 adjoint(::Vector{Complex{Int64}}) mit eltype Complex{Int64}:
 3+0im  0-4im

julia> x'x # berechne das Skalarprodukt, äquivalent zu x' * x
25 + 0im

Für eine Matrix von Matrizen werden die einzelnen Blöcke rekursiv bearbeitet:

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}}}) mit 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::Faktorisierung)

Fauler adjoint der Faktorisierung F. Gibt standardmäßig einen AdjointFactorization Wrapper zurück.

source
LinearAlgebra.adjoint!Function
adjoint!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

Transponiere die Matrix A und speichere den Adjungierten der Elemente in der Matrix X. size(X) muss gleich size(transpose(A)) sein. Es wird kein zusätzlicher Speicher zugewiesen, außer wenn die Zeilenwerte und nzval von X bei Bedarf angepasst werden.

Siehe halfperm!

source
adjoint!(dest,src)

Konjugiert die Transponierte des Arrays src und speichert das Ergebnis im vorab allokierten Array dest, das eine Größe entsprechend (size(src,2),size(src,1)) haben sollte. Es wird keine In-Place-Transposition unterstützt, und unerwartete Ergebnisse können auftreten, wenn src und dest überlappende Speicherbereiche haben.

Beispiele

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

Fauler Wrapper-Typ für eine adjungierte Ansicht des zugrunde liegenden linearen Algebraobjekts, normalerweise ein AbstractVector/AbstractMatrix. Normalerweise sollte der Adjoint-Konstruktor nicht direkt aufgerufen werden, verwenden Sie stattdessen adjoint. Um die Ansicht zu materialisieren, verwenden Sie copy.

Dieser Typ ist für die Verwendung in der linearen Algebra gedacht - für allgemeine Datenmanipulation siehe permutedims.

Beispiele

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}}) mit eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im
source
Base.copyMethod
copy(A::Transpose)
copy(A::Adjoint)

Bewerten Sie die faule Matrixtransposition/-adjungierung eifrig. Beachten Sie, dass die Transposition rekursiv auf die Elemente angewendet wird.

Dieser Vorgang ist für die Verwendung in der linearen Algebra gedacht - für allgemeine Datenmanipulation siehe permutedims, das nicht rekursiv ist.

Beispiele

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

Gibt die Entfernung zwischen aufeinanderfolgenden Array-Elementen in Dimension 1 in Einheiten der Elementgröße zurück.

Beispiele

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)

Überprüfen Sie, ob eine Matrix quadratisch ist, und geben Sie dann ihre gemeinsame Dimension zurück. Bei mehreren Argumenten geben Sie einen Vektor zurück.

Beispiele

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 berechnet die maximale Flop-Rate des Computers, indem es die doppelte Genauigkeit gemm! verwendet. Standardmäßig multipliziert es, wenn keine Argumente angegeben sind, zwei Float64-Matrizen der Größe n x n, wobei n = 4096. Wenn das zugrunde liegende BLAS mehrere Threads verwendet, werden höhere Flop-Raten erreicht. Die Anzahl der BLAS-Threads kann mit BLAS.set_num_threads(n) festgelegt werden.

Wenn das Schlüsselwort-Argument eltype angegeben ist, wird peakflops Matrizen mit Elementen des Typs eltype konstruieren, um die maximale Flop-Rate zu berechnen.

Standardmäßig verwendet peakflops die beste Zeit aus 3 Versuchen. Wenn das Schlüsselwort-Argument ntrials angegeben ist, verwendet peakflops so viele Versuche, um die beste Zeit auszuwählen.

Wenn das Schlüsselwort-Argument parallel auf true gesetzt ist, wird peakflops parallel auf allen Arbeitsprozessoren ausgeführt. Die Flop-Rate des gesamten parallelen Computers wird zurückgegeben. Bei der Ausführung in parallel wird nur 1 BLAS-Thread verwendet. Das Argument n bezieht sich weiterhin auf die Größe des Problems, das auf jedem Prozessor gelöst wird.

Julia 1.1

Diese Funktion erfordert mindestens Julia 1.1. In Julia 1.0 ist sie aus der Standardbibliothek InteractiveUtils verfügbar.

source
LinearAlgebra.hermitianpartFunction
hermitianpart(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

Gibt den hermiteschen Teil der quadratischen Matrix A zurück, definiert als (A + A') / 2, als Hermitian Matrix. Für reelle Matrizen A ist dies auch als der symmetrische Teil von A bekannt; es wird auch manchmal als der "operatorielle reale Teil" bezeichnet. Das optionale Argument uplo steuert das entsprechende Argument der Hermitian Ansicht. Für reelle Matrizen ist letzteres äquivalent zu einer Symmetric Ansicht.

Siehe auch hermitianpart! für die entsprechende In-Place-Operation.

Julia 1.10

Diese Funktion erfordert Julia 1.10 oder höher.

source
LinearAlgebra.hermitianpart!Function
hermitianpart!(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

Überschreibe die quadratische Matrix A in-place mit ihrem hermiteschen Teil (A + A') / 2 und gib Hermitian(A, uplo) zurück. Für reelle Matrizen A ist dies auch als der symmetrische Teil von A bekannt.

Siehe auch hermitianpart für die entsprechende Operation außerhalb des Platzes.

Julia 1.10

Diese Funktion erfordert Julia 1.10 oder höher.

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

Effizient Elemente der Matrix A nach B mit Adjunktion wie folgt kopieren:

B[ir_dest, jr_dest] = adjoint(A)[jr_src, ir_src]

Die Elemente B[ir_dest, jr_dest] werden überschrieben. Darüber hinaus müssen die Indexbereichsparameter length(ir_dest) == length(jr_src) und length(jr_dest) == length(ir_src) erfüllen.

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

Effizient Elemente der Matrix A nach B mit Transposition wie folgt kopieren:

B[ir_dest, jr_dest] = transpose(A)[jr_src, ir_src]

Die Elemente B[ir_dest, jr_dest] werden überschrieben. Darüber hinaus müssen die Indexbereichsparameter die Bedingungen length(ir_dest) == length(jr_src) und length(jr_dest) == length(ir_src) erfüllen.

source
copy_transpose!(B::AbstractMatrix, ir_dest::AbstractUnitRange, jr_dest::AbstractUnitRange,
                tM::AbstractChar,
                M::AbstractVecOrMat, ir_src::AbstractUnitRange, jr_src::AbstractUnitRange) -> B

Effizient Elemente der Matrix M nach B kopieren, bedingt durch den Zeichenparameter tM, wie folgt:

tMZielQuelle
'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]

Die Elemente B[ir_dest, jr_dest] werden überschrieben. Darüber hinaus müssen die Indexbereichsparameter die Bedingung length(ir_dest) == length(jr_src) und length(jr_dest) == length(ir_src) erfüllen.

Siehe auch copyto! und copy_adjoint!.

source

Low-level matrix operations

In vielen Fällen gibt es In-Place-Versionen von Matrixoperationen, die es Ihnen ermöglichen, einen vorab zugewiesenen Ausgabvektor oder eine Ausgabematrix bereitzustellen. Dies ist nützlich, wenn Sie kritischen Code optimieren möchten, um die Überheadkosten wiederholter Zuweisungen zu vermeiden. Diese In-Place-Operationen sind unten mit ! (z. B. mul!) gemäß der üblichen Julia-Konvention versehen.

LinearAlgebra.mul!Function
mul!(Y, A, B) -> Y

Berechnet das Matrix-Matrix- oder Matrix-Vektor-Produkt $A B$ und speichert das Ergebnis in Y, wobei der vorhandene Wert von Y überschrieben wird. Beachten Sie, dass Y nicht mit A oder B aliasiert sein darf.

Beispiele

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

Implementierung

Für benutzerdefinierte Matrix- und Vektortypen wird empfohlen, die 5-Argumente mul! zu implementieren, anstatt direkt die 3-Argumente mul! zu implementieren, wenn möglich.

source
mul!(C, A, B, α, β) -> C

Kombinierte In-Place-Matrix-Matrix- oder Matrix-Vektor-Multiplikation und Addition $A B α + C β$. Das Ergebnis wird in C gespeichert, indem es überschrieben wird. Beachten Sie, dass C nicht mit A oder B aliasiert sein darf.

Julia 1.3

Die fünf-Argumente mul! erfordert mindestens Julia 1.3.

Beispiele

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]; # Eine Kopie des ursprünglichen Wertes von C

julia> C == A * B * α + C_original * β
true
source
LinearAlgebra.lmul!Function
lmul!(a::Number, B::AbstractArray)

Skaliere ein Array B mit einem Skalar a, indem B vor Ort überschrieben wird. Verwende rmul!, um den Skalar von rechts zu multiplizieren. Die Skalierungsoperation respektiert die Semantik der Multiplikation * zwischen a und einem Element von B. Insbesondere gilt dies auch für Multiplikationen, die nicht-finite Zahlen wie NaN und ±Inf betreffen.

Julia 1.1

Vor Julia 1.1 wurden NaN und ±Inf Einträge in B inkonsistent behandelt.

Beispiele

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)

Berechnen Sie das Matrix-Matrix-Produkt $AB$, überschreiben Sie B und geben Sie das Ergebnis zurück. Hier muss A von einem speziellen Matrizen-Typ sein, wie z.B. Diagonal, UpperTriangular oder LowerTriangular, oder von einem orthogonalen Typ, siehe QR.

Beispiele

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)

Skaliere ein Array A mit einem Skalar b, indem A vor Ort überschrieben wird. Verwende lmul!, um den Skalar von links zu multiplizieren. Die Skalierungsoperation respektiert die Semantik der Multiplikation * zwischen einem Element von A und b. Insbesondere gilt dies auch für Multiplikationen, die nicht-finite Zahlen wie NaN und ±Inf betreffen.

Julia 1.1

Vor Julia 1.1 wurden NaN und ±Inf Einträge in A inkonsistent behandelt.

Beispiele

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)

Berechne das Matrix-Matrix-Produkt $AB$, überschreibe A und gib das Ergebnis zurück. Hier muss B von einem speziellen Matrizen-Typ sein, wie z.B. Diagonal, UpperTriangular oder LowerTriangular, oder von einem orthogonalen Typ, siehe QR.

Beispiele

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

Berechne A \ B in-place und speichere das Ergebnis in Y, wobei das Ergebnis zurückgegeben wird.

Das Argument A sollte keine Matrix sein. Stattdessen sollte es ein Faktorisierungsobjekt sein (z. B. erzeugt durch factorize oder cholesky). Der Grund dafür ist, dass die Faktorisierung selbst sowohl teuer ist als auch typischerweise Speicher allokiert (obwohl sie auch in-place durchgeführt werden kann, z. B. durch lu!), und leistungs-kritische Situationen, die ldiv! erfordern, normalerweise auch eine feinkörnige Kontrolle über die Faktorisierung von A benötigen.

!!! Hinweis Bestimmte strukturierte Matrizenarten, wie Diagonal und UpperTriangular, sind erlaubt, da diese bereits in einer faktorisierte Form vorliegen.

Beispiele

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)

Berechne A \ B in-place und überschreibe B, um das Ergebnis zu speichern.

Das Argument A sollte keine Matrix sein. Stattdessen sollte es ein Faktorisierungsobjekt sein (z. B. erzeugt durch factorize oder cholesky). Der Grund dafür ist, dass die Faktorisierung selbst sowohl teuer ist als auch typischerweise Speicher allokiert (obwohl sie auch in-place durchgeführt werden kann, z. B. durch lu!), und leistungs-kritische Situationen, die ldiv! erfordern, in der Regel auch eine feinkörnige Kontrolle über die Faktorisierung von A benötigen.

!!! Hinweis Bestimmte strukturierte Matrizenarten, wie Diagonal und UpperTriangular, sind erlaubt, da diese bereits in einer faktorisierte Form vorliegen.

Beispiele

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)

Teile jeden Eintrag in einem Array B durch einen Skalar a und überschreibe B im Platz. Verwende rdiv!, um den Skalar von rechts zu teilen.

Beispiele

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

Berechne A \ B in-place durch Gaußsche Eliminierung mit partieller Pivotierung und speichere das Ergebnis in B, wobei das Ergebnis zurückgegeben wird. Dabei werden auch die Diagonalen von A überschrieben.

Julia 1.11

ldiv! für Tridiagonal linke Seiten erfordert mindestens Julia 1.11.

source
LinearAlgebra.rdiv!Function
rdiv!(A, B)

Berechnet A / B im Platz und überschreibt A, um das Ergebnis zu speichern.

Das Argument B sollte kein Matrix sein. Stattdessen sollte es ein Faktorisierungsobjekt sein (z. B. erzeugt durch factorize oder cholesky). Der Grund dafür ist, dass die Faktorisierung selbst sowohl teuer ist als auch typischerweise Speicher allokiert (obwohl sie auch im Platz durchgeführt werden kann, z. B. durch lu!), und leistungs-kritische Situationen, die rdiv! erfordern, normalerweise auch eine feinkörnige Kontrolle über die Faktorisierung von B erfordern.

Note

Bestimmte strukturierte Matrizenarten, wie Diagonal und UpperTriangular, sind erlaubt, da diese bereits in einer faktorisierte Form vorliegen.

source
rdiv!(A::AbstractArray, b::Number)

Teile jeden Eintrag in einem Array A durch einen Skalar b, wobei A vor Ort überschrieben wird. Verwende ldiv!, um den Skalar von links zu teilen.

Beispiele

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

In Julia (wie in vielen wissenschaftlichen Berechnungen) basieren dichte lineare Algebraoperationen auf der LAPACK library, die wiederum auf grundlegenden linearen Algebra-Bausteinen basiert, die als BLAS bekannt sind. Es gibt hochoptimierte Implementierungen von BLAS, die für jede Computerarchitektur verfügbar sind, und manchmal ist es in Hochleistungs-Linear-Algebra-Routinen nützlich, die BLAS-Funktionen direkt aufzurufen.

LinearAlgebra.BLAS bietet Wrapper für einige der BLAS-Funktionen. Die BLAS-Funktionen, die eines der Eingabearrays überschreiben, haben Namen, die mit '!' enden. In der Regel hat eine BLAS-Funktion vier Methoden definiert, für Float32, Float64, ComplexF32 und ComplexF64 Arrays.

BLAS character arguments

Viele BLAS-Funktionen akzeptieren Argumente, die bestimmen, ob ein Argument transponiert werden soll (trans), welches Dreieck einer Matrix referenziert werden soll (uplo oder ul), ob die Diagonale einer dreieckigen Matrix als ganz eins angenommen werden kann (dA) oder auf welcher Seite einer Matrixmultiplikation das Eingabeargument gehört (side). Die Möglichkeiten sind:

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)

Setzen Sie die Anzahl der Threads, die die BLAS-Bibliothek verwenden soll, gleich n::Integer.

Akzeptiert auch nothing, in diesem Fall versucht Julia, die Standardanzahl der Threads zu erraten. Das Übergeben von nothing wird nicht empfohlen und existiert hauptsächlich aus historischen Gründen.

source

BLAS-Funktionen können in drei Gruppen unterteilt werden, die auch als drei Ebenen bezeichnet werden, abhängig davon, wann sie erstmals vorgeschlagen wurden, welche Art von Eingabeparametern verwendet wird und wie komplex die Operation ist.

Level 1 BLAS functions

Die Level-1-BLAS-Funktionen wurden erstmals in [(Lawson, 1979)][Lawson-1979] vorgeschlagen und definieren Operationen zwischen Skalaren und Vektoren.

[Lawson-1979]: https://dl.acm.org/doi/10.1145/355841.355847

LinearAlgebra.BLAS.rot!Function
rot!(n, X, incx, Y, incy, c, s)

Überschreibt X mit c*X + s*Y und Y mit -conj(s)*X + c*Y für die ersten n Elemente des Arrays X mit Schrittweite incx und die ersten n Elemente des Arrays Y mit Schrittweite incy. Gibt X und Y zurück.

Julia 1.5

rot! erfordert mindestens Julia 1.5.

source
LinearAlgebra.BLAS.scal!Function
scal!(n, a, X, incx)
scal!(a, X)

Überschreibt X mit a*X für die ersten n Elemente des Arrays X mit Schrittweite incx. Gibt X zurück.

Wenn n und incx nicht angegeben sind, werden length(X) und stride(X,1) verwendet.

source
LinearAlgebra.BLAS.scalFunction
scal(n, a, X, incx)
scal(a, X)

Gibt X zurück, skaliert mit a für die ersten n Elemente des Arrays X mit Schrittweite incx.

Wenn n und incx nicht angegeben sind, werden length(X) und stride(X,1) verwendet.

source
LinearAlgebra.BLAS.blascopy!Function
blascopy!(n, X, incx, Y, incy)

Kopiere n Elemente des Arrays X mit Schrittweite incx in das Array Y mit Schrittweite incy. Gibt Y zurück.

source
LinearAlgebra.BLAS.dotFunction
dot(n, X, incx, Y, incy)

Skalarprodukt von zwei Vektoren, die aus n Elementen des Arrays X mit Schrittweite incx und n Elementen des Arrays Y mit Schrittweite incy bestehen.

Beispiele

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)

Dot-Funktion für zwei komplexe Vektoren, die aus n Elementen des Arrays X mit Schrittweite incx und n Elementen des Arrays Y mit Schrittweite incy bestehen.

Beispiele

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)

Dot-Funktion für zwei komplexe Vektoren, bestehend aus n Elementen des Arrays X mit Schrittweite incx und n Elementen des Arrays U mit Schrittweite incy, wobei der erste Vektor konjugiert wird.

Beispiele

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-Norm eines Vektors, der aus n Elementen des Arrays X mit Schrittweite incx besteht.

Beispiele

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)

Summe der Beträge der ersten n Elemente des Arrays X mit Schrittweite incx.

Für ein reelles Array ist der Betrag der absolute Wert. Für ein komplexes Array ist der Betrag die Summe des absoluten Wertes des Realteils und des absoluten Wertes des Imaginärteils.

Beispiele

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)

Finde den Index des Elements von dx mit dem maximalen Absolutwert. n ist die Länge von dx, und incx ist der Schritt. Wenn n und incx nicht angegeben sind, nehmen sie die Standardwerte n=length(dx) und incx=stride1(dx) an.

source

Level 2 BLAS functions

Die Level-2-BLAS-Funktionen wurden in [(Dongarra, 1988)][Dongarra-1988] veröffentlicht und definieren Matrix-Vektor-Operationen.

[Dongarra-1988]: https://dl.acm.org/doi/10.1145/42288.42291

Geben Sie einen Vektor zurück

LinearAlgebra.BLAS.gemv!Function
gemv!(tA, alpha, A, x, beta, y)

Aktualisiere den Vektor y als alpha*A*x + beta*y oder alpha*A'x + beta*y gemäß tA. alpha und beta sind Skalare. Gib das aktualisierte y zurück.

source
LinearAlgebra.BLAS.gbmv!Function
gbmv!(trans, m, kl, ku, alpha, A, x, beta, y)

Aktualisiere den Vektor y als alpha*A*x + beta*y oder alpha*A'*x + beta*y gemäß trans. Die Matrix A ist eine allgemeine Bandmatrix der Dimension m mal size(A,2) mit kl Unterdiagonalen und ku Oberdiagonalen. alpha und beta sind Skalare. Gib das aktualisierte y zurück.

source
LinearAlgebra.BLAS.gbmvFunction
gbmv(trans, m, kl, ku, alpha, A, x)

Gibt alpha*A*x oder alpha*A'*x zurück, je nach trans. Die Matrix A ist eine allgemeine Bandmatrix der Dimension m mal size(A,2) mit kl Unterdiagonalen und ku Oberdiagonalen, und alpha ist ein Skalar.

source
LinearAlgebra.BLAS.hemv!Function
hemv!(ul, alpha, A, x, beta, y)

Aktualisiere den Vektor y als alpha*A*x + beta*y. A wird als hermitesch angenommen. Nur das ul Dreieck von A wird verwendet. alpha und beta sind Skalare. Gib das aktualisierte y zurück.

source
LinearAlgebra.BLAS.hemvMethod
hemv(ul, alpha, A, x)

Gibt alpha*A*x zurück. A wird als hermitesch angenommen. Nur das ul Dreieck von A wird verwendet. alpha ist ein Skalar.

source
LinearAlgebra.BLAS.hpmv!Function
hpmv!(uplo, α, AP, x, β, y)

Aktualisiere den Vektor y als α*A*x + β*y, wobei A eine hermitesche Matrix ist, die im gepackten Format AP bereitgestellt wird.

Mit uplo = 'U' muss das Array AP den oberen Dreiecksteil der hermiteschen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[1, 2] und A[2, 2] enthalten, und so weiter.

Mit uplo = 'L' muss das Array AP den unteren Dreiecksteil der hermiteschen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[2, 1] und A[3, 1] enthalten, und so weiter.

Die skalaren Eingaben α und β müssen komplexe oder reelle Zahlen sein.

Die Array-Eingaben x, y und AP müssen alle vom Typ ComplexF32 oder ComplexF64 sein.

Gib das aktualisierte y zurück.

Julia 1.5

hpmv! erfordert mindestens Julia 1.5.

source
LinearAlgebra.BLAS.symv!Function
symv!(ul, alpha, A, x, beta, y)

Aktualisiere den Vektor y als alpha*A*x + beta*y. A wird als symmetrisch angenommen. Nur das ul Dreieck von A wird verwendet. alpha und beta sind Skalare. Gib das aktualisierte y zurück.

source
LinearAlgebra.BLAS.symvMethod
symv(ul, alpha, A, x)

Gibt alpha*A*x zurück. A wird als symmetrisch angenommen. Nur das ul Dreieck von A wird verwendet. alpha ist ein Skalar.

source
LinearAlgebra.BLAS.sbmv!Function
sbmv!(uplo, k, alpha, A, x, beta, y)

Aktualisiere den Vektor y als alpha*A*x + beta*y, wobei A eine symmetrische Bandmatrix der Ordnung size(A,2) mit k Überdiagonalen ist, die im Argument A gespeichert sind. Das Speicherlayout für A wird im Referenz-BLAS-Modul, Level-2 BLAS unter https://www.netlib.org/lapack/explore-html/ beschrieben. Nur das uplo Dreieck von A wird verwendet.

Gib das aktualisierte y zurück.

source
LinearAlgebra.BLAS.sbmvMethod
sbmv(uplo, k, alpha, A, x)

Gibt alpha*A*x zurück, wobei A eine symmetrische Bandmatrix der Ordnung size(A,2) mit k Superdiagonalen ist, die im Argument A gespeichert sind. Nur das uplo Dreieck von A wird verwendet.

source
LinearAlgebra.BLAS.sbmvMethod
sbmv(uplo, k, A, x)

Gibt A*x zurück, wobei A eine symmetrische Bandmatrix der Ordnung size(A,2) mit k Superdiagonalen ist, die im Argument A gespeichert sind. Nur das uplo Dreieck von A wird verwendet.

source
LinearAlgebra.BLAS.spmv!Function
spmv!(uplo, α, AP, x, β, y)

Aktualisiere den Vektor y als α*A*x + β*y, wobei A eine symmetrische Matrix ist, die im gepackten Format AP bereitgestellt wird.

Mit uplo = 'U' muss das Array AP den oberen Dreiecksteil der symmetrischen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[1, 2] und A[2, 2] enthalten, und so weiter.

Mit uplo = 'L' muss das Array AP den unteren Dreiecksteil der symmetrischen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[2, 1] und A[3, 1] enthalten, und so weiter.

Die skalaren Eingaben α und β müssen reell sein.

Die Array-Eingaben x, y und AP müssen alle vom Typ Float32 oder Float64 sein.

Gib das aktualisierte y zurück.

Julia 1.5

spmv! erfordert mindestens Julia 1.5.

source
LinearAlgebra.BLAS.trmv!Function
trmv!(ul, tA, dA, A, b)

Gibt op(A)*b zurück, wobei op durch tA bestimmt wird. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden. Die Multiplikation erfolgt in-place auf b.

source
LinearAlgebra.BLAS.trmvFunction
trmv(ul, tA, dA, A, b)

Gibt op(A)*b zurück, wobei op durch tA bestimmt wird. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden.

source
LinearAlgebra.BLAS.trsv!Function
trsv!(ul, tA, dA, A, b)

Überschreibe b mit der Lösung von A*x = b oder einer der anderen beiden Varianten, die durch tA und ul bestimmt werden. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden. Gib das aktualisierte b zurück.

source
LinearAlgebra.BLAS.trsvFunction
trsv(ul, tA, dA, A, b)

Geben Sie die Lösung für A*x = b oder eine der anderen beiden Varianten zurück, die durch tA und ul bestimmt werden. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden.

source

eine Matrix zurückgeben

LinearAlgebra.BLAS.her!Function
her!(uplo, alpha, x, A)

Methoden nur für komplexe Arrays. Rang-1-Aktualisierung der hermiteschen Matrix A mit dem Vektor x als alpha*x*x' + A. uplo steuert, welches Dreieck von A aktualisiert wird. Gibt A zurück.

source
LinearAlgebra.BLAS.syr!Function
syr!(uplo, alpha, x, A)

Rank-1-Aktualisierung der symmetrischen Matrix A mit dem Vektor x als alpha*x*transpose(x) + A. uplo steuert, welches Dreieck von A aktualisiert wird. Gibt A zurück.

source
LinearAlgebra.BLAS.spr!Function
spr!(uplo, α, x, AP)

Aktualisiere die Matrix A als A+α*x*x', wobei A eine symmetrische Matrix ist, die im gepackten Format AP bereitgestellt wird und x ein Vektor ist.

Mit uplo = 'U' muss das Array AP den oberen Dreiecksteil der symmetrischen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[1, 2] und A[2, 2] enthalten, und so weiter.

Mit uplo = 'L' muss das Array AP den unteren Dreiecksteil der symmetrischen Matrix sequenziell, spaltenweise enthalten, sodass AP[1] A[1, 1] enthält, AP[2] und AP[3] A[2, 1] und A[3, 1] enthalten, und so weiter.

Der skalare Eingabewert α muss reell sein.

Die Array-Eingaben x und AP müssen alle vom Typ Float32 oder Float64 sein. Gib das aktualisierte AP zurück.

Julia 1.8

spr! erfordert mindestens Julia 1.8.

source

Level 3 BLAS functions

Die Level-3-BLAS-Funktionen wurden in [(Dongarra, 1990)][Dongarra-1990] veröffentlicht und definieren Matrix-Matrix-Operationen.

[Dongarra-1990]: https://dl.acm.org/doi/10.1145/77626.79170

LinearAlgebra.BLAS.gemmt!Function
gemmt!(uplo, tA, tB, alpha, A, B, beta, C)

Aktualisiert den unteren oder oberen dreieckigen Teil, der durch uplo von C angegeben ist, als alpha*A*B + beta*C oder die anderen Varianten gemäß tA und tB. Gibt das aktualisierte C zurück.

Julia 1.11

gemmt! erfordert mindestens Julia 1.11.

source
LinearAlgebra.BLAS.gemmtMethod
gemmt(uplo, tA, tB, alpha, A, B)

Gibt den unteren oder oberen dreieckigen Teil an, der durch uplo von A*B oder den anderen drei Varianten gemäß tA und tB angegeben ist.

Julia 1.11

gemmt erfordert mindestens Julia 1.11.

source
LinearAlgebra.BLAS.gemmtMethod
gemmt(uplo, tA, tB, A, B)

Gibt den unteren oder oberen dreieckigen Teil an, der durch uplo von A*B oder den anderen drei Varianten gemäß tA und tB angegeben ist.

Julia 1.11

gemmt erfordert mindestens Julia 1.11.

source
LinearAlgebra.BLAS.gemm!Function
gemm!(tA, tB, alpha, A, B, beta, C)

Aktualisiere C als alpha*A*B + beta*C oder die anderen drei Varianten gemäß tA und tB. Gib das aktualisierte C zurück.

source
LinearAlgebra.BLAS.symm!Function
symm!(seite, ul, alpha, A, B, beta, C)

Aktualisiere C als alpha*A*B + beta*C oder alpha*B*A + beta*C gemäß seite. A wird als symmetrisch angenommen. Nur das ul Dreieck von A wird verwendet. Gib das aktualisierte C zurück.

source
LinearAlgebra.BLAS.symmMethod
symm(seite, ul, alpha, A, B)

Gibt alpha*A*B oder alpha*B*A zurück, je nach seite. A wird als symmetrisch angenommen. Nur das ul Dreieck von A wird verwendet.

source
LinearAlgebra.BLAS.symmMethod
symm(seite, ul, A, B)

Gibt A*B oder B*A gemäß seite zurück. Es wird angenommen, dass A symmetrisch ist. Nur das ul Dreieck von A wird verwendet.

source
LinearAlgebra.BLAS.hemm!Function
hemm!(seite, ul, alpha, A, B, beta, C)

Aktualisiere C als alpha*A*B + beta*C oder alpha*B*A + beta*C gemäß seite. A wird als hermitesch angenommen. Nur das ul Dreieck von A wird verwendet. Gib das aktualisierte C zurück.

source
LinearAlgebra.BLAS.hemmMethod
hemm(seite, ul, alpha, A, B)

Gibt alpha*A*B oder alpha*B*A zurück, je nach seite. A wird als hermitesch angenommen. Nur das ul Dreieck von A wird verwendet.

source
LinearAlgebra.BLAS.syrk!Function
syrk!(uplo, trans, alpha, A, beta, C)

Rank-k-Aktualisierung der symmetrischen Matrix C als alpha*A*transpose(A) + beta*C oder alpha*transpose(A)*A + beta*C gemäß trans. Nur das uplo Dreieck von C wird verwendet. Rückgabe C.

source
LinearAlgebra.BLAS.syrkFunction
syrk(uplo, trans, alpha, A)

Gibt entweder das obere Dreieck oder das untere Dreieck von A zurück, entsprechend uplo, von alpha*A*transpose(A) oder alpha*transpose(A)*A, entsprechend trans.

source
LinearAlgebra.BLAS.herk!Function
herk!(uplo, trans, alpha, A, beta, C)

Methoden nur für komplexe Arrays. Rang-k Aktualisierung der hermiteschen Matrix C als alpha*A*A' + beta*C oder alpha*A'*A + beta*C gemäß trans. Nur das uplo Dreieck von C wird aktualisiert. Gibt C zurück.

source
LinearAlgebra.BLAS.syr2k!Function
syr2k!(uplo, trans, alpha, A, B, beta, C)

Rank-2k-Aktualisierung der symmetrischen Matrix C als alpha*A*transpose(B) + alpha*B*transpose(A) + beta*C oder alpha*transpose(A)*B + alpha*transpose(B)*A + beta*C gemäß trans. Nur das uplo Dreieck von C wird verwendet. Gibt C zurück.

source
LinearAlgebra.BLAS.syr2kFunction
syr2k(uplo, trans, alpha, A, B)

Gibt das uplo Dreieck von alpha*A*transpose(B) + alpha*B*transpose(A) oder alpha*transpose(A)*B + alpha*transpose(B)*A zurück, je nach trans.

source
syr2k(uplo, trans, A, B)

Gibt das uplo Dreieck von A*transpose(B) + B*transpose(A) oder transpose(A)*B + transpose(B)*A zurück, je nach trans.

source
LinearAlgebra.BLAS.her2k!Function
her2k!(uplo, trans, alpha, A, B, beta, C)

Rank-2k-Aktualisierung der hermiteschen Matrix C als alpha*A*B' + alpha*B*A' + beta*C oder alpha*A'*B + alpha*B'*A + beta*C gemäß trans. Der Skalar beta muss reell sein. Nur das uplo Dreieck von C wird verwendet. Rückgabe C.

source
LinearAlgebra.BLAS.her2kFunction
her2k(uplo, trans, alpha, A, B)

Gibt das uplo Dreieck von alpha*A*B' + alpha*B*A' oder alpha*A'*B + alpha*B'*A zurück, je nach trans.

source
her2k(uplo, trans, A, B)

Gibt das uplo Dreieck von A*B' + B*A' oder A'*B + B'*A zurück, je nach trans.

source
LinearAlgebra.BLAS.trmm!Function
trmm!(seite, ul, tA, dA, alpha, A, B)

Aktualisiere B als alpha*A*B oder eine der anderen drei Varianten, die durch seite und tA bestimmt werden. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden. Gib das aktualisierte B zurück.

source
LinearAlgebra.BLAS.trmmFunction
trmm(seite, ul, tA, dA, alpha, A, B)

Gibt alpha*A*B oder eine der anderen drei Varianten zurück, die durch seite und tA bestimmt werden. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden.

source
LinearAlgebra.BLAS.trsm!Function
trsm!(seite, ul, tA, dA, alpha, A, B)

Überschreibt B mit der Lösung von A*X = alpha*B oder einer der anderen drei Varianten, die durch seite und tA bestimmt werden. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als alle Einsen angenommen werden. Gibt das aktualisierte B zurück.

source
LinearAlgebra.BLAS.trsmFunction
trsm(seite, ul, tA, dA, alpha, A, B)

Geben Sie die Lösung für A*X = alpha*B oder eine der anderen drei Varianten zurück, die durch seite und tA bestimmt werden. Nur das ul Dreieck von A wird verwendet. dA bestimmt, ob die Diagonalwerte gelesen oder als Einsen angenommen werden.

source

LAPACK functions

LinearAlgebra.LAPACK bietet Wrapper für einige der LAPACK-Funktionen der linearen Algebra. Die Funktionen, die eines der Eingabearrays überschreiben, haben Namen, die mit '!' enden.

In der Regel hat eine Funktion 4 Methoden definiert, eine für Float64, Float32, ComplexF64 und ComplexF32 Arrays.

Beachten Sie, dass die von Julia bereitgestellte LAPACK-API sich in Zukunft ändern kann und wird. Da diese API nicht benutzerorientiert ist, gibt es kein Engagement, diese spezifische Funktionalität in zukünftigen Versionen zu unterstützen oder abzulehnen.

LinearAlgebra.LAPACK.gbtrf!Function
gbtrf!(kl, ku, m, AB) -> (AB, ipiv)

Berechne die LU-Zerlegung einer bandierten Matrix AB. kl ist die erste Unterdiagonale, die ein nicht null Band enthält, ku ist die letzte Oberdiagonale, die eines enthält, und m ist die erste Dimension der Matrix AB. Gibt die LU-Zerlegung in-place und ipiv, den Vektor der verwendeten Pivots, zurück.

source
LinearAlgebra.LAPACK.gbtrs!Function
gbtrs!(trans, kl, ku, m, AB, ipiv, B)

Lösen Sie die Gleichung AB * X = B. trans bestimmt die Ausrichtung von AB. Es kann N (keine Transponierung), T (Transponierung) oder C (konjugierte Transponierung) sein. kl ist die erste Unterdiagonale, die ein von Null verschiedenes Band enthält, ku ist die letzte Oberdiagonale, die eines enthält, und m ist die erste Dimension der Matrix AB. ipiv ist der Vektor der Pivots, der von gbtrf! zurückgegeben wird. Gibt den Vektor oder die Matrix X zurück und überschreibt B vor Ort.

source
LinearAlgebra.LAPACK.gebal!Function
gebal!(job, A) -> (ilo, ihi, scale)

Balanciere die Matrix A, bevor du ihr Eigenwertsystem oder die Schur-Faktorisierung berechnest. job kann eines von N (A wird nicht permutiert oder skaliert), P (A wird nur permutiert), S (A wird nur skaliert) oder B (A wird sowohl permutiert als auch skaliert) sein. Modifiziert A in-place und gibt ilo, ihi und scale zurück. Wenn die Permutation aktiviert wurde, gilt A[i,j] = 0, wenn j > i und 1 < j < ilo oder j > ihi. scale enthält Informationen über die durchgeführten Skalierungen/Permutation.

source
LinearAlgebra.LAPACK.gebak!Function
gebak!(job, side, ilo, ihi, scale, V)

Transformiere die Eigenvektoren V einer mit gebal! balancierten Matrix in die unskalierten/unpermuten Eigenvektoren der ursprünglichen Matrix. Modifiziert V in-place. side kann L (linke Eigenvektoren werden transformiert) oder R (rechte Eigenvektoren werden transformiert) sein.

source
LinearAlgebra.LAPACK.gebrd!Function
gebrd!(A) -> (A, d, e, tauq, taup)

Reduziert A in-place auf bidiagonale Form A = QBP'. Gibt A zurück, das die bidiagonale Matrix B enthält; d, das die Diagonalelemente von B enthält; e, das die Nebendiagonalelemente von B enthält; tauq, das die elementaren Reflektoren darstellt, die Q repräsentieren; und taup, das die elementaren Reflektoren darstellt, die P repräsentieren.

source
LinearAlgebra.LAPACK.gelqf!Function
gelqf!(A, tau)

Berechnet die LQ-Faktorisierung von A, A = LQ. tau enthält Skalare, die die elementaren Reflektoren der Faktorisierung parametrisieren. tau muss eine Länge haben, die größer oder gleich der kleinsten Dimension von A ist.

Gibt A und tau modifiziert in-place zurück.

source
gelqf!(A) -> (A, tau)

Berechne die LQ-Faktorisierung von A, A = LQ.

Gibt A zurück, das in-place modifiziert wurde, und tau, das Skalare enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.geqlf!Function
geqlf!(A, tau)

Berechne die QL-Faktorisierung von A, A = QL. tau enthält Skalare, die die elementaren Reflektoren der Faktorisierung parametrisieren. tau muss eine Länge haben, die größer oder gleich der kleineren Dimension von A ist.

Gibt A und tau modifiziert vor Ort zurück.

source
geqlf!(A) -> (A, tau)

Berechnet die QL-Faktorisierung von A, A = QL.

Gibt A zurück, das in-place modifiziert wurde, und tau, das Skalare enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.geqrf!Function
geqrf!(A, tau)

Berechnet die QR-Faktorisierung von A, A = QR. tau enthält Skalare, die die elementaren Reflektoren der Faktorisierung parametrisieren. tau muss eine Länge haben, die größer oder gleich der kleinsten Dimension von A ist.

Gibt A und tau modifiziert in-place zurück.

source
geqrf!(A) -> (A, tau)

Berechne die QR-Faktorisierung von A, A = QR.

Gibt A zurück, das in-place modifiziert wurde, und tau, das Skalare enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.geqp3!Function
geqp3!(A, [jpvt, tau]) -> (A, tau, jpvt)

Berechnen Sie die pivotierte QR-Faktorisierung von A, AP = QR unter Verwendung von BLAS der Stufe 3. P ist eine Pivotmatrix, die durch jpvt dargestellt wird. tau speichert die elementaren Reflektoren. Die Argumente jpvt und tau sind optional und ermöglichen das Übergeben von vorallocierten Arrays. Wenn sie übergeben werden, muss jpvt eine Länge haben, die größer oder gleich n ist, wenn A eine (m x n)-Matrix ist, und tau muss eine Länge haben, die größer oder gleich der kleineren Dimension von A ist. Bei Eingabe, wenn jpvt[j] ungleich null ist, wird die j-te Spalte von A an den Anfang von AP permutiert.

A, jpvt und tau werden in-place modifiziert.

source
LinearAlgebra.LAPACK.gerqf!Function
gerqf!(A, tau)

Berechne die RQ-Faktorisierung von A, A = RQ. tau enthält Skalare, die die elementaren Reflektoren der Faktorisierung parametrisieren. tau muss eine Länge haben, die größer oder gleich der kleinsten Dimension von A ist.

Gibt A und tau modifiziert vor Ort zurück.

source
gerqf!(A) -> (A, tau)

Berechne die RQ-Faktorisierung von A, A = RQ.

Gibt A zurück, das vor Ort modifiziert wurde, und tau, das Skalare enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.geqrt!Function
geqrt!(A, T)

Berechnet die blockierte QR-Faktorisierung von A, A = QR. T enthält obere dreieckige Blockreflektoren, die die elementaren Reflektoren der Faktorisierung parametrisieren. Die erste Dimension von T legt die Blockgröße fest und muss zwischen 1 und n liegen. Die zweite Dimension von T muss der kleineren Dimension von A entsprechen.

Gibt A und T modifiziert in-place zurück.

source
geqrt!(A, nb) -> (A, T)

Berechne die blockierte QR-Faktorisierung von A, A = QR. nb legt die Blockgröße fest und muss zwischen 1 und n, der zweiten Dimension von A, liegen.

Gibt A zurück, das in-place modifiziert wurde, und T, das obere dreieckige Blockreflektoren enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.geqrt3!Function
geqrt3!(A, T)

Berechnet rekursiv die blockierte QR-Faktorisierung von A, A = QR. T enthält obere dreieckige Blockreflektoren, die die elementaren Reflektoren der Faktorisierung parametrisieren. Die erste Dimension von T legt die Blockgröße fest und muss zwischen 1 und n liegen. Die zweite Dimension von T muss der kleinsten Dimension von A entsprechen.

Gibt A und T modifiziert in-place zurück.

source
geqrt3!(A) -> (A, T)

Berechnet rekursiv die blockierte QR-Faktorisierung von A, A = QR.

Gibt A zurück, das in-place modifiziert wurde, und T, das obere dreieckige Blockreflektoren enthält, die die elementaren Reflektoren der Faktorisierung parametrisieren.

source
LinearAlgebra.LAPACK.getrf!Function
getrf!(A, ipiv) -> (A, ipiv, info)

Berechne die pivotierte LU-Faktorisierung von A, A = LU. ipiv enthält die Pivotierungsinformationen und info einen Code, der den Erfolg anzeigt (info = 0), einen singulären Wert in U (info = i, in diesem Fall ist U[i,i] singulär) oder einen Fehlercode (info < 0).

source
getrf!(A) -> (A, ipiv, info)

Berechne die pivotierte LU-Faktorisierung von A, A = LU.

Gibt A zurück, das in-place modifiziert wurde, ipiv, die Pivotierungsinformationen, und einen info-Code, der den Erfolg anzeigt (info = 0), einen singulären Wert in U (info = i, in diesem Fall ist U[i,i] singulär) oder einen Fehlercode (info < 0).

source
LinearAlgebra.LAPACK.tzrzf!Function
tzrzf!(A) -> (A, tau)

Transformiert die obere trapezförmige Matrix A in-place in eine obere dreieckige Form. Gibt A und tau zurück, die skalaren Parameter für die elementaren Reflektoren der Transformation.

source
LinearAlgebra.LAPACK.ormrz!Function
ormrz!(seite, trans, A, tau, C)

Multipliziert die Matrix C mit Q aus der durch tzrzf! gelieferten Transformation. Je nach seite oder trans kann die Multiplikation linksseitig (seite = L, Q*C) oder rechtsseitig (seite = R, C*Q) sein, und Q kann unverändert (trans = N), transponiert (trans = T) oder konjugiert transponiert (trans = C) sein. Gibt die Matrix C zurück, die in-place mit dem Ergebnis der Multiplikation modifiziert wird.

source
LinearAlgebra.LAPACK.gels!Function
gels!(trans, A, B) -> (F, B, ssr)

Löst die lineare Gleichung A * X = B, transpose(A) * X = B oder adjoint(A) * X = B unter Verwendung einer QR- oder LQ-Faktorisierung. Modifiziert die Matrix/Vektor B vor Ort mit der Lösung. A wird mit seiner QR- oder LQ-Faktorisierung überschrieben. trans kann eines von N (keine Modifikation), T (Transponierte) oder C (konjugierte Transponierte) sein. gels! sucht nach der Lösung mit minimaler Norm/kleinsten Quadraten. A kann unter- oder überbestimmt sein. Die Lösung wird in B zurückgegeben.

source
LinearAlgebra.LAPACK.gesv!Function
gesv!(A, B) -> (B, A, ipiv)

Löst die lineare Gleichung A * X = B, wobei A eine quadratische Matrix ist, unter Verwendung der LU-Faktorisierung von A. A wird mit seiner LU-Faktorisierung überschrieben und B wird mit der Lösung X überschrieben. ipiv enthält die Pivotierungsinformationen für die LU-Faktorisierung von A.

source
LinearAlgebra.LAPACK.getrs!Function
getrs!(trans, A, ipiv, B)

Löst die lineare Gleichung A * X = B, transpose(A) * X = B oder adjoint(A) * X = B für quadratische A. Modifiziert die Matrix/Vektor B vor Ort mit der Lösung. A ist die LU-Faktorisierung von getrf!, wobei ipiv die Pivotierungsinformationen sind. trans kann eines von N (keine Modifikation), T (Transponierte) oder C (konjugierte Transponierte) sein.

source
LinearAlgebra.LAPACK.getri!Function
getri!(A, ipiv)

Berechnet die Inverse von A, unter Verwendung seiner LU-Faktorisierung, die von getrf! gefunden wurde. ipiv ist die Pivot-Informationsausgabe und A enthält die LU-Faktorisierung von getrf!. A wird mit seiner Inversen überschrieben.

source
LinearAlgebra.LAPACK.gesvx!Function
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)

Löst die lineare Gleichung A * X = B (trans = N), transpose(A) * X = B (trans = T) oder adjoint(A) * X = B (trans = C) unter Verwendung der LU-Faktorisierung von A. fact kann E sein, in diesem Fall wird A ausgeglichen und in AF kopiert; F, in diesem Fall sind AF und ipiv von einer vorherigen LU-Faktorisierung Eingaben; oder N, in diesem Fall wird A in AF kopiert und dann faktorisert. Wenn fact = F, kann equed N sein, was bedeutet, dass A nicht ausgeglichen wurde; R, was bedeutet, dass A von links mit Diagonal(R) multipliziert wurde; C, was bedeutet, dass A von rechts mit Diagonal(C) multipliziert wurde; oder B, was bedeutet, dass A von links mit Diagonal(R) und von rechts mit Diagonal(C) multipliziert wurde. Wenn fact = F und equed = R oder B, müssen alle Elemente von R positiv sein. Wenn fact = F und equed = C oder B, müssen alle Elemente von C positiv sein.

Gibt die Lösung X zurück; equed, das eine Ausgabe ist, wenn fact nicht N ist, und beschreibt die durchgeführte Ausgleichung; R, die Diagonale der Zeilenausgleichung; C, die Diagonale der Spaltenausgleichung; B, das mit seiner ausgeglichenen Form Diagonal(R)*B (wenn trans = N und equed = R,B) oder Diagonal(C)*B (wenn trans = T,C und equed = C,B) überschrieben werden kann; rcond, die reziproke Bedingungszahl von A nach dem Ausgleichen; ferr, die obere Fehlergrenze für jeden Lösungsvektor in X; berr, die obere Fehlergrenze für jeden Lösungsvektor in X; und work, der reziproke Pivot-Wachstumsfaktor.

source
gesvx!(A, B)

Die Vereinfachung von gesvx! ohne Gleichgewicht und ohne Transposition.

source
LinearAlgebra.LAPACK.gelsd!Function
gelsd!(A, B, rcond) -> (B, rnk)

Berechnet die Lösung mit der kleinsten Norm von A * X = B, indem die SVD-Faktorisierung von A gefunden wird, und dann das Problem durch Teilen und Erobern gelöst wird. B wird mit der Lösung X überschrieben. Singuläre Werte unter rcond werden als null behandelt. Gibt die Lösung in B und den effektiven Rang von A in rnk zurück.

source
LinearAlgebra.LAPACK.gelsy!Function
gelsy!(A, B, rcond) -> (B, rnk)

Berechnet die Lösung mit der kleinsten Norm von A * X = B, indem die vollständige QR-Faktorisierung von A gefunden wird, und dann das Problem durch Teilen und Erobern gelöst wird. B wird mit der Lösung X überschrieben. Singuläre Werte unter rcond werden als null behandelt. Gibt die Lösung in B und den effektiven Rang von A in rnk zurück.

source
LinearAlgebra.LAPACK.gglse!Function
gglse!(A, c, B, d) -> (X,res)

Löst die Gleichung A * x = c, wobei x der Gleichheitsbedingung B * x = d unterliegt. Verwendet die Formel ||c - A*x||^2 = 0, um zu lösen. Gibt X und die Residualsumme der Quadrate zurück.

source
LinearAlgebra.LAPACK.geev!Function
geev!(jobvl, jobvr, A) -> (W, VL, VR)

Findet das Eigenwertsystem von A. Wenn jobvl = N, werden die linken Eigenvektoren von A nicht berechnet. Wenn jobvr = N, werden die rechten Eigenvektoren von A nicht berechnet. Wenn jobvl = V oder jobvr = V, werden die entsprechenden Eigenvektoren berechnet. Gibt die Eigenwerte in W, die rechten Eigenvektoren in VR und die linken Eigenvektoren in VL zurück.

source
LinearAlgebra.LAPACK.gesdd!Function
gesdd!(job, A) -> (U, S, VT)

Findet die singuläre Wertzerlegung von A, A = U * S * V', unter Verwendung eines Divide-and-Conquer-Ansatzes. Wenn job = A, werden alle Spalten von U und die Zeilen von V' berechnet. Wenn job = N, werden keine Spalten von U oder Zeilen von V' berechnet. Wenn job = O, wird A mit den Spalten von (dünnen) U und den Zeilen von (dünnen) V' überschrieben. Wenn job = S, werden die Spalten von (dünnen) U und die Zeilen von (dünnen) V' berechnet und separat zurückgegeben.

source
LinearAlgebra.LAPACK.gesvd!Function
gesvd!(jobu, jobvt, A) -> (U, S, VT)

Findet die singuläre Wertzerlegung von A, A = U * S * V'. Wenn jobu = A, werden alle Spalten von U berechnet. Wenn jobvt = A, werden alle Zeilen von V' berechnet. Wenn jobu = N, werden keine Spalten von U berechnet. Wenn jobvt = N, werden keine Zeilen von V' berechnet. Wenn jobu = O, wird A mit den Spalten von (dünnen) U überschrieben. Wenn jobvt = O, wird A mit den Zeilen von (dünnen) V' überschrieben. Wenn jobu = S, werden die Spalten von (dünnen) U berechnet und separat zurückgegeben. Wenn jobvt = S, werden die Zeilen von (dünnen) V' berechnet und separat zurückgegeben. jobu und jobvt können nicht beide O sein.

Gibt U, S und Vt zurück, wobei S die singulären Werte von A sind.

source
LinearAlgebra.LAPACK.ggsvd!Function
ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Findet die verallgemeinerte singuläre Wertzerlegung von A und B, U'*A*Q = D1*R und V'*B*Q = D2*R. D1 hat alpha auf seiner Diagonalen und D2 hat beta auf seiner Diagonalen. Wenn jobu = U, wird die orthogonale/einheitliche Matrix U berechnet. Wenn jobv = V wird die orthogonale/einheitliche Matrix V berechnet. Wenn jobq = Q, wird die orthogonale/einheitliche Matrix Q berechnet. Wenn jobu, jobv oder jobq N ist, wird diese Matrix nicht berechnet. Diese Funktion ist nur in LAPACK-Versionen vor 3.6.0 verfügbar.

source
LinearAlgebra.LAPACK.ggsvd3!Function
ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Findet die verallgemeinerte singuläre Wertzerlegung von A und B, U'*A*Q = D1*R und V'*B*Q = D2*R. D1 hat alpha auf seiner Diagonalen und D2 hat beta auf seiner Diagonalen. Wenn jobu = U, wird die orthogonale/einheitliche Matrix U berechnet. Wenn jobv = V, wird die orthogonale/einheitliche Matrix V berechnet. Wenn jobq = Q, wird die orthogonale/einheitliche Matrix Q berechnet. Wenn jobu, jobv oder jobq N ist, wird diese Matrix nicht berechnet. Diese Funktion erfordert 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)

Findet das Eigenwertsystem von A mit Matrizenbalancierung. Wenn jobvl = N, werden die linken Eigenvektoren von A nicht berechnet. Wenn jobvr = N, werden die rechten Eigenvektoren von A nicht berechnet. Wenn jobvl = V oder jobvr = V, werden die entsprechenden Eigenvektoren berechnet. Wenn balanc = N, wird keine Balancierung durchgeführt. Wenn balanc = P, wird A permutiert, aber nicht skaliert. Wenn balanc = S, wird A skaliert, aber nicht permutiert. Wenn balanc = B, wird A permutiert und skaliert. Wenn sense = N, werden keine reziproken Bedingungszahlen berechnet. Wenn sense = E, werden reziproke Bedingungszahlen nur für die Eigenwerte berechnet. Wenn sense = V, werden reziproke Bedingungszahlen nur für die rechten Eigenvektoren berechnet. Wenn sense = B, werden reziproke Bedingungszahlen für die rechten Eigenvektoren und die Eigenvektoren berechnet. Wenn sense = E,B, müssen die rechten und linken Eigenvektoren berechnet werden.

source
LinearAlgebra.LAPACK.ggev!Function
ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Findet die verallgemeinerte Eigenzerlegung von A und B. Wenn jobvl = N, werden die linken Eigenvektoren nicht berechnet. Wenn jobvr = N, werden die rechten Eigenvektoren nicht berechnet. Wenn jobvl = V oder jobvr = V, werden die entsprechenden Eigenvektoren berechnet.

source
LinearAlgebra.LAPACK.ggev3!Function
ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Findet die verallgemeinerte Eigenzerlegung von A und B unter Verwendung eines blockierten Algorithmus. Wenn jobvl = N, werden die linken Eigenvektoren nicht berechnet. Wenn jobvr = N, werden die rechten Eigenvektoren nicht berechnet. Wenn jobvl = V oder jobvr = V, werden die entsprechenden Eigenvektoren berechnet. Diese Funktion erfordert LAPACK 3.6.0.

source
LinearAlgebra.LAPACK.gtsv!Function
gtsv!(dl, d, du, B)

Löst die Gleichung A * X = B, wobei A eine tridiagonale Matrix mit dl auf der Subdiagonalen, d auf der Diagonalen und du auf der Superdiagonalen ist.

Überschreibt B mit der Lösung X und gibt sie zurück.

source
LinearAlgebra.LAPACK.gttrf!Function
gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

Findet die LU-Faktorisierung einer tridiagonalen Matrix mit dl auf der Subdiagonale, d auf der Diagonale und du auf der Superdiagonale.

Modifiziert dl, d und du in-place und gibt sie sowie die zweite Superdiagonale du2 und den Pivot-Vektor ipiv zurück.

source
LinearAlgebra.LAPACK.gttrs!Function
gttrs!(trans, dl, d, du, du2, ipiv, B)

Löst die Gleichung A * X = B (trans = N), transpose(A) * X = B (trans = T) oder adjoint(A) * X = B (trans = C) unter Verwendung der LU-Faktorisierung, die mit gttrf! berechnet wurde. B wird mit der Lösung X überschrieben.

source
LinearAlgebra.LAPACK.orglq!Function
orglq!(A, tau, k = length(tau))

Findet explizit die Matrix Q einer LQ-Faktorisierung nach dem Aufruf von gelqf! auf A. Verwendet die Ausgabe von gelqf!. A wird durch Q überschrieben.

source
LinearAlgebra.LAPACK.orgqr!Function
orgqr!(A, tau, k = length(tau))

Findet explizit die Matrix Q einer QR-Faktorisierung nach dem Aufruf von geqrf! auf A. Verwendet die Ausgabe von geqrf!. A wird durch Q überschrieben.

source
LinearAlgebra.LAPACK.orgql!Function
orgql!(A, tau, k = length(tau))

Findet explizit die Matrix Q einer QL-Faktorisierung nach dem Aufruf von geqlf! auf A. Verwendet die Ausgabe von geqlf!. A wird durch Q überschrieben.

source
LinearAlgebra.LAPACK.orgrq!Function
orgrq!(A, tau, k = length(tau))

Findet explizit die Matrix Q einer RQ-Faktorisierung, nachdem gerqf! auf A aufgerufen wurde. Verwendet die Ausgabe von gerqf!. A wird durch Q überschrieben.

source
LinearAlgebra.LAPACK.ormlq!Function
ormlq!(seite, trans, A, tau, C)

Berechnet Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) für seite = L oder die äquivalente rechtsseitige Multiplikation für seite = R unter Verwendung von Q aus einer LQ-Faktorisierung von A, die mit gelqf! berechnet wurde. C wird überschrieben.

source
LinearAlgebra.LAPACK.ormqr!Function
ormqr!(seite, trans, A, tau, C)

Berechnet Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) für seite = L oder die äquivalente rechtsseitige Multiplikation für seite = R unter Verwendung von Q aus einer QR-Faktorisierung von A, die mit geqrf! berechnet wurde. C wird überschrieben.

source
LinearAlgebra.LAPACK.ormql!Function
ormql!(seite, trans, A, tau, C)

Berechnet Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) für seite = L oder die äquivalente rechtsseitige Multiplikation für seite = R unter Verwendung von Q aus einer QL-Faktorisierung von A, die mit geqlf! berechnet wurde. C wird überschrieben.

source
LinearAlgebra.LAPACK.ormrq!Function
ormrq!(seite, trans, A, tau, C)

Berechnet Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) für seite = L oder die äquivalente rechtsseitige Multiplikation für seite = R unter Verwendung von Q aus einer RQ-Faktorisierung von A, die mit gerqf! berechnet wurde. C wird überschrieben.

source
LinearAlgebra.LAPACK.gemqrt!Function
gemqrt!(seite, trans, V, T, C)

Berechnet Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) für seite = L oder die äquivalente rechtsseitige Multiplikation für seite = R unter Verwendung von Q aus einer QR-Faktorisierung von A, die mit geqrt! berechnet wurde. C wird überschrieben.

source
LinearAlgebra.LAPACK.posv!Function
posv!(uplo, A, B) -> (A, B)

Findet die Lösung von A * X = B, wobei A eine symmetrische oder hermitesche positiv definite Matrix ist. Wenn uplo = U, wird die obere Cholesky-Zerlegung von A berechnet. Wenn uplo = L, wird die untere Cholesky-Zerlegung von A berechnet. A wird durch seine Cholesky-Zerlegung überschrieben. B wird mit der Lösung X überschrieben.

source
LinearAlgebra.LAPACK.potrf!Function
potrf!(uplo, A)

Berechnet die Cholesky-Zerlegung (obere, wenn uplo = U, untere, wenn uplo = L) der positiv definiten Matrix A. A wird überschrieben und mit einem Informationscode zurückgegeben.

source
LinearAlgebra.LAPACK.potri!Function
potri!(uplo, A)

Berechnet die Inverse der positiv definiten Matrix A, nachdem potrf! aufgerufen wurde, um ihre (obere, wenn uplo = U, untere, wenn uplo = L) Cholesky-Zerlegung zu finden.

A wird durch seine Inverse überschrieben und zurückgegeben.

source
LinearAlgebra.LAPACK.potrs!Function
potrs!(uplo, A, B)

Findet die Lösung zu A * X = B, wobei A eine symmetrische oder hermitische positiv definite Matrix ist, deren Cholesky-Zerlegung mit potrf! berechnet wurde. Wenn uplo = U, wurde die obere Cholesky-Zerlegung von A berechnet. Wenn uplo = L, wurde die untere Cholesky-Zerlegung von A berechnet. B wird mit der Lösung X überschrieben.

source
LinearAlgebra.LAPACK.pstrf!Function
pstrf!(uplo, A, tol) -> (A, piv, rank, info)

Berechnet die (obere, wenn uplo = U, untere, wenn uplo = L) pivotierte Cholesky-Zerlegung der positiv definiten Matrix A mit einer benutzerdefinierten Toleranz tol. A wird durch seine Cholesky-Zerlegung überschrieben.

Gibt A, die Pivots piv, den Rang von A und einen info-Code zurück. Wenn info = 0, war die Faktorisierung erfolgreich. Wenn info = i > 0, ist A indefinit oder rangdefizient.

source
LinearAlgebra.LAPACK.ptsv!Function
ptsv!(D, E, B)

Löst A * X = B für positiv-definite tridiagonale A. D ist die Diagonale von A und E ist die Nebendiagonale. B wird mit der Lösung X überschrieben und zurückgegeben.

source
LinearAlgebra.LAPACK.pttrf!Function
pttrf!(D, E)

Berechnet die LDLt-Faktorisierung einer positiv definiten tridiagonalen Matrix mit D als Diagonale und E als Nebendiagonale. D und E werden überschrieben und zurückgegeben.

source
LinearAlgebra.LAPACK.pttrs!Function
pttrs!(D, E, B)

Löst A * X = B für positiv definit tridiagonal A mit Diagonale D und Nebendiagonale E, nachdem die LDLt-Faktorisierung von A mit pttrf! berechnet wurde. B wird mit der Lösung X überschrieben.

source
LinearAlgebra.LAPACK.trtri!Function
trtri!(uplo, diag, A)

Findet die Inverse der (oberen, wenn uplo = U, unteren, wenn uplo = L) Dreiecksmatrix A. Wenn diag = N, hat A nicht-einheitliche Diagonalelemente. Wenn diag = U, sind alle Diagonalelemente von A eins. A wird mit seiner Inversen überschrieben.

source
LinearAlgebra.LAPACK.trtrs!Function
trtrs!(uplo, trans, diag, A, B)

Löst A * X = B (trans = N), transpose(A) * X = B (trans = T) oder adjoint(A) * X = B (trans = C) für die (obere, wenn uplo = U, untere, wenn uplo = L) dreieckige Matrix A. Wenn diag = N, hat A nicht-einheitliche Diagonalelemente. Wenn diag = U, sind alle Diagonalelemente von A eins. B wird mit der Lösung X überschrieben.

source
LinearAlgebra.LAPACK.trcon!Function
trcon!(norm, uplo, diag, A)

Findet die reziproke Konditionszahl der (oberen, wenn uplo = U, unteren, wenn uplo = L) dreieckigen Matrix A. Wenn diag = N, hat A nicht-einheitliche Diagonalelemente. Wenn diag = U, sind alle Diagonalelemente von A eins. Wenn norm = I, wird die Konditionszahl in der Unendlichkeit-Norm gefunden. Wenn norm = O oder 1, wird die Konditionszahl in der Eins-Norm gefunden.

source
LinearAlgebra.LAPACK.trevc!Function
trevc!(seite, wieviele, auswählen, T, VL = similar(T), VR = similar(T))

Findet das Eigenwertsystem einer oberen Dreiecksmatrix T. Wenn seite = R, werden die rechten Eigenvektoren berechnet. Wenn seite = L, werden die linken Eigenvektoren berechnet. Wenn seite = B, werden beide Mengen berechnet. Wenn wieviele = A, werden alle Eigenvektoren gefunden. Wenn wieviele = B, werden alle Eigenvektoren gefunden und mit VL und VR zurücktransformiert. Wenn wieviele = S, werden nur die Eigenvektoren berechnet, die den Werten in auswählen entsprechen.

source
LinearAlgebra.LAPACK.trrfs!Function
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)

Schätzt den Fehler in der Lösung von A * X = B (trans = N), transpose(A) * X = B (trans = T), adjoint(A) * X = B (trans = C) für side = L, oder die äquivalenten Gleichungen für eine rechtsseitige side = R X * A, nachdem X mit trtrs! berechnet wurde. Wenn uplo = U, ist A oberhalb triangulär. Wenn uplo = L, ist A unterhalb triangulär. Wenn diag = N, hat A nicht-einheitliche Diagonalelemente. Wenn diag = U, sind alle Diagonalelemente von A eins. Ferr und Berr sind optionale Eingaben. Ferr ist der Vorwärtsfehler und Berr ist der Rückwärtsfehler, jeweils komponentenweise.

source
LinearAlgebra.LAPACK.stev!Function
stev!(job, dv, ev) -> (dv, Zmat)

Berechnet das Eigenwertsystem für eine symmetrische tridiagonale Matrix mit dv als Diagonale und ev als Nebendiagonale. Wenn job = N, werden nur die Eigenwerte gefunden und in dv zurückgegeben. Wenn job = V, werden auch die Eigenvektoren gefunden und in Zmat zurückgegeben.

source
LinearAlgebra.LAPACK.stebz!Function
stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

Berechnet die Eigenwerte für eine symmetrische tridiagonale Matrix mit dv als Diagonale und ev als Nebendiagonale. Wenn range = A, werden alle Eigenwerte gefunden. Wenn range = V, werden die Eigenwerte im halb-offenen Intervall (vl, vu] gefunden. Wenn range = I, werden die Eigenwerte mit Indizes zwischen il und iu gefunden. Wenn order = B, werden die Eigenwerte innerhalb eines Blocks geordnet. Wenn order = E, werden sie über alle Blöcke hinweg geordnet. abstol kann als Toleranz für die Konvergenz festgelegt werden.

source
LinearAlgebra.LAPACK.stegr!Function
stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

Berechnet die Eigenwerte (jobz = N) oder Eigenwerte und Eigenvektoren (jobz = V) für eine symmetrische tridiagonale Matrix mit dv als Diagonale und ev als Nebendiagonale. Wenn range = A, werden alle Eigenwerte gefunden. Wenn range = V, werden die Eigenwerte im halb-offenen Intervall (vl, vu] gefunden. Wenn range = I, werden die Eigenwerte mit Indizes zwischen il und iu gefunden. Die Eigenwerte werden in w und die Eigenvektoren in Z zurückgegeben.

source
LinearAlgebra.LAPACK.stein!Function
stein!(dv, ev_in, w_in, iblock_in, isplit_in)

Berechnet die Eigenvektoren für eine symmetrische tridiagonale Matrix mit dv als Diagonale und ev_in als Nebendiagonale. w_in gibt die Eingabeeigenwerte an, für die entsprechende Eigenvektoren gefunden werden sollen. iblock_in gibt die Untermatrizen an, die den Eigenwerten in w_in entsprechen. isplit_in gibt die Trennpunkte zwischen den Untermatrixblöcken an.

source
LinearAlgebra.LAPACK.syconv!Function
syconv!(uplo, A, ipiv) -> (A, work)

Konvertiert eine symmetrische Matrix A (die in eine dreieckige Matrix faktorisiert wurde) in zwei Matrizen L und D. Wenn uplo = U, ist A oberhalb dreieckig. Wenn uplo = L, ist sie unterhalb dreieckig. ipiv ist der Pivotvektor aus der dreieckigen Faktorisierung. A wird durch L und D überschrieben.

source
LinearAlgebra.LAPACK.sysv!Function
sysv!(uplo, A, B) -> (B, A, ipiv)

Findet die Lösung für A * X = B für die symmetrische Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert. B wird durch die Lösung X überschrieben. A wird durch ihre Bunch-Kaufman-Faktorisierung überschrieben. ipiv enthält Pivotierungsinformationen über die Faktorisierung.

source
LinearAlgebra.LAPACK.sytrf!Function
sytrf!(uplo, A) -> (A, ipiv, info)

Berechnet die Bunch-Kaufman-Faktorisierung einer symmetrischen Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert.

Gibt A zurück, das durch die Faktorisierung überschrieben wird, einen Pivot-Vektor ipiv und den Fehlercode info, der eine nicht-negative ganze Zahl ist. Wenn info positiv ist, ist die Matrix singulär und der diagonale Teil der Faktorisierung ist genau null an der Position info.

source
sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

Berechnet die Bunch-Kaufman-Faktorisierung einer symmetrischen Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert.

Gibt A zurück, das durch die Faktorisierung überschrieben wird, den Pivot-Vektor ipiv und den Fehlercode info, der eine nicht-negative ganze Zahl ist. Wenn info positiv ist, ist die Matrix singulär und der diagonale Teil der Faktorisierung ist genau null an der Position info.

source
LinearAlgebra.LAPACK.sytri!Function
sytri!(uplo, A, ipiv)

Berechnet die Inverse einer symmetrischen Matrix A unter Verwendung der Ergebnisse von sytrf!. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert. A wird durch seine Inverse überschrieben.

source
LinearAlgebra.LAPACK.sytrs!Function
sytrs!(uplo, A, ipiv, B)

Löst die Gleichung A * X = B für eine symmetrische Matrix A unter Verwendung der Ergebnisse von sytrf!. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert. B wird durch die Lösung X überschrieben.

source
LinearAlgebra.LAPACK.hesv!Function
hesv!(uplo, A, B) -> (B, A, ipiv)

Findet die Lösung von A * X = B für die hermitische Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L ist, wird die untere Hälfte gespeichert. B wird durch die Lösung X überschrieben. A wird durch ihre Bunch-Kaufman-Faktorisierung überschrieben. ipiv enthält Pivotierungsinformationen über die Faktorisierung.

source
LinearAlgebra.LAPACK.hetrf!Function
hetrf!(uplo, A) -> (A, ipiv, info)

Berechnet die Bunch-Kaufman-Faktorisierung einer hermiteschen Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert.

Gibt A zurück, das durch die Faktorisierung überschrieben wird, einen Pivot-Vektor ipiv und den Fehlercode info, der eine nicht-negative ganze Zahl ist. Wenn info positiv ist, ist die Matrix singulär und der diagonale Teil der Faktorisierung ist genau null an der Position info.

source
hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

Berechnet die Bunch-Kaufman-Faktorisierung einer hermiteschen Matrix A. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert.

Gibt A zurück, das durch die Faktorisierung überschrieben wird, den Pivot-Vektor ipiv und den Fehlercode info, der eine nicht-negative ganze Zahl ist. Wenn info positiv ist, ist die Matrix singulär und der diagonale Teil der Faktorisierung ist genau null an der Position info.

source
LinearAlgebra.LAPACK.hetri!Function
hetri!(uplo, A, ipiv)

Berechnet die Inverse einer hermiteschen Matrix A unter Verwendung der Ergebnisse von sytrf!. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert. A wird durch seine Inverse überschrieben.

source
LinearAlgebra.LAPACK.hetrs!Function
hetrs!(uplo, A, ipiv, B)

Löst die Gleichung A * X = B für eine hermitesche Matrix A unter Verwendung der Ergebnisse von sytrf!. Wenn uplo = U, wird die obere Hälfte von A gespeichert. Wenn uplo = L, wird die untere Hälfte gespeichert. B wird durch die Lösung X überschrieben.

source
LinearAlgebra.LAPACK.syev!Function
syev!(jobz, uplo, A)

Findet die Eigenwerte (jobz = N) oder Eigenwerte und Eigenvektoren (jobz = V) einer symmetrischen Matrix A. Wenn uplo = U, wird die obere Dreiecksmatrix von A verwendet. Wenn uplo = L, wird die untere Dreiecksmatrix von A verwendet.

source
LinearAlgebra.LAPACK.syevr!Function
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

Findet die Eigenwerte (jobz = N) oder Eigenwerte und Eigenvektoren (jobz = V) einer symmetrischen Matrix A. Wenn uplo = U, wird die obere Dreiecksmatrix von A verwendet. Wenn uplo = L, wird die untere Dreiecksmatrix von A verwendet. Wenn range = A, werden alle Eigenwerte gefunden. Wenn range = V, werden die Eigenwerte im halb-offenen Intervall (vl, vu] gefunden. Wenn range = I, werden die Eigenwerte mit Indizes zwischen il und iu gefunden. abstol kann als Toleranz für die Konvergenz festgelegt werden.

Die Eigenwerte werden in W und die Eigenvektoren in Z zurückgegeben.

source
LinearAlgebra.LAPACK.syevd!Function
syevd!(jobz, uplo, A)

Findet die Eigenwerte (jobz = N) oder Eigenwerte und Eigenvektoren (jobz = V) einer symmetrischen Matrix A. Wenn uplo = U, wird die obere Dreiecksmatrix von A verwendet. Wenn uplo = L, wird die untere Dreiecksmatrix von A verwendet.

Verwendet die Divide-and-Conquer-Methode, anstelle der QR-Iteration, die von syev! verwendet wird, oder mehrere relativ robuste Darstellungen, die von syevr! verwendet werden. Siehe James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008) für einen Vergleich der Genauigkeit und Leistung verschiedener Methoden.

source
LinearAlgebra.LAPACK.sygvd!Function
sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

Findet die verallgemeinerten Eigenwerte (jobz = N) oder Eigenwerte und Eigenvektoren (jobz = V) einer symmetrischen Matrix A und einer symmetrisch positiv definiten Matrix B. Wenn uplo = U, werden die oberen Dreiecke von A und B verwendet. Wenn uplo = L, werden die unteren Dreiecke von A und B verwendet. Wenn itype = 1 ist, besteht das zu lösende Problem aus A * x = lambda * B * x. Wenn itype = 2 ist, besteht das zu lösende Problem aus A * B * x = lambda * x. Wenn itype = 3 ist, besteht das zu lösende Problem aus B * A * x = lambda * x.

source
LinearAlgebra.LAPACK.bdsqr!Function
bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

Berechnet die singuläre Wertzerlegung einer bidiagonalen Matrix mit d auf der Diagonalen und e_ auf der Nebendiagonalen. Wenn uplo = U, ist e_ die Superdiagonale. Wenn uplo = L, ist e_ die Subdiagonale. Kann optional auch das Produkt Q' * C berechnen.

Gibt die singulären Werte in d zurück, und die Matrix C wird mit Q' * C überschrieben.

source
LinearAlgebra.LAPACK.bdsdc!Function
bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

Berechnet die singuläre Wertzerlegung einer bidiagonalen Matrix mit d auf der Diagonalen und e_ auf der Nebendiagonalen unter Verwendung einer Teile-und-herrsche-Methode. Wenn uplo = U, ist e_ die Superdiagonale. Wenn uplo = L, ist e_ die Subdiagonale. Wenn compq = N, werden nur die singulären Werte gefunden. Wenn compq = I, werden die singulären Werte und Vektoren gefunden. Wenn compq = P, werden die singulären Werte und Vektoren in kompakter Form gefunden. Funktioniert nur für reale Typen.

Gibt die singulären Werte in d zurück, und wenn compq = P, die kompakten singulären Vektoren in iq.

source
LinearAlgebra.LAPACK.gecon!Function
gecon!(normtype, A, anorm)

Findet die reziproke Konditionszahl der Matrix A. Wenn normtype = I, wird die Konditionszahl in der Unendlichkeit-Norm gefunden. Wenn normtype = O oder 1, wird die Konditionszahl in der Eins-Norm gefunden. A muss das Ergebnis von getrf! sein und anorm ist die Norm von A in der relevanten Norm.

source
LinearAlgebra.LAPACK.gehrd!Function
gehrd!(ilo, ihi, A) -> (A, tau)

Konvertiert eine Matrix A in Hessenberg-Form. Wenn A mit gebal! balanciert ist, dann sind ilo und ihi die Ausgaben von gebal!. Andernfalls sollten sie ilo = 1 und ihi = size(A,2) sein. tau enthält die elementaren Reflektoren der Faktorisierung.

source
LinearAlgebra.LAPACK.orghr!Function
orghr!(ilo, ihi, A, tau)

Findet explizit Q, die orthogonale/einheitliche Matrix von gehrd!. ilo, ihi, A und tau müssen den Eingaben/Ausgaben von gehrd! entsprechen.

source
LinearAlgebra.LAPACK.gees!Function
gees!(jobvs, A) -> (A, vs, w)

Berechnet die Eigenwerte (jobvs = N) oder die Eigenwerte und Schur-Vektoren (jobvs = V) der Matrix A. A wird durch ihre Schur-Form überschrieben.

Gibt A, vs, das die Schur-Vektoren enthält, und w, das die Eigenwerte enthält, zurück.

source
LinearAlgebra.LAPACK.gges!Function
gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Berechnet die verallgemeinerten Eigenwerte, die verallgemeinerte Schur-Form, linke Schur-Vektoren (jobsvl = V) oder rechte Schur-Vektoren (jobvsr = V) von A und B.

Die verallgemeinerten Eigenwerte werden in alpha und beta zurückgegeben. Die linken Schur-Vektoren werden in vsl und die rechten Schur-Vektoren werden in vsr zurückgegeben.

source
LinearAlgebra.LAPACK.gges3!Function
gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Berechnet die verallgemeinerten Eigenwerte, die verallgemeinerte Schur-Form, linke Schur-Vektoren (jobsvl = V) oder rechte Schur-Vektoren (jobvsr = V) von A und B unter Verwendung eines blockierten Algorithmus. Diese Funktion erfordert LAPACK 3.6.0.

Die verallgemeinerten Eigenwerte werden in alpha und beta zurückgegeben. Die linken Schur-Vektoren werden in vsl und die rechten Schur-Vektoren werden in vsr zurückgegeben.

source
LinearAlgebra.LAPACK.trexc!Function
trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

Ordnen Sie die Schur-Faktorisierung T einer Matrix neu, sodass der diagonale Block von T mit der Zeilenindex ifst an die Zeilenindex ilst verschoben wird. Wenn compq = V, werden die Schur-Vektoren Q neu angeordnet. Wenn compq = N, werden sie nicht modifiziert. Die 4-Argumente-Methode ruft die 5-Argumente-Methode mit compq = V auf.

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)

Ordnet die Schur-Faktorisierung einer Matrix neu und findet optional reziproke Konditionszahlen. Wenn job = N, werden keine Konditionszahlen gefunden. Wenn job = E, wird nur die Konditionszahl für diesen Cluster von Eigenwerten gefunden. Wenn job = V, wird nur die Konditionszahl für den invarianten Unterraum gefunden. Wenn job = B, werden die Konditionszahlen für den Cluster und den Unterraum gefunden. Wenn compq = V, werden die Schur-Vektoren Q aktualisiert. Wenn compq = N, werden die Schur-Vektoren nicht modifiziert. select bestimmt, welche Eigenwerte im Cluster sind. Die 3-Argument-Methode ruft die 5-Argument-Methode mit job = N und compq = V auf.

Gibt T, Q, neu angeordnete Eigenwerte in w, die Konditionszahl des Clusters von Eigenwerten s und die Konditionszahl des invarianten Unterraums sep zurück.

source
LinearAlgebra.LAPACK.tgsen!Function
tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

Ordnet die Vektoren einer verallgemeinerten Schur-Zerlegung neu. select gibt die Eigenwerte in jedem Cluster an.

source
LinearAlgebra.LAPACK.trsyl!Function
trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

Löst die Sylvester-Matrixgleichung A * X +/- X * B = scale*C, wobei A und B beide quasi-obere dreieckige Matrizen sind. Wenn transa = N, wird A nicht modifiziert. Wenn transa = T, wird A transponiert. Wenn transa = C, wird A konjugiert transponiert. Ähnlich für transb und B. Wenn isgn = 1, wird die Gleichung A * X + X * B = scale * C gelöst. Wenn isgn = -1, wird die Gleichung A * X - X * B = scale * C gelöst.

Gibt X (überschreibt C) und scale zurück.

source
LinearAlgebra.LAPACK.hseqr!Function
hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

Berechnet alle Eigenwerte und (optional) die Schur-Faktorisierung einer Matrix, die auf Hessenberg-Form reduziert ist. Wenn H mit gebal! balanciert ist, dann sind ilo und ihi die Ausgaben von gebal!. Andernfalls sollten sie ilo = 1 und ihi = size(H,2) sein. tau enthält die elementaren Reflektoren der Faktorisierung.

source
  • ACM832Davis, Timothy A. (2004b). Algorithm 832: UMFPACK V4.3–-eine unsymmetrische Muster-Multifrontal-Methode. 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 und C Van Loan, "Die WY-Darstellung für Produkte von Householder-Matrizen", SIAM J Sci Stat Comput 8 (1987), s2-s13. doi:10.1137/0908009
  • Schreiber1989R Schreiber und C Van Loan, "Eine speichereffiziente WY-Darstellung für Produkte von Householder-Transformationen", SIAM J Sci Stat Comput 10 (1989), 53-57. doi:10.1137/0910005
  • ACM933Foster, L. V., & Davis, T. A. (2013). Algorithmus 933: Zuverlässige Berechnung des numerischen Rangs, der Nullraum-Basen, der Pseudoinversen Lösungen und der grundlegenden Lösungen unter Verwendung von SuitesparseQR. ACM Trans. Math. Softw., 40(1). doi:10.1145/2513109.2513116
  • Bunch1977J R Bunch und L Kaufman, Einige stabile Methoden zur Berechnung der Inertia und zur Lösung symmetrischer linearer Systeme, 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 und 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 und Nicholas J. Higham, "Verbesserte inverse Skalierungs- und Quadraturalgorithmen für den Matrixlogarithmus", SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553
  • AHR13Awad H. Al-Mohy, Nicholas J. Higham und Samuel D. Relton, "Berechnung der Fréchet-Ableitung des Matrixlogarithmus und Schätzung der Konditionszahl", SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
  • BH83Åke Björck und 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 und Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_2Mary Aprahamian und 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 und Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_4Mary Aprahamian und Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_5Mary Aprahamian und Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_6Mary Aprahamian und Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577