Linear Algebra

다차원 배열에 대한 지원의 일환으로, Julia는 using LinearAlgebra를 통해 로드할 수 있는 많은 일반적이고 유용한 선형 대수 연산의 네이티브 구현을 제공합니다. tr, det, 및 inv와 같은 기본 연산이 모두 지원됩니다:

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

고유값이나 고유벡터를 찾는 것과 같은 다른 유용한 작업들:

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

또한, Julia는 선형 해결 또는 행렬 지수화와 같은 문제를 가속화하는 데 사용할 수 있는 많은 factorizations를 제공합니다. 이는 문제에 더 적합한 형태로 행렬을 사전 인수 분해하여 성능이나 메모리 측면에서 유리하게 만들 수 있습니다. 자세한 내용은 factorize에 대한 문서를 참조하십시오. 예를 들어:

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

A가 에르미트가 아니고, 대칭도 아니며, 삼각형, 삼중 대각선 또는 이중 대각선도 아니기 때문에 LU 분해가 우리가 할 수 있는 최선일 수 있습니다. 다음과 비교하십시오:

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

여기서 줄리아는 B가 실제로 대칭임을 감지하고 더 적절한 인수분해를 사용했습니다. 종종 특정 속성을 가진 행렬에 대해 더 효율적인 코드를 작성하는 것이 가능합니다. 예를 들어, 대칭이거나 삼중 대각선인 경우입니다. 줄리아는 이러한 속성을 가진 행렬을 "태그"할 수 있도록 몇 가지 특수 유형을 제공합니다. 예를 들어:

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는 (실수) 대칭 행렬로 태그가 지정되었으므로, 고유 분해나 행렬-벡터 곱과 같은 이후의 작업을 수행할 때, 그 절반만 참조함으로써 효율성을 찾을 수 있습니다. 예를 들어:

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

\ 연산자는 여기서 선형 솔루션을 수행합니다. 왼쪽 나눗셈 연산자는 매우 강력하며, 모든 종류의 선형 방정식 시스템을 해결할 수 있을 만큼 유연한 간결하고 읽기 쉬운 코드를 작성하기가 쉽습니다.

Special matrices

Matrices with special symmetries and structures는 선형 대수에서 자주 발생하며 다양한 행렬 분해와 자주 연관됩니다. Julia는 특정 행렬 유형을 위해 특별히 개발된 전문 루틴을 사용하여 빠른 계산을 가능하게 하는 다양한 특수 행렬 유형의 풍부한 컬렉션을 제공합니다.

다음 표는 Julia에서 구현된 특수 행렬의 유형과 LAPACK에서 이를 위한 다양한 최적화된 방법에 대한 후크가 사용 가능한지 여부를 요약합니다.

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

Elementary operations

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

전설:

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

전설:

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

A UniformScaling 연산자는 스칼라와 항등 연산자 λ*I를 나타냅니다. 항등 연산자 I는 상수로 정의되며 UniformScaling의 인스턴스입니다. 이러한 연산자의 크기는 일반적이며 이진 연산 +, -, *\의 다른 행렬과 일치합니다. A+IA-I의 경우, A는 정방행렬이어야 합니다. 항등 연산자 I와의 곱셈은 noop이며 (스케일링 인자가 1인지 확인하는 것을 제외하고) 따라서 거의 오버헤드가 없습니다.

UniformScaling 연산자를 사용하는 방법:

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

같은 A에 대해 다른 μ에 대한 (A+μI)x = b 형태의 많은 시스템을 해결해야 하는 경우, 먼저 hessenberg 함수를 통해 A의 헤센베르크 분해 F를 계산하는 것이 유리할 수 있습니다. F가 주어지면, Julia는 (F+μ*I) \ b (이는 (A+μ*I)x \ b와 동등함)에 대한 효율적인 알고리즘과 행렬식과 같은 관련 연산을 사용합니다.

Matrix factorizations

Matrix factorizations (a.k.a. matrix decompositions) 행렬을 행렬의 곱으로 분해하는 것을 계산하며, 이는 (수치) 선형 대수의 중심 개념 중 하나입니다.

다음 표는 Julia에서 구현된 행렬 분해의 유형을 요약한 것입니다. 관련된 방법에 대한 세부정보는 선형 대수 문서의 Standard functions 섹션에서 확인할 수 있습니다.

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

Factorization 객체의 어드전트와 전치는 각각 AdjointFactorizationTransposeFactorization 객체로 지연 래핑됩니다. 일반적으로, 실수 Factorization의 전치는 AdjointFactorization으로 래핑됩니다.

Orthogonal matrices (AbstractQ)

일부 행렬 분해는 직교/유니타리 "행렬" 요소를 생성합니다. 이러한 분해에는 qr 호출에서 얻은 QR 관련 분해, 즉 QR, QRCompactWYQRPivoted, hessenberg 호출에서 얻은 헤센베르크 분해, 그리고 lq에서 얻은 LQ 분해가 포함됩니다. 이러한 직교/유니타리 요소는 행렬 표현을 허용하지만, 성능 및 메모리 이유로 내부 표현은 다릅니다. 따라서 이들은 행렬 기반의 함수 기반 선형 연산자로 보는 것이 더 적절합니다. 특히, 예를 들어 행렬 표현의 열을 읽는 것은 메모리에서 데이터를 단순히 읽어오는 것이 아니라 "행렬"-벡터 곱셈 코드를 실행해야 합니다(가능한 경우 벡터의 일부를 구조적 제로로 채우는 것). 다른 비삼각형 행렬 유형과의 또 다른 명확한 구별은 기본 곱셈 코드가 곱셈 중에 제자리 수정을 허용한다는 점입니다. 또한 4d61726b646f776e2e436f64652822222c202271722229_40726566, 4d61726b646f776e2e436f64652822222c202268657373656e626572672229_407265664d61726b646f776e2e436f64652822222c20226c712229_40726566를 통해 생성된 특정 AbstractQ 하위 유형의 객체는 상황에 따라 정사각형 또는 직사각형 행렬처럼 동작할 수 있습니다:

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

이 밀집 또는 구조화된 행렬과의 구별로 인해, 추상 AbstractQ 타입은 AbstractMatrix의 하위 타입이 아니며, 대신 자체 타입 계층을 가지고 있습니다. AbstractQ를 하위 타입으로 하는 사용자 정의 타입은 다음 인터페이스가 충족되면 일반적인 대체 기능에 의존할 수 있습니다. 예를 들어,

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

오버로드 제공하기

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

eltype 승격이 관심이 없다면, convert 메소드는 필요하지 않습니다. 기본적으로 convert(::Type{AbstractQ{T}}, Q::AbstractQ{T})Q 자체를 반환합니다. AbstractQ 타입 객체의 어드전트는 AdjointQ 래퍼 타입으로 지연 래핑되며, 이는 자체 LinearAlgebra.lmul!LinearAlgebra.rmul! 메소드를 필요로 합니다. 이러한 메소드 집합을 고려할 때, 어떤 Q::MyQ도 행렬처럼 사용할 수 있으며, 특히 곱셈 맥락에서 사용되는 것이 바람직합니다: 스칼라, 벡터 및 행렬과의 왼쪽 및 오른쪽 곱셈을 위한 *를 통한 곱셈, Matrix(Q) (또는 Q*I)를 통해 Q의 행렬 표현을 얻고, 행렬 표현에 인덱싱하는 모든 작업이 가능합니다. 반면, 덧셈 및 뺄셈, 그리고 행렬 표현의 요소에 대한 브로드캐스팅은 비효율적이기 때문에 실패합니다. 이러한 사용 사례에 대해서는 행렬 표현을 미리 계산하고 향후 재사용을 위해 캐시하는 것을 고려하십시오.

Pivoting Strategies

줄리아의 matrix factorizations 여러 개는 pivoting를 지원하며, 이는 수치적 안정성을 개선하는 데 사용할 수 있습니다. 사실, LU 분해와 같은 일부 행렬 분해는 피벗팅 없이 실패할 수 있습니다.

피벗팅에서 먼저, 피벗팅 전략에 따라 좋은 수치적 특성을 가진 pivot element가 선택됩니다. 다음으로, 원래 행렬의 행과 열이 재배열되어 선택된 요소가 후속 계산을 위해 제자리에 오도록 합니다. 또한, 이 과정은 인수 분해의 각 단계에 대해 반복됩니다.

결과적으로, 기존의 행렬 인수 외에도 피벗 인수 분해 방식의 출력에는 순열 행렬도 포함됩니다.

다음은 Julia에서 구현된 피벗 전략에 대한 간략한 설명입니다. 모든 행렬 분해가 이를 지원하는 것은 아닙니다. 지원되는 피벗 전략에 대한 자세한 내용은 해당 matrix factorization의 문서를 참조하십시오.

또한 LinearAlgebra.ZeroPivotException를 참조하세요.

LinearAlgebra.NoPivotType
NoPivot

피벗이 수행되지 않습니다. LU 분해와 같은 행렬 분해는 피벗 없이 실패할 수 있으며, 반올림 오류에 직면한 부동 소수점 행렬에 대해 수치적으로 불안정할 수도 있습니다. 이 피벗 전략은 주로 교육적 목적에 유용합니다.

source
LinearAlgebra.RowNonZeroType
RowNonZero

남은 행에서 첫 번째 비영(非零) 요소가 피벗 요소로 선택됩니다.

부동 소수점 행렬의 경우, 결과 LU 알고리즘은 수치적으로 불안정하므로 주의해야 합니다. 이 전략은 주로 수작업 계산(일반적으로 이 전략을 사용함)이나 반올림 오류에 영향을 받지 않는 다른 대수적 유형(예: 유리수)과 비교하는 데 유용합니다. 그렇지 않으면, 가우스 소거법에서는 기본 RowMaximum 피벗 전략이 일반적으로 선호되어야 합니다.

행렬의 요소 유형iszero 메서드를 허용해야 합니다.

source
LinearAlgebra.RowMaximumType
RowMaximum

남은 행에서 최대 크기의 요소가 피벗 요소로 선택됩니다. 이것은 부동 소수점 행렬의 LU 분해에 대한 기본 전략이며, 때때로 "부분 피벗팅" 알고리즘이라고도 합니다.

행렬의 요소 유형abs 메서드를 허용해야 하며, 그 결과 유형은 < 메서드를 허용해야 합니다.

source
LinearAlgebra.ColumnNormType
ColumnNorm

최대 노름을 가진 열이 이후 계산에 사용됩니다. 이는 피벗 QR 분해에 사용됩니다.

행렬의 요소 유형normabs 메서드를 허용해야 하며, 각 결과 유형은 < 메서드를 허용해야 합니다.

source

Standard functions

줄리아의 선형 대수 함수는 주로 LAPACK의 함수를 호출하여 구현됩니다. 희소 행렬 분해는 SuiteSparse의 함수를 호출합니다. 다른 희소 솔버는 줄리아 패키지로 제공됩니다.

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

행렬 곱셈.

예제

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

3개 또는 4개의 행렬의 연쇄 곱셈은 배열의 크기를 기반으로 가장 효율적인 순서로 수행됩니다. 즉, (A * B) * C (3개의 밀집 행렬을 사용)에서 필요한 스칼라 곱셈의 수는 A * (B * C)와 비교되어 이 중 어떤 것을 실행할지 선택합니다.

마지막 인자가 벡터이거나 첫 번째 인자가 전치된 벡터인 경우, 이러한 요소를 먼저 처리하는 것이 효율적입니다. 특히 x' * B * y는 일반적인 열 우선 B::Matrix에 대해 (x' * B) * y를 의미합니다. dot(x, B, y)와는 달리, 이는 중간 배열을 할당합니다.

첫 번째 또는 마지막 인자가 숫자인 경우, 이는 행렬 곱셈과 융합되어 5-인자 mul!를 사용합니다.

또한 muladd, dot를 참조하십시오.

Julia 1.7

이러한 최적화는 최소한 Julia 1.7이 필요합니다.

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

다항 알고리즘을 사용한 행렬 나누기. 입력 행렬 AB에 대해 결과 XA*X == B가 성립하도록 하며, A가 정사각형일 때 적용됩니다. 사용되는 솔버는 A의 구조에 따라 다릅니다. A가 상삼각형 또는 하삼각형(또는 대각선)인 경우, A의 인수분해가 필요 없으며 시스템은 전방 또는 후방 대체를 통해 해결됩니다. 비삼각형 정사각형 행렬의 경우, LU 인수분해가 사용됩니다.

직사각형 A의 경우 결과는 A의 피벗 QR 인수분해와 R 인수를 기반으로 한 A의 랭크 추정에 의해 계산된 최소-노름 최소 제곱 솔루션입니다.

A가 희소한 경우 유사한 다항 알고리즘이 사용됩니다. 비정방 행렬의 경우, LDLt 인수분해는 수치 인수분해 중 피벗팅을 사용하지 않으므로 절대 가역 행렬에 대해서도 절차가 실패할 수 있습니다.

참고: factorize, pinv.

예제

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

행렬 오른쪽 나누기: A / B(B' \ A')'와 동등하며, 여기서 \는 왼쪽 나누기 연산자입니다. 정방 행렬의 경우, 결과 XA == X*B를 만족합니다.

또한: rdiv!.

예제

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

입력 행렬에 하나 이상의 0 값 고유값이 있을 때 발생하는 예외로, 비가역적입니다. 이러한 행렬을 포함하는 선형 방정식은 계산할 수 없습니다. info 필드는 (하나의) 특이 값의 위치를 나타냅니다.

source
LinearAlgebra.PosDefExceptionType
PosDefException

입력 행렬이 양의 정부호이지 않을 때 발생하는 예외입니다. 일부 선형 대수 함수 및 분해는 양의 정부호 행렬에만 적용 가능합니다. info 필드는 0보다 작거나 같은 고유값 중 하나의 위치를 나타냅니다.

source
LinearAlgebra.ZeroPivotExceptionType
ZeroPivotException <: Exception

행렬 분해/해결 과정에서 피벗(대각선) 위치에 0이 발생하여 진행할 수 없을 때 발생하는 예외입니다. 이는 행렬이 특이하다는 것을 의미하지 않을 수 있습니다: 변수를 재배치하여 잘못된 0 피벗을 제거할 수 있는 피벗 LU와 같은 다른 분해로 전환하는 것이 유익할 수 있습니다. info 필드는 0 피벗 중 하나의 위치를 나타냅니다.

source
LinearAlgebra.RankDeficientExceptionType
RankDeficientException

입력 행렬이 랭크 결핍일 때 발생하는 예외입니다. Cholesky 분해와 같은 일부 선형 대수 함수는 랭크 결핍이 아닌 행렬에만 적용됩니다. info 필드는 행렬의 계산된 랭크를 나타냅니다.

source
LinearAlgebra.LAPACKExceptionType
LAPACKException

일반 LAPACK 예외는 LAPACK 함수에 대한 직접 호출 중 또는 LAPACK 함수를 내부적으로 사용하는 다른 함수에 대한 호출 중에 발생하며, 이러한 함수는 전문화된 오류 처리가 부족합니다. info 필드는 기본 오류에 대한 추가 정보를 포함하며 호출된 LAPACK 함수에 따라 다릅니다.

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

두 벡터 간의 내적을 계산합니다. 복소 벡터의 경우, 첫 번째 벡터는 켤레화됩니다.

dot은 요소에 대해 dot이 정의되어 있는 한, 모든 차원의 배열을 포함한 임의의 반복 가능한 객체에서도 작동합니다.

dot은 의미적으로 sum(dot(vx,vy) for (vx,vy) in zip(x, y))와 동등하지만, 인수는 동일한 길이를 가져야 한다는 추가 제한이 있습니다.

x ⋅ y (여기서 는 REPL에서 \cdot를 탭 완성하여 입력할 수 있습니다)는 dot(x, y)의 동의어입니다.

예제

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)

두 벡터 xy 사이의 일반화된 내적 dot(x, A*y)를 계산하되, A*y의 중간 결과를 저장하지 않습니다. 두 인수 dot(_,_)와 마찬가지로, 이 함수는 재귀적으로 작동합니다. 또한, 복소 벡터의 경우 첫 번째 벡터는 켤레화됩니다.

Julia 1.4

세 인수 dot는 최소한 Julia 1.4가 필요합니다.

예제

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)

두 3-벡터의 외적을 계산합니다.

예제

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)

yx * α + y로 덮어쓰고 y를 반환합니다. xy가 동일한 축을 가지면, 이는 y .+= x .* a와 동등합니다.

예제

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)

yx * α + y * β로 덮어쓰고 y를 반환합니다. xy가 동일한 축을 가지면, y .= x .* a .+ y .* β와 동일합니다.

예제

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)

xc*x + s*y로, y-conj(s)*x + c*y로 덮어씁니다. xy를 반환합니다.

Julia 1.5

rotate!는 최소한 Julia 1.5가 필요합니다.

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

xc*x + s*y로, yconj(s)*x - c*y로 덮어씁니다. xy를 반환합니다.

Julia 1.5

reflect!는 최소한 Julia 1.5가 필요합니다.

source
LinearAlgebra.factorizeFunction
factorize(A)

입력 행렬의 유형에 따라 A의 편리한 인수 분해를 계산합니다. factorizeA가 일반 행렬로 전달되면 대칭/삼각형/etc.인지 확인합니다. factorizeA의 각 요소를 확인하여 각 속성을 검증/배제합니다. 대칭/삼각형 구조를 배제할 수 있는 즉시 단축 회로를 사용합니다. 반환 값은 여러 시스템을 효율적으로 해결하는 데 재사용할 수 있습니다. 예를 들어: A=factorize(A); x=A\b; y=A\C.

A의 속성인수 분해 유형
양의 정부호Cholesky (see cholesky)
밀집 대칭/에르미트Bunch-Kaufman (see bunchkaufman)
희소 대칭/에르미트LDLt (see ldlt)
삼각형삼각형
대각선대각선
이대각선이대각선
삼중대각선LU (see lu)
대칭 실수 삼중대각선LDLt (see ldlt)
일반 정사각형LU (see lu)
일반 비정사각형QR (see qr)

예를 들어 factorize가 에르미트 양의 정부호 행렬에 호출되면, factorize는 Cholesky 인수 분해를 반환합니다.

예제

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는 A가 이미 인수 분해되었는지 확인합니다
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

이것은 이제 다른 선형 대수 함수(예: 고유값 해결기)에 전달될 수 있는 5×5 Bidiagonal{Float64}를 반환하며, 이 함수는 Bidiagonal 유형에 대한 특수화된 방법을 사용할 것입니다.

source
LinearAlgebra.DiagonalType
Diagonal(V::AbstractVector)

V를 대각선으로 하는 지연 행렬을 생성합니다.

지연 단위 행렬 I에 대한 UniformScaling, 조밀한 행렬을 만들기 위한 diagm, 대각선 요소를 추출하기 위한 diag도 참조하세요.

예제

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

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

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

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

한 열 행렬은 벡터처럼 처리되지 않고, 대신 1-요소 diag(A)를 추출하는 Diagonal(A::AbstractMatrix) 메서드를 호출합니다:

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

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

행렬 A의 주 대각선으로부터 행렬을 구성합니다. 입력 행렬 A는 직사각형일 수 있지만, 출력은 정사각형이 됩니다.

예제

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)

길이 n의 초기화되지 않은 Diagonal{T}를 생성합니다. undef를 참조하세요.

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

주어진 대각선(dv) 및 비대각선(ev) 벡터를 사용하여 상부(uplo=:U) 또는 하부(uplo=:L) 이중 대각 행렬을 구성합니다. 결과는 Bidiagonal 유형이며 효율적인 특수 선형 솔버를 제공하지만, convert(Array, _) (또는 짧게 Array(_))를 사용하여 일반 행렬로 변환할 수 있습니다. ev의 길이는 dv의 길이보다 하나 적어야 합니다.

예제

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는 첫 번째 초대각선에 있습니다.
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

julia> Bl = Bidiagonal(dv, ev, :L) # ev는 첫 번째 아대각선에 있습니다.
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 7  2  ⋅  ⋅
 ⋅  8  3  ⋅
 ⋅  ⋅  9  4
source
Bidiagonal(A, uplo::Symbol)

주어진 행렬 A의 주 대각선과 첫 번째 초대각선(만약 uplo=:U인 경우) 또는 첫 번째 아랫대각선(만약 uplo=:L인 경우)으로부터 Bidiagonal 행렬을 생성합니다.

예제

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) # A의 주 대각선과 첫 번째 초대각선을 포함
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # 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

대각선(dv)과 첫 번째 하위/상위 대각선(ev)으로부터 대칭 삼대각 행렬을 구성합니다. 결과는 SymTridiagonal 유형이며, 효율적인 특수 고유값 솔버를 제공하지만 convert(Array, _) (또는 짧게 Array(_))를 사용하여 일반 행렬로 변환할 수 있습니다.

SymTridiagonal 블록 행렬의 경우, dv의 요소는 대칭화됩니다. 인수 ev는 상위 대각선으로 해석됩니다. 하위 대각선의 블록은 해당 상위 대각선 블록의 (구현된) 전치입니다.

예제

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)

대칭 행렬 A의 대각선과 첫 번째 초대각선으로부터 대칭 삼대각 행렬을 구성합니다.

예제

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

첫 번째 하위 대각선, 대각선 및 첫 번째 상위 대각선으로부터 삼중 대각 행렬을 구성합니다. 결과는 Tridiagonal 유형이며 효율적인 특수 선형 솔버를 제공하지만 convert(Array, _) (또는 짧게 Array(_))를 사용하여 일반 행렬로 변환할 수 있습니다. dldu의 길이는 d의 길이보다 하나 짧아야 합니다.

Note

하위 대각선 dl과 상위 대각선 du는 서로 별칭을 가져서는 안 됩니다. 별칭이 감지되면 생성자는 du의 복사본을 인수로 사용합니다.

예제

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)

행렬 A의 첫 번째 하삼각 대각선, 대각선 및 첫 번째 상삼각 대각선으로부터 삼대각 행렬을 구성합니다.

예제

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

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

행렬 A의 상삼각형(만약 uplo = :U인 경우) 또는 하삼각형(만약 uplo = :L인 경우)의 Symmetric 뷰를 생성합니다.

Symmetric 뷰는 주로 실수 대칭 행렬에 유용하며, 이 행렬에 대해 특화된 알고리즘(예: 고유 문제 해결을 위한)이 Symmetric 타입에 대해 활성화됩니다. 더 일반적으로, 실수 행렬에 대해 Symmetric과 사실상 동등하지만 복소수 행렬에도 유용한 에르미트 행렬 A == A'에 대해서는 Hermitian(A)도 참조하십시오. (복소수 Symmetric 행렬은 지원되지만 특화된 알고리즘이 거의 없습니다.)

실수 행렬의 대칭 부분을 계산하거나, 더 일반적으로 실수 또는 복소수 행렬 A의 에르미트 부분 (A + A') / 2를 계산하려면 hermitianpart를 사용하십시오.

예제

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

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

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

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

SupperA가 대칭 행렬(예: A == transpose(A))이 아닌 한 Slower와 같지 않음을 유의하십시오.

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

행렬 A의 상삼각형(만약 uplo = :U인 경우) 또는 하삼각형(만약 uplo = :L인 경우)의 Hermitian 뷰를 생성합니다.

A의 Hermitian 부분을 계산하려면 hermitianpart를 사용하세요.

예제

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

HupperA가 자체적으로 Hermitian이 아닌 한 Hlower와 같지 않습니다(예: A == adjoint(A)인 경우).

대각선의 모든 비실수 부분은 무시됩니다.

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

행렬 ALowerTriangular 뷰를 생성합니다.

예제

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)

