Linear Algebra

Bunun yanı sıra (ve bir parçası olarak) çok boyutlu dizilere desteğinin yanı sıra, Julia, using LinearAlgebra ile yüklenebilen birçok yaygın ve kullanışlı lineer cebir işleminin yerel uygulamalarını sağlar. tr, det ve inv gibi temel işlemler desteklenmektedir:

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

Eigen değerleri veya öz vektörler bulmak gibi diğer yararlı işlemler de vardır:

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

Ek olarak, Julia birçok factorizations sağlar; bu, bir matrisin daha uygun bir forma (performans veya bellek nedenleriyle) önceden faktörleştirilmesi yoluyla doğrusal çözüm veya matris üstel hesaplama gibi problemleri hızlandırmak için kullanılabilir. Daha fazla bilgi için factorize üzerindeki belgeleri inceleyin. Bir örnek olarak:

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 Hermitian, simetrik, üçgen, üçlü diagonal veya iki diagonal olmadığı için, LU faktörlemesi en iyi yapabileceğimiz şey olabilir. Şunlarla karşılaştırın:

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

Burada, Julia'nın B matrisinin aslında simetrik olduğunu tespit edebildiği ve daha uygun bir faktorizasyon kullandığı görülmektedir. Genellikle, belirli özelliklere sahip olduğu bilinen bir matris için daha verimli kod yazmak mümkündür; örneğin, simetrik veya üçgen matris. Julia, bu özelliklere sahip matrisleri "etiketlemek" için bazı özel türler sağlar. Örneğin:

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 bir (gerçek) simetrik matris olarak etiketlendi, bu nedenle üzerinde daha sonra gerçekleştirebileceğimiz işlemler için, örneğin özdeğer ayrıştırması veya matris-vektör çarpımları gibi, yalnızca yarısını referans alarak verimlilikler elde edilebilir. Örneğin:

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

\ işlemi burada lineer çözümü gerçekleştirir. Sol bölme operatörü oldukça güçlüdür ve her türlü lineer denklem sistemini çözmek için yeterince esnek, kompakt ve okunabilir kod yazmak kolaydır.

Special matrices

Matrices with special symmetries and structures lineer cebirde sıkça ortaya çıkar ve çeşitli matris faktorizasyonları ile sıklıkla ilişkilendirilir. Julia, belirli matris türleri için özel olarak geliştirilmiş özel rutinlerle hızlı hesaplama sağlayan zengin bir özel matris türleri koleksiyonu sunar.

Aşağıdaki tablolar, Julia'da uygulanmış özel matris türlerini ve bunlar için LAPACK'te çeşitli optimize edilmiş yöntemlere erişim olup olmadığını özetlemektedir.

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/

Efsane:

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

Efsane:

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

Bir UniformScaling operatörü, bir skalar ile kimlik operatörünü temsil eder, λ*I. Kimlik operatörü I, bir sabit olarak tanımlanır ve UniformScaling'in bir örneğidir. Bu operatörlerin boyutları genel olup, ikili işlemlerdeki diğer matrislerle eşleşir: +, -, * ve \. A+I ve A-I için bu, A'nın kare olması gerektiği anlamına gelir. Kimlik operatörü I ile çarpma, bir noop'tur (ölçekleme faktörünün bir olduğunu kontrol etmek dışında) ve bu nedenle neredeyse hiçbir ek yük getirmez.

UniformScaling operatörünü eylemde görmek için:

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

If you need to solve many systems of the form (A+μI)x = b for the same A and different μ, it might be beneficial to first compute the Hessenberg factorization F of A via the hessenberg function. Given F, Julia employs an efficient algorithm for (F+μ*I) \ b (equivalent to (A+μ*I)x \ b) and related operations like determinants.

Matrix factorizations

Matrix factorizations (a.k.a. matrix decompositions) bir matrisin matrislerin çarpımı olarak faktörizasyonunu hesaplamak ve (sayısal) lineer cebirin merkezi kavramlarından biridir.

Aşağıdaki tablo, Julia'da uygulanmış matris faktorizasyon türlerini özetlemektedir. İlgili yöntemlerin detayları, Lineer Cebir belgelerinin Standard functions bölümünde bulunabilir.

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 nesnelerinin adjoint ve transpoze işlemleri sırasıyla AdjointFactorization ve TransposeFactorization nesneleri içinde tembel bir şekilde sarılır. Genel olarak, gerçek Factorizationların transpoze işlemleri AdjointFactorization olarak sarılır.

Orthogonal matrices (AbstractQ)

Bazı matris faktorizasyonları ortogonal/üniter "matris" faktörleri üretir. Bu faktorizasyonlar, qr çağrılarından elde edilen QR ile ilgili faktorizasyonları, yani QR, QRCompactWY ve QRPivoted, hessenberg çağrılarından elde edilen Hessenberg faktorizasyonu ve lq ile elde edilen LQ faktorizasyonunu içerir. Bu ortogonal/üniter faktörler bir matris temsilini kabul etse de, içsel temsilleri performans ve bellek nedenleriyle farklıdır. Bu nedenle, daha çok matris destekli, fonksiyon tabanlı lineer operatörler olarak görülmelidirler. Özellikle, örneğin, matris temsilinin bir sütununu okumak, verileri bellekten basitçe okumak (muhtemelen vektörün bazı kısımlarını yapısal sıfırlarla doldurarak) yerine "matris"-vektör çarpma kodunu çalıştırmayı gerektirir. Diğer, üçgen olmayan matris türlerinden bir diğer belirgin ayrım, temel çarpma kodunun çarpma sırasında yerinde değişiklik yapmaya izin vermesidir. Ayrıca, 4d61726b646f776e2e436f64652822222c202271722229_40726566, 4d61726b646f776e2e436f64652822222c202268657373656e626572672229_40726566 ve 4d61726b646f776e2e436f64652822222c20226c712229_40726566 aracılığıyla oluşturulan belirli AbstractQ alt türlerinin bağlama bağlı olarak kare veya dikdörtgen bir matris gibi davranabileceği de belirtilmelidir:

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

Bu yoğun veya yapılandırılmış matrislerden bu ayrım nedeniyle, soyut AbstractQ türü AbstractMatrix alt türü değildir, bunun yerine kendi tür hiyerarşisine sahiptir. AbstractQ alt türü olan özel türler, aşağıdaki arayüz karşılandığında genel geri dönüşlere güvenebilir. Örneğin, için

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

aşırı yüklemeleri sağlayın

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

Eğer eltype yükseltmesi ilginizi çekmiyorsa, convert yöntemi gereksizdir, çünkü varsayılan olarak convert(::Type{AbstractQ{T}}, Q::AbstractQ{T}) Q'yu kendisi olarak döndürür. AbstractQ türündeki nesnelerin adjoint'leri, kendi LinearAlgebra.lmul! ve LinearAlgebra.rmul! yöntemlerini gerektiren bir AdjointQ sarmalayıcı türünde tembel bir şekilde sarılır. Bu yöntemler seti ile, herhangi bir Q::MyQ bir matris gibi kullanılabilir, tercihen çarpan bir bağlamda: skalarlar, vektörler ve matrislerle soldan ve sağdan * ile çarpma, Matrix(Q) (veya Q*I) ile Q'nun matris temsilini elde etme ve matris temsiline indeksleme gibi işlemler çalışır. Buna karşılık, toplama ve çıkarma ile daha genel olarak matris temsilindeki elemanlar üzerinde yayılma işlemleri başarısız olur çünkü bu son derece verimsiz olur. Bu tür kullanım durumları için, matris temsilini önceden hesaplamayı ve gelecekteki yeniden kullanım için önbelleğe almayı düşünün.

Pivoting Strategies

Julia'nın matrix factorizations birkaç pivoting desteği vardır; bu, sayısal kararlılıklarını artırmak için kullanılabilir. Aslında, LU faktorizasyonu gibi bazı matris faktorizasyonları, pivotlama olmadan başarısız olabilir.

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

Sonuç olarak, geleneksel matris faktörlerinin yanı sıra, pivotlu faktorizasyon şemalarının çıktıları da permütasyon matrislerini içerir.

Aşağıda, Julia'da uygulanan pivotlama stratejileri kısaca açıklanmaktadır. Tüm matris faktörizasyonlarının bunları desteklemeyebileceğini unutmayın. Desteklenen pivotlama stratejileri hakkında ayrıntılar için ilgili matrix factorization belgesine başvurun.

Ayrıca bkz. LinearAlgebra.ZeroPivotException.

LinearAlgebra.NoPivotType
NoPivot

Pivoting yapılmaz. LU faktorizasyonu gibi matris faktorizasyonları, pivotlama olmadan başarısız olabilir ve yuvarlama hatası karşısında kayan nokta matrisleri için sayısal olarak kararsız olabilir. Bu pivot stratejisi esasen öğretici amaçlar için faydalıdır.

source
LinearAlgebra.RowNonZeroType
RowNonZero

Kalan sıfır olmayan ilk eleman, kalan satırlarda pivot eleman olarak seçilir.

Kayan nokta matrisleri için, elde edilen LU algoritması sayısal olarak kararsızdır — bu strateji esasen el hesaplamalarıyla (genellikle bu stratejiyi kullanan) veya yuvarlama hatalarına duyarlı olmayan diğer cebirsel türlerle (örneğin, rasyonel sayılar) karşılaştırma için faydalıdır. Aksi takdirde, Gauss eliminasyonunda genellikle varsayılan RowMaximum pivotlama stratejisi tercih edilmelidir.

Matrisin eleman türü bir iszero yöntemini kabul etmelidir.

source
LinearAlgebra.RowMaximumType
RowMaximum

Kalan satırların maksimum büyüklükteki elemanı pivot eleman olarak seçilir. Bu, kayan nokta matrislerinin LU faktörizasyonu için varsayılan stratejidir ve bazen "kısmi pivotlama" algoritması olarak adlandırılır.

Matrisin eleman tipi abs (@ref) yöntemini kabul etmelidir ve sonuç tipi < yöntemini kabul etmelidir.

source
LinearAlgebra.ColumnNormType
ColumnNorm

Maksimum norm'a sahip sütun, sonraki hesaplamalar için kullanılır. Bu, pivotlu QR faktorizasyonu için kullanılır.

Matrisin eleman tipi norm (@ref) ve abs (@ref) yöntemlerini kabul etmelidir; bunların sonuç türleri de < yöntemini kabul etmelidir.

source

Standard functions

Lineer cebir fonksiyonları Julia'da büyük ölçüde LAPACK fonksiyonlarını çağırarak uygulanmaktadır. Seyrek matris faktorizasyonları SuiteSparse fonksiyonlarını çağırmaktadır. Diğer seyrek çözücüler Julia paketleri olarak mevcuttur.

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

Matris çarpımı.

Örnekler

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 veya 4 matrisin zincirleme çarpımı, dizilerin boyutlarına dayalı olarak en verimli sırada yapılır. Yani, (A * B) * C (3 yoğun matris ile) için gereken skalar çarpım sayısı, A * (B * C) için gerekenle karşılaştırılır ve bunlardan hangisinin yürütüleceğine karar verilir.

Son faktör bir vektörse veya ilk faktör transpoze bir vektörse, bunlarla önce ilgilenmek verimlidir. Özellikle x' * B * y, sıradan bir sütun-büyük B::Matrix için (x' * B) * y anlamına gelir. dot(x, B, y)'den farklı olarak, bu ara bir dizi ayırır.

İlk veya son faktör bir sayıysa, bu matris çarpımı ile birleştirilecektir ve 5-arg mul! kullanılacaktır.

Ayrıca muladd, dot bakınız.

Julia 1.7

Bu optimizasyonlar en az Julia 1.7 gerektirir.

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

Bir polialgoritma kullanarak matris bölme. Girdi matrisleri A ve B için sonuç X, A kare olduğunda A*X == B olacak şekilde tanımlanır. Kullanılan çözücü, A'nın yapısına bağlıdır. Eğer A üst veya alt üçgen (veya diyagonal) ise, A'nın faktörizasyonuna gerek yoktur ve sistem ileri veya geri yerine koyma ile çözülür. Üçgen olmayan kare matrisler için LU faktörizasyonu kullanılır.

Dikdörtgen A için sonuç, A'nın pivotlu QR faktörizasyonu ve A'nın R faktörüne dayanan bir sıralama tahmini ile hesaplanan minimum-norm en küçük kareler çözümüdür.

A seyrek olduğunda, benzer bir polialgoritma kullanılır. Belirsiz matrisler için, LDLt faktörizasyonu sayısal faktörizasyon sırasında pivotlama kullanmaz ve bu nedenle prosedür, tersine çevrilebilir matrisler için bile başarısız olabilir.

Ayrıca bakınız: factorize, pinv.

Örnekler

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

Matris sağ-bölümü: A / B, (B' \ A')' ile eşdeğerdir; burada \ sol-bölüm operatörüdür. Kare matrisler için, sonuç X öyle ki A == X*B olur.

Ayrıca bakınız: rdiv!.

Örnekler

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
TekilHata

Girdi matrisinin bir veya daha fazla sıfır değerli özdeğere sahip olduğu ve tersinir olmadığı durumlarda fırlatılan bir istisna. Böyle bir matrisle ilgili bir doğrusal çözüm hesaplanamaz. info alanı, (bir) tekil değerin yerini gösterir.

source
LinearAlgebra.PosDefExceptionType
PosDefException

Girdi matrisinin pozitif belirli olmadığı durumlarda fırlatılan istisna. Bazı lineer cebir fonksiyonları ve faktorizasyonları yalnızca pozitif belirli matrislere uygulanabilir. info alanı, 0'dan küçük veya eşit olan (bir) özdeğerin yerini gösterir.

source
LinearAlgebra.ZeroPivotExceptionType
ZeroPivotException <: Exception

Bir matris faktörizasyonu/çözümü, bir pivot (diyagonal) konumunda sıfırla karşılaştığında ve devam edemediğinde fırlatılan istisna. Bu, matrisin tekil olduğu anlamına gelmeyebilir: yanıltıcı sıfır pivotları ortadan kaldırmak için değişkenleri yeniden sıralayabilen pivotlu LU gibi farklı bir faktörizasyona geçmek faydalı olabilir. info alanı, sıfır pivotlardan (birinden) birinin konumunu gösterir.

source
LinearAlgebra.RankDeficientExceptionType
RankDeficientException

Girdi matrisinin rank eksik olduğu zaman fırlatılan istisna. Cholesky ayrıştırması gibi bazı lineer cebir fonksiyonları, yalnızca rank eksik olmayan matrislere uygulanabilir. info alanı, matrisin hesaplanan rankını gösterir.

source
LinearAlgebra.LAPACKExceptionType
LAPACKException

Genel LAPACK istisnası, ya doğrudan LAPACK fonksiyonları çağrılırken ya da LAPACK fonksiyonlarını dahili olarak kullanan ancak özel hata işleme eksik olan diğer fonksiyonlara yapılan çağrılarda fırlatılır. info alanı, çağrılan LAPACK fonksiyonuna bağlı olarak temel hata hakkında ek bilgi içerir.

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

İki vektör arasındaki nokta çarpımını hesaplayın. Karmaşık vektörler için, ilk vektör konjuge edilir.

dot ayrıca, dot'un elemanlar üzerinde tanımlı olduğu sürece, herhangi bir boyuttaki diziler de dahil olmak üzere, rastgele yinelemeli nesnelerde de çalışır.

dot, argümanların eşit uzunlukta olması kısıtlaması ile birlikte, sum(dot(vx,vy) for (vx,vy) in zip(x, y)) ile anlamsal olarak eşdeğerdir.

x ⋅ y (burada , REPL'de \cdot yazarak tamamlanabilir) dot(x, y) için bir eşanlamlıdır.

Örnekler

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)

İki vektör x ve y arasında, A*y ara sonucunu saklamadan genel bir nokta çarpımı dot(x, A*y) hesaplar. İki argümanlı dot(_,_) gibi, bu da özyinelemeli olarak çalışır. Ayrıca, karmaşık vektörler için, ilk vektör konjuge edilir.

Julia 1.4

Üç argümanlı dot, en az Julia 1.4 gerektirir.

Örnekler

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)

İki 3-vektörün çarpımını hesaplayın.

Örnekler

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)

y'yi x * α + y ile üzerine yazın ve y'yi döndürün. Eğer x ve y aynı eksenlere sahipse, bu y .+= x .* a ile eşdeğerdir.

Örnekler

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)

y'yi x * α + y * β ile üzerine yazın ve y'yi döndürün. x ve y aynı eksenlere sahipse, bu y .= x .* a .+ y .* β ile eşdeğerdir.

Örnekler

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)

x'i c*x + s*y ile ve y'yi -conj(s)*x + c*y ile üstüne yazar. x ve y'yi döner.

Julia 1.5

rotate! en az Julia 1.5 gerektirir.

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

x'i c*x + s*y ile ve y'yi conj(s)*x - c*y ile üzerine yazar. x ve y'yi döner.

Julia 1.5

reflect! en az Julia 1.5 gerektirir.

source
LinearAlgebra.factorizeFunction
factorize(A)

A'nın türüne dayalı olarak uygun bir faktorizasyon hesaplar. factorize, A'nın genel bir matris olarak geçilip geçilmediğini kontrol eder ve simetrik/üçgen vb. olup olmadığını belirler. factorize, A'nın her bir elemanını kontrol ederek her özelliği doğrular/çürütür. Simetri/üçgen yapısını çürütmek için mümkün olan en kısa sürede duracaktır. Dönüş değeri, birden fazla sistemin verimli bir şekilde çözülmesi için yeniden kullanılabilir. Örneğin: A=factorize(A); x=A\b; y=A\C.

A'nın Özelliklerifaktorizasyon türü
Pozitif belirliCholesky (bkz. cholesky)
Yoğun Simetrik/HermitianBunch-Kaufman (bkz. bunchkaufman)
Seyrek Simetrik/HermitianLDLt (bkz. ldlt)
ÜçgenÜçgen
DiyagonalDiyagonal
BidiagonalBidiagonal
TridiagonalLU (bkz. lu)
Simetrik reel tridiagonalLDLt (bkz. ldlt)
Genel kareLU (bkz. lu)
Genel kare olmayanQR (bkz. qr)

Örneğin, factorize bir Hermitian pozitif belirli matris üzerinde çağrıldığında, factorize bir Cholesky faktorizasyonu döndürecektir.

Örnekler

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'nın zaten faktörize olup olmadığını kontrol edecektir
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

Bu, artık diğer lineer cebir fonksiyonlarına (örneğin, özdeğer çözücüleri) geçirilebilecek bir 5×5 Bidiagonal{Float64} döndürür; bu fonksiyonlar Bidiagonal türleri için özel yöntemler kullanacaktır.

source
LinearAlgebra.DiagonalType
Diagonal(V::AbstractVector)

V'yi köşegen olarak kullanan tembel bir matris oluşturur.

Ayrıca, tembel bir kimlik matris olan I için UniformScaling, yoğun bir matris oluşturmak için diagm ve köşegen elemanları çıkarmak için diag ile de bakabilirsiniz.

Örnekler

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
Not

Tek sütunlu bir matris, bir vektör gibi işlenmez, bunun yerine Diagonal(A::AbstractMatrix) yöntemini çağırır ve diag(A) ile 1 eleman çıkarır:

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'nın ana köşegeninden bir matris oluşturur. Girdi matris A dikdörtgen olabilir, ancak çıktı kare olacaktır.

Örnekler

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)

Başlangıç değeri verilmemiş Diagonal{T} nesnesi oluşturur ve uzunluğu n'dir. undef'e bakın.

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

Verilen diagonal (dv) ve off-diagonal (ev) vektörlerini kullanarak üst (uplo=:U) veya alt (uplo=:L) bir bidiagonal matris oluşturur. Sonuç Bidiagonal türündedir ve verimli özel lineer çözücüler sağlar, ancak convert(Array, _) (veya kısaca Array(_)) ile normal bir matrise dönüştürülebilir. ev'nin uzunluğu dv'nin uzunluğundan bir eksik olmalıdır.

Örnekler

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 birinci süperdiagonalde
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

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

A'n ana diyagonalından ve ilk süper (eğer uplo=:U) veya alt diyagonalından (eğer uplo=:L) bir Bidiagonal matris oluşturur.

Örnekler

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'nın ana diyagonalını ve ilk süper diyagonalını içerir
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # A'nın ana diyagonalını ve ilk alt diyagonalını içerir
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 2  2  ⋅  ⋅
 ⋅  3  3  ⋅
 ⋅  ⋅  4  4
source
LinearAlgebra.SymTridiagonalType
SymTridiagonal(dv::V, ev::V) where V <: AbstractVector

Diyagonal (dv) ve ilk alt/üst diyagonal (ev) kullanarak simetrik bir tridiagonal matris oluşturur. Sonuç SymTridiagonal türündedir ve verimli özel özdeğer çözücüleri sağlar, ancak convert(Array, _) (veya kısaca Array(_)) ile normal bir matrise dönüştürülebilir.

SymTridiagonal blok matrisleri için, dv elemanları simetrik hale getirilir. ev argümanı üst diyagonal olarak yorumlanır. Alt diyagonal bloklar, karşılık gelen üst diyagonal blokların (materyalize edilmiş) transpozudur.

Örnekler

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)

Simetrik bir matrisin A diagonal ve ilk süperdiagonalinden simetrik bir tridiagonal matris oluşturur.

Örnekler

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

İlk alt diyagonal, diyagonal ve ilk üst diyagonal kullanılarak bir üçlü matris oluşturur. Sonuç Tridiagonal türündedir ve verimli özel lineer çözücüler sağlar, ancak convert(Array, _) (veya kısaca Array(_)) ile normal bir matrise dönüştürülebilir. dl ve du'nun uzunlukları, d'nin uzunluğundan bir eksik olmalıdır.

Not

Alt diyagonal dl ve üst diyagonal du birbirine referans vermemelidir. Eğer referans verme tespit edilirse, yapıcı du'nun bir kopyasını argüman olarak kullanacaktır.

Örnekler

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)

Bir tridiagonal matris oluşturur A matrisinin ilk alt-diagonal, diagonal ve ilk üst-diagonalinden.

Örnekler

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

Matris Anın üst (eğer uplo = :U) veya alt (eğer uplo = :L) üçgeninin bir Simetrik görünümünü oluşturur.

Simetrik görünümler, esas olarak gerçek simetrik matrisler için yararlıdır; bu matrisler için özel algoritmalar (örneğin, özdeğer problemleri için) Simetrik türleri için etkinleştirilmiştir. Daha genel olarak, karmaşık matrisler için de yararlı olan A == A' koşulunu sağlayan Hermit matrisleri için Hermitian(A) kısmına da bakabilirsiniz. (Karmaşık Simetrik matrisler desteklenmektedir ancak çok az veya hiç özel algoritma yoktur.)

Gerçek bir matrisin simetrik kısmını veya daha genel olarak bir gerçek veya karmaşık matris Anın Hermit kısmını (A + A') / 2 hesaplamak için hermitianpart fonksiyonunu kullanın.

Örnekler

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

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

Supper'ın Slower ile eşit olmayacağını unutmayın, eğer A kendisi simetrik değilse (örneğin, A == transpose(A) ise).

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

A matrisinin üst (eğer uplo = :U) veya alt (eğer uplo = :L) üçgeninin bir Hermitian görünümünü oluşturur.

A'nın Hermitian kısmını hesaplamak için hermitianpart fonksiyonunu kullanın.

Örnekler

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

Hupper'ın Hlower ile eşit olmayacağını unutmayın, eğer A kendisi Hermitian değilse (örneğin, eğer A == adjoint(A) ise).

Diyagonalın tüm gerçek olmayan kısımları göz ardı edilecektir.

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

Matris A'nın bir LowerTriangular görünümünü oluşturur.

Örnekler

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)

