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.0673077Eigen 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.278207imEk 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.24947A 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
3Burada, 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.0sB 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.
| Type | Description |
|---|---|
Symmetric | Symmetric matrix |
Hermitian | Hermitian matrix |
UpperTriangular | Upper triangular matrix |
UnitUpperTriangular | Upper triangular matrix with unit diagonal |
LowerTriangular | Lower triangular matrix |
UnitLowerTriangular | Lower triangular matrix with unit diagonal |
UpperHessenberg | Upper Hessenberg matrix |
Tridiagonal | Tridiagonal matrix |
SymTridiagonal | Symmetric tridiagonal matrix |
Bidiagonal | Upper/lower bidiagonal matrix |
Diagonal | Diagonal matrix |
UniformScaling | Uniform scaling operator |
Elementary operations
| Matrix type | + | - | * | \ | Other functions with optimized methods |
|---|---|---|---|---|---|
Symmetric | MV | inv, sqrt, cbrt, exp | |||
Hermitian | MV | inv, sqrt, cbrt, exp | |||
UpperTriangular | MV | MV | inv, det, logdet | ||
UnitUpperTriangular | MV | MV | inv, det, logdet | ||
LowerTriangular | MV | MV | inv, det, logdet | ||
UnitLowerTriangular | MV | MV | inv, det, logdet | ||
UpperHessenberg | MM | inv, det | |||
SymTridiagonal | M | M | MS | MV | eigmax, eigmin |
Tridiagonal | M | M | MS | MV | |
Bidiagonal | M | M | MS | MV | |
Diagonal | M | M | MV | MV | inv, det, logdet, / |
UniformScaling | M | M | MVS | MVS | / |
Efsane:
| Key | Description |
|---|---|
| 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 type | LAPACK | eigen | eigvals | eigvecs | svd | svdvals |
|---|---|---|---|---|---|---|
Symmetric | SY | ARI | ||||
Hermitian | HE | ARI | ||||
UpperTriangular | TR | A | A | A | ||
UnitUpperTriangular | TR | A | A | A | ||
LowerTriangular | TR | A | A | A | ||
UnitLowerTriangular | TR | A | A | A | ||
SymTridiagonal | ST | A | ARI | AV | ||
Tridiagonal | GT | |||||
Bidiagonal | BD | A | A | |||
Diagonal | DI | A |
Efsane:
| Key | Description | Example |
|---|---|---|
| A (all) | An optimized method to find all the characteristic values and/or vectors is available | e.g. eigvals(M) |
| R (range) | An optimized method to find the ilth through the ihth characteristic values are available | eigvals(M, il, ih) |
| I (interval) | An optimized method to find the characteristic values in the interval [vl, vh] is available | eigvals(M, vl, vh) |
| V (vectors) | An optimized method to find the characteristic vectors corresponding to the characteristic values x=[x1, x2,...] is available | eigvecs(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.
| Type | Description |
|---|---|
BunchKaufman | Bunch-Kaufman factorization |
Cholesky | Cholesky factorization |
CholeskyPivoted | Pivoted Cholesky factorization |
LDLt | LDL(T) factorization |
LU | LU factorization |
QR | QR factorization |
QRCompactWY | Compact WY form of the QR factorization |
QRPivoted | Pivoted QR factorization |
LQ | QR factorization of transpose(A) |
Hessenberg | Hessenberg decomposition |
Eigen | Spectral decomposition |
GeneralizedEigen | Generalized spectral decomposition |
SVD | Singular value decomposition |
GeneralizedSVD | Generalized SVD |
Schur | Schur decomposition |
GeneralizedSchur | Generalized 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.413724Bu 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
endaşı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-multiplicationEğ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.NoPivot — TypeNoPivotPivoting 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.
LinearAlgebra.RowNonZero — TypeRowNonZeroKalan 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.
LinearAlgebra.RowMaximum — TypeRowMaximumKalan 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.
LinearAlgebra.ColumnNorm — TypeColumnNormMaksimum 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.
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 1Base.:* — Method*(A, B::AbstractMatrix, C)
A * B * C * D3 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.
Bu optimizasyonlar en az Julia 1.7 gerektirir.
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
trueBase.:/ — MethodA / BMatris 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))
trueLinearAlgebra.SingularException — TypeTekilHataGirdi 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.
LinearAlgebra.PosDefException — TypePosDefExceptionGirdi 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.
LinearAlgebra.ZeroPivotException — TypeZeroPivotException <: ExceptionBir 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.
LinearAlgebra.RankDeficientException — TypeRankDeficientExceptionGirdi 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.
LinearAlgebra.LAPACKException — TypeLAPACKExceptionGenel 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.
LinearAlgebra.dot — Functiondot(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.0LinearAlgebra.dot — Methoddot(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.
Üç 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)
trueLinearAlgebra.cross — Functioncross(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
0LinearAlgebra.axpy! — Functionaxpy!(α, 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
12LinearAlgebra.axpby! — Functionaxpby!(α, 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
18LinearAlgebra.rotate! — Functionrotate!(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.
rotate! en az Julia 1.5 gerektirir.
LinearAlgebra.reflect! — Functionreflect!(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.
reflect! en az Julia 1.5 gerektirir.
LinearAlgebra.factorize — Functionfactorize(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 Özellikleri | faktorizasyon türü |
|---|---|
| Pozitif belirli | Cholesky (bkz. cholesky) |
| Yoğun Simetrik/Hermitian | Bunch-Kaufman (bkz. bunchkaufman) |
| Seyrek Simetrik/Hermitian | LDLt (bkz. ldlt) |
| Üçgen | Üçgen |
| Diyagonal | Diyagonal |
| Bidiagonal | Bidiagonal |
| Tridiagonal | LU (bkz. lu) |
| Simetrik reel tridiagonal | LDLt (bkz. ldlt) |
| Genel kare | LU (bkz. lu) |
| Genel kare olmayan | QR (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.0Bu, 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.
LinearAlgebra.Diagonal — TypeDiagonal(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 ⋅
⋅ 1Tek 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.0Diagonal(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 ⋅
⋅ 5Diagonal{T}(undef, n)Başlangıç değeri verilmemiş Diagonal{T} nesnesi oluşturur ve uzunluğu n'dir. undef'e bakın.
LinearAlgebra.Bidiagonal — TypeBidiagonal(dv::V, ev::V, uplo::Symbol) where V <: AbstractVectorVerilen 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 4Bidiagonal(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 4LinearAlgebra.SymTridiagonal — TypeSymTridiagonal(dv::V, ev::V) where V <: AbstractVectorDiyagonal (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 4SymTridiagonal(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]LinearAlgebra.Tridiagonal — TypeTridiagonal(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.
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 0Tridiagonal(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 4LinearAlgebra.Symmetric — TypeSimetrik(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.0Supper'ın Slower ile eşit olmayacağını unutmayın, eğer A kendisi simetrik değilse (örneğin, A == transpose(A) ise).
LinearAlgebra.Hermitian — TypeHermitian(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.0imHupper'ı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)LinearAlgebra.LowerTriangular — TypeLowerTriangular(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.0LinearAlgebra.UpperTriangular — TypeUpperTriangular(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.0LinearAlgebra.UnitLowerTriangular — TypeUnitLowerTriangular(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.0LinearAlgebra.UnitUpperTriangular — TypeUnitUpperTriangular(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.0LinearAlgebra.UpperHessenberg — TypeUpperHessenberg(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.
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 16LinearAlgebra.UniformScaling — TypeUniformScaling{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.
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.0LinearAlgebra.I — ConstantIHerhangi 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+0imLinearAlgebra.UniformScaling — Method(I::UniformScaling)(n::Integer)Bir UniformScaling'den bir Diagonal matris oluşturur.
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.7LinearAlgebra.Factorization — TypeLinearAlgebra.Factorizationmatris faktorizasyonları yani matris ayrıştırmaları için soyut tür. Mevcut matris faktorizasyonlarının bir listesi için çevrimiçi belgeler kısmına bakın.
LinearAlgebra.LU — TypeLU <: FactorizasyonKare 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şen | Açıklama |
|---|---|
F.L | LU'nun L (birim alt üçgen) kısmı |
F.U | LU'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
trueLinearAlgebra.lu — Functionlu(A::AbstractSparseMatrixCSC; check = true, q = nothing, control = get_umfpack_control()) -> F::UmfpackLUSeyrek 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 etFaktorizasyonun F bireysel bileşenlerine indeksleme ile erişilebilir:
| Bileşen | Açıklama |
|---|---|
L | LU'nun L (alt üçgen) kısmı |
U | LU'nun U (üst üçgen) kısmı |
p | sağ permütasyon Vector |
q | sol 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.
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.
lu(A, pivot = RowMaximum(); check = true, allowsingular = false) -> F::LUA'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 deabsve<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 veiszerodestekleyen ancakabsveya<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, hattaallowsingular = trueolsa bile).
Faktorizasyonun bireysel bileşenlerine getproperty aracılığıyla erişilebilir:
| Bileşen | Açıklama |
|---|---|
F.L | LU'nun L (alt üçgen) kısmı |
F.U | LU'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şlev | LU | LU{T,Tridiagonal{T}} |
|---|---|---|
/ | ✓ | |
\ | ✓ | ✓ |
inv | ✓ | ✓ |
det | ✓ | ✓ |
logdet | ✓ | ✓ |
logabsdet | ✓ | ✓ |
size | ✓ | ✓ |
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.0LinearAlgebra.lu! — Functionlu!(F::UmfpackLU, A::AbstractSparseMatrixCSC; check=true, reuse_symbolic=true, q=nothing) -> F::UmfpackLUSeyrek 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
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.
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.0lu!(A, pivot = RowMaximum(); check = true, allowsingular = false) -> LUlu! 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.
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:
[...]LinearAlgebra.Cholesky — TypeCholesky <: FactorizasyonYoğ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
trueLinearAlgebra.CholeskyPivoted — TypeCholeskyPivotedYoğ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
trueLinearAlgebra.cholesky — Functioncholesky(A, NoPivot(); check = true) -> CholeskyYoğ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
truecholesky(A, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivotedYoğ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
truecholesky(A::SparseMatrixCSC; shift = 0.0, check = true, perm = nothing) -> CHOLMOD.FactorSı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
trueBu 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.
LinearAlgebra.cholesky! — Functioncholesky!(A::AbstractMatrix, NoPivot(); check = true) -> Choleskycholesky 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:
[...]cholesky!(A::AbstractMatrix, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivotedcholesky 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.
cholesky!(F::CHOLMOD.Factor, A::SparseMatrixCSC; shift = 0.0, check = true) -> CHOLMOD.FactorA'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.
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.
LinearAlgebra.lowrankupdate — Functionlowrankupdate(C::Cholesky, v::AbstractVector) -> CC::CholeskyBir 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.
lowrankupdate(F::CHOLMOD.Factor, C::AbstractArray) -> FF::CHOLMOD.FactorBir 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!.
LinearAlgebra.lowrankdowndate — Functionlowrankdowndate(C::Cholesky, v::AbstractVector) -> CC::CholeskyBir 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.
lowrankdowndate(F::CHOLMOD.Factor, C::AbstractArray) -> FF::CHOLMOD.FactorBir 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!.
LinearAlgebra.lowrankupdate! — Functionlowrankupdate!(C::Cholesky, v::AbstractVector) -> CC::CholeskyBir 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.
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!.
LinearAlgebra.lowrankdowndate! — Functionlowrankdowndate!(C::Cholesky, v::AbstractVector) -> CC::CholeskyBir 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.
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!.
LinearAlgebra.LDLt — TypeLDLt <: FactorizasyonGerç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şen | Açıklama |
|---|---|
F.L | LDLt'nin L (birim alt üçgen) kısmı |
F.D | LDLt'nin D (diyagonal) kısmı |
F.Lt | LDLt'nin Lt (birim üst üçgen) kısmı |
F.d | D'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.90909LinearAlgebra.ldlt — Functionldlt(S::SymTridiagonal) -> LDLtGerç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.3488372093023255ldlt(A::SparseMatrixCSC; shift = 0.0, check = true, perm=nothing) -> CHOLMOD.FactorSı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).
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.
LinearAlgebra.ldlt! — Functionldlt!(S::SymTridiagonal) -> LDLtldlt 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.90909ldlt!(F::CHOLMOD.Factor, A::SparseMatrixCSC; shift = 0.0, check = true) -> CHOLMOD.FactorA'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.
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.
LinearAlgebra.QR — TypeQR <: FactorizationBir 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×nboyutunda bir matristir.- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
R = triu(F.factors)birQRnesnesiFiç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.
- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
τ, $au_i$ katsayılarını içerenmin(m,n)uzunluğunda bir vektördür.
LinearAlgebra.QRCompactWY — TypeQRCompactWY <: FactorizationKompakt 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,QRtüründe olduğu gibi, birm×nmatristir.- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
R = triu(F.factors)birQRnesnesiFiçin. - Alt diyagonal kısmı,
V = I + tril(F.factors, -1)şeklinde paketlenmiş formatta saklanan yansıtıcılar $v_i$'yi içerir.
- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
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.
Bu format, daha eski WY temsil biçimi ile karıştırılmamalıdır [Bischof1987].
LinearAlgebra.QRPivoted — TypeQRPivoted <: FactorizationSü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×nboyutunda bir matristir.- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
R = triu(F.factors)birQRnesnesiFiç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.
- Üst üçgen kısmı $R$'nin elemanlarını içerir, yani
τ, $au_i$ katsayılarını içerenmin(m,n)uzunluğunda bir vektördür.jpvt, permütasyon $P$'ye karşılık gelennuzunluğunda bir tam sayı vektörüdür.
LinearAlgebra.qr — Functionqr(A::SparseMatrixCSC; tol=_default_tol(A), ordering=ORDERING_DEFAULT) -> QRSparseSeyrek 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].
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
2qr(A, pivot = NoPivot(); blocksize) -> FMatris 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()iseFbirQRPivotednesnesidir,- A'nın eleman türü bir BLAS türü (
Float32,Float64,ComplexF32veyaComplexF64) ise,FbirQRCompactWYnesnesidir, - aksi takdirde
FbirQRnesnesidir.
Faktorizasyonun bireysel bileşenleri F üzerinden özellik erişimcileri ile alınabilir:
F.Q: ortogonal/ünite matrisQF.R: üst üçgen matrisRF.p: pivotun permütasyon vektörü (QRPivotedyalnızca)F.P: pivotun permütasyon matris (QRPivotedyalnızca)
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.
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
trueqr 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.
LinearAlgebra.qr! — Functionqr!(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.
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:
[...]LinearAlgebra.LQ — TypeLQ <: FactorizasyonBir 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
trueLinearAlgebra.lq — Functionlq(A) -> S::LQA'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
trueLinearAlgebra.lq! — Functionlq!(A) -> LQA matrisinin LQ faktorizasyonunu hesaplayın, girdi matrisini bir çalışma alanı olarak kullanarak. Ayrıca lq ile de bakın.
LinearAlgebra.BunchKaufman — TypeBunchKaufman <: FactorizationSimetrik 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
1LinearAlgebra.bunchkaufman — Functionbunchkaufman(A, rook::Bool=false; check = true) -> S::BunchKaufmanBir 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.0LinearAlgebra.bunchkaufman! — Functionbunchkaufman!(A, rook::Bool=false; check = true) -> BunchKaufmanbunchkaufman!, bunchkaufman ile aynıdır, ancak girişi A üzerine yazarak alan tasarrufu sağlar, kopya oluşturmaktansa.
LinearAlgebra.Eigen — TypeEigen <: FactorizationKare 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
trueLinearAlgebra.GeneralizedEigen — TypeGenelleştirilmişEigen <: FaktörizasyonA 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
trueLinearAlgebra.eigvals — Functioneigvals(A; permute::Bool=true, scale::Bool=true, sortby) -> valuesA'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.0Bir skalar girdi için, eigvals bir skalar döndürecektir.
Örnekler
julia> eigvals(-2)
-2eigvals(A, B) -> değerlerA 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.0imeigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> valuesA'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.140054944640259eigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> valuesA'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.140054944640259LinearAlgebra.eigvals! — Functioneigvals!(A; permute::Bool=true, scale::Bool=true, sortby) -> valueseigvals 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.
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.37228eigvals!(A, B; sortby) -> valueseigvals ile aynı, ancak kopyalar oluşturmak yerine giriş A (ve B) üzerine yazarak alan tasarrufu sağlar.
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.0eigvals!(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> valueseigvals 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.
eigvals!(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> valueseigvals 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.
LinearAlgebra.eigmax — Functioneigmax(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:
[...]LinearAlgebra.eigmin — Functioneigmin(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:
[...]LinearAlgebra.eigvecs — Functioneigvecs(A::SymTridiagonal[, eigvals]) -> MatrixBir 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.5547001962252291eigvecs(A; permute::Bool=true, scale::Bool=true, `sortby`) -> MatrixA'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.0eigvecs(A, B) -> MatrixBir 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.0imLinearAlgebra.eigen — Functioneigen(A; permute::Bool=true, scale::Bool=true, sortby) -> EigenA'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
trueeigen(A, B; sortby) -> GenelleşmişEigenA 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
trueeigen(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> EigenA'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.
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.
eigen(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> EigenA'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.
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.
LinearAlgebra.eigen! — Functioneigen!(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.
LinearAlgebra.Hessenberg — TypeHessenberg <: FaktörizasyonBir 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. ```
LinearAlgebra.hessenberg — Functionhessenberg(A) -> HessenbergA'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
trueLinearAlgebra.hessenberg! — Functionhessenberg!(A) -> Hessenberghessenberg! hessenberg ile aynıdır, ancak girişi A üzerine yazarak bir kopya oluşturmak yerine alan tasarrufu sağlar.
LinearAlgebra.Schur — TypeSchur <: FactorizasyonBir 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
trueLinearAlgebra.GeneralizedSchur — TypeGenelleş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.
LinearAlgebra.schur — Functionschur(A) -> F::SchurMatris 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
trueschur(A, B) -> F::GenelleştirilmişSchurMatrislerin 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.
LinearAlgebra.schur! — Functionschur!(A) -> F::SchurGirdi 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.0schur!(A::StridedMatrix, B::StridedMatrix) -> F::GeneralizedSchurschur ile aynı, ancak giriş matrisleri A ve B çalışma alanı olarak kullanılır.
LinearAlgebra.ordschur — Functionordschur(F::Schur, select::Union{Vector{Bool},BitVector}) -> F::SchurBir 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.
ordschur(F::GeneralizedSchur, select::Union{Vector{Bool},BitVector}) -> F::GeneralizedSchurBir 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.
LinearAlgebra.ordschur! — Functionordschur!(F::Schur, select::Union{Vector{Bool},BitVector}) -> F::Schurordschur ile aynı, ancak faktorizasyonu F üzerine yazar.
ordschur!(F::GenelleştirilmişSchur, select::Union{Vector{Bool},BitVector}) -> F::GenelleştirilmişSchurAynı ordschur gibi, ancak faktorizasyonu F ile üzerine yazar.
LinearAlgebra.SVD — TypeSVD <: FactorizationBir 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
trueLinearAlgebra.GeneralizedSVD — TypeGenelleş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,
UM-by-M ortogonal bir matristir,VP-by-P ortogonal bir matristir,QN-by-N ortogonal bir matristir,D1ilk 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,R0sağ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.0LinearAlgebra.svd — Functionsvd(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVDA'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.
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
truesvd(A, B) -> GenelSVDA 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.
UM-by-M ortogonal bir matristir,VP-by-P ortogonal bir matristir,QN-by-N ortogonal bir matristir,D1ilk 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,R0sağ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
trueLinearAlgebra.svd! — Functionsvd!(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVDsvd!, 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.
svd!(A, B) -> Genel SVDsvd!, 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.
LinearAlgebra.svdvals — Functionsvdvals(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.0svdvals(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.0LinearAlgebra.svdvals! — Functionsvdvals!(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.
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.
LinearAlgebra.Givens — TypeLinearAlgebra.Givens(i1,i2,c,s) -> GBir 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.
LinearAlgebra.givens — Functiongivens(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*xsonucunun şu özelliğe sahip olmasını sağlar:
y[i1] = r
y[i2] = 0Ayrıca bkz. LinearAlgebra.Givens.
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] = 0Ayrıca bkz. LinearAlgebra.Givens.
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] = 0Ayrıca bkz. LinearAlgebra.Givens.
LinearAlgebra.triu — Functiontriu(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.0triu(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.0LinearAlgebra.triu! — Functiontriu!(M)Bir matrisin üst üçgeni, bu süreçte M'yi üzerine yazar. Ayrıca bkz. triu.
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 0LinearAlgebra.tril — Functiontril(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.0tril(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.0LinearAlgebra.tril! — Functiontril!(M)Bir matrisin alt üçgenini alır, bu süreçte M'yi üzerine yazar. Ayrıca bkz. tril.
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 5LinearAlgebra.diagind — Functiondiagind(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)Bir IndexStyle belirtmek en az Julia 1.11 gerektirir.
LinearAlgebra.diag — Functiondiag(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
6LinearAlgebra.diagm — Functiondiagm(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 ```
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 3LinearAlgebra.rank — Functionrank(::QRSparse{Tv,Ti}) -> TiQR faktorizasyonunun derecesini döndürür
rank(S::SparseMatrixCSC{Tv,Ti}; [tol::Real]) -> TiS'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.
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.
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.
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)
1LinearAlgebra.norm — Functionnorm(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)
truenorm(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.0LinearAlgebra.opnorm — Functionopnorm(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.0opnorm(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.
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.0LinearAlgebra.normalize! — Functionnormalize!(a::AbstractArray, p::Real=2)Diziyi a'yı, p-normunun bir eşit olacak şekilde yerinde normalize et, yani norm(a, p) == 1. Ayrıca bkz. normalize ve norm.
LinearAlgebra.normalize — Functionnormalize(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)
NaNLinearAlgebra.cond — Functioncond(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.
LinearAlgebra.condskeel — Functioncondskeel(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.
LinearAlgebra.tr — Functiontr(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)
5LinearAlgebra.det — Functiondet(M)Matris determinantı.
Ayrıca bakınız: logdet ve logabsdet.
Örnekler
julia> M = [1 0; 2 2]
2×2 Matrix{Int64}:
1 0
2 2
julia> det(M)
2.0LinearAlgebra.logdet — Functionlogdet(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.0LinearAlgebra.logabsdet — Functionlogabsdet(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)Base.inv — Methodinv(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)
trueLinearAlgebra.pinv — Functionpinv(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
pinv(M, rtol::Real) = pinv(M; rtol=rtol) # to be deprecated in Julia 2.0Moore-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.0LinearAlgebra.nullspace — Functionnullspace(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 ```
Base.kron — Functionkron(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 10Base.kron! — Functionkron!(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.
Bu fonksiyon Julia 1.6 veya daha yenisini gerektirir.
Base.exp — Methodexp(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.71828Base.cis — Methodcis(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.
Matrislerle cis kullanma desteği Julia 1.7'de eklendi.
Örnekler
julia> cis([π 0; 0 π]) ≈ -I
trueBase.:^ — 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 27Base.:^ — Method^(b::Number, A::AbstractMatrix)Matris üstel, $\exp(\log(b)A)$ ile eşdeğerdir.
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.0855Base.log — Methodlog(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.0Base.sqrt — Method√(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.0sqrt(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.0Base.Math.cbrt — Methodcbrt(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
trueBase.cos — Methodcos(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.291927Base.sin — Methodsin(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.454649Base.Math.sincos — Methodsincos(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.291927Base.tan — Methodtan(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.09252Base.Math.sec — Methodsec(A::AbstractMatrix)Kare matris A'nın matris sekantını hesaplar.
Base.Math.csc — Methodcsc(A::AbstractMatrix)Kare matris A'nın matris koskecantını hesaplar.
Base.Math.cot — Methodcot(A::AbstractMatrix)Kare matris A'nın kotanjantını hesaplar.
Base.cosh — Methodcosh(A::AbstractMatrix)Bir kare matris A'nın matris hiperbolik kosinüsünü hesaplar.
Base.sinh — Methodsinh(A::AbstractMatrix)Bir kare matris A'nın matris hiperbolik sinüsünü hesaplar.
Base.tanh — Methodtanh(A::AbstractMatrix)Bir kare matris A'nın matris hiperbolik tanjantını hesaplar.
Base.Math.sech — Methodsech(A::AbstractMatrix)Kare matris A'nın hiperbolik secantını hesaplar.
Base.Math.csch — Methodcsch(A::AbstractMatrix)Kare matris A'nın hiperbolik cosecant'ını hesaplar.
Base.Math.coth — Methodcoth(A::AbstractMatrix)Kare matris A'nın hiperbolik kotanjantını hesaplar.
Base.acos — Methodacos(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-16imBase.asin — Methodasin(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-16imBase.atan — Methodatan(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-17imBase.Math.asec — Methodasec(A::AbstractMatrix)A'nın ters matris sekantını hesaplar.
Base.Math.acsc — Methodacsc(A::AbstractMatrix)A matrisinin ters matris kosekanti hesaplanır.
Base.Math.acot — Methodacot(A::AbstractMatrix)A matrisinin ters kotanjantını hesaplar.
Base.acosh — Methodacosh(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].
Base.asinh — Methodasinh(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].
Base.atanh — Methodatanh(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].
Base.Math.asech — Methodasech(A::AbstractMatrix)A'nın ters matris hiperbolik sekantını hesaplar.
Base.Math.acsch — Methodacsch(A::AbstractMatrix)A'n ters matris hiperbolik kosinüsünü hesaplar.
Base.Math.acoth — Methodacoth(A::AbstractMatrix)A'nın ters matris hiperbolik kotanjantını hesaplar.
LinearAlgebra.lyap — Functionlyap(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
trueLinearAlgebra.sylvester — Functionsylvester(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
trueLinearAlgebra.issuccess — Functionissuccess(F::Factorization)Bir matrisin faktorizasyonunun başarılı olup olmadığını test eder.
issuccess(::CholeskyPivoted) Julia 1.6 veya daha yenisini gerektirir.
Örnekler
julia> F = cholesky([1 0; 0 1]);
julia> issuccess(F)
trueissuccess(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.
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)
trueLinearAlgebra.issymmetric — Functionissymmetric(A) -> BoolBir 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)
falseLinearAlgebra.isposdef — Functionisposdef(A) -> BoolBir 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)
trueLinearAlgebra.isposdef! — Functionisposdef!(A) -> BoolBir 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.78233LinearAlgebra.istril — Functionistril(A::AbstractMatrix, k::Integer = 0) -> BoolA'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)
trueLinearAlgebra.istriu — Functionistriu(A::AbstractMatrix, k::Integer = 0) -> BoolA'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)
trueLinearAlgebra.isdiag — Functionisdiag(A) -> BoolBir 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)
falseLinearAlgebra.ishermitian — Functionishermitian(A) -> BoolBir 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)
trueBase.transpose — Functiontranspose(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 0Karmaşı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))
trueBir 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
14Matrislerden 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]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.
LinearAlgebra.transpose! — Functiontranspose!(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.
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+6imLinearAlgebra.Transpose — TypeTranspozeTemel 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 0LinearAlgebra.TransposeFactorization — TypeTransposeFactorizationTemel Factorization nesnesinin transpozu için tembel sarmalayıcı türü. Genellikle, TransposeFactorization yapıcısı doğrudan çağrılmamalıdır, bunun yerine transpose(:: Factorization) kullanın.
Base.adjoint — FunctionA'
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+0imGerç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)
trueBir 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 + 0imMatrislerin 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]adjoint(F::Factorization)Faktorizasyon F'nin tembel adjoint'u. Varsayılan olarak, bir AdjointFactorization sarmalayıcı döner.
LinearAlgebra.adjoint! — Functionadjoint!(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.
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+6imLinearAlgebra.Adjoint — TypeAdjointTemel 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+0imLinearAlgebra.AdjointFactorization — TypeAdjointFactorizationTemel Factorization nesnesinin adjoint'u için tembel sarmalayıcı türü. Genellikle, AdjointFactorization yapıcı fonksiyonu doğrudan çağrılmamalıdır, bunun yerine adjoint(:: Factorization) kullanın.
Base.copy — Methodcopy(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+0imLinearAlgebra.stride1 — Functionstride1(A) -> IntBaş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)
2LinearAlgebra.checksquare — FunctionLinearAlgebra.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
5LinearAlgebra.peakflops — FunctionLinearAlgebra.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.
Bu fonksiyon en az Julia 1.1 gerektirir. Julia 1.0'da standart kütüphane InteractiveUtils'dan mevcuttur.
LinearAlgebra.hermitianpart — Functionhermitianpart(A::AbstractMatrix, uplo::Symbol=:U) -> HermitianKare 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.
Bu fonksiyon Julia 1.10 veya daha yenisini gerektirir.
LinearAlgebra.hermitianpart! — Functionhermitianpart!(A::AbstractMatrix, uplo::Symbol=:U) -> HermitianKare 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.
Bu fonksiyon Julia 1.10 veya daha yenisini gerektirir.
LinearAlgebra.copy_adjoint! — Functioncopy_adjoint!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> BMatris 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.
LinearAlgebra.copy_transpose! — Functioncopy_transpose!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> BMatris 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.
copy_transpose!(B::AbstractMatrix, ir_dest::AbstractUnitRange, jr_dest::AbstractUnitRange,
tM::AbstractChar,
M::AbstractVecOrMat, ir_src::AbstractUnitRange, jr_src::AbstractUnitRange) -> BMatris M'nin elemanlarını B'ye, karakter parametresi tM'ye bağlı olarak verimli bir şekilde kopyalayın:
tM | Hedef | Kaynak |
|---|---|---|
'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.
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! — Functionmul!(Y, A, B) -> YMatris-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
trueUygulama
Ö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.
mul!(C, A, B, α, β) -> CBirleş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.
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 * β
trueLinearAlgebra.lmul! — Functionlmul!(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'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}:
NaNlmul!(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.0LinearAlgebra.rmul! — Functionrmul!(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'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}:
NaNrmul!(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.0LinearAlgebra.ldiv! — Functionldiv!(Y, A, B) -> YA \ 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.
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
trueldiv!(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.
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
trueldiv!(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.0ldiv!(A::Tridiagonal, B::AbstractVecOrMat) -> BA \ 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.
Tridiagonal sol tarafları için ldiv!, en az Julia 1.11 gerektirir.
LinearAlgebra.rdiv! — Functionrdiv!(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.
Diagonal ve UpperTriangular gibi belirli yapılandırılmış matris türlerine izin verilmektedir, çünkü bunlar zaten faktörize edilmiş bir formdadır.
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.0BLAS 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
side | Meaning |
|---|---|
'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/ul | Meaning |
|---|---|
'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/tX | Meaning |
|---|---|
'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/dX | Meaning |
|---|---|
'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 — ModuleBLAS alt programlarına arayüz.
LinearAlgebra.BLAS.set_num_threads — Functionset_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.
LinearAlgebra.BLAS.get_num_threads — Functionget_num_threads()BLAS kütüphanesinin kullandığı iş parçacığı sayısını alır.
get_num_threads en az Julia 1.6 gerektirir.
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! — Functionrot!(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.
rot! en az Julia 1.5 gerektirir.
LinearAlgebra.BLAS.scal! — Functionscal!(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.
LinearAlgebra.BLAS.scal — Functionscal(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.
LinearAlgebra.BLAS.blascopy! — Functionblascopy!(n, X, incx, Y, incy)Dizi X'in incx adımındaki n elemanını dizi Y'ye incy adımıyla kopyalar. Y'yi döner.
LinearAlgebra.BLAS.dot — Functiondot(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.0LinearAlgebra.BLAS.dotu — Functiondotu(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.0imLinearAlgebra.BLAS.dotc — Functiondotc(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.0imLinearAlgebra.BLAS.nrm2 — Functionnrm2(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.0LinearAlgebra.BLAS.asum — Functionasum(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.0LinearAlgebra.BLAS.iamax — Functioniamax(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.
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! — Functiongemv!(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.
LinearAlgebra.BLAS.gemv — Methodgemv(tA, alpha, A, x)alpha*A*x veya alpha*A'x döndürür tA ile ilgili olarak. alpha bir skalar.
LinearAlgebra.BLAS.gemv — Methodgemv(tA, A, x)A*x veya A'x döndürün tA ile ilgili.
LinearAlgebra.BLAS.gbmv! — Functiongbmv!(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.
LinearAlgebra.BLAS.gbmv — Functiongbmv(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.
LinearAlgebra.BLAS.hemv! — Functionhemv!(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.
LinearAlgebra.BLAS.hemv — Methodhemv(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.
LinearAlgebra.BLAS.hemv — Methodhemv(ul, A, x)A*x döndür. A'nın Hermit olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır.
LinearAlgebra.BLAS.hpmv! — Functionhpmv!(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.
hpmv! en az Julia 1.5 gerektirir.
LinearAlgebra.BLAS.symv! — Functionsymv!(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.
LinearAlgebra.BLAS.symv — Methodsymv(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.
LinearAlgebra.BLAS.symv — Methodsymv(ul, A, x)A*x döndür. A'nın simetrik olduğu varsayılmaktadır. Sadece ul üçgeni A'nın kullanılır.
LinearAlgebra.BLAS.sbmv! — Functionsbmv!(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.
LinearAlgebra.BLAS.sbmv — Methodsbmv(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.
LinearAlgebra.BLAS.sbmv — Methodsbmv(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.
LinearAlgebra.BLAS.spmv! — Functionspmv!(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.
spmv! en az Julia 1.5 gerektirir.
LinearAlgebra.BLAS.trmv! — Functiontrmv!(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.
LinearAlgebra.BLAS.trmv — Functiontrmv(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.
LinearAlgebra.BLAS.trsv! — Functiontrsv!(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.
LinearAlgebra.BLAS.trsv — Functiontrsv(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.
bir matris döndür
LinearAlgebra.BLAS.ger! — Functionger!(alpha, x, y, A)Matris A'yı alpha*x*y' + A şeklinde x ve y vektörleri ile Rank-1 güncellemesi.
LinearAlgebra.BLAS.her! — Functionher!(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.
LinearAlgebra.BLAS.syr! — Functionsyr!(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.
LinearAlgebra.BLAS.spr! — Functionspr!(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.
spr! en az Julia 1.8 gerektirir.
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! — Functiongemmt!(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.
gemmt! en az Julia 1.11 gerektirir.
LinearAlgebra.BLAS.gemmt — Methodgemmt(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.
gemmt en az Julia 1.11 gerektirir.
LinearAlgebra.BLAS.gemmt — Methodgemmt(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.
gemmt en az Julia 1.11 gerektirir.
LinearAlgebra.BLAS.gemm! — Functiongemm!(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.
LinearAlgebra.BLAS.gemm — Methodgemm(tA, tB, alpha, A, B)alpha*A*B veya tA ve tB'ye göre diğer üç varyantı döndür.
LinearAlgebra.BLAS.gemm — Methodgemm(tA, tB, A, B)A*B veya tA ve tB'ye göre diğer üç varyantı döndür.
LinearAlgebra.BLAS.symm! — Functionsymm!(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.
LinearAlgebra.BLAS.symm — Methodsymm(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.
LinearAlgebra.BLAS.symm — Methodsymm(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.
LinearAlgebra.BLAS.hemm! — Functionhemm!(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.
LinearAlgebra.BLAS.hemm — Methodhemm(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.
LinearAlgebra.BLAS.hemm — Methodhemm(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.
LinearAlgebra.BLAS.syrk! — Functionsyrk!(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.
LinearAlgebra.BLAS.syrk — Functionsyrk(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.
LinearAlgebra.BLAS.herk! — Functionherk!(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.
LinearAlgebra.BLAS.herk — Functionherk(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.
LinearAlgebra.BLAS.syr2k! — Functionsyr2k!(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.
LinearAlgebra.BLAS.syr2k — Functionsyr2k(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.
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.
LinearAlgebra.BLAS.her2k! — Functionher2k!(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.
LinearAlgebra.BLAS.her2k — Functionher2k(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.
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.
LinearAlgebra.BLAS.trmm! — Functiontrmm!(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.
LinearAlgebra.BLAS.trmm — Functiontrmm(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.
LinearAlgebra.BLAS.trsm! — Functiontrsm!(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.
LinearAlgebra.BLAS.trsm — Functiontrsm(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.
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 — ModuleLAPACK alt programlarına arayüzler.
LinearAlgebra.LAPACK.gbtrf! — Functiongbtrf!(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.
LinearAlgebra.LAPACK.gbtrs! — Functiongbtrs!(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.
LinearAlgebra.LAPACK.gebal! — Functiongebal!(iş, A) -> (ilo, ihi, ölçek)Matris A'yı özdeğer sistemi veya Schur faktorizasyonu hesaplamadan önce dengeleyin. iş, 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.
LinearAlgebra.LAPACK.gebak! — Functiongebak!(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.
LinearAlgebra.LAPACK.gebrd! — Functiongebrd!(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.
LinearAlgebra.LAPACK.gelqf! — Functiongelqf!(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.
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.
LinearAlgebra.LAPACK.geqlf! — Functiongeqlf!(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.
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.
LinearAlgebra.LAPACK.geqrf! — Functiongeqrf!(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.
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.
LinearAlgebra.LAPACK.geqp3! — Functiongeqp3!(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.
LinearAlgebra.LAPACK.gerqf! — Functiongerqf!(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.
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.
LinearAlgebra.LAPACK.geqrt! — Functiongeqrt!(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.
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.
LinearAlgebra.LAPACK.geqrt3! — Functiongeqrt3!(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.
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.
LinearAlgebra.LAPACK.getrf! — Functiongetrf!(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.
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).
LinearAlgebra.LAPACK.tzrzf! — Functiontzrzf!(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.
LinearAlgebra.LAPACK.ormrz! — Functionormrz!(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.
LinearAlgebra.LAPACK.gels! — Functiongels!(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.
LinearAlgebra.LAPACK.gesv! — Functiongesv!(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.
LinearAlgebra.LAPACK.getrs! — Functiongetrs!(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.
LinearAlgebra.LAPACK.getri! — Functiongetri!(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.
LinearAlgebra.LAPACK.gesvx! — Functiongesvx!(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.
gesvx!(A, B)gesvx!'nin dengelememe, transpoze etmeme basitleştirmesi.
LinearAlgebra.LAPACK.gelsd! — Functiongelsd!(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.
LinearAlgebra.LAPACK.gelsy! — Functiongelsy!(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.
LinearAlgebra.LAPACK.gglse! — Functiongglse!(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.
LinearAlgebra.LAPACK.geev! — Functiongeev!(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.
LinearAlgebra.LAPACK.gesdd! — Functiongesdd!(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.
LinearAlgebra.LAPACK.gesvd! — Functiongesvd!(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.
LinearAlgebra.LAPACK.ggsvd! — Functionggsvd!(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.
LinearAlgebra.LAPACK.ggsvd3! — Functionggsvd3!(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.
LinearAlgebra.LAPACK.geevx! — Functiongeevx!(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.
LinearAlgebra.LAPACK.ggev! — Functionggev!(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.
LinearAlgebra.LAPACK.ggev3! — Functionggev3!(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.
LinearAlgebra.LAPACK.gtsv! — Functiongtsv!(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.
LinearAlgebra.LAPACK.gttrf! — Functiongttrf!(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.
LinearAlgebra.LAPACK.gttrs! — Functiongttrs!(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.
LinearAlgebra.LAPACK.orglq! — Functionorglq!(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.
LinearAlgebra.LAPACK.orgqr! — Functionorgqr!(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.
LinearAlgebra.LAPACK.orgql! — Functionorgql!(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.
LinearAlgebra.LAPACK.orgrq! — Functionorgrq!(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.
LinearAlgebra.LAPACK.ormlq! — Functionormlq!(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.
LinearAlgebra.LAPACK.ormqr! — Functionormqr!(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.
LinearAlgebra.LAPACK.ormql! — Functionormql!(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.
LinearAlgebra.LAPACK.ormrq! — Functionormrq!(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.
LinearAlgebra.LAPACK.gemqrt! — Functiongemqrt!(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.
LinearAlgebra.LAPACK.posv! — Functionposv!(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.
LinearAlgebra.LAPACK.potrf! — Functionpotrf!(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.
LinearAlgebra.LAPACK.potri! — Functionpotri!(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.
LinearAlgebra.LAPACK.potrs! — Functionpotrs!(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.
LinearAlgebra.LAPACK.pstrf! — Functionpstrf!(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.
LinearAlgebra.LAPACK.ptsv! — Functionptsv!(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.
LinearAlgebra.LAPACK.pttrf! — Functionpttrf!(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.
LinearAlgebra.LAPACK.pttrs! — Functionpttrs!(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.
LinearAlgebra.LAPACK.trtri! — Functiontrtri!(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.
LinearAlgebra.LAPACK.trtrs! — Functiontrtrs!(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.
LinearAlgebra.LAPACK.trcon! — Functiontrcon!(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.
LinearAlgebra.LAPACK.trevc! — Functiontrevc!(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.
LinearAlgebra.LAPACK.trrfs! — Functiontrrfs!(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.
LinearAlgebra.LAPACK.stev! — Functionstev!(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.
LinearAlgebra.LAPACK.stebz! — Functionstebz!(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.
LinearAlgebra.LAPACK.stegr! — Functionstegr!(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.
LinearAlgebra.LAPACK.stein! — Functionstein!(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.
LinearAlgebra.LAPACK.syconv! — Functionsyconv!(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.
LinearAlgebra.LAPACK.sysv! — Functionsysv!(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.
LinearAlgebra.LAPACK.sytrf! — Functionsytrf!(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.
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.
LinearAlgebra.LAPACK.sytri! — Functionsytri!(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.
LinearAlgebra.LAPACK.sytrs! — Functionsytrs!(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.
LinearAlgebra.LAPACK.hesv! — Functionhesv!(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.
LinearAlgebra.LAPACK.hetrf! — Functionhetrf!(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.
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.
LinearAlgebra.LAPACK.hetri! — Functionhetri!(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.
LinearAlgebra.LAPACK.hetrs! — Functionhetrs!(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.
LinearAlgebra.LAPACK.syev! — Functionsyev!(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.
LinearAlgebra.LAPACK.syevr! — Functionsyevr!(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.
LinearAlgebra.LAPACK.syevd! — Functionsyevd!(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.
LinearAlgebra.LAPACK.sygvd! — Functionsygvd!(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.
LinearAlgebra.LAPACK.bdsqr! — Functionbdsqr!(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.
LinearAlgebra.LAPACK.bdsdc! — Functionbdsdc!(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.
LinearAlgebra.LAPACK.gecon! — Functiongecon!(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.
LinearAlgebra.LAPACK.gehrd! — Functiongehrd!(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.
LinearAlgebra.LAPACK.orghr! — Functionorghr!(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.
LinearAlgebra.LAPACK.gees! — Functiongees!(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.
LinearAlgebra.LAPACK.gges! — Functiongges!(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.
LinearAlgebra.LAPACK.gges3! — Functiongges3!(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.
LinearAlgebra.LAPACK.trexc! — Functiontrexc!(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.
LinearAlgebra.LAPACK.trsen! — Functiontrsen!(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.
LinearAlgebra.LAPACK.tgsen! — Functiontgsen!(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.
LinearAlgebra.LAPACK.trsyl! — Functiontrsyl!(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.
LinearAlgebra.LAPACK.hseqr! — Functionhseqr!(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.
- 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