행렬 AUpperTriangular 뷰를 생성합니다.

예제

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)

행렬 AUnitLowerTriangular 뷰를 생성합니다. 이러한 뷰는 Aeltypeoneunit을 대각선에 가집니다.

예제

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)

행렬 AUnitUpperTriangular 뷰를 생성합니다. 이러한 뷰는 Aeltypeoneunit을 대각선에 가집니다.

예제

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)

행렬 AUpperHessenberg 뷰를 생성합니다. 첫 번째 부대각선 아래의 A의 항목은 무시됩니다.

Julia 1.3

이 유형은 Julia 1.3에 추가되었습니다.

H \ b, det(H) 및 유사한 것들에 대해 효율적인 알고리즘이 구현되어 있습니다.

유사한 상부 헤센베르크 행렬로 모든 행렬을 인수분해하는 hessenberg 함수도 참조하십시오.

F::Hessenberg가 인수분해 객체인 경우, 유니타리 행렬은 F.Q로 접근할 수 있으며, 헤센베르크 행렬은 F.H로 접근할 수 있습니다. Q가 추출되면 결과 유형은 HessenbergQ 객체가 되며, convert(Array, _) (또는 짧게 Array(_))를 사용하여 일반 행렬로 변환할 수 있습니다.

분해를 반복하면 인수 F.QF.H가 생성됩니다.

예제

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}

스칼라와 항등 연산자 λ*I의 곱으로 정의된 일반 크기의 균일 스케일링 연산자입니다. 명시적인 size가 없지만, 많은 경우에 행렬처럼 작동하며 일부 인덱싱을 지원합니다. I도 참조하십시오.

Julia 1.6

범위를 사용한 인덱싱은 Julia 1.6부터 사용할 수 있습니다.

예제

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

UniformScaling 유형의 객체로, 임의의 크기의 단위 행렬을 나타냅니다.

예제

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)

UniformScaling에서 Diagonal 행렬을 생성합니다.

Julia 1.2

이 메서드는 Julia 1.2부터 사용할 수 있습니다.

예제

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

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

정방 행렬 ALU 분해의 행렬 분해 유형입니다. 이는 해당 행렬 분해 함수인 lu의 반환 유형입니다.

분해 F::LU의 개별 구성 요소는 getproperty를 통해 접근할 수 있습니다:

구성 요소설명
F.LLUL (단위 하삼각) 부분
F.ULUU (상삼각) 부분
F.p(오른쪽) 순열 Vector
F.P(오른쪽) 순열 Matrix

분해를 반복하면 구성 요소 F.L, F.U, 및 F.p가 생성됩니다.

예제

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 factor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U factor:
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); # 반복을 통한 구조 분해

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

희소 행렬 A의 LU 분해를 계산합니다.

실수 또는 복소수 요소 유형을 가진 희소 A의 경우, F의 반환 유형은 UmfpackLU{Tv, Ti}이며, 여기서 TvFloat64 또는 ComplexF64이고, Ti는 정수 유형 (Int32 또는 Int64)입니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다 (via issuccess).

치환 q는 치환 벡터이거나 nothing일 수 있습니다. 치환 벡터가 제공되지 않거나 qnothing인 경우, UMFPACK의 기본값이 사용됩니다. 치환이 0 기반이 아닐 경우, 0 기반 복사가 이루어집니다.

control 벡터는 UMFPACK에 대한 Julia SparseArrays 패키지의 기본 구성으로 기본값이 설정됩니다 (참고: 이는 반복 정제를 비활성화하기 위해 UMFPACK 기본값에서 수정됨), 그러나 UMFPACK_CONTROL 길이의 벡터를 전달하여 변경할 수 있습니다. 가능한 구성에 대해서는 UMFPACK 매뉴얼을 참조하십시오. 예를 들어 반복 정제를 다시 활성화하려면:

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # Float64 희소 행렬에 대한 Julia 기본 구성 읽기
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # 선택 사항 - 값 표시
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # 반복 정제 다시 활성화 (2는 UMFPACK 기본 최대 반복 정제 단계)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # Ax = b를 해결하며, UMFPACK 반복 정제를 포함

분해 F의 개별 구성 요소는 인덱싱하여 접근할 수 있습니다:

구성 요소설명
LLUL (하삼각) 부분
ULUU (상삼각) 부분
p오른쪽 치환 Vector
q왼쪽 치환 Vector
Rs스케일링 계수의 Vector
:(L,U,p,q,Rs) 구성 요소

FA 간의 관계는 다음과 같습니다.

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

F는 다음 함수를 추가로 지원합니다:

또한 lu!를 참조하십시오.

Note

lu(A::AbstractSparseMatrixCSC)SuiteSparse의 일부인 UMFPACK[ACM832] 라이브러리를 사용합니다. 이 라이브러리는 Float64 또는 ComplexF64 요소를 가진 희소 행렬만 지원하므로, luA를 적절하게 SparseMatrixCSC{Float64} 또는 SparseMatrixCSC{ComplexF64} 유형의 복사본으로 변환합니다.

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

행렬 A의 LU 분해를 계산합니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다 (via issuccess).

기본적으로, check = true일 때, 분해가 유효한 요소를 생성하더라도 상삼각 행렬 U가 랭크 결핍인 경우에도 오류가 발생합니다. 이는 allowsingular = true를 전달하여 변경할 수 있습니다.

대부분의 경우, AAbstractMatrix{T}의 하위 유형 S이고 요소 유형 T+, -, */를 지원하는 경우, 반환 유형은 LU{T,S{T}}입니다.

일반적으로 LU 분해는 행렬의 행을 순열하는 것을 포함하며 (아래에 설명된 F.p 출력에 해당), 이를 "피벗팅"이라고 합니다 (이는 "피벗"이 포함된 행, 즉 F.U의 대각선 항목을 선택하는 것과 관련이 있습니다). 다음의 피벗팅 전략 중 하나를 선택할 수 있습니다:

  • RowMaximum() (기본값): 표준 피벗팅 전략; 피벗은 남아 있는, 분해될 행 중 최대 절대값을 가지는 요소에 해당합니다. 이 피벗팅 전략은 요소 유형이 abs<도 지원해야 합니다. (이는 일반적으로 부동 소수점 행렬에 대해 유일하게 수치적으로 안정적인 옵션입니다.)
  • RowNonZero(): 피벗은 남아 있는, 분해될 행 중 첫 번째 비영(非零) 요소에 해당합니다. (이는 수작업 계산에서 일반적인 선택에 해당하며, iszero를 지원하지만 abs 또는 <를 지원하지 않는 보다 일반적인 대수적 수 유형에도 유용합니다.)
  • NoPivot(): 피벗팅이 꺼집니다 (피벗 위치에서 0 항목이 발견되면 실패하며, allowsingular = true일 때도 마찬가지입니다).

분해 F의 개별 구성 요소는 getproperty를 통해 접근할 수 있습니다:

구성 요소설명
F.LLUL (하삼각) 부분
F.ULUU (상삼각) 부분
F.p(오른쪽) 순열 Vector
F.P(오른쪽) 순열 Matrix

분해를 반복하면 구성 요소 F.L, F.U, 및 F.p가 생성됩니다.

FA의 관계는 다음과 같습니다.

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

F는 다음 함수를 추가로 지원합니다:

지원 함수LULU{T,Tridiagonal{T}}
/
\
inv
det
logdet
logabsdet
size
Julia 1.11

allowsingular 키워드 인자는 Julia 1.11에서 추가되었습니다.

예제

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 factor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U factor:
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); # 반복을 통한 구조 분해

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 factor:
2×2 Matrix{Float64}:
 1.0  0.0
 1.0  1.0
U factor (rank-deficient):
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

희소 행렬 A의 LU 분해를 계산하며, 이미 존재하는 LU 분해가 저장된 F의 기호 분해를 재사용합니다. reuse_symbolic이 false로 설정되지 않는 한, 희소 행렬 A는 LU 분해 F를 생성하는 데 사용된 행렬과 동일한 비영(非零) 패턴을 가져야 하며, 그렇지 않으면 오류가 발생합니다. AF의 크기가 다르면 모든 벡터가 그에 맞게 크기가 조정됩니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다 (via issuccess).

순열 q는 순열 벡터이거나 nothing일 수 있습니다. 순열 벡터가 제공되지 않거나 qnothing인 경우, UMFPACK의 기본값이 사용됩니다. 순열이 0 기반이 아닐 경우, 0 기반 복사가 이루어집니다.

자세한 내용은 lu를 참조하십시오.

Note

lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC)는 SuiteSparse의 일부인 UMFPACK 라이브러리를 사용합니다. 이 라이브러리는 Float64 또는 ComplexF64 요소를 가진 희소 행렬만 지원하므로, lu!는 LU 분해에 의해 설정된 유형이나 적절한 경우 SparseMatrixCSC{ComplexF64}로 자동 변환됩니다.

Julia 1.5

UmfpackLU에 대한 lu!는 최소한 Julia 1.5가 필요합니다.

예제

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!lu와 동일하지만 입력 A를 덮어써서 공간을 절약합니다. 인수 분해가 A의 요소 유형으로 표현할 수 없는 숫자를 생성하는 경우, 예를 들어 정수 유형의 경우, InexactError 예외가 발생합니다.

Julia 1.11

allowsingular 키워드 인자는 Julia 1.11에서 추가되었습니다.

예제

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 인자:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U 인자:
2×2 Matrix{Float64}:
 6.0  3.0
 0.0  1.0

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

julia> lu!(iA)
ERROR: InexactError: Int64(0.6666666666666666)
Stacktrace:
[...]
source
LinearAlgebra.CholeskyType
Cholesky <: Factorization

밀집 대칭/에르미트 양의 정부호 행렬 A의 Cholesky 분해의 행렬 분해 유형입니다. 이는 해당 행렬 분해 함수인 cholesky의 반환 유형입니다.

삼각형 Cholesky 인자는 분해 F::Cholesky에서 F.LF.U를 통해 얻을 수 있으며, 여기서 A ≈ F.U' * F.U ≈ F.L * F.L'입니다.

Cholesky 객체에 대해 사용할 수 있는 함수는 size, \, inv, det, logdetisposdef입니다.

분해를 반복하면 구성 요소 LU가 생성됩니다.

예제

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

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

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

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

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

julia> l, u = C; # destructuring via iteration

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

밀집 대칭/허미티안 양의 준정칙 행렬 A의 피벗된 콜레스키 분해의 행렬 분해 유형입니다. 이는 cholesky(_, ::RowMaximum)에서 반환되는 유형으로, 해당 행렬 분해 함수입니다.

삼각형 콜레스키 인자는 F::CholeskyPivoted 분해에서 F.LF.U를 통해 얻을 수 있으며, 순열은 F.p를 통해 얻을 수 있습니다. 여기서 A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr'이며, Ur = F.U[1:F.rank, :]Lr = F.L[:, 1:F.rank]로 정의됩니다. 또는 대안으로 A ≈ Up' * Up ≈ Lp * Lp'이며, 여기서 Up = F.U[1:F.rank, invperm(F.p)]Lp = F.L[invperm(F.p), 1:F.rank]로 정의됩니다.

다음 함수들이 CholeskyPivoted 객체에 대해 사용 가능합니다: size, \, inv, det, 및 rank.

분해를 반복하면 구성 요소 LU가 생성됩니다.

예제

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 factor with rank 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; # destructuring via iteration

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

밀집 대칭 양의 정부호 행렬 A의 Cholesky 분해를 계산하고 Cholesky 분해를 반환합니다. 행렬 ASymmetric 또는 Hermitian AbstractMatrix일 수 있으며, 완벽하게 대칭 또는 에르미트 AbstractMatrix일 수 있습니다.

삼각형 Cholesky 인자는 분해 F에서 F.LF.U를 통해 얻을 수 있으며, 여기서 A ≈ F.U' * F.U ≈ F.L * F.L'입니다.

Cholesky 객체에 대해 사용할 수 있는 함수는 size, \, inv, det, logdetisposdef입니다.

구성 과정에서 반올림 오류로 인해 약간 비에르미트인 행렬 A가 있는 경우, cholesky에 전달하기 전에 Hermitian(A)로 감싸서 완벽한 에르미트로 처리하십시오.

check = true일 때 분해가 실패하면 오류가 발생합니다. check = false일 때 분해의 유효성을 확인하는 책임은 사용자에게 있습니다( issuccess 사용).

예제

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 인자:
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

밀집 대칭 양의 준정칙 행렬 A의 피벗된 Cholesky 분해를 계산하고 CholeskyPivoted 분해를 반환합니다. 행렬 ASymmetric 또는 Hermitian AbstractMatrix일 수 있으며, 완벽하게 대칭 또는 허미티안 AbstractMatrix일 수 있습니다.

삼각형 Cholesky 인자는 분해 F에서 F.LF.U를 통해 얻을 수 있으며, 순열은 F.p를 통해 얻을 수 있습니다. 여기서 A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr'이며, Ur = F.U[1:F.rank, :]Lr = F.L[:, 1:F.rank]입니다. 또는 대안으로 A ≈ Up' * Up ≈ Lp * Lp'이며, Up = F.U[1:F.rank, invperm(F.p)]Lp = F.L[invperm(F.p), 1:F.rank]입니다.

다음 함수는 CholeskyPivoted 객체에 대해 사용할 수 있습니다: size, \, inv, det, 및 rank.

인자 tol은 랭크를 결정하기 위한 허용 오차를 결정합니다. 음수 값의 경우, 허용 오차는 기계 정밀도입니다.

구성 과정에서 반올림 오류로 인해 약간 비허미티안인 행렬 A가 있는 경우, cholesky에 전달하기 전에 Hermitian(A)로 감싸서 완벽한 허미티안으로 처리하십시오.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임( issuccess 사용)은 사용자에게 있습니다.

예제

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 인자는 랭크 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
순열:
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; # 반복을 통한 구조 분해

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

희소 양의 정부호 행렬 A의 Cholesky 분해를 계산합니다. ASparseMatrixCSC 또는 SparseMatrixCSCSymmetric/Hermitian 뷰여야 합니다. A가 타입 태그가 없더라도 여전히 대칭 또는 에르미트여야 합니다. perm이 주어지지 않으면, 채우기 감소 순열이 사용됩니다. F = cholesky(A)F\b로 방정식 시스템을 해결하는 데 가장 자주 사용되지만, diag, det, 및 logdet와 같은 메서드도 F에 대해 정의되어 있습니다. F에서 개별 요소를 추출할 수도 있으며, F.L을 사용할 수 있습니다. 그러나 피벗이 기본적으로 활성화되어 있기 때문에, 분해는 내부적으로 A == P'*L*L'*P로 표현되며, 여기서 P는 순열 행렬입니다. P를 고려하지 않고 단순히 L을 사용하면 잘못된 결과가 나옵니다. 순열의 효과를 포함하려면, 일반적으로 PtL = F.PtL(즉, P'*L) 및 LtP = F.UP(즉, L'*P)와 같은 "결합된" 요소를 추출하는 것이 바람직합니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다(즉, issuccess 사용).

선택적 shift 키워드 인수를 설정하면 A 대신 A+shift*I의 분해를 계산합니다. perm 인수가 제공되면, 이는 사용해야 할 순서를 제공하는 1:size(A,1)의 순열이어야 합니다(즉, CHOLMOD의 기본 AMD 순서 대신).

예제

다음 예제에서 사용된 채우기 감소 순열은 [3, 2, 1]입니다. perm1:3으로 설정되어 순열이 없도록 강제하면, 요소의 수는 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} with 3 stored entries:
  ⋅    ⋅   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

이 방법은 SuiteSparse에서 CHOLMOD[ACM887][DavisHager2009] 라이브러리를 사용합니다. CHOLMOD는 단일 또는 이중 정밀도의 실수 또는 복소수 유형만 지원합니다. 이러한 요소 유형이 아닌 입력 행렬은 적절하게 이러한 유형으로 변환됩니다.

CHOLMOD의 많은 다른 함수가 래핑되었지만 Base.SparseArrays.CHOLMOD 모듈에서 내보내지지는 않았습니다.

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

cholesky와 동일하지만, 입력 A를 복사하는 대신 덮어써서 공간을 절약합니다. 인수 분해가 A의 요소 유형으로 표현할 수 없는 숫자를 생성하는 경우, 예를 들어 정수 유형의 경우, InexactError 예외가 발생합니다.

예제

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

cholesky와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다. 인수 분해가 A의 요소 유형으로 표현할 수 없는 숫자를 생성하는 경우, 예를 들어 정수 유형의 경우 InexactError 예외가 발생합니다.

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