Matris A'nın bir UpperTriangular görünümünü oluşturur.

Örnekler

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)

Matris A'nın bir UnitLowerTriangular görünümünü oluşturur. Böyle bir görünüm, A'nın eltype türünün oneunit değerine sahip bir diyagonal içerir.

Örnekler

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)

Matris A'nın bir UnitUpperTriangular görünümünü oluşturur. Böyle bir görünüm, A'nın eltype türünün oneunit değerine sahip bir diyagonal içerir.

Örnekler

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)

Matris A'nın bir UpperHessenberg görünümünü oluşturur. A'nın ilk alt diyagonalinin altındaki girişler göz ardı edilir.

Julia 1.3

Bu tür Julia 1.3'te eklendi.

H \ b, det(H) ve benzeri işlemler için verimli algoritmalar uygulanmıştır.

Benzer bir üst-Hessenberg matrisine herhangi bir matrisin faktörleştirilmesi için hessenberg fonksiyonuna da bakın.

Eğer F::Hessenberg faktörizasyon nesnesi ise, birim matris F.Q ile erişilebilir ve Hessenberg matrisi F.H ile erişilebilir. Q çıkarıldığında, sonuç türü HessenbergQ nesnesidir ve convert(Array, _) (veya kısaca Array(_)) ile normal bir matrise dönüştürülebilir.

Ayrıştırmayı yinelemek, F.Q ve F.H faktörlerini üretir.

Örnekler

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}

Bir skalar ile kimlik operatörünün çarpımı olarak tanımlanan genel boyutlu uniform ölçekleme operatörü, λ*I. Açık bir boyut olmadan, birçok durumda bir matris gibi davranır ve bazı dizinlemeleri destekler. Ayrıca I için de bakınız.

Julia 1.6

Aralıklar kullanarak dizinleme, Julia 1.6 itibarıyla mevcuttur.

Örnekler

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

Herhangi bir boyuttaki bir kimlik matrisini temsil eden UniformScaling türünde bir nesne.

Örnekler

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)

Bir UniformScaling'den bir Diagonal matris oluşturur.

Julia 1.2

Bu yöntem Julia 1.2 itibarıyla mevcuttur.

Örnekler

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

Kare matris A'nın LU faktorizasyonunun matris faktorizasyon türü. Bu, ilgili matris faktorizasyon fonksiyonu olan lu için dönüş türüdür.

Faktorizasyonun bireysel bileşenlerine F::LU aracılığıyla getproperty ile erişilebilir:

BileşenAçıklama
F.LLU'nun L (birim alt üçgen) kısmı
F.ULU'nun U (üst üçgen) kısmı
F.p(sağ) permütasyon Vector
F.P(sağ) permütasyon Matrix

Faktorizasyonu yinelemek, F.L, F.U ve F.p bileşenlerini üretir.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U faktörü:
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); # yineleme ile parçalama

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

Seyrek bir matris A'nın LU faktorizasyonunu hesaplayın.

Gerçek veya karmaşık eleman türüne sahip seyrek A için, F'nin dönüş türü UmfpackLU{Tv, Ti}'dir; burada Tv = Float64 veya ComplexF64 ve Ti bir tam sayı türüdür (Int32 veya Int64).

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (issuccess aracılığıyla) kullanıcıya aittir.

Permütasyon q ya bir permütasyon vektörü ya da nothing olabilir. Eğer hiçbir permütasyon vektörü sağlanmamışsa veya q nothing ise, UMFPACK'in varsayılanı kullanılır. Eğer permütasyon sıfır tabanlı değilse, sıfır tabanlı bir kopya yapılır.

control vektörü, Julia SparseArrays paketinin UMFPACK için varsayılan yapılandırmasına (Not: bu, iteratif iyileştirmeyi devre dışı bırakmak için UMFPACK varsayılanlarından değiştirilmiştir) varsayılan olarak ayarlanmıştır, ancak UMFPACK_CONTROL uzunluğunda bir vektör geçirerek değiştirilebilir; olası yapılandırmalar için UMFPACK kılavuzuna bakın. Örneğin, iteratif iyileştirmeyi yeniden etkinleştirmek için:

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # Float64 seyrek matris için Julia varsayılan yapılandırmasını oku
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # isteğe bağlı - değerleri göster
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # iteratif iyileştirmeyi yeniden etkinleştir (2, UMFPACK varsayılan maksimum iteratif iyileştirme adımıdır)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # Ax = b'yi çöz, UMFPACK iteratif iyileştirmesini de dahil et

Faktorizasyonun F bireysel bileşenlerine indeksleme ile erişilebilir:

BileşenAçıklama
LLU'nun L (alt üçgen) kısmı
ULU'nun U (üst üçgen) kısmı
psağ permütasyon Vector
qsol permütasyon Vector
Rsölçekleme faktörlerinin Vector
:(L,U,p,q,Rs) bileşenleri

F ile A arasındaki ilişki

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

F ayrıca aşağıdaki işlevleri destekler:

Ayrıca lu! ile de bakın.

Not

lu(A::AbstractSparseMatrixCSC) SuiteSparse parçası olan UMFPACK[ACM832] kütüphanesini kullanır. Bu kütüphane yalnızca Float64 veya ComplexF64 elemanlarına sahip seyrek matrisleri desteklediğinden, lu A'yı uygun şekilde SparseMatrixCSC{Float64} veya SparseMatrixCSC{ComplexF64} türünde bir kopyaya dönüştürür.

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

A'nın LU faktorizasyonunu hesaplayın.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (issuccess aracılığıyla) kullanıcıya aittir.

Varsayılan olarak, check = true ile, ayrıştırma geçerli faktörler ürettiğinde de bir hata fırlatılır, ancak üst üçgen faktör U sıralı eksiktir. Bu, allowsingular = true geçerek değiştirilebilir.

Çoğu durumda, A, +, -, * ve / destekleyen bir eleman türü T ile AbstractMatrix{T}'nin bir alt türü S ise, dönüş türü LU{T,S{T}}'dir.

Genel olarak, LU faktorizasyonu, matrisin satırlarının bir permütasyonunu içerir (aşağıda açıklanan F.p çıktısına karşılık gelen), "pivotlama" olarak bilinir (çünkü "pivot" olan, F.U'nun diyagonal girişi hangi satırın içerdiğini seçmekle ilgilidir). Aşağıdaki pivotlama stratejilerinden biri, isteğe bağlı pivot argümanı aracılığıyla seçilebilir:

  • RowMaximum() (varsayılan): standart pivotlama stratejisi; pivot, kalan, faktörleştirilecek satırlar arasında maksimum mutlak değere sahip elemana karşılık gelir. Bu pivotlama stratejisi, eleman türünün de abs ve < desteklemesini gerektirir. (Bu, genellikle kayan nokta matrisleri için tek sayısal olarak kararlı seçenektir.)
  • RowNonZero(): pivot, kalan, faktörleştirilecek satırlar arasında ilk sıfır olmayan elemana karşılık gelir. (Bu, el hesaplamalarında tipik seçime karşılık gelir ve iszero destekleyen ancak abs veya < desteklemeyen daha genel cebirsel sayı türleri için de yararlıdır.)
  • NoPivot(): pivotlama kapalı (bir pivot pozisyonunda sıfır girişi ile karşılaşılırsa başarısız olur, hatta allowsingular = true olsa bile).

Faktorizasyonun bireysel bileşenlerine getproperty aracılığıyla erişilebilir:

BileşenAçıklama
F.LLU'nun L (alt üçgen) kısmı
F.ULU'nun U (üst üçgen) kısmı
F.p(sağ) permütasyon Vector
F.P(sağ) permütasyon Matrix

Faktorizasyonu yinelemek, bileşenleri F.L, F.U ve F.p üretir.

F ile A arasındaki ilişki

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

F ayrıca aşağıdaki işlevleri destekler:

Desteklenen işlevLULU{T,Tridiagonal{T}}
/
\
inv
det
logdet
logabsdet
size
Julia 1.11

allowsingular anahtar argümanı Julia 1.11'de eklendi.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U faktörü:
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); # yineleme ile parçalama

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 faktörü:
2×2 Matrix{Float64}:
 1.0  0.0
 1.0  1.0
U faktörü (sıralı eksik):
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

Seyrek bir matris A'nın LU faktorizasyonunu hesaplayın, zaten mevcut olan F'de saklanan sembolik faktorizasyonu yeniden kullanarak. reuse_symbolic false olarak ayarlanmadığı sürece, seyrek matris A'nın, LU faktorizasyonu F'yi oluşturmak için kullanılan matrisle aynı sıfır dışı desenine sahip olması gerekir, aksi takdirde bir hata fırlatılır. A ve F'nin boyutları farklıysa, tüm vektörler buna göre yeniden boyutlandırılacaktır.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (via issuccess) kullanıcıya aittir.

Permütasyon q ya bir permütasyon vektörü ya da nothing olabilir. Eğer hiçbir permütasyon vektörü sağlanmazsa veya q nothing ise, UMFPACK'in varsayılanı kullanılır. Eğer permütasyon sıfır tabanlı değilse, sıfır tabanlı bir kopya oluşturulur.

Ayrıca bkz. lu

Not

lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC) SuiteSparse'in bir parçası olan UMFPACK kütüphanesini kullanır. Bu kütüphane yalnızca Float64 veya ComplexF64 elemanlarına sahip seyrek matrisleri desteklediğinden, lu! otomatik olarak türleri LU faktorizasyonu tarafından belirlenen veya uygun olduğunda SparseMatrixCSC{ComplexF64} olarak dönüştürecektir.

Julia 1.5

UmfpackLU için lu! en az Julia 1.5 gerektirir.

Örnekler

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! aynı lu ile aynı işlevi görür, ancak girdi A'yı kopyalamak yerine üzerine yazarak yer tasarrufu sağlar. Faktörizasyon, A'nın eleman türü tarafından temsil edilemeyen bir sayı üretirse, örneğin tam sayı türleri için, bir InexactError istisnası fırlatılır.

Julia 1.11

allowsingular anahtar argümanı Julia 1.11'de eklendi.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 1.0       0.0
 0.666667  1.0
U faktörü:
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)
HATA: InexactError: Int64(0.6666666666666666)
Yığın izi:
[...]
source
LinearAlgebra.CholeskyType
Cholesky <: Factorizasyon

Yoğun simetrik/Hermitian pozitif belirli matris A için Cholesky faktorizasyonunun matris faktorizasyon türü. Bu, cholesky ile ilgili matris faktorizasyon fonksiyonunun dönüş türüdür.

Üçgen Cholesky faktörü, faktorizasyon F::Cholesky üzerinden F.L ve F.U ile elde edilebilir; burada A ≈ F.U' * F.U ≈ F.L * F.L'.

Cholesky nesneleri için aşağıdaki fonksiyonlar mevcuttur: size, \, inv, det, logdet ve isposdef.

Ayrıştırmayı yinelemek, L ve U bileşenlerini üretir.

Örnekler

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 faktörü:
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; # yineleme ile parçalama

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

Yoğun simetrik/Hermitian pozitif yarı-tam bir matris A için pivotlu Cholesky faktorizasyonunun matris faktorizasyon türü. Bu, cholesky(_, ::RowMaximum) ile ilgili matris faktorizasyon fonksiyonunun dönüş türüdür.

Üçgen Cholesky faktörü, faktorizasyon F::CholeskyPivoted üzerinden F.L ve F.U ile elde edilebilir ve permütasyon F.p ile elde edilir; burada A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' ile Ur = F.U[1:F.rank, :] ve Lr = F.L[:, 1:F.rank], veya alternatif olarak A ≈ Up' * Up ≈ Lp * Lp' ile Up = F.U[1:F.rank, invperm(F.p)] ve Lp = F.L[invperm(F.p), 1:F.rank].

CholeskyPivoted nesneleri için aşağıdaki fonksiyonlar mevcuttur: size, \, inv, det ve rank.

Ayrıştırma işlemi L ve U bileşenlerini üretir.

Örnekler

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 faktörü ile sıralama 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
permutasyon:
4-elemanlı 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; # yineleme ile ayrıştırma

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

Yoğun simetrik pozitif belirli bir matris A'nın Cholesky faktorizasyonunu hesaplar ve bir Cholesky faktorizasyonu döner. Matris A, ya bir Symmetric ya da Hermitian AbstractMatrix veya tamamen simetrik veya Hermitian bir AbstractMatrix olabilir.

Üçgen Cholesky faktörü, faktorizasyon F üzerinden F.L ve F.U ile elde edilebilir; burada A ≈ F.U' * F.U ≈ F.L * F.L'.

Cholesky nesneleri için aşağıdaki fonksiyonlar mevcuttur: size, \, inv, det, logdet ve isposdef.

Eğer A matrisiniz, yapımındaki yuvarlama hataları nedeniyle hafifçe non-Hermitian ise, cholesky'ye geçmeden önce Hermitian(A) ile sarmalayarak onu tamamen Hermitian olarak ele alabilirsiniz.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (via issuccess) kullanıcıya aittir.

Örnekler

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 faktörü:
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

Yoğun simetrik pozitif yarı-tam bir matris A için pivotlu Cholesky faktörizasyonunu hesaplayın ve bir CholeskyPivoted faktörizasyonu döndürün. Matris A, ya bir Symmetric ya da Hermitian AbstractMatrix veya tamamen simetrik veya Hermitian bir AbstractMatrix olabilir.

Faktörizasyondan F aracılığıyla üçgen Cholesky faktörü F.L ve F.U ile elde edilebilir ve permütasyon F.p ile elde edilir; burada A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' ile Ur = F.U[1:F.rank, :] ve Lr = F.L[:, 1:F.rank], veya alternatif olarak A ≈ Up' * Up ≈ Lp * Lp' ile Up = F.U[1:F.rank, invperm(F.p)] ve Lp = F.L[invperm(F.p), 1:F.rank].

CholeskyPivoted nesneleri için aşağıdaki fonksiyonlar mevcuttur: size, \, inv, det ve rank.

tol argümanı, rengi belirlemek için toleransı belirler. Negatif değerler için tolerans makine hassasiyetidir.

Eğer A matrisiniz, inşasında yuvarlama hataları nedeniyle hafifçe non-Hermitian ise, cholesky fonksiyonuna geçmeden önce Hermitian(A) ile sarmalayın, böylece onu tamamen Hermitian olarak ele alabilirsiniz.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (via issuccess) kullanıcıya aittir.

Örnekler

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 faktörü ile rengi 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
permutasyon:
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; # iterasyon ile parçalama

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