A의 Cholesky ($LL'$) 분해를 계산하고, 기호 분해 F를 재사용합니다. ASparseMatrixCSC 또는 SparseMatrixCSCSymmetric/Hermitian 뷰여야 합니다. A가 타입 태그가 없더라도 여전히 대칭 또는 에르미트여야 합니다.

자세한 내용은 cholesky를 참조하세요.

Note

이 방법은 SuiteSparse의 CHOLMOD 라이브러리를 사용하며, 이는 단일 또는 이중 정밀도의 실수 또는 복소수 유형만 지원합니다. 해당 요소 유형이 아닌 입력 행렬은 적절하게 이러한 유형으로 변환됩니다.

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

벡터 v로 Cholesky 분해 C를 업데이트합니다. 만약 A = C.U'C.U라면 CC = cholesky(C.U'C.U + v*v')이지만, CC의 계산은 O(n^2) 연산만 사용합니다.

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

주어진 ALDLt 또는 LLt 분해 F에 대해 A + C*C'LDLt 분해를 가져옵니다.

반환된 인자는 항상 LDLt 분해입니다.

또한 lowrankupdate!, lowrankdowndate, lowrankdowndate!를 참조하십시오.

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

Cholesky 분해 C를 벡터 v로 다운데이트합니다. 만약 A = C.U'C.U라면 CC = cholesky(C.U'C.U - v*v')이지만, CC의 계산은 O(n^2) 연산만 사용합니다.

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

주어진 ALDLt 또는 LLt 분해 F에 대해 A + C*C'LDLt 분해를 가져옵니다.

반환된 분해는 항상 LDLt 분해입니다.

또한 lowrankdowndate!, lowrankupdate, lowrankupdate!를 참조하십시오.

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

벡터 v로 Cholesky 분해 C를 업데이트합니다. 만약 A = C.U'C.U라면 CC = cholesky(C.U'C.U + v*v')이지만, CC의 계산은 O(n^2) 연산만 사용합니다. 입력 분해 C는 제자리에서 업데이트되어 종료 시 C == CC가 됩니다. 벡터 v는 계산 중에 파괴됩니다.

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

ALDLt 또는 LLt 분해 FA + C*C'의 분해로 업데이트합니다.

LLt 분해는 LDLt로 변환됩니다.

자세한 내용은 lowrankupdate, lowrankdowndate, lowrankdowndate!를 참조하세요.

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

Cholesky 분해 C를 벡터 v로 다운데이트합니다. 만약 A = C.U'C.U라면 CC = cholesky(C.U'C.U - v*v')이지만, CC의 계산은 O(n^2) 연산만 사용합니다. 입력 분해 C는 제자리에서 업데이트되어 종료 시 C == CC가 됩니다. 벡터 v는 계산 중에 파괴됩니다.

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

ALDLt 또는 LLt 분해 FA - C*C'의 분해로 업데이트합니다.

LLt 분해는 LDLt로 변환됩니다.

자세한 내용은 lowrankdowndate, lowrankupdate, lowrankupdate!를 참조하세요.

source
LinearAlgebra.LDLtType
LDLt <: Factorization

실수 SymTridiagonal 행렬 SLDLt 분해의 행렬 분해 유형으로, S = L*Diagonal(d)*L' 형태입니다. 여기서 LUnitLowerTriangular 행렬이고, d는 벡터입니다. LDLt 분해 F = ldlt(S)의 주요 용도는 선형 방정식 시스템 Sx = bF\b로 푸는 것입니다. 이는 해당 행렬 분해 함수인 ldlt의 반환 유형입니다.

분해 F::LDLt의 개별 구성 요소는 getproperty를 통해 접근할 수 있습니다:

구성 요소설명
F.LLDLtL (단위 하삼각) 부분
F.DLDLtD (대각선) 부분
F.LtLDLtLt (단위 상삼각) 부분
F.dD의 대각선 값들을 포함하는 Vector

예제

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

실수 대칭 삼중 대각 행렬 SLDLt (즉, $LDL^T$) 분해를 계산합니다. 여기서 S = L*Diagonal(d)*L'이며, L은 단위 하삼각 행렬이고 d는 벡터입니다. LDLt 분해 F = ldlt(S)의 주요 용도는 선형 방정식 시스템 Sx = bF\b로 푸는 것입니다.

유사하지만 피벗된 임의의 대칭 또는 에르미트 행렬의 분해에 대한 bunchkaufman도 참조하십시오.

예제

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

희소 행렬 A$LDL'$ 분해를 계산합니다. ASparseMatrixCSC 또는 SparseMatrixCSCSymmetric/Hermitian 뷰여야 합니다. A가 타입 태그가 없더라도 여전히 대칭 또는 에르미트여야 합니다. 채우기 감소 순열이 사용됩니다. F = ldlt(A)는 시스템의 방정식 A*x = bF\b로 해결하는 데 가장 자주 사용됩니다. 반환된 분해 객체 F는 또한 diag, det, logdet, 및 inv 메서드를 지원합니다. F에서 개별 요소를 추출하려면 F.L을 사용하면 됩니다. 그러나 피벗이 기본적으로 활성화되어 있기 때문에, 분해는 내부적으로 A == P'*L*D*L'*P로 표현되며, 여기서 P는 순열 행렬입니다; P를 고려하지 않고 단순히 L을 사용하면 잘못된 결과가 나옵니다. 순열의 효과를 포함하려면, 일반적으로 PtL = F.PtL (즉, P'*L에 해당) 및 LtP = F.UP (즉, L'*P에 해당)와 같은 "결합된" 요소를 추출하는 것이 바람직합니다. 지원되는 요소의 전체 목록은 :L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP입니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다 (via issuccess).

선택적 shift 키워드 인수를 설정하면 A 대신 A+shift*I의 분해를 계산합니다. perm 인수가 제공되면, 이는 사용해야 할 순서를 제공하는 1:size(A,1)의 순열이어야 합니다 (CHOLMOD의 기본 AMD 순서 대신).

Note

이 방법은 SuiteSparse에서 제공하는 CHOLMOD[ACM887][DavisHager2009] 라이브러리를 사용합니다. CHOLMOD는 단일 또는 이중 정밀도의 실수 또는 복소수 타입만 지원합니다. 해당 요소 타입이 아닌 입력 행렬은 적절하게 이러한 타입으로 변환됩니다.

CHOLMOD의 많은 다른 함수가 래핑되었지만 Base.SparseArrays.CHOLMOD 모듈에서 내보내지지는 않았습니다.

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

ldlt와 동일하지만, 입력 S를 덮어써서 복사본을 생성하는 대신 공간을 절약합니다.

예제

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

A$LDL'$ 분해를 계산하며, 기호 분해 F를 재사용합니다. ASparseMatrixCSC 또는 SparseMatrixCSCSymmetric/Hermitian 뷰여야 합니다. A가 타입 태그가 없더라도 여전히 대칭 또는 에르미트여야 합니다.

자세한 내용은 ldlt를 참조하세요.

Note

이 메서드는 SuiteSparse에서 제공하는 CHOLMOD 라이브러리를 사용하며, 이는 단일 또는 이중 정밀도의 실수 또는 복소수 타입만 지원합니다. 해당 요소 타입이 아닌 입력 행렬은 적절하게 이러한 타입으로 변환됩니다.

source
LinearAlgebra.QRType
QR <: Factorization

QR 행렬 분해는 일반적으로 qr에서 얻은 압축 형식으로 저장됩니다. 만약 $A$m×n 행렬이라면

\[A = Q R\]

여기서 $Q$는 직교/유니타리 행렬이고 $R$은 상삼각 행렬입니다. 행렬 $Q$는 Householder 반사기 $v_i$와 계수 $\tau_i$의 시퀀스로 저장됩니다:

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

분해를 반복하면 구성 요소 QR이 생성됩니다.

객체에는 두 개의 필드가 있습니다:

  • factorsm×n 행렬입니다.

    • 상삼각 부분은 $R$의 요소를 포함하며, 즉 R = triu(F.factors)QR 객체 F에 대해 성립합니다.
    • 하대각선 부분은 압축 형식으로 저장된 반사기 $v_i$를 포함하며, 여기서 $v_i$는 행렬 V = I + tril(F.factors, -1)$i$번째 열입니다.
  • τ는 길이가 min(m,n)인 벡터로, 계수 $au_i$를 포함합니다.

source
LinearAlgebra.QRCompactWYType
QRCompactWY <: Factorization

QR 행렬 분해는 일반적으로 qr에서 얻어진 압축 블록 형식으로 저장됩니다. 만약 $A$m×n 행렬이라면

\[A = Q R\]

여기서 $Q$는 직교/유니타리 행렬이고 $R$은 상삼각형입니다. 이는 QR 형식과 유사하지만, 직교/유니타리 행렬 $Q$Compact WY 형식으로 저장됩니다 [Schreiber1989]. 블록 크기 $n_b$에 대해, 이는 m×n 하사다리꼴 행렬 $V$$b = \lceil \min(m,n) / n_b \rceil$ 개의 크기 $n_b$×$n_b$ 상삼각형 행렬 $T_j$로 구성된 행렬 $T = (T_1 \; T_2 \; ... \; T_{b-1} \; T_b')$로 저장됩니다 ($j = 1, ..., b-1$) 및 상하사다리꼴 $n_b$×$\min(m,n) - (b-1) n_b$ 행렬 $T_b'$ ($j=b$)로, 그 상단 정사각형 부분은 $T_b$로 표시되며 다음을 만족합니다.

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

여기서 $v_i$$V$$i$번째 열, $\tau_i$[diag(T_1); diag(T_2); …; diag(T_b)]$i$번째 요소이며, $(V_1 \; V_2 \; ... \; V_b)$$V$의 왼쪽 m×min(m, n) 블록입니다. qr로 구성할 때, 블록 크기는 $n_b = \min(m, n, 36)$로 주어집니다.

분해를 반복하면 구성 요소 QR이 생성됩니다.

객체에는 두 개의 필드가 있습니다:

  • factors, QR 유형과 같이, m×n 행렬입니다.

    • 상삼각형 부분에는 $R$의 요소가 포함되어 있으며, 즉 R = triu(F.factors)QR 객체 F에 대해 성립합니다.
    • 하대각선 부분에는 패킹 형식으로 저장된 반사기 $v_i$가 포함되어 있으며, V = I + tril(F.factors, -1)입니다.
  • T는 위에서 설명한 대로 $n_b$-by-$\min(m,n)$ 행렬입니다. 각 삼각형 행렬 $T_j$의 하대각선 요소는 무시됩니다.

Note

이 형식은 이전의 WY 표현 [Bischof1987]과 혼동해서는 안 됩니다.

source
LinearAlgebra.QRPivotedType
QRPivoted <: Factorization

열 피벗이 있는 QR 행렬 분해로, 일반적으로 qr에서 얻은 압축 형식입니다. 만약 $A$m×n 행렬이라면

\[A P = Q R\]

여기서 $P$는 순열 행렬, $Q$는 직교/유니타리 행렬이며 $R$은 상삼각 행렬입니다. 행렬 $Q$는 하우스홀더 반사기의 시퀀스로 저장됩니다:

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

분해를 반복하면 구성 요소 Q, R, 및 p가 생성됩니다.

객체는 세 개의 필드를 가집니다:

  • factorsm×n 행렬입니다.

    • 상삼각 부분은 $R$의 요소를 포함하며, 즉 R = triu(F.factors)QR 객체 F에 대해 성립합니다.
    • 하대각선 부분은 압축 형식으로 저장된 반사기 $v_i$를 포함하며, 여기서 $v_i$는 행렬 V = I + tril(F.factors, -1)$i$번째 열입니다.
  • τ는 길이 min(m,n)의 벡터로, 계수 $au_i$를 포함합니다.

  • jpvt는 순열 $P$에 해당하는 길이 n의 정수 벡터입니다.

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

희소 행렬 AQR 분해를 계산합니다. F.R = F.Q'*A[F.prow,F.pcol]가 되도록 행과 열의 채우기 감소 순열이 사용됩니다. 이 유형의 주요 응용 프로그램은 \를 사용하여 최소 제곱 또는 미결정 문제를 해결하는 것입니다. 이 함수는 C 라이브러리 SPQR[ACM933]를 호출합니다.

Note

qr(A::SparseMatrixCSC)SuiteSparse의 일부인 SPQR 라이브러리를 사용합니다. 이 라이브러리는 Float64 또는 ComplexF64 요소를 가진 희소 행렬만 지원하므로, Julia v1.4부터 qrASparseMatrixCSC{Float64} 또는 SparseMatrixCSC{ComplexF64} 유형의 복사본으로 변환합니다.

예제

julia> A = sparse([1,2,3,4], [1,1,2,2], [1.0,1.0,1.0,1.0])
4×2 SparseMatrixCSC{Float64, Int64} with 4 stored entries:
 1.0   ⋅
 1.0   ⋅
  ⋅   1.0
  ⋅   1.0

julia> qr(A)
SparseArrays.SPQR.QRSparse{Float64, Int64}
Q factor:
4×4 SparseArrays.SPQR.QRSparseQ{Float64, Int64}
R factor:
2×2 SparseMatrixCSC{Float64, Int64} with 2 stored entries:
 -1.41421    ⋅
   ⋅       -1.41421
Row permutation:
4-element Vector{Int64}:
 1
 3
 4
 2
Column permutation:
2-element Vector{Int64}:
 1
 2
source
qr(A, pivot = NoPivot(); blocksize) -> F

행렬 A의 QR 분해를 계산합니다: 직교(또는 A가 복소수 값일 경우 유니타리) 행렬 Q와 상삼각 행렬 R이 있어 다음과 같은 관계를 만족합니다.

\[A = Q R\]

반환된 객체 F는 패킹된 형식으로 분해를 저장합니다:

  • pivot == ColumnNorm()인 경우 FQRPivoted 객체입니다.
  • 그렇지 않고 A의 요소 유형이 BLAS 유형(Float32, Float64, ComplexF32 또는 ComplexF64)인 경우, FQRCompactWY 객체입니다.
  • 그렇지 않으면 FQR 객체입니다.

분해의 개별 구성 요소 F는 속성 접근자를 통해 검색할 수 있습니다:

  • F.Q: 직교/유니타리 행렬 Q
  • F.R: 상삼각 행렬 R
  • F.p: 피벗의 순열 벡터 (QRPivoted 전용)
  • F.P: 피벗의 순열 행렬 (QRPivoted 전용)
Note

F.R를 통해 상삼각 요소에 대한 각 참조는 새로운 배열을 할당합니다. 따라서 R = F.R와 같이 해당 배열을 캐시하고 R로 계속 작업하는 것이 좋습니다.

분해를 반복하면 구성 요소 Q, R, 그리고 존재하는 경우 p를 생성합니다.

QR 객체에 대해 사용할 수 있는 함수는 다음과 같습니다: inv, size, 및 \. A가 직사각형인 경우, \는 최소 제곱 해를 반환하며, 해가 유일하지 않은 경우 가장 작은 노름을 가진 해가 반환됩니다. A가 풀 랭크가 아닐 경우, 최소 노름 해를 얻기 위해 (열) 피벗을 사용한 분해가 필요합니다.

전체/정사각형 또는 비전체/비정사각형 Q에 대한 곱셈이 허용됩니다. 즉, F.Q*F.RF.Q*A 모두 지원됩니다. Q 행렬은 Matrix로 일반 행렬로 변환할 수 있습니다. 이 작업은 "얇은" Q 요소를 반환합니다. 즉, Am×n이고 m>=n인 경우, Matrix(F.Q)는 직교 정규 열을 가진 m×n 행렬을 생성합니다. "전체" Q 요소를 검색하려면 F.Q*I 또는 collect(F.Q)를 사용하십시오. m<=n인 경우, Matrix(F.Q)m×m 직교 행렬을 생성합니다.

QR 분해를 위한 블록 크기는 pivot == NoPivot()이고 A isa StridedMatrix{<:BlasFloat}일 때 키워드 인수 blocksize :: Integer로 지정할 수 있습니다. blocksize > minimum(size(A))인 경우 무시됩니다. QRCompactWY를 참조하십시오.

Julia 1.4

blocksize 키워드 인수는 Julia 1.4 이상이 필요합니다.

예제

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

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

qr는 LAPACK가 Householder 기본 반사체의 곱의 메모리 저장 요구 사항을 최소화하는 여러 표현을 사용하기 때문에 여러 유형을 반환합니다. 따라서 QR 행렬을 두 개의 개별 밀집 행렬 대신 압축하여 저장할 수 있습니다.

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

qr!AAbstractMatrix의 하위 유형일 때 qr와 동일하지만, 입력 A를 덮어써서 공간을 절약합니다. 인수 분해가 A의 요소 유형으로 표현할 수 없는 숫자를 생성하는 경우, 예를 들어 정수 유형의 경우, InexactError 예외가 발생합니다.

Julia 1.4

blocksize 키워드 인수는 Julia 1.4 이상이 필요합니다.

예제

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 인자: 2×2 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R 인자:
2×2 Matrix{Float64}:
 -3.16228  -4.42719
  0.0      -0.632456

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

julia> qr!(a)
ERROR: InexactError: Int64(3.1622776601683795)
Stacktrace:
[...]
source
LinearAlgebra.LQType
LQ <: Factorization

행렬 ALQ 분해의 행렬 분해 유형입니다. LQ 분해는 transpose(A)QR 분해입니다. 이는 해당 행렬 분해 함수인 lq의 반환 유형입니다.

S::LQ가 분해 객체인 경우, 하삼각 성분은 S.L을 통해 얻을 수 있으며, 직교/단위 성분은 S.Q를 통해 얻을 수 있습니다. 따라서 A ≈ S.L*S.Q입니다.

분해를 반복하면 성분 S.LS.Q를 생성합니다.

예제

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 factor:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q factor: 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; # 반복을 통한 구조 분해

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

A의 LQ 분해를 계산합니다. 분해의 하삼각형 구성 요소는 LQ 객체 S에서 S.L을 통해 얻을 수 있으며, 직교/유니타리 구성 요소는 S.Q를 통해 얻을 수 있습니다. 따라서 A ≈ S.L*S.Q입니다.

분해를 반복하면 구성 요소 S.LS.Q를 생성합니다.

LQ 분해는 transpose(A)의 QR 분해이며, 이는 과소정의 방정식 시스템에 대한 최소 노름 해 lq(A) \ b를 계산하는 데 유용합니다(A는 열이 행보다 많지만 전체 행 랭크를 가집니다).

예제

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 factor:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q factor: 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; # 반복을 통한 구조 분해

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

입력 행렬을 작업 공간으로 사용하여 ALQ 분해를 계산합니다. lq도 참조하십시오.

source
LinearAlgebra.BunchKaufmanType
BunchKaufman <: Factorization

대칭 또는 에르미트 행렬 A의 Bunch-Kaufman 분해의 행렬 분해 유형으로, A에 상단(기본값) 또는 하단 삼각형이 저장되는지에 따라 P'UDU'P 또는 P'LDL'P로 표현됩니다. A가 복소수 대칭인 경우 U'L'는 비공액 전치(transpose)를 나타내며, 즉 각각 transpose(U)transpose(L)입니다. 이는 bunchkaufman 함수의 반환 유형입니다.

S::BunchKaufman이 분해 객체인 경우, 구성 요소는 S.uploS.p에 따라 적절하게 S.D, S.U 또는 S.L을 통해 얻을 수 있습니다.

분해를 반복하면 S.uploS.p에 따라 적절하게 S.D, S.U 또는 S.L 구성 요소가 생성됩니다.

예제

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

julia> S = bunchkaufman(A) # A는 내부적으로 Symmetric(A)로 래핑됩니다.
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D 인자:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U 인자:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
순열:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # 반복을 통한 구조 분해

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

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

대칭 또는 에르미트 행렬 A의 Bunch-Kaufman [Bunch1977] 분해를 P'*U*D*U'*P 또는 P'*L*D*L'*P 형태로 계산하고, A에 저장된 삼각형에 따라 BunchKaufman 객체를 반환합니다. A가 복소수 대칭인 경우 U'L'는 비공액 전치(transpose)를 나타내며, 즉 transpose(U)transpose(L)입니다.

분해를 반복하면 S.uplo에 따라 적절한 구성 요소인 S.D, S.U 또는 S.LS.p를 생성합니다.

rooktrue이면, rook 피벗팅이 사용됩니다. rook이 false이면, rook 피벗팅이 사용되지 않습니다.

check = true일 때, 분해가 실패하면 오류가 발생합니다. check = false일 때, 분해의 유효성을 확인하는 책임은 사용자에게 있습니다 (via issuccess).

BunchKaufman 객체에 대해 사용할 수 있는 함수는 다음과 같습니다: size, \, inv, issymmetric, ishermitian, getindex.

예제

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

julia> S = bunchkaufman(A) # A는 내부적으로 Symmetric(A)에 의해 래핑됩니다.
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D 인자:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U 인자:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
순열:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # 반복을 통한 구조 분해

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 인자:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L 인자:
2×2 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
순열:
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!bunchkaufman와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다.

source
LinearAlgebra.EigenType
Eigen <: Factorization

정방 행렬 A의 고유값/스펙트럼 분해의 행렬 분해 유형입니다. 이는 해당 행렬 분해 함수인 eigen의 반환 유형입니다.

F::Eigen이 분해 객체인 경우, 고유값은 F.values를 통해 얻을 수 있으며, 고유벡터는 행렬 F.vectors의 열로 얻을 수 있습니다. (k번째 고유벡터는 슬라이스 F.vectors[:, k]를 통해 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors가 생성됩니다.

예제

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

AB의 일반화된 고유값/스펙트럼 분해의 행렬 분해 유형입니다. 이는 두 개의 행렬 인수로 호출될 때 해당 행렬 분해 함수인 eigen의 반환 유형입니다.

F::GeneralizedEigen이 분해 객체인 경우, 고유값은 F.values를 통해 얻을 수 있으며, 고유벡터는 행렬 F.vectors의 열로 얻을 수 있습니다. (k번째 고유벡터는 슬라이스 F.vectors[:, k]를 통해 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors가 생성됩니다.

예제

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

행렬 A의 고유값을 반환합니다.

일반 비대칭 행렬의 경우 고유값 계산 전에 행렬이 어떻게 균형을 이루는지 지정할 수 있습니다. permute, scale, 및 sortby 키워드는 eigen와 동일합니다.

예제

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

스칼라 입력의 경우, eigvals는 스칼라를 반환합니다.

예제

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

AB의 일반화된 고유값을 계산합니다.

예제

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

A의 고유값을 반환합니다. 정렬된 고유값의 인덱스를 포함하는 UnitRange irange를 지정하여 고유값의 하위 집합만 계산할 수 있습니다. 예를 들어, 2번째에서 8번째 고유값을 계산할 수 있습니다.

예제

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

A의 고유값을 반환합니다. 고유값의 하한과 상한을 지정하여 고유값의 하위 집합만 계산하는 것이 가능합니다.

예제

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

eigvals와 동일하지만, 입력 A를 덮어써서 공간을 절약합니다. permute, scale, 및 sortby 키워드는 eigen와 동일합니다.

Note

eigvals!가 호출된 후 입력 행렬 A는 고유값을 포함하지 않습니다 - A는 작업 공간으로 사용됩니다.

예제

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

eigvals와 동일하지만, 복사본을 생성하는 대신 입력 A(및 B)를 덮어써서 공간을 절약합니다.

Note

eigvals!가 호출된 후 입력 행렬 AB는 고유값을 포함하지 않습니다. 이들은 작업 공간으로 사용됩니다.

예제

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

eigvals와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다. irange는 검색할 고유값 인덱스의 범위입니다 - 예를 들어, 2번째에서 8번째 고유값까지입니다.

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

eigvals와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다. vl은 고유값을 찾기 위한 구간의 하한이며, vu는 상한입니다.

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

A의 가장 큰 고유값을 반환합니다. 옵션 permute=true는 행렬을 상삼각형에 더 가깝게 만들기 위해 행렬을 재배열하고, scale=true는 행렬의 대각선 요소로 행렬을 스케일링하여 행과 열의 노름을 더 균등하게 만듭니다. A의 고유값이 복소수인 경우 이 방법은 실패합니다. 복소수는 정렬할 수 없기 때문입니다.

예제

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`는 복소수 고유값을 가질 수 없습니다.
Stacktrace:
[...]
source
LinearAlgebra.eigminFunction
eigmin(A; permute::Bool=true, scale::Bool=true)

A의 가장 작은 고유값을 반환합니다. 옵션 permute=true는 행렬을 상삼각형에 더 가깝게 만들기 위해 행렬을 재배열하고, scale=true는 행렬의 대각선 요소로 행렬을 스케일링하여 행과 열의 노름을 더 비슷하게 만듭니다. A의 고유값이 복소수인 경우 이 방법은 실패합니다. 복소수는 정렬할 수 없기 때문입니다.

예제

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`는 복소수 고유값을 가질 수 없습니다.
Stacktrace:
[...]
source
LinearAlgebra.eigvecsFunction
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

행렬 M을 반환하며, M의 열은 A의 고유벡터입니다. (k번째 고유벡터는 슬라이스 M[:, k]에서 얻을 수 있습니다.)

선택적 고유값 벡터 eigvals가 지정되면, eigvecs는 해당 고유벡터를 반환합니다.

예제

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

행렬 A의 고유벡터로 구성된 행렬 M을 반환합니다. (k번째 고유벡터는 슬라이스 M[:, k]에서 얻을 수 있습니다.) permute, scale, 및 sortby 키워드는 eigen와 동일합니다.

예제

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

행렬 M을 반환하며, M의 열은 AB의 일반화된 고유벡터입니다. (k번째 고유벡터는 슬라이스 M[:, k]에서 얻을 수 있습니다.)

예제

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

행렬 A의 고유값 분해를 계산하여 고유값이 F.values에, 고유벡터가 행렬 F.vectors의 열에 포함된 Eigen 분해 객체 F를 반환합니다. 이는 Ax = λx 형태의 고유값 문제를 해결하는 것에 해당하며, 여기서 A는 행렬, x는 고유벡터, λ는 고유값입니다. (k번째 고유벡터는 슬라이스 F.vectors[:, k]에서 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors를 생성합니다.

다음 함수는 Eigen 객체에 대해 사용할 수 있습니다: inv, det, 및 isposdef.

일반 비대칭 행렬의 경우 고유벡터 계산 전에 행렬이 어떻게 균형을 이루는지 지정할 수 있습니다. 옵션 permute=true는 행렬을 상삼각형에 더 가깝게 만들기 위해 순열을 적용하고, scale=true는 행렬의 대각 요소로 행렬을 스케일링하여 행과 열의 노름을 더 평등하게 만듭니다. 기본값은 두 옵션 모두 true입니다.

기본적으로 고유값과 고유벡터는 (real(λ),imag(λ))에 따라 사전식으로 정렬됩니다. 다른 비교 함수 by(λ)sortby에 전달할 수 있으며, sortby=nothing을 전달하여 고유값을 임의의 순서로 남길 수 있습니다. 일부 특수 행렬 유형(예: Diagonal 또는 SymTridiagonal)은 자체 정렬 규칙을 구현할 수 있으며 sortby 키워드를 수용하지 않을 수 있습니다.

예제

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
eigen(A, B; sortby) -> GeneralizedEigen

AB의 일반화된 고유값 분해를 계산하고, 일반화된 고유값이 F.values에, 일반화된 고유벡터가 행렬 F.vectors의 열에 포함된 GeneralizedEigen 분해 객체 F를 반환합니다. 이는 Ax = λBx 형태의 일반화된 고유값 문제를 해결하는 것에 해당하며, 여기서 A, B는 행렬, x는 고유벡터, λ는 고유값입니다. (k번째 일반화된 고유벡터는 슬라이스 F.vectors[:, k]에서 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors를 생성합니다.

기본적으로 고유값과 고유벡터는 (real(λ),imag(λ))에 따라 사전적으로 정렬됩니다. 다른 비교 함수 by(λ)sortby에 전달하거나, sortby=nothing을 전달하여 고유값을 임의의 순서로 남길 수 있습니다.

예제

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; # 반복을 통한 구조 분해

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

A의 고유값 분해를 계산하고, 고유값은 F.values에, 고유벡터는 행렬 F.vectors의 열에 포함된 Eigen 분해 객체 F를 반환합니다. (k번째 고유벡터는 슬라이스 F.vectors[:, k]에서 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors를 생성합니다.

Eigen 객체에 대해 사용할 수 있는 함수는 다음과 같습니다: inv, det, 및 isposdef.

UnitRange irange는 검색할 정렬된 고유값의 인덱스를 지정합니다.

Note

irange1:n이 아닌 경우, 여기서 nA의 차원인 경우, 반환된 분해는 잘린 분해가 됩니다.

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

행렬 A의 고유값 분해를 계산하고, 고유값을 F.values에, 고유벡터를 행렬 F.vectors의 열에 포함하는 Eigen 분해 객체 F를 반환합니다. (k번째 고유벡터는 슬라이스 F.vectors[:, k]에서 얻을 수 있습니다.)

분해를 반복하면 구성 요소 F.valuesF.vectors를 생성합니다.

Eigen 객체에 대해 사용할 수 있는 함수는 inv, det, 및 isposdef입니다.

vl은 검색할 고유값의 윈도우의 하한이며, vu는 상한입니다.

Note

만약 [vl, vu]가 A의 모든 고유값을 포함하지 않는다면, 반환된 분해는 잘린 분해가 됩니다.

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

eigen와 동일하지만, 복사본을 생성하는 대신 입력 A(및 B)를 덮어써서 공간을 절약합니다.

source
LinearAlgebra.HessenbergType
Hessenberg <: Factorization

Hessenberg 객체는 정방 행렬의 Hessenberg 분해 QHQ' 또는 그에 대한 이동 Q(H+μI)Q'를 나타내며, 이는 hessenberg 함수에 의해 생성됩니다.

source
LinearAlgebra.hessenbergFunction
hessenberg(A) -> Hessenberg

행렬 A의 헤센베르크 분해를 계산하고 Hessenberg 객체를 반환합니다. 만약 F가 분해 객체라면, 유니타리 행렬은 F.Q (타입 LinearAlgebra.HessenbergQ)로 접근할 수 있으며, 헤센베르크 행렬은 F.H (타입 UpperHessenberg)로 접근할 수 있습니다. 이 두 행렬은 각각 Matrix(F.H) 또는 Matrix(F.Q)를 사용하여 일반 행렬로 변환할 수 있습니다.

만약 AHermitian 또는 실수-Symmetric이라면, 헤센베르크 분해는 실수-대칭 삼대각 행렬을 생성하며 F.H는 타입 SymTridiagonal입니다.

변형된 분해 A+μI = Q (H+μI) Q'UniformScaling 객체 I를 사용하여 F + μ*I로 효율적으로 구성할 수 있으며, 이는 공유 저장소와 수정된 이동을 가진 새로운 Hessenberg 객체를 생성합니다. 주어진 F의 이동은 F.μ로 얻을 수 있습니다. 이는 여러 개의 이동된 해를 (F + μ*I) \ b (다른 μ 및/또는 b에 대해) 효율적으로 수행할 수 있기 때문에 유용합니다. F가 생성된 후에 가능합니다.

분해를 반복하면 인수 F.Q, F.H, F.μ를 생성합니다.

예제

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 factor: 3×3 LinearAlgebra.HessenbergQ{Float64, Matrix{Float64}, Vector{Float64}, false}
H factor:
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; # 반복을 통한 구조 분해

julia> q == F.Q && h == F.H
true
source
LinearAlgebra.hessenberg!Function
hessenberg!(A) -> 헤센베르크

hessenberg!hessenberg와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다.

source
LinearAlgebra.SchurType
Schur <: Factorization

행렬 A의 슈르 분해의 행렬 분해 유형입니다. 이는 schur(_)와 해당하는 행렬 분해 함수의 반환 유형입니다.

F::Schur가 분해 객체인 경우, (준)삼각형 슈르 인자는 F.Schur 또는 F.T를 통해 얻을 수 있으며, 직교/유니타리 슈르 벡터는 F.vectors 또는 F.Z를 통해 얻을 수 있습니다. 따라서 A = F.vectors * F.Schur * F.vectors'입니다. A의 고유값은 F.values로 얻을 수 있습니다.

분해를 반복하면 구성 요소 F.T, F.Z, 및 F.values가 생성됩니다.

예제

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 인자:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z 인자:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
고유값:
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; # 반복을 통한 구조 분해

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

두 행렬 AB의 일반화된 슈르 분해의 행렬 분해 유형입니다. 이는 schur(_, _) 함수의 반환 유형입니다.

F::GeneralizedSchur가 분해 객체인 경우, (준) 삼각 슈르 인자는 F.SF.T를 통해 얻을 수 있으며, 왼쪽 유니타리/직교 슈르 벡터는 F.left 또는 F.Q를 통해, 오른쪽 유니타리/직교 슈르 벡터는 F.right 또는 F.Z를 통해 얻을 수 있습니다. 이때 A=F.left*F.S*F.right'B=F.left*F.T*F.right'입니다. AB의 일반화된 고유값은 F.α./F.β를 통해 얻을 수 있습니다.

분해를 반복하면 구성 요소 F.S, F.T, F.Q, F.Z, F.αF.β가 생성됩니다.

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

행렬 A의 슈르 분해를 계산합니다. (준)삼각형 슈르 인자는 F라는 Schur 객체에서 F.Schur 또는 F.T를 사용하여 얻을 수 있으며, 직교/유니타리 슈르 벡터는 F.vectors 또는 F.Z를 사용하여 얻을 수 있습니다. 이때 A = F.vectors * F.Schur * F.vectors'가 성립합니다. A의 고유값은 F.values를 사용하여 얻을 수 있습니다.

실수 A의 경우, 슈르 분해는 "준삼각형"이며, 이는 복소수 고유값의 켤레 쌍에 대해 2×2 대각 블록이 있는 상삼각형임을 의미합니다. 이는 복소수 고유값이 있을 때에도 분해가 순수하게 실수일 수 있도록 합니다. 실수 준삼각형 분해에서 (복소수) 순수 상삼각형 슈르 분해를 얻으려면 Schur{Complex}(schur(A))를 사용할 수 있습니다.

분해를 반복하면 구성 요소 F.T, F.Z, 및 F.values가 생성됩니다.

예제

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 인자:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z 인자:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
고유값:
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; # 반복을 통한 구조 분해

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

행렬 AB의 일반화된 슈르(또는 QZ) 분해를 계산합니다. (준)삼각 슈르 인자는 F라는 Schur 객체에서 F.SF.T로 얻을 수 있으며, 왼쪽 유니타리/직교 슈르 벡터는 F.left 또는 F.Q로, 오른쪽 유니타리/직교 슈르 벡터는 F.right 또는 F.Z로 얻을 수 있습니다. 이때 A=F.left*F.S*F.right'B=F.left*F.T*F.right'입니다. AB의 일반화된 고유값은 F.α./F.β로 얻을 수 있습니다.

분해를 반복하면 구성 요소 F.S, F.T, F.Q, F.Z, F.αF.β가 생성됩니다.

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

입력 인수 A를 작업 공간으로 사용하는 schur와 동일합니다.

예제

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 인자:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z 인자:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
고유값:
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

schur와 동일하지만 입력 행렬 AB를 작업 공간으로 사용합니다.

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

행렬 A = Z*T*Z'의 Schur 분해 F를 논리 배열 select에 따라 재정렬하여 재정렬된 분해 F 객체를 반환합니다. 선택된 고유값은 F.Schur의 주 대각선에 나타나며, 해당하는 F.vectors의 선두 열은 해당하는 오른쪽 불변 부분공간의 직교/유니타리 기저를 형성합니다. 실수의 경우, 복소수 켤레 쌍의 고유값은 select를 통해 모두 포함되거나 모두 제외되어야 합니다.

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

행렬 쌍 (A, B) = (Q*S*Z', Q*T*Z')의 일반화된 슈르 분해 F를 논리 배열 select에 따라 재정렬하고 일반화된 슈르 객체 F를 반환합니다. 선택된 고유값은 F.SF.T의 주 대각선에 나타나며, 왼쪽 및 오른쪽 직교/유니타리 슈르 벡터도 재정렬되어 (A, B) = F.Q*(F.S, F.T)*F.Z'가 여전히 성립하고 AB의 일반화된 고유값을 F.α./F.β로 여전히 얻을 수 있습니다.

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

ordschur와 동일하지만 인수 분해 F를 덮어씁니다.

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

ordschur와 동일하지만 인수 분해 F를 덮어씁니다.

source
LinearAlgebra.SVDType
SVD <: Factorization

행렬 A의 특이값 분해(SVD)의 행렬 분해 유형입니다. 이는 svd(_) 함수의 반환 유형입니다.

F::SVD가 분해 객체인 경우, U, S, VVtF.U, F.S, F.VF.Vt를 통해 얻을 수 있으며, A = U * Diagonal(S) * Vt가 성립합니다. S의 특이값은 내림차순으로 정렬되어 있습니다.

분해를 반복하면 구성 요소 U, SV를 생성합니다.

예제

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

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

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

julia> u, s, v = F; # destructuring via iteration

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

두 행렬 AB의 일반화된 특이값 분해(SVD)의 행렬 분해 유형으로, A = F.U*F.D1*F.R0*F.Q'B = F.V*F.D2*F.R0*F.Q'입니다. 이는 svd(_, _)의 반환 유형으로, 해당 행렬 분해 함수입니다.

M-by-N 행렬 A와 P-by-N 행렬 B에 대해,

  • U는 M-by-M 직교 행렬입니다.
  • V는 P-by-P 직교 행렬입니다.
  • Q는 N-by-N 직교 행렬입니다.
  • D1은 첫 K 항목에 1이 있는 M-by-(K+L) 대각 행렬입니다.
  • D2는 상단 오른쪽 L-by-L 블록이 대각선인 P-by-(K+L) 행렬입니다.
  • R0는 가장 오른쪽 (K+L)-by-(K+L) 블록이 비특이 상부 블록 삼각형인 (K+L)-by-N 행렬입니다.

K+L은 행렬 [A; B]의 유효 수치적 계수입니다.

분해를 반복하면 구성 요소 U, V, Q, D1, D2, 및 R0가 생성됩니다.

F.D1F.D2의 항목은 관련이 있으며, 이는 일반화된 SVD 및 그 아래에서 호출되는 xGGSVD3 루틴에 대한 LAPACK 문서에서 설명되어 있습니다( LAPACK 3.6.0 및 이후 버전).

예제

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

행렬 A의 특이값 분해(SVD)를 계산하고 SVD 객체를 반환합니다.

U, S, VVtF의 분해에서 F.U, F.S, F.VF.Vt를 사용하여 얻을 수 있으며, 이때 A = U * Diagonal(S) * Vt입니다. 알고리즘은 Vt를 생성하므로 Vt를 추출하는 것이 V보다 더 효율적입니다. S의 특이값은 내림차순으로 정렬되어 있습니다.

분해를 반복하면 구성 요소 U, SV를 생성합니다.

full = false(기본값)인 경우 "얇은" SVD가 반환됩니다. $M \times N$ 행렬 A의 경우, 전체 분해에서 U$M \times M$이고 V$N \times N$이며, 얇은 분해에서 U$M \times K$이고 V$N \times K$입니다. 여기서 $K = \min(M,N)$는 특이값의 수입니다.

alg = DivideAndConquer()인 경우 분할 정복 알고리즘을 사용하여 SVD를 계산합니다. 또 다른 옵션은 alg = QRIteration()으로, 일반적으로 더 느리지만 더 정확합니다.

Julia 1.3

alg 키워드 인수는 Julia 1.3 이상이 필요합니다.

예제

julia> A = rand(4,3);

julia> F = svd(A); # 분해 객체 저장

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

julia> U, S, V = F; # 반복을 통한 구조 분해

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

julia> Uonly, = svd(A); # U만 저장

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

AB의 일반화된 SVD를 계산하여 F라는 GeneralizedSVD 분해 객체를 반환합니다. 여기서 [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q'입니다.

  • U는 M-by-M 직교 행렬입니다.
  • V는 P-by-P 직교 행렬입니다.
  • Q는 N-by-N 직교 행렬입니다.
  • D1은 첫 K 항목에 1이 있는 M-by-(K+L) 대각 행렬입니다.
  • D2는 상단 오른쪽 L-by-L 블록이 대각선인 P-by-(K+L) 행렬입니다.
  • R0는 가장 오른쪽 (K+L)-by-(K+L) 블록이 비특이 상부 블록 삼각형인 (K+L)-by-N 행렬입니다.

K+L은 행렬 [A; B]의 유효 수치적 계수입니다.

분해를 반복하면 구성 요소 U, V, Q, D1, D2, 및 R0가 생성됩니다.

일반화된 SVD는 AB의 비교가 필요할 때, 예를 들어 인간과 효모 유전체, 신호와 잡음, 또는 클러스터 간과 클러스터 내의 비교와 같은 응용 프로그램에서 사용됩니다. (논의는 Edelman과 Wang을 참조하십시오: https://arxiv.org/abs/1901.00485)

이것은 [A; B][UC; VS]H로 분해하며, 여기서 [UC; VS][A; B]의 열 공간에 대한 자연스러운 직교 기저이고, H = RQ'[A;B]의 행 공간에 대한 자연스러운 비직교 기저입니다. 여기서 상단 행은 A 행렬에 가장 밀접하게 귀속되고, 하단 행은 B 행렬에 귀속됩니다. 다중 코사인/사인 행렬 CSAB의 비율을 측정하는 다중 측정을 제공합니다. UV는 이러한 측정이 이루어지는 방향을 제공합니다.

예제

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!svd와 동일하지만, 복사본을 생성하는 대신 입력 A를 덮어써서 공간을 절약합니다. 자세한 내용은 svd 문서를 참조하세요.

source
svd!(A, B) -> GeneralizedSVD

svd!svd와 동일하지만, 복사본을 만드는 대신 인수 AB를 제자리에서 수정합니다. 자세한 내용은 svd 문서를 참조하십시오.

source
LinearAlgebra.svdvalsFunction
svdvals(A)

A의 특이값을 내림차순으로 반환합니다.

예제

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)

AB의 일반화된 특이값 분해에서 일반화된 특이값을 반환합니다. svd도 참조하십시오.

예제

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)

A의 특이값을 반환하며, 입력을 덮어써서 공간을 절약합니다. svdvalssvd도 참조하세요.

source
svdvals!(A, B)

AB의 일반화된 특이값 분해에서 일반화된 특이값을 반환하며, AB를 덮어써서 공간을 절약합니다. 또한 svdsvdvals를 참조하십시오.

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

Givens 회전 선형 연산자입니다. 필드 cs는 각각 회전 각도의 코사인과 사인을 나타냅니다. Givens 타입은 왼쪽 곱셈 G*A와 켤레 전치 오른쪽 곱셈 A*G'을 지원합니다. 이 타입은 size가 없으므로 G*A의 경우 i2<=size(A,2) 또는 A*G'의 경우 i2<=size(A,1)인 한 임의의 크기의 행렬과 곱할 수 있습니다.

자세한 내용은 givens를 참조하세요.

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

주어진 fg에 대해 Givens 회전 G와 스칼라 r을 계산합니다. 여기서 x 벡터는 다음과 같습니다.

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

곱셈의 결과는 다음과 같습니다.

y = G*x

이때 다음과 같은 속성을 가집니다.

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

자세한 내용은 LinearAlgebra.Givens를 참조하세요.

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

Givens 회전 G와 스칼라 r을 계산합니다. 이때 곱셈의 결과가

B = G*A

다음과 같은 속성을 가집니다.

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

자세한 내용은 LinearAlgebra.Givens를 참조하세요. ```

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

Givens 회전 G와 스칼라 r을 계산합니다. 이때 곱셈의 결과가

B = G*x

다음과 같은 속성을 가집니다.

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

자세한 내용은 LinearAlgebra.Givens를 참조하세요. ```

source
LinearAlgebra.triuFunction
triu(M)

행렬의 상삼각.

예제

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)

k번째 초대각선에서 시작하는 M의 상삼각행렬을 반환합니다.

예제

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)

행렬의 상삼각을 구하고, 그 과정에서 M을 덮어씁니다. 또한 triu를 참조하세요.

source
triu!(M, k::Integer)

Mk번째 초대각선에서 시작하는 상삼각행렬을 반환하며, 이 과정에서 M을 덮어씁니다.

예제

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)

행렬의 하삼각.

예제

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)

k번째 초대각선에서 시작하는 M의 하삼각형을 반환합니다.

예제

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)

행렬의 하삼각을 구하고 그 과정에서 M을 덮어씁니다. 또한 tril를 참조하세요.

source
tril!(M, k::Integer)

Mk번째 초대각선에서 시작하는 하삼각행렬을 반환하며, 이 과정에서 M을 덮어씁니다.

예제

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

행렬 Mk번째 대각선의 인덱스를 제공하는 AbstractRange입니다. 선택적으로 인덱스 스타일을 지정할 수 있으며, 이는 반환되는 범위의 유형을 결정합니다. indstyle isa IndexLinear(기본값)인 경우, 이는 AbstractRange{Integer}를 반환합니다. 반면에 indstyle isa IndexCartesian인 경우, 이는 AbstractRange{CartesianIndex{2}}를 반환합니다.

k가 제공되지 않으면 0(주 대각선에 해당)으로 간주됩니다.

참고: diag, diagm, Diagonal.

예제

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

IndexStyle를 지정하려면 최소한 Julia 1.11이 필요합니다.

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

행렬의 k번째 대각선, 벡터로.

또한 diagm, diagind, Diagonal, isdiag를 참조하세요.

예제

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

`Pair`의 대각선과 벡터로부터 행렬을 구성합니다. 벡터 `kv.second`는 `kv.first` 대각선에 배치됩니다. 기본적으로 행렬은 정사각형이며 그 크기는 `kv`로부터 유추되지만, 필요에 따라 0으로 패딩된 비정사각형 크기 `m`×`n`을 첫 번째 인수로 `m,n`을 전달하여 지정할 수 있습니다. 반복된 대각선 인덱스 `kv.first`에 대해 해당 벡터 `kv.second`의 값이 더해집니다.

`diagm`은 전체 행렬을 구성합니다; 저장 효율적인 버전과 빠른 산술 연산을 원하신다면 [`Diagonal`](@ref), [`Bidiagonal`](@ref), [`Tridiagonal`](@ref) 및 [`SymTridiagonal`](@ref)를 참조하세요.

# 예제

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)

벡터의 요소를 대각선 요소로 갖는 행렬을 생성합니다. 기본적으로 행렬은 정사각형이며 크기는 length(v)로 주어지지만, 비정사각형 크기 m×n는 첫 번째 인수로 m,n을 전달하여 지정할 수 있습니다.

예제

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

QR 분해의 랭크를 반환합니다.

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

S의 랭크를 QR 분해를 통해 계산합니다. tol보다 작은 값은 0으로 간주됩니다. SPQR 매뉴얼을 참조하세요.

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

행렬의 수치적 랭크를 계산하여 svdvals(A)의 출력 중 max(atol, rtol*σ₁)보다 큰 값의 개수를 셉니다. 여기서 σ₁A의 가장 큰 계산된 특이값입니다. atolrtol은 각각 절대 및 상대 허용오차입니다. 기본 상대 허용오차는 n*ϵ이며, 여기서 nA의 가장 작은 차원의 크기이고, ϵA의 요소 유형의 eps입니다.

Note

수치적 랭크는 특이값이 임계 허용오차 max(atol, rtol*σ₁)에 가까운 잘못된 조건의 행렬에 대해 민감하고 부정확한 특성화가 될 수 있습니다. 이러한 경우, 특이값 계산이나 행렬에 대한 약간의 섭동이 하나 이상의 특이값을 임계값을 넘어 이동시켜 rank의 결과를 변경할 수 있습니다. 이러한 변동은 서로 다른 Julia 버전, 아키텍처, 컴파일러 또는 운영 체제 간의 부동 소수점 오류의 변화로 인해 발생할 수 있습니다.

Julia 1.1

atolrtol 키워드 인자는 최소한 Julia 1.1이 필요합니다. Julia 1.0에서는 rtol이 위치 인자로 사용 가능하지만, 이는 Julia 2.0에서 더 이상 지원되지 않을 예정입니다.

예제

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)

어떤 숫자의 반복 가능한 컨테이너 A(모든 차원의 배열 포함)에 대해 p-노름(p=2로 기본 설정됨)을 계산합니다. 이는 A가 해당 길이의 벡터인 것처럼 처리됩니다.

p-노름은 다음과 같이 정의됩니다.

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

여기서 $a_i$A의 항목, $| a_i |$norm $a_i$의 노름, $n$A의 길이입니다. p-노름은 A의 항목의 norm을 사용하여 계산되므로, p != 2인 경우 벡터의 벡터로서의 해석과 호환되지 않습니다.

p는 어떤 숫자 값도 가질 수 있습니다(모든 값이 수학적으로 유효한 벡터 노름을 생성하는 것은 아닙니다). 특히, norm(A, Inf)abs.(A)에서 가장 큰 값을 반환하고, norm(A, -Inf)는 가장 작은 값을 반환합니다. 만약 A가 행렬이고 p=2라면, 이는 프로베니우스 노름과 동등합니다.

두 번째 인수 p는 반드시 norm의 인터페이스의 일부가 아닙니다. 즉, 사용자 정의 유형은 두 번째 인수 없이 norm(A)만 구현할 수 있습니다.

행렬의 연산자 노름을 계산하려면 opnorm를 사용하십시오.

예제

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)

숫자의 경우, $\left( |x|^p \right)^{1/p}$를 반환합니다.

예제

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)

벡터 p-노름에 의해 유도된 연산자 노름(또는 행렬 노름)을 계산합니다. 여기서 유효한 p 값은 1, 2, 또는 Inf입니다. (희소 행렬의 경우, 현재 p=2는 구현되어 있지 않습니다.) 프로베니우스 노름을 계산하기 위해 norm를 사용하십시오.

p=1일 때, 연산자 노름은 A의 최대 절대 열 합계입니다:

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

여기서 $a_{ij}$$A$의 항목이며, $m$$n$은 그 차원입니다.

p=2일 때, 연산자 노름은 스펙트럴 노름으로, A의 가장 큰 특이값과 같습니다.

p=Inf일 때, 연산자 노름은 A의 최대 절대 행 합계입니다:

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

예제

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)

숫자의 경우, $\left( |x|^p \right)^{1/p}$를 반환합니다. 이는 norm와 동일합니다.

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

Adjoint/Transpose로 감싸진 벡터의 경우, A의 연산자 $q$-노름을 반환하며, 이는 p-노름과 동등하며 값은 p = q/(q-1)입니다. 이들은 p = q = 2에서 일치합니다. norm를 사용하여 벡터로서 Ap 노름을 계산합니다.

벡터 공간과 그 쌍대 사이의 노름 차이는 쌍대성과 내적 간의 관계를 보존하기 위해 발생하며, 결과는 1 × n 행렬의 연산자 p-노름과 일치합니다.

예제

julia> v = [1; im];

julia> vc = v';

julia> opnorm(vc, 1)
1.0

julia> norm(vc, 1)
2.0

julia> norm(v, 1)
2.0

julia> opnorm(vc, 2)
1.4142135623730951

julia> norm(vc, 2)
1.4142135623730951

julia> norm(v, 2)
1.4142135623730951

julia> opnorm(vc, Inf)
2.0

julia> norm(vc, Inf)
1.0

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

배열 a를 제자리에서 정규화하여 p-노름이 1이 되도록 합니다. 즉, norm(a, p) == 1입니다. 또한 normalizenorm를 참조하십시오.

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

a를 정규화하여 p-노름이 1이 되도록 합니다. 즉, norm(a, p) == 1입니다. 스칼라의 경우, 이는 sign(a)와 유사하지만, normalize(0) = NaN입니다. normalize!, norm, 및 sign도 참조하십시오.

예제

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)

행렬 M의 조건 수로, 연산자 p-노름을 사용하여 계산됩니다. p의 유효한 값은 1, 2(기본값) 또는 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}\]

행렬 M의 Skeel 조건 수 $\kappa_S$는 선택적으로 벡터 x에 대해 계산되며, 연산자 p-노름을 사용합니다. $\left\vert M \right\vert$$M$의 (항목별) 절대값 행렬을 나타내며; \left\vert M \right\vert{ij} = \left\vert M{ij} \right\vert. p의 유효한 값은 1, 2Inf (기본값)입니다.

이 양은 문헌에서 바우어 조건 수, 상대 조건 수 또는 항목별 상대 조건 수로도 알려져 있습니다.

source
LinearAlgebra.trFunction
tr(M)

행렬의 자취. M의 대각선 요소를 합산합니다.

예제

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

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

행렬 행렬식의 로그. log(det(M))와 동등하지만, 정확성을 높이고 오버플로우/언더플로우를 피할 수 있습니다.

예제

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)

행렬 행렬식의 절대값의 로그. (log(abs(det(M))), sign(det(M)))와 동등하지만, 정확도 및/또는 속도가 향상될 수 있습니다.

예제

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)

행렬의 역행렬. 행렬 M에 대해 M * N = I가 성립하는 행렬 N을 계산합니다. 여기서 I는 단위 행렬입니다. 왼쪽 나눗셈 N = M \ I를 풀어서 계산됩니다.

예제

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) # to be deprecated in Julia 2.0