Sıkı pozitif belirli bir matris A'nın Cholesky faktörizasyonunu hesaplar. A, bir SparseMatrixCSC veya bir Symmetric/Hermitian görünümü olmalıdır. A'nın tür etiketi olmasa bile, hala simetrik veya Hermitian olması gerekir. perm verilmemişse, bir dolgu azaltıcı permütasyon kullanılır. F = cholesky(A) genellikle F\b ile denklemler sistemlerini çözmek için kullanılır, ancak diag, det ve logdet gibi yöntemler de F için tanımlanmıştır. Ayrıca, F'den bireysel faktörler çıkartabilirsiniz, F.L kullanarak. Ancak, varsayılan olarak pivotlama açık olduğundan, faktörizasyon içsel olarak A == P'*L*L'*P şeklinde bir permütasyon matris P ile temsil edilir; sadece L'yi P'yi hesaba katmadan kullanmak yanlış sonuçlar verecektir. Permütasyon etkilerini dahil etmek için, genellikle PtL = F.PtL (eşdeğeri P'*L) ve LtP = F.UP (eşdeğeri L'*P) gibi "birleşik" faktörler çıkartmak tercih edilir.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (issuccess aracılığıyla) kullanıcıya aittir.

İsteğe bağlı shift anahtar argümanını ayarlamak, A yerine A+shift*I'nin faktörizasyonunu hesaplar. perm argümanı sağlanırsa, bu, kullanılacak sıralamayı veren 1:size(A,1)'in bir permütasyonu olmalıdır (CHOLMOD'un varsayılan AMD sıralaması yerine).

Örnekler

Aşağıdaki örnekte, kullanılan dolgu azaltıcı permütasyon [3, 2, 1]'dir. perm 1:3 olarak ayarlandığında, yani hiç permütasyon uygulanmadığında, faktördeki sıfırdan farklı eleman sayısı 6'dır.

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
Not

Bu yöntem, SuiteSparse kütüphanesinden CHOLMOD[ACM887][DavisHager2009] kullanır. CHOLMOD yalnızca tek veya çift hassasiyette gerçek veya karmaşık türleri destekler. Bu element türlerinde olmayan giriş matrisleri uygun şekilde bu türlere dönüştürülecektir.

CHOLMOD'dan birçok başka işlev sarılmıştır ancak Base.SparseArrays.CHOLMOD modülünden dışa aktarılmamıştır.

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

cholesky ile aynı, ancak girişi A üzerine yazarak alan tasarrufu sağlar, kopya oluşturmadan. Faktörizasyon, A'nın eleman türü tarafından temsil edilemeyen bir sayı üretirse, örneğin tam sayı türleri için, bir InexactError istisnası fırlatılır.

Örnekler

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

julia> cholesky!(A)
HATA: InexactError: Int64(6.782329983125268)
Yığın İzleme:
[...]
source
cholesky!(A::AbstractMatrix, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivoted

cholesky ile aynı, ancak bir kopya oluşturmak yerine girdi A'yı üst üste yazarak alan tasarrufu sağlar. Faktörizasyon, A'nın eleman türü tarafından temsil edilemeyen bir sayı üretirse, örneğin tam sayı türleri için, bir InexactError istisnası fırlatılır.

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

A'n Cholesky ($LL'$) faktorizasyonunu F'yi sembolik faktorizasyon olarak yeniden kullanarak hesaplayın. A, bir SparseMatrixCSC veya bir Symmetric/ Hermitian görünümü olmalıdır. A'nın tür etiketi olmasa bile, yine de simetrik veya Hermitian olması gerekir.

Ayrıca bkz. cholesky.

Not

Bu yöntem, yalnızca tekil veya çift hassasiyette gerçek veya karmaşık türleri destekleyen SuiteSparse'tan CHOLMOD kütüphanesini kullanır. Bu eleman türlerinde olmayan giriş matrisleri, uygun şekilde bu türlere dönüştürülecektir.

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

Bir Cholesky faktörizasyonu C'yi v vektörü ile güncelleyin. Eğer A = C.U'C.U ise, CC = cholesky(C.U'C.U + v*v') ancak CC'nin hesaplanması yalnızca O(n^2) işlemi kullanır.

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

Bir LDLt Faktörizasyonu A + C*C' için, A'nın LDLt veya LLt faktörizasyonu F verildiğinde.

Dönen faktör her zaman bir LDLt faktörizasyonudur.

Ayrıca bkz. lowrankupdate!, lowrankdowndate, lowrankdowndate!.

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

Bir Cholesky faktörizasyonunu C vektörü v ile güncelleyin. Eğer A = C.U'C.U ise, CC = cholesky(C.U'C.U - v*v') ancak CC'nin hesaplanması yalnızca O(n^2) işlemi kullanır.

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

Bir LDLt Faktörizasyonu A + C*C' için, A'nın LDLt veya LLt faktörizasyonu F verildiğinde.

Dönen faktör her zaman bir LDLt faktörizasyonudur.

Ayrıca bkz. lowrankdowndate!, lowrankupdate, lowrankupdate!.

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

Bir Cholesky faktörizasyonu C'yi v vektörü ile güncelleyin. Eğer A = C.U'C.U ise, CC = cholesky(C.U'C.U + v*v') ancak CC'nin hesaplanması yalnızca O(n^2) işlemi kullanır. Girdi faktörizasyonu C yerinde güncellenir, böylece çıkışta C == CC olur. v vektörü hesaplama sırasında yok edilir.

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

Bir LDLt veya LLt Faktörizasyonu F'yi A + C*C''nin bir faktörizasyonuna güncelleyin.

LLt faktörizasyonları LDLt'ye dönüştürülür.

Ayrıca bkz. lowrankupdate, lowrankdowndate, lowrankdowndate!.

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

Bir Cholesky faktörizasyonunu C vektörü v ile güncelleyin. Eğer A = C.U'C.U ise, CC = cholesky(C.U'C.U - v*v') ancak CC'nin hesaplanması yalnızca O(n^2) işlemi kullanır. Girdi faktörizasyonu C yerinde güncellenir, böylece çıkışta C == CC olur. Vektör v hesaplama sırasında yok edilir.

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

Bir LDLt veya LLt Faktörizasyonu F'yi A - C*C''nin bir faktörizasyonuna günceller.

LLt faktörizasyonları LDLt'ye dönüştürülür.

Ayrıca bkz. lowrankdowndate, lowrankupdate, lowrankupdate!.

source
LinearAlgebra.LDLtType
LDLt <: Factorizasyon

Gerçek SymTridiagonal matris S için S = L*Diagonal(d)*L' şeklinde LDLt faktorizasyonunun matris faktorizasyon türü, burada L bir UnitLowerTriangular matris ve d bir vektördür. F = ldlt(S) şeklindeki bir LDLt faktorizasyonunun ana kullanımı, Sx = b doğrusal denklemler sistemini F\b ile çözmektir. Bu, ilgili matris faktorizasyon fonksiyonu olan ldlt için dönüş türüdür.

Faktorizasyonun bireysel bileşenleri F::LDLt aracılığıyla getproperty ile erişilebilir:

BileşenAçıklama
F.LLDLt'nin L (birim alt üçgen) kısmı
F.DLDLt'nin D (diyagonal) kısmı
F.LtLDLt'nin Lt (birim üst üçgen) kısmı
F.dD'nin diyagonal değerleri Vector olarak

Örnekler

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

Gerçek simetrik tridiagonal matris S için LDLt (yani, $LDL^T$) faktorizasyonu hesaplayın; burada S = L*Diagonal(d)*L' şeklindedir ve L birim alt üçgen matris, d ise bir vektördür. F = ldlt(S) şeklindeki bir LDLt faktorizasyonunun ana kullanımı, Sx = b doğrusal denklemler sistemini F\b ile çözmektir.

Benzer, ancak pivotlu, genel simetrik veya Hermit matrislerin faktorizasyonu için bunchkaufman kısmına da bakın.

Örnekler

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

Sıkışık bir matris A'nın $LDL'$ faktorizasyonunu hesaplar. A, bir SparseMatrixCSC veya bir Symmetric/Hermitian görünümü olmalıdır. A'nın tür etiketi olmasa bile, hala simetrik veya Hermitian olmalıdır. Bir dolgu azaltıcı permütasyon kullanılır. F = ldlt(A) genellikle A*x = b denklemlerini F\b ile çözmek için kullanılır. Döndürülen faktorizasyon nesnesi F, ayrıca diag, det, logdet ve inv yöntemlerini de destekler. F'den bireysel faktörleri F.L kullanarak çıkarabilirsiniz. Ancak, varsayılan olarak pivotlama açık olduğundan, faktorizasyon içsel olarak A == P'*L*D*L'*P şeklinde temsil edilir; P ile hesaba katmadan sadece L kullanmak yanlış sonuçlar verecektir. Permütasyon etkilerini dahil etmek için, genellikle PtL = F.PtL (eşdeğeri P'*L) ve LtP = F.UP (eşdeğeri L'*P) gibi "birleşik" faktörleri çıkarmak tercih edilir. Desteklenen faktörlerin tam listesi :L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP'dir.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (via issuccess) kullanıcıya aittir.

İsteğe bağlı shift anahtar argümanını ayarlamak, A yerine A+shift*I'nin faktorizasyonunu hesaplar. perm argümanı sağlanırsa, bu, kullanılacak sıralamayı veren 1:size(A,1)'in bir permütasyonu olmalıdır (CHOLMOD'un varsayılan AMD sıralaması yerine).

Not

Bu yöntem, SuiteSparse kütüphanesinden CHOLMOD[ACM887][DavisHager2009] kullanır. CHOLMOD yalnızca tekil veya çift hassasiyetli gerçek veya karmaşık türleri destekler. Bu eleman türlerinde olmayan giriş matrisleri, uygun şekilde bu türlere dönüştürülecektir.

CHOLMOD'dan birçok başka işlev sarılmıştır ancak Base.SparseArrays.CHOLMOD modülünden dışa aktarılmamıştır.

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

ldlt ile aynı, ancak bir kopya oluşturmak yerine girdi S'yi üst üste yazarak alan tasarrufu sağlar.

Örnekler

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'nın $LDL'$ faktorizasyonunu hesaplayın, sembolik faktorizasyonu F'yi yeniden kullanarak. A, bir SparseMatrixCSC veya bir Symmetric/Hermitian görünümü olmalıdır. A'nın tür etiketi olmasa bile, yine de simetrik veya Hermitian olması gerektiğini unutmayın.

Ayrıca bkz. ldlt.

Not

Bu yöntem, yalnızca tek veya çift hassasiyette gerçek veya karmaşık türleri destekleyen SuiteSparse kütüphanesini kullanır. Bu eleman türlerinde olmayan giriş matrisleri, uygun şekilde bu türlere dönüştürülecektir.

source
LinearAlgebra.QRType
QR <: Factorization

Bir QR matris faktorizasyonu, genellikle qr ile elde edilen, paketlenmiş bir formatta saklanır. Eğer $A$ bir m×n matris ise, o zaman

\[A = Q R\]

burada $Q$ ortogonal/birleşik bir matris ve $R$ üst üçgen matristir. Matris $Q$, aşağıdaki gibi Householder yansıtıcılarının $v_i$ ve katsayılarının $\tau_i$ bir dizisi olarak saklanır:

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

Ayrıştırmayı yineleyerek Q ve R bileşenlerini üretiriz.

Nesne iki alana sahiptir:

  • factors, m×n boyutunda bir matristir.

    • Üst üçgen kısmı $R$'nin elemanlarını içerir, yani R = triu(F.factors) bir QR nesnesi F için.
    • Alt diyagonal kısmı, $v_i$'lerin paketlenmiş formatta saklandığı, V = I + tril(F.factors, -1) matrisinin $i$'nci sütunu olan yansıtıcıları içerir.
  • τ, $au_i$ katsayılarını içeren min(m,n) uzunluğunda bir vektördür.

source
LinearAlgebra.QRCompactWYType
QRCompactWY <: Factorization

Kompakt blok formatında saklanan bir QR matris faktorizasyonu, genellikle qr ile elde edilir. Eğer $A$ bir m×n matris ise, o zaman

\[A = Q R\]

burada $Q$ ortogonal/birleşik bir matris ve $R$ üst üçgen bir matristir. Bu, ortogonal/birleşik matris $Q$'nun Kompakt WY formatında saklandığı için QR formatına benzer [Schreiber1989]. Blok boyutu $n_b$ için, m×n alt trapezoidal matris $V$ ve $b = \lceil \min(m,n) / n_b \rceil$ üst üçgen matrislerden oluşan bir matris $T = (T_1 \; T_2 \; ... \; T_{b-1} \; T_b')$ olarak saklanır; burada $T_j$ boyutu $n_b$×$n_b$ olan ($j = 1, ..., b-1$) ve üst trapezoidal $n_b$×$\min(m,n) - (b-1) n_b$ matris $T_b'$ ($j=b$) ile birlikte $T_b$ ile gösterilen üst kare kısmı ile birlikte

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

şeklindedir; burada $v_i$ $V$'nin $i$'inci sütunu, $\tau_i$ ise [diag(T_1); diag(T_2); …; diag(T_b)]'nin $i$'inci elemanıdır ve $(V_1 \; V_2 \; ... \; V_b)$ $V$'nin sol m×min(m, n) bloğudur. qr kullanılarak oluşturulduğunda, blok boyutu $n_b = \min(m, n, 36)$ olarak verilir.

Ayrıştırmayı yinelemek Q ve R bileşenlerini üretir.

Nesne iki alana sahiptir:

  • factors, QR türünde olduğu gibi, bir m×n matristir.

    • Üst üçgen kısmı $R$'nin elemanlarını içerir, yani R = triu(F.factors) bir QR nesnesi F için.
    • Alt diyagonal kısmı, V = I + tril(F.factors, -1) şeklinde paketlenmiş formatta saklanan yansıtıcılar $v_i$'yi içerir.
  • T, yukarıda açıklandığı gibi bir $n_b$-çarpı-$\min(m,n)$ matristir. Her üçgen matris $T_j$ için alt diyagonal elemanlar göz ardı edilir.

Note

Bu format, daha eski WY temsil biçimi ile karıştırılmamalıdır [Bischof1987].

source
LinearAlgebra.QRPivotedType
QRPivoted <: Factorization

Sütun pivotlamalı bir QR matris faktorizasyonu, genellikle qr ile elde edilen paketlenmiş bir formatta. Eğer $A$ bir m×n matris ise, o zaman

\[A P = Q R\]

burada $P$ bir permütasyon matrisidir, $Q$ ortogonal/birleşik bir matris ve $R$ üst üçgen bir matristir. Matris $Q$, bir dizi Householder yansıtıcısı olarak saklanır:

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

Ayrıştırmayı yineleyerek Q, R ve p bileşenlerini üretir.

Nesne üç alana sahiptir:

  • factors, m×n boyutunda bir matristir.

    • Üst üçgen kısmı $R$'nin elemanlarını içerir, yani R = triu(F.factors) bir QR nesnesi F için.
    • Alt diyagonal kısmı, $v_i$'lerin yansıtıcılarını içerir ve bunlar, $v_i$'nin matris V = I + tril(F.factors, -1)'nin $i$'inci sütunu olduğu paketlenmiş bir formatta saklanır.
  • τ, $au_i$ katsayılarını içeren min(m,n) uzunluğunda bir vektördür.

  • jpvt, permütasyon $P$'ye karşılık gelen n uzunluğunda bir tam sayı vektörüdür.

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

Seyrek bir matris A'nın QR faktorizasyonunu hesaplar. F.R = F.Q'*A[F.prow,F.pcol] olacak şekilde dolgu azaltıcı satır ve sütun permütasyonları kullanılır. Bu türün ana uygulaması, \ ile en küçük kareler veya yetersiz problemleri çözmektir. Fonksiyon, C kütüphanesi SPQR'yi çağırır[ACM933].

Note

qr(A::SparseMatrixCSC) SuiteSparse parçası olan SPQR kütüphanesini kullanır. Bu kütüphane yalnızca Float64 veya ComplexF64 elemanlarına sahip seyrek matrisleri desteklediğinden, Julia v1.4 itibarıyla qr, A'yı uygun şekilde SparseMatrixCSC{Float64} veya SparseMatrixCSC{ComplexF64} türünde bir kopyaya dönüştürür.

Örnekler

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 faktörü:
4×4 SparseArrays.SPQR.QRSparseQ{Float64, Int64}
R faktörü:
2×2 SparseMatrixCSC{Float64, Int64} with 2 stored entries:
 -1.41421    ⋅
   ⋅       -1.41421
Satır permütasyonu:
4 elemanlı Vector{Int64}:
 1
 3
 4
 2
Sütun permütasyonu:
2 elemanlı Vector{Int64}:
 1
 2
source
qr(A, pivot = NoPivot(); blocksize) -> F

Matris A'nın QR faktorizasyonunu hesaplar: ortogonal (veya A karmaşık değerli ise ünite) bir matris Q ve

\[A = Q R\]

şeklinde bir üst üçgen matris R döner.

Dönen nesne F, faktorizasyonu paketlenmiş bir formatta saklar:

  • pivot == ColumnNorm() ise F bir QRPivoted nesnesidir,
  • A'nın eleman türü bir BLAS türü (Float32, Float64, ComplexF32 veya ComplexF64) ise, F bir QRCompactWY nesnesidir,
  • aksi takdirde F bir QR nesnesidir.

Faktorizasyonun bireysel bileşenleri F üzerinden özellik erişimcileri ile alınabilir:

  • F.Q: ortogonal/ünite matris Q
  • F.R: üst üçgen matris R
  • F.p: pivotun permütasyon vektörü (QRPivoted yalnızca)
  • F.P: pivotun permütasyon matris (QRPivoted yalnızca)
Not

F.R üzerinden üst üçgen faktöre yapılan her referans yeni bir dizi ayırır. Bu nedenle, o diziyi önbelleğe almak, örneğin R = F.R ile devam etmek tavsiye edilir.

Faktorizasyonu yineleyerek Q, R ve mevcutsa p bileşenlerini üretir.

QR nesneleri için aşağıdaki fonksiyonlar mevcuttur: inv, size ve \. A dikdörtgen olduğunda, \ en küçük kareler çözümünü döner ve çözüm benzersiz değilse, en küçük norm olanı döner. A tam sıralı değilse, minimum norm çözümünü elde etmek için (sütun) pivotlama ile faktorizasyon gereklidir.

Tam/kare veya tam olmayan/kare Q ile çarpma mümkündür, yani hem F.Q*F.R hem de F.Q*A desteklenir. Bir Q matrisini Matrix ile normal bir matrise dönüştürebilirsiniz. Bu işlem "ince" Q faktörünü döner, yani A m×n ise ve m>=n ise, Matrix(F.Q) ortonormal sütunlara sahip bir m×n matris döner. "Tam" Q faktörünü almak için, bir m×m ortogonal matris, F.Q*I veya collect(F.Q) kullanın. Eğer m<=n ise, Matrix(F.Q) bir m×m ortogonal matris döner.

QR faktorizasyonu için blok boyutu, pivot == NoPivot() ve A isa StridedMatrix{<:BlasFloat} olduğunda anahtar argüman blocksize :: Integer ile belirtilebilir. blocksize > minimum(size(A)) olduğunda göz ardı edilir. QRCompactWY için bakınız.

Julia 1.4

blocksize anahtar argümanı Julia 1.4 veya daha yenisini gerektirir.

Örnekler

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

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

qr birden fazla tür döner çünkü LAPACK, Householder temel yansıtıcılarının ürünlerinin bellek depolama gereksinimlerini en aza indiren birkaç temsil kullanır, böylece Q ve R matrisleri ayrı yoğun matrisler olarak saklanabilir.

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

qr!, qr ile aynı işlevi görür, ancak A'nın bir alt türü olduğunda AbstractMatrix, girişi A ile üzerine yazarak alan tasarrufu sağlar, kopya oluşturmaktan kaçınır. Faktörizasyon, A'nın eleman türü tarafından temsil edilemeyen bir sayı üretirse, örneğin tam sayı türleri için, bir InexactError istisnası fırlatılır.

Julia 1.4

blocksize anahtar kelime argümanı Julia 1.4 veya daha yenisini gerektirir.

Örnekler

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 faktörü: 2×2 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R faktö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)
HATA: InexactError: Int64(3.1622776601683795)
Yığın izi:
[...]
source
LinearAlgebra.LQType
LQ <: Factorizasyon

Bir matris A'nın LQ faktorizasyonunun matris faktorizasyon türü. LQ ayrıştırması, transpose(A)'nın QR ayrıştırmasıdır. Bu, ilgili matris faktorizasyon fonksiyonu olan lq'nin dönüş türüdür.

Eğer S::LQ faktorizasyon nesnesi ise, alt üçgen bileşeni S.L aracılığıyla elde edilebilir ve ortogonal/unitary bileşen S.Q aracılığıyla elde edilir, böylece A ≈ S.L*S.Q olur.

Ayrıştırmayı yinelemek, bileşenleri S.L ve S.Q üretir.

Örnekler

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

julia> S = lq(A)
LQ{Float64, Matris{Float64}, Vektör{Float64}}
L faktörü:
2×2 Matris{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q faktörü: 2×2 LinearAlgebra.LQPackedQ{Float64, Matris{Float64}, Vektör{Float64}}

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

julia> l, q = S; # yineleme ile parçalama

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

A'nın LQ ayrıştırmasını hesaplayın. Ayrıştırmanın alt üçgen bileşeni, S nesnesinden S.L aracılığıyla elde edilebilir ve ortogonal/unitary bileşen S.Q aracılığıyla elde edilebilir, böylece A ≈ S.L*S.Q olur.

Ayrıştırmayı yineleyerek S.L ve S.Q bileşenlerini elde edersiniz.

LQ ayrıştırması, transpose(A)'nın QR ayrıştırmasıdır ve lq(A) \ b ifadesi ile bir belirsiz denklemler sistemine ( A'nın satır sayısından daha fazla sütunu var, ancak tam satır rütbesine sahip) minimum-norm çözümünü hesaplamak için faydalıdır.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Q faktörü: 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; # yineleme ile parçalama

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

A matrisinin LQ faktorizasyonunu hesaplayın, girdi matrisini bir çalışma alanı olarak kullanarak. Ayrıca lq ile de bakın.

source
LinearAlgebra.BunchKaufmanType
BunchKaufman <: Factorization

Simetrik veya Hermit bir matris A için Bunch-Kaufman faktorizasyonunun matris faktorizasyon türü P'UDU'P veya P'LDL'P şeklindedir; bu, A'da üst (varsayılan) veya alt üçgenin saklanıp saklanmadığına bağlıdır. Eğer A karmaşık simetrik ise, U' ve L' karmaşık olmayan transpozları, yani sırasıyla transpose(U) ve transpose(L) anlamına gelir. Bu, bunchkaufman fonksiyonunun dönüş türüdür.

Eğer S::BunchKaufman faktorizasyon nesnesi ise, bileşenler S.D, S.U veya S.L aracılığıyla, S.uplo ve S.p'ye bağlı olarak elde edilebilir.

Ayrıştırmayı yinelemek, S.D, S.U veya S.L bileşenlerini, S.uplo ve S.p'ye bağlı olarak üretir.

Örnekler

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

julia> S = bunchkaufman(A) # A, içsel olarak Symmetric(A) ile sarılır
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D faktörü:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U faktörü:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutasyon:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # yineleme ile parçalama

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

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

Bir simetrik veya Hermit matris A'nın Bunch-Kaufman [Bunch1977] faktorizasyonunu P'*U*D*U'*P veya P'*L*D*L'*P olarak hesaplayın; bu, A'da hangi üçgenin saklandığına bağlıdır ve bir BunchKaufman nesnesi döndürün. A karmaşık simetrik ise, U' ve L' karmaşık olmayan transpozları, yani transpose(U) ve transpose(L)'yi ifade eder.

Ayrıştırmayı yinelemek, S.uplo'ya bağlı olarak uygun olan S.D, S.U veya S.L bileşenlerini ve S.p'yi üretir.

Eğer rook true ise, rook pivotlama kullanılır. Eğer rook false ise, rook pivotlama kullanılmaz.

check = true olduğunda, ayrıştırma başarısız olursa bir hata fırlatılır. check = false olduğunda, ayrıştırmanın geçerliliğini kontrol etme sorumluluğu (issuccess aracılığıyla) kullanıcıya aittir.

BunchKaufman nesneleri için aşağıdaki fonksiyonlar mevcuttur: size, \, inv, issymmetric, ishermitian, getindex.

Örnekler

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) tarafından dahili olarak sarılır
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D faktörü:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U faktörü:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutasyon:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # yineleme ile parçalama

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 faktörü:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L faktörü:
2×2 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
permutasyon:
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 ile aynıdır, ancak girişi A üzerine yazarak alan tasarrufu sağlar, kopya oluşturmaktansa.

source
LinearAlgebra.EigenType
Eigen <: Factorization

Kare matris A'nın özdeğer/spektral ayrıştırma matris ayrıştırma türüdür. Bu, eigen olan ilgili matris ayrıştırma fonksiyonunun dönüş türüdür.

Eğer F::Eigen ayrıştırma nesnesi ise, özdeğerler F.values aracılığıyla elde edilebilir ve özvektörler F.vectors matrisinin sütunları olarak elde edilebilir. (k'nci özvektör F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yinelemek, F.values ve F.vectors bileşenlerini üretir.

Örnekler

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
GenelleştirilmişEigen <: Faktörizasyon

A ve B'nin genelleştirilmiş özdeğer/spektral ayrıştırmasının matris faktörizasyon türü. Bu, iki matris argümanıyla çağrıldığında eigen ile ilgili matris faktörizasyon fonksiyonunun dönüş türüdür.

Eğer F::GenelleştirilmişEigen faktörizasyon nesnesi ise, özdeğerler F.values aracılığıyla elde edilebilir ve özvektörler F.vectors matrisinin sütunları olarak elde edilebilir. (k'nci özvektör F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yinelemek, F.values ve F.vectors bileşenlerini üretir.

Örnekler

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)
GenelleştirilmişEigen{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'nın özdeğerlerini döndürür.

Genel simetrik olmayan matrisler için, özdeğer hesaplamasından önce matrisin nasıl dengeleneceğini belirtmek mümkündür. permute, scale ve sortby anahtar kelimeleri, eigen için olanlarla aynıdır.

Örnekler

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

Bir skalar girdi için, eigvals bir skalar döndürecektir.

Örnekler

julia> eigvals(-2)
-2
source
eigvals(A, B) -> değerler

A ve B'nin genel özdeğerlerini hesaplayın.

Örnekler

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'nın özdeğerlerini döndürür. Sıralanmış özdeğerlerin indekslerini kapsayan bir UnitRange irange belirterek yalnızca bir alt kümesini hesaplamak mümkündür; örneğin, 2. ile 8. özdeğerler.

Örnekler

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'nın özdeğerlerini döndürür. Özdeğerlerin alt ve üst sınırları için bir çift vl ve vu belirterek yalnızca bir alt kümesini hesaplamak mümkündür.

Örnekler

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 ile aynı, ancak bir kopya oluşturmak yerine girdi A'yı üst üste yazarak yer tasarrufu sağlar. permute, scale ve sortby anahtar kelimeleri eigen için olanlarla aynıdır.

Not

Girdi matris A, eigvals! çağrıldıktan sonra özdeğerlerini içermeyecektir - A bir çalışma alanı olarak kullanılır.

Örnekler

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 ile aynı, ancak kopyalar oluşturmak yerine giriş A (ve B) üzerine yazarak alan tasarrufu sağlar.

Not

Giriş matrisleri A ve B, eigvals! çağrıldıktan sonra özdeğerlerini içermeyecektir. Çalışma alanı olarak kullanılırlar.

Örnekler

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 ile aynı, ancak bir kopya oluşturmak yerine girdi A'yı üst üste yazarak alan tasarrufu sağlar. irange, aramak için bir özdeğer indisleri aralığıdır - örneğin, 2. ile 8. özdeğerler.

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

eigvals ile aynı, ancak bir kopya oluşturmak yerine giriş A'yı üst üste yazarak alan tasarrufu sağlar. vl, özdeğerleri aramak için aralığın alt sınırıdır ve vu üst sınırdır.

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

A'nın en büyük özdeğerini döndürür. permute=true seçeneği, matrisin üst üçgensel hale daha yakın hale gelmesi için permütasyon yapar ve scale=true seçeneği, satır ve sütunların norm açısından daha eşit hale gelmesi için matrisin köşegen elemanlarıyla ölçeklenmesini sağlar. A'nın özdeğerleri karmaşık ise, bu yöntem başarısız olacaktır, çünkü karmaşık sayılar sıralanamaz.

Örnekler

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)
HATA: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` karmaşık özdeğerlere sahip olamaz.
Stacktrace:
[...]
source
LinearAlgebra.eigminFunction
eigmin(A; permute::Bool=true, scale::Bool=true)

A'n en küçük özdeğerini döndürür. permute=true seçeneği, matrisin üst üçgen forma daha yakın hale gelmesi için permütasyon yapar ve scale=true seçeneği, satır ve sütunların norm açısından daha eşit hale gelmesi için matrisin köşegen elemanlarıyla ölçeklenmesini sağlar. A'nın özdeğerleri karmaşık ise, bu yöntem başarısız olacaktır, çünkü karmaşık sayılar sıralanamaz.

Örnekler

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)
HATA: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` karmaşık özdeğerlere sahip olamaz.
Stacktrace:
[...]
source
LinearAlgebra.eigvecsFunction
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

Bir matris M döndürür; M'nin sütunları A'nın özvektörleridir. (k'nci özvektör, M[:, k] diliminden elde edilebilir.)

Eğer isteğe bağlı özdeğerler vektörü eigvals belirtilmişse, eigvecs belirli karşılık gelen özvektörleri döndürür.

Örnekler

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'nın özvektillerini içeren M matrisini döndürür. (k'nci özvektör M[:, k] diliminden elde edilebilir.) permute, scale ve sortby anahtar kelimeleri eigen ile aynıdır.

Örnekler

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

Bir matris M döndürün, sütunları A ve B'nin genelleştirilmiş özvektörleridir. (k'nci özvektör, M[:, k] diliminden elde edilebilir.)

Örnekler

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'nın özdeğer ayrıştırmasını hesaplar ve özdeğerleri F.values içinde ve özvektörleri matris F.vectors'ın sütunlarında içeren bir Eigen faktörizasyon nesnesi F döner. Bu, Ax = λx biçiminde bir özdeğer problemini çözmekle ilgilidir; burada A bir matris, x bir özvektör ve λ bir özdeğerdir. (k'nci özvektör F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yinelemek, F.values ve F.vectors bileşenlerini üretir.

Eigen nesneleri için aşağıdaki fonksiyonlar mevcuttur: inv, det ve isposdef.

Genel simetrik olmayan matrisler için, özvektör hesaplamasından önce matrisin nasıl dengeleneceğini belirtmek mümkündür. permute=true seçeneği, matrisin üst üçgen forma daha yakın hale gelmesi için permütasyon yapar ve scale=true seçeneği, matrisin satır ve sütunlarının norm açısından daha eşit hale gelmesi için matrisin köşegen elemanlarıyla ölçeklenmesini sağlar. Her iki seçenek için varsayılan değer true'dur.

Varsayılan olarak, özdeğerler ve vektörler (real(λ),imag(λ)) açısından leksikografik olarak sıralanır. sortby'ye farklı bir karşılaştırma fonksiyonu by(λ) geçirilebilir veya özdeğerleri rastgele bir sırada bırakmak için sortby=nothing geçilebilir. Bazı özel matris türleri (örneğin, Diagonal veya SymTridiagonal) kendi sıralama kuralını uygulayabilir ve sortby anahtar kelimesini kabul etmeyebilir.

Örnekler

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) -> GenelleşmişEigen