Moore-Penrose 의사역행렬을 계산합니다.

부동 소수점 요소를 가진 행렬 M의 경우, σ₁M의 가장 큰 특이값일 때, max(atol, rtol*σ₁)보다 큰 특이값만 역전시켜 의사역행렬을 계산하는 것이 편리합니다.

절대 허용오차(atol)와 상대 허용오차(rtol)의 최적 선택은 M의 값과 의사역행렬의 의도된 응용에 따라 다릅니다. 기본 상대 허용오차는 n*ϵ이며, 여기서 nM의 가장 작은 차원의 크기이고, ϵM의 요소 유형의 eps입니다.

밀집한 조건이 좋지 않은 행렬을 최소 제곱 방식으로 역전할 때는 rtol = sqrt(eps(real(float(oneunit(eltype(M))))))를 권장합니다.

자세한 내용은 [issue8859], [B96], [S84], [KY88]를 참조하십시오.

예제

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) # to be deprecated in Julia 2.0

M의 널 공간에 대한 기저를 계산합니다. 여기서 M의 특이값 중 크기가 max(atol, rtol*σ₁)보다 작은 특이 벡터를 포함합니다. 여기서 σ₁M의 가장 큰 특이값입니다.

기본적으로 상대 허용 오차 rtoln*ϵ이며, 여기서 nM의 가장 작은 차원의 크기이고, ϵM의 요소 유형의 eps입니다.

예제

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)

두 벡터, 행렬 또는 숫자의 크로네커 곱을 계산합니다.

실수 벡터 vw에 대해, 크로네커 곱은 외적과 관련이 있으며 kron(v,w) == vec(w * transpose(v)) 또는 w * transpose(v) == reshape(kron(v,w), (length(w), length(v)))로 표현됩니다. 이러한 표현의 왼쪽과 오른쪽에서 vw의 순서가 다름을 주목하세요(열 우선 저장 방식 때문입니다). 복소수 벡터의 경우, 외적 w * v'v의 켤레에 의해 다릅니다.

예제

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)

AB의 크로네커 곱을 계산하고 결과를 C에 저장하여 C의 기존 내용을 덮어씁니다. 이것은 kron의 제자리 버전입니다.

Julia 1.6

이 함수는 Julia 1.6 이상이 필요합니다.

source
Base.expMethod
exp(A::AbstractMatrix)

행렬 A의 지수 행렬을 계산합니다. 이는 다음과 같이 정의됩니다.

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

대칭 또는 에르미트 행렬 A의 경우 고유 분해(eigen)가 사용되며, 그렇지 않은 경우 스케일링 및 제곱 알고리즘이 선택됩니다(자세한 내용은 [H05] 참조).

예제

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)

정사각형 행렬 Aexp(im*A)에 대한 더 효율적인 방법 (특히 AHermitian 또는 실수 Symmetric인 경우).

또한 cispi, sincos, exp를 참조하십시오.

Julia 1.7

행렬과 함께 cis를 사용하는 지원이 Julia 1.7에 추가되었습니다.

예제

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

행렬 거듭제곱, $\exp(p\log(A))$와 동등함

예제

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

행렬 지수, $\exp(\log(b)A)$와 동등합니다.

Julia 1.1

Irrational 숫자(예: )를 행렬로 올리는 지원이 Julia 1.1에 추가되었습니다.

예제

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)

A에 음의 실 고유값이 없으면, A의 주 행렬 로그를 계산합니다. 즉, $e^X = A$이고 모든 고유값 $\lambda$에 대해 $-\pi < Im(\lambda) < \pi$인 유일한 행렬 $X$를 계산합니다. A에 비양수 고유값이 있는 경우, 가능한 경우 비주 행렬 함수가 반환됩니다.

A가 대칭 또는 에르미트인 경우, 그 고유 분해(eigen)가 사용되며, A가 삼각형인 경우에는 개선된 역 스케일링 및 제곱 방법이 사용됩니다(자세한 내용은 [AH12][AHR13] 참조). A가 음의 고유값이 없는 실수인 경우, 실 슈르 형식이 계산됩니다. 그렇지 않으면 복소 슈르 형식이 계산됩니다. 그런 다음 [AHR13]의 상부 (준)삼각형 알고리즘이 상부 (준)삼각형 요소에 사용됩니다.

예제

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)

Return $\sqrt{x}$.

음수 Real 인수에 대해 DomainError를 발생시킵니다. 대신 복소수 음수 인수를 사용하세요. sqrt는 음의 실수 축을 따라 분기 절단이 있음을 유의하세요.

접두사 연산자 sqrt와 동일합니다.

참고: hypot.

예제

julia> sqrt(big(81))
9.0

julia> sqrt(big(-81))
ERROR: DomainError with -81.0:
NaN result for non-NaN input.
Stacktrace:
 [1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]

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

julia> sqrt(-81 - 0.0im)  # -0.0im은 분기 절단 아래에 있습니다
0.0 - 9.0im

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

A에 음의 실 고유값이 없으면, A의 주 행렬 제곱근을 계산합니다. 즉, $X^2 = A$를 만족하고 고유값이 양의 실수 부분을 가지는 유일한 행렬 $X$입니다. 그렇지 않으면 비주 행렬 제곱근이 반환됩니다.

A가 실 대칭 행렬이거나 에르미트 행렬인 경우, 고유 분해(eigen)를 사용하여 제곱근을 계산합니다. 이러한 행렬의 경우, 반올림 오류로 인해 약간 음수로 나타나는 고유값 λ는 0으로 간주됩니다. 보다 정확하게, 모든 고유값이 ≥ -rtol*(max |λ|)인 행렬은 반정의로 간주되어 (에르미트 제곱근을 생성함) 음의 고유값은 0으로 취급됩니다. rtolsqrt의 키워드 인수(에르미트/실 대칭 경우에만)로, 기본값은 size(A,1)에 의해 조정된 기계 정밀도입니다.

그렇지 않은 경우, 제곱근은 Björck-Hammarling 방법 [BH83]에 의해 결정되며, 이는 복소수 슈르 형식(schur)을 계산한 다음 삼각 인자의 복소수 제곱근을 계산합니다. 실 제곱근이 존재하는 경우, 이 방법의 확장 [H87]이 사용되어 실 슈르 형식을 계산한 다음 준삼각 인자의 실 제곱근을 계산합니다.

예제

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

실수 행렬 A의 실수 값 세제곱근을 계산합니다. T = cbrt(A)인 경우, T*T*T ≈ A가 성립합니다. 아래에 주어진 예를 참조하십시오.

A가 대칭인 경우, 즉 HermOrSym{<:Real} 유형인 경우 (eigen)를 사용하여 세제곱근을 찾습니다. 그렇지 않으면, p-번째 근 알고리즘의 특수화된 버전 [S03]이 사용되며, 이는 실수 값 슈르 분해 (schur)를 활용하여 세제곱근을 계산합니다.

예제

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)

정사각형 행렬 A의 행렬 코사인을 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 코사인을 계산합니다. 그렇지 않으면, 코사인은 exp를 호출하여 결정됩니다.

예제

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)

정방 행렬 A의 행렬 사인 값을 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 사인을 계산합니다. 그렇지 않으면, exp를 호출하여 사인을 결정합니다.

예제

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)

정사각 행렬 A의 행렬 사인과 코사인을 계산합니다.

예제

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)

정방 행렬 A의 행렬 탄젠트를 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 탄젠트를 계산합니다. 그렇지 않으면, exp를 호출하여 탄젠트를 결정합니다.

예제

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)

정사각형 행렬 A의 행렬 시컨트를 계산합니다.

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

정사각형 행렬 A의 행렬 코시컨을 계산합니다.

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

정사각 행렬 A의 행렬 코탄젠트를 계산합니다.

source
Base.coshMethod
cosh(A::AbstractMatrix)

정사각형 행렬 A의 행렬 쌍곡선 코사인 값을 계산합니다.

source
Base.sinhMethod
sinh(A::AbstractMatrix)

정사각형 행렬 A의 행렬 쌍곡선 사인(hyperbolic sine)을 계산합니다.

source
Base.tanhMethod
tanh(A::AbstractMatrix)

정사각형 행렬 A의 행렬 쌍곡선 탄젠트를 계산합니다.

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

정방 행렬 A의 행렬 쌍곡선 시컨트를 계산합니다.

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

정방 행렬 A의 행렬 쌍곡선 코시컨트를 계산합니다.

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

정방 행렬 A의 행렬 쌍곡선 코탄젠트를 계산합니다.

source
Base.acosMethod
acos(A::AbstractMatrix)

정사각형 행렬 A의 역행렬 코사인을 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 역 코사인을 계산합니다. 그렇지 않은 경우, 역 코사인은 logsqrt를 사용하여 결정됩니다. 이 함수를 계산하는 데 사용되는 이론 및 로그 공식에 대한 내용은 [AH16_1]을 참조하십시오.

예제

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)

정사각형 행렬 A의 역행렬 사인 값을 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 역 사인을 계산합니다. 그렇지 않으면, 역 사인은 logsqrt를 사용하여 결정됩니다. 이 함수의 계산에 사용되는 이론과 로그 공식에 대한 내용은 [AH16_2]를 참조하십시오.

예제

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)

정방 행렬 A의 역행렬 탄젠트를 계산합니다.

A가 대칭 또는 에르미트인 경우, 고유 분해(eigen)를 사용하여 역 탄젠트를 계산합니다. 그렇지 않은 경우, 역 탄젠트는 log를 사용하여 결정됩니다. 이 함수의 계산에 사용되는 이론 및 로그 공식에 대한 내용은 [AH16_3]을 참조하십시오.

예제

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)

행렬 A의 역행렬 시컨트를 계산합니다.

source
Base.Math.acscMethod
acsc(A::AbstractMatrix)

행렬 A의 역행렬 코시컨트를 계산합니다.

source
Base.Math.acotMethod
acot(A::AbstractMatrix)

행렬 A의 역행렬 코탄젠트를 계산합니다.

source
Base.acoshMethod
acosh(A::AbstractMatrix)

정사각형 행렬 A의 역 쌍곡선 코사인 행렬을 계산합니다. 이 함수를 계산하는 데 사용되는 이론 및 로그 공식에 대해서는 [AH16_4]를 참조하십시오.

source
Base.asinhMethod
asinh(A::AbstractMatrix)

정사각형 행렬 A의 역쌍곡선 행렬 사인 값을 계산합니다. 이 함수를 계산하는 데 사용되는 이론 및 로그 공식에 대해서는 [AH16_5]를 참조하십시오.

source
Base.atanhMethod
atanh(A::AbstractMatrix)

정사각형 행렬 A의 역 쌍곡선 행렬 탄젠트를 계산합니다. 이 함수를 계산하는 데 사용되는 이론과 로그 공식에 대해서는 [AH16_6]를 참조하십시오.

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

행렬 A의 역행렬 쌍곡선 시컨트를 계산합니다.

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

행렬 A의 역행렬 쌍곡선 코시컨트 값을 계산합니다.

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

행렬 A의 역행렬 쌍곡선 코탄젠트를 계산합니다.

source
LinearAlgebra.lyapFunction
lyap(A, C)

연속 리아푸노프 방정식 AX + XA' + C = 0의 해 X를 계산합니다. 여기서 A의 고유값 중 어떤 것도 실수가 0인 부분을 가지지 않으며, 두 개의 고유값이 서로 음의 복소수 켤레가 아닙니다.

예제

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)

실베스터 방정식 AX + XB + C = 0의 해 X를 계산합니다. 여기서 A, BC는 호환 가능한 차원을 가지며 A-B는 실수가 같은 고유값을 가지지 않습니다.

예제

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

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

julia> C = [1. 2.; -2. 1]
2×2 Matrix{Float64}:
  1.0  2.0
 -2.0  1.0

julia> X = sylvester(A, B, C)
2×2 Matrix{Float64}:
 -4.46667   1.93333
  3.73333  -1.8

julia> A*X + X*B ≈ -C
true
source
LinearAlgebra.issuccessFunction
issuccess(F::Factorization)

행렬의 인수가 성공적으로 이루어졌는지 테스트합니다.

Julia 1.6

issuccess(::CholeskyPivoted)는 Julia 1.6 이상이 필요합니다.

예제

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

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

행렬의 LU 분해가 성공했는지 테스트합니다. 기본적으로 유효하지만 랭크가 부족한 U 인자를 생성하는 분해는 실패로 간주됩니다. allowsingular = true를 전달하여 이를 변경할 수 있습니다.

Julia 1.11

allowsingular 키워드 인자는 Julia 1.11에서 추가되었습니다.

예제

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

행렬이 대칭인지 테스트합니다.

예제

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

행렬이 양의 정부호(및 에르미트)인지 확인하기 위해 A의 콜레스키 분해를 시도합니다.

자세한 내용은 isposdef!, cholesky를 참조하세요.

예제

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

행렬이 양의 정부호(및 에르미트)인지 확인하기 위해 A의 Cholesky 분해를 시도하여 A를 덮어씁니다. isposdef도 참조하십시오.

예제

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

Ak번째 초대각선에서 시작하는 하삼각 행렬인지 테스트합니다.

예제

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

Ak번째 초대각선에서 시작하는 상삼각행렬인지 테스트합니다.

예시

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

행렬이 대각선인지 테스트합니다. iszero(A[i,j])i == j가 아닌 경우에 참인 경우입니다. A가 정사각형일 필요는 없으며, 정사각형인지도 확인하고 싶다면 size(A, 1) == size(A, 2)를 확인해야 합니다.

예제

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

행렬이 에르미트인지 테스트합니다.

예시

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)

지연 전치. 반환된 객체를 변형하면 A도 적절하게 변형됩니다. 종종, 그러나 항상 그런 것은 아니며, Transpose(A)를 생성합니다. 여기서 Transpose는 지연 전치 래퍼입니다. 이 작업은 재귀적이라는 점에 유의하십시오.

이 작업은 선형 대수 사용을 위해 의도되었습니다 - 일반 데이터 조작에 대해서는 permutedims를 참조하십시오. 이는 비재귀적입니다.

예제

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 # 전치의 전치는 부모를 풀어냅니다
true

julia> Transpose(B) # 그러나 생성자는 항상 인수를 래핑합니다
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # B를 수정하면 A도 자동으로 수정됩니다

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

복소 행렬의 경우, adjoint 연산은 켤레 전치와 동등합니다.

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

AbstractVectortranspose는 행 벡터입니다:

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

julia> transpose(v) # 행 벡터를 반환합니다
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia> transpose(v) * v # 내적을 계산합니다
14

행렬의 행렬에 대해 개별 블록은 재귀적으로 작동합니다:

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

julia> D = reshape([C, 2C, 3C, 4C], 2, 2) # 블록 행렬을 구성합니다
2×2 Matrix{Matrix{Int64}}:
 [1 3; 2 4]  [3 9; 6 12]
 [2 6; 4 8]  [4 12; 8 16]

julia> transpose(D) # 블록이 재귀적으로 전치됩니다
2×2 transpose(::Matrix{Matrix{Int64}}) with eltype Transpose{Int64, Matrix{Int64}}:
 [1 2; 3 4]   [2 4; 6 8]
 [3 6; 9 12]  [4 8; 12 16]
source
transpose(F::Factorization)

팩토리제이션 F의 지연 전치. 기본적으로 TransposeFactorization를 반환하지만, 실수 eltype을 가진 Factorization의 경우 AdjointFactorization를 반환합니다.

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

행렬 A를 전치하여 행렬 X에 저장합니다. size(X)size(transpose(A))와 같아야 합니다. 필요할 경우 X의 rowval 및 nzval 크기를 조정하는 것 외에는 추가 메모리가 할당되지 않습니다.

halfperm!를 참조하세요.

source
transpose!(dest,src)

배열 src를 전치하고 결과를 미리 할당된 배열 dest에 저장합니다. dest의 크기는 (size(src,2),size(src,1))에 해당해야 합니다. 제자리 전치는 지원되지 않으며, srcdest가 겹치는 메모리 영역을 가지면 예기치 않은 결과가 발생할 수 있습니다.

예제

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
전치

기본 선형 대수 객체의 전치 뷰에 대한 게으른 래퍼 유형으로, 일반적으로 AbstractVector/AbstractMatrix입니다. 일반적으로 Transpose 생성자는 직접 호출하지 말고 대신 transpose를 사용하십시오. 뷰를 구체화하려면 copy를 사용하십시오.

이 유형은 선형 대수 사용을 위해 설계되었습니다 - 일반 데이터 조작에 대해서는 permutedims를 참조하십시오.

예제

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

julia> Transpose(A)
2×2 transpose(::Matrix{Int64}) with eltype Int64:
 2  0
 3  0
source
Base.adjointFunction
A'
adjoint(A)

게으른 수반(켤레 전치). adjoint는 요소에 재귀적으로 적용된다는 점에 유의하십시오.

숫자 유형의 경우, adjoint는 복소수 켤레를 반환하며, 따라서 실수에 대해서는 항등 함수와 동일합니다.

이 작업은 선형 대수 사용을 위해 의도되었습니다 - 일반 데이터 조작에 대해서는 permutedims를 참조하십시오.

예제

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

julia> B = A' # equivalently adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im

julia> B isa Adjoint
true

julia> adjoint(B) === A # 수반의 수반은 부모를 풀어냅니다
true

julia> Adjoint(B) # 그러나 생성자는 항상 인수를 래핑합니다
2×2 adjoint(adjoint(::Matrix{Complex{Int64}})) with eltype Complex{Int64}:
 3+2im  9+2im
 0+0im  0+0im

julia> B[1,2] = 4 + 5im; # B를 수정하면 A도 자동으로 수정됩니다

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

실수 행렬의 경우, adjoint 작업은 transpose와 동일합니다.

julia> A = reshape([x for x in 1:4], 2, 2)
2×2 Matrix{Int64}:
 1  3
 2  4

julia> A'
2×2 adjoint(::Matrix{Int64}) with eltype Int64:
 1  2
 3  4

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

AbstractVector의 수반은 행 벡터입니다:

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

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

julia> x'x # 내적을 계산합니다, 동등하게 x' * x
25 + 0im

행렬의 행렬에 대해 개별 블록은 재귀적으로 작동합니다:

julia> A = reshape([x + im*x for x in 1:4], 2, 2)
2×2 Matrix{Complex{Int64}}:
 1+1im  3+3im
 2+2im  4+4im

julia> C = reshape([A, 2A, 3A, 4A], 2, 2)
2×2 Matrix{Matrix{Complex{Int64}}}:
 [1+1im 3+3im; 2+2im 4+4im]  [3+3im 9+9im; 6+6im 12+12im]
 [2+2im 6+6im; 4+4im 8+8im]  [4+4im 12+12im; 8+8im 16+16im]

julia> C'
2×2 adjoint(::Matrix{Matrix{Complex{Int64}}}) with eltype Adjoint{Complex{Int64}, Matrix{Complex{Int64}}}:
 [1-1im 2-2im; 3-3im 4-4im]    [2-2im 4-4im; 6-6im 8-8im]
 [3-3im 6-6im; 9-9im 12-12im]  [4-4im 8-8im; 12-12im 16-16im]
source
adjoint(F::Factorization)

팩토리제이션 F의 지연된 어드전트. 기본적으로 AdjointFactorization 래퍼를 반환합니다.

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

행렬 A의 전치 행렬을 변환하고 행렬 X의 요소의 어드조인트를 저장합니다. size(X)size(transpose(A))와 같아야 합니다. 필요할 경우 X의 rowval 및 nzval을 크기 조정하는 것 외에는 추가 메모리가 할당되지 않습니다.

halfperm!을 참조하세요.

source
adjoint!(dest,src)

켤레 전치 배열 src를 계산하고 결과를 미리 할당된 배열 dest에 저장합니다. dest의 크기는 (size(src,2),size(src,1))에 해당해야 합니다. 제자리 전치는 지원되지 않으며, srcdest가 겹치는 메모리 영역을 가지면 예기치 않은 결과가 발생할 수 있습니다.

예제

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

기본 선형 대수 객체의 어드전트 뷰에 대한 지연 래퍼 유형으로, 일반적으로 AbstractVector/AbstractMatrix입니다. 일반적으로 Adjoint 생성자는 직접 호출하지 말고 대신 adjoint를 사용하십시오. 뷰를 구체화하려면 copy를 사용하십시오.

이 유형은 선형 대수 사용을 위해 설계되었습니다 - 일반 데이터 조작에 대해서는 permutedims를 참조하십시오.

예제

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

julia> Adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im
source
Base.copyMethod
copy(A::Transpose)
copy(A::Adjoint)

지연 행렬 전치/수반을 즉시 평가합니다. 전치는 요소에 재귀적으로 적용된다는 점에 유의하십시오.

이 작업은 선형 대수 사용을 위해 의도되었습니다 - 일반 데이터 조작에 대해서는 permutedims를 참조하십시오. 이는 비재귀적입니다.

예제

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

배열 요소 간의 거리를 요소 크기 단위로 차원 1에서 반환합니다.

예시

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)

행렬이 정사각형인지 확인한 다음, 공통 차원을 반환합니다. 여러 인수가 있는 경우 벡터를 반환합니다.

예제

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는 이중 정밀도 gemm!를 사용하여 컴퓨터의 최대 플롭 비율을 계산합니다. 기본적으로 인수가 지정되지 않으면 n x n 크기의 두 개의 Float64 행렬을 곱하며, 여기서 n = 4096입니다. 기본 BLAS가 여러 스레드를 사용하는 경우 더 높은 플롭 비율이 실현됩니다. BLAS 스레드 수는 BLAS.set_num_threads(n)로 설정할 수 있습니다.

키워드 인수 eltype이 제공되면, peakflops는 최대 플롭 비율을 계산하기 위해 eltype 유형의 요소를 가진 행렬을 구성합니다.

기본적으로 peakflops는 3회의 실험 중 가장 좋은 타이밍을 사용합니다. ntrials 키워드 인수가 제공되면, peakflops는 최상의 타이밍을 선택하기 위해 그만큼의 실험을 사용합니다.

키워드 인수 paralleltrue로 설정되면, peakflops는 모든 작업 프로세서에서 병렬로 실행됩니다. 전체 병렬 컴퓨터의 플롭 비율이 반환됩니다. 병렬로 실행할 때는 1개의 BLAS 스레드만 사용됩니다. 인수 n은 여전히 각 프로세서에서 해결되는 문제의 크기를 나타냅니다.

Julia 1.1

이 함수는 최소한 Julia 1.1이 필요합니다. Julia 1.0에서는 표준 라이브러리 InteractiveUtils에서 사용할 수 있습니다.

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

정사각형 행렬 A의 에르미트 부분을 반환합니다. 이는 (A + A') / 2로 정의되며, Hermitian 행렬로 반환됩니다. 실수 행렬 A의 경우, 이는 A의 대칭 부분으로도 알려져 있으며, 때때로 "연산자 실수 부분"이라고도 불립니다. 선택적 인수 uploHermitian 뷰의 해당 인수를 제어합니다. 실수 행렬의 경우, 후자는 Symmetric 뷰와 동등합니다.

상응하는 제자리 연산에 대해서는 hermitianpart!를 참조하십시오.

Julia 1.10

이 함수는 Julia 1.10 이상이 필요합니다.

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

정사각형 행렬 A를 제자리에서 그 에르미트 부분 (A + A') / 2로 덮어쓰고, Hermitian(A, uplo)를 반환합니다. 실수 행렬 A의 경우, 이는 A의 대칭 부분으로도 알려져 있습니다.

상응하는 비제자리 연산에 대해서는 hermitianpart를 참조하십시오.

Julia 1.10

이 함수는 Julia 1.10 이상이 필요합니다.

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

행렬 A의 요소를 다음과 같이 어드전션을 사용하여 B에 효율적으로 복사합니다:

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

요소 B[ir_dest, jr_dest]는 덮어쓰여집니다. 또한, 인덱스 범위 매개변수는 length(ir_dest) == length(jr_src)length(jr_dest) == length(ir_src)를 만족해야 합니다.

source
LinearAlgebra.copy_transpose!Function
copy_transpose!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
                A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> B

행렬 A의 요소를 전치하여 B에 효율적으로 복사합니다:

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

요소 B[ir_dest, jr_dest]는 덮어쓰여집니다. 또한, 인덱스 범위 매개변수는 length(ir_dest) == length(jr_src)length(jr_dest) == length(ir_src)를 만족해야 합니다.

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

행렬 M의 요소를 문자 매개변수 tM에 따라 B로 효율적으로 복사합니다:

tM목적지출처
'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]

요소 B[ir_dest, jr_dest]는 덮어쓰여집니다. 또한, 인덱스 범위 매개변수는 length(ir_dest) == length(jr_src)length(jr_dest) == length(ir_src)를 만족해야 합니다.

또한 copyto!copy_adjoint!를 참조하십시오.

source

Low-level matrix operations

많은 경우, 미리 할당된 출력 벡터나 행렬을 제공할 수 있는 제자리 버전의 행렬 연산이 있습니다. 이는 반복적인 할당의 오버헤드를 피하기 위해 중요한 코드를 최적화할 때 유용합니다. 이러한 제자리 연산은 일반적인 Julia 관례에 따라 아래에 !로 접미사가 붙습니다 (예: mul!).

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

행렬-행렬 또는 행렬-벡터 곱 $A B$를 계산하고 결과를 Y에 저장하여 기존의 Y 값을 덮어씁니다. YA 또는 B와 별칭이 되어서는 안 됩니다.

예제

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

구현

사용자 정의 행렬 및 벡터 유형의 경우, 가능하다면 3-인수 mul!를 직접 구현하기보다는 5-인수 mul!를 구현하는 것이 좋습니다.

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

결합된 제자리 행렬-행렬 또는 행렬-벡터 곱셈-덧셈 $A B α + C β$. 결과는 C에 저장되며, 이를 덮어씁니다. CA 또는 B와 별개이어야 합니다.

Julia 1.3

다섯 개 인수를 가진 mul!는 최소한 Julia 1.3이 필요합니다.

예제

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]; # C의 원래 값의 복사본

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

스칼라 a로 배열 B를 스케일링하여 B를 제자리에서 덮어씁니다. 스칼라를 오른쪽에서 곱하려면 rmul!를 사용하세요. 스케일링 작업은 aB의 요소 간의 곱셈 *의 의미를 존중합니다. 특히, 이는 NaN±Inf와 같은 비유한 숫자를 포함하는 곱셈에도 적용됩니다.

Julia 1.1

Julia 1.1 이전에는 BNaN±Inf 항목이 일관되지 않게 처리되었습니다.

예제

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)

행렬-행렬 곱 $AB$를 계산하고 B를 덮어쓰며 결과를 반환합니다. 여기서 ADiagonal, UpperTriangular 또는 LowerTriangular와 같은 특수 행렬 유형이거나, QR에서 볼 수 있는 일부 직교 유형이어야 합니다.

예제

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)

배열 A를 스칼라 b로 스케일링하여 A를 제자리에서 덮어씁니다. 스칼라를 왼쪽에서 곱하려면 lmul!를 사용하세요. 스케일링 작업은 A의 요소와 b 사이의 곱셈 *의 의미를 존중합니다. 특히, 이는 NaN±Inf와 같은 비유한 숫자를 포함하는 곱셈에도 적용됩니다.

Julia 1.1

Julia 1.1 이전에는 ANaN±Inf 항목이 일관되지 않게 처리되었습니다.

예제

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)

행렬-행렬 곱 $AB$를 계산하여 A를 덮어쓰고 결과를 반환합니다. 여기서 BDiagonal, UpperTriangular 또는 LowerTriangular와 같은 특수 행렬 유형이거나, QR와 같은 일부 직교 유형이어야 합니다.

예제

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

A \ B를 제자리에서 계산하고 결과를 Y에 저장하며 결과를 반환합니다.

인수 A행렬이 아니어야 합니다. 오히려 행렬 대신에 인수는 인수분해 객체여야 합니다(예: factorize 또는 cholesky로 생성된). 그 이유는 인수분해 자체가 비용이 많이 들고 일반적으로 메모리를 할당하기 때문입니다(비록 lu!와 같은 방법으로 제자리에서 수행할 수도 있지만), 그리고 ldiv!를 요구하는 성능이 중요한 상황은 일반적으로 A의 인수분해에 대한 세밀한 제어를 요구합니다.

Note

DiagonalUpperTriangular와 같은 특정 구조화된 행렬 유형은 이미 인수분해된 형태이므로 허용됩니다.

예제

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)

A \ B를 제자리에서 계산하고 결과를 저장하기 위해 B를 덮어씁니다.

인수 A행렬이 아니어야 합니다. 오히려 행렬 대신에 인수는 인수분해 객체여야 합니다(예: factorize 또는 cholesky로 생성된). 그 이유는 인수분해 자체가 비용이 많이 들고 일반적으로 메모리를 할당하기 때문입니다(비록 lu!와 같은 방법으로 제자리에서 수행할 수도 있지만), 그리고 ldiv!를 요구하는 성능이 중요한 상황은 일반적으로 A의 인수분해에 대한 세밀한 제어를 요구합니다.

Note

DiagonalUpperTriangular와 같은 특정 구조화된 행렬 유형은 이미 인수분해된 형태이므로 허용됩니다.

예제

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)

스칼라 a로 배열 B의 각 항목을 나누고 B를 제자리에서 덮어씁니다. 오른쪽에서 스칼라를 나누려면 rdiv!를 사용하세요.

예제

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

가우스 소거법을 사용하여 A \ B를 제자리에서 계산하고 결과를 B에 저장하며 결과를 반환합니다. 이 과정에서 A의 대각선도 덮어씌워집니다.

Julia 1.11

Tridiagonal 왼쪽 항에 대한 ldiv!는 최소한 Julia 1.11이 필요합니다.

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

A / B를 제자리에서 계산하고 결과를 저장하기 위해 A를 덮어씁니다.

인수 B행렬이 아니어야 합니다. 대신, 행렬 대신에 인수는 인수분해 객체여야 합니다(예: factorize 또는 cholesky로 생성된). 그 이유는 인수분해 자체가 비용이 많이 들고 일반적으로 메모리를 할당하기 때문입니다(비록 lu!와 같은 방법으로 제자리에서 수행할 수도 있지만), 그리고 rdiv!를 요구하는 성능이 중요한 상황은 일반적으로 B의 인수분해에 대한 세밀한 제어를 요구합니다.

Note

DiagonalUpperTriangular와 같은 특정 구조화된 행렬 유형은 이미 인수분해된 형태이므로 허용됩니다.

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

배열 A의 각 항목을 스칼라 b로 나누고 A를 제자리에서 덮어씁니다. 왼쪽에서 스칼라를 나누려면 ldiv!를 사용하세요.

예제

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

줄리아(Julia)에서는(과학 계산의 많은 부분에서) 밀집 선형 대수 연산이 LAPACK library를 기반으로 하며, 이는 기본 선형 대수 빌딩 블록으로 알려진 BLAS 위에 구축됩니다. 모든 컴퓨터 아키텍처에 대해 사용할 수 있는 고도로 최적화된 BLAS 구현이 있으며, 때때로 고성능 선형 대수 루틴에서는 BLAS 함수를 직접 호출하는 것이 유용합니다.

LinearAlgebra.BLAS는 일부 BLAS 함수에 대한 래퍼를 제공합니다. 입력 배열 중 하나를 덮어쓰는 BLAS 함수는 이름이 '!'로 끝납니다. 일반적으로 BLAS 함수는 Float32, Float64, ComplexF32, 및 ComplexF64 배열에 대해 네 가지 메서드가 정의되어 있습니다.

BLAS character arguments

많은 BLAS 함수는 인수로 전치 여부를 결정하는 인수(trans), 참조할 행렬의 삼각형(uplo 또는 ul), 삼각 행렬의 대각선이 모두 1로 가정될 수 있는지 여부(dA), 또는 행렬 곱셈에서 입력 인수가 속하는 쪽(side)을 허용합니다. 가능한 옵션은 다음과 같습니다:

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)

BLAS 라이브러리가 사용할 스레드 수를 n::Integer와 같게 설정합니다.

또한 nothing을 허용하며, 이 경우 줄리아는 기본 스레드 수를 추측하려고 시도합니다. nothing을 전달하는 것은 권장되지 않으며 주로 역사적인 이유로 존재합니다.

source
LinearAlgebra.BLAS.get_num_threadsFunction
get_num_threads()

BLAS 라이브러리가 사용하는 스레드 수를 가져옵니다.

Julia 1.6

get_num_threads는 최소한 Julia 1.6이 필요합니다.

source

BLAS 함수는 처음 제안된 시기, 입력 매개변수의 유형 및 연산의 복잡성에 따라 세 그룹, 즉 세 가지 수준으로 나눌 수 있습니다.

Level 1 BLAS functions

레벨 1 BLAS 함수는 [(Lawson, 1979)][Lawson-1979]에서 처음 제안되었으며, 스칼라와 벡터 간의 연산을 정의합니다.

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

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

Xc*X + s*Y로 덮어쓰고 Y-conj(s)*X + c*Y로 덮어씁니다. 배열 X의 첫 n 요소와 보폭 incx를 사용하고 배열 Y의 첫 n 요소와 보폭 incy를 사용합니다. XY를 반환합니다.

Julia 1.5

rot!는 최소한 Julia 1.5가 필요합니다.

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

배열 X의 처음 n 요소를 a*X로 덮어씁니다. 보폭은 incx입니다. X를 반환합니다.

nincx가 제공되지 않으면 length(X)stride(X,1)이 사용됩니다.

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

Xa로 스케일링하여 배열 X의 처음 n 요소를 incx의 보폭으로 반환합니다.

nincx가 제공되지 않으면 length(X)stride(X,1)이 사용됩니다.

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

배열 Xn 요소를 보폭 incx로 배열 Y에 보폭 incy로 복사합니다. Y를 반환합니다.

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

두 벡터의 내적, 배열 Xn 요소와 보폭 incx, 배열 Yn 요소와 보폭 incy로 구성됩니다.

예제

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 함수로, 배열 Xn 요소와 보폭 incx, 배열 Yn 요소와 보폭 incy로 구성됩니다.

예제

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 함수로, stride incx를 가진 배열 Xn 요소와 stride incy를 가진 배열 Un 요소로 구성되며, 첫 번째 벡터를 켤레합니다.

예제

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)

incx의 보폭을 가진 배열 Xn 요소로 구성된 벡터의 2-노름입니다.

예제

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)

배열 X의 첫 번째 n 요소의 크기의 합을 stride incx로 계산합니다.

실수 배열의 경우, 크기는 절대값입니다. 복소수 배열의 경우, 크기는 실수 부분의 절대값과 허수 부분의 절대값의 합입니다.

예제

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)

dx의 최대 절대값을 가진 요소의 인덱스를 찾습니다. ndx의 길이이며, incx는 보폭입니다. nincx가 제공되지 않으면 기본값인 n=length(dx)incx=stride1(dx)를 가정합니다.

source

Level 2 BLAS functions

레벨 2 BLAS 함수는 [(Dongarra, 1988)][Dongarra-1988]에 발표되었으며, 행렬-벡터 연산을 정의합니다.

[동가라-1988]: https://dl.acm.org/doi/10.1145/42288.42291

벡터 반환

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

벡터 yalpha*A*x + beta*y 또는 alpha*A'x + beta*y로 업데이트합니다. tA에 따라 다릅니다. alphabeta는 스칼라입니다. 업데이트된 y를 반환합니다.

source
LinearAlgebra.BLAS.gemvMethod
gemv(tA, alpha, A, x)

alpha*A*x 또는 alpha*A'x를 반환합니다. tA에 따라 다릅니다. alpha는 스칼라입니다.

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

벡터 yalpha*A*x + beta*y 또는 alpha*A'*x + beta*y로 업데이트합니다. 이는 trans에 따라 다릅니다. 행렬 Am x size(A,2) 크기의 일반 밴드 행렬로, kl 개의 하삼각 대각선과 ku 개의 상삼각 대각선을 가집니다. alphabeta는 스칼라입니다. 업데이트된 y를 반환합니다.

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

trans에 따라 alpha*A*x 또는 alpha*A'*x를 반환합니다. 행렬 Akl개의 하삼각 대각선과 ku개의 상삼각 대각선을 가진 m x size(A,2) 차원의 일반 밴드 행렬이며, alpha는 스칼라입니다.

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

벡터 yalpha*A*x + beta*y로 업데이트합니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다. alphabeta는 스칼라입니다. 업데이트된 y를 반환합니다.

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

alpha*A*x를 반환합니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다. alpha는 스칼라입니다.

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

A*x를 반환합니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다.

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

벡터 yα*A*x + β*y로 업데이트합니다. 여기서 A는 패킹 형식 AP로 제공된 에르미트 행렬입니다.

uplo = 'U'인 경우, 배열 AP는 에르미트 행렬의 상삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[1, 2]A[2, 2]를 포함해야 합니다. 계속해서 이와 같은 방식으로 진행됩니다.

uplo = 'L'인 경우, 배열 AP는 에르미트 행렬의 하삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[2, 1]A[3, 1]을 포함해야 합니다. 계속해서 이와 같은 방식으로 진행됩니다.

스칼라 입력 αβ는 복소수 또는 실수여야 합니다.

배열 입력 x, yAP는 모두 ComplexF32 또는 ComplexF64 유형이어야 합니다.

업데이트된 y를 반환합니다.

Julia 1.5

hpmv!는 최소한 Julia 1.5가 필요합니다.

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

벡터 yalpha*A*x + beta*y로 업데이트합니다. A는 대칭으로 가정됩니다. Aul 삼각형만 사용됩니다. alphabeta는 스칼라입니다. 업데이트된 y를 반환합니다.

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

alpha*A*x를 반환합니다. A는 대칭으로 가정됩니다. Aul 삼각형만 사용됩니다. alpha는 스칼라입니다.

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

벡터 yalpha*A*x + beta*y로 업데이트합니다. 여기서 Asize(A,2) 차원의 대칭 밴드 행렬이며, k개의 슈퍼 대각선이 인수 A에 저장되어 있습니다. A의 저장 레이아웃은 https://www.netlib.org/lapack/explore-html/의 참조 BLAS 모듈, 레벨-2 BLAS에서 설명되어 있습니다. 오직 uplo 삼각형의 A만 사용됩니다.

업데이트된 y를 반환합니다.

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

alpha*A*x를 반환합니다. 여기서 A는 인수 A에 저장된 k개의 초대각선을 가진 대칭 밴드 행렬이며, size(A,2)의 차수를 가집니다. 오직 uplo 삼각형의 A만 사용됩니다.

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

A*x를 반환합니다. 여기서 A는 인수 A에 저장된 k개의 초대각선을 가진 대칭 밴드 행렬이며, 차수는 size(A,2)입니다. 오직 uplo 삼각형의 A만 사용됩니다.

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

벡터 yα*A*x + β*y로 업데이트합니다. 여기서 A는 패킹 형식 AP로 제공되는 대칭 행렬입니다.

uplo = 'U'인 경우, 배열 AP는 대칭 행렬의 상삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[1, 2]A[2, 2]를 포함해야 하며, 계속해서 진행됩니다.

uplo = 'L'인 경우, 배열 AP는 대칭 행렬의 하삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[2, 1]A[3, 1]을 포함해야 하며, 계속해서 진행됩니다.

스칼라 입력 αβ는 실수여야 합니다.

배열 입력 x, yAP는 모두 Float32 또는 Float64 유형이어야 합니다.

업데이트된 y를 반환합니다.

Julia 1.5

spmv!는 최소한 Julia 1.5가 필요합니다.

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

op(A)*b를 반환합니다. 여기서 optA에 의해 결정됩니다. Aul 삼각형만 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다. 곱셈은 b에서 제자리에서 발생합니다.

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

op(A)*b를 반환합니다. 여기서 optA에 의해 결정됩니다. Aul 삼각형만 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다.

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

A*x = b의 해로 b를 덮어쓰거나 tAul에 의해 결정된 다른 두 변형 중 하나로 덮어씁니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다. 업데이트된 b를 반환합니다.

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

A*x = b의 해를 반환하거나 tAul에 의해 결정된 다른 두 변형 중 하나를 반환합니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다.

source

행렬 반환

LinearAlgebra.BLAS.ger!Function
ger!(alpha, x, y, A)

벡터 xy를 사용하여 행렬 A의 순위-1 업데이트를 수행합니다: alpha*x*y' + A.

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

복소 배열에 대해서만 사용 가능한 메서드입니다. Hermitian 행렬 A의 랭크-1 업데이트로 벡터 x를 사용하여 alpha*x*x' + A를 계산합니다. uplo는 업데이트할 A의 삼각형을 제어합니다. A를 반환합니다.

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

대칭 행렬 A의 랭크-1 업데이트로, 벡터 x를 사용하여 alpha*x*transpose(x) + A로 업데이트합니다. uplo는 업데이트할 A의 삼각형을 제어합니다. A를 반환합니다.

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

행렬 AA+α*x*x'로 업데이트합니다. 여기서 A는 패킹 형식 AP로 제공되는 대칭 행렬이고, x는 벡터입니다.

uplo = 'U'인 경우, 배열 AP는 대칭 행렬의 상삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[1, 2]A[2, 2]를 포함해야 합니다. 계속해서 이와 같은 방식으로 진행됩니다.

uplo = 'L'인 경우, 배열 AP는 대칭 행렬의 하삼각 부분을 열 단위로 순차적으로 포함해야 하며, 따라서 AP[1]A[1, 1]을 포함하고, AP[2]AP[3]는 각각 A[2, 1]A[3, 1]을 포함해야 합니다. 계속해서 이와 같은 방식으로 진행됩니다.

스칼라 입력 α는 실수여야 합니다.

배열 입력 xAP는 모두 Float32 또는 Float64 유형이어야 합니다. 업데이트된 AP를 반환합니다.

Julia 1.8

spr!는 최소한 Julia 1.8이 필요합니다.

source

Level 3 BLAS functions

레벨 3 BLAS 함수는 [(Dongarra, 1990)][Dongarra-1990]에 발표되었으며, 행렬-행렬 연산을 정의합니다.

[동가라-1990]: https://dl.acm.org/doi/10.1145/77626.79170

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

지정된 uplo에 따라 C의 하삼각 또는 상삼각 부분을 alpha*A*B + beta*C 또는 tAtB에 따라 다른 변형으로 업데이트합니다. 업데이트된 C를 반환합니다.

Julia 1.11

gemmt!는 최소한 Julia 1.11이 필요합니다.

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

uplo에 의해 지정된 A*B의 하삼각 또는 상삼각 부분 또는 tAtB에 따라 다른 세 가지 변형을 반환합니다.

Julia 1.11

gemmt는 최소한 Julia 1.11이 필요합니다.

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

uplo에 의해 지정된 A*B의 하삼각 또는 상삼각 부분 또는 tAtB에 따라 다른 세 가지 변형을 반환합니다.

Julia 1.11

gemmt는 최소한 Julia 1.11이 필요합니다.

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

Calpha*A*B + beta*C로 업데이트하거나 tAtB에 따라 다른 세 가지 변형으로 업데이트합니다. 업데이트된 C를 반환합니다.

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

Calpha*A*B + beta*C 또는 alpha*B*A + beta*C로 업데이트합니다. 이는 side에 따라 다릅니다. A는 대칭으로 가정됩니다. Aul 삼각형만 사용됩니다. 업데이트된 C를 반환합니다.

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

alpha*A*B 또는 alpha*B*Aside에 따라 반환합니다. A는 대칭으로 가정됩니다. Aul 삼각형만 사용됩니다.

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

A*B 또는 B*Aside에 따라 반환합니다. A는 대칭으로 가정됩니다. Aul 삼각형만 사용됩니다.

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

Calpha*A*B + beta*C 또는 alpha*B*A + beta*C로 업데이트합니다. 이는 side에 따라 다릅니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다. 업데이트된 C를 반환합니다.

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

alpha*A*B 또는 alpha*B*Aside에 따라 반환합니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다.

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

side에 따라 A*B 또는 B*A를 반환합니다. A는 에르미트 행렬로 가정됩니다. Aul 삼각형만 사용됩니다.

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

대칭 행렬 C의 랭크-k 업데이트를 alpha*A*transpose(A) + beta*C 또는 alpha*transpose(A)*A + beta*C로 수행합니다. 이는 trans에 따라 다릅니다. 오직 uplo 삼각형의 C만 사용됩니다. C를 반환합니다.

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

A의 상삼각형 또는 하삼각형을 uplo에 따라 반환하며, alpha*A*transpose(A) 또는 alpha*transpose(A)*Atrans에 따라 반환합니다.

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

복소 배열에 대해서만 메서드가 제공됩니다. Hermitian 행렬 C의 랭크-k 업데이트는 trans에 따라 alpha*A*A' + beta*C 또는 alpha*A'*A + beta*C로 수행됩니다. 오직 uplo 삼각형의 C만 업데이트됩니다. C를 반환합니다.

source
LinearAlgebra.BLAS.herkFunction
herk(uplo, trans, alpha, A)

복소 배열에 대해서만 메서드가 있습니다. trans에 따라 alpha*A*A' 또는 alpha*A'*Auplo 삼각형을 반환합니다.

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

대칭 행렬 C의 Rank-2k 업데이트는 alpha*A*transpose(B) + alpha*B*transpose(A) + beta*C 또는 alpha*transpose(A)*B + alpha*transpose(B)*A + beta*Ctrans에 따라 수행됩니다. 오직 uplo 삼각형의 C만 사용됩니다. C를 반환합니다.

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

alpha*A*transpose(B) + alpha*B*transpose(A) 또는 alpha*transpose(A)*B + alpha*transpose(B)*Auplo 삼각형을 반환합니다. 이는 trans에 따라 다릅니다.

source
syr2k(uplo, trans, A, B)

uplo 삼각형을 반환합니다 A*transpose(B) + B*transpose(A) 또는 transpose(A)*B + transpose(B)*A, trans에 따라.

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

Hermitian 행렬 C의 Rank-2k 업데이트는 alpha*A*B' + alpha*B*A' + beta*C 또는 alpha*A'*B + alpha*B'*A + beta*Ctrans에 따라 수행됩니다. 스칼라 beta는 실수여야 합니다. Cuplo 삼각형만 사용됩니다. C를 반환합니다.

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

uplo 삼각형을 반환합니다 alpha*A*B' + alpha*B*A' 또는 alpha*A'*B + alpha*B'*A, trans에 따라.

source
her2k(uplo, trans, A, B)

uplo 삼각형을 반환합니다 A*B' + B*A' 또는 A'*B + B'*A, trans에 따라.

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