A ve B matrislerinin genelleşmiş özdeğer ayrıştırmasını hesaplayarak, F.values içinde genelleşmiş özdeğerleri ve F.vectors matrisinin sütunlarında genelleşmiş özvektörleri içeren bir GenelleşmişEigen faktörizasyon nesnesi F döndürür. Bu, Ax = λBx biçiminde bir genelleşmiş özdeğer problemini çözmekle ilgilidir; burada A, B matrislerdir, x bir özvektördür ve λ bir özdeğerdir. (k'nci genelleşmiş özvektör, F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yinelemek, F.values ve F.vectors bileşenlerini üretir.

Varsayılan olarak, özdeğerler ve vektörler (real(λ),imag(λ)) sıralamasıyla leksikografik olarak sıralanır. sortby'ya farklı bir karşılaştırma fonksiyonu by(λ) geçirilebilir veya özdeğerleri rastgele bir sırada bırakmak için sortby=nothing geçirebilirsiniz.

Örnekler

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; # yineleme ile parçalama

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

A'n özdeğer ayrıştırmasını hesaplayarak, özdeğerleri F.values içinde ve özvektörleri matris F.vectors'ın sütunlarında içeren bir Eigen faktörizasyon nesnesi F döndürür. (k'nci özvektör, F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yineleyerek F.values ve F.vectors bileşenlerini elde edebilirsiniz.

Eigen nesneleri için aşağıdaki fonksiyonlar mevcuttur: inv, det ve isposdef.

UnitRange irange, aranan sıralı özdeğerlerin indekslerini belirtir.

Not

Eğer irange 1:n değilse, burada n A'nın boyutudur, o zaman döndürülen faktörizasyon kısmi bir faktörizasyon olacaktır.

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

A'n özdeğer ayrıştırmasını hesaplayarak, özdeğerleri F.values içinde ve özvektörleri matris F.vectors'ın sütunlarında içeren bir Eigen faktörizasyon nesnesi F döndürür. (k'nci özvektör, F.vectors[:, k] diliminden elde edilebilir.)

Ayrıştırmayı yineleyerek F.values ve F.vectors bileşenlerini elde edebilirsiniz.

Eigen nesneleri için aşağıdaki fonksiyonlar mevcuttur: inv, det ve isposdef.

vl, aramak için özdeğerlerin alt sınırıdır ve vu üst sınırdır.

Not

Eğer [vl, vu] A'nın tüm özdeğerlerini içermiyorsa, döndürülen faktörizasyon kısmi bir faktörizasyon olacaktır.

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

eigen ile aynı, ancak bir kopya oluşturmak yerine girdi A (ve B) üzerine yazarak alan tasarrufu sağlar.

source
LinearAlgebra.HessenbergType
Hessenberg <: Faktörizasyon

Bir Hessenberg nesnesi, bir kare matrisin Hessenberg faktörizasyonunu QHQ' veya bunun bir kaydırmasını Q(H+μI)Q' temsil eder; bu, hessenberg fonksiyonu tarafından üretilir. ```

source
LinearAlgebra.hessenbergFunction
hessenberg(A) -> Hessenberg

A'n Hessenberg ayrıştırmasını hesaplayın ve bir Hessenberg nesnesi döndürün. F faktörizasyon nesnesi ise, birim matris F.Q (tipi LinearAlgebra.HessenbergQ) ile ve Hessenberg matris F.H (tipi UpperHessenberg) ile erişilebilir; bunların her biri Matrix(F.H) veya Matrix(F.Q) ile normal bir matrise dönüştürülebilir.

Eğer A Hermitian veya gerçek-Symmetric ise, o zaman Hessenberg ayrıştırması gerçek-simetrik tridiagonal bir matris üretir ve F.H tipi SymTridiagonal olur.

Kaydırılmış faktörizasyon A+μI = Q (H+μI) Q' verimli bir şekilde F + μ*I kullanılarak oluşturulabilir; burada UniformScaling nesnesi I yeni bir Hessenberg nesnesi oluşturur ve paylaşılan depolama ile değiştirilmiş bir kaydırma sağlar. Verilen bir F için kaydırma F.μ ile elde edilir. Bu, F oluşturulduktan sonra farklı μ ve/veya b için birden fazla kaydırılmış çözüm (F + μ*I) \ b'nin verimli bir şekilde gerçekleştirilebilmesi açısından faydalıdır.

Ayrıştırmayı yinelemek, faktörleri F.Q, F.H, F.μ üretir.

Örnekler

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 faktörü: 3×3 LinearAlgebra.HessenbergQ{Float64, Matrix{Float64}, Vector{Float64}, false}
H faktörü:
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; # yineleme ile parçalama

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

Bir matris A'nın Schur faktorizasyonu için matris faktorizasyon türü. Bu, schur(_) ile ilgili matris faktorizasyon fonksiyonunun dönüş türüdür.

Eğer F::Schur faktorizasyon nesnesi ise, (quasi) üçgen Schur faktörü F.Schur veya F.T ile elde edilebilir ve ortogonal/unitary Schur vektörleri F.vectors veya F.Z ile elde edilebilir, böylece A = F.vectors * F.Schur * F.vectors'. A'nın özdeğerleri F.values ile elde edilebilir.

Ayrıştırmayı yinelemek, F.T, F.Z ve F.values bileşenlerini üretir.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z faktörü:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
özdeğerler:
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; # yineleme ile parçalama

julia> t == F.T && z == F.Z && vals == F.values
true
source
LinearAlgebra.GeneralizedSchurType
GenelleştirilmişSchur <: Faktörizasyon

İki matris A ve B için genelleştirilmiş Schur faktörizasyonunun matris faktörizasyon türü. Bu, schur(_, _) ile ilgili matris faktörizasyon fonksiyonunun dönüş türüdür.

Eğer F::GenelleştirilmişSchur faktörizasyon nesnesi ise, (quasi) üçgen Schur faktörleri F.S ve F.T aracılığıyla elde edilebilir, sol birim/ortogonal Schur vektörleri F.left veya F.Q ile, sağ birim/ortogonal Schur vektörleri ise F.right veya F.Z ile elde edilebilir; böylece A=F.left*F.S*F.right' ve B=F.left*F.T*F.right'. A ve B'nin genelleştirilmiş özdeğerleri F.α./F.β ile elde edilebilir.

Ayrıştırmayı yinelemek, bileşenleri F.S, F.T, F.Q, F.Z, F.α ve F.β üretir.

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

Matris A'nın Schur faktorizasyonunu hesaplar. (quasi) üçgen Schur faktörü, F Schur nesnesinden F.Schur veya F.T ile elde edilebilir ve ortogonal/unitary Schur vektörleri F.vectors veya F.Z ile elde edilebilir; böylece A = F.vectors * F.Schur * F.vectors'. A'nın özdeğerleri F.values ile elde edilebilir.

Gerçek A için Schur faktorizasyonu "quasitriangular"dır, bu da üst üçgen olduğu anlamına gelir, ancak karmaşık özdeğerlerin herhangi bir konjugat çifti için 2×2 diyagonal bloklar içerir; bu, karmaşık özdeğerler olsa bile faktorizasyonun tamamen gerçek olmasını sağlar. Gerçek bir quasitriangular faktorizasyondan (karmaşık) tamamen üst üçgen Schur faktorizasyonunu elde etmek için Schur{Complex}(schur(A)) kullanabilirsiniz.

Ayrıştırmayı yinelemek, F.T, F.Z ve F.values bileşenlerini üretir.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z faktörü:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
özdeğerler:
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; # yineleme ile parçalama

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

Matrislerin A ve B Genel Schur (veya QZ) faktorizasyonunu hesaplar. (kuazi) üçgen Schur faktörleri F nesnesinden F.S ve F.T ile elde edilebilir, sol birim/ortogonal Schur vektörleri F.left veya F.Q ile elde edilebilir ve sağ birim/ortogonal Schur vektörleri F.right veya F.Z ile elde edilebilir, böylece A=F.left*F.S*F.right' ve B=F.left*F.T*F.right'. A ve B'nin genel özdeğerleri F.α./F.β ile elde edilebilir.

Ayrıştırmayı yinelemek, bileşenleri F.S, F.T, F.Q, F.Z, F.α ve F.β üretir.

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

Girdi argümanı A'yı çalışma alanı olarak kullanan schur ile aynı.

Örnekler

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 faktörü:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z faktörü:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
özdeğerler:
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 ile aynı, ancak giriş matrisleri A ve B çalışma alanı olarak kullanılır.

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

Bir matris A = Z*T*Z''nin Schur faktorizasyonu F'yi mantıksal dizi select'e göre yeniden sıralar ve yeniden sıralanmış faktorizasyon F nesnesini döndürür. Seçilen özdeğerler F.Schur'un öncelikli diyagonalinde görünür ve F.vectors'ın karşılık gelen öncelikli sütunları, ilgili sağ invariyant alt uzayının ortogonal/unitary bir tabanını oluşturur. Gerçek durumda, bir karmaşık eşlenik özdeğer çifti ya her ikisi de dahil edilmeli ya da her ikisi de select aracılığıyla hariç tutulmalıdır.

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

Bir matris çifti (A, B) = (Q*S*Z', Q*T*Z') için Genel Schur faktörizasyonu F'yi mantıksal dizi select'e göre yeniden sıralar ve bir GenelSchur nesnesi F döndürür. Seçilen özdeğerler, hem F.S hem de F.T'nin öncelikli diyagonalinde görünür ve sol ve sağ ortogonal/unitary Schur vektörleri de yeniden sıralanır, böylece (A, B) = F.Q*(F.S, F.T)*F.Z' hala geçerli kalır ve A ve B'nin genel özdeğerleri hala F.α./F.β ile elde edilebilir.

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

ordschur ile aynı, ancak faktorizasyonu F üzerine yazar.

source
ordschur!(F::GenelleştirilmişSchur, select::Union{Vector{Bool},BitVector}) -> F::GenelleştirilmişSchur

Aynı ordschur gibi, ancak faktorizasyonu F ile üzerine yazar.

source
LinearAlgebra.SVDType
SVD <: Factorization

Bir matrisin tekil değer ayrıştırmasının (SVD) matris faktörizasyon türü A. Bu, svd(_) ile ilgili matris faktörizasyon fonksiyonunun dönüş türüdür.

Eğer F::SVD faktörizasyon nesnesi ise, U, S, V ve Vt F.U, F.S, F.V ve F.Vt aracılığıyla elde edilebilir; böylece A = U * Diagonal(S) * Vt. S içindeki tekil değerler azalan sırada sıralanmıştır.

Ayrıştırmayı yinelemek, U, S ve V bileşenlerini üretir.

Örnekler

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 faktörü:
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
tekil değerler:
4-element Vector{Float64}:
 3.0
 2.23606797749979
 2.0
 0.0
Vt faktörü:
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; # yineleme ile parçalama

julia> u == F.U && s == F.S && v == F.V
true
source
LinearAlgebra.GeneralizedSVDType
GenelleştirilmişSVD <: Faktörizasyon

İki matris A ve B için genelleştirilmiş tekil değer ayrıştırmasının (SVD) matris faktörizasyon türü, A = F.U*F.D1*F.R0*F.Q' ve B = F.V*F.D2*F.R0*F.Q' şeklindedir. Bu, svd(_, _) fonksiyonunun döndürdüğü türdür, ilgili matris faktörizasyon fonksiyonu.

Bir M-by-N matris A ve P-by-N matris B için,

  • U M-by-M ortogonal bir matristir,
  • V P-by-P ortogonal bir matristir,
  • Q N-by-N ortogonal bir matristir,
  • D1 ilk K girişinde 1'ler bulunan M-by-(K+L) diyagonal bir matristir,
  • D2 üst sağ L-by-L bloğu diyagonal olan P-by-(K+L) bir matristir,
  • R0 sağdaki (K+L)-by-(K+L) bloğu tekil üst blok üçgen olan (K+L)-by-N bir matristir,

K+L, matrisin etkili sayısal derecesidir [A; B].

Ayrıştırmayı yinelemek, U, V, Q, D1, D2 ve R0 bileşenlerini üretir.

F.D1 ve F.D2 girişleri, genelleştirilmiş SVD için LAPACK belgelerinde ve altında çağrılan xGGSVD3 rutininde açıklandığı gibi ilişkilidir (LAPACK 3.6.0 ve daha yenilerinde).

Örnekler

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)
GenelleştirilmişSVD{Float64, Matrix{Float64}, Float64, Vector{Float64}}
U faktörü:
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
V faktörü:
2×2 Matrix{Float64}:
 -0.0  -1.0
  1.0   0.0
Q faktörü:
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
D1 faktörü:
2×2 Matrix{Float64}:
 0.707107  0.0
 0.0       0.707107
D2 faktörü:
2×2 Matrix{Float64}:
 0.707107  0.0
 0.0       0.707107
R0 faktörü:
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'nın tekil değer ayrıştırmasını (SVD) hesaplayın ve bir SVD nesnesi döndürün.

U, S, V ve Vt, F.U, F.S, F.V ve F.Vt ile ayrıştırmadan elde edilebilir; böylece A = U * Diagonal(S) * Vt. Algoritma Vt'yi üretir ve bu nedenle Vt'yi çıkarmak V'den daha verimlidir. S'deki tekil değerler azalan sırada sıralanmıştır.

Ayrıştırmayı yineleyerek U, S ve V bileşenlerini elde edersiniz.

Eğer full = false (varsayılan), "ince" bir SVD döndürülür. $M \times N$ boyutundaki bir matris A için, tam ayrıştırmada U $M \times M$ ve V $N \times N$ iken, ince ayrıştırmada U $M \times K$ ve V $N \times K$'dır; burada $K = \min(M,N)$ tekil değerlerin sayısıdır.

Eğer alg = DivideAndConquer() ise SVD'yi hesaplamak için bir böl ve fethet algoritması kullanılır. Diğer bir (genellikle daha yavaş ama daha doğru) seçenek alg = QRIteration()'dır.

Julia 1.3

alg anahtar argümanı Julia 1.3 veya daha yenisini gerektirir.

Örnekler

julia> A = rand(4,3);

julia> F = svd(A); # Ayrıştırma Nesnesini Sakla

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

julia> U, S, V = F; # yineleme ile parçalama

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

julia> Uonly, = svd(A); # Sadece U'yu Sakla

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

A ve B'nin genel SVD'sini hesaplayın, [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q' şeklinde bir GeneralizedSVD faktörizasyon nesnesi F döndürün.

  • U M-by-M ortogonal bir matristir,
  • V P-by-P ortogonal bir matristir,
  • Q N-by-N ortogonal bir matristir,
  • D1 ilk K girişinde 1'ler bulunan M-by-(K+L) diyagonal bir matristir,
  • D2 üst sağ L-by-L bloğu diyagonal olan P-by-(K+L) bir matristir,
  • R0 sağdaki (K+L)-by-(K+L) bloğu tekil üst blok üçgen olan (K+L)-by-N bir matristir,

K+L, [A; B] matrisinin etkili sayısal derecesidir.

Ayrıştırmayı yinelemek U, V, Q, D1, D2 ve R0 bileşenlerini üretir.

Genel SVD, A ile B arasındaki karşılaştırmalar yapmak istendiğinde, insan ile maya genomu, sinyal ile gürültü veya kümeler arası ile kümeler içi gibi uygulamalarda kullanılır. (Tartışma için Edelman ve Wang'a bakın: https://arxiv.org/abs/1901.00485)

[A; B]'yi [UC; VS]H şeklinde ayrıştırır, burada [UC; VS], [A; B]'nin sütun uzayı için doğal bir ortogonal temeldir ve H = RQ', [A;B]'nin satır uzayı için doğal bir ortogonal olmayan temeldir; burada üst satırlar en çok A matrisine atfedilir ve alt satırlar B matrisine atfedilir. Çoklu kosinüs/sinüs matrisleri C ve S, A ile B arasındaki oranı ölçen çoklu bir ölçü sağlar ve U ile V, bunların ölçüldüğü yönleri sağlar.

Örnekler

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 ile aynıdır, ancak bir kopya oluşturmak yerine girdi A'yı üst üste yazarak alan tasarrufu sağlar. Ayrıntılar için svd belgesine bakın.

source
svd!(A, B) -> Genel SVD

svd!, svd ile aynıdır, ancak A ve B argümanlarını yerinde değiştirir, kopyalarını oluşturmak yerine. Ayrıntılar için svd belgesine bakın.

source
LinearAlgebra.svdvalsFunction
svdvals(A)

A'nın tekil değerlerini azalan sırayla döndürür.

Örnekler

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)

Genelleştirilmiş tekil değerleri A ve B'nin genelleştirilmiş tekil değer ayrıştırmasından döndürür. Ayrıca svd bakınız.

Örnekler

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'nın tekil değerlerini döndürün, girişi üzerine yazarak yer tasarrufu sağlayın. Ayrıca bkz. svdvals ve svd.

source
svdvals!(A, B)

Genelleştirilmiş tekil değerleri A ve B'nin genelleştirilmiş tekil değer ayrıştırmasından döndürür, A ve B'yi üst üste yazarak alan tasarrufu sağlar. Ayrıca bkz. svd ve svdvals.

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

Bir Givens rotasyonu lineer operatörü. c ve s alanları, sırasıyla döndürme açısının kosinüsünü ve sinüsünü temsil eder. Givens türü, sol çarpma G*A ve konjuge transpoze sağ çarpma A*G' destekler. Bu türün bir boyutu yoktur ve bu nedenle G*A için i2<=size(A,2) veya A*G' için i2<=size(A,1) olduğu sürece, rastgele boyutlardaki matrislerle çarpılabilir.

Ayrıca bkz. givens.

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

Givens rotasını G ve herhangi bir vektör x için

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

şu şekilde hesaplar:

y = G*x

sonucunun şu özelliğe sahip olmasını sağlar:

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

Ayrıca bkz. LinearAlgebra.Givens.

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

Givens rotasını G ve çarpan r'yi hesaplar, böylece çarpmanın sonucu

B = G*A

şu özelliğe sahip olur:

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

Ayrıca bkz. LinearAlgebra.Givens.

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

Givens rotasını G ve çarpan r'yi hesaplar, böylece çarpmanın sonucu

B = G*x

şu özelliğe sahip olur:

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

Ayrıca bkz. LinearAlgebra.Givens.

source
LinearAlgebra.triuFunction
triu(M)

Bir matrisin üst üçgeni.

Örnekler

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)

M matrisinin k'nci süperdiagonalinden başlayarak üst üçgenini döndürür.

Örnekler

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)

Bir matrisin üst üçgeni, bu süreçte M'yi üzerine yazar. Ayrıca bkz. triu.

source
triu!(M, k::Integer)

M matrisinin k'nci süperdiagonalinden başlayarak üst üçgenini döndürür ve bu süreçte M'yi üzerine yazar.

Örnekler

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)

Bir matrisin alt üçgeni.

Örnekler

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'nci üst diyagonalden başlayarak M'nin alt üçgenini döndürür.

Örnekler

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)

Bir matrisin alt üçgenini alır, bu süreçte M'yi üzerine yazar. Ayrıca bkz. tril.

source
tril!(M, k::Integer)

M matrisinin k'nci süperdiagonalinden başlayarak alt üçgenini döndürür ve bu süreçte M'yi üzerine yazar.

Örnekler

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

M matrisinin k'nci diyagonalinin indekslerini veren bir AbstractRange. İsteğe bağlı olarak, döndürülen aralığın türünü belirleyen bir indeks stili belirtilebilir. Eğer indstyle isa IndexLinear (varsayılan), bu bir AbstractRange{Integer} döndürür. Öte yandan, eğer indstyle isa IndexCartesian ise, bu bir AbstractRange{CartesianIndex{2}} döndürür.

Eğer k sağlanmazsa, 0 (ana diyagonal ile ilişkili) olduğu varsayılır.

Ayrıca bakınız: diag, diagm, Diagonal.

Örnekler

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

Bir IndexStyle belirtmek en az Julia 1.11 gerektirir.

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

Bir matrisin k'nci diyagonalını, bir vektör olarak.

Ayrıca bkz. diagm, diagind, Diagonal, isdiag.

Örnekler

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`'lerin diyagonal ve vektörlerden oluşan bir matris oluşturur. Vektör `kv.second`, `kv.first` diyagonalinde yer alacaktır. Varsayılan olarak matris kare olup boyutu `kv`'den çıkarılır, ancak `m,n`'yi ilk argümanlar olarak geçirerek dikdörtgen bir boyut `m`×`n` (gerekirse sıfırlarla doldurulmuş) belirtilebilir. Tekrar eden diyagonal indeksleri `kv.first` için, karşılık gelen vektörlerdeki `kv.second` değerleri toplanacaktır.

`diagm`, tam bir matris oluşturur; eğer hızlı aritmetik ile depolama verimli versiyonlar istiyorsanız, [`Diagonal`](@ref), [`Bidiagonal`](@ref) [`Tridiagonal`](@ref) ve [`SymTridiagonal`](@ref) bakın.

# Örnekler

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)

Bir matris oluşturur ve vektörün elemanlarını köşegen elemanlar olarak kullanır. Varsayılan olarak, matris kare olup boyutu length(v) ile belirlenir, ancak m,n ilk argümanlar olarak geçilerek dikdörtgen bir boyut m×n belirtilebilir.

Örnekler

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 faktorizasyonunun derecesini döndürür

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

S'nin sıralamasını, QR faktörizasyonunu hesaplayarak hesaplayın. tol'dan daha küçük değerler sıfır olarak kabul edilir. SPQR'nin kılavuzuna bakın.

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

Bir matrisin sayısal sırasını, svdvals(A) çıktılarından kaç tanesinin max(atol, rtol*σ₁) değerinden büyük olduğunu sayarak hesaplayın; burada σ₁, A'nın hesaplanan en büyük tekil değeridir. atol ve rtol sırasıyla mutlak ve göreli toleranslardır. Varsayılan göreli tolerans n*ϵ'dir; burada n, A'nın en küçük boyutunun boyutudur ve ϵ, A'nın eleman türünün eps değeridir.

Not

Sayısal sıra, eşik toleransı max(atol, rtol*σ₁)'ye yakın tekil değerlere sahip kötü koşullu matrislerin hassas ve belirsiz bir karakterizasyonu olabilir. Bu tür durumlarda, tekil değer hesaplamasına veya matrise yapılan küçük perturbasyonlar, rank sonucunu bir veya daha fazla tekil değeri eşik değerinin ötesine iterek değiştirebilir. Bu varyasyonlar, farklı Julia sürümleri, mimarileri, derleyicileri veya işletim sistemleri arasındaki kayan nokta hatalarındaki değişiklikler nedeniyle bile meydana gelebilir.

Julia 1.1

atol ve rtol anahtar argümanları en az Julia 1.1 gerektirir. Julia 1.0'da rtol bir pozisyonel argüman olarak mevcuttur, ancak bu Julia 2.0'da kullanımdan kaldırılacaktır.

Örnekler

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)

Herhangi bir sayılar (veya norm'un tanımlı olduğu herhangi bir eleman türü) içeren A adlı iterable konteyner için, A'yı ilgili uzunluktaki bir vektör gibi kabul ederek p-normunu (varsayılan olarak p=2) hesaplayın.

p-normu şu şekilde tanımlanır:

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

burada $a_i$ A'nın elemanları, $| a_i |$ a_i'nin norm değeri ve $n$ A'nın uzunluğudur. p-normu, A'nın elemanlarının norm değerleri kullanılarak hesaplandığı için, p != 2 olduğunda bir vektörler vektörünün p-normu, genel olarak bir blok vektör olarak yorumlanmasıyla uyumlu değildir.

p, herhangi bir sayısal değeri alabilir (her ne kadar tüm değerler matematiksel olarak geçerli bir vektör normu üretmese de). Özellikle, norm(A, Inf) abs.(A) içindeki en büyük değeri döndürürken, norm(A, -Inf) en küçük değeri döndürür. Eğer A bir matris ise ve p=2 ise, bu Frobenius normuna eşdeğerdir.

İkinci argüman p, norm arayüzünün bir parçası olmak zorunda değildir; yani, özel bir tür yalnızca norm(A)'yi ikinci argüman olmadan uygulayabilir.

Bir matrisin operatör normunu hesaplamak için opnorm kullanın.

Örnekler

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)

Sayılar için, $\left( |x|^p \right)^{1/p}$ değerini döndür.

Örnekler

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)

Vektör p-normu tarafından indüklenen operatör normunu (veya matris normunu) hesaplayın; burada geçerli p değerleri 1, 2 veya Inf'dir. (Seyrek matrisler için, p=2 şu anda uygulanmamıştır.) Frobenius normunu hesaplamak için norm kullanın.

p=1 olduğunda, operatör normu A'nın maksimum mutlak sütun toplamıdır:

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

burada $a_{ij}$, $A$'nın elemanlarıdır ve $m$ ile $n$ onun boyutlarıdır.

p=2 olduğunda, operatör normu spektral normdur ve A'nın en büyük tekil değerine eşittir.

p=Inf olduğunda, operatör normu A'nın maksimum mutlak satır toplamıdır:

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

Örnekler

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)

Sayılar için, $\left( |x|^p \right)^{1/p}$ değerini döndür. Bu, norm ile eşdeğerdir.

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

Adjoint/Transpose ile sarılmış vektörler için, A'nın operatör $q$-normunu döndürün; bu, p-normu ile p = q/(q-1) değeri ile eşdeğerdir. p = q = 2 olduğunda örtüşürler. A'nın bir vektör olarak p normunu hesaplamak için norm kullanın.

Bir vektör uzayı ile onun ikili arasındaki norm farkı, ikilik ve nokta çarpımı arasındaki ilişkiyi korumak için ortaya çıkar ve sonuç, 1 × n matrisinin operatör p-normu ile tutarlıdır.

Örnekler

julia> v = [1; im];

julia> vc = v';

julia> opnorm(vc, 1)
1.0

julia> norm(vc, 1)
2.0

julia> norm(v, 1)
2.0

julia> opnorm(vc, 2)
1.4142135623730951

julia> norm(vc, 2)
1.4142135623730951

julia> norm(v, 2)
1.4142135623730951

julia> opnorm(vc, Inf)
2.0

julia> norm(vc, Inf)
1.0

julia> norm(v, Inf)
1.0
source
LinearAlgebra.normalizeFunction
normalize(a, p::Gerçek=2)

a'yı p-normunun birim olmasını sağlayacak şekilde normalize et, yani norm(a, p) == 1. Skalarlar için bu, sign(a)'ya benzer, ancak normalize(0) = NaN'dir. Ayrıca normalize!, norm ve sign ile de bakabilirsiniz.

Örnekler

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::Gerçek=2)

Matris M'nin koşul sayısı, p-norm operatörü kullanılarak hesaplanır. p için geçerli değerler 1, 2 (varsayılan) veya Inf'dir.

source
LinearAlgebra.condskeelFunction
condskeel(M, [x, p::Gerçek=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}\]

Matris M'nin Skeel koşul sayısı $\kappa_S$, isteğe bağlı olarak x vektörüne göre, p-norm operatörü kullanılarak hesaplanır. $\left\vert M \right\vert$, $M$'nin (eleman bazında) mutlak değerler matrisini ifade eder; $\left\vert M \right\vert_{ij} = \left\vert M_{ij} \right\vert$. p için geçerli değerler 1, 2 ve Inf'dir (varsayılan).

Bu miktar, literatürde Bauer koşul sayısı, göreceli koşul sayısı veya bileşen bazında göreceli koşul sayısı olarak da bilinir.

source
LinearAlgebra.trFunction
tr(M)

Matris izini. M'nin köşe elemanlarını toplar.

Örnekler

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

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

Matris determinantının logaritması. log(det(M)) ile eşdeğerdir, ancak daha fazla doğruluk sağlayabilir ve taşma/azalma sorunlarını önleyebilir.

Örnekler

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)

Matris determinantının mutlak değerinin logaritması. (log(abs(det(M))), sign(det(M))) ile eşdeğerdir, ancak daha fazla doğruluk ve/veya hız sağlayabilir.

Örnekler

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)

Matrisin tersi. M * N = I eşitliğini sağlayan N matrisini hesaplar; burada I birim matristir. Sol bölme N = M \ I çözülerek hesaplanır.

Örnekler

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 pseudoinversini hesaplar.

M matrisleri için, kayan nokta elemanları ile, pseudoinversi yalnızca max(atol, rtol*σ₁) değerinden büyük olan tekil değerleri ters çevirerek hesaplamak uygundur; burada σ₁, M'nin en büyük tekil değeridir.

Kesinlik (atol) ve göreceli tolerans (rtol) için en iyi seçim, hem M'nin değeri hem de pseudoinversin amaçlanan uygulaması ile değişir. Varsayılan göreceli tolerans n*ϵ'dir; burada n, M'nin en küçük boyutunun boyutudur ve ϵ, M'nin eleman türünün eps değeridir.

Yoğun, kötü koşullu matrisleri en küçük kareler anlamında ters çevirmek için rtol = sqrt(eps(real(float(oneunit(eltype(M)))))) önerilir.

Daha fazla bilgi için bkz. [issue8859], [B96], [S84], [KY88].

Örnekler

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) # Julia 2.0'da kullanılmayacak

`M`'nin nullspace'inin bir tabanını, `M`'nin en büyük singular değeri `σ₁` için `max(atol, rtol*σ₁)` değerinden daha küçük büyüklüğe sahip singular vektörlerini dahil ederek hesaplar.

Varsayılan olarak, göreceli tolerans `rtol`, `M`'nin en küçük boyutunun büyüklüğü `n` ve `M`'nin eleman tipinin [`eps`](@ref) ile `ϵ`'dir.

# Örnekler

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

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

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

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

source
Base.kronFunction
kron(A, B)

İki vektörün, matrisin veya sayının Kronecker çarpımını hesaplar.

Gerçek vektörler v ve w için, Kronecker çarpımı dış çarpımla kron(v,w) == vec(w * transpose(v)) veya w * transpose(v) == reshape(kron(v,w), (length(w), length(v))) ile ilişkilidir. Bu ifadelerin sol ve sağ tarafındaki v ve w sıralamasının nasıl farklılık gösterdiğine dikkat edin (sütun-birincil depolama nedeniyle). Karmaşık vektörler için, dış çarpım w * v' de v'nin karmaşık eşleniği ile farklılık gösterir.

Örnekler

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)

A ve B'nin Kronecker çarpımını hesaplar ve sonucu C'ye yazarak C'nin mevcut içeriğini üzerine yazar. Bu, kron fonksiyonunun yerinde versiyonudur.

Julia 1.6

Bu fonksiyon Julia 1.6 veya daha yenisini gerektirir.

source
Base.expMethod
exp(A::AbstractMatrix)

A matrisinin üstelini hesaplayın, tanımıyla

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

Simetrik veya Hermit A için, bir özdeğişim (eigen) kullanılır, aksi takdirde ölçekleme ve kareleme algoritması seçilir (bkz. [H05]).

Örnekler

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)

Kare matris A için exp(im*A)'nın daha verimli bir yöntemi (özellikle A Hermitian veya gerçek Simetrik ise).

Ayrıca bkz. cispi, sincos, exp.

Julia 1.7

Matrislerle cis kullanma desteği Julia 1.7'de eklendi.

Örnekler

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

Matris kuvveti, $\exp(p\log(A))$ ile eşdeğerdir.

Örnekler

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

Matris üstel, $\exp(\log(b)A)$ ile eşdeğerdir.

Julia 1.1

Irrational sayıları (örneğin ) bir matrise yükseltme desteği Julia 1.1'de eklendi.

Örnekler

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)

Eğer A negatif gerçek özdeğere sahip değilse, A'nın ana matris logaritmasını hesaplayın, yani $e^X = A$ ve $-\pi < Im(\lambda) < \pi$ koşulunu sağlayan, X matrisinin benzersiz matrisini hesaplayın; burada X'in tüm özdeğerleri $\lambda$'dır. Eğer A'nın negatif veya sıfır özdeğerleri varsa, mümkün olduğunda bir ana olmayan matris fonksiyonu döndürülür.

Eğer A simetrik veya Hermit ise, özdeğişimi (eigen) kullanılır, eğer A üçgen bir matris ise, ters ölçekleme ve kare alma yönteminin geliştirilmiş bir versiyonu uygulanır (bkz. [AH12] ve [AHR13]). Eğer A negatif özdeğere sahip olmayan gerçek bir matris ise, gerçek Schur formu hesaplanır. Aksi takdirde, karmaşık Schur formu hesaplanır. Daha sonra, [AHR13]’teki üst (kuazi-) üçgen algoritması, üst (kuazi-) üçgen faktör üzerinde kullanılır.

Örnekler

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

Sonuç $\sqrt{x}$.

Negatif Real argümanlar için DomainError fırlatır. Bunun yerine karmaşık negatif argümanlar kullanın. sqrt'ın negatif reel eksen boyunca bir dal kesimi olduğunu unutmayın.

Önek operatör , sqrt ile eşdeğerdir.

Ayrıca bkz: hypot.

Örnekler

julia> sqrt(big(81))
9.0

julia> sqrt(big(-81))
HATA: -81.0 ile DomainError:
NaN girişi için NaN olmayan sonuç.
Stacktrace:
 [1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]

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

julia> sqrt(-81 - 0.0im)  # -0.0im dal kesiminin altında
0.0 - 9.0im

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

Eğer A negatif gerçek özdeğerlere sahip değilse, A'nın ana matris karekökünü hesaplayın, yani $X^2 = A$ olacak şekilde pozitif gerçek parçaya sahip özdeğerlere sahip olan benzersiz matris. Aksi takdirde, bir nonprincipal karekök döndürülür.

Eğer A gerçek-simetrik veya Hermit ise, karekökü hesaplamak için özdeğerlendirmesi (eigen) kullanılır. Bu tür matrisler için, yuvarlama hataları nedeniyle hafif negatif görünen özdeğerler sıfırmış gibi kabul edilir. Daha kesin olarak, tüm özdeğerleri ≥ -rtol*(max |λ|) olan matrisler yarı belirli olarak kabul edilir (Hermit karekökü verir), negatif özdeğerler sıfır olarak alınır. rtol, sqrt'a (sadece Hermit/gerçek-simetrik durumda) varsayılan olarak size(A,1) ile ölçeklendirilmiş makine hassasiyeti olan bir anahtar argümandır.

Aksi takdirde, karekök, karmaşık Schur formunu (schur) hesaplayan ve ardından üçgen faktörün karmaşık karekökünü hesaplayan Björck-Hammarling yöntemi ile belirlenir. Eğer gerçek bir karekök varsa, bu yöntemin [H87] gerçek Schur formunu hesaplayan ve ardından quasi-üçgen faktörün gerçek karekökünü hesaplayan bir uzantısı kullanılır.

Örnekler

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

Gerçek değerli bir matris A'nın gerçek değerli küp kökünü hesaplar. Eğer T = cbrt(A) ise, o zaman T*T*T ≈ A olur, aşağıda verilen örneğe bakınız.

Eğer A simetrikse, yani HermOrSym{<:Real} türündeyse, o zaman (eigen) küp kökü bulmak için kullanılır. Aksi takdirde, küp kökünü hesaplamak için gerçek değerli Schur ayrıştırmasını (schur) kullanan p-inci kök algoritmasının özel bir versiyonu [S03] kullanılmaktadır.

Örnekler

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)

Kare matris A'nın matris kosinüsünü hesaplar.

Eğer A simetrik veya Hermit ise, kosinüsü hesaplamak için özdekompozisyonu (eigen) kullanılır. Aksi takdirde, kosinüs exp çağrılarak belirlenir.

Örnekler

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)

Kare matris A'nın matris sinüsünü hesaplar.

Eğer A simetrik veya Hermit ise, sinüs hesaplamak için özdekompozisyonu (eigen) kullanılır. Aksi takdirde, sinüs exp çağrılarak belirlenir.

Örnekler

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)

Bir kare matris A için matris sinüs ve kosinüsünü hesaplar.

Örnekler

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)

Bir kare matris Anın matris tanjantını hesaplar.

Eğer A simetrik veya Hermit ise, tanjantı hesaplamak için özdeğişim (eigen) kullanılır. Aksi takdirde, tanjant exp çağrılarak belirlenir.

Örnekler

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)

Kare matris A'nın matris sekantını hesaplar.

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

Kare matris A'nın matris koskecantını hesaplar.

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

Kare matris A'nın kotanjantını hesaplar.

source
Base.coshMethod
cosh(A::AbstractMatrix)

Bir kare matris A'nın matris hiperbolik kosinüsünü hesaplar.

source
Base.sinhMethod
sinh(A::AbstractMatrix)

Bir kare matris A'nın matris hiperbolik sinüsünü hesaplar.

source
Base.tanhMethod
tanh(A::AbstractMatrix)

Bir kare matris A'nın matris hiperbolik tanjantını hesaplar.

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

Kare matris A'nın hiperbolik secantını hesaplar.

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

Kare matris A'nın hiperbolik cosecant'ını hesaplar.

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

Kare matris A'nın hiperbolik kotanjantını hesaplar.

source
Base.acosMethod
acos(A::AbstractMatrix)

Bir kare matris A'nın ters matris kosinüsünü hesaplar.

Eğer A simetrik veya Hermit ise, ters kosinüs hesaplamak için özdeğişim (eigen) kullanılır. Aksi takdirde, ters kosinüs log ve sqrt kullanılarak belirlenir. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_1].

Örnekler

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)

Bir kare matris A'nın ters matris sinüsünü hesaplar.

Eğer A simetrik veya Hermit ise, ters sinüs hesaplamak için özdekompozisyon (eigen) kullanılır. Aksi takdirde, ters sinüs log ve sqrt kullanılarak belirlenir. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_2].

Örnekler

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)

Bir kare matris A'nın ters matris tanjantını hesaplar.

Eğer A simetrik veya Hermit ise, ters tanjantı hesaplamak için özdeğişim (eigen) kullanılır. Aksi takdirde, ters tanjant log kullanılarak belirlenir. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_3].

Örnekler

julia> atan(tan([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5+1.38778e-17im  0.1-2.77556e-17im
 -0.2+6.93889e-17im  0.3-4.16334e-17im
source
Base.Math.acscMethod
acsc(A::AbstractMatrix)

A matrisinin ters matris kosekanti hesaplanır.

source
Base.acoshMethod
acosh(A::AbstractMatrix)

Bir kare matris A için ters hiperbolik matris kosinüsünü hesaplar. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_4].

source
Base.asinhMethod
asinh(A::AbstractMatrix)

Bir kare matris A için ters hiperbolik matris sinüsünü hesaplar. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_5].

source
Base.atanhMethod
atanh(A::AbstractMatrix)

Bir kare matris A için ters hiperbolik matris tanjantını hesaplar. Bu fonksiyonu hesaplamak için kullanılan teori ve logaritmik formüller için bkz. [AH16_6].

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

A'nın ters matris hiperbolik sekantını hesaplar.

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

A'n ters matris hiperbolik kosinüsünü hesaplar.

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

A'nın ters matris hiperbolik kotanjantını hesaplar.

source
LinearAlgebra.lyapFunction
lyap(A, C)

Sürekli Lyapunov denklemi AX + XA' + C = 0 için X çözümünü hesaplar; burada A'nın hiçbir özdeğeri sıfır reel parçaya sahip değildir ve iki özdeğeri birbirinin negatif karmaşık eşleniği değildir.

Örnekler

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)

Sylvester denklemi AX + XB + C = 0 için çözüm X'i hesaplar; burada A, B ve C uyumlu boyutlara sahiptir ve A ile -B'nin eşit gerçek parçaya sahip özdeğerleri yoktur.

Örnekler

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)

Bir matrisin faktorizasyonunun başarılı olup olmadığını test eder.

Julia 1.6

issuccess(::CholeskyPivoted) Julia 1.6 veya daha yenisini gerektirir.

Örnekler

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

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

Bir matrisin LU faktörizasyonunun başarılı olup olmadığını test eder. Varsayılan olarak, geçerli ancak sıralı eksik U faktörü üreten bir faktörizasyon başarısız olarak kabul edilir. Bu, allowsingular = true geçerek değiştirilebilir.

Julia 1.11

allowsingular anahtar argümanı Julia 1.11'de eklendi.

Örnekler

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

Bir matrisin simetrik olup olmadığını test eder.

Örnekler

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

Bir matrisin pozitif tanımlı (ve Hermit) olup olmadığını A'nın Cholesky faktörizasyonunu gerçekleştirmeye çalışarak test eder.

Ayrıca bkz. isposdef!, cholesky.

Örnekler

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

Bir matrisin pozitif tanımlı (ve Hermit) olup olmadığını, A üzerinde Cholesky faktörizasyonu yapmaya çalışarak test eder, bu süreçte A'yı üzerine yazar. Ayrıca isposdef bakınız.

Örnekler

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

A'nın k'nci süperdiagonalden itibaren alt üçgensel olup olmadığını test eder.

Örnekler

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

A'n k'nci süperdiagonalından başlayarak üst üçgen olup olmadığını test edin.

Örnekler

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

Bir matrisin, iszero(A[i,j]) ifadesinin i == j olmadığı sürece doğru olduğu anlamında diyagonal olup olmadığını test eder. A'nın kare olması gerekmez; eğer bunu da kontrol etmek istiyorsanız, size(A, 1) == size(A, 2) kontrolünü yapmanız gerekir.

Örnekler

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

Bir matrisin Hermit olup olmadığını test eder.

Örnekler

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)

Tembel transpoze. Döndürülen nesnenin değiştirilmesi, A'yı uygun şekilde değiştirmelidir. Genellikle, ama her zaman değil, Transpose(A) verir; burada Transpose, tembel bir transpoze sarmalayıcıdır. Bu işlemin özyinelemeli olduğunu unutmayın.

Bu işlem, lineer cebir kullanımı için tasarlanmıştır - genel veri manipülasyonu için permutedims bakın, bu özyinelemeli değildir.

Örnekler

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 # bir transpozenin transpozu üst nesneyi açar
true

julia> Transpose(B) # ancak, yapıcı her zaman argümanını sarar
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # B'yi değiştirmek A'yı otomatik olarak değiştirecektir

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

Karmaşık matrisler için adjoint işlemi, bir konjugat-transpoze ile eşdeğerdir.

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

Bir AbstractVector'ın transpose'u bir satır vektörüdür:

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

julia> transpose(v) # bir satır vektörü döndürür
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia> transpose(v) * v # nokta çarpımını hesapla
14

Matrislerden oluşan bir matris için, bireysel bloklar özyinelemeli olarak işlenir:

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

julia> D = reshape([C, 2C, 3C, 4C], 2, 2) # bir blok matris oluştur
2×2 Matrix{Matrix{Int64}}:
 [1 3; 2 4]  [3 9; 6 12]
 [2 6; 4 8]  [4 12; 8 16]

julia> transpose(D) # bloklar özyinelemeli olarak transpoze edilir
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 faktorizasyonunun tembel transpozunu döndürür. Varsayılan olarak, gerçek eltype'a sahip Factorization'lar hariç, bir TransposeFactorization döndürür; bu durumda bir AdjointFactorization döndürür.

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

Matris A'yı transpoze eder ve sonucu X matrisine kaydeder. size(X) değeri size(transpose(A)) ile eşit olmalıdır. Gerekirse yalnızca X'in rowval ve nzval'ını yeniden boyutlandırmak dışında ek bellek tahsis edilmez.

halfperm!'e bakınız.

source
transpose!(dest,src)

Dizi src'yi transpoze edin ve sonucu önceden tahsis edilmiş dest dizisine kaydedin; bu dizinin boyutu (size(src,2),size(src,1)) ile uyumlu olmalıdır. Yerinde transpozisyon desteklenmez ve src ile dest'in örtüşen bellek bölgeleri varsa beklenmedik sonuçlar ortaya çıkabilir.

Örnekler

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
Transpoze

Temel lineer cebir nesnesinin, genellikle bir AbstractVector/AbstractMatrix'in transpoze görünümü için tembel bir sarmalayıcı türü. Genellikle, Transpose yapıcısı doğrudan çağrılmamalıdır, bunun yerine transpose kullanın. Görünümü somutlaştırmak için copy kullanın.

Bu tür, lineer cebir kullanımı için tasarlanmıştır - genel veri manipülasyonu için permutedims kullanın.

Örnekler

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)

Tembel adjoint (karmaşık transpozisyon). adjoint'in elemanlara özyinelemeli olarak uygulandığını unutmayın.

Sayı türleri için adjoint, karmaşık eşleniği döndürür ve bu nedenle gerçek sayılar için kimlik fonksiyonu ile eşdeğerdir.

Bu işlem, lineer cebir kullanımı için tasarlanmıştır - genel veri manipülasyonu için permutedims bakın.

Örnekler

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

julia> B = A' # eşdeğer olarak 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 # bir adjoint'in adjoint'i üst öğeyi açar
true

julia> Adjoint(B) # ancak, yapıcı her zaman argümanını sarar
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'yi değiştirmek A'yı otomatik olarak değiştirir

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

Gerçek matrisler için adjoint işlemi, bir transpose ile eşdeğerdir.

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

Bir AbstractVector'ın adjoint'i bir satır vektörüdür:

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 # nokta çarpımını hesapla, eşdeğer olarak x' * x
25 + 0im

Matrislerin matrisleri için, bireysel bloklar özyinelemeli olarak işlenir:

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)

Faktorizasyon F'nin tembel adjoint'u. Varsayılan olarak, bir AdjointFactorization sarmalayıcı döner.

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

Matris A'nın transpozunu alır ve X matrisindeki elemanların adjoint'ini depolar. size(X) değeri size(transpose(A)) ile eşit olmalıdır. X'in rowval ve nzval'ını yeniden boyutlandırmak gerekirse, başka bir bellek tahsisi yapılmaz.

halfperm!'e bakınız.

source
adjoint!(dest,src)

Karmaşık transpoze dizisi src'yi alır ve sonucu önceden tahsis edilmiş dest dizisine kaydeder; bu dizinin boyutu (size(src,2),size(src,1)) ile uyumlu olmalıdır. Yerinde transpozisyon desteklenmez ve src ile dest'in örtüşen bellek bölgeleri varsa beklenmedik sonuçlar ortaya çıkabilir.

Örnekler

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

Temel lineer cebir nesnesinin, genellikle bir AbstractVector/AbstractMatrix olan, adjoint görünümünün tembel sarmalayıcı türü. Genellikle, Adjoint yapıcısı doğrudan çağrılmamalıdır, bunun yerine adjoint kullanın. Görünümü somutlaştırmak için copy kullanın.

Bu tür, lineer cebir kullanımı için tasarlanmıştır - genel veri manipülasyonu için permutedims kullanın.

Örnekler

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)

Tembel matris transpozu/adjoint'ını hevesle değerlendirir. Transpozisyonun elemanlara özyinelemeli olarak uygulandığını unutmayın.

Bu işlem, lineer cebir kullanımı için tasarlanmıştır - genel veri manipülasyonu için permutedims bakın, bu özyinelemeli değildir.

Örnekler

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

Başka bir deyişle, eleman boyutu cinsinden boyut 1'deki ardışık dizi elemanları arasındaki mesafeyi döndürür.

Örnekler

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)

Bir matrisin kare olup olmadığını kontrol edin, ardından ortak boyutunu döndürün. Birden fazla argüman için, bir vektör döndürün.