Balpha*A*B로 업데이트하거나 sidetA에 의해 결정된 다른 세 가지 변형 중 하나로 업데이트합니다. 오직 ul 삼각형만 A에서 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다. 업데이트된 B를 반환합니다.

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

alpha*A*B 또는 sidetA로 결정된 다른 세 가지 변형 중 하나를 반환합니다. Aul 삼각형만 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다.

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

A*X = alpha*B의 해로 B를 덮어쓰거나 sidetA에 의해 결정된 다른 세 가지 변형 중 하나로 덮어씁니다. Aul 삼각형만 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다. 업데이트된 B를 반환합니다.

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

A*X = alpha*B의 해를 반환하거나 sidetA에 의해 결정된 다른 세 가지 변형 중 하나를 반환합니다. 오직 ul 삼각형만 A에서 사용됩니다. dA는 대각선 값이 읽히는지 아니면 모두 1로 가정되는지를 결정합니다.

source

LAPACK functions

LinearAlgebra.LAPACK는 선형 대수를 위한 일부 LAPACK 함수에 대한 래퍼를 제공합니다. 입력 배열 중 하나를 덮어쓰는 함수는 이름이 '!'로 끝납니다.

보통 함수는 Float64, Float32, ComplexF64ComplexF32 배열 각각에 대해 정의된 4개의 메서드를 가지고 있습니다.

LAPACK API는 Julia에서 제공되며, 향후 변경될 수 있습니다. 이 API는 사용자에게 노출되지 않기 때문에, 향후 릴리스에서 이 특정 함수 집합을 지원하거나 사용 중단할 것이라는 약속이 없습니다.

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

대각선 행렬 AB의 LU 분해를 계산합니다. kl은 비영인 대각선의 첫 번째 하위 대각선이며, ku는 마지막 상위 대각선입니다. m은 행렬 AB의 첫 번째 차원입니다. LU 분해를 제자리에서 반환하고 사용된 피벗 벡터 ipiv를 반환합니다.

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

방정식 AB * X = B를 풉니다. transAB의 방향을 결정합니다. N(전치 없음), T(전치), 또는 C(켤레 전치)일 수 있습니다. kl은 비영인 밴드를 포함하는 첫 번째 하부 대각선이고, ku는 하나를 포함하는 마지막 상부 대각선이며, m은 행렬 AB의 첫 번째 차원입니다. ipivgbtrf!에서 반환된 피벗 벡터입니다. 벡터 또는 행렬 X를 반환하며, B를 제자리에서 덮어씁니다.

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

행렬 A의 고유 시스템 또는 슈르 분해를 계산하기 전에 행렬을 균형 조정합니다. jobN(A는 치환되거나 스케일되지 않음), P(A는 치환만 됨), S(A는 스케일링만 됨), 또는 B(A는 치환 및 스케일링됨) 중 하나일 수 있습니다. A를 제자리에서 수정하고 ilo, ihi, 및 scale을 반환합니다. 치환이 활성화된 경우, A[i,j] = 0이면 j > i이고 1 < j < ilo 또는 j > ihi입니다. scale은 수행된 스케일링/치환에 대한 정보를 포함합니다.

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

gebal!을 사용하여 균형을 맞춘 행렬의 고유벡터 V를 원래 행렬의 비축척/비순열 고유벡터로 변환합니다. V를 제자리에서 수정합니다. sideL(왼쪽 고유벡터가 변환됨) 또는 R(오른쪽 고유벡터가 변환됨)일 수 있습니다.

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

행렬 A를 제자리에서 이중 대각선 형태 A = QBP'로 축소합니다. 반환값은 이중 대각선 행렬 B를 포함하는 A, B의 대각선 요소를 포함하는 d, B의 비대각선 요소를 포함하는 e, Q를 나타내는 기본 반사체를 포함하는 tauq, 그리고 P를 나타내는 기본 반사체를 포함하는 taup입니다.

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

ALQ 분해를 계산합니다. A = LQ. tau는 분해의 기본 반사체를 매개변수화하는 스칼라를 포함합니다. tauA의 가장 작은 차원보다 길이가 같거나 커야 합니다.

Atau는 제자리에서 수정되어 반환됩니다.

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

행렬 ALQ 분해를 계산합니다. A = LQ.

수정된 A와 분해의 기본 반사체를 매개변수화하는 스칼라를 포함하는 tau를 반환합니다.

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

행렬 AQL 분해를 계산합니다. A = QL입니다. tau는 분해의 기본 반사체를 매개변수화하는 스칼라를 포함합니다. tauA의 가장 작은 차원보다 길이가 같거나 커야 합니다.

수정된 Atau를 반환합니다.

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

AQL 분해를 계산합니다, A = QL.

수정된 A와 분해의 기본 반사체를 매개변수화하는 스칼라를 포함하는 tau를 반환합니다.

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

AQR 분해를 계산합니다. A = QR. tau는 분해의 기본 반사체를 매개변수화하는 스칼라를 포함합니다. tauA의 가장 작은 차원보다 길이가 같거나 커야 합니다.

Atau는 제자리에서 수정되어 반환됩니다.

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

행렬 AQR 분해를 계산합니다. A = QR.

수정된 A와 분해의 기본 반사체를 매개변수화하는 스칼라를 포함하는 tau를 반환합니다.

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

행렬 A의 피벗된 QR 분해를 계산합니다. AP = QR는 BLAS 레벨 3을 사용합니다. P는 피벗 행렬로, jpvt로 표현됩니다. tau는 기본 반사를 저장합니다. 인수 jpvttau는 선택 사항이며, 미리 할당된 배열을 전달할 수 있습니다. 전달될 경우, jpvtA(m x n) 행렬일 때 길이가 n 이상이어야 하며, tauA의 가장 작은 차원보다 길이가 같거나 커야 합니다. 입력 시, 만약 jpvt[j]가 0이 아니면 Aj번째 열이 AP의 앞쪽으로 재배치됩니다.

A, jpvt, 및 tau는 제자리에서 수정됩니다.

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

행렬 ARQ 분해를 계산합니다. A = RQ. tau는 분해의 기본 반사체를 매개변수화하는 스칼라를 포함합니다. tauA의 가장 작은 차원보다 길이가 같거나 커야 합니다.

수정된 Atau를 반환합니다.

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

행렬 ARQ 분해를 계산합니다. A = RQ.

수정된 A와 분해의 기본 반사체를 매개변수화하는 스칼라를 포함하는 tau를 반환합니다.

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

A의 블록 QR 분해를 계산합니다, A = QR. T는 분해의 기본 반사체를 매개변수화하는 상삼각 블록 반사체를 포함합니다. T의 첫 번째 차원은 블록 크기를 설정하며 1과 n 사이여야 합니다. T의 두 번째 차원은 A의 가장 작은 차원과 같아야 합니다.

수정된 AT를 반환합니다.

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

행렬 A의 블록 QR 분해를 계산합니다. A = QR. nb는 블록 크기를 설정하며, 1과 A의 두 번째 차원인 n 사이의 값이어야 합니다.

수정된 A와 분해의 기본 반사기를 매개변수화하는 상삼각 블록 반사기를 포함하는 T를 반환합니다.

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

재귀적으로 A의 블록 QR 분해를 계산합니다, A = QR. T는 분해의 기본 반사체를 매개변수화하는 상삼각 블록 반사체를 포함합니다. T의 첫 번째 차원은 블록 크기를 설정하며 1과 n 사이여야 합니다. T의 두 번째 차원은 A의 가장 작은 차원과 같아야 합니다.

수정된 AT를 반환합니다.

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

재귀적으로 A의 블록 QR 분해를 계산합니다, A = QR.

수정된 A와 분해의 기본 반사기를 매개변수화하는 상삼각 블록 반사기를 포함하는 T를 반환합니다.

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

행렬 A의 피벗된 LU 분해를 계산합니다. A = LU. ipiv는 피벗 정보가 포함되어 있으며, info는 성공을 나타내는 코드(info = 0), U의 특이 값(info = i, 이 경우 U[i,i]는 특이함), 또는 오류 코드(info < 0)를 포함합니다.

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

행렬 A의 피벗된 LU 분해를 계산합니다. A = LU.

수정된 A, 피벗 정보인 ipiv, 성공을 나타내는 info 코드(성공 시 info = 0), U의 특이 값(info = i, 이 경우 U[i,i]는 특이함), 또는 오류 코드(info < 0)를 반환합니다.

source
LinearAlgebra.LAPACK.tzrzf!Function
tzrzf!(A) -> (A, tau)

상부 사다리꼴 행렬 A를 제자리에서 상부 삼각형 형태로 변환합니다. 변환의 기본 반사체에 대한 스칼라 매개변수인 Atau를 반환합니다.

source
LinearAlgebra.LAPACK.ormrz!Function
ormrz!(side, trans, A, tau, C)

행렬 Ctzrzf!에 의해 제공된 변환으로부터 Q와 곱합니다. side 또는 trans에 따라 곱셈은 왼쪽에서 수행될 수 있습니다(side = L, Q*C) 또는 오른쪽에서 수행될 수 있습니다(side = R, C*Q) 그리고 Q는 수정되지 않을 수 있습니다(trans = N), 전치될 수 있습니다(trans = T), 또는 켤레 전치될 수 있습니다(trans = C). 곱셈의 결과로 수정된 행렬 C를 반환합니다.

source
LinearAlgebra.LAPACK.gels!Function
gels!(trans, A, B) -> (F, B, ssr)

선형 방정식 A * X = B, transpose(A) * X = B, 또는 adjoint(A) * X = B를 QR 또는 LQ 분해를 사용하여 해결합니다. 솔루션으로 B 행렬/벡터를 제자리에서 수정합니다. A는 자신의 QR 또는 LQ 분해로 덮어씌워집니다. transN(수정 없음), T(전치), 또는 C(켤레 전치) 중 하나일 수 있습니다. gels!는 최소 노름/최소 제곱 솔루션을 찾습니다. A는 과소 결정되거나 과대 결정될 수 있습니다. 솔루션은 B에 반환됩니다.

source
LinearAlgebra.LAPACK.gesv!Function
gesv!(A, B) -> (B, A, ipiv)

선형 방정식 A * X = B를 해결합니다. 여기서 A는 정방 행렬이며 ALU 분해를 사용합니다. ALU 분해로 덮어쓰여지고 B는 해 X로 덮어씁니다. ipivALU 분해에 대한 피벗 정보가 포함되어 있습니다.

source
LinearAlgebra.LAPACK.getrs!Function
getrs!(trans, A, ipiv, B)

선형 방정식 A * X = B, transpose(A) * X = B, 또는 adjoint(A) * X = B를 정사각형 행렬 A에 대해 풉니다. 해결책으로 행렬/벡터 B를 제자리에서 수정합니다. Agetrf!에서의 LU 분해이며, ipiv는 피벗 정보입니다. transN(수정 없음), T(전치), 또는 C(켤레 전치) 중 하나일 수 있습니다.

source
LinearAlgebra.LAPACK.getri!Function
getri!(A, ipiv)

A의 역행렬을 계산하며, 이는 getrf!에 의해 발견된 LU 분해를 사용합니다. ipiv는 출력된 피벗 정보이며, Agetrf!LU 분해를 포함합니다. A는 그 역행렬로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.gesvx!Function
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)

선형 방정식 A * X = B (trans = N), transpose(A) * X = B (trans = T), 또는 adjoint(A) * X = B (trans = C)를 ALU 분해를 사용하여 풉니다. factE일 수 있으며, 이 경우 A는 균형을 맞추고 AF에 복사됩니다; F일 경우, 이전 LU 분해에서 AFipiv가 입력으로 사용됩니다; 또는 N일 경우, AAF에 복사된 후 분해됩니다. fact = F인 경우, equedN일 수 있으며, 이는 A가 균형을 맞추지 않았음을 의미합니다; RA가 왼쪽에서 Diagonal(R)로 곱해졌음을 의미합니다; CA가 오른쪽에서 Diagonal(C)로 곱해졌음을 의미합니다; 또는 BA가 왼쪽에서 Diagonal(R)로 곱해지고 오른쪽에서 Diagonal(C)로 곱해졌음을 의미합니다. fact = F이고 equed = R 또는 B인 경우 R의 모든 요소는 양수여야 합니다. fact = F이고 equed = C 또는 B인 경우 C의 모든 요소는 양수여야 합니다.

해결책 X를 반환합니다; equed, 이는 factN이 아닐 경우 출력이며 수행된 균형 조정을 설명합니다; R, 행 균형 대각선; C, 열 균형 대각선; B, 이는 균형을 맞춘 형태 Diagonal(R)*B로 덮어쓸 수 있습니다 (만약 trans = N이고 equed = R,B인 경우) 또는 Diagonal(C)*B (만약 trans = T,C이고 equed = C,B인 경우); rcond, 균형 조정 후 A의 역수 조건 수; ferr, X의 각 솔루션 벡터에 대한 전방 오차 한계; berr, X의 각 솔루션 벡터에 대한 전방 오차 한계; 및 work, 역수 피벗 성장 계수입니다.

source
gesvx!(A, B)

gesvx!의 비균형, 비전치 단순화입니다.

source
LinearAlgebra.LAPACK.gelsd!Function
gelsd!(A, B, rcond) -> (B, rnk)

A * X = B의 최소 노름 해를 계산합니다. ASVD 분해를 찾은 다음 문제를 나누어 해결합니다. B는 해 X로 덮어씌워집니다. rcond 이하의 특이 값은 0으로 처리됩니다. B에 해를 반환하고 A의 유효 순위를 rnk로 반환합니다.

source
LinearAlgebra.LAPACK.gelsy!Function
gelsy!(A, B, rcond) -> (B, rnk)

A * X = B의 최소 노름 해를 계산합니다. A의 전체 QR 분해를 찾은 다음 문제를 나누어 정복합니다. B는 해 X로 덮어씌워집니다. rcond 이하의 특이 값은 0으로 처리됩니다. 해는 B에 반환되고 A의 유효 계수는 rnk에 반환됩니다.

source
LinearAlgebra.LAPACK.gglse!Function
gglse!(A, c, B, d) -> (X,res)

방정식 A * x = c를 해결하며, 여기서 x는 동등성 제약 B * x = d를 따릅니다. 공식을 사용하여 ||c - A*x||^2 = 0를 해결합니다. X와 잔여 제곱합을 반환합니다.

source
LinearAlgebra.LAPACK.geev!Function
geev!(jobvl, jobvr, A) -> (W, VL, VR)

행렬 A의 고유 시스템을 찾습니다. jobvl = N인 경우, A의 왼쪽 고유 벡터는 계산되지 않습니다. jobvr = N인 경우, A의 오른쪽 고유 벡터는 계산되지 않습니다. jobvl = V 또는 jobvr = V인 경우, 해당 고유 벡터가 계산됩니다. 고유 값은 W에, 오른쪽 고유 벡터는 VR에, 왼쪽 고유 벡터는 VL에 반환됩니다.

source
LinearAlgebra.LAPACK.gesdd!Function
gesdd!(job, A) -> (U, S, VT)

A의 특이값 분해를 찾습니다. A = U * S * V'로, 분할 정복 접근 방식을 사용합니다. job = A인 경우, U의 모든 열과 V'의 모든 행이 계산됩니다. job = N인 경우, U의 열이나 V'의 행이 계산되지 않습니다. job = O인 경우, A는 (얇은) U의 열과 (얇은) V'의 행으로 덮어씌워집니다. job = S인 경우, (얇은) U의 열과 (얇은) V'의 행이 계산되어 별도로 반환됩니다.

source
LinearAlgebra.LAPACK.gesvd!Function
gesvd!(jobu, jobvt, A) -> (U, S, VT)

A의 특이값 분해를 찾습니다. A = U * S * V'. jobu = A인 경우 U의 모든 열이 계산됩니다. jobvt = A인 경우 V'의 모든 행이 계산됩니다. jobu = N인 경우 U의 열이 계산되지 않습니다. jobvt = N인 경우 V'의 행이 계산되지 않습니다. jobu = O인 경우 A는 (얇은) U의 열로 덮어씌워집니다. jobvt = O인 경우 A는 (얇은) V'의 행으로 덮어씌워집니다. jobu = S인 경우 (얇은) U의 열이 계산되어 별도로 반환됩니다. jobvt = S인 경우 (얇은) V'의 행이 계산되어 별도로 반환됩니다. jobujobvt는 모두 O일 수 없습니다.

U, S, 및 Vt를 반환하며, 여기서 SA의 특이값입니다.

source
LinearAlgebra.LAPACK.ggsvd!Function
ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

AB의 일반화된 특이값 분해를 찾습니다. U'*A*Q = D1*RV'*B*Q = D2*R입니다. D1의 대각선에는 alpha가 있고, D2의 대각선에는 beta가 있습니다. jobu = U인 경우 직교/유니타리 행렬 U가 계산됩니다. jobv = V인 경우 직교/유니타리 행렬 V가 계산됩니다. jobq = Q인 경우 직교/유니타리 행렬 Q가 계산됩니다. jobu, jobv 또는 jobqN인 경우 해당 행렬은 계산되지 않습니다. 이 함수는 LAPACK 3.6.0 이전 버전에서만 사용할 수 있습니다.

source
LinearAlgebra.LAPACK.ggsvd3!Function
ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

AB의 일반화된 특이값 분해를 찾습니다. U'*A*Q = D1*RV'*B*Q = D2*R입니다. D1의 대각선에는 alpha가 있고, D2의 대각선에는 beta가 있습니다. jobu = U인 경우, 직교/유니타리 행렬 U가 계산됩니다. jobv = V인 경우, 직교/유니타리 행렬 V가 계산됩니다. jobq = Q인 경우, 직교/유니타리 행렬 Q가 계산됩니다. jobu, jobv 또는 jobqN인 경우, 해당 행렬은 계산되지 않습니다. 이 함수는 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)

A의 고유 시스템을 행렬 균형을 사용하여 찾습니다. jobvl = N인 경우 A의 왼쪽 고유 벡터는 계산되지 않습니다. jobvr = N인 경우 A의 오른쪽 고유 벡터는 계산되지 않습니다. jobvl = V 또는 jobvr = V인 경우 해당 고유 벡터가 계산됩니다. balanc = N인 경우 균형 조정이 수행되지 않습니다. balanc = P인 경우 A는 순열되지만 스케일링되지 않습니다. balanc = S인 경우 A는 스케일링되지만 순열되지 않습니다. balanc = B인 경우 A는 순열되고 스케일링됩니다. sense = N인 경우 역 조건 수가 계산되지 않습니다. sense = E인 경우 고유값에 대해서만 역 조건 수가 계산됩니다. sense = V인 경우 오른쪽 고유 벡터에 대해서만 역 조건 수가 계산됩니다. sense = B인 경우 오른쪽 고유 벡터와 고유 벡터에 대해 역 조건 수가 계산됩니다. sense = E,B인 경우 오른쪽 및 왼쪽 고유 벡터가 계산되어야 합니다.

source
LinearAlgebra.LAPACK.ggev!Function
ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

AB의 일반화된 고유 분해를 찾습니다. jobvl = N인 경우 왼쪽 고유 벡터는 계산되지 않습니다. jobvr = N인 경우 오른쪽 고유 벡터는 계산되지 않습니다. jobvl = V 또는 jobvr = V인 경우 해당 고유 벡터가 계산됩니다.

source
LinearAlgebra.LAPACK.ggev3!Function
ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

AB의 일반화된 고유 분해를 블록 알고리즘을 사용하여 찾습니다. jobvl = N인 경우 왼쪽 고유 벡터는 계산되지 않습니다. jobvr = N인 경우 오른쪽 고유 벡터는 계산되지 않습니다. jobvl = V 또는 jobvr = V인 경우 해당 고유 벡터가 계산됩니다. 이 함수는 LAPACK 3.6.0이 필요합니다.

source
LinearAlgebra.LAPACK.gtsv!Function
gtsv!(dl, d, du, B)

A * X = B 방정식을 풉니다. 여기서 A는 하삼각 행렬 dl, 대각선 d, 상삼각 행렬 du를 가진 삼대각 행렬입니다.

B를 해 X로 덮어쓰고 반환합니다.

source
LinearAlgebra.LAPACK.gttrf!Function
gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

삼대각 행렬의 LU 분해를 찾습니다. 여기서 dl은 하삼각, d는 대각선, du는 상삼각에 위치합니다.

dl, d, du를 제자리에서 수정하고, 이들과 두 번째 상삼각 du2, 피벗 벡터 ipiv를 반환합니다.

source
LinearAlgebra.LAPACK.gttrs!Function
gttrs!(trans, dl, d, du, du2, ipiv, B)

방정식 A * X = B (trans = N), transpose(A) * X = B (trans = T), 또는 adjoint(A) * X = B (trans = C)를 gttrf!에 의해 계산된 LU 분해를 사용하여 풉니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.orglq!Function
orglq!(A, tau, k = length(tau))

gelqf!를 호출한 후 LQ 분해의 행렬 Q를 명시적으로 찾습니다. gelqf!의 출력을 사용합니다. AQ로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.orgqr!Function
orgqr!(A, tau, k = length(tau))

geqrf!를 호출한 후 QR 분해의 행렬 Q를 명시적으로 찾습니다. geqrf!의 출력을 사용합니다. AQ로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.orgql!Function
orgql!(A, tau, k = length(tau))

geqlf!를 호출한 후 QL 분해의 행렬 Q를 명시적으로 찾습니다. geqlf!의 출력을 사용합니다. AQ로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.orgrq!Function
orgrq!(A, tau, k = length(tau))

gerqf!를 호출한 후 RQ 분해의 행렬 Q를 명시적으로 찾습니다. gerqf!의 출력을 사용합니다. AQ로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.ormlq!Function
ormlq!(side, trans, A, tau, C)

Q * C를 계산합니다 (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C)는 side = L에 대해 또는 side = R에 대해 gelqf!를 사용하여 계산된 ALQ 분해에서 Q를 사용하여 동등한 오른쪽 곱셈을 수행합니다. C는 덮어씌워집니다.

source
LinearAlgebra.LAPACK.ormqr!Function
ormqr!(side, trans, A, tau, C)

Q * C를 계산합니다 (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C)는 side = L에 대해 또는 side = R에 대해 AQR 분해에서 계산된 Q를 사용하여 동등한 오른쪽 곱셈을 수행합니다. C는 덮어씌워집니다.

source
LinearAlgebra.LAPACK.ormql!Function
ormql!(side, trans, A, tau, C)

Q * C를 계산합니다 (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C)는 side = L에 대해 또는 side = R에 대해 AQL 분해에서 계산된 Q를 사용하여 동등한 오른쪽 곱셈을 수행합니다. C는 덮어씌워집니다.

source
LinearAlgebra.LAPACK.ormrq!Function
ormrq!(side, trans, A, tau, C)

Q * C를 계산합니다 (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C)는 side = L에 대해 또는 side = R에 대해 ARQ 분해에서 계산된 Q를 사용하여 동등한 오른쪽 곱셈을 수행합니다. C는 덮어씌워집니다.

source
LinearAlgebra.LAPACK.gemqrt!Function
gemqrt!(side, trans, V, T, C)

Q * C를 계산합니다 (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C)는 side = L에 대해 또는 side = R에 대해 geqrt!를 사용하여 계산된 AQR 분해에서 Q를 사용하여 동일한 오른쪽 곱셈을 수행합니다. C는 덮어씌워집니다.

source
LinearAlgebra.LAPACK.posv!Function
posv!(uplo, A, B) -> (A, B)