Örnekler

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, bilgisayarın tepe flop oranını, çift hassasiyet gemm! kullanarak hesaplar. Varsayılan olarak, eğer hiçbir argüman belirtilmemişse, n x n boyutunda iki Float64 matrisini çarpar; burada n = 4096'dır. Temel BLAS çoklu iş parçacığı kullanıyorsa, daha yüksek flop oranları elde edilir. BLAS iş parçacığı sayısı BLAS.set_num_threads(n) ile ayarlanabilir.

Eğer eltype anahtar kelime argümanı sağlanırsa, peakflops, tepe flop oranını hesaplamak için eltype türünde elemanlara sahip matrisler oluşturur.

Varsayılan olarak, peakflops, 3 denemeden en iyi zamanlamayı kullanır. Eğer ntrials anahtar kelime argümanı sağlanırsa, peakflops, en iyi zamanlamayı seçmek için belirtilen kadar deneme yapar.

Eğer parallel anahtar kelime argümanı true olarak ayarlanırsa, peakflops, tüm işçi işlemcilerinde paralel olarak çalıştırılır. Tüm paralel bilgisayarın flop oranı döndürülür. Paralel çalışırken yalnızca 1 BLAS iş parçacığı kullanılır. n argümanı, her işlemcide çözülen problemin boyutunu ifade etmeye devam eder.

Julia 1.1

Bu fonksiyon en az Julia 1.1 gerektirir. Julia 1.0'da standart kütüphane InteractiveUtils'dan mevcuttur.

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

Kare matris A'nın Hermit kısmını döndürür; bu, (A + A') / 2 olarak tanımlanır ve bir Hermitian matrisidir. Gerçek matrisler A için bu, A'nın simetrik kısmı olarak da bilinir; bazen "operatör gerçek kısmı" olarak da adlandırılır. İsteğe bağlı uplo argümanı, Hermitian görünümünün karşılık gelen argümanını kontrol eder. Gerçek matrisler için, bu sonuncusu bir Symmetric görünümüne eşdeğerdir.

Ayrıca, karşılık gelen yerinde işlem için hermitianpart! fonksiyonuna da bakın.

Julia 1.10

Bu fonksiyon Julia 1.10 veya daha yenisini gerektirir.

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

Kare matris A'yı yerinde Hermit kısmı (A + A') / 2 ile üzerine yazın ve Hermitian(A, uplo) döndürün. Gerçek matrisler A için bu, A'nın simetrik kısmı olarak da bilinir.

Ayrıca hermitianpart ile ilgili yer dışı işlemi için bakın.

Julia 1.10

Bu fonksiyon Julia 1.10 veya daha yenisini gerektirir.

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

Matris A'nın elemanlarını B'ye adjunction ile aşağıdaki gibi verimli bir şekilde kopyalayın:

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

B[ir_dest, jr_dest] elemanları üzerine yazılır. Ayrıca, indeks aralığı parametreleri length(ir_dest) == length(jr_src) ve length(jr_dest) == length(ir_src) koşulunu sağlamalıdır.

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

Matris A'nın elemanlarını B'ye transpoze ederek verimli bir şekilde kopyalayın:

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

B[ir_dest, jr_dest] elemanları üzerine yazılır. Ayrıca, indeks aralığı parametreleri length(ir_dest) == length(jr_src) ve length(jr_dest) == length(ir_src) koşulunu sağlamalıdır.

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

Matris M'nin elemanlarını B'ye, karakter parametresi tM'ye bağlı olarak verimli bir şekilde kopyalayın:

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

Elemanlar B[ir_dest, jr_dest] üzerine yazılır. Ayrıca, indeks aralığı parametreleri length(ir_dest) == length(jr_src) ve length(jr_dest) == length(ir_src) koşulunu sağlamalıdır.

Ayrıca copyto! ve copy_adjoint! ile de bakabilirsiniz.

source

Low-level matrix operations

Birçok durumda, önceden tahsis edilmiş bir çıktı vektörü veya matris sağlayarak yerinde matris işlemleri yapmanıza olanak tanıyan yerinde sürümleri vardır. Bu, tekrar eden tahsislerin aşamasını önlemek için kritik kodu optimize ederken faydalıdır. Bu yerinde işlemler, aşağıda ! ile sonlandırılmıştır (örneğin, mul!), bu da alışılmış Julia geleneğine göre yapılmıştır.

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

Matris-matris veya matris-vektör çarpımını $A B$ hesaplar ve sonucu Y'de saklar, mevcut Y değerini geçersiz kılar. Y'nin A veya B ile aynı referansı taşımaması gerektiğini unutmayın.

Örnekler

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

Uygulama

Özel matris ve vektör türleri için, mümkünse 3-argümanlı mul!'yi doğrudan uygulamak yerine 5-argümanlı mul!'yi uygulamanız önerilir.

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

Birleştirilmiş yerinde matris-matris veya matris-vektör çarpma-toplama $A B α + C β$. Sonuç C'de saklanır ve üzerine yazılır. C'nin A veya B ile aynı olmaması gerektiğini unutmayın.

Julia 1.3

Beş argümanlı mul! en az Julia 1.3 gerektirir.

Örnekler

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'nin orijinal değerinin bir kopyası

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

Bir diziyi B bir skalar a ile ölçeklendirir ve B'yi yerinde günceller. Skaların sağdan çarpılması için rmul! kullanın. Ölçeklendirme işlemi, a ile B'nin bir elemanı arasındaki çarpmanın * anlamlarını dikkate alır. Özellikle, bu durum NaN ve ±Inf gibi sonlu olmayan sayılarla çarpma işlemlerine de uygulanır.

Julia 1.1

Julia 1.1'den önce, B'deki NaN ve ±Inf girişleri tutarsız bir şekilde ele alınıyordu.

Örnekler

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)

Matris-matris çarpımını $AB$ hesaplayın, B'yi üzerine yazarak sonucu döndürün. Burada, A özel matris türünde olmalıdır, örneğin, Diagonal, UpperTriangular veya LowerTriangular gibi, ya da bazı ortogonal türlerde, bkz. QR.

Örnekler

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)

Bir diziyi A bir skalar b ile ölçeklendirir ve A'yı yerinde yazar. Skaların soldan çarpılması için lmul! kullanın. Ölçekleme işlemi, A'nın bir elemanı ile b arasındaki çarpma * anlamlarını dikkate alır. Özellikle, bu durum NaN ve ±Inf gibi sonlu olmayan sayılarla çarpma işlemlerine de uygulanır.

Julia 1.1

Julia 1.1'den önce, A'daki NaN ve ±Inf girişleri tutarsız bir şekilde ele alınıyordu.

Örnekler

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)

Matris-matris çarpımını $AB$ hesaplayın, A'yı üzerine yazarak sonucu döndürün. Burada, B özel matris türünde olmalıdır, örneğin, Diagonal, UpperTriangular veya LowerTriangular gibi, ya da bazı ortogonal türlerde, bkz. QR.

Örnekler

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 işlemini yerinde hesaplayın ve sonucu Y'ye kaydedin, sonucu döndürün.

A argümanı matris olmamalıdır. Bunun yerine, matrisler yerine bir faktorizasyon nesnesi olmalıdır (örneğin, factorize veya cholesky ile üretilmiş). Bunun nedeni, faktorizasyonun hem maliyetli olması hem de genellikle bellek ayırmasıdır (ancak, örneğin, lu! ile yerinde de yapılabilir) ve ldiv!'ı gerektiren performans kritik durumlar genellikle A'nın faktorizasyonu üzerinde ince ayar kontrolü gerektirir.

Not

Diagonal ve UpperTriangular gibi belirli yapılandırılmış matris türlerine izin verilmektedir, çünkü bunlar zaten faktörize edilmiş bir formdadır.

Örnekler

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'yi yerinde hesaplayarak B'yi sonuçla günceller.

A argümanı matris olmamalıdır. Bunun yerine, matrisler yerine bir faktorizasyon nesnesi olmalıdır (örneğin, factorize veya cholesky ile üretilmiş). Bunun nedeni, faktorizasyonun hem pahalı olması hem de genellikle bellek ayırmasıdır (ancak, örneğin, lu! ile yerinde de yapılabilir) ve ldiv!'i gerektiren performans kritik durumlar genellikle A'nın faktorizasyonu üzerinde ince ayar kontrolü gerektirir.

Not

Diagonal ve UpperTriangular gibi belirli yapılandırılmış matris türlerine izin verilmektedir, çünkü bunlar zaten faktörize edilmiş bir formdadır.

Örnekler

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)

Bir dizi B'deki her bir girişi bir skalar a ile bölerek B'yi yerinde günceller. Sağdan skalar bölmek için rdiv! kullanın.

Örnekler

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 işlemini, kısmi pivotlama ile Gauss eliminasyonu kullanarak yerinde hesaplayın ve sonucu B'ye kaydedin, sonucu döndürün. Bu süreçte, A'nın diyagonal elemanları da üzerine yazılır.

Julia 1.11

Tridiagonal sol tarafları için ldiv!, en az Julia 1.11 gerektirir.

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

A / B işlemini yerinde hesaplar ve sonucu saklamak için A'yı günceller.

B argümanı bir matris olmamalıdır. Bunun yerine, matrisler yerine bir faktorizasyon nesnesi (örneğin, factorize veya cholesky ile üretilmiş) olmalıdır. Bunun nedeni, faktorizasyonun hem pahalı olması hem de genellikle bellek ayırmasıdır (ancak, örneğin, lu! aracılığıyla yerinde de yapılabilir) ve rdiv! gerektiren performans kritik durumlar genellikle B'nin faktorizasyonu üzerinde ince ayar kontrolü gerektirir.

Not

Diagonal ve UpperTriangular gibi belirli yapılandırılmış matris türlerine izin verilmektedir, çünkü bunlar zaten faktörize edilmiş bir formdadır.

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

Bir dizideki her bir girişi bir skalar b ile bölerek A'yı yerinde günceller. Soldan skalar bölmek için ldiv! kullanın.

Örnekler

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 (bilimsel hesaplamanın çoğunda olduğu gibi), yoğun lineer cebir işlemleri LAPACK library üzerine kuruludur; bu da temel lineer cebir yapı taşları olarak bilinen BLAS üzerine inşa edilmiştir. Her bilgisayar mimarisi için mevcut olan yüksek optimize edilmiş BLAS uygulamaları vardır ve bazen yüksek performanslı lineer cebir rutinlerinde BLAS fonksiyonlarını doğrudan çağırmak faydalı olabilir.

LinearAlgebra.BLAS, bazı BLAS fonksiyonları için sarmalayıcılar sağlar. Girdi dizilerinden birini değiştiren BLAS fonksiyonlarının isimleri '!' ile biter. Genellikle, bir BLAS fonksiyonunun Float32, Float64, ComplexF32 ve ComplexF64 dizileri için dört yöntemi tanımlanmıştır.

BLAS character arguments

Birçok BLAS fonksiyonu, bir argümanın transpoze edilip edilmeyeceğini belirleyen (trans), bir matrisin hangi üçgeninin referans alınacağını (uplo veya ul), bir üçgen matrisin köşegeninin hepsinin bir olduğu varsayımının yapılıp yapılamayacağını (dA) veya bir matris çarpımında girdi argümanının hangi tarafta yer aldığını (side) belirleyen argümanlar kabul eder. Olasılıklar şunlardır:

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 kütüphanesinin kullanacağı iş parçacığı sayısını n::Integer olarak ayarlayın.

Ayrıca nothing kabul eder, bu durumda julia varsayılan iş parçacığı sayısını tahmin etmeye çalışır. nothing geçmek önerilmez ve esasen tarihsel nedenlerle mevcuttur.

source

BLAS fonksiyonları, ilk olarak önerildikleri zamana, girdi parametrelerinin türüne ve işlemin karmaşıklığına bağlı olarak üç gruba, yani üç seviyeye ayrılabilir.

Level 1 BLAS functions

Seviye 1 BLAS fonksiyonları ilk olarak [(Lawson, 1979)][Lawson-1979] yılında önerilmiştir ve skalarlar ile vektörler arasındaki işlemleri tanımlar.

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

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

X'i c*X + s*Y ile ve Y'yi -conj(s)*X + c*Y ile ilk n elemanı incx adım aralığına sahip dizi X için ve ilk n elemanı incy adım aralığına sahip dizi Y için üst üste yazar. X ve Y'yi döner.

Julia 1.5

rot! en az Julia 1.5 gerektirir.

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

Dizinin ilk n elemanını incx adımıyla a*X ile değiştirmek için X'i üzerine yazar. X'i döndürür.

Eğer n ve incx sağlanmamışsa, length(X) ve stride(X,1) kullanılır.

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

Dizinin X ilk n elemanını a ile ölçeklendirir ve incx adım boyutunu kullanır.

Eğer n ve incx sağlanmamışsa, length(X) ve stride(X,1) kullanılır.

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

İki vektörün nokta çarpımı, incx adımıyla X dizisinin n elemanını ve incy adımıyla Y dizisinin n elemanını içerir.

Örnekler

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)

İki karmaşık vektör için nokta fonksiyonu, incx adımıyla X dizisinin n elemanını ve incy adımıyla Y dizisinin n elemanını içerir.

Örnekler

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)

İki karmaşık vektör için Dot fonksiyonu, incx adımıyla X dizisinin n elemanını ve incy adımıyla U dizisinin n elemanını alır, ilk vektörü konjuge eder.

Örnekler

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)

X dizisindeki n elemandan oluşan bir vektörün 2-normu, incx adımı ile.

Örnekler

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)

Dizi X'in ilk n elemanının büyüklüklerinin incx adımıyla toplamı.

Gerçek bir dizi için büyüklük, mutlak değerdir. Karmaşık bir dizi için büyüklük, gerçek kısmın mutlak değeri ile hayali kısmın mutlak değerinin toplamıdır.

Örnekler

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'nin maksimum mutlak değere sahip elemanının indeksini bulun. n, dx'nin uzunluğudur ve incx adım boyutudur. Eğer n ve incx sağlanmazsa, varsayılan değerler n=length(dx) ve incx=stride1(dx) olarak kabul edilir.

source

Level 2 BLAS functions

Seviye 2 BLAS fonksiyonları [(Dongarra, 1988)][Dongarra-1988] tarihinde yayımlandı ve matris-vektör işlemlerini tanımlar.

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

bir vektör döndür

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

Vektörü y'yi alpha*A*x + beta*y veya alpha*A'x + beta*y olarak günceller. tA ile ilgili olarak. alpha ve beta skalarlardır. Güncellenmiş y'yi döndür.

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

Vektörü y'yi alpha*A*x + beta*y veya alpha*A'*x + beta*y olarak güncelleyin, trans ile ilgili olarak. Matris A, kl alt-diagonal ve ku üst-diagonal ile m boyutunda ve size(A,2) boyutunda genel bir bant matristir. alpha ve beta skalarlardır. Güncellenmiş y'yi döndürün.

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

trans göre alpha*A*x veya alpha*A'*x döndürün. Matris A, kl alt-diagonal ve ku üst-diagonal ile m boyutunda ve size(A,2) boyutunda genel bir bant matrisidir ve alpha bir skalar.

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

Vektörü y'yi alpha*A*x + beta*y olarak güncelleyin. A'nın Hermitiyen olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır. alpha ve beta skalarlardır. Güncellenmiş y'yi döndürün.

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

alpha*A*x döner. A'nın Hermitian olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır. alpha bir skalar.

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

Vektörü y'yi α*A*x + β*y olarak güncelleyin, burada A paket formatında sağlanan bir Hermit matrisidir AP.

uplo = 'U' olduğunda, dizi AP, Hermit matrisinin üst üçgen kısmını sütun sütun paketlenmiş olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[1, 2] ve A[2, 2]'yi içerir ve devam eder.

uplo = 'L' olduğunda, dizi AP, Hermit matrisinin alt üçgen kısmını sütun sütun paketlenmiş olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[2, 1] ve A[3, 1]'i içerir ve devam eder.

Skalar girişler α ve β karmaşık veya reel sayılar olmalıdır.

Dizi girişleri x, y ve AP hepsi ComplexF32 veya ComplexF64 türünde olmalıdır.

Güncellenmiş y'yi döndürün.

Julia 1.5

hpmv! en az Julia 1.5 gerektirir.

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

Vektörü y'yi alpha*A*x + beta*y olarak güncelleyin. A'nın simetrik olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır. alpha ve beta skalarlardır. Güncellenmiş y'yi döndürün.

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

alpha*A*x döndür. A'nın simetrik olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır. alpha bir skalar.

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

Vektörü y'yi alpha*A*x + beta*y olarak güncelleyin; burada A, A argümanında saklanan k üst diyagonal ile size(A,2) boyutunda simetrik bir bant matristir. A için saklama düzeni, https://www.netlib.org/lapack/explore-html/ adresindeki referans BLAS modülünde açıklanmıştır. Sadece uplo üçgeni A'nın kullanılır.

Güncellenmiş y'yi döndürün.

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

alpha*A*x döndürür; burada A, A argümanında saklanan k üst-diagonal ile size(A,2) boyutunda bir simetrik bant matrisidir. Sadece uplo üçgeni kullanılır.

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

A*x döndürür; burada A, argüman A'da saklanan k üst-diagonal ile size(A,2) boyutunda bir simetrik bant matrisidir. Sadece uplo üçgeni kullanılır.

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

Vektörü y'yi α*A*x + β*y olarak güncelleyin, burada A paket formatında sağlanan simetrik bir matristir AP.

uplo = 'U' olduğunda, dizi AP, simetrik matrisin üst üçgen kısmını sütun sütun sıralı olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[1, 2] ve A[2, 2]'yi içerir ve devam eder.

uplo = 'L' olduğunda, dizi AP, simetrik matrisin alt üçgen kısmını sütun sütun sıralı olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[2, 1] ve A[3, 1]'yi içerir ve devam eder.

Skalar girişler α ve β gerçek olmalıdır.

Dizi girişleri x, y ve AP hepsi Float32 veya Float64 türünde olmalıdır.

Güncellenmiş y'yi döndürün.

Julia 1.5

spmv! en az Julia 1.5 gerektirir.

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

op(A)*b döndür, burada op, tA tarafından belirlenir. Sadece ul üçgeni A'nın kullanılır. dA köşegen değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler. Çarpma b üzerinde yerinde gerçekleşir.

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

op(A)*b döndür, burada op, tA tarafından belirlenir. Sadece ul üçgeni A'nın kullanılır. dA köşegen değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler.

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

A*x = b denkleminin çözümü veya tA ve ul tarafından belirlenen diğer iki varyanttan biri ile b'yi güncelleyin. dA köşegen değerlerinin okunup okunmadığını veya hepsinin bir olarak varsayıldığını belirler. Güncellenmiş b'yi döndürün.

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

A*x = b çözümünü veya tA ve ul tarafından belirlenen diğer iki varyanttan birini döndürür. dA köşegen değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler.

source

bir matris döndür

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

Sadece karmaşık diziler için yöntemler. Hermit matris A'nın sıralı güncellemesi alpha*x*x' + A ile vektör x kullanılarak yapılır. uplo A'nın hangi üçgeninin güncelleneceğini kontrol eder. A döner.

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

Simetrik matris A'nın sıralı güncellemesi alpha*x*transpose(x) + A ile x vektörü kullanılarak yapılır. uplo A'nın hangi üçgeninin güncelleneceğini kontrol eder. A döner.

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

Matris A'yı A+α*x*x' olarak güncelleyin, burada A paket formatında sağlanan simetrik bir matristir ve x bir vektördür.

uplo = 'U' olduğunda, dizi AP, simetrik matrisin üst üçgen kısmını sütun sütun sıralı olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[1, 2] ve A[2, 2]'yi içerir ve devam eder.

uplo = 'L' olduğunda, dizi AP, simetrik matrisin alt üçgen kısmını sütun sütun sıralı olarak içermelidir, böylece AP[1] A[1, 1]'i, AP[2] ve AP[3] sırasıyla A[2, 1] ve A[3, 1]'i içerir ve devam eder.

Skalar girdi α gerçek olmalıdır.

Dizi girdileri x ve AP tümü Float32 veya Float64 türünde olmalıdır. Güncellenmiş AP'yi döndürün.

Julia 1.8

spr! en az Julia 1.8 gerektirir.

source

Level 3 BLAS functions

Seviye 3 BLAS fonksiyonları [(Dongarra, 1990)][Dongarra-1990] tarihinde yayımlandı ve matris-matris işlemlerini tanımlar.

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

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

C'yi uplo tarafından belirtilen alt veya üst üçgen kısmını alpha*A*B + beta*C veya tA ve tB'ye göre diğer varyantlar olarak güncelleyin. Güncellenmiş C'yi döndürün.

Julia 1.11

gemmt! en az Julia 1.11 gerektirir.

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

A*B'nin alt veya üst üçgen kısmını uplo tarafından belirtilen şekilde döndürür veya tA ve tB'ye göre diğer üç varyantı döndürür.

Julia 1.11

gemmt en az Julia 1.11 gerektirir.

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

A*B'nin uplo ile belirtilen alt veya üst üçgen kısmını veya tA ve tB'ye göre diğer üç varyantı döndürür.

Julia 1.11

gemmt en az Julia 1.11 gerektirir.

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

C'yi alpha*A*B + beta*C veya tA ve tB'ye göre diğer üç varyantla güncelleyin. Güncellenmiş C'yi döndürün.

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

C'yi alpha*A*B + beta*C veya alpha*B*A + beta*C olarak güncelleyin, side'a göre. A'nın simetrik olduğu varsayılmaktadır. Sadece A'nın ul üçgeni kullanılır. Güncellenmiş C'yi döndürün.

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

alpha*A*B veya alpha*B*A döndürülür side'a göre. A'nın simetrik olduğu varsayılmaktadır. Sadece A'nın ul üçgeni kullanılır.

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

A*B veya B*A döndürülür, side parametresine göre. A'nın simetrik olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır.

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

C'yi alpha*A*B + beta*C veya alpha*B*A + beta*C olarak güncelleyin, bu side'a göre. A'nın Hermitian olduğu varsayılmaktadır. Sadece A'nın ul üçgeni kullanılır. Güncellenmiş C'yi döndürün.

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

alpha*A*B veya alpha*B*A döndürülür side'a göre. A'nın Hermitian olduğu varsayılmaktadır. Sadece A'nın ul üçgeni kullanılır.

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

A*B veya B*A döndürür, side parametresine göre. A'nın Hermitian olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır.

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

Simetrik matris C'nin sıralı-k güncellemesi alpha*A*transpose(A) + beta*C veya alpha*transpose(A)*A + beta*C olarak trans'e göre yapılır. Sadece uplo üçgeni C'de kullanılır. C döndürülür.

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

A'n üst üçgenini veya alt üçgenini, uplo 'ya göre, alpha*A*transpose(A) veya alpha*transpose(A)*A'yı, trans 'e göre döndürür.

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

Sadece karmaşık diziler için yöntemler. Hermit matris C'nin sıralı-k güncellemesi alpha*A*A' + beta*C veya alpha*A'*A + beta*C olarak trans'e göre yapılır. Sadece uplo üçgeni C'nin güncellenir. C döner.

source
LinearAlgebra.BLAS.herkFunction
herk(uplo, trans, alpha, A)

Sadece karmaşık diziler için yöntemler. trans parametresine göre alpha*A*A' veya alpha*A'*A'nın uplo üçgenini döndürür.

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

Simetrik matris C'nin rank-2k güncellemesi alpha*A*transpose(B) + alpha*B*transpose(A) + beta*C veya alpha*transpose(A)*B + alpha*transpose(B)*A + beta*C olarak trans'e göre yapılır. Sadece uplo üçgeni C'de kullanılır. C döner.

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

uplo üçgenini alpha*A*transpose(B) + alpha*B*transpose(A) veya alpha*transpose(A)*B + alpha*transpose(B)*A olarak döndürür, bu trans'a göre belirlenir. trans.

source
syr2k(uplo, trans, A, B)

uplo üçgenini A*transpose(B) + B*transpose(A) veya transpose(A)*B + transpose(B)*A olarak döndürür, trans parametresine göre.

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

Hermit matris C'nin Rank-2k güncellemesi alpha*A*B' + alpha*B*A' + beta*C veya alpha*A'*B + alpha*B'*A + beta*C olarak trans'e göre yapılır. Skalar beta gerçek olmalıdır. Sadece C'nin uplo üçgeni kullanılır. C döndürülür.

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

uplo üçgenini alpha*A*B' + alpha*B*A' veya alpha*A'*B + alpha*B'*A olarak döndürür, trans parametresine göre.

source
her2k(uplo, trans, A, B)

uplo üçgenini A*B' + B*A' veya A'*B + B'*A olarak döndürür, trans parametresine göre.

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

B'yi alpha*A*B veya side ve tA tarafından belirlenen diğer üç varyanttan biri ile güncelleyin. Sadece ul üçgeni A'nın kullanılır. dA köşegen değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler. Güncellenmiş B'yi döndürün.

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

alpha*A*B veya side ve tA tarafından belirlenen diğer üç varyanttan birini döndürün. Sadece ul üçgeni A kullanılır. dA köşegen değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler.

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

B'yi A*X = alpha*B çözümü ile veya side ve tA tarafından belirlenen diğer üç varyanttan biri ile güncelleyiniz. Sadece A'nın ul üçgeni kullanılır. dA diyagonal değerlerin okunup okunmayacağını veya hepsinin birer birer varsayıldığını belirler. Güncellenmiş B'yi döndürür.

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

A*X = alpha*B çözümünü veya side ve tA tarafından belirlenen diğer üç varyanttan birini döndürür. Sadece A'nın ul üçgeni kullanılır. dA köşe değerlerinin okunup okunmayacağını veya hepsinin bir olarak varsayıldığını belirler.

source

LAPACK functions

LinearAlgebra.LAPACK, lineer cebir için bazı LAPACK fonksiyonları için sarmalayıcılar sağlar. Girdi dizilerinden birini değiştiren o fonksiyonların isimleri '!' ile biter.

Genellikle bir fonksiyonun tanımlı 4 yöntemi vardır, her biri için Float64, Float32, ComplexF64 ve ComplexF32 dizileri.

LAPACK API'sinin Julia tarafından sağlandığını ve gelecekte değişebileceğini unutmayın. Bu API kullanıcıya açık olmadığından, gelecekteki sürümlerde bu belirli işlev setini destekleme/iptal etme taahhüdü yoktur.

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

Bantlı bir matrisin AB LU faktorizasyonunu hesaplayın. kl, sıfır olmayan bir band içeren ilk alt diyagonal, ku ise birini içeren son üst diyagonaldir ve m, matris AB'nin ilk boyutudur. LU faktorizasyonunu yerinde döndürür ve kullanılan pivotların vektörü ipiv'i döndürür.

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

AB * X = B denklemini çözer. trans, AB'nin yönünü belirler. N (transpoze yok), T (transpoze) veya C (konjugat transpoze) olabilir. kl, sıfır olmayan bir band içeren ilk alt diyagonal, ku ise birini içeren son üst diyagonal ve m, AB matrisinin ilk boyutudur. ipiv, gbtrf!'den dönen pivotlar vektörüdür. B'yi yerinde değiştirerek X vektörünü veya matrisini döner.

source
LinearAlgebra.LAPACK.gebal!Function
gebal!(iş, A) -> (ilo, ihi, ölçek)

Matris A'yı özdeğer sistemi veya Schur faktorizasyonu hesaplamadan önce dengeleyin. , N (A sıralanmayacak veya ölçeklenmeyecek), P (A yalnızca sıralanacak), S (A yalnızca ölçeklenecek) veya B (A hem sıralanacak hem de ölçeklenecek) olanlardan biri olabilir. A'yı yerinde değiştirir ve ilo, ihi ve ölçek döner. Sıralama etkinleştirildiyse, A[i,j] = 0 eğer j > i ve 1 < j < ilo veya j > ihi ise. ölçek, gerçekleştirilen ölçekleme/sıralamalar hakkında bilgi içerir.

source
LinearAlgebra.LAPACK.gebak!Function
gebak!(iş, taraf, ilo, ihi, ölçek, V)

gebal! kullanılarak dengelenmiş bir matrisin özvektörlerini V, orijinal matrisin ölçeklenmemiş/permütasyona uğramamış özvektörlerine dönüştürür. V yerinde değiştirilir. taraf L (sol özvektörler dönüştürülür) veya R (sağ özvektörler dönüştürülür) olabilir.

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

A'yı yerinde A = QBP' biçiminde bidiagonal forma indirger. B'yi içeren A, B'nin köşegen elemanlarını içeren d, B'nin off-köşegen elemanlarını içeren e, Q'yu temsil eden temel yansıtıcıları içeren tauq ve P'yi temsil eden temel yansıtıcıları içeren taup döner.

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

A'nın LQ faktorizasyonunu hesaplar, A = LQ. tau, faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içerir. tau, A'nın en küçük boyutundan büyük veya eşit bir uzunluğa sahip olmalıdır.

A ve tau yerinde değiştirilerek döndürülür.

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

A'n LQ faktorizasyonunu hesaplayın, A = LQ.

Yerinde değiştirilen A'yı ve faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içeren tau'yu döndürür.

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

A'nın QL faktorizasyonunu hesaplar, A = QL. tau, faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içerir. tau, A'nın en küçük boyutundan büyük veya eşit bir uzunluğa sahip olmalıdır.

A ve tau yerinde değiştirilerek döndürülür.

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

A'nın QL faktorizasyonunu hesaplayın, A = QL.

Yerinde değiştirilen A'yı ve faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içeren tau'yu döndürür.

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

A'n QR faktorizasyonunu hesaplar, A = QR. tau, faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içerir. tau, A'nın en küçük boyutundan büyük veya eşit bir uzunluğa sahip olmalıdır.

A ve tau yerinde değiştirilerek döndürülür.

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

A'nın QR faktorizasyonunu hesaplar, A = QR.

A'yı yerinde değiştirilmiş olarak döner ve faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içeren tau'yu döner.

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

A matrisinin pivotlu QR faktorizasyonunu AP = QR hesaplayın, BLAS seviye 3 kullanarak. P, jpvt ile temsil edilen bir pivotlama matrisidir. tau, temel yansıtıcıları saklar. jpvt ve tau argümanları isteğe bağlıdır ve önceden tahsis edilmiş dizilerin geçirilmesine izin verir. Geçirildiğinde, jpvt'nin uzunluğu A bir (m x n) matrisiyse n'den büyük veya eşit olmalıdır ve tau'nun uzunluğu A'nın en küçük boyutundan büyük veya eşit olmalıdır. Girişte, eğer jpvt[j] sıfıra eşit değilse, A'nın j'inci sütunu AP'nin önüne permütasyon edilir.

A, jpvt ve tau yerinde değiştirilir.

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

A'nın RQ faktorizasyonunu hesaplar, A = RQ. tau, faktorizasyonun temel yansıtıcılarını parametreleyen skalarları içerir. tau, A'nın en küçük boyutundan büyük veya eşit bir uzunluğa sahip olmalıdır.

A ve tau yerinde değiştirilerek döndürülür.

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

A'nın RQ faktorizasyonunu hesaplayın, A = RQ.

A'yı yerinde değiştirilmiş olarak ve faktorizasyonun temel yansıtıcılarını parametreleştiren skalarları içeren tau'yu döndürür.

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

A'nın bloklu QR faktorizasyonunu hesaplar, A = QR. T, faktorizasyonun temel yansıtıcılarını parametreleyen üst üçgen blok yansıtıcılarını içerir. T'nin ilk boyutu blok boyutunu belirler ve 1 ile n arasında olmalıdır. T'nin ikinci boyutu A'nın en küçük boyutuna eşit olmalıdır.

Yerinde değiştirilmiş A ve T döner.

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

A'n bloklu QR faktorizasyonunu hesaplar, A = QR. nb blok boyutunu ayarlar ve 1 ile A'nın ikinci boyutu n arasında olmalıdır.

Yerinde değiştirilen A'yı ve faktorizasyonun temel yansıtıcılarını parametreleyen üst üçgen blok yansıtıcılarını içeren T'yi döndürür.

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

A'nın bloklu QR faktorizasyonunu A = QR hesaplar. T, faktorizasyonun temel yansıtıcılarını parametreleyen üst üçgen blok yansıtıcılarını içerir. T'nin ilk boyutu blok boyutunu belirler ve 1 ile n arasında olmalıdır. T'nin ikinci boyutu A'nın en küçük boyutuna eşit olmalıdır.

Yerinde değiştirilmiş A ve T döner.

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

A'nın bloklu QR faktorizasyonunu, A = QR olarak, özyinelemeli olarak hesaplar.

Yerinde değiştirilen A ve faktorizasyonun temel yansıtıcılarını parametreleyen üst üçgen blok yansıtıcılarını içeren T döner.

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

A'nın pivotlu LU faktorizasyonunu hesaplayın, A = LU. ipiv pivotlama bilgilerini içerir ve info başarıyı (info = 0), U'da bir tekil değeri (info = i, bu durumda U[i,i] tekildir) veya bir hata kodunu (info < 0) gösteren bir kod içerir.

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

A'nın pivotlu LU faktorizasyonunu hesaplayın, A = LU.

A'yı yerinde değiştirilmiş olarak, ipiv'yi, pivotlama bilgisini ve başarıyı belirten bir info kodunu döndürür (info = 0), U'da bir tekil değer (info = i, bu durumda U[i,i] tekildir) veya bir hata kodu (info < 0).

source
LinearAlgebra.LAPACK.tzrzf!Function
tzrzf!(A) -> (A, tau)

Üst trapezoidal matris A'yı yerinde üst üçgen forma dönüştürür. Dönüşümün temel yansıtıcıları için skalar parametreler tau ile birlikte A'yı döndürür.

source
LinearAlgebra.LAPACK.ormrz!Function
ormrz!(side, trans, A, tau, C)

Matris C'yi tzrzf! ile sağlanan dönüşümden Q ile çarpar. side veya trans'a bağlı olarak çarpma sol taraflı (side = L, Q*C) veya sağ taraflı (side = R, C*Q) olabilir ve Q değiştirilmemiş (trans = N), transpoze edilmiş (trans = T) veya konjugat transpoze edilmiş (trans = C) olabilir. Çarpmanın sonucuyla yerinde değiştirilen matris C'yi döner.

source
LinearAlgebra.LAPACK.gels!Function
gels!(trans, A, B) -> (F, B, ssr)

A * X = B, transpose(A) * X = B veya adjoint(A) * X = B lineer denklemini QR veya LQ faktorizasyonu kullanarak çözer. Çözümü içindeki B matrisini/vektörünü yerinde değiştirir. A, QR veya LQ faktorizasyonu ile üzerine yazılır. trans, N (değişiklik yok), T (transpose) veya C (konjugat transpose) olabilir. gels!, minimum norm/en küçük kareler çözümünü arar. A alt veya üst belirlenmiş olabilir. Çözüm B içinde döndürülür.

source
LinearAlgebra.LAPACK.gesv!Function
gesv!(A, B) -> (B, A, ipiv)

A * X = B doğrusal denklemini çözer; burada A kare bir matristir ve A'nın LU faktorizasyonu kullanılır. A, LU faktorizasyonu ile üzerine yazılır ve B, çözüm X ile üzerine yazılır. ipiv, A'nın LU faktorizasyonu için pivotlama bilgilerini içerir.

source
LinearAlgebra.LAPACK.getrs!Function
getrs!(trans, A, ipiv, B)

Kare matris denklemini A * X = B, transpose(A) * X = B veya adjoint(A) * X = B çözer. Çözümü içindeki matris/vektör B'yi yerinde değiştirir. A, getrf!'den elde edilen LU faktorizasyonudur ve ipiv pivot bilgilerini içerir. trans, N (değişiklik yok), T (transpoze) veya C (konjugat transpoze) olabilir.

source
LinearAlgebra.LAPACK.getri!Function
getri!(A, ipiv)

A'n tersini hesaplar, getrf! ile bulunan LU faktörizasyonunu kullanarak. ipiv, çıktı olan pivot bilgilerini içerir ve A, getrf!'nin LU faktörizasyonunu içerir. A, tersine yazılır.

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), veya adjoint(A) * X = B (trans = C) lineer denklemini A'nın LU faktorizasyonu kullanarak çözer. fact E olabilir, bu durumda A dengeleştirilecek ve AF'ye kopyalanacaktır; F olabilir, bu durumda AF ve ipiv önceki bir LU faktorizasyonundan girdi olarak alınır; veya N olabilir, bu durumda A AF'ye kopyalanacak ve ardından faktörize edilecektir. Eğer fact = F ise, equed N olabilir, bu A'nın dengeleştirilmediği anlamına gelir; R, bu A'nın soldan Diagonal(R) ile çarpıldığı anlamına gelir; C, bu A'nın sağdan Diagonal(C) ile çarpıldığı anlamına gelir; veya B, bu A'nın soldan Diagonal(R) ve sağdan Diagonal(C) ile çarpıldığı anlamına gelir. Eğer fact = F ve equed = R veya B ise, R'nin tüm elemanları pozitif olmalıdır. Eğer fact = F ve equed = C veya B ise, C'nin tüm elemanları pozitif olmalıdır.

Çözümü X döner; equed, fact N değilse bir çıktı olup yapılan dengeleştirmeyi tanımlar; R, satır dengeleştirme diyagonalidir; C, sütun dengeleştirme diyagonalidir; B, dengeleştirilmiş formu Diagonal(R)*B (eğer trans = N ve equed = R,B) veya Diagonal(C)*B (eğer trans = T,C ve equed = C,B) ile üzerine yazılabilir; rcond, dengeleştirmeden sonra A'nın ters koşul sayısıdır; ferr, X'teki her çözüm vektörü için ileri hata sınırıdır; berr, X'teki her çözüm vektörü için ileri hata sınırıdır; ve work, ters pivot büyüme faktörüdür.

source
gesvx!(A, B)

gesvx!'nin dengelememe, transpoze etmeme basitleştirmesi.

source
LinearAlgebra.LAPACK.gelsd!Function
gelsd!(A, B, rcond) -> (B, rnk)

A * X = B denkleminin en küçük norm çözümünü, A'nın SVD faktorizasyonunu bulup problemi bölerek çözer. B, çözüm X ile üzerine yazılır. rcond'un altındaki tekil değerler sıfır olarak kabul edilir. Çözümü B'de ve A'nın etkili sırasını rnk'de döner.

source
LinearAlgebra.LAPACK.gelsy!Function
gelsy!(A, B, rcond) -> (B, rnk)

A * X = B denkleminin en küçük norm çözümünü, A'nın tam QR faktorizasyonunu bulup problemi bölerek çözer. B, çözüm X ile üzerine yazılır. rcond'un altındaki tekil değerler sıfır olarak kabul edilir. Çözümü B'de ve A'nın etkili sırasını rnk'de döner.

source
LinearAlgebra.LAPACK.gglse!Function
gglse!(A, c, B, d) -> (X,res)

A * x = c denklemini çözer; burada x, B * x = d eşitlik kısıtlamasına tabidir. Çözüm için ||c - A*x||^2 = 0 formülünü kullanır. X ve kalıntı kareler toplamını döner.

source
LinearAlgebra.LAPACK.geev!Function
geev!(jobvl, jobvr, A) -> (W, VL, VR)

A'n özdeğer sistemini bulur. Eğer jobvl = N ise, A'nın sol özvektörleri hesaplanmaz. Eğer jobvr = N ise, A'nın sağ özvektörleri hesaplanmaz. Eğer jobvl = V veya jobvr = V ise, ilgili özvektörler hesaplanır. Özdeğerler W'de, sağ özvektörler VR'de ve sol özvektörler VL'de döner.

source
LinearAlgebra.LAPACK.gesdd!Function
gesdd!(iş, A) -> (U, S, VT)

A'nın tekil değer ayrıştırmasını bulur, A = U * S * V', böl ve fethet yaklaşımını kullanarak. Eğer iş = A ise, U'nun tüm sütunları ve V'nin satırları hesaplanır. Eğer iş = N ise, U'nun sütunları veya V'nin satırları hesaplanmaz. Eğer iş = O ise, A (ince) U'nun sütunları ve (ince) V'nin satırları ile üzerine yazılır. Eğer iş = S ise, (ince) U'nun sütunları ve (ince) V'nin satırları hesaplanır ve ayrı olarak döndürülür.

source
LinearAlgebra.LAPACK.gesvd!Function
gesvd!(jobu, jobvt, A) -> (U, S, VT)

A'nın tekil değer ayrıştırmasını bulur, A = U * S * V'. Eğer jobu = A ise, U'nun tüm sütunları hesaplanır. Eğer jobvt = A ise, V'nin tüm satırları hesaplanır. Eğer jobu = N ise, U'nun sütunları hesaplanmaz. Eğer jobvt = N ise, V'nin satırları hesaplanmaz. Eğer jobu = O ise, A (ince) U'nun sütunları ile üzerine yazılır. Eğer jobvt = O ise, A (ince) V'nin satırları ile üzerine yazılır. Eğer jobu = S ise, (ince) U'nun sütunları hesaplanır ve ayrı olarak döndürülür. Eğer jobvt = S ise, (ince) V'nin satırları hesaplanır ve ayrı olarak döndürülür. jobu ve jobvt ikisi birden O olamaz.

U, S ve Vt'yi döndürür, burada S, A'nın tekil değerleridir.

source
LinearAlgebra.LAPACK.ggsvd!Function
ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

A ve B'nin genelleştirilmiş tekil değer ayrıştırmasını bulur, U'*A*Q = D1*R ve V'*B*Q = D2*R. D1'in köşegeninde alpha, D2'nin köşegeninde ise beta bulunur. Eğer jobu = U ise, ortogonal/birlikte matris U hesaplanır. Eğer jobv = V ise ortogonal/birlikte matris V hesaplanır. Eğer jobq = Q ise ortogonal/birlikte matris Q hesaplanır. Eğer jobu, jobv veya jobq N ise, o matris hesaplanmaz. Bu fonksiyon yalnızca LAPACK sürümleri 3.6.0'dan önce mevcuttur.

source
LinearAlgebra.LAPACK.ggsvd3!Function
ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

A ve B'nin genelleştirilmiş tekil değer ayrıştırmasını bulur, U'*A*Q = D1*R ve V'*B*Q = D2*R. D1'in köşegeninde alpha, D2'nin köşegeninde ise beta bulunur. Eğer jobu = U ise, ortogonal/birlikte matris U hesaplanır. Eğer jobv = V ise ortogonal/birlikte matris V hesaplanır. Eğer jobq = Q ise ortogonal/birlikte matris Q hesaplanır. Eğer jobu, jobv veya jobq N ise, o matris hesaplanmaz. Bu fonksiyon LAPACK 3.6.0 gerektirir.

source
LinearAlgebra.LAPACK.geevx!Function
geevx!(balanc, jobvl, jobvr, sense, A) -> (A, w, VL, VR, ilo, ihi, scale, abnrm, rconde, rcondv)

A matrisinin özdeğer sistemini bulur ve matris dengelemesi yapar. Eğer jobvl = N ise, A'nın sol özvektörleri hesaplanmaz. Eğer jobvr = N ise, A'nın sağ özvektörleri hesaplanmaz. Eğer jobvl = V veya jobvr = V ise, ilgili özvektörler hesaplanır. Eğer balanc = N ise, dengeleme yapılmaz. Eğer balanc = P ise, A permütasyon yapılır ama ölçeklendirilmez. Eğer balanc = S ise, A ölçeklendirilir ama permütasyon yapılmaz. Eğer balanc = B ise, A hem permütasyon yapılır hem de ölçeklendirilir. Eğer sense = N ise, ters koşul sayıları hesaplanmaz. Eğer sense = E ise, yalnızca özdeğerler için ters koşul sayıları hesaplanır. Eğer sense = V ise, yalnızca sağ özvektörler için ters koşul sayıları hesaplanır. Eğer sense = B ise, hem sağ özvektörler hem de özvektörler için ters koşul sayıları hesaplanır. Eğer sense = E,B ise, sağ ve sol özvektörlerin hesaplanması gerekir.

source
LinearAlgebra.LAPACK.ggev!Function
ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

A ve B'nin genelleştirilmiş özdeğişken ayrıştırmasını bulur. Eğer jobvl = N ise, sol özvektörler hesaplanmaz. Eğer jobvr = N ise, sağ özvektörler hesaplanmaz. Eğer jobvl = V veya jobvr = V ise, ilgili özvektörler hesaplanır.

source
LinearAlgebra.LAPACK.ggev3!Function
ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

A ve B'nin genel özdeğişken ayrıştırmasını bloklu bir algoritma kullanarak bulur. Eğer jobvl = N ise, sol özvektörler hesaplanmaz. Eğer jobvr = N ise, sağ özvektörler hesaplanmaz. Eğer jobvl = V veya jobvr = V ise, ilgili özvektörler hesaplanır. Bu fonksiyon LAPACK 3.6.0 gerektirir.

source
LinearAlgebra.LAPACK.gtsv!Function
gtsv!(dl, d, du, B)

A * X = B denklemini çözer; burada A, alt diyagonalinde dl, diyagonalinde d ve üst diyagonalinde du bulunan bir üçlü matristir.

B'yi çözüm X ile üst üste yazar ve onu döndürür.

source
LinearAlgebra.LAPACK.gttrf!Function
gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

dl alt altındaki, d ana diyagonal üzerindeki ve du üst diyagonal üzerindeki bir üçgen matrisin LU faktorizasyonunu bulur.

dl, d ve du yerinde değiştirilir ve bunları, ikinci üst diyagonal du2 ve pivot vektörü ipiv ile birlikte döner.

source
LinearAlgebra.LAPACK.gttrs!Function
gttrs!(trans, dl, d, du, du2, ipiv, B)

A * X = B (trans = N), transpose(A) * X = B (trans = T), veya adjoint(A) * X = B (trans = C) denklemini gttrf! ile hesaplanan LU faktorizasyonunu kullanarak çözer. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.orglq!Function
orglq!(A, tau, k = length(tau))

gelqf! çağrıldıktan sonra bir LQ faktorizasyonunun matrisini Q açıkça bulur. gelqf! çıktısını kullanır. A, Q ile üzerine yazılır.

source
LinearAlgebra.LAPACK.orgqr!Function
orgqr!(A, tau, k = length(tau))

A üzerinde geqrf! çağrıldıktan sonra bir QR faktorizasyonunun matris Q'sini açıkça bulur. geqrf!'nin çıktısını kullanır. A, Q ile üzerine yazılır.

source
LinearAlgebra.LAPACK.orgql!Function
orgql!(A, tau, k = length(tau))

A'dan geqlf! çağrıldıktan sonra bir QL faktorizasyonu için Q matrisini açıkça bulur. geqlf! çıktısını kullanır. A, Q ile üzerine yazılır.