A * X = B의 해를 찾습니다. 여기서 A는 대칭 또는 에르미트 양의 정부호 행렬입니다. uplo = U인 경우 A의 상부 콜레스키 분해가 계산됩니다. uplo = L인 경우 A의 하부 콜레스키 분해가 계산됩니다. A는 자신의 콜레스키 분해로 덮어씌워집니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.potrf!Function
potrf!(uplo, A)

양의 정부호 행렬 A의 Cholesky(위쪽은 uplo = U, 아래쪽은 uplo = L) 분해를 계산합니다. A는 덮어쓰여지며 정보 코드와 함께 반환됩니다.

source
LinearAlgebra.LAPACK.potri!Function
potri!(uplo, A)

양의 정부호 행렬 A의 역을 계산합니다. uplo = U인 경우 상삼각형, uplo = L인 경우 하삼각형 Cholesky 분해를 찾기 위해 potrf!를 호출한 후에 수행됩니다.

A는 그 역으로 덮어쓰여지고 반환됩니다.

source
LinearAlgebra.LAPACK.potrs!Function
potrs!(uplo, A, B)

A * X = B의 해를 찾습니다. 여기서 Apotrf!에 의해 계산된 Cholesky 분해를 가진 대칭 또는 에르미트 양의 정부호 행렬입니다. uplo = U인 경우 A의 상부 Cholesky 분해가 계산되었습니다. uplo = L인 경우 A의 하부 Cholesky 분해가 계산되었습니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.pstrf!Function
pstrf!(uplo, A, tol) -> (A, piv, rank, info)

양의 정부호 행렬 A의 (상부인 경우 uplo = U, 하부인 경우 uplo = L) 피벗된 콜레스키 분해를 사용자 설정 허용오차 tol로 계산합니다. A는 콜레스키 분해로 덮어씌워집니다.

A, 피벗 piv, A의 랭크, 그리고 info 코드를 반환합니다. info = 0이면 분해가 성공한 것입니다. info = i > 0이면 A가 부정적이거나 랭크가 결핍된 것입니다.

source
LinearAlgebra.LAPACK.ptsv!Function
ptsv!(D, E, B)

양의 정부호 삼대각 행렬 A에 대해 A * X = B를 풉니다. DA의 대각선이고 E는 비대각선입니다. B는 해 X로 덮어쓰여지고 반환됩니다.

source
LinearAlgebra.LAPACK.pttrf!Function
pttrf!(D, E)

양의 정부호 삼대각 행렬의 LDLt 분해를 계산합니다. 여기서 D는 대각선 요소이고 E는 비대각선 요소입니다. DE는 덮어쓰여지고 반환됩니다.

source
LinearAlgebra.LAPACK.pttrs!Function
pttrs!(D, E, B)

양의 정부호 삼대각 행렬 A에 대해 A * X = B를 해결합니다. 여기서 A는 대각선 D와 비대각선 E를 가지고 있으며, pttrf!를 사용하여 A의 LDLt 분해를 계산한 후에 수행됩니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.trtri!Function
trtri!(uplo, diag, A)

상삼각 행렬(uplo = U인 경우) 또는 하삼각 행렬(uplo = L인 경우) A의 역행렬을 찾습니다. diag = N인 경우, A는 비단위 대각 요소를 가집니다. diag = U인 경우, A의 모든 대각 요소는 1입니다. A는 그 역행렬로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.trtrs!Function
trtrs!(uplo, trans, diag, A, B)

A * X = B (trans = N), transpose(A) * X = B (trans = T), 또는 adjoint(A) * X = B (trans = C)를 해결합니다. 여기서 (상부는 uplo = U, 하부는 uplo = L) 삼각 행렬 A입니다. diag = N인 경우, A는 비단위 대각 요소를 가집니다. diag = U인 경우, A의 모든 대각 요소는 1입니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.trcon!Function
trcon!(norm, uplo, diag, A)

주어진 삼각 행렬 A의 역 조건 수를 찾습니다 (만약 uplo = U이면 상삼각, uplo = L이면 하삼각). diag = N인 경우, A는 비단위 대각 요소를 가집니다. diag = U인 경우, A의 모든 대각 요소는 1입니다. norm = I인 경우, 조건 수는 무한 노름에서 찾습니다. norm = O 또는 1인 경우, 조건 수는 1 노름에서 찾습니다.

source
LinearAlgebra.LAPACK.trevc!Function
trevc!(side, howmny, select, T, VL = similar(T), VR = similar(T))

상삼각 행렬 T의 고유 시스템을 찾습니다. side = R인 경우, 오른쪽 고유 벡터가 계산됩니다. side = L인 경우, 왼쪽 고유 벡터가 계산됩니다. side = B인 경우, 두 집합이 모두 계산됩니다. howmny = A인 경우, 모든 고유 벡터가 발견됩니다. howmny = B인 경우, 모든 고유 벡터가 발견되고 VLVR을 사용하여 역변환됩니다. howmny = S인 경우, select에 있는 값에 해당하는 고유 벡터만 계산됩니다.

source
LinearAlgebra.LAPACK.trrfs!Function
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)

A * X = B (trans = N), transpose(A) * X = B (trans = T), adjoint(A) * X = B (trans = C)에 대한 해의 오차를 추정합니다. side = L인 경우, 또는 trtrs!를 사용하여 X를 계산한 후 오른쪽에 해당하는 side = RX * A에 대한 동등한 방정식입니다. uplo = U인 경우, A는 상삼각 행렬입니다. uplo = L인 경우, A는 하삼각 행렬입니다. diag = N인 경우, A는 비단위 대각 요소를 가집니다. diag = U인 경우, A의 모든 대각 요소는 1입니다. FerrBerr는 선택적 입력입니다. Ferr는 전방 오차이고 Berr는 후방 오차로, 각 구성 요소별입니다.

source
LinearAlgebra.LAPACK.stev!Function
stev!(job, dv, ev) -> (dv, Zmat)

대칭 삼중 대각 행렬의 고유 시스템을 계산합니다. 여기서 dv는 대각선 요소이고 ev는 비대각선 요소입니다. job = N인 경우 고유값만 찾아서 dv에 반환합니다. job = V인 경우 고유벡터도 찾아서 Zmat에 반환합니다.

source
LinearAlgebra.LAPACK.stebz!Function
stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

대칭 삼중 대각 행렬의 고유값을 계산합니다. 여기서 dv는 대각선 요소이고 ev는 비대각선 요소입니다. range = A인 경우 모든 고유값이 찾아집니다. range = V인 경우 반개방 구간 (vl, vu] 내의 고유값이 찾아집니다. range = I인 경우 인덱스가 iliu 사이에 있는 고유값이 찾아집니다. order = B인 경우 고유값이 블록 내에서 정렬됩니다. order = E인 경우 모든 블록에 걸쳐 정렬됩니다. abstol은 수렴을 위한 허용 오차로 설정할 수 있습니다.

source
LinearAlgebra.LAPACK.stegr!Function
stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

대칭 삼중 대각 행렬에 대한 고유값(jobz = N) 또는 고유값과 고유벡터(jobz = V)를 계산합니다. 여기서 dv는 대각선 요소이고 ev는 비대각선 요소입니다. range = A인 경우 모든 고유값이 찾아집니다. range = V인 경우 반열림 구간 (vl, vu]에 있는 고유값이 찾아집니다. range = I인 경우 인덱스가 iliu 사이에 있는 고유값이 찾아집니다. 고유값은 w에, 고유벡터는 Z에 반환됩니다.

source
LinearAlgebra.LAPACK.stein!Function
stein!(dv, ev_in, w_in, iblock_in, isplit_in)

대칭 삼대각 행렬에 대한 고유벡터를 계산합니다. 여기서 dv는 대각선 요소, ev_in은 비대각선 요소입니다. w_in은 해당 고유벡터를 찾기 위한 입력 고유값을 지정합니다. iblock_inw_in의 고유값에 해당하는 부분 행렬을 지정합니다. isplit_in은 부분 행렬 블록 간의 분할 지점을 지정합니다.

source
LinearAlgebra.LAPACK.syconv!Function
syconv!(uplo, A, ipiv) -> (A, work)

대칭 행렬 A를 두 개의 행렬 LD로 변환합니다(삼각 행렬로 인수분해된 상태). uplo = U인 경우, A는 상삼각형입니다. uplo = L인 경우, 하삼각형입니다. ipiv는 삼각 인수분해에서의 피벗 벡터입니다. ALD로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.sysv!Function
sysv!(uplo, A, B) -> (B, A, ipiv)

대칭 행렬 A에 대해 A * X = B의 해를 찾습니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다. B는 해 X로 덮어씌워집니다. A는 Bunch-Kaufman 분해로 덮어씌워집니다. ipiv는 분해에 대한 피벗 정보가 포함되어 있습니다.

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

대칭 행렬 A의 Bunch-Kaufman 분해를 계산합니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다.

분해로 덮어쓴 A, 피벗 벡터 ipiv, 그리고 비음수 정수인 오류 코드 info를 반환합니다. info가 양수인 경우 행렬이 특이하며 분해의 대각선 부분이 정확히 info 위치에서 0입니다.

source
sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

대칭 행렬 A의 Bunch-Kaufman 분해를 계산합니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다.

분해로 덮어쓴 A, 피벗 벡터 ipiv, 그리고 비음수 정수인 오류 코드 info를 반환합니다. info가 양수인 경우 행렬이 특이하며 분해의 대각선 부분이 정확히 info 위치에서 0입니다.

source
LinearAlgebra.LAPACK.sytri!Function
sytri!(uplo, A, ipiv)

대칭 행렬 A의 역을 sytrf!의 결과를 사용하여 계산합니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다. A는 그 역으로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.sytrs!Function
sytrs!(uplo, A, ipiv, B)

대칭 행렬 A에 대해 sytrf!의 결과를 사용하여 방정식 A * X = B를 풉니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.hesv!Function
hesv!(uplo, A, B) -> (B, A, ipiv)

헤르미트 행렬 A에 대해 A * X = B의 해를 찾습니다. uplo = U인 경우 A의 상단 절반이 저장됩니다. uplo = L인 경우 하단 절반이 저장됩니다. B는 해 X로 덮어씌워집니다. A는 Bunch-Kaufman 인수분해로 덮어씌워집니다. ipiv는 인수분해에 대한 피벗 정보가 포함되어 있습니다.

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

허미티안 행렬 A의 Bunch-Kaufman 분해를 계산합니다. uplo = U인 경우 A의 상반부가 저장됩니다. uplo = L인 경우 하반부가 저장됩니다.

분해로 덮어쓴 A, 피벗 벡터 ipiv, 그리고 비음수 정수인 오류 코드 info를 반환합니다. info가 양수인 경우 행렬이 특이하며 분해의 대각선 부분이 info 위치에서 정확히 0입니다.

source
hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

허미티안 행렬 A의 Bunch-Kaufman 분해를 계산합니다. uplo = U인 경우 A의 상반부가 저장됩니다. uplo = L인 경우 하반부가 저장됩니다.

분해로 덮어쓴 A, 피벗 벡터 ipiv, 그리고 비음수 정수인 오류 코드 info를 반환합니다. info가 양수인 경우 행렬은 특이하며 분해의 대각 부분이 정확히 info 위치에서 0입니다.

source
LinearAlgebra.LAPACK.hetri!Function
hetri!(uplo, A, ipiv)

헤르미트 행렬 A의 역을 sytrf!의 결과를 사용하여 계산합니다. uplo = U인 경우 A의 상반부가 저장됩니다. uplo = L인 경우 하반부가 저장됩니다. A는 그 역으로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.hetrs!Function
hetrs!(uplo, A, ipiv, B)

헤르미트 행렬 A에 대해 sytrf!의 결과를 사용하여 방정식 A * X = B를 풉니다. uplo = U인 경우 A의 상반부가 저장됩니다. uplo = L인 경우 하반부가 저장됩니다. B는 해 X로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.syev!Function
syev!(jobz, uplo, A)

대칭 행렬 A의 고유값(jobz = N) 또는 고유값과 고유벡터(jobz = V)를 찾습니다. uplo = U인 경우 A의 상삼각형이 사용됩니다. uplo = L인 경우 A의 하삼각형이 사용됩니다.

source
LinearAlgebra.LAPACK.syevr!Function
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

대칭 행렬 A의 고유값(jobz = N) 또는 고유값과 고유벡터(jobz = V)를 찾습니다. uplo = U인 경우 A의 상삼각형이 사용됩니다. uplo = L인 경우 A의 하삼각형이 사용됩니다. range = A인 경우 모든 고유값이 찾습니다. range = V인 경우 반열린 구간 (vl, vu]에 있는 고유값이 찾습니다. range = I인 경우 인덱스가 iliu 사이에 있는 고유값이 찾습니다. abstol은 수렴을 위한 허용오차로 설정할 수 있습니다.

고유값은 W에, 고유벡터는 Z에 반환됩니다.

source
LinearAlgebra.LAPACK.syevd!Function
syevd!(jobz, uplo, A)

대칭 행렬 A의 고유값(jobz = N) 또는 고유값과 고유벡터(jobz = V)를 찾습니다. uplo = U인 경우 A의 상삼각형이 사용됩니다. uplo = L인 경우 A의 하삼각형이 사용됩니다.

syev!에서 사용하는 QR 반복 대신 분할 정복 방법을 사용합니다. 또는 syevr!에서 사용하는 여러 상대적으로 강건한 표현을 사용합니다. 다양한 방법의 정확도와 성능 비교는 James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008)를 참조하십시오.

source
LinearAlgebra.LAPACK.sygvd!Function
sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

대칭 행렬 A와 대칭 양의 정부호 행렬 B의 일반화된 고유값(jobz = N) 또는 고유값 및 고유벡터(jobz = V)를 찾습니다. uplo = U인 경우 AB의 상삼각형이 사용됩니다. uplo = L인 경우 AB의 하삼각형이 사용됩니다. itype = 1인 경우 해결해야 할 문제는 A * x = lambda * B * x입니다. itype = 2인 경우 해결해야 할 문제는 A * B * x = lambda * x입니다. itype = 3인 경우 해결해야 할 문제는 B * A * x = lambda * x입니다.

source
LinearAlgebra.LAPACK.bdsqr!Function
bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

주대각선에 d가 있고 비대각선에 e_가 있는 비대각 행렬의 특이값 분해를 계산합니다. uplo = U인 경우, e_는 상대각선입니다. uplo = L인 경우, e_는 하대각선입니다. 선택적으로 Q' * C의 곱도 계산할 수 있습니다.

특이값은 d에 반환되며, 행렬 CQ' * C로 덮어씌워집니다.

source
LinearAlgebra.LAPACK.bdsdc!Function
bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

주어진 대각선에 d가 있고 비대각선에 e_가 있는 이분 대각 행렬의 특이값 분해를 나누기 및 정복 방법을 사용하여 계산합니다. uplo = U인 경우 e_는 상대각선입니다. uplo = L인 경우 e_는 하대각선입니다. compq = N인 경우 특이값만 찾습니다. compq = I인 경우 특이값과 벡터를 찾습니다. compq = P인 경우 특이값과 벡터를 압축 형식으로 찾습니다. 실수 유형에 대해서만 작동합니다.

특이값을 d에 반환하며, compq = P인 경우 압축된 특이 벡터를 iq에 반환합니다.

source
LinearAlgebra.LAPACK.gecon!Function
gecon!(normtype, A, anorm)

행렬 A의 역 조건 수를 찾습니다. normtype = I인 경우, 조건 수는 무한 노름에서 찾습니다. normtype = O 또는 1인 경우, 조건 수는 1 노름에서 찾습니다. Agetrf!의 결과여야 하며, anorm은 관련 노름에서의 A의 노름입니다.

source
LinearAlgebra.LAPACK.gehrd!Function
gehrd!(ilo, ihi, A) -> (A, tau)

행렬 A를 헤센베르크 형식으로 변환합니다. 만약 Agebal!로 균형이 맞춰져 있다면 iloihigebal!의 출력값입니다. 그렇지 않으면 ilo = 1ihi = size(A,2)이어야 합니다. tau는 분해의 기본 반사기를 포함합니다.

source
LinearAlgebra.LAPACK.orghr!Function
orghr!(ilo, ihi, A, tau)

명시적으로 gehrd!에서의 직교/유니타리 행렬 Q를 찾습니다. ilo, ihi, A, 및 taugehrd!의 입력/출력에 해당해야 합니다.

source
LinearAlgebra.LAPACK.gees!Function
gees!(jobvs, A) -> (A, vs, w)

행렬 A의 고유값(jobvs = N) 또는 고유값과 슈르 벡터(jobvs = V)를 계산합니다. A는 슈르 형식으로 덮어씌워집니다.

A, 슈르 벡터를 포함하는 vs, 고유값을 포함하는 w를 반환합니다.

source
LinearAlgebra.LAPACK.gges!Function
gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

일반화 고유값, 일반화 슈르 형식, 왼쪽 슈르 벡터(jobsvl = V), 또는 오른쪽 슈르 벡터(jobvsr = V)를 AB의 경우 계산합니다.

일반화 고유값은 alphabeta에 반환됩니다. 왼쪽 슈르 벡터는 vsl에 반환되고 오른쪽 슈르 벡터는 vsr에 반환됩니다.

source
LinearAlgebra.LAPACK.gges3!Function
gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

일반화된 고유값, 일반화된 슈르 형식, 왼쪽 슈르 벡터(jobsvl = V), 또는 오른쪽 슈르 벡터(jobvsr = V)를 차단된 알고리즘을 사용하여 AB의 계산합니다. 이 함수는 LAPACK 3.6.0이 필요합니다.

일반화된 고유값은 alphabeta에 반환됩니다. 왼쪽 슈르 벡터는 vsl에 반환되고 오른쪽 슈르 벡터는 vsr에 반환됩니다.

source
LinearAlgebra.LAPACK.trexc!Function
trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

행렬의 Schur 분해 T를 재정렬하여, 행 인덱스 ifst를 가진 T의 대각 블록이 행 인덱스 ilst로 이동하도록 합니다. compq = V인 경우, Schur 벡터 Q가 재정렬됩니다. compq = N인 경우, 수정되지 않습니다. 4-인자 메서드는 compq = V로 5-인자 메서드를 호출합니다.

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)

행렬의 슈르 분해를 재정렬하고 선택적으로 역 조건 수를 찾습니다. job = N인 경우 조건 수가 발견되지 않습니다. job = E인 경우 이 고유값 클러스터에 대한 조건 수만 발견됩니다. job = V인 경우 불변 부분공간에 대한 조건 수만 발견됩니다. job = B인 경우 클러스터와 부분공간에 대한 조건 수가 발견됩니다. compq = V인 경우 슈르 벡터 Q가 업데이트됩니다. compq = N인 경우 슈르 벡터가 수정되지 않습니다. select는 클러스터에 포함된 고유값을 결정합니다. 3-인자 메서드는 job = Ncompq = V로 5-인자 메서드를 호출합니다.

T, Q, 재정렬된 고유값 w, 고유값 클러스터의 조건 수 s, 불변 부분공간의 조건 수 sep를 반환합니다.

source
LinearAlgebra.LAPACK.tgsen!Function
tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

일반화된 슈르 분해의 벡터를 재정렬합니다. select는 각 클러스터의 고유값을 지정합니다.

source
LinearAlgebra.LAPACK.trsyl!Function
trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

실베스터 행렬 방정식 A * X +/- X * B = scale*C를 해결합니다. 여기서 AB는 모두 준상삼각형입니다. transa = N인 경우, A는 수정되지 않습니다. transa = T인 경우, A는 전치됩니다. transa = C인 경우, A는 켤레 전치됩니다. transbB에 대해서도 마찬가지입니다. isgn = 1인 경우, 방정식 A * X + X * B = scale * C가 해결됩니다. isgn = -1인 경우, 방정식 A * X - X * B = scale * C가 해결됩니다.

X(C를 덮어씀)와 scale을 반환합니다.

source
LinearAlgebra.LAPACK.hseqr!Function
hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

행렬을 헤센베르크 형태로 축소하여 모든 고유값과 (선택적으로) 슈르 분해를 계산합니다. Hgebal!로 균형이 맞춰져 있으면 iloihigebal!의 출력입니다. 그렇지 않으면 ilo = 1ihi = size(H,2)이어야 합니다. tau는 분해의 기본 반사기를 포함합니다.

source
  • ACM832Davis, Timothy A. (2004b). Algorithm 832: UMFPACK V4.3–-an Unsymmetric-Pattern Multifrontal Method. ACM Trans. Math. Softw., 30(2), 196–199. doi:10.1145/992200.992206
  • ACM887Chen, Y., Davis, T. A., Hager, W. W., & Rajamanickam, S. (2008). Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate. ACM Trans. Math. Softw., 35(3). doi:10.1145/1391989.1391995
  • DavisHager2009Davis, Timothy A., & Hager, W. W. (2009). Dynamic Supernodes in Sparse Cholesky Update/Downdate and Triangular Solves. ACM Trans. Math. Softw., 35(4). doi:10.1145/1462173.1462176
  • Bischof1987C Bischof and C Van Loan, "The WY representation for products of Householder matrices", SIAM J Sci Stat Comput 8 (1987), s2-s13. doi:10.1137/0908009
  • Schreiber1989R Schreiber and C Van Loan, "A storage-efficient WY representation for products of Householder transformations", SIAM J Sci Stat Comput 10 (1989), 53-57. doi:10.1137/0910005
  • ACM933Foster, L. V., & Davis, T. A. (2013). Algorithm 933: Reliable Calculation of Numerical Rank, Null Space Bases, Pseudoinverse Solutions, and Basic Solutions Using SuitesparseQR. ACM Trans. Math. Softw., 40(1). doi:10.1145/2513109.2513116
  • Bunch1977J R Bunch와 L Kaufman, Some stable methods for calculating inertia and solving symmetric linear systems, Mathematics of Computation 31:137 (1977), 163-179. url.
  • issue8859Issue 8859, "Fix least squares", https://github.com/JuliaLang/julia/pull/8859
  • B96Åke Björck, "Numerical Methods for Least Squares Problems", SIAM Press, Philadelphia, 1996, "Other Titles in Applied Mathematics", Vol. 51. doi:10.1137/1.9781611971484
  • S84G. W. Stewart, "Rank Degeneracy", SIAM Journal on Scientific and Statistical Computing, 5(2), 1984, 403-413. doi:10.1137/0905030
  • KY88Konstantinos Konstantinides and 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와 Nicholas J. Higham, "Improved inverse scaling and squaring algorithms for the matrix logarithm", SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553
  • AHR13Awad H. Al-Mohy, Nicholas J. Higham 및 Samuel D. Relton, "Computing the Fréchet derivative of the matrix logarithm and estimating the condition number", SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
  • BH83Åke Björck and 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과 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과 Nicholas J. Higham, "행렬 역 삼각 함수 및 역 쌍곡선 함수: 이론 및 알고리즘", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_3Mary Aprahamian과 Nicholas J. Higham, "행렬 역 삼각 함수 및 역 쌍곡선 함수: 이론 및 알고리즘", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_4Mary Aprahamian과 Nicholas J. Higham, "행렬 역 삼각 함수 및 역 쌍곡선 함수: 이론 및 알고리즘", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_5Mary Aprahamian과 Nicholas J. Higham, "행렬 역삼각 함수 및 역쌍곡선 함수: 이론 및 알고리즘", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_6Mary Aprahamian과 Nicholas J. Higham, "행렬 역 삼각 함수 및 역 쌍곡선 함수: 이론 및 알고리즘", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577