source
LinearAlgebra.LAPACK.orgrq!Function
orgrq!(A, tau, k = length(tau))

A üzerinde gerqf! çağrıldıktan sonra bir RQ faktorizasyonu için matris Q'yu açıkça bulur. gerqf!'nin çıktısını kullanır. A, Q ile üzerine yazılır.

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) için side = L veya side = R için gelqf! kullanılarak hesaplanan A'nın LQ faktorizasyonundan Q kullanarak eşdeğer sağ taraf çarpımı yapar. C üzerine yazılır.

source
LinearAlgebra.LAPACK.ormqr!Function
ormqr!(taraf, trans, A, tau, C)

Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) için side = L veya side = R için geqrf! kullanılarak hesaplanan A'nın QR faktorizasyonundan Q kullanarak eşdeğer sağ taraf çarpımı hesaplar. C üzerine yazılır.

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) için side = L veya side = R için A'nın geqlf! kullanılarak hesaplanan QL faktorizasyonundan Q kullanarak eşdeğer sağ taraf çarpımı hesaplar. C üzerine yazılır.

source
LinearAlgebra.LAPACK.ormrq!Function
ormrq!(taraf, trans, A, tau, C)

Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) için side = L veya side = R için gerqf! kullanılarak hesaplanan A'nın RQ faktorizasyonundan Q kullanarak eşdeğer sağ taraf çarpımı yapar. C üzerine yazılır.

source
LinearAlgebra.LAPACK.gemqrt!Function
gemqrt!(taraf, trans, V, T, C)

Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) için side = L veya side = R için geqrt! kullanılarak hesaplanan A'nın QR faktorizasyonundan Q kullanarak eşdeğer sağ taraf çarpımı yapar. C üzerine yazılır.

source
LinearAlgebra.LAPACK.posv!Function
posv!(uplo, A, B) -> (A, B)

A simetrik veya Hermitian pozitif belirli bir matris olduğunda A * X = B denkleminin çözümünü bulur. Eğer uplo = U ise A'nın üst Cholesky ayrıştırması hesaplanır. Eğer uplo = L ise A'nın alt Cholesky ayrıştırması hesaplanır. A, Cholesky ayrıştırması ile üzerine yazılır. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.potrf!Function
potrf!(uplo, A)

Pozitif belirli matris A'nın Cholesky (eğer uplo = U ise üst, uplo = L ise alt) ayrıştırmasını hesaplar. A üzerine yazılır ve bir bilgi kodu ile döndürülür.

source
LinearAlgebra.LAPACK.potri!Function
potri!(uplo, A)

Pozitif tanımlı matris A'nın tersini hesaplar, uplo = U ise üst, uplo = L ise alt Cholesky ayrıştırmasını bulmak için potrf! çağrıldıktan sonra.

A, tersine yazılır ve döndürülür.

source
LinearAlgebra.LAPACK.potrs!Function
potrs!(uplo, A, B)

A * X = B denkleminin çözümünü bulur; burada A, potrf! ile hesaplanmış Cholesky ayrışımına sahip simetrik veya Hermit pozitif tanımlı bir matristir. Eğer uplo = U ise, A'nın üst Cholesky ayrışımı hesaplanmıştır. Eğer uplo = L ise, A'nın alt Cholesky ayrışımı hesaplanmıştır. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.pstrf!Function
pstrf!(uplo, A, tol) -> (A, piv, rank, info)

Pozitif tanımlı matris A'nın kullanıcı tarafından belirlenen tolerans tol ile pivotlu Cholesky ayrıştırmasını (eğer uplo = U ise üst, uplo = L ise alt) hesaplar. A, Cholesky ayrıştırması ile üzerine yazılır.

A, pivotlar piv, A'nın rengi ve bir info kodu döner. Eğer info = 0 ise, ayrıştırma başarılı olmuştur. Eğer info = i > 0 ise, o zaman A belirsiz veya rengi eksiktir.

source
LinearAlgebra.LAPACK.ptsv!Function
ptsv!(D, E, B)

A * X = B için pozitif tanımlı üçlü matris A için çözer. D, A'nın diyagonalidir ve E ise off-diyagonal'dır. B, çözüm X ile üzerine yazılır ve döndürülür.

source
LinearAlgebra.LAPACK.pttrf!Function
pttrf!(D, E)

Pozitif tanımlı bir üçgen matrisin LDLt faktorizasyonunu D diagonal ve E yan-diagonal olarak hesaplar. D ve E üzerine yazılır ve döndürülür.

source
LinearAlgebra.LAPACK.pttrs!Function
pttrs!(D, E, B)

A * X = B için pozitif tanımlı üçlü diagonal A'yı, D ile diagonal ve E ile off-diagonal olarak çözmektedir. A'nın LDLt faktorizasyonu pttrf! kullanılarak hesaplandıktan sonra B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.trtri!Function
trtri!(uplo, diag, A)

Üst (eğer uplo = U) veya alt (eğer uplo = L) üçgen matris Anın tersini bulur. Eğer diag = N ise, Anın birim olmayan köşegen elemanları vardır. Eğer diag = U ise, Anın tüm köşegen elemanları birdir. A, tersine yazılır.

source
LinearAlgebra.LAPACK.trtrs!Function
trtrs!(uplo, trans, diag, A, B)

A * X = B (trans = N), transpose(A) * X = B (trans = T), veya adjoint(A) * X = B (trans = C) için (üstse uplo = U, altse uplo = L) üçgen matris A'yı çözer. Eğer diag = N ise, A'nın birim olmayan diyagonal elemanları vardır. Eğer diag = U ise, A'nın tüm diyagonal elemanları birdir. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.trcon!Function
trcon!(norm, uplo, diag, A)

A (eğer uplo = U ise üst, uplo = L ise alt) üçgen matrisinin ters koşul sayısını bulur. Eğer diag = N ise, A birim olmayan diyagonal elemanlara sahiptir. Eğer diag = U ise, A'nın tüm diyagonal elemanları birdir. Eğer norm = I ise, koşul sayısı sonsuz normda bulunur. Eğer norm = O veya 1 ise, koşul sayısı bir normda bulunur.

source
LinearAlgebra.LAPACK.trevc!Function
trevc!(side, howmny, select, T, VL = similar(T), VR = similar(T))

Üst üçgen matris T'nin özdeğer sistemini bulur. Eğer side = R ise, sağ özvektörler hesaplanır. Eğer side = L ise, sol özvektörler hesaplanır. Eğer side = B ise, her iki set de hesaplanır. Eğer howmny = A ise, tüm özvektörler bulunur. Eğer howmny = B ise, tüm özvektörler bulunur ve VL ve VR kullanılarak geri dönüştürülür. Eğer howmny = S ise, yalnızca select içindeki değerlere karşılık gelen özvektörler hesaplanır.

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) için çözümdeki hatayı tahmin eder; side = L için veya trtrs! kullanarak X'i hesapladıktan sonra sağa doğru side = R X * A için eşdeğer denklemler. Eğer uplo = U ise, A üst üçgenlidir. Eğer uplo = L ise, A alt üçgenlidir. Eğer diag = N ise, A birim olmayan diyagonal elemanlara sahiptir. Eğer diag = U ise, A'nın tüm diyagonal elemanları birdir. Ferr ve Berr isteğe bağlı girdilerdir. Ferr ileri hata ve Berr geri hatadır, her biri bileşen bazında.

source
LinearAlgebra.LAPACK.stev!Function
stev!(job, dv, ev) -> (dv, Zmat)

Simetrik üçgen matris için özdeğer sistemini hesaplar; dv diagonal ve ev ise off-diagonal olarak kullanılır. Eğer job = N ise yalnızca özdeğerler bulunur ve dv içinde döndürülür. Eğer job = V ise özvektörler de bulunur ve Zmat içinde döndürülür.

source
LinearAlgebra.LAPACK.stebz!Function
stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

Simetrik tridiagonal bir matris için özdeğerleri hesaplar; dv diagonal ve ev off-diagonal olarak kullanılır. Eğer range = A ise, tüm özdeğerler bulunur. Eğer range = V ise, (vl, vu] yarı açık aralığında özdeğerler bulunur. Eğer range = I ise, il ve iu arasındaki indekslere sahip özdeğerler bulunur. Eğer order = B ise, özdeğerler bir blok içinde sıralanır. Eğer order = E ise, tüm bloklar arasında sıralanır. abstol, yakınsama için bir tolerans olarak ayarlanabilir.

source
LinearAlgebra.LAPACK.stegr!Function
stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

Simetrik üçgen matris için özdeğerleri (jobz = N) veya özdeğerler ve özvektörler (jobz = V) hesaplar; dv diagonal ve ev off-diagonal olarak kullanılır. Eğer range = A ise, tüm özdeğerler bulunur. Eğer range = V ise, (vl, vu] yarı açık aralığında özdeğerler bulunur. Eğer range = I ise, il ve iu arasındaki indekslere sahip özdeğerler bulunur. Özdeğerler w içinde ve özvektörler Z içinde döndürülür.

source
LinearAlgebra.LAPACK.stein!Function
stein!(dv, ev_in, w_in, iblock_in, isplit_in)

Simetrik tridiagonal bir matris için özvektörleri hesaplar; dv diagonal ve ev_in ise dış-diyagonal olarak kullanılır. w_in, karşılık gelen özvektörleri bulmak için giriş özdeğerlerini belirtir. iblock_in, w_in içindeki özdeğerlere karşılık gelen alt matrisleri belirtir. isplit_in, alt matris blokları arasındaki bölme noktalarını belirtir.

source
LinearAlgebra.LAPACK.syconv!Function
syconv!(uplo, A, ipiv) -> (A, work)

Bir simetrik matris A'yı (üçgen bir matris haline getirilmiş) iki matris L ve D'ye dönüştürür. Eğer uplo = U ise, A üst üçgendir. Eğer uplo = L ise, alt üçgendir. ipiv, üçgen faktorizasyondan elde edilen pivot vektörüdür. A, L ve D ile üzerine yazılır.

source
LinearAlgebra.LAPACK.sysv!Function
sysv!(uplo, A, B) -> (B, A, ipiv)

A * X = B eşitliğini simetrik matris A için çözer. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. B, çözüm X ile üzerine yazılır. A, Bunch-Kaufman faktorizasyonu ile üzerine yazılır. ipiv, faktorizasyon hakkında pivotlama bilgilerini içerir.

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

Bir simetrik matris A için Bunch-Kaufman faktorizasyonunu hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır.

Faktorizasyon ile üzerine yazılmış A, bir pivot vektörü ipiv ve pozitif bir tam sayı olan hata kodu info döner. Eğer info pozitifse, matris tekil olup faktorizasyonun diagonal kısmı info konumunda tam olarak sıfırdır.

source
sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

Simetrik bir matris A'nın Bunch-Kaufman faktorizasyonunu hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır.

Faktorizasyon ile üzerine yazılmış A, pivot vektörü ipiv ve pozitif bir tam sayı olan hata kodu info döner. Eğer info pozitifse, matris tekil olup faktorizasyonun diagonal kısmı tam olarak info konumunda sıfırdır.

source
LinearAlgebra.LAPACK.sytri!Function
sytri!(uplo, A, ipiv)

Simetrik bir matris A'nın tersini sytrf! sonuçlarını kullanarak hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. A, tersine yazılır.

source
LinearAlgebra.LAPACK.sytrs!Function
sytrs!(uplo, A, ipiv, B)

Simetrik matris A için A * X = B denklemini sytrf! sonuçlarını kullanarak çözer. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.hesv!Function
hesv!(uplo, A, B) -> (B, A, ipiv)

Hermit matris A için A * X = B çözümünü bulur. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. B, çözüm X ile üzerine yazılır. A, Bunch-Kaufman faktörizasyonu ile üzerine yazılır. ipiv, faktörizasyon hakkında pivot bilgilerini içerir.

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

Hermit matris A'nın Bunch-Kaufman faktorizasyonunu hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır.

Faktorizasyon ile üzerine yazılmış A, bir pivot vektörü ipiv ve pozitif bir tam sayı olan hata kodu info döner. Eğer info pozitifse, matris tekil olup faktorizasyonun diyagonal kısmı info konumunda tam olarak sıfırdır.

source
hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

Hermit matris A'nın Bunch-Kaufman faktorizasyonunu hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır.

Faktorizasyon ile üzerine yazılmış A, pivot vektörü ipiv ve pozitif bir tam sayı olan hata kodu info döner. Eğer info pozitifse, matris tekil olup faktorizasyonun diagonal kısmı tam olarak info konumunda sıfırdır.

source
LinearAlgebra.LAPACK.hetri!Function
hetri!(uplo, A, ipiv)

Hermit matris A'nın tersini sytrf! sonuçlarını kullanarak hesaplar. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. A, tersine yazılır.

source
LinearAlgebra.LAPACK.hetrs!Function
hetrs!(uplo, A, ipiv, B)

Hermit matris A için A * X = B denklemini sytrf! sonuçlarını kullanarak çözer. Eğer uplo = U ise, A'nın üst yarısı saklanır. Eğer uplo = L ise, alt yarısı saklanır. B, çözüm X ile üzerine yazılır.

source
LinearAlgebra.LAPACK.syev!Function
syev!(jobz, uplo, A)

Simetrik bir matris A'nın özdeğerlerini (jobz = N) veya özdeğerler ve özvektörlerini (jobz = V) bulur. Eğer uplo = U ise, A'nın üst üçgeni kullanılır. Eğer uplo = L ise, A'nın alt üçgeni kullanılır.

source
LinearAlgebra.LAPACK.syevr!Function
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

Simetrik bir matris A'nın özdeğerlerini (jobz = N) veya özdeğerler ve özvektörlerini (jobz = V) bulur. Eğer uplo = U ise, A'nın üst üçgeni kullanılır. Eğer uplo = L ise, A'nın alt üçgeni kullanılır. Eğer range = A ise, tüm özdeğerler bulunur. Eğer range = V ise, (vl, vu] yarı açık aralığında bulunan özdeğerler bulunur. Eğer range = I ise, il ve iu arasındaki indekslere sahip özdeğerler bulunur. abstol, yakınsama için bir tolerans olarak ayarlanabilir.

Özdeğerler W içinde ve özvektörler Z içinde döndürülür.

source
LinearAlgebra.LAPACK.syevd!Function
syevd!(jobz, uplo, A)

Simetrik bir matris A'nın özdeğerlerini (jobz = N) veya özdeğerler ve özvektörlerini (jobz = V) bulur. Eğer uplo = U ise, A'nın üst üçgeni kullanılır. Eğer uplo = L ise, A'nın alt üçgeni kullanılır.

syev! tarafından kullanılan QR iterasyonu veya syevr! tarafından kullanılan çoklu nispeten sağlam temsiller yerine, böl ve fethet yöntemini kullanır. Farklı yöntemlerin doğruluğu ve performans karşılaştırması için James W. Demmel ve diğerleri, SIAM J. Sci. Comput. 30, 3, 1508 (2008) referansına bakın.

source
LinearAlgebra.LAPACK.sygvd!Function
sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

Genelleştirilmiş özdeğerleri (jobz = N) veya özdeğerler ve özvektörleri (jobz = V) simetrik matris A ve simetrik pozitif-tam matris B için bulur. Eğer uplo = U ise, A ve B'nin üst üçgenleri kullanılır. Eğer uplo = L ise, A ve B'nin alt üçgenleri kullanılır. Eğer itype = 1 ise, çözülmesi gereken problem A * x = lambda * B * x'dir. Eğer itype = 2 ise, çözülmesi gereken problem A * B * x = lambda * x'dir. Eğer itype = 3 ise, çözülmesi gereken problem B * A * x = lambda * x'dir.

source
LinearAlgebra.LAPACK.bdsqr!Function
bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

Bidiagonal bir matrisin tekil değer ayrıştırmasını d ana köşesinde ve e_ yan köşesinde hesaplar. Eğer uplo = U ise, e_ üst diyagonaldir. Eğer uplo = L ise, e_ alt diyagonaldir. Ayrıca isteğe bağlı olarak Q' * C çarpımını da hesaplayabilir.

Tekil değerleri d içinde döner ve matris C, Q' * C ile üzerine yazılır.

source
LinearAlgebra.LAPACK.bdsdc!Function
bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

Bidiagonal bir matrisin tekil değer ayrıştırmasını d ana köşesinde ve e_ yan köşesinde böl ve fethet yöntemi kullanarak hesaplar. Eğer uplo = U ise, e_ süperdiagonaldir. Eğer uplo = L ise, e_ alt diagonaldir. Eğer compq = N ise, yalnızca tekil değerler bulunur. Eğer compq = I ise, tekil değerler ve vektörler bulunur. Eğer compq = P ise, tekil değerler ve vektörler kompakt formda bulunur. Sadece gerçek türler için çalışır.

Tekil değerleri d içinde döner ve eğer compq = P ise, kompakt tekil vektörleri iq içinde döner.

source
LinearAlgebra.LAPACK.gecon!Function
gecon!(normtype, A, anorm)

Matris A'nın ters koşul sayısını bulur. Eğer normtype = I ise, koşul sayısı sonsuz normda bulunur. Eğer normtype = O veya 1 ise, koşul sayısı bir normda bulunur. A, getrf!'nin sonucu olmalı ve anorm, ilgili normda A'nın normudur.

source
LinearAlgebra.LAPACK.gehrd!Function
gehrd!(ilo, ihi, A) -> (A, tau)

Bir matris A'yı Hessenberg formuna dönüştürür. Eğer A, gebal! ile dengelenmişse, ilo ve ihi gebal!'nin çıktılarıdır. Aksi takdirde, ilo = 1 ve ihi = size(A,2) olmalıdır. tau, faktorizasyonun temel yansıtıcılarını içerir.

source
LinearAlgebra.LAPACK.orghr!Function
orghr!(ilo, ihi, A, tau)

Açıkça Q'yu, gehrd!'den elde edilen ortogonal/birleşik matris olarak bulur. ilo, ihi, A ve tau, gehrd!'ye giriş/çıkış olarak karşılık gelmelidir.

source
LinearAlgebra.LAPACK.gees!Function
gees!(jobvs, A) -> (A, vs, w)

Matris A'nın özdeğerlerini (jobvs = N) veya özdeğerlerini ve Schur vektörlerini (jobvs = V) hesaplar. A, Schur formu ile üzerine yazılır.

A, Schur vektörlerini içeren vs ve özdeğerlerini içeren w döner.

source
LinearAlgebra.LAPACK.gges!Function
gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Genelleştirilmiş özdeğerleri, genelleştirilmiş Schur formunu, sol Schur vektörlerini (jobsvl = V) veya sağ Schur vektörlerini (jobvsr = V) A ve B için hesaplar.

Genelleştirilmiş özdeğerler alpha ve beta içinde döndürülür. Sol Schur vektörleri vsl içinde ve sağ Schur vektörleri vsr içinde döndürülür.

source
LinearAlgebra.LAPACK.gges3!Function
gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Genelleştirilmiş özdeğerleri, genelleştirilmiş Schur formunu, sol Schur vektörlerini (jobsvl = V) veya sağ Schur vektörlerini (jobvsr = V) A ve B için blok algoritması kullanarak hesaplar. Bu fonksiyon LAPACK 3.6.0 gerektirir.

Genelleştirilmiş özdeğerler alpha ve beta içinde döndürülür. Sol Schur vektörleri vsl içinde ve sağ Schur vektörleri vsr içinde döndürülür.

source
LinearAlgebra.LAPACK.trexc!Function
trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

Bir matrisin Schur faktörizasyonu T'sini yeniden düzenleyin, böylece T'nin ifst satır indeksi ile olan diyagonal bloğu ilst satır indeksine taşınır. Eğer compq = V ise, Schur vektörleri Q yeniden düzenlenir. Eğer compq = N ise, değiştirilmezler. 4-arg yöntemi, compq = V ile 5-arg yöntemini çağırır.

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)

Bir matrisin Schur faktörizasyonunu yeniden sıralar ve isteğe bağlı olarak ters koşul sayısını bulur. Eğer job = N ise, koşul sayıları bulunmaz. Eğer job = E ise, yalnızca bu özdeğerler kümesi için koşul sayısı bulunur. Eğer job = V ise, yalnızca invariant alt uzay için koşul sayısı bulunur. Eğer job = B ise, hem küme hem de alt uzay için koşul sayıları bulunur. Eğer compq = V ise, Schur vektörleri Q güncellenir. Eğer compq = N ise, Schur vektörleri değiştirilmez. select, hangi özdeğerlerin kümede olduğunu belirler. 3-arg yöntemi, 5-arg yöntemini job = N ve compq = V ile çağırır.

T, Q, yeniden sıralanmış özdeğerler w, özdeğerler kümesinin koşul sayısı s ve invariant alt uzayın koşul sayısı sep döner.

source
LinearAlgebra.LAPACK.tgsen!Function
tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

Genelleştirilmiş Schur ayrışımının vektörlerini yeniden sıralar. select, her kümedeki özdeğerleri belirtir.

source
LinearAlgebra.LAPACK.trsyl!Function
trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

Sylvester matris denklemini A * X +/- X * B = scale*C çözer; burada A ve B her ikisi de neredeyse üst üçgenlidir. Eğer transa = N ise, A değiştirilmez. Eğer transa = T ise, A transpoze edilir. Eğer transa = C ise, A konjugat transpoze edilir. Benzer şekilde transb ve B için de geçerlidir. Eğer isgn = 1 ise, denklem A * X + X * B = scale * C çözülür. Eğer isgn = -1 ise, denklem A * X - X * B = scale * C çözülür.

X (C'yi üzerine yazarak) ve scale döner.

source
LinearAlgebra.LAPACK.hseqr!Function
hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

Bir matrisin Hessenberg formuna indirgenmiş tüm özdeğerlerini ve (isteğe bağlı olarak) Schur faktorizasyonunu hesaplar. Eğer H gebal! ile dengelenmişse, ilo ve ihi gebal!'nin çıktılarıdır. Aksi takdirde, ilo = 1 ve ihi = size(H,2) olmalıdır. tau, faktorizasyonun temel yansıtıcılarını içerir.

source
  • ACM832Davis, Timothy A. (2004b). Algoritma 832: UMFPACK V4.3–-bir Asimetrik Desenli Çoklu Yüzey Yöntemi. 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 ve 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 ve 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). Algoritma 933: Sayısal Sıra, Null Alan Temelleri, Pseudoinverse Çözümleri ve SuiteSparseQR Kullanarak Temel Çözümlerinin Güvenilir Hesaplanması. ACM Trans. Math. Softw., 40(1). doi:10.1145/2513109.2513116
  • Bunch1977J R Bunch ve 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 ve 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 ve Nicholas J. Higham, "Matris logaritması için geliştirilmiş ters ölçekleme ve kare alma algoritmaları", SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553
  • AHR13Awad H. Al-Mohy, Nicholas J. Higham ve Samuel D. Relton, "Matris logaritmasının Fréchet türevini hesaplama ve koşul sayısını tahmin etme", SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
  • BH83Åke Björck ve 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 ve 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 ve Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_3Mary Aprahamian ve Nicholas J. Higham, "Matris Ters Trigonometrik ve Ters Hiperbolik Fonksiyonlar: Teori ve Algoritmalar", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_4Mary Aprahamian ve Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_5Mary Aprahamian ve Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_6Mary Aprahamian ve Nicholas J. Higham, "Matrix Inverse Trigonometric and Inverse Hyperbolic Functions: Theory and Algorithms", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577