Linear Algebra

Además de (y como parte de) su soporte para arreglos multidimensionales, Julia proporciona implementaciones nativas de muchas operaciones de álgebra lineal comunes y útiles que se pueden cargar con using LinearAlgebra. Las operaciones básicas, como tr, det y inv son todas compatibles:

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

julia> tr(A)
3

julia> det(A)
104.0

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

Así como otras operaciones útiles, como encontrar valores propios o vectores propios:

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

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

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

Además, Julia proporciona muchas factorizations que se pueden utilizar para acelerar problemas como la resolución lineal o la exponenciación de matrices al pre-factorizar una matriz en una forma más adecuada (por razones de rendimiento o memoria) para el problema. Consulte la documentación sobre factorize para obtener más información. Como ejemplo:

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

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

Dado que A no es hermítica, simétrica, triangular, tridiagonal o bidiagonal, una factorización LU puede ser lo mejor que podamos hacer. Comparar con:

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

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

Aquí, Julia pudo detectar que B es en realidad simétrico y utilizó una factorización más apropiada. A menudo es posible escribir código más eficiente para una matriz que se sabe que tiene ciertas propiedades, por ejemplo, que es simétrica o tridiagonal. Julia proporciona algunos tipos especiales para que puedas "etiquetar" matrices como que tienen estas propiedades. Por ejemplo:

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

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

sB ha sido etiquetada como una matriz que es (real) simétrica, por lo que para las operaciones posteriores que podríamos realizar en ella, como la eigenfactorización o el cálculo de productos matriz-vector, se pueden encontrar eficiencias al referirse solo a la mitad de ella. Por ejemplo:

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

La operación \ aquí realiza la solución lineal. El operador de división a la izquierda es bastante poderoso y es fácil escribir código compacto y legible que sea lo suficientemente flexible como para resolver todo tipo de sistemas de ecuaciones lineales.

Special matrices

Matrices with special symmetries and structures surgen a menudo en álgebra lineal y se asocian frecuentemente con varias factorizaciones de matrices. Julia cuenta con una rica colección de tipos de matrices especiales, que permiten un cálculo rápido con rutinas especializadas que se desarrollan específicamente para tipos de matrices particulares.

Las siguientes tablas resumen los tipos de matrices especiales que se han implementado en Julia, así como si hay ganchos para varios métodos optimizados para ellas en LAPACK.

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

Elementary operations

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

Leyenda:

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

Matrix factorizations

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

Leyenda:

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

The uniform scaling operator

Un operador UniformScaling representa un escalar multiplicado por el operador identidad, λ*I. El operador identidad I se define como una constante y es una instancia de UniformScaling. El tamaño de estos operadores es genérico y coincide con la otra matriz en las operaciones binarias +, -, * y \. Para A+I y A-I, esto significa que A debe ser cuadrada. La multiplicación con el operador identidad I es una operación sin efecto (excepto para verificar que el factor de escalado sea uno) y, por lo tanto, casi sin sobrecarga.

Para ver el operador UniformScaling en acción:

julia> U = UniformScaling(2);

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

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

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

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

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

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

Si necesitas resolver muchos sistemas de la forma (A+μI)x = b para el mismo A y diferentes μ, podría ser beneficioso calcular primero la factorización de Hessenberg F de A a través de la función hessenberg. Dado F, Julia emplea un algoritmo eficiente para (F+μ*I) \ b (equivalente a (A+μ*I)x \ b) y operaciones relacionadas como determinantes.

Matrix factorizations

Matrix factorizations (a.k.a. matrix decompositions) calcula la factorización de una matriz en un producto de matrices, y es uno de los conceptos centrales en el álgebra lineal (numérica).

La siguiente tabla resume los tipos de factorizaciones de matrices que se han implementado en Julia. Los detalles de sus métodos asociados se pueden encontrar en la sección Standard functions de la documentación de Álgebra Lineal.

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

Los adjuntos y transpuestos de los objetos Factorization se envuelven de manera perezosa en objetos AdjointFactorization y TransposeFactorization, respectivamente. Genéricamente, el transpuesto de las Factorizations reales se envuelven como AdjointFactorization.

Orthogonal matrices (AbstractQ)

Algunas factorizaciones de matrices generan factores "matriciales" ortogonales/unitarios. Estas factorizaciones incluyen factorizaciones relacionadas con QR obtenidas de llamadas a qr, es decir, QR, QRCompactWY y QRPivoted, la factorización de Hessenberg obtenida de llamadas a hessenberg, y la factorización LQ obtenida de lq. Si bien estos factores ortogonales/unitarios admiten una representación matricial, su representación interna es, por razones de rendimiento y memoria, diferente. Por lo tanto, deben ser vistos más bien como operadores lineales basados en matrices y basados en funciones. En particular, leer, por ejemplo, una columna de su representación matricial requiere ejecutar código de multiplicación "matriz"-vector, en lugar de simplemente leer datos de la memoria (posiblemente llenando partes del vector con ceros estructurales). Otra clara distinción de otros tipos de matrices no triangulares es que el código de multiplicación subyacente permite la modificación en el lugar durante la multiplicación. Además, los objetos de subtipos específicos de AbstractQ, como los creados a través de 4d61726b646f776e2e436f64652822222c202271722229_40726566, 4d61726b646f776e2e436f64652822222c202268657373656e626572672229_40726566 y 4d61726b646f776e2e436f64652822222c20226c712229_40726566, pueden comportarse como una matriz cuadrada o rectangular dependiendo del contexto:

julia> using LinearAlgebra

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

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

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

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

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

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

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

Debido a esta distinción de matrices densas o estructuradas, el tipo abstracto AbstractQ no es un subtipo de AbstractMatrix, sino que tiene su propia jerarquía de tipos. Los tipos personalizados que son subtipos de AbstractQ pueden confiar en retrocesos genéricos si se satisface la siguiente interfaz. Por ejemplo, para

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

proporcionar sobrecargas para

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

Si la promoción de eltype no es de interés, el método convert es innecesario, ya que por defecto convert(::Type{AbstractQ{T}}, Q::AbstractQ{T}) devuelve Q mismo. Los adjuntos de objetos de tipo AbstractQ se envuelven perezosamente en un tipo de envoltura AdjointQ, que requiere sus propios métodos LinearAlgebra.lmul! y LinearAlgebra.rmul!. Dado este conjunto de métodos, cualquier Q::MyQ puede ser utilizado como una matriz, preferiblemente en un contexto multiplicativo: la multiplicación a través de * con escalares, vectores y matrices desde la izquierda y la derecha, obtener una representación matricial de Q a través de Matrix(Q) (o Q*I) y la indexación en la representación matricial funcionan. En contraste, la adición y sustracción, así como de manera más general la difusión sobre los elementos en la representación matricial, fallan porque eso sería altamente ineficiente. Para tales casos de uso, considera calcular la representación matricial de antemano y almacenarla en caché para su reutilización futura.

Pivoting Strategies

Varios de los matrix factorizations soportan pivoting, que se puede utilizar para mejorar su estabilidad numérica. De hecho, algunas factorizaciones de matrices, como la factorización LU, pueden fallar sin pivoteo.

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.

En consecuencia, además de los factores de matriz convencionales, las salidas de los esquemas de factorización pivotada también incluyen matrices de permutación.

A continuación, se describen brevemente las estrategias de pivoteo implementadas en Julia. Tenga en cuenta que no todas las factorizaciones de matrices pueden soportarlas. Consulte la documentación de la respectiva matrix factorization para obtener detalles sobre las estrategias de pivoteo admitidas.

Vea también LinearAlgebra.ZeroPivotException.

LinearAlgebra.NoPivotType
NoPivot

No se realiza pivoteo. Las factorizaciones de matrices, como la factorización LU, pueden fallar sin pivoteo y también pueden ser numéricamente inestables para matrices de punto flotante ante errores de redondeo. Esta estrategia de pivoteo es principalmente útil con fines pedagógicos.

source
LinearAlgebra.RowNonZeroType
RowNonZero

El primer elemento no cero en las filas restantes se elige como el elemento pivote.

Ten en cuenta que para matrices de punto flotante, el algoritmo LU resultante es numéricamente inestable; esta estrategia es principalmente útil para la comparación con cálculos manuales (que típicamente utilizan esta estrategia) o para otros tipos algebraicos (por ejemplo, números racionales) que no son susceptibles a errores de redondeo. De lo contrario, la estrategia de pivoteo por defecto RowMaximum debería ser generalmente preferida en la eliminación de Gauss.

Ten en cuenta que el tipo de elemento de la matriz debe admitir un método iszero.

source
LinearAlgebra.RowMaximumType
RowMaximum

El elemento de máxima magnitud en las filas restantes se elige como el elemento pivote. Esta es la estrategia predeterminada para la factorización LU de matrices de punto flotante, y a veces se refiere como el algoritmo de "pivoteo parcial".

Tenga en cuenta que el tipo de elemento de la matriz debe admitir un método abs, cuyo tipo de resultado debe admitir un método <.

source
LinearAlgebra.ColumnNormType
ColumnNorm

La columna con la norma máxima se utiliza para el cálculo subsiguiente. Esto se utiliza para la factorización QR con pivoteo.

Tenga en cuenta que el tipo de elemento de la matriz debe admitir los métodos norm y abs, cuyos tipos de resultado respectivos deben admitir un método <.

source

Standard functions

Las funciones de álgebra lineal en Julia se implementan en gran medida llamando a funciones de LAPACK. Las factorizaciones de matrices dispersas llaman a funciones de SuiteSparse. Otros solucionadores dispersos están disponibles como paquetes de Julia.

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

Multiplicación de matrices.

Ejemplos

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

La multiplicación encadenada de 3 o 4 matrices se realiza en la secuencia más eficiente, basada en los tamaños de los arreglos. Es decir, se compara el número de multiplicaciones escalares necesarias para (A * B) * C (con 3 matrices densas) con el de A * (B * C) para elegir cuál de estas ejecutar.

Si el último factor es un vector, o el primero un vector transpuesto, entonces es eficiente tratar con estos primero. En particular, x' * B * y significa (x' * B) * y para una B::Matrix ordinaria en orden de columna. A diferencia de dot(x, B, y), esto asigna un arreglo intermedio.

Si el primer o último factor es un número, esto se fusionará con la multiplicación de matrices, utilizando mul! de 5 argumentos.

Véase también muladd, dot.

Julia 1.7

Estas optimizaciones requieren al menos Julia 1.7.

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

División de matrices utilizando un polialgoritmo. Para las matrices de entrada A y B, el resultado X es tal que A*X == B cuando A es cuadrada. El solucionador que se utiliza depende de la estructura de A. Si A es triangular superior o inferior (o diagonal), no se requiere factorización de A y el sistema se resuelve con sustitución hacia adelante o hacia atrás. Para matrices cuadradas no triangulares, se utiliza una factorización LU.

Para A rectangular, el resultado es la solución de mínimos cuadrados de norma mínima calculada mediante una factorización QR con pivoteo de A y una estimación de rango de A basada en el factor R.

Cuando A es dispersa, se utiliza un polialgoritmo similar. Para matrices indefinidas, la factorización LDLt no utiliza pivoteo durante la factorización numérica y, por lo tanto, el procedimiento puede fallar incluso para matrices invertibles.

Ver también: factorize, pinv.

Ejemplos

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

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

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

División a la derecha de matrices: A / B es equivalente a (B' \ A')' donde \ es el operador de división a la izquierda. Para matrices cuadradas, el resultado X es tal que A == X*B.

Véase también: rdiv!.

Ejemplos

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

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

julia> isapprox(A, X*B)
true

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

Excepción lanzada cuando la matriz de entrada tiene uno o más valores propios de valor cero y no es invertible. No se puede calcular una solución lineal que involucre tal matriz. El campo info indica la ubicación de (uno de) los valores singulares.

source
LinearAlgebra.PosDefExceptionType
PosDefException

Excepción lanzada cuando la matriz de entrada no era definida positiva. Algunas funciones de álgebra lineal y factorizaciones solo son aplicables a matrices definidas positivas. El campo info indica la ubicación de (uno de) los valores propios que es (son) menor(es) o igual a 0.

source
LinearAlgebra.ZeroPivotExceptionType
ZeroPivotException <: Exception

Excepción lanzada cuando una factorización/resolución de matriz encuentra un cero en una posición de pivote (diagonal) y no puede continuar. Esto no significa necesariamente que la matriz sea singular: puede ser útil cambiar a una factorización diferente, como LU con pivoteo, que puede reordenar variables para eliminar pivotes cero espurios. El campo info indica la ubicación de (uno de) los pivotes cero.

source
LinearAlgebra.RankDeficientExceptionType
RankDeficientException

Excepción lanzada cuando la matriz de entrada es deficiente en rango. Algunas funciones de álgebra lineal, como la descomposición de Cholesky, solo son aplicables a matrices que no son deficientes en rango. El campo info indica el rango calculado de la matriz.

source
LinearAlgebra.LAPACKExceptionType
LAPACKException

Excepción genérica de LAPACK lanzada ya sea durante llamadas directas a las funciones LAPACK o durante llamadas a otras funciones que utilizan las funciones LAPACK internamente pero carecen de un manejo de errores especializado. El campo info contiene información adicional sobre el error subyacente y depende de la función LAPACK que fue invocada.

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

Calcula el producto punto entre dos vectores. Para vectores complejos, el primer vector se conjuga.

dot también funciona en objetos iterables arbitrarios, incluyendo arreglos de cualquier dimensión, siempre que dot esté definido en los elementos.

dot es semánticamente equivalente a sum(dot(vx,vy) for (vx,vy) in zip(x, y)), con la restricción adicional de que los argumentos deben tener longitudes iguales.

x ⋅ y (donde se puede escribir completando con tabulador \cdot en el REPL) es un sinónimo de dot(x, y).

Ejemplos

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

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

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

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

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

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

Calcula el producto punto generalizado dot(x, A*y) entre dos vectores x y y, sin almacenar el resultado intermedio de A*y. Al igual que para el dot(_,_) de dos argumentos, esto actúa de manera recursiva. Además, para vectores complejos, el primer vector se conjuga.

Julia 1.4

dot de tres argumentos requiere al menos Julia 1.4.

Ejemplos

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

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

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

Calcula el producto cruzado de dos vectores de 3 dimensiones.

Ejemplos

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

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

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

Sobrescribe y con x * α + y y devuelve y. Si x y y tienen los mismos ejes, es equivalente a y .+= x .* a.

Ejemplos

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

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

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

Sobrescribe y con x * α + y * β y devuelve y. Si x y y tienen los mismos ejes, es equivalente a y .= x .* a .+ y .* β.

Ejemplos

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

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

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

Sobrescribe x con c*x + s*y y y con -conj(s)*x + c*y. Devuelve x y y.

Julia 1.5

rotate! requiere al menos Julia 1.5.

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

Sobrescribe x con c*x + s*y y y con conj(s)*x - c*y. Devuelve x y y.

Julia 1.5

reflect! requiere al menos Julia 1.5.

source
LinearAlgebra.factorizeFunction
factorizar(A)

Calcula una factorización conveniente de A, basada en el tipo de la matriz de entrada. factorizar verifica A para ver si es simétrica/triangular/etc. si A se pasa como una matriz genérica. factorizar revisa cada elemento de A para verificar/desestimar cada propiedad. Se detendrá tan pronto como pueda descartar la simetría/estructura triangular. El valor de retorno se puede reutilizar para resolver de manera eficiente múltiples sistemas. Por ejemplo: A=factorizar(A); x=A\b; y=A\C.

Propiedades de Atipo de factorización
Positivo-definidoCholesky (ver cholesky)
Densa Simétrica/HermíticaBunch-Kaufman (ver bunchkaufman)
Escasa Simétrica/HermíticaLDLt (ver ldlt)
TriangularTriangular
DiagonalDiagonal
BidiagonalBidiagonal
TridiagonalLU (ver lu)
Tridiagonal real simétricaLDLt (ver ldlt)
Cuadrada generalLU (ver lu)
No cuadrada generalQR (ver qr)

Si factorizar se llama en una matriz hermítica positiva-definida, por ejemplo, entonces factorizar devolverá una factorización de Cholesky.

Ejemplos

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> factorizar(A) # factorizar verificará si A ya está factorizada
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

Esto devuelve un 5×5 Bidiagonal{Float64}, que ahora se puede pasar a otras funciones de álgebra lineal (por ejemplo, solucionadores de eigenvalores) que utilizarán métodos especializados para tipos Bidiagonal.

source
LinearAlgebra.DiagonalType
Diagonal(V::AbstractVector)

Construye una matriz perezosa con V como su diagonal.

Véase también UniformScaling para la matriz identidad perezosa I, diagm para hacer una matriz densa, y diag para extraer elementos diagonales.

Ejemplos

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

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

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

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

Una matriz de una columna no se trata como un vector, sino que llama al método Diagonal(A::AbstractMatrix) que extrae diag(A) de 1 elemento:

julia> A = transpose([7.0 13.0])
2×1 transpose(::Matrix{Float64}) con el tipo de elemento Float64:
  7.0
 13.0

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

Construye una matriz a partir de la diagonal principal de A. La matriz de entrada A puede ser rectangular, pero la salida será cuadrada.

Ejemplos

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

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

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

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

Construye un Diagonal{T} no inicializado de longitud n. Ver undef.

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

Construye una matriz bidiagonal superior (uplo=:U) o inferior (uplo=:L) utilizando los vectores diagonales dados (dv) y off-diagonales (ev). El resultado es de tipo Bidiagonal y proporciona solucionadores lineales especializados eficientes, pero puede ser convertido en una matriz regular con convert(Array, _) (o Array(_) para abreviar). La longitud de ev debe ser una menos que la longitud de dv.

Ejemplos

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

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

julia> Bu = Bidiagonal(dv, ev, :U) # ev está en la primera superdiagonal
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

julia> Bl = Bidiagonal(dv, ev, :L) # ev está en la primera subdiagonal
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 7  2  ⋅  ⋅
 ⋅  8  3  ⋅
 ⋅  ⋅  9  4
source
Bidiagonal(A, uplo::Symbol)

Construye una matriz Bidiagonal a partir de la diagonal principal de A y su primera superdiagonal (si uplo=:U) o subdiagonal (si uplo=:L).

Ejemplos

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) # contiene la diagonal principal y la primera superdiagonal de A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # contiene la diagonal principal y la primera subdiagonal de A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 2  2  ⋅  ⋅
 ⋅  3  3  ⋅
 ⋅  ⋅  4  4
source
LinearAlgebra.SymTridiagonalType
SymTridiagonal(dv::V, ev::V) donde V <: AbstractVector

Construye una matriz tridiagonal simétrica a partir de la diagonal (dv) y la primera sub/super-diagonal (ev), respectivamente. El resultado es de tipo SymTridiagonal y proporciona solucionadores de eigenvalores especializados y eficientes, pero puede ser convertido en una matriz regular con convert(Array, _) (o Array(_) para abreviar).

Para las matrices de bloques SymTridiagonal, los elementos de dv son simetrizados. El argumento ev se interpreta como la superdiagonal. Los bloques de la subdiagonal son la transposición (materializada) de los bloques correspondientes de la superdiagonal.

Ejemplos

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

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

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

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

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

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

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

Construye una matriz tridiagonal simétrica a partir de la diagonal y la primera superdiagonal de la matriz simétrica A.

Ejemplos

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

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

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

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

Construye una matriz tridiagonal a partir de la primera subdiagonal, diagonal y primera superdiagonal, respectivamente. El resultado es de tipo Tridiagonal y proporciona solucionadores lineales especializados eficientes, pero puede convertirse en una matriz regular con convert(Array, _) (o Array(_) para abreviar). Las longitudes de dl y du deben ser una menos que la longitud de d.

Nota

La subdiagonal dl y la superdiagonal du no deben estar aliasadas entre sí. Si se detecta aliasing, el constructor utilizará una copia de du como su argumento.

Ejemplos

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

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

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

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

Construye una matriz tridiagonal a partir de la primera sub-diagonal, la diagonal y la primera super-diagonal de la matriz A.

Ejemplos

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

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

Construye una vista Simétrico del triángulo superior (si uplo = :U) o inferior (si uplo = :L) de la matriz A.

Las vistas Simétrico son principalmente útiles para matrices simétricas reales, para las cuales se habilitan algoritmos especializados (por ejemplo, para problemas de autovalores) para los tipos Simétrico. Más generalmente, véase también Hermitiano(A) para matrices hermitianas A == A', que es efectivamente equivalente a Simétrico para matrices reales, pero también es útil para matrices complejas. (Mientras que las matrices Simétrico complejas son compatibles, tienen pocos o ningún algoritmo especializado).

Para calcular la parte simétrica de una matriz real, o más generalmente la parte hermitiana (A + A') / 2 de una matriz real o compleja A, use hermitianpart.

Ejemplos

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

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

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

Tenga en cuenta que Supper no será igual a Slower a menos que A sea simétrica (por ejemplo, si A == transpose(A)).

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

Construye una vista Hermitiano del triángulo superior (si uplo = :U) o inferior (si uplo = :L) de la matriz A.

Para calcular la parte hermitiana de A, usa hermitianpart.

Ejemplos

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 = Hermitiano(A)
3×3 Hermitiano{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 = Hermitiano(A, :L)
3×3 Hermitiano{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 Hermitiano{ComplexF64, Matrix{ComplexF64}}:
 1.0+0.0im  3.0+1.0im  5.0-1.5im
 3.0-1.0im  5.0+0.0im  7.0-7.0im
 5.0+1.5im  7.0+7.0im  9.0+0.0im

Ten en cuenta que Hupper no será igual a Hlower a menos que A sea en sí misma hermitiana (por ejemplo, si A == adjoint(A)).

Todas las partes no reales de la diagonal serán ignoradas.

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

Construye una vista LowerTriangular de la matriz A.

Ejemplos

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

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

Construye una vista UpperTriangular de la matriz A.

Ejemplos

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

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

Construye una vista UnitLowerTriangular de la matriz A. Tal vista tiene el oneunit del eltype de A en su diagonal.

Ejemplos

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

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

Construye una vista UnitUpperTriangular de la matriz A. Tal vista tiene el oneunit del eltype de A en su diagonal.

Ejemplos

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

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

Construye una vista UpperHessenberg de la matriz A. Las entradas de A por debajo de la primera subdiagonal son ignoradas.

Julia 1.3

Este tipo fue añadido en Julia 1.3.

Se implementan algoritmos eficientes para H \ b, det(H), y similares.

Consulta también la función hessenberg para factorizar cualquier matriz en una matriz superior de Hessenberg similar.

Si F::Hessenberg es el objeto de factorización, la matriz unitaria se puede acceder con F.Q y la matriz de Hessenberg con F.H. Cuando se extrae Q, el tipo resultante es el objeto HessenbergQ, y puede ser convertido a una matriz regular con convert(Array, _) (o Array(_) para abreviar).

Iterar la descomposición produce los factores F.Q y F.H.

Ejemplos

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

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

Operador de escalado uniforme de tamaño genérico definido como un escalar multiplicado por el operador identidad, λ*I. Aunque sin un size explícito, actúa de manera similar a una matriz en muchos casos e incluye soporte para algunos índices. Ver también I.

Julia 1.6

La indexación utilizando rangos está disponible a partir de Julia 1.6.

Ejemplos

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

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

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

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

Un objeto del tipo UniformScaling, que representa una matriz identidad de cualquier tamaño.

Ejemplos

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

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

Construye una matriz Diagonal a partir de un UniformScaling.

Julia 1.2

Este método está disponible a partir de Julia 1.2.

Ejemplos

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

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

Tipo de factorización de matriz de la factorización LU de una matriz cuadrada A. Este es el tipo de retorno de lu, la función de factorización de matriz correspondiente.

Los componentes individuales de la factorización F::LU se pueden acceder a través de getproperty:

ComponenteDescripción
F.LParte L (triangular inferior unitario) de LU
F.UParte U (triangular superior) de LU
F.pPermutación Vector (derecha)
F.PPermutación Matrix (derecha)

Iterar sobre la factorización produce los componentes F.L, F.U y F.p.

Ejemplos

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

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

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

julia> l, u, p = lu(A); # desestructuración a través de la iteración

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

Calcula la factorización LU de una matriz dispersa A.

Para A dispersa con tipo de elemento real o complejo, el tipo de retorno de F es UmfpackLU{Tv, Ti}, donde Tv = Float64 o ComplexF64 respectivamente y Ti es un tipo entero (Int32 o Int64).

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

El vector de permutación q puede ser un vector de permutación o nothing. Si no se proporciona un vector de permutación o q es nothing, se utiliza el predeterminado de UMFPACK. Si la permutación no es basada en cero, se realiza una copia basada en cero.

El vector control tiene como configuración predeterminada la configuración predeterminada del paquete SparseArrays de Julia para UMFPACK (NB: esto se modifica de los predeterminados de UMFPACK para deshabilitar el refinamiento iterativo), pero se puede cambiar pasando un vector de longitud UMFPACK_CONTROL, consulta el manual de UMFPACK para posibles configuraciones. Por ejemplo, para reactivar el refinamiento iterativo:

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # leer la configuración predeterminada de Julia para una matriz dispersa Float64
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # opcional - mostrar valores
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # reactivar el refinamiento iterativo (2 es el máximo de pasos de refinamiento iterativo predeterminado de UMFPACK)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # resolver Ax = b, incluyendo el refinamiento iterativo de UMFPACK

Los componentes individuales de la factorización F se pueden acceder mediante indexación:

ComponenteDescripción
Lparte L (triangular inferior) de LU
Uparte U (triangular superior) de LU
ppermutación derecha Vector
qpermutación izquierda Vector
RsVector de factores de escalado
:componentes (L,U,p,q,Rs)

La relación entre F y A es

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

F además soporta las siguientes funciones:

Consulta también lu!

Nota

lu(A::AbstractSparseMatrixCSC) utiliza la biblioteca UMFPACK[ACM832] que es parte de SuiteSparse. Como esta biblioteca solo admite matrices dispersas con elementos Float64 o ComplexF64, lu convierte A en una copia que es de tipo SparseMatrixCSC{Float64} o SparseMatrixCSC{ComplexF64} según corresponda.

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

Calcula la factorización LU de A.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Por defecto, con check = true, también se lanza un error cuando la descomposición produce factores válidos, pero el factor triangular superior U es deficiente en rango. Esto se puede cambiar pasando allowsingular = true.

En la mayoría de los casos, si A es un subtipo S de AbstractMatrix{T} con un tipo de elemento T que soporta +, -, * y /, el tipo de retorno es LU{T,S{T}}.

En general, la factorización LU implica una permutación de las filas de la matriz (correspondiente a la salida F.p descrita a continuación), conocida como "pivoting" (porque corresponde a elegir qué fila contiene el "pivot", la entrada diagonal de F.U). Una de las siguientes estrategias de pivoting se puede seleccionar a través del argumento opcional pivot:

  • RowMaximum() (por defecto): la estrategia de pivoting estándar; el pivot corresponde al elemento de valor absoluto máximo entre las filas restantes a factorizar. Esta estrategia de pivoting requiere que el tipo de elemento también soporte abs y <. (Esta es generalmente la única opción numéricamente estable para matrices de punto flotante.)
  • RowNonZero(): el pivot corresponde al primer elemento no cero entre las filas restantes a factorizar. (Esto corresponde a la elección típica en cálculos manuales, y también es útil para tipos de números algebraicos más generales que soportan iszero pero no abs o <.)
  • NoPivot(): pivoting desactivado (fallará si se encuentra una entrada cero en una posición de pivot, incluso cuando allowsingular = true).

Los componentes individuales de la factorización F se pueden acceder a través de getproperty:

ComponenteDescripción
F.LL (parte triangular inferior) de LU
F.UU (parte triangular superior) de LU
F.pPermutación Vector (derecha)
F.PPermutación Matrix (derecha)

Iterar sobre la factorización produce los componentes F.L, F.U y F.p.

La relación entre F y A es

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

F además soporta las siguientes funciones:

Función soportadaLULU{T,Tridiagonal{T}}
/
\
inv
det
logdet
logabsdet
size
Julia 1.11

El argumento de palabra clave allowsingular se agregó en Julia 1.11.

Ejemplos

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

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

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

julia> l, u, p = lu(A); # desestructuración a través de la iteración

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

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

Calcula la factorización LU de una matriz dispersa A, reutilizando la factorización simbólica de una factorización LU ya existente almacenada en F. A menos que reuse_symbolic se establezca en falso, la matriz dispersa A debe tener un patrón de no ceros idéntico al de la matriz utilizada para crear la factorización LU F, de lo contrario se lanzará un error. Si el tamaño de A y F difiere, todos los vectores se redimensionarán en consecuencia.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

La permutación q puede ser un vector de permutación o nothing. Si no se proporciona un vector de permutación o q es nothing, se utiliza el valor predeterminado de UMFPACK. Si la permutación no es basada en cero, se realiza una copia basada en cero.

Véase también lu

Note

lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC) utiliza la biblioteca UMFPACK que es parte de SuiteSparse. Como esta biblioteca solo admite matrices dispersas con elementos de Float64 o ComplexF64, lu! convertirá automáticamente los tipos a aquellos establecidos por la factorización LU o SparseMatrixCSC{ComplexF64} según corresponda.

Julia 1.5

lu! para UmfpackLU requiere al menos Julia 1.5.

Ejemplos

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

julia> F = lu(A);

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

julia> lu!(F, B);

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

lu! es lo mismo que lu, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Se lanza una excepción InexactError si la factorización produce un número que no es representable por el tipo de elemento de A, por ejemplo, para tipos enteros.

Julia 1.11

El argumento de palabra clave allowsingular se agregó en Julia 1.11.

Ejemplos

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

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

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

Tipo de factorización de matriz de la factorización de Cholesky de una matriz densa simétrica/Hermítica definida positiva A. Este es el tipo de retorno de cholesky, la función de factorización de matriz correspondiente.

El factor triangular de Cholesky se puede obtener de la factorización F::Cholesky a través de F.L y F.U, donde A ≈ F.U' * F.U ≈ F.L * F.L'.

Las siguientes funciones están disponibles para objetos Cholesky: size, \, inv, det, logdet y isposdef.

Iterar la descomposición produce los componentes L y U.

Ejemplos

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

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

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

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

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

julia> l, u = C; # desestructuración a través de la iteración

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

Tipo de factorización de matriz de la factorización de Cholesky con pivoteo de una matriz densa simétrica/Hermítica positiva semidefinida A. Este es el tipo de retorno de cholesky(_, ::RowMaximum), la función de factorización de matriz correspondiente.

El factor triangular de Cholesky se puede obtener de la factorización F::CholeskyPivoted a través de F.L y F.U, y la permutación a través de F.p, donde A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' con Ur = F.U[1:F.rank, :] y Lr = F.L[:, 1:F.rank], o alternativamente A ≈ Up' * Up ≈ Lp * Lp' con Up = F.U[1:F.rank, invperm(F.p)] y Lp = F.L[invperm(F.p), 1:F.rank].

Las siguientes funciones están disponibles para objetos CholeskyPivoted: size, \, inv, det, y rank.

Iterar la descomposición produce los componentes L y U.

Ejemplos

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

julia> A = X * X';

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

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

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

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

Calcula la factorización de Cholesky de una matriz densa simétrica definida positiva A y devuelve una Cholesky factorización. La matriz A puede ser una Symmetric o Hermitian AbstractMatrix o una AbstractMatrix perfectamente simétrica o hermítica.

El factor triangular de Cholesky se puede obtener de la factorización F a través de F.L y F.U, donde A ≈ F.U' * F.U ≈ F.L * F.L'.

Las siguientes funciones están disponibles para los objetos Cholesky: size, \, inv, det, logdet y isposdef.

Si tienes una matriz A que es ligeramente no hermítica debido a errores de redondeo en su construcción, envuélvela en Hermitian(A) antes de pasarla a cholesky para tratarla como perfectamente hermítica.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Ejemplos

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

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

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

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

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

Calcula la factorización de Cholesky pivotada de una matriz densa simétrica positiva semidefinida A y devuelve una factorización CholeskyPivoted. La matriz A puede ser una Symmetric o Hermitian AbstractMatrix o una AbstractMatrix perfectamente simétrica o hermítica.

El factor triangular de Cholesky se puede obtener de la factorización F a través de F.L y F.U, y la permutación a través de F.p, donde A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' con Ur = F.U[1:F.rank, :] y Lr = F.L[:, 1:F.rank], o alternativamente A ≈ Up' * Up ≈ Lp * Lp' con Up = F.U[1:F.rank, invperm(F.p)] y Lp = F.L[invperm(F.p), 1:F.rank].

Las siguientes funciones están disponibles para objetos CholeskyPivoted: size, \, inv, det, y rank.

El argumento tol determina la tolerancia para determinar el rango. Para valores negativos, la tolerancia es la precisión de la máquina.

Si tienes una matriz A que es ligeramente no hermítica debido a errores de redondeo en su construcción, envuélvela en Hermitian(A) antes de pasarla a cholesky para tratarla como perfectamente hermítica.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Ejemplos

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

julia> A = X * X';

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

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

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

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

Calcula la factorización de Cholesky de una matriz dispersa definida positiva A. A debe ser una SparseMatrixCSC o una vista Symmetric/Hermitian de una SparseMatrixCSC. Ten en cuenta que incluso si A no tiene la etiqueta de tipo, aún debe ser simétrica o hermítica. Si no se proporciona perm, se utiliza una permutación que reduce el llenado. F = cholesky(A) se usa con mayor frecuencia para resolver sistemas de ecuaciones con F\b, pero también se definen los métodos diag, det y logdet para F. También puedes extraer factores individuales de F, usando F.L. Sin embargo, dado que el pivoteo está activado por defecto, la factorización se representa internamente como A == P'*L*L'*P con una matriz de permutación P; usar solo L sin tener en cuenta P dará respuestas incorrectas. Para incluir los efectos de la permutación, es preferible extraer factores "combinados" como PtL = F.PtL (el equivalente de P'*L) y LtP = F.UP (el equivalente de L'*P).

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Establecer el argumento de palabra clave opcional shift calcula la factorización de A+shift*I en lugar de A. Si se proporciona el argumento perm, debe ser una permutación de 1:size(A,1) que da el orden a utilizar (en lugar del orden AMD predeterminado de CHOLMOD).

Ejemplos

En el siguiente ejemplo, la permutación que reduce el llenado utilizada es [3, 2, 1]. Si perm se establece en 1:3 para forzar ninguna permutación, el número de elementos no nulos en el factor es 6.

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

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

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

julia> L = sparse(C.L);

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

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

julia> P = sparse(1:3, C.p, ones(3))
3×3 SparseMatrixCSC{Float64, Int64} con 3 entradas almacenadas:
  ⋅    ⋅   1.0
  ⋅   1.0   ⋅
 1.0   ⋅    ⋅

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

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

julia> L = sparse(C.L);

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

julia> L * L' ≈ A
true
Nota

Este método utiliza la biblioteca CHOLMOD[ACM887][DavisHager2009] de SuiteSparse. CHOLMOD solo admite tipos reales o complejos en precisión simple o doble. Las matrices de entrada que no son de esos tipos de elementos se convertirán a estos tipos según sea apropiado.

Muchas otras funciones de CHOLMOD están envueltas pero no exportadas del módulo Base.SparseArrays.CHOLMOD.

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

Lo mismo que cholesky, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Se lanza una excepción InexactError si la factorización produce un número que no se puede representar con el tipo de elemento de A, por ejemplo, para tipos enteros.

Ejemplos

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

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

Lo mismo que cholesky, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Se lanza una excepción InexactError si la factorización produce un número que no es representable por el tipo de elemento de A, por ejemplo, para tipos enteros.

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

Calcula la factorización de Cholesky ($LL'$) de A, reutilizando la factorización simbólica F. A debe ser una SparseMatrixCSC o una vista Symmetric/ Hermitian de una SparseMatrixCSC. Ten en cuenta que, incluso si A no tiene la etiqueta de tipo, debe seguir siendo simétrica o hermitiana.

Consulta también cholesky.

Nota

Este método utiliza la biblioteca CHOLMOD de SuiteSparse, que solo admite tipos reales o complejos en precisión simple o doble. Las matrices de entrada que no sean de esos tipos de elemento se convertirán a estos tipos según sea apropiado.

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

Actualiza una factorización de Cholesky C con el vector v. Si A = C.U'C.U entonces CC = cholesky(C.U'C.U + v*v') pero el cálculo de CC solo utiliza O(n^2) operaciones.

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

Obtiene una factorización LDLt de A + C*C' dada una factorización LDLt o LLt F de A.

El factor devuelto es siempre una factorización LDLt.

Véase también lowrankupdate!, lowrankdowndate, lowrankdowndate!.

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

Actualiza hacia abajo una factorización de Cholesky C con el vector v. Si A = C.U'C.U entonces CC = cholesky(C.U'C.U - v*v') pero el cálculo de CC solo utiliza O(n^2) operaciones.

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

Obtiene una factorización LDLt de A + C*C' dada una factorización LDLt o LLt F de A.

El factor devuelto es siempre una factorización LDLt.

Véase también lowrankdowndate!, lowrankupdate, lowrankupdate!.

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

Actualiza una factorización de Cholesky C con el vector v. Si A = C.U'C.U entonces CC = cholesky(C.U'C.U + v*v') pero el cálculo de CC solo utiliza O(n^2) operaciones. La factorización de entrada C se actualiza en su lugar de modo que al salir C == CC. El vector v se destruye durante el cálculo.

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

Actualiza una factorización LDLt o LLt F de A a una factorización de A + C*C'.

Las factorizaciones LLt se convierten en LDLt.

Véase también lowrankupdate, lowrankdowndate, lowrankdowndate!.

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

Realiza una actualización descendente de una factorización de Cholesky C con el vector v. Si A = C.U'C.U entonces CC = cholesky(C.U'C.U - v*v') pero el cálculo de CC solo utiliza O(n^2) operaciones. La factorización de entrada C se actualiza en su lugar de tal manera que al salir C == CC. El vector v se destruye durante el cálculo.

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

Actualiza una factorización LDLt o LLt F de A a una factorización de A - C*C'.

Las factorizaciones LLt se convierten en LDLt.

Véase también lowrankdowndate, lowrankupdate, lowrankupdate!.

source
LinearAlgebra.LDLtType
LDLt <: Factorización

Tipo de factorización de matriz de la factorización LDLt de una matriz real SymTridiagonal S tal que S = L*Diagonal(d)*L', donde L es una matriz UnitLowerTriangular y d es un vector. El uso principal de una factorización LDLt F = ldlt(S) es resolver el sistema de ecuaciones lineales Sx = b con F\b. Este es el tipo de retorno de ldlt, la función de factorización de matriz correspondiente.

Los componentes individuales de la factorización F::LDLt se pueden acceder a través de getproperty:

ComponenteDescripción
F.LL (parte triangular inferior unitaria) de LDLt
F.DD (parte diagonal) de LDLt
F.LtLt (parte triangular superior unitaria) de LDLt
F.dvalores diagonales de D como un Vector

Ejemplos

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

Calcula una factorización LDLt (es decir, $LDL^T$) de la matriz tridiagonal simétrica real S tal que S = L*Diagonal(d)*L' donde L es una matriz triangular inferior unitaria y d es un vector. El uso principal de una factorización LDLt F = ldlt(S) es resolver el sistema de ecuaciones lineales Sx = b con F\b.

Véase también bunchkaufman para una factorización similar, pero con pivoteo, de matrices simétricas o hermitianas arbitrarias.

Ejemplos

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

julia> ldltS = ldlt(S);

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

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

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

Calcula la factorización $LDL'$ de una matriz dispersa A. A debe ser una SparseMatrixCSC o una vista Symmetric/Hermitian de una SparseMatrixCSC. Ten en cuenta que, incluso si A no tiene la etiqueta de tipo, aún debe ser simétrica o hermítica. Se utiliza una permutación que reduce el llenado. F = ldlt(A) se usa con mayor frecuencia para resolver sistemas de ecuaciones A*x = b con F\b. El objeto de factorización devuelto F también admite los métodos diag, det, logdet y inv. Puedes extraer factores individuales de F usando F.L. Sin embargo, dado que el pivoteo está activado por defecto, la factorización se representa internamente como A == P'*L*D*L'*P con una matriz de permutación P; usar solo L sin tener en cuenta P dará respuestas incorrectas. Para incluir los efectos de la permutación, generalmente es preferible extraer factores "combinados" como PtL = F.PtL (el equivalente de P'*L) y LtP = F.UP (el equivalente de L'*P). La lista completa de factores admitidos es :L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Establecer el argumento de palabra clave opcional shift calcula la factorización de A+shift*I en lugar de A. Si se proporciona el argumento perm, debe ser una permutación de 1:size(A,1) que da el orden a utilizar (en lugar del orden predeterminado AMD de CHOLMOD).

Nota

Este método utiliza la biblioteca CHOLMOD[ACM887][DavisHager2009] de SuiteSparse. CHOLMOD solo admite tipos reales o complejos en precisión simple o doble. Las matrices de entrada que no son de esos tipos de elementos se convertirán a estos tipos según sea apropiado.

Muchas otras funciones de CHOLMOD están envueltas pero no exportadas del módulo Base.SparseArrays.CHOLMOD.

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

Igual que ldlt, pero ahorra espacio al sobrescribir la entrada S, en lugar de crear una copia.

Ejemplos

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

julia> ldltS = ldlt!(S);

julia> ldltS === S
false

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

Calcula la factorización $LDL'$ de A, reutilizando la factorización simbólica F. A debe ser una SparseMatrixCSC o una vista Symmetric/Hermitian de una SparseMatrixCSC. Ten en cuenta que, incluso si A no tiene la etiqueta de tipo, aún debe ser simétrica o hermitiana.

Consulta también ldlt.

Nota

Este método utiliza la biblioteca CHOLMOD de SuiteSparse, que solo admite tipos reales o complejos en precisión simple o doble. Las matrices de entrada que no sean de esos tipos de elementos se convertirán a estos tipos según sea apropiado.

source
LinearAlgebra.QRType
QR <: Factorización

Una factorización de matriz QR almacenada en un formato empaquetado, típicamente obtenida de qr. Si $A$ es una matriz m×n, entonces

\[A = Q R\]

donde $Q$ es una matriz ortogonal/unitaria y $R$ es triangular superior. La matriz $Q$ se almacena como una secuencia de reflectores de Householder $v_i$ y coeficientes $\tau_i$ donde:

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

Iterar la descomposición produce los componentes Q y R.

El objeto tiene dos campos:

  • factors es una matriz m×n.

    • La parte triangular superior contiene los elementos de $R$, es decir, R = triu(F.factors) para un objeto QR F.
    • La parte subdiagonal contiene los reflectores $v_i$ almacenados en un formato empaquetado donde $v_i$ es la $i$-ésima columna de la matriz V = I + tril(F.factors, -1).
  • τ es un vector de longitud min(m,n) que contiene los coeficientes $au_i$.

source
LinearAlgebra.QRCompactWYType
QRCompactWY <: Factorization

Una factorización de matriz QR almacenada en un formato compacto bloqueado, típicamente obtenida de qr. Si $A$ es una matriz m×n, entonces

\[A = Q R\]

donde $Q$ es una matriz ortogonal/unitaria y $R$ es triangular superior. Es similar al formato QR excepto que la matriz ortogonal/unitaria $Q$ se almacena en formato Compact WY [Schreiber1989]. Para el tamaño de bloque $n_b$, se almacena como una matriz trapezoidal inferior m×n $V$ y una matriz $T = (T_1 \; T_2 \; ... \; T_{b-1} \; T_b')$ compuesta de $b = \lceil \min(m,n) / n_b \rceil$ matrices triangulares superiores $T_j$ de tamaño $n_b$×$n_b$ ($j = 1, ..., b-1$) y una matriz trapezoidal superior $n_b$×$\min(m,n) - (b-1) n_b$ $T_b'$ ($j=b$) cuya parte cuadrada superior se denota con $T_b$ satisfaciendo

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

de modo que $v_i$ es la $i$-ésima columna de $V$, $\tau_i$ es el $i$-ésimo elemento de [diag(T_1); diag(T_2); …; diag(T_b)], y $(V_1 \; V_2 \; ... \; V_b)$ es el bloque izquierdo m×min(m, n) de $V$. Cuando se construye utilizando qr, el tamaño del bloque está dado por $n_b = \min(m, n, 36)$.

Iterar la descomposición produce los componentes Q y R.

El objeto tiene dos campos:

  • factors, como en el tipo QR, es una matriz m×n.

    • La parte triangular superior contiene los elementos de $R$, es decir, R = triu(F.factors) para un objeto QR F.
    • La parte subdiagonal contiene los reflectores $v_i$ almacenados en un formato empaquetado tal que V = I + tril(F.factors, -1).
  • T es una matriz de $n_b$ por $\min(m,n)$ como se describió anteriormente. Se ignoran los elementos subdiagonales para cada matriz triangular $T_j$.

Note

Este formato no debe confundirse con la representación WY más antigua [Bischof1987].

source
LinearAlgebra.QRPivotedType
QRPivoted <: Factorization

Una factorización de matriz QR con pivoteo de columnas en un formato empaquetado, típicamente obtenida de qr. Si $A$ es una matriz m×n, entonces

\[A P = Q R\]

donde $P$ es una matriz de permutación, $Q$ es una matriz ortogonal/unitaria y $R$ es triangular superior. La matriz $Q$ se almacena como una secuencia de reflectores de Householder:

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

Iterar la descomposición produce los componentes Q, R y p.

El objeto tiene tres campos:

  • factors es una matriz m×n.

    • La parte triangular superior contiene los elementos de $R$, es decir, R = triu(F.factors) para un objeto QR F.
    • La parte subdiagonal contiene los reflectores $v_i$ almacenados en un formato empaquetado donde $v_i$ es la $i$-ésima columna de la matriz V = I + tril(F.factors, -1).
  • τ es un vector de longitud min(m,n) que contiene los coeficientes $au_i$.

  • jpvt es un vector entero de longitud n correspondiente a la permutación $P$.

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

Calcula la factorización QR de una matriz dispersa A. Se utilizan permutaciones de filas y columnas que reducen el llenado de manera que F.R = F.Q'*A[F.prow,F.pcol]. La aplicación principal de este tipo es resolver problemas de mínimos cuadrados o subdeterminado con \. La función llama a la biblioteca C SPQR[ACM933].

Note

qr(A::SparseMatrixCSC) utiliza la biblioteca SPQR que es parte de SuiteSparse. Dado que esta biblioteca solo admite matrices dispersas con elementos de tipo Float64 o ComplexF64, a partir de Julia v1.4 qr convierte A en una copia que es de tipo SparseMatrixCSC{Float64} o SparseMatrixCSC{ComplexF64} según corresponda.

Ejemplos

julia> A = sparse([1,2,3,4], [1,1,2,2], [1.0,1.0,1.0,1.0])
4×2 SparseMatrixCSC{Float64, Int64} con 4 entradas almacenadas:
 1.0   ⋅
 1.0   ⋅
  ⋅   1.0
  ⋅   1.0

julia> qr(A)
SparseArrays.SPQR.QRSparse{Float64, Int64}
Factor Q:
4×4 SparseArrays.SPQR.QRSparseQ{Float64, Int64}
Factor R:
2×2 SparseMatrixCSC{Float64, Int64} con 2 entradas almacenadas:
 -1.41421    ⋅
   ⋅       -1.41421
Permutación de filas:
Vector de 4 elementos{Int64}:
 1
 3
 4
 2
Permutación de columnas:
Vector de 2 elementos{Int64}:
 1
 2
source
qr(A, pivot = NoPivot(); blocksize) -> F

Calcula la factorización QR de la matriz A: una matriz ortogonal (o unitaria si A es de valor complejo) Q, y una matriz triangular superior R tal que

\[A = Q R\]

El objeto devuelto F almacena la factorización en un formato empaquetado:

  • si pivot == ColumnNorm() entonces F es un objeto QRPivoted,
  • de lo contrario, si el tipo de elemento de A es un tipo BLAS (Float32, Float64, ComplexF32 o ComplexF64), entonces F es un objeto QRCompactWY,
  • de lo contrario, F es un objeto QR.

Los componentes individuales de la descomposición F se pueden recuperar a través de accesores de propiedades:

  • F.Q: la matriz ortogonal/unitaria Q
  • F.R: la matriz triangular superior R
  • F.p: el vector de permutación del pivote (QRPivoted solo)
  • F.P: la matriz de permutación del pivote (QRPivoted solo)
Note

Cada referencia al factor triangular superior a través de F.R asigna un nuevo arreglo. Por lo tanto, es aconsejable almacenar ese arreglo, digamos, con R = F.R y continuar trabajando con R.

Iterar la descomposición produce los componentes Q, R, y si existe p.

Las siguientes funciones están disponibles para los objetos QR: inv, size, y \. Cuando A es rectangular, \ devolverá una solución de mínimos cuadrados y si la solución no es única, se devuelve la que tiene la norma más pequeña. Cuando A no tiene rango completo, se requiere la factorización con pivoteo (por columna) para obtener una solución de norma mínima.

Se permite la multiplicación con respecto a Q completo/cuadrado o no completo/cuadrado, es decir, tanto F.Q*F.R como F.Q*A son compatibles. Una matriz Q se puede convertir en una matriz regular con Matrix. Esta operación devuelve el factor Q "delgado", es decir, si A es m×n con m>=n, entonces Matrix(F.Q) produce una matriz m×n con columnas ortonormales. Para recuperar el factor Q "completo", una matriz ortogonal m×m, usa F.Q*I o collect(F.Q). Si m<=n, entonces Matrix(F.Q) produce una matriz ortogonal m×m.

El tamaño del bloque para la descomposición QR se puede especificar mediante el argumento de palabra clave blocksize :: Integer cuando pivot == NoPivot() y A isa StridedMatrix{<:BlasFloat}. Se ignora cuando blocksize > minimum(size(A)). Ver QRCompactWY.

Julia 1.4

El argumento de palabra clave blocksize requiere Julia 1.4 o posterior.

Ejemplos

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

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

qr devuelve múltiples tipos porque LAPACK utiliza varias representaciones que minimizan los requisitos de almacenamiento de memoria de los productos de reflectores elementales de Householder, de modo que las matrices Q y R se pueden almacenar de manera compacta en lugar de como dos matrices densas separadas.

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

qr! es lo mismo que qr cuando A es un subtipo de AbstractMatrix, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Se lanza una excepción InexactError si la factorización produce un número que no es representable por el tipo de elemento de A, por ejemplo, para tipos enteros.

Julia 1.4

El argumento de palabra clave blocksize requiere Julia 1.4 o posterior.

Ejemplos

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

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

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

Tipo de factorización de matriz de la factorización LQ de una matriz A. La descomposición LQ es la descomposición QR de transpose(A). Este es el tipo de retorno de lq, la función de factorización de matriz correspondiente.

Si S::LQ es el objeto de factorización, el componente triangular inferior se puede obtener a través de S.L, y el componente ortogonal/unitario a través de S.Q, de modo que A ≈ S.L*S.Q.

Iterar la descomposición produce los componentes S.L y S.Q.

Ejemplos

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

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

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

julia> l, q = S; # desestructuración a través de la iteración

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

Calcula la descomposición LQ de A. El componente triangular inferior de la descomposición se puede obtener del objeto LQ S a través de S.L, y el componente ortogonal/unitario a través de S.Q, de modo que A ≈ S.L*S.Q.

Iterar la descomposición produce los componentes S.L y S.Q.

La descomposición LQ es la descomposición QR de transpose(A), y es útil para calcular la solución de mínima norma lq(A) \ b para un sistema de ecuaciones subdeterminado (A tiene más columnas que filas, pero tiene rango completo de filas).

Ejemplos

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}}
Factor L:
2×2 Matrix{Float64}:
 -8.60233   0.0
  4.41741  -0.697486
Factor Q: 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; # desestructuración a través de la iteración

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

Calcula la factorización LQ de A, utilizando la matriz de entrada como espacio de trabajo. Consulta también lq.

source
LinearAlgebra.BunchKaufmanType
BunchKaufman <: Factorization

Tipo de factorización de matriz de la factorización de Bunch-Kaufman de una matriz simétrica o hermítica A como P'UDU'P o P'LDL'P, dependiendo de si el triángulo superior (el predeterminado) o el triángulo inferior se almacena en A. Si A es simétrica compleja, entonces U' y L' denotan las transpuestas no conjugadas, es decir, transpose(U) y transpose(L), respectivamente. Este es el tipo de retorno de bunchkaufman, la función de factorización de matriz correspondiente.

Si S::BunchKaufman es el objeto de factorización, los componentes se pueden obtener a través de S.D, S.U o S.L según corresponda dado S.uplo, y S.p.

Iterar la descomposición produce los componentes S.D, S.U o S.L según corresponda dado S.uplo, y S.p.

Ejemplos

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

julia> S = bunchkaufman(A) # A se envuelve internamente por Symmetric(A)
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D factor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U factor:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutation:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # desestructuración a través de la iteración

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

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

Calcula la factorización de Bunch-Kaufman [Bunch1977] de una matriz simétrica o hermítica A como P'*U*D*U'*P o P'*L*D*L'*P, dependiendo de qué triángulo se almacene en A, y devuelve un objeto BunchKaufman. Ten en cuenta que si A es simétrica compleja, entonces U' y L' denotan las transpuestas no conjugadas, es decir, transpose(U) y transpose(L).

Iterar la descomposición produce los componentes S.D, S.U o S.L según corresponda dado S.uplo, y S.p.

Si rook es true, se utiliza pivoteo de rook. Si rook es falso, no se utiliza pivoteo de rook.

Cuando check = true, se lanza un error si la descomposición falla. Cuando check = false, la responsabilidad de verificar la validez de la descomposición (a través de issuccess) recae en el usuario.

Las siguientes funciones están disponibles para objetos BunchKaufman: size, \, inv, issymmetric, ishermitian, getindex.

Ejemplos

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

julia> S = bunchkaufman(A) # A se envuelve internamente por Symmetric(A)
BunchKaufman{Float64, Matrix{Float64}, Vector{Int64}}
D factor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 -0.333333  0.0
  0.0       3.0
U factor:
2×2 UnitUpperTriangular{Float64, Matrix{Float64}}:
 1.0  0.666667
  ⋅   1.0
permutation:
2-element Vector{Int64}:
 1
 2

julia> d, u, p = S; # desestructuración a través de la iteración

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 factor:
2×2 Tridiagonal{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L factor:
2×2 UnitLowerTriangular{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
permutation:
2-element Vector{Int64}:
 2
 1

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

bunchkaufman! es lo mismo que bunchkaufman, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia.

source
LinearAlgebra.EigenType
Eigen <: Factorization

Tipo de factorización de matriz de la descomposición en valores propios/espectrales de una matriz cuadrada A. Este es el tipo de retorno de eigen, la función de factorización de matriz correspondiente.

Si F::Eigen es el objeto de factorización, los valores propios se pueden obtener a través de F.values y los vectores propios como las columnas de la matriz F.vectors. (El k-ésimo vector propio se puede obtener del segmento F.vectors[:, k].)

Iterar sobre la descomposición produce los componentes F.values y F.vectors.

Ejemplos

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

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

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

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

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

Tipo de factorización de matriz de la descomposición generalizada de valores propios/espectrales de A y B. Este es el tipo de retorno de eigen, la función de factorización de matriz correspondiente, cuando se llama con dos argumentos de matriz.

Si F::GeneralizedEigen es el objeto de factorización, los valores propios se pueden obtener a través de F.values y los vectores propios como las columnas de la matriz F.vectors. (El k-ésimo vector propio se puede obtener de la porción F.vectors[:, k].)

Iterar sobre la descomposición produce los componentes F.values y F.vectors.

Ejemplos

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

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

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

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

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

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

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

Devuelve los valores propios de A.

Para matrices generales no simétricas, es posible especificar cómo se balancea la matriz antes del cálculo de los valores propios. Las palabras clave permute, scale y sortby son las mismas que para eigen.

Ejemplos

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

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

Para una entrada escalar, eigvals devolverá un escalar.

Ejemplos

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

Calcule los valores propios generalizados de A y B.

Ejemplos

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

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

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

Devuelve los valores propios de A. Es posible calcular solo un subconjunto de los valores propios especificando un UnitRange irange que cubra índices de los valores propios ordenados, por ejemplo, los valores propios del 2º al 8º.

Ejemplos

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

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

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

Devuelve los valores propios de A. Es posible calcular solo un subconjunto de los valores propios especificando un par vl y vu para los límites inferior y superior de los valores propios.

Ejemplos

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

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

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

Igual que eigvals, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Las palabras clave permute, scale y sortby son las mismas que para eigen.

Nota

La matriz de entrada A no contendrá sus valores propios después de que se llame a eigvals! sobre ella - A se utiliza como un espacio de trabajo.

Ejemplos

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

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

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

Igual que eigvals, pero ahorra espacio al sobrescribir la entrada A (y B), en lugar de crear copias.

Note

Las matrices de entrada A y B no contendrán sus valores propios después de que se llame a eigvals!. Se utilizan como espacios de trabajo.

Ejemplos

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

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

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

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

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

Igual que eigvals, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. irange es un rango de índices de valores propios a buscar; por ejemplo, los valores propios del 2º al 8º.

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

Igual que eigvals, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. vl es el límite inferior del intervalo para buscar valores propios, y vu es el límite superior.

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

Devuelve el mayor valor propio de A. La opción permute=true permuta la matriz para acercarse a una forma triangular superior, y scale=true escala la matriz por sus elementos diagonales para hacer que las filas y columnas sean más iguales en norma. Ten en cuenta que si los valores propios de A son complejos, este método fallará, ya que los números complejos no se pueden ordenar.

Ejemplos

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

julia> eigmax(A)
1.0

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

julia> eigmax(A)
ERROR: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` no puede tener valores propios complejos.
Stacktrace:
[...]
source
LinearAlgebra.eigminFunction
eigmin(A; permute::Bool=true, scale::Bool=true)

Devuelve el valor propio más pequeño de A. La opción permute=true permuta la matriz para acercarse a una forma triangular superior, y scale=true escala la matriz por sus elementos diagonales para hacer que las filas y columnas sean más iguales en norma. Ten en cuenta que si los valores propios de A son complejos, este método fallará, ya que los números complejos no se pueden ordenar.

Ejemplos

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

julia> eigmin(A)
-1.0

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

julia> eigmin(A)
ERROR: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` no puede tener valores propios complejos.
Stacktrace:
[...]
source
LinearAlgebra.eigvecsFunction
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

Devuelve una matriz M cuyas columnas son los eigenvectores de A. (El k-ésimo eigenvector se puede obtener de la porción M[:, k].)

Si se especifica el vector opcional de eigenvalores eigvals, eigvecs devuelve los eigenvectores correspondientes específicos.

Ejemplos

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

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

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

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

Devuelve una matriz M cuyas columnas son los vectores propios de A. (El k-ésimo vector propio se puede obtener del corte M[:, k].) Las palabras clave permute, scale y sortby son las mismas que para eigen.

Ejemplos

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

Devuelve una matriz M cuyas columnas son los eigenvectores generalizados de A y B. (El k-ésimo eigenvector se puede obtener del corte M[:, k].)

Ejemplos

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

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

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

Calcula la descomposición en valores propios de A, devolviendo un objeto de factorización Eigen F que contiene los valores propios en F.values y los vectores propios en las columnas de la matriz F.vectors. Esto corresponde a resolver un problema de valores propios de la forma Ax = λx, donde A es una matriz, x es un vector propio, y λ es un valor propio. (El k-ésimo vector propio se puede obtener de la porción F.vectors[:, k].)

Iterar la descomposición produce los componentes F.values y F.vectors.

Las siguientes funciones están disponibles para los objetos Eigen: inv, det, y isposdef.

Para matrices generales no simétricas, es posible especificar cómo se balancea la matriz antes del cálculo del vector propio. La opción permute=true permuta la matriz para acercarse a una forma triangular superior, y scale=true escala la matriz por sus elementos diagonales para hacer que las filas y columnas sean más iguales en norma. El valor predeterminado es true para ambas opciones.

Por defecto, los valores y vectores propios se ordenan lexicográficamente por (real(λ),imag(λ)). Se puede pasar una función de comparación diferente by(λ) a sortby, o se puede pasar sortby=nothing para dejar los valores propios en un orden arbitrario. Algunos tipos de matriz especiales (por ejemplo, Diagonal o SymTridiagonal) pueden implementar su propia convención de ordenación y no aceptar una palabra clave sortby.

Ejemplos

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

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

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

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

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

Calcula la descomposición de valores propios generalizados de A y B, devolviendo un objeto de factorización GeneralizedEigen F que contiene los valores propios generalizados en F.values y los vectores propios generalizados en las columnas de la matriz F.vectors. Esto corresponde a resolver un problema de valores propios generalizados de la forma Ax = λBx, donde A, B son matrices, x es un vector propio y λ es un valor propio. (El k-ésimo vector propio generalizado se puede obtener de la porción F.vectors[:, k].)

Iterar la descomposición produce los componentes F.values y F.vectors.

Por defecto, los valores propios y vectores se ordenan lexicográficamente por (real(λ),imag(λ)). Se puede pasar una función de comparación diferente by(λ) a sortby, o se puede pasar sortby=nothing para dejar los valores propios en un orden arbitrario.

Ejemplos

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

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

julia> F = eigen(A, B);

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

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

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

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

Calcula la descomposición en valores propios de A, devolviendo un objeto de factorización Eigen F que contiene los valores propios en F.values y los vectores propios en las columnas de la matriz F.vectors. (El k-ésimo vector propio se puede obtener de la porción F.vectors[:, k].)

Iterar la descomposición produce los componentes F.values y F.vectors.

Las siguientes funciones están disponibles para los objetos Eigen: inv, det, y isposdef.

El UnitRange irange especifica los índices de los valores propios ordenados a buscar.

Note

Si irange no es 1:n, donde n es la dimensión de A, entonces la factorización devuelta será una factorización truncada.

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

Calcula la descomposición en valores propios de A, devolviendo un objeto de factorización Eigen F que contiene los valores propios en F.values y los vectores propios en las columnas de la matriz F.vectors. (El k-ésimo vector propio se puede obtener de la porción F.vectors[:, k].)

Iterar sobre la descomposición produce los componentes F.values y F.vectors.

Las siguientes funciones están disponibles para los objetos Eigen: inv, det, y isposdef.

vl es el límite inferior de la ventana de valores propios a buscar, y vu es el límite superior.

Note

Si [vl, vu] no contiene todos los valores propios de A, entonces la factorización devuelta será una factorización truncada.

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

Igual que eigen, pero ahorra espacio al sobrescribir la entrada A (y B), en lugar de crear una copia.

source
LinearAlgebra.HessenbergType
Hessenberg <: Factorización

Un objeto Hessenberg representa la factorización de Hessenberg QHQ' de una matriz cuadrada, o un desplazamiento Q(H+μI)Q' de la misma, que es producido por la función hessenberg.

source
LinearAlgebra.hessenbergFunction
hessenberg(A) -> Hessenberg

Calcula la descomposición de Hessenberg de A y devuelve un objeto Hessenberg. Si F es el objeto de factorización, la matriz unitaria se puede acceder con F.Q (de tipo LinearAlgebra.HessenbergQ) y la matriz de Hessenberg con F.H (de tipo UpperHessenberg), cualquiera de las cuales puede ser convertida a una matriz regular con Matrix(F.H) o Matrix(F.Q).

Si A es Hermitiana o real-Simétrica, entonces la descomposición de Hessenberg produce una matriz tridiagonal real-simétrica y F.H es de tipo SymTridiagonal.

Ten en cuenta que la factorización desplazada A+μI = Q (H+μI) Q' se puede construir de manera eficiente mediante F + μ*I usando el objeto UniformScaling I, que crea un nuevo objeto Hessenberg con almacenamiento compartido y un desplazamiento modificado. El desplazamiento de un dado F se obtiene mediante F.μ. Esto es útil porque múltiples resoluciones desplazadas (F + μ*I) \ b (para diferentes μ y/o b) se pueden realizar de manera eficiente una vez que se crea F.

Iterar la descomposición produce los factores F.Q, F.H, F.μ.

Ejemplos

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

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

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

julia> q, h = F; # desestructuración mediante iteración

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

Tipo de factorización de matriz de la factorización de Schur de una matriz A. Este es el tipo de retorno de schur(_), la función de factorización de matriz correspondiente.

Si F::Schur es el objeto de factorización, el factor de Schur (cuasi) triangular se puede obtener a través de F.Schur o F.T y los vectores de Schur ortogonales/unitarios a través de F.vectors o F.Z de tal manera que A = F.vectors * F.Schur * F.vectors'. Los eigenvalores de A se pueden obtener con F.values.

Iterar la descomposición produce los componentes F.T, F.Z y F.values.

Ejemplos

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

julia> F = schur(A)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T factor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z factor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
eigenvalores:
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; # desestructuración a través de la iteración

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

Tipo de factorización de matriz de la factorización de Schur generalizada de dos matrices A y B. Este es el tipo de retorno de schur(_, _), la función de factorización de matriz correspondiente.

Si F::GeneralizedSchur es el objeto de factorización, los factores de Schur (cuasi) triangulares se pueden obtener a través de F.S y F.T, los vectores de Schur unitarios/ortogonales a la izquierda a través de F.left o F.Q, y los vectores de Schur unitarios/ortogonales a la derecha se pueden obtener con F.right o F.Z de tal manera que A=F.left*F.S*F.right' y B=F.left*F.T*F.right'. Los valores propios generalizados de A y B se pueden obtener con F.α./F.β.

Iterar la descomposición produce los componentes F.S, F.T, F.Q, F.Z, F.α y F.β.

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

Calcula la factorización de Schur de la matriz A. El factor de Schur (cuasi) triangular se puede obtener del objeto Schur F con F.Schur o F.T y los vectores de Schur ortogonales/unitarios se pueden obtener con F.vectors o F.Z de tal manera que A = F.vectors * F.Schur * F.vectors'. Los valores propios de A se pueden obtener con F.values.

Para A real, la factorización de Schur es "cuasitridimensional", lo que significa que es superior-triangular excepto con bloques diagonales de 2×2 para cualquier par conjugado de valores propios complejos; esto permite que la factorización sea puramente real incluso cuando hay valores propios complejos. Para obtener la factorización de Schur (compleja) puramente superior-triangular a partir de una factorización cuasitridimensional real, puedes usar Schur{Complex}(schur(A)).

Iterar la descomposición produce los componentes F.T, F.Z y F.values.

Ejemplos

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

julia> F = schur(A)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T factor:
2×2 Matrix{Float64}:
 3.0   9.0
 0.0  -2.0
Z factor:
2×2 Matrix{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
valores propios:
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; # desestructuración a través de la iteración

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

Calcula la factorización Schur generalizada (o QZ) de las matrices A y B. Los factores Schur (cuasi) triangulares se pueden obtener del objeto Schur F con F.S y F.T, los vectores Schur unitarios/ortogonales izquierdos se pueden obtener con F.left o F.Q y los vectores Schur unitarios/ortogonales derechos se pueden obtener con F.right o F.Z de tal manera que A=F.left*F.S*F.right' y B=F.left*F.T*F.right'. Los valores propios generalizados de A y B se pueden obtener con F.α./F.β.

Iterar la descomposición produce los componentes F.S, F.T, F.Q, F.Z, F.α y F.β.

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

Igual que schur pero utiliza el argumento de entrada A como espacio de trabajo.

Ejemplos

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

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

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

Igual que schur pero utiliza las matrices de entrada A y B como espacio de trabajo.

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

Reordena la factorización de Schur F de una matriz A = Z*T*Z' de acuerdo con el arreglo lógico select, devolviendo el objeto de factorización reordenado F. Los valores propios seleccionados aparecen en la diagonal principal de F.Schur y las correspondientes columnas principales de F.vectors forman una base ortogonal/unitaria del subespacio invariante derecho correspondiente. En el caso real, un par de valores propios conjugados complejos debe ser incluido o excluido en su totalidad a través de select.

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

Reordena la factorización de Schur generalizada F de un par de matrices (A, B) = (Q*S*Z', Q*T*Z') de acuerdo con el arreglo lógico select y devuelve un objeto GeneralizedSchur F. Los valores propios seleccionados aparecen en la diagonal principal de ambos F.S y F.T, y los vectores de Schur ortogonales/unitarios izquierdo y derecho también se reordenan de tal manera que (A, B) = F.Q*(F.S, F.T)*F.Z' aún se mantiene y los valores propios generalizados de A y B aún se pueden obtener con F.α./F.β.

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

Igual que ordschur pero sobrescribe la factorización F.

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

Igual que ordschur, pero sobrescribe la factorización F.

source
LinearAlgebra.SVDType
SVD <: Factorización

Tipo de factorización de matriz de la descomposición en valores singulares (SVD) de una matriz A. Este es el tipo de retorno de svd(_), la función de factorización de matriz correspondiente.

Si F::SVD es el objeto de factorización, U, S, V y Vt se pueden obtener a través de F.U, F.S, F.V y F.Vt, de tal manera que A = U * Diagonal(S) * Vt. Los valores singulares en S están ordenados en orden descendente.

Iterar la descomposición produce los componentes U, S y V.

Ejemplos

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

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

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

julia> u, s, v = F; # desestructuración a través de la iteración

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

Tipo de factorización de matriz de la descomposición en valores singulares generalizada (SVD) de dos matrices A y B, tal que A = F.U*F.D1*F.R0*F.Q' y B = F.V*F.D2*F.R0*F.Q'. Este es el tipo de retorno de svd(_, _), la función de factorización de matriz correspondiente.

Para una matriz A de M por N y una matriz B de P por N,

  • U es una matriz ortogonal de M por M,
  • V es una matriz ortogonal de P por P,
  • Q es una matriz ortogonal de N por N,
  • D1 es una matriz diagonal de M por (K+L) con 1s en las primeras K entradas,
  • D2 es una matriz de P por (K+L) cuyo bloque superior derecho de L por L es diagonal,
  • R0 es una matriz de (K+L) por N cuyo bloque superior derecho de (K+L) por (K+L) es no singular y triangular superior,

K+L es el rango numérico efectivo de la matriz [A; B].

Iterar la descomposición produce los componentes U, V, Q, D1, D2 y R0.

Las entradas de F.D1 y F.D2 están relacionadas, como se explica en la documentación de LAPACK para el SVD generalizado y la rutina xGGSVD3 que se llama por debajo (en LAPACK 3.6.0 y versiones más nuevas).

Ejemplos

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

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

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

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

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

Calcula la descomposición en valores singulares (SVD) de A y devuelve un objeto SVD.

U, S, V y Vt se pueden obtener de la factorización F con F.U, F.S, F.V y F.Vt, de tal manera que A = U * Diagonal(S) * Vt. El algoritmo produce Vt y, por lo tanto, es más eficiente extraer Vt que V. Los valores singulares en S están ordenados en orden descendente.

Iterar la descomposición produce los componentes U, S y V.

Si full = false (por defecto), se devuelve una SVD "delgada". Para una matriz A de $M \times N$, en la factorización completa U es $M \times M$ y V es $N \times N$, mientras que en la factorización delgada U es $M \times K$ y V es $N \times K$, donde $K = \min(M,N)$ es el número de valores singulares.

Si alg = DivideAndConquer(), se utiliza un algoritmo de divide y vencerás para calcular la SVD. Otra opción (típicamente más lenta pero más precisa) es alg = QRIteration().

Julia 1.3

El argumento de palabra clave alg requiere Julia 1.3 o posterior.

Ejemplos

julia> A = rand(4,3);

julia> F = svd(A); # Almacenar el objeto de factorización

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

julia> U, S, V = F; # desestructuración a través de la iteración

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

julia> Uonly, = svd(A); # Almacenar solo U

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

Calcula la SVD generalizada de A y B, devolviendo un objeto de factorización GeneralizedSVD F tal que [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q'

  • U es una matriz ortogonal de M por M,
  • V es una matriz ortogonal de P por P,
  • Q es una matriz ortogonal de N por N,
  • D1 es una matriz diagonal de M por (K+L) con 1s en las primeras K entradas,
  • D2 es una matriz de P por (K+L) cuyo bloque superior derecho de L por L es diagonal,
  • R0 es una matriz de (K+L) por N cuyo bloque superior derecho de (K+L) por (K+L) es no singular y triangular superior,

K+L es el rango numérico efectivo de la matriz [A; B].

Iterar la descomposición produce los componentes U, V, Q, D1, D2 y R0.

La SVD generalizada se utiliza en aplicaciones como cuando se quiere comparar cuánto pertenece a A frente a cuánto pertenece a B, como en el genoma humano frente al de levadura, o señal frente a ruido, o entre clústeres frente a dentro de clústeres. (Ver Edelman y Wang para discusión: https://arxiv.org/abs/1901.00485)

Descompone [A; B] en [UC; VS]H, donde [UC; VS] es una base ortogonal natural para el espacio de columnas de [A; B], y H = RQ' es una base no ortogonal natural para el espacio de filas de [A;B], donde las filas superiores se atribuyen más estrechamente a la matriz A, y las inferiores a la matriz B. Las matrices multi-coseno/seno C y S proporcionan una medida múltiple de cuánto A frente a cuánto B, y U y V proporcionan direcciones en las que se miden.

Ejemplos

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

julia> F = svd(A, B);

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

julia> H = R*Q';

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

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

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

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

svd! es lo mismo que svd, pero ahorra espacio al sobrescribir la entrada A, en lugar de crear una copia. Consulta la documentación de svd para más detalles.

source
svd!(A, B) -> GeneralizedSVD

svd! es lo mismo que svd, pero modifica los argumentos A y B en su lugar, en lugar de hacer copias. Consulta la documentación de svd para más detalles.

source
LinearAlgebra.svdvalsFunction
svdvals(A)

Devuelve los valores singulares de A en orden descendente.

Ejemplos

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

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

Devuelve los valores singulares generalizados de la descomposición en valores singulares generalizados de A y B. Ver también svd.

Ejemplos

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

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

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

Devuelve los valores singulares de A, ahorrando espacio al sobrescribir la entrada. Consulta también svdvals y svd.

source
svdvals!(A, B)

Devuelve los valores singulares generalizados de la descomposición en valores singulares generalizados de A y B, ahorrando espacio al sobrescribir A y B. Véase también svd y svdvals.

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

Un operador lineal de rotación de Givens. Los campos c y s representan el coseno y el seno del ángulo de rotación, respectivamente. El tipo Givens admite la multiplicación por la izquierda G*A y la multiplicación por la derecha con transposición conjugada A*G'. El tipo no tiene un size y, por lo tanto, se puede multiplicar con matrices de tamaño arbitrario siempre que i2<=size(A,2) para G*A o i2<=size(A,1) para A*G'.

Ver también givens.

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

Calcula la rotación de Givens G y el escalar r tal que para cualquier vector x donde

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

el resultado de la multiplicación

y = G*x

tiene la propiedad de que

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

Ver también LinearAlgebra.Givens.

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

Calcula la rotación de Givens G y el escalar r tal que el resultado de la multiplicación

B = G*A

tiene la propiedad de que

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

Ver también LinearAlgebra.Givens. ```

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

Calcula la rotación de Givens G y el escalar r tal que el resultado de la multiplicación

B = G*x

tiene la propiedad de que

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

Ver también LinearAlgebra.Givens. ```

source
LinearAlgebra.triuFunction
triu(M)

Triángulo superior de una matriz.

Ejemplos

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

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

Devuelve el triángulo superior de M comenzando desde la k-ésima superdiagonal.

Ejemplos

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

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

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

Triángulo superior de una matriz, sobrescribiendo M en el proceso. Ver también triu.

source
triu!(M, k::Integer)

Devuelve el triángulo superior de M comenzando desde la k-ésima superdiagonal, sobrescribiendo M en el proceso.

Ejemplos

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

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

Triángulo inferior de una matriz.

Ejemplos

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

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

Devuelve el triángulo inferior de M comenzando desde la k-ésima superdiagonal.

Ejemplos

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

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

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

Triángulo inferior de una matriz, sobrescribiendo M en el proceso. Ver también tril.

source
tril!(M, k::Integer)

Devuelve el triángulo inferior de M comenzando desde la k-ésima superdiagonal, sobrescribiendo M en el proceso.

Ejemplos

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

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

Un AbstractRange que da los índices de la k-ésima diagonal de la matriz M. Opcionalmente, se puede especificar un estilo de índice que determina el tipo de rango devuelto. Si indstyle isa IndexLinear (por defecto), esto devuelve un AbstractRange{Integer}. Por otro lado, si indstyle isa IndexCartesian, esto devuelve un AbstractRange{CartesianIndex{2}}.

Si k no se proporciona, se asume que es 0 (correspondiente a la diagonal principal).

Ver también: diag, diagm, Diagonal.

Ejemplos

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

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

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

Especificar un IndexStyle requiere al menos Julia 1.11.

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

La k-ésima diagonal de una matriz, como un vector.

Véase también diagm, diagind, Diagonal, isdiag.

Ejemplos

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

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

Construye una matriz a partir de `Pair`s de diagonales y vectores. El vector `kv.second` se colocará en la diagonal `kv.first`. Por defecto, la matriz es cuadrada y su tamaño se infiere de `kv`, pero se puede especificar un tamaño no cuadrado `m`×`n` (rellenado con ceros según sea necesario) pasando `m,n` como los primeros argumentos. Para índices de diagonal repetidos `kv.first`, los valores en los vectores correspondientes `kv.second` se sumarán.

`diagm` construye una matriz completa; si deseas versiones que ahorren espacio con aritmética rápida, consulta [`Diagonal`](@ref), [`Bidiagonal`](@ref), [`Tridiagonal`](@ref) y [`SymTridiagonal`](@ref).

# Ejemplos

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

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

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

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

Construye una matriz con los elementos del vector como elementos diagonales. Por defecto, la matriz es cuadrada y su tamaño está dado por length(v), pero se puede especificar un tamaño no cuadrado m×n pasando m,n como los primeros argumentos.

Ejemplos

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

Devuelve el rango de la factorización QR

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

Calcula el rango de S calculando su factorización QR. Los valores menores que tol se consideran cero. Consulta el manual de SPQR.

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

Calcula el rango numérico de una matriz contando cuántos valores de salida de svdvals(A) son mayores que max(atol, rtol*σ₁), donde σ₁ es el valor singular más grande calculado de A. atol y rtol son las tolerancias absolutas y relativas, respectivamente. La tolerancia relativa por defecto es n*ϵ, donde n es el tamaño de la dimensión más pequeña de A, y ϵ es el eps del tipo de elemento de A.

Note

El rango numérico puede ser una caracterización sensible e imprecisa de matrices mal condicionadas con valores singulares que están cerca de la tolerancia umbral max(atol, rtol*σ₁). En tales casos, ligeras perturbaciones en el cálculo del valor singular o en la matriz pueden cambiar el resultado de rank al empujar uno o más valores singulares a través del umbral. Estas variaciones pueden incluso ocurrir debido a cambios en errores de punto flotante entre diferentes versiones de Julia, arquitecturas, compiladores o sistemas operativos.

Julia 1.1

Los argumentos de palabra clave atol y rtol requieren al menos Julia 1.1. En Julia 1.0, rtol está disponible como un argumento posicional, pero esto será desaprobado en Julia 2.0.

Ejemplos

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

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

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

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

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

Para cualquier contenedor iterable A (incluyendo arreglos de cualquier dimensión) de números (o cualquier tipo de elemento para el cual norm está definido), calcula la p-norma (por defecto p=2) como si A fuera un vector de la longitud correspondiente.

La p-norma se define como

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

con $a_i$ las entradas de A, $| a_i |$ la norm de $a_i$, y $n$ la longitud de A. Dado que la p-norma se calcula utilizando las norms de las entradas de A$, lap-norma de un vector de vectores no es compatible con la interpretación de este como un vector bloque en general sip != 2`.

p puede asumir cualquier valor numérico (aunque no todos los valores producen una norma de vector matemáticamente válida). En particular, norm(A, Inf) devuelve el valor más grande en abs.(A), mientras que norm(A, -Inf) devuelve el más pequeño. Si A es una matriz y p=2, entonces esto es equivalente a la norma de Frobenius.

El segundo argumento p no es necesariamente parte de la interfaz para norm, es decir, un tipo personalizado puede implementar solo norm(A) sin el segundo argumento.

Usa opnorm para calcular la norma del operador de una matriz.

Ejemplos

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

julia> norm(v)
7.0

julia> norm(v, 1)
11.0

julia> norm(v, Inf)
6.0

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

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

julia> norm(1:9)
16.881943016134134

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

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

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

Para números, devuelve $\left( |x|^p \right)^{1/p}$.

Ejemplos

julia> norm(2, 1)
2.0

julia> norm(-2, 1)
2.0

julia> norm(2, 2)
2.0

julia> norm(-2, 2)
2.0

julia> norm(2, Inf)
2.0

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

Calcula la norma del operador (o norma de matriz) inducida por la norma vectorial p, donde los valores válidos de p son 1, 2 o Inf. (Ten en cuenta que para matrices dispersas, p=2 actualmente no está implementado). Usa norm para calcular la norma de Frobenius.

Cuando p=1, la norma del operador es la suma máxima de columnas absolutas de A:

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

con $a_{ij}$ las entradas de $A$, y $m$ y $n$ sus dimensiones.

Cuando p=2, la norma del operador es la norma espectral, igual al mayor valor singular de A.

Cuando p=Inf, la norma del operador es la suma máxima de filas absolutas de A:

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

Ejemplos

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

julia> opnorm(A, Inf)
6.0

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

Para números, devuelve $\left( |x|^p \right)^{1/p}$. Esto es equivalente a norm.

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

Para vectores envueltos en Adjoint/Transpose, devuelve el operador $q$-norm de A, que es equivalente al p-norm con valor p = q/(q-1). Coinciden en p = q = 2. Usa norm para calcular el p norm de A como un vector.

La diferencia en la norma entre un espacio vectorial y su dual surge para preservar la relación entre dualidad y el producto punto, y el resultado es consistente con el operador p-norm de una matriz 1 × n.

Ejemplos

julia> v = [1; im];

julia> vc = v';

julia> opnorm(vc, 1)
1.0

julia> norm(vc, 1)
2.0

julia> norm(v, 1)
2.0

julia> opnorm(vc, 2)
1.4142135623730951

julia> norm(vc, 2)
1.4142135623730951

julia> norm(v, 2)
1.4142135623730951

julia> opnorm(vc, Inf)
2.0

julia> norm(vc, Inf)
1.0

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

Normaliza el arreglo a en su lugar para que su p-norma sea igual a la unidad, es decir, norm(a, p) == 1. Consulta también normalize y norm.

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

Normaliza a de modo que su p-norma sea igual a la unidad, es decir, norm(a, p) == 1. Para escalares, esto es similar a sign(a), excepto que normalize(0) = NaN. Consulta también normalize!, norm, y sign.

Ejemplos

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

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

julia> norm(b)
1.0

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

julia> norm(c, 1)
1.0

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

julia> norm(a)
6.48074069840786

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

julia> normalize(3, 1)
1.0

julia> normalize(-8, 1)
-1.0

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

Número de condición de la matriz M, calculado utilizando la norma del operador p. Los valores válidos para p son 1, 2 (por defecto) o Inf.

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

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

El número de condición de Skeel $\kappa_S$ de la matriz M, opcionalmente con respecto al vector x, se calcula utilizando la norma del operador p. $\left\vert M \right\vert$ denota la matriz de valores absolutos (por entrada) de $M$; $\left\vert M \right\vert_{ij} = \left\vert M_{ij} \right\vert$. Los valores válidos para p son 1, 2 e Inf (por defecto).

Esta cantidad también se conoce en la literatura como el número de condición de Bauer, número de condición relativo o número de condición relativo por componente.

source
LinearAlgebra.trFunction
tr(M)

Traza de la matriz. Suma los elementos diagonales de M.

Ejemplos

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

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

Logaritmo del determinante de la matriz. Equivalente a log(det(M)), pero puede proporcionar mayor precisión y evita desbordamiento/subdesbordamiento.

Ejemplos

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

julia> logdet(M)
0.6931471805599453

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

Logaritmo del valor absoluto del determinante de la matriz. Equivalente a (log(abs(det(M))), sign(det(M))), pero puede proporcionar mayor precisión y/o velocidad.

Ejemplos

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

julia> det(A)
-1.0

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

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

julia> det(B)
2.0

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

Inversa de matriz. Calcula la matriz N tal que M * N = I, donde I es la matriz identidad. Se calcula resolviendo la división izquierda N = M \ I.

Ejemplos

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

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

julia> M*N == N*M == Matrix(I, 2, 2)
true
source
LinearAlgebra.pinvFunction
pinv(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
pinv(M, rtol::Real) = pinv(M; rtol=rtol) # será desaprobado en Julia 2.0

Calcula la pseudoinversa de Moore-Penrose.

Para matrices M con elementos de punto flotante, es conveniente calcular la pseudoinversa invirtiendo solo los valores singulares mayores que max(atol, rtol*σ₁) donde σ₁ es el mayor valor singular de M.

La elección óptima de la tolerancia absoluta (atol) y la tolerancia relativa (rtol) varía tanto con el valor de M como con la aplicación prevista de la pseudoinversa. La tolerancia relativa predeterminada es n*ϵ, donde n es el tamaño de la dimensión más pequeña de M, y ϵ es el eps del tipo de elemento de M.

Para invertir matrices densas mal condicionadas en un sentido de mínimos cuadrados, se recomienda rtol = sqrt(eps(real(float(oneunit(eltype(M)))))).

Para más información, consulte [issue8859], [B96], [S84], [KY88].

Ejemplos

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

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

julia> M * N
2×2 Matrix{Float64}:
 1.0          -2.22045e-16
 4.44089e-16   1.0
source
LinearAlgebra.nullspaceFunction
nullspace(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n*ϵ)
nullspace(M, rtol::Real) = nullspace(M; rtol=rtol) # será desaprobado en Julia 2.0

Calcula una base para el espacio nulo de `M` incluyendo los vectores singulares de `M` cuyos valores singulares tienen magnitudes menores que `max(atol, rtol*σ₁)`, donde `σ₁` es el mayor valor singular de `M`.

Por defecto, la tolerancia relativa `rtol` es `n*ϵ`, donde `n` es el tamaño de la dimensión más pequeña de `M`, y `ϵ` es el [`eps`](@ref) del tipo de elemento de `M`.

# Ejemplos

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

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

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

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

source
Base.kronFunction
kron(A, B)

Calcula el producto de Kronecker de dos vectores, matrices o números.

Para vectores reales v y w, el producto de Kronecker está relacionado con el producto exterior por kron(v,w) == vec(w * transpose(v)) o w * transpose(v) == reshape(kron(v,w), (length(w), length(v))). Nota cómo el orden de v y w difiere a la izquierda y a la derecha de estas expresiones (debido al almacenamiento por columnas). Para vectores complejos, el producto exterior w * v' también difiere por la conjugación de v.

Ejemplos

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

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

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

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

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

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

Calcula el producto de Kronecker de A y B y almacena el resultado en C, sobrescribiendo el contenido existente de C. Esta es la versión en su lugar de kron.

Julia 1.6

Esta función requiere Julia 1.6 o posterior.

source
Base.expMethod
exp(A::AbstractMatrix)

Calcula la exponencial de la matriz de A, definida por

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

Para A simétrica o hermítica, se utiliza una descomposición en valores propios (eigen), de lo contrario se elige el algoritmo de escalado y cuadrado (ver [H05]).

Ejemplos

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

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

Método más eficiente para exp(im*A) de la matriz cuadrada A (especialmente si A es Hermitiana o Simétrica real).

Véase también cispi, sincos, exp.

Julia 1.7

El soporte para usar cis con matrices se agregó en Julia 1.7.

Ejemplos

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

Potencia de matriz, equivalente a $\exp(p\log(A))$

Ejemplos

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

Exponencial de matriz, equivalente a $\exp(\log(b)A)$.

Julia 1.1

Se agregó soporte para elevar números Irrational (como ) a una matriz en Julia 1.1.

Ejemplos

julia> 2^[1 2; 0 3]
2×2 Matriz{Float64}:
 2.0  6.0
 0.0  8.0

julia> ℯ^[1 2; 0 3]
2×2 Matriz{Float64}:
 2.71828  17.3673
 0.0      20.0855
source
Base.logMethod
log(A::AbstractMatrix)

Si A no tiene valores propios reales negativos, calcula el logaritmo matricial principal de A, es decir, la matriz única $X$ tal que $e^X = A$ y $-\pi < Im(\lambda) < \pi$ para todos los valores propios $\lambda$ de $X$. Si A tiene valores propios no positivos, se devuelve una función matricial no principal siempre que sea posible.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen), si A es triangular se emplea una versión mejorada del método de escalado inverso y cuadrado (ver [AH12] y [AHR13]). Si A es real sin valores propios negativos, entonces se calcula la forma de Schur real. De lo contrario, se calcula la forma de Schur compleja. Luego se utiliza el algoritmo triangular superior (cuasi-)triangular en [AHR13] sobre el factor (cuasi-)triangular superior.

Ejemplos

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

julia> log(A)
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
source
Base.sqrtMethod
sqrt(x)

Devuelve $\sqrt{x}$.

Lanza DomainError para argumentos Real negativos. Usa argumentos negativos complejos en su lugar. Ten en cuenta que sqrt tiene un corte de rama a lo largo del eje real negativo.

El operador prefijo es equivalente a sqrt.

Véase también: hypot.

Ejemplos

julia> sqrt(big(81))
9.0

julia> sqrt(big(-81))
ERROR: DomainError con -81.0:
Resultado NaN para entrada no-NaN.
Stacktrace:
 [1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]

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

julia> sqrt(-81 - 0.0im)  # -0.0im está por debajo del corte de rama
0.0 - 9.0im

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

Si A no tiene valores propios reales negativos, calcula la raíz cuadrada principal de la matriz A, es decir, la matriz única $X$ con valores propios que tienen parte real positiva tal que $X^2 = A$. De lo contrario, se devuelve una raíz cuadrada no principal.

Si A es simétrica real o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular la raíz cuadrada. Para tales matrices, los valores propios λ que parecen ser ligeramente negativos debido a errores de redondeo se tratan como si fueran cero. Más precisamente, las matrices con todos los valores propios ≥ -rtol*(max |λ|) se tratan como semidefinidas (produciendo una raíz cuadrada hermítica), con los valores propios negativos considerados como cero. rtol es un argumento de palabra clave para sqrt (solo en el caso hermítico/simétrico real) que por defecto es la precisión de la máquina escalada por size(A,1).

De lo contrario, la raíz cuadrada se determina por medio del método de Björck-Hammarling [BH83], que calcula la forma de Schur compleja (schur) y luego la raíz cuadrada compleja del factor triangular. Si existe una raíz cuadrada real, entonces se utiliza una extensión de este método [H87] que calcula la forma de Schur real y luego la raíz cuadrada real del factor cuasi-triangular.

Ejemplos

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

julia> sqrt(A)
2×2 Matrix{Float64}:
 2.0  0.0
 0.0  2.0
source
Base.Math.cbrtMethod
cbrt(A::AbstractMatrix{<:Real})

Calcula la raíz cúbica de valor real de una matriz de valor real A. Si T = cbrt(A), entonces tenemos T*T*T ≈ A, ver el ejemplo dado a continuación.

Si A es simétrica, es decir, de tipo HermOrSym{<:Real}, entonces se utiliza (eigen) para encontrar la raíz cúbica. De lo contrario, se utiliza una versión especializada del algoritmo de raíz p-ésima [S03], que explota la descomposición de Schur de valor real (schur) para calcular la raíz cúbica.

Ejemplos

julia> A = [0.927524 -0.15857; -1.3677 -1.01172]
2×2 Matrix{Float64}:
  0.927524  -0.15857
 -1.3677    -1.01172

julia> T = cbrt(A)
2×2 Matrix{Float64}:
  0.910077  -0.151019
 -1.30257   -0.936818

julia> T*T*T ≈ A
true
source
Base.cosMethod
cos(A::AbstractMatrix)

Calcula el coseno de matriz de una matriz cuadrada A.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular el coseno. De lo contrario, el coseno se determina llamando a exp.

Ejemplos

julia> cos(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
source
Base.sinMethod
sin(A::AbstractMatrix)

Calcula el seno de matriz de una matriz cuadrada A.

Si A es simétrica o hermitiana, se utiliza su descomposición en valores propios (eigen) para calcular el seno. De lo contrario, el seno se determina llamando a exp.

Ejemplos

julia> sin(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649
source
Base.Math.sincosMethod
sincos(A::AbstractMatrix)

Calcula el seno y el coseno de matriz de una matriz cuadrada A.

Ejemplos

julia> S, C = sincos(fill(1.0, (2,2)));

julia> S
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649

julia> C
2×2 Matrix{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
source
Base.tanMethod
tan(A::AbstractMatrix)

Calcula la tangente de matriz de una matriz cuadrada A.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular la tangente. De lo contrario, la tangente se determina llamando a exp.

Ejemplos

julia> tan(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 -1.09252  -1.09252
 -1.09252  -1.09252
source
Base.Math.secMethod
sec(A::AbstractMatrix)

Calcula la secante de matriz de una matriz cuadrada A.

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

Calcula la cosecante de matriz de una matriz cuadrada A.

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

Calcula la cotangente de matriz de una matriz cuadrada A.

source
Base.coshMethod
cosh(A::AbstractMatrix)

Calcula el coseno hiperbólico de matriz de una matriz cuadrada A.

source
Base.sinhMethod
sinh(A::AbstractMatrix)

Calcula el seno hiperbólico de matriz de una matriz cuadrada A.

source
Base.tanhMethod
tanh(A::AbstractMatrix)

Calcula la tangente hiperbólica de una matriz cuadrada A.

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

Calcula la secante hiperbólica de matriz del cuadrado A.

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

Calcula la cosecante hiperbólica de matriz del cuadrado A.

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

Calcula la cotangente hiperbólica de matriz del cuadrado A.

source
Base.acosMethod
acos(A::AbstractMatrix)

Calcula el coseno inverso de una matriz cuadrada A.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular el coseno inverso. De lo contrario, el coseno inverso se determina utilizando log y sqrt. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulte [AH16_1].

Ejemplos

julia> acos(cos([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5-8.32667e-17im  0.1+0.0im
 -0.2+2.63678e-16im  0.3-3.46945e-16im
source
Base.asinMethod
asin(A::AbstractMatrix)

Calcula el seno inverso de una matriz cuadrada A.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular el seno inverso. De lo contrario, el seno inverso se determina utilizando log y sqrt. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulte [AH16_2].

Ejemplos

julia> asin(sin([0.5 0.1; -0.2 0.3]))
2×2 Matrix{ComplexF64}:
  0.5-4.16334e-17im  0.1-5.55112e-17im
 -0.2+9.71445e-17im  0.3-1.249e-16im
source
Base.atanMethod
atan(A::AbstractMatrix)

Calcula la tangente inversa de una matriz cuadrada A.

Si A es simétrica o hermítica, se utiliza su descomposición en valores propios (eigen) para calcular la tangente inversa. De lo contrario, la tangente inversa se determina utilizando log. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulte [AH16_3].

Ejemplos

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

Calcula la cosecante de la matriz inversa de A.

source
Base.acoshMethod
acosh(A::AbstractMatrix)

Calcula el coseno hiperbólico inverso de una matriz cuadrada A. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulta [AH16_4].

source
Base.asinhMethod
asinh(A::AbstractMatrix)

Calcula el seno hiperbólico inverso de una matriz cuadrada A. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulta [AH16_5].

source
Base.atanhMethod
atanh(A::AbstractMatrix)

Calcula la tangente hiperbólica inversa de una matriz cuadrada A. Para la teoría y las fórmulas logarítmicas utilizadas para calcular esta función, consulta [AH16_6].

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

Calcula la cosecante hiperbólica inversa de la matriz A.

source
LinearAlgebra.lyapFunction
lyap(A, C)

Calcula la solución X de la ecuación de Lyapunov continua AX + XA' + C = 0, donde ningún valor propio de A tiene una parte real cero y ningún par de valores propios son conjugados complejos negativos entre sí.

Ejemplos

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

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

julia> X = lyap(A, B)
2×2 Matrix{Float64}:
  0.5  -0.5
 -0.5   0.25

julia> A*X + X*A' ≈ -B
true
source
LinearAlgebra.sylvesterFunction
sylvester(A, B, C)

Calcula la solución X de la ecuación de Sylvester AX + XB + C = 0, donde A, B y C tienen dimensiones compatibles y A y -B no tienen valores propios con la misma parte real.

Ejemplos

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

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

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

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

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

Prueba que una factorización de una matriz tuvo éxito.

Julia 1.6

issuccess(::CholeskyPivoted) requiere Julia 1.6 o posterior.

Ejemplos

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

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

Prueba que la factorización LU de una matriz tuvo éxito. Por defecto, una factorización que produce un factor U válido pero deficiente en rango se considera un fallo. Esto se puede cambiar pasando allowsingular = true.

Julia 1.11

El argumento de palabra clave allowsingular se agregó en Julia 1.11.

Ejemplos

julia> F = lu([1 2; 1 2], check = false);

julia> issuccess(F)
false

julia> issuccess(F, allowsingular = true)
true
source
LinearAlgebra.issymmetricFunction
issymmetric(A) -> Bool

Prueba si una matriz es simétrica.

Ejemplos

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

julia> issymmetric(a)
true

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

julia> issymmetric(b)
false
source
LinearAlgebra.isposdefFunction
isposdef(A) -> Bool

Prueba si una matriz es definida positiva (y Hermitiana) intentando realizar una factorización de Cholesky de A.

Ver también isposdef!, cholesky.

Ejemplos

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

julia> isposdef(A)
true
source
LinearAlgebra.isposdef!Function
isposdef!(A) -> Bool

Prueba si una matriz es definida positiva (y Hermitiana) intentando realizar una factorización de Cholesky de A, sobrescribiendo A en el proceso. Ver también isposdef.

Ejemplos

julia> A = [1. 2.; 2. 50.];

julia> isposdef!(A)
true

julia> A
2×2 Matrix{Float64}:
 1.0  2.0
 2.0  6.78233
source
LinearAlgebra.istrilFunction
istril(A::AbstractMatrix, k::Integer = 0) -> Bool

Prueba si A es triangular inferior comenzando desde la k-ésima superdiagonal.

Ejemplos

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

julia> istril(a)
false

julia> istril(a, 1)
true

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

julia> istril(c)
false

julia> istril(c, 1)
true
source
LinearAlgebra.istriuFunction
istriu(A::AbstractMatrix, k::Integer = 0) -> Bool

Prueba si A es triangular superior comenzando desde la k-ésima superdiagonal.

Ejemplos

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

julia> istriu(a)
false

julia> istriu(a, -1)
true

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

julia> istriu(c)
false

julia> istriu(c, -1)
true
source
LinearAlgebra.isdiagFunction
isdiag(A) -> Bool

Prueba si una matriz es diagonal en el sentido de que iszero(A[i,j]) es verdadero a menos que i == j. Ten en cuenta que no es necesario que A sea cuadrada; si también deseas verificar eso, necesitas comprobar que size(A, 1) == size(A, 2).

Ejemplos

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

julia> isdiag(a)
false

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

julia> isdiag(b)
true

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

julia> isdiag(c)
true

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

julia> isdiag(d)
false
source
LinearAlgebra.ishermitianFunction
ishermitian(A) -> Bool

Prueba si una matriz es Hermitiana.

Ejemplos

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

julia> ishermitian(a)
true

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

julia> ishermitian(b)
true
source
Base.transposeFunction
transpose(A)

Transposición perezosa. Mutar el objeto devuelto debería mutar apropiadamente A. A menudo, pero no siempre, produce Transpose(A), donde Transpose es un envoltorio de transposición perezosa. Tenga en cuenta que esta operación es recursiva.

Esta operación está destinada al uso en álgebra lineal; para manipulación de datos general, consulte permutedims, que no es recursiva.

Ejemplos

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

julia> B = transpose(A)
2×2 transpose(::Matrix{Int64}) with eltype Int64:
 3  0
 2  0

julia> B isa Transpose
true

julia> transpose(B) === A # la transposición de una transposición desenvuelve el padre
true

julia> Transpose(B) # sin embargo, el constructor siempre envuelve su argumento
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # modificar B modificará A automáticamente

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

Para matrices complejas, la operación adjoint es equivalente a una transposición conjugada.

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

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

La transpose de un AbstractVector es un vector fila:

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

julia> transpose(v) # devuelve un vector fila
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia> transpose(v) * v # calcular el producto punto
14

Para una matriz de matrices, los bloques individuales se operan recursivamente:

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

julia> D = reshape([C, 2C, 3C, 4C], 2, 2) # construir una matriz de bloques
2×2 Matrix{Matrix{Int64}}:
 [1 3; 2 4]  [3 9; 6 12]
 [2 6; 4 8]  [4 12; 8 16]

julia> transpose(D) # los bloques se transponen recursivamente
2×2 transpose(::Matrix{Matrix{Int64}}) with eltype Transpose{Int64, Matrix{Int64}}:
 [1 2; 3 4]   [2 4; 6 8]
 [3 6; 9 12]  [4 8; 12 16]
source
transpose(F::Factorization)

Transposición perezosa de la factorización F. Por defecto, devuelve una TransposeFactorization, excepto para Factorizations con eltype real, en cuyo caso devuelve una AdjointFactorization.

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

Transpone la matriz A y la almacena en la matriz X. size(X) debe ser igual a size(transpose(A)). No se asigna memoria adicional más allá de redimensionar rowval y nzval de X, si es necesario.

Consulta halfperm!

source
transpose!(dest,src)

Transponer el arreglo src y almacenar el resultado en el arreglo preasignado dest, que debe tener un tamaño correspondiente a (size(src,2),size(src,1)). No se admite la transposición en el lugar y ocurrirán resultados inesperados si src y dest tienen regiones de memoria superpuestas.

Ejemplos

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

julia> B = zeros(Complex{Int64}, 2, 2)
2×2 Matrix{Complex{Int64}}:
 0+0im  0+0im
 0+0im  0+0im

julia> transpose!(B, A);

julia> B
2×2 Matrix{Complex{Int64}}:
 3+2im  8+7im
 9+2im  4+6im

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im
source
LinearAlgebra.TransposeType
Transponer

Tipo de envoltura perezosa para una vista transpuesta del objeto de álgebra lineal subyacente, generalmente un AbstractVector/AbstractMatrix. Por lo general, el constructor Transpose no debe ser llamado directamente, usa transpose en su lugar. Para materializar la vista, usa copy.

Este tipo está destinado para uso en álgebra lineal; para manipulación de datos general, consulta permutedims.

Ejemplos

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

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

Adjunto perezoso (transposición conjugada). Tenga en cuenta que adjoint se aplica recursivamente a los elementos.

Para los tipos numéricos, adjoint devuelve el conjugado complejo y, por lo tanto, es equivalente a la función identidad para números reales.

Esta operación está destinada al uso en álgebra lineal; para manipulación de datos general, consulte permutedims.

Ejemplos

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

julia> B = A' # equivalentemente 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 # el adjunto de un adjunto desenvuelve el padre
true

julia> Adjoint(B) # sin embargo, el constructor siempre envuelve su argumento
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; # modificar B modificará A automáticamente

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

Para matrices reales, la operación adjoint es equivalente a una transpose.

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

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

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

El adjunto de un AbstractVector es un vector fila:

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 # calcular el producto punto, equivalentemente x' * x
25 + 0im

Para una matriz de matrices, los bloques individuales se operan recursivamente:

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

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

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

Adjunto perezoso de la factorización F. Por defecto, devuelve un envoltorio AdjointFactorization.

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

Transpone la matriz A y almacena el adjunto de los elementos en la matriz X. size(X) debe ser igual a size(transpose(A)). No se asigna memoria adicional más que el redimensionamiento de rowval y nzval de X, si es necesario.

Consulta halfperm!

source
adjoint!(dest,src)

Transponer conjugado el arreglo src y almacenar el resultado en el arreglo preasignado dest, que debe tener un tamaño correspondiente a (size(src,2),size(src,1)). No se admite la transposición en el lugar y ocurrirán resultados inesperados si src y dest tienen regiones de memoria superpuestas.

Ejemplos

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

julia> B = zeros(Complex{Int64}, 2, 2)
2×2 Matrix{Complex{Int64}}:
 0+0im  0+0im
 0+0im  0+0im

julia> adjoint!(B, A);

julia> B
2×2 Matrix{Complex{Int64}}:
 3-2im  8-7im
 9-2im  4-6im

julia> A
2×2 Matrix{Complex{Int64}}:
 3+2im  9+2im
 8+7im  4+6im
source
LinearAlgebra.AdjointType
Adjunto

Tipo de envoltura perezosa para una vista adjunta del objeto de álgebra lineal subyacente, generalmente un AbstractVector/AbstractMatrix. Por lo general, el constructor Adjoint no debe ser llamado directamente, usa adjoint en su lugar. Para materializar la vista, usa copy.

Este tipo está destinado para uso en álgebra lineal; para manipulación de datos general, consulta permutedims.

Ejemplos

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

Evalúa de manera ansiosa la transposición/adjunto de matriz perezosa. Ten en cuenta que la transposición se aplica recursivamente a los elementos.

Esta operación está destinada para el uso en álgebra lineal; para la manipulación de datos general, consulta permutedims, que no es recursiva.

Ejemplos

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

julia> T = transpose(A)
2×2 transpose(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 1+0im  0-3im
 0+2im  4+0im

julia> copy(T)
2×2 Matrix{Complex{Int64}}:
 1+0im  0-3im
 0+2im  4+0im
source
LinearAlgebra.stride1Function
stride1(A) -> Int

Devuelve la distancia entre elementos sucesivos de la matriz en la dimensión 1 en unidades de tamaño de elemento.

Ejemplos

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

julia> LinearAlgebra.stride1(A)
1

julia> B = view(A, 2:2:4)
2-element view(::Vector{Int64}, 2:2:4) with eltype Int64:
 2
 4

julia> LinearAlgebra.stride1(B)
2
source
LinearAlgebra.checksquareFunction
LinearAlgebra.checksquare(A)

Verifica que una matriz sea cuadrada y luego devuelve su dimensión común. Para múltiples argumentos, devuelve un vector.

Ejemplos

julia> A = fill(1, (4,4)); B = fill(1, (5,5));

julia> LinearAlgebra.checksquare(A, B)
2-element Vector{Int64}:
 4
 5
source
LinearAlgebra.peakflopsFunction
LinearAlgebra.peakflops(n::Integer=4096; eltype::DataType=Float64, ntrials::Integer=3, parallel::Bool=false)

peakflops calcula la tasa máxima de flops de la computadora utilizando precisión doble gemm!. Por defecto, si no se especifican argumentos, multiplica dos matrices Float64 de tamaño n x n, donde n = 4096. Si el BLAS subyacente utiliza múltiples hilos, se logran tasas de flops más altas. El número de hilos de BLAS se puede establecer con BLAS.set_num_threads(n).

Si se proporciona el argumento de palabra clave eltype, peakflops construirá matrices con elementos del tipo eltype para calcular la tasa máxima de flops.

Por defecto, peakflops utilizará el mejor tiempo de 3 pruebas. Si se proporciona el argumento de palabra clave ntrials, peakflops utilizará esa cantidad de pruebas para elegir el mejor tiempo.

Si el argumento de palabra clave parallel se establece en true, peakflops se ejecuta en paralelo en todos los procesadores de trabajo. Se devuelve la tasa de flops de toda la computadora paralela. Al ejecutarse en paralelo, solo se utiliza 1 hilo de BLAS. El argumento n sigue refiriéndose al tamaño del problema que se resuelve en cada procesador.

Julia 1.1

Esta función requiere al menos Julia 1.1. En Julia 1.0 está disponible en la biblioteca estándar InteractiveUtils.

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

Devuelve la parte hermitiana de la matriz cuadrada A, definida como (A + A') / 2, como una matriz Hermitian. Para matrices reales A, esto también se conoce como la parte simétrica de A; a veces también se le llama la "parte real del operador". El argumento opcional uplo controla el argumento correspondiente de la vista Hermitian. Para matrices reales, esta última es equivalente a una vista Symmetric.

Véase también hermitianpart! para la operación correspondiente en su lugar.

Julia 1.10

Esta función requiere Julia 1.10 o posterior.

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

Sobrescribe la matriz cuadrada A en su lugar con su parte hermitiana (A + A') / 2, y devuelve Hermitian(A, uplo). Para matrices reales A, esto también se conoce como la parte simétrica de A.

Consulta también hermitianpart para la operación correspondiente fuera de lugar.

Julia 1.10

Esta función requiere Julia 1.10 o posterior.

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

Copia eficientemente los elementos de la matriz A a B con adjunción de la siguiente manera:

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

Los elementos B[ir_dest, jr_dest] son sobrescritos. Además, los parámetros de rango de índice deben satisfacer length(ir_dest) == length(jr_src) y length(jr_dest) == length(ir_src).

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

Copia eficientemente los elementos de la matriz A a B con transposición de la siguiente manera:

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

Los elementos B[ir_dest, jr_dest] son sobrescritos. Además, los parámetros de rango de índice deben satisfacer length(ir_dest) == length(jr_src) y length(jr_dest) == length(ir_src).

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

Copia eficientemente los elementos de la matriz M a B condicionado al parámetro de carácter tM de la siguiente manera:

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

Los elementos B[ir_dest, jr_dest] son sobrescritos. Además, los parámetros de rango de índice deben satisfacer length(ir_dest) == length(jr_src) y length(jr_dest) == length(ir_src).

Consulta también copyto! y copy_adjoint!.

source

Low-level matrix operations

En muchos casos, hay versiones in situ de las operaciones de matrices que te permiten proporcionar un vector o matriz de salida preasignado. Esto es útil al optimizar código crítico para evitar la sobrecarga de asignaciones repetidas. Estas operaciones in situ están sufijadas con ! a continuación (por ejemplo, mul!) de acuerdo con la convención habitual de Julia.

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

Calcula el producto de matriz-matriz o matriz-vector $A B$ y almacena el resultado en Y, sobrescribiendo el valor existente de Y. Ten en cuenta que Y no debe estar aliasado con A o B.

Ejemplos

julia> A = [1.0 2.0; 3.0 4.0]; B = [1.0 1.0; 1.0 1.0]; Y = similar(B);

julia> mul!(Y, A, B) === Y
true

julia> Y
2×2 Matrix{Float64}:
 3.0  3.0
 7.0  7.0

julia> Y == A * B
true

Implementación

Para tipos de matriz y vector personalizados, se recomienda implementar mul! de 5 argumentos en lugar de implementar directamente mul! de 3 argumentos si es posible.

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

Multiplicación y suma de matrices o de matriz-vectores en su lugar combinada $A B α + C β$. El resultado se almacena en C sobrescribiéndolo. Tenga en cuenta que C no debe estar aliasado con A o B.

Julia 1.3

mul! de cinco argumentos requiere al menos Julia 1.3.

Ejemplos

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]; # Una copia del valor original de C

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

Escala un array B por un escalar a sobrescribiendo B en su lugar. Usa rmul! para multiplicar el escalar desde la derecha. La operación de escalado respeta la semántica de la multiplicación * entre a y un elemento de B. En particular, esto también se aplica a la multiplicación que involucra números no finitos como NaN y ±Inf.

Julia 1.1

Antes de Julia 1.1, las entradas NaN y ±Inf en B se trataban de manera inconsistente.

Ejemplos

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

julia> lmul!(2, B)
2×2 Matrix{Int64}:
 2  4
 6  8

julia> lmul!(0.0, [Inf])
1-element Vector{Float64}:
 NaN
source
lmul!(A, B)

Calcula el producto de matrices $AB$, sobrescribiendo B, y devuelve el resultado. Aquí, A debe ser de un tipo de matriz especial, como, por ejemplo, Diagonal, UpperTriangular o LowerTriangular, o de algún tipo ortogonal, ver QR.

Ejemplos

julia> B = [0 1; 1 0];

julia> A = UpperTriangular([1 2; 0 3]);

julia> lmul!(A, B);

julia> B
2×2 Matrix{Int64}:
 2  1
 3  0

julia> B = [1.0 2.0; 3.0 4.0];

julia> F = qr([0 1; -1 0]);

julia> lmul!(F.Q, B)
2×2 Matrix{Float64}:
 3.0  4.0
 1.0  2.0
source
LinearAlgebra.rmul!Function
rmul!(A::AbstractArray, b::Number)

Escala un arreglo A por un escalar b sobrescribiendo A en su lugar. Usa lmul! para multiplicar el escalar desde la izquierda. La operación de escalado respeta la semántica de la multiplicación * entre un elemento de A y b. En particular, esto también se aplica a la multiplicación que involucra números no finitos como NaN y ±Inf.

Julia 1.1

Antes de Julia 1.1, las entradas NaN y ±Inf en A se trataban de manera inconsistente.

Ejemplos

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

julia> rmul!(A, 2)
2×2 Matrix{Int64}:
 2  4
 6  8

julia> rmul!([NaN], 0.0)
1-element Vector{Float64}:
 NaN
source
rmul!(A, B)

Calcula el producto de matrices $AB$, sobrescribiendo A, y devuelve el resultado. Aquí, B debe ser de un tipo de matriz especial, como, por ejemplo, Diagonal, UpperTriangular o LowerTriangular, o de algún tipo ortogonal, ver QR.

Ejemplos

julia> A = [0 1; 1 0];

julia> B = UpperTriangular([1 2; 0 3]);

julia> rmul!(A, B);

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

julia> A = [1.0 2.0; 3.0 4.0];

julia> F = qr([0 1; -1 0]);

julia> rmul!(A, F.Q)
2×2 Matrix{Float64}:
 2.0  1.0
 4.0  3.0
source
LinearAlgebra.ldiv!Function
ldiv!(Y, A, B) -> Y

Calcula A \ B en su lugar y almacena el resultado en Y, devolviendo el resultado.

El argumento A no debe ser una matriz. En su lugar, debe ser un objeto de factorización (por ejemplo, producido por factorize o cholesky). La razón de esto es que la factorización en sí misma es costosa y típicamente asigna memoria (aunque también se puede hacer en su lugar a través de, por ejemplo, lu!), y las situaciones críticas de rendimiento que requieren ldiv! generalmente también requieren un control detallado sobre la factorización de A.

Nota

Ciertos tipos de matrices estructuradas, como Diagonal y UpperTriangular, están permitidos, ya que ya están en una forma factorizada.

Ejemplos

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> X = [1; 2.5; 3];

julia> Y = zero(X);

julia> ldiv!(Y, qr(A), X);

julia> Y ≈ A\X
true
source
ldiv!(A, B)

Calcula A \ B en su lugar y sobrescribiendo B para almacenar el resultado.

El argumento A no debe ser una matriz. En cambio, en lugar de matrices, debe ser un objeto de factorización (por ejemplo, producido por factorize o cholesky). La razón de esto es que la factorización en sí misma es costosa y típicamente asigna memoria (aunque también se puede hacer en su lugar a través de, por ejemplo, lu!), y las situaciones críticas de rendimiento que requieren ldiv! generalmente también requieren un control detallado sobre la factorización de A.

Nota

Ciertos tipos de matrices estructuradas, como Diagonal y UpperTriangular, están permitidos, ya que ya están en una forma factorizada.

Ejemplos

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> X = [1; 2.5; 3];

julia> Y = copy(X);

julia> ldiv!(qr(A), X);

julia> X ≈ A\Y
true
source
ldiv!(a::Number, B::AbstractArray)

Divide cada entrada en un arreglo B por un escalar a sobrescribiendo B en su lugar. Usa rdiv! para dividir el escalar desde la derecha.

Ejemplos

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

julia> ldiv!(2.0, B)
2×2 Matrix{Float64}:
 0.5  1.0
 1.5  2.0
source
ldiv!(A::Tridiagonal, B::AbstractVecOrMat) -> B

Calcula A \ B en su lugar mediante eliminación gaussiana con pivoteo parcial y almacena el resultado en B, devolviendo el resultado. En el proceso, las diagonales de A se sobrescriben también.

Julia 1.11

ldiv! para lados izquierdos Tridiagonal requiere al menos Julia 1.11.

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

Calcula A / B en su lugar y sobrescribiendo A para almacenar el resultado.

El argumento B no debe ser una matriz. En su lugar, debe ser un objeto de factorización (por ejemplo, producido por factorize o cholesky). La razón de esto es que la factorización en sí misma es costosa y típicamente asigna memoria (aunque también se puede hacer en su lugar a través de, por ejemplo, lu!), y las situaciones críticas de rendimiento que requieren rdiv! generalmente también requieren un control detallado sobre la factorización de B.

Note

Ciertos tipos de matrices estructuradas, como Diagonal y UpperTriangular, están permitidos, ya que ya están en una forma factorizada.

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

Divide cada entrada en un arreglo A por un escalar b sobrescribiendo A en su lugar. Usa ldiv! para dividir el escalar desde la izquierda.

Ejemplos

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

julia> rdiv!(A, 2.0)
2×2 Matrix{Float64}:
 0.5  1.0
 1.5  2.0
source

BLAS functions

En Julia (como en gran parte de la computación científica), las operaciones de álgebra lineal densa se basan en el LAPACK library, que a su vez se construye sobre bloques de construcción básicos de álgebra lineal conocidos como el BLAS. Hay implementaciones altamente optimizadas de BLAS disponibles para cada arquitectura de computadora, y a veces en rutinas de álgebra lineal de alto rendimiento es útil llamar a las funciones de BLAS directamente.

LinearAlgebra.BLAS proporciona envolturas para algunas de las funciones BLAS. Aquellas funciones BLAS que sobrescriben uno de los arreglos de entrada tienen nombres que terminan en '!'. Por lo general, una función BLAS tiene cuatro métodos definidos, para Float32, Float64, ComplexF32, y ComplexF64 arreglos.

BLAS character arguments

Muchas funciones BLAS aceptan argumentos que determinan si se debe transponer un argumento (trans), qué triángulo de una matriz se debe referenciar (uplo o ul), si se puede asumir que la diagonal de una matriz triangular es toda de unos (dA) o en qué lado de una multiplicación de matrices pertenece el argumento de entrada (side). Las posibilidades son:

Multiplication order

sideMeaning
'L'The argument goes on the left side of a matrix-matrix operation.
'R'The argument goes on the right side of a matrix-matrix operation.

Triangle referencing

uplo/ulMeaning
'U'Only the upper triangle of the matrix will be used.
'L'Only the lower triangle of the matrix will be used.

Transposition operation

trans/tXMeaning
'N'The input matrix X is not transposed or conjugated.
'T'The input matrix X will be transposed.
'C'The input matrix X will be conjugated and transposed.

Unit diagonal

diag/dXMeaning
'N'The diagonal values of the matrix X will be read.
'U'The diagonal of the matrix X is assumed to be all ones.
LinearAlgebra.BLAS.set_num_threadsFunction
set_num_threads(n::Integer)
set_num_threads(::Nothing)

Establece el número de hilos que la biblioteca BLAS debe usar igual a n::Integer.

También acepta nothing, en cuyo caso julia intenta adivinar el número predeterminado de hilos. Pasar nothing no se recomienda y existe principalmente por razones históricas.

source

Las funciones BLAS se pueden dividir en tres grupos, también llamados tres niveles, dependiendo de cuándo se propusieron por primera vez, el tipo de parámetros de entrada y la complejidad de la operación.

Level 1 BLAS functions

Las funciones BLAS de nivel 1 fueron propuestas por primera vez en [(Lawson, 1979)][Lawson-1979] y definen operaciones entre escalares y vectores.

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

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

Sobrescribe X con c*X + s*Y y Y con -conj(s)*X + c*Y para los primeros n elementos del arreglo X con paso incx y los primeros n elementos del arreglo Y con paso incy. Devuelve X y Y.

Julia 1.5

rot! requiere al menos Julia 1.5.

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

Sobrescribe X con a*X para los primeros n elementos del arreglo X con paso incx. Devuelve X.

Si n y incx no se proporcionan, se utilizan length(X) y stride(X,1).

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

Devuelve X escalado por a para los primeros n elementos del arreglo X con un paso de incx.

Si n e incx no se proporcionan, se utilizan length(X) y stride(X,1).

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

Producto punto de dos vectores que consisten en n elementos del arreglo X con paso incx y n elementos del arreglo Y con paso incy.

Ejemplos

julia> BLAS.dot(10, fill(1.0, 10), 1, fill(1.0, 20), 2)
10.0
source
LinearAlgebra.BLAS.dotuFunction
dotu(n, X, incx, Y, incy)

Función Dot para dos vectores complejos que constan de n elementos del arreglo X con paso incx y n elementos del arreglo Y con paso incy.

Ejemplos

julia> BLAS.dotu(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
-10.0 + 10.0im
source
LinearAlgebra.BLAS.dotcFunction
dotc(n, X, incx, U, incy)

Función Dot para dos vectores complejos, que consiste en n elementos del arreglo X con paso incx y n elementos del arreglo U con paso incy, conjugando el primer vector.

Ejemplos

julia> BLAS.dotc(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
10.0 - 10.0im
source
LinearAlgebra.BLAS.nrm2Function
nrm2(n, X, incx)

2-norma de un vector que consiste en n elementos del arreglo X con paso incx.

Ejemplos

julia> BLAS.nrm2(4, fill(1.0, 8), 2)
2.0

julia> BLAS.nrm2(1, fill(1.0, 8), 2)
1.0
source
LinearAlgebra.BLAS.asumFunction
asum(n, X, incx)

Suma de las magnitudes de los primeros n elementos del arreglo X con paso incx.

Para un arreglo real, la magnitud es el valor absoluto. Para un arreglo complejo, la magnitud es la suma del valor absoluto de la parte real y el valor absoluto de la parte imaginaria.

Ejemplos

julia> BLAS.asum(5, fill(1.0im, 10), 2)
5.0

julia> BLAS.asum(2, fill(1.0im, 10), 5)
2.0
source
LinearAlgebra.BLAS.iamaxFunction
iamax(n, dx, incx)
iamax(dx)

Encuentra el índice del elemento de dx con el valor absoluto máximo. n es la longitud de dx, y incx es el paso. Si n y incx no se proporcionan, se asumen valores predeterminados de n=length(dx) y incx=stride1(dx).

source

Level 2 BLAS functions

Las funciones BLAS de nivel 2 se publicaron en [(Dongarra, 1988)][Dongarra-1988] y definen operaciones de matriz-vector.

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

devolver un vector

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

Actualiza el vector y como alpha*A*x + beta*y o alpha*A'x + beta*y de acuerdo con tA. alpha y beta son escalares. Devuelve el y actualizado.

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

Actualiza el vector y como alpha*A*x + beta*y o alpha*A'*x + beta*y de acuerdo con trans. La matriz A es una matriz de banda general de dimensión m por size(A,2) con kl sub-diagonales y ku super-diagonales. alpha y beta son escalares. Devuelve el y actualizado.

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

Devuelve alpha*A*x o alpha*A'*x según trans. La matriz A es una matriz de banda general de dimensión m por size(A,2) con kl sub-diagonales y ku super-diagonales, y alpha es un escalar.

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

Actualiza el vector y como alpha*A*x + beta*y. Se asume que A es Hermitiana. Solo se utiliza el triángulo ul de A. alpha y beta son escalares. Devuelve el y actualizado.

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

Devuelve alpha*A*x. Se asume que A es Hermitiana. Solo se utiliza el triángulo ul de A. alpha es un escalar.

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

Actualiza el vector y como α*A*x + β*y, donde A es una matriz Hermitiana proporcionada en formato empaquetado AP.

Con uplo = 'U', el arreglo AP debe contener la parte triangular superior de la matriz Hermitiana empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[1, 2] y A[2, 2] respectivamente, y así sucesivamente.

Con uplo = 'L', el arreglo AP debe contener la parte triangular inferior de la matriz Hermitiana empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[2, 1] y A[3, 1] respectivamente, y así sucesivamente.

Las entradas escalares α y β deben ser números complejos o reales.

Las entradas de arreglo x, y y AP deben ser todas del tipo ComplexF32 o ComplexF64.

Devuelve el y actualizado.

Julia 1.5

hpmv! requiere al menos Julia 1.5.

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

Actualiza el vector y como alpha*A*x + beta*y. Se asume que A es simétrica. Solo se utiliza el triángulo ul de A. alpha y beta son escalares. Devuelve el y actualizado.

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

Devuelve alpha*A*x. Se asume que A es simétrica. Solo se utiliza el triángulo ul de A. alpha es un escalar.

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

Actualiza el vector y como alpha*A*x + beta*y donde A es una matriz simétrica en banda de orden size(A,2) con k superdiagonales almacenadas en el argumento A. El diseño de almacenamiento para A se describe en el módulo de referencia BLAS, BLAS de nivel 2 en https://www.netlib.org/lapack/explore-html/. Solo se utiliza el triángulo uplo de A.

Devuelve el y actualizado.

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

Devuelve alpha*A*x donde A es una matriz de banda simétrica de orden size(A,2) con k super-diagonales almacenadas en el argumento A. Solo se utiliza el triángulo uplo de A.

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

Devuelve A*x donde A es una matriz de banda simétrica de orden size(A,2) con k superdiagonales almacenadas en el argumento A. Solo se utiliza el triángulo uplo de A.

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

Actualiza el vector y como α*A*x + β*y, donde A es una matriz simétrica proporcionada en formato empaquetado AP.

Con uplo = 'U', el arreglo AP debe contener la parte triangular superior de la matriz simétrica empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[1, 2] y A[2, 2] respectivamente, y así sucesivamente.

Con uplo = 'L', el arreglo AP debe contener la parte triangular inferior de la matriz simétrica empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[2, 1] y A[3, 1] respectivamente, y así sucesivamente.

Las entradas escalares α y β deben ser reales.

Las entradas de arreglo x, y y AP deben ser todas de tipo Float32 o Float64.

Devuelve el y actualizado.

Julia 1.5

spmv! requiere al menos Julia 1.5.

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

Devuelve op(A)*b, donde op está determinado por tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen todos como uno. La multiplicación ocurre en su lugar en b.

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

Devuelve op(A)*b, donde op se determina por tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen todos como uno.

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

Sobrescribe b con la solución a A*x = b o una de las otras dos variantes determinadas por tA y ul. dA determina si los valores diagonales se leen o se asumen como todos unos. Devuelve el b actualizado.

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

Devuelve la solución a A*x = b o una de las otras dos variantes determinadas por tA y ul. dA determina si los valores diagonales se leen o se asumen todos como uno.

source

devolver una matriz

LinearAlgebra.BLAS.ger!Function
ger!(alpha, x, y, A)

Actualización de rango-1 de la matriz A con los vectores x y y como alpha*x*y' + A.

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

Métodos solo para arreglos complejos. Actualización de rango 1 de la matriz Hermitiana A con el vector x como alpha*x*x' + A. uplo controla qué triángulo de A se actualiza. Devuelve A.

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

Actualización de rango-1 de la matriz simétrica A con el vector x como alpha*x*transpose(x) + A. uplo controla qué triángulo de A se actualiza. Devuelve A.

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

Actualiza la matriz A como A+α*x*x', donde A es una matriz simétrica proporcionada en formato empaquetado AP y x es un vector.

Con uplo = 'U', el arreglo AP debe contener la parte triangular superior de la matriz simétrica empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[1, 2] y A[2, 2] respectivamente, y así sucesivamente.

Con uplo = 'L', el arreglo AP debe contener la parte triangular inferior de la matriz simétrica empaquetada secuencialmente, columna por columna, de modo que AP[1] contenga A[1, 1], AP[2] y AP[3] contengan A[2, 1] y A[3, 1] respectivamente, y así sucesivamente.

La entrada escalar α debe ser real.

Las entradas de arreglo x y AP deben ser todas de tipo Float32 o Float64. Devuelve el AP actualizado.

Julia 1.8

spr! requiere al menos Julia 1.8.

source

Level 3 BLAS functions

Las funciones BLAS de nivel 3 se publicaron en [(Dongarra, 1990)][Dongarra-1990] y definen operaciones de matriz-matriz.

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

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

Actualiza la parte triangular inferior o superior especificada por uplo de C como alpha*A*B + beta*C o las otras variantes según tA y tB. Devuelve el C actualizado.

Julia 1.11

gemmt! requiere al menos Julia 1.11.

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

Devuelve la parte triangular inferior o superior especificada por uplo de A*B o las otras tres variantes según tA y tB.

Julia 1.11

gemmt requiere al menos Julia 1.11.

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

Devuelve la parte triangular inferior o superior especificada por uplo de A*B o las otras tres variantes según tA y tB.

Julia 1.11

gemmt requiere al menos Julia 1.11.

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

Actualiza C como alpha*A*B + beta*C o las otras tres variantes según tA y tB. Devuelve el C actualizado.

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

Actualiza C como alpha*A*B + beta*C o alpha*B*A + beta*C de acuerdo a lado. Se asume que A es simétrica. Solo se utiliza el triángulo ul de A. Devuelve el C actualizado.

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

Devuelve alpha*A*B o alpha*B*A según side. Se asume que A es simétrica. Solo se utiliza el triángulo ul de A.

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

Actualiza C como alpha*A*B + beta*C o alpha*B*A + beta*C de acuerdo a lado. Se asume que A es Hermitiana. Solo se utiliza el triángulo ul de A. Devuelve el C actualizado.

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

Devuelve alpha*A*B o alpha*B*A según side. Se asume que A es Hermitiana. Solo se utiliza el triángulo ul de A.

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

Actualización de rango-k de la matriz simétrica C como alpha*A*transpose(A) + beta*C o alpha*transpose(A)*A + beta*C de acuerdo con trans. Solo se utiliza el triángulo uplo de C. Devuelve C.

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

Devuelve ya sea el triángulo superior o el triángulo inferior de A, de acuerdo con uplo, de alpha*A*transpose(A) o alpha*transpose(A)*A, de acuerdo con trans.

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

Métodos solo para arreglos complejos. Actualización de rango-k de la matriz Hermitiana C como alpha*A*A' + beta*C o alpha*A'*A + beta*C de acuerdo con trans. Solo se actualiza el triángulo uplo de C. Devuelve C.

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

Actualización de rango-2k de la matriz simétrica C como alpha*A*transpose(B) + alpha*B*transpose(A) + beta*C o alpha*transpose(A)*B + alpha*transpose(B)*A + beta*C de acuerdo con trans. Solo se utiliza el triángulo uplo de C. Devuelve C.

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

Devuelve el triángulo uplo de alpha*A*transpose(B) + alpha*B*transpose(A) o alpha*transpose(A)*B + alpha*transpose(B)*A, de acuerdo con trans.

source
syr2k(uplo, trans, A, B)

Devuelve el triángulo uplo de A*transpose(B) + B*transpose(A) o transpose(A)*B + transpose(B)*A, según trans.

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

Actualización de rango-2k de la matriz hermitiana C como alpha*A*B' + alpha*B*A' + beta*C o alpha*A'*B + alpha*B'*A + beta*C de acuerdo con trans. El escalar beta debe ser real. Solo se utiliza el triángulo uplo de C. Devuelve C.

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

Devuelve el triángulo uplo de alpha*A*B' + alpha*B*A' o alpha*A'*B + alpha*B'*A, según trans.

source
her2k(uplo, trans, A, B)

Devuelve el triángulo uplo de A*B' + B*A' o A'*B + B'*A, según trans.

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

Actualiza B como alpha*A*B o una de las otras tres variantes determinadas por lado y tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen como todos unos. Devuelve el B actualizado.

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

Devuelve alpha*A*B o una de las otras tres variantes determinadas por lado y tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen como todos unos.

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

Sobrescribe B con la solución a A*X = alpha*B o una de las otras tres variantes determinadas por lado y tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen todos como uno. Devuelve el B actualizado.

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

Devuelve la solución a A*X = alpha*B o una de las otras tres variantes determinadas por lado y tA. Solo se utiliza el triángulo ul de A. dA determina si los valores diagonales se leen o se asumen todos como uno.

source

LAPACK functions

LinearAlgebra.LAPACK proporciona envolturas para algunas de las funciones de LAPACK para álgebra lineal. Aquellas funciones que sobrescriben uno de los arreglos de entrada tienen nombres que terminan en '!'.

Normalmente, una función tiene 4 métodos definidos, uno para cada uno de Float64, Float32, arreglos ComplexF64 y ComplexF32.

Tenga en cuenta que la API de LAPACK proporcionada por Julia puede y cambiará en el futuro. Dado que esta API no está orientada al usuario, no hay un compromiso de soportar/depreciar este conjunto específico de funciones en futuras versiones.

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

Calcula la factorización LU de una matriz en banda AB. kl es la primera subdiagonal que contiene una banda no nula, ku es la última superdiagonal que contiene una, y m es la primera dimensión de la matriz AB. Devuelve la factorización LU en su lugar y ipiv, el vector de pivotes utilizados.

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

Resuelve la ecuación AB * X = B. trans determina la orientación de AB. Puede ser N (sin transponer), T (transponer) o C (transposición conjugada). kl es la primera subdiagonal que contiene una banda no nula, ku es la última superdiagonal que contiene una, y m es la primera dimensión de la matriz AB. ipiv es el vector de pivotes devuelto por gbtrf!. Devuelve el vector o matriz X, sobrescribiendo B en su lugar.

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

Balancea la matriz A antes de calcular su sistema de eigenvalores o la factorización de Schur. job puede ser uno de N (A no será permutada ni escalada), P (A solo será permutada), S (A solo será escalada) o B (A será tanto permutada como escalada). Modifica A en su lugar y devuelve ilo, ihi y scale. Si se activó la permutación, A[i,j] = 0 si j > i y 1 < j < ilo o j > ihi. scale contiene información sobre la escalación/permutaciones realizadas.

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

Transforma los eigenvectores V de una matriz equilibrada usando gebal! a los eigenvectores no escalados/no permutados de la matriz original. Modifica V en su lugar. side puede ser L (se transforman los eigenvectores izquierdos) o R (se transforman los eigenvectores derechos).

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

Reduce A in-place to bidiagonal form A = QBP'. Returns A, que contiene la matriz bidiagonal B; d, que contiene los elementos diagonales de B; e, que contiene los elementos fuera de la diagonal de B; tauq, que contiene los reflectores elementales que representan Q; y taup, que contiene los reflectores elementales que representan P.

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

Calcula la factorización LQ de A, A = LQ. tau contiene escalares que parametrizan los reflectores elementales de la factorización. tau debe tener una longitud mayor o igual a la dimensión más pequeña de A.

Devuelve A y tau modificados en su lugar.

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

Calcula la factorización LQ de A, A = LQ.

Devuelve A, modificado en su lugar, y tau, que contiene escalares que parametrizan los reflectores elementales de la factorización.

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

Calcula la factorización QL de A, A = QL. tau contiene escalares que parametrizan los reflectores elementales de la factorización. tau debe tener una longitud mayor o igual a la dimensión más pequeña de A.

Devuelve A y tau modificados en su lugar.

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

Calcula la factorización QL de A, A = QL.

Devuelve A, modificado en su lugar, y tau, que contiene escalares que parametrizan los reflectores elementales de la factorización.

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

Calcula la factorización QR de A, A = QR. tau contiene escalares que parametrizan los reflectores elementales de la factorización. tau debe tener una longitud mayor o igual a la dimensión más pequeña de A.

Devuelve A y tau modificados en su lugar.

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

Calcula la factorización QR de A, A = QR.

Devuelve A, modificado en su lugar, y tau, que contiene escalares que parametrizan los reflectores elementales de la factorización.

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

Calcula la factorización QR con pivoteo de A, AP = QR utilizando BLAS de nivel 3. P es una matriz de pivoteo, representada por jpvt. tau almacena los reflectores elementales. Los argumentos jpvt y tau son opcionales y permiten pasar arreglos preasignados. Cuando se pasan, jpvt debe tener una longitud mayor o igual a n si A es una matriz de (m x n) y tau debe tener una longitud mayor o igual a la dimensión más pequeña de A. Al entrar, si jpvt[j] no es igual a cero, entonces la columna j de A se permuta al frente de AP.

A, jpvt y tau se modifican en su lugar.

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

Calcula la factorización RQ de A, A = RQ. tau contiene escalares que parametrizan los reflectores elementales de la factorización. tau debe tener una longitud mayor o igual a la dimensión más pequeña de A.

Devuelve A y tau modificados en su lugar.

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

Calcula la factorización RQ de A, A = RQ.

Devuelve A, modificado en su lugar, y tau, que contiene escalares que parametrizan los reflectores elementales de la factorización.

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

Calcula la factorización QR bloqueada de A, A = QR. T contiene reflectores de bloque triangulares superiores que parametrizan los reflectores elementales de la factorización. La primera dimensión de T establece el tamaño del bloque y debe estar entre 1 y n. La segunda dimensión de T debe ser igual a la dimensión más pequeña de A.

Devuelve A y T modificados en su lugar.

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

Calcula la factorización QR bloqueada de A, A = QR. nb establece el tamaño del bloque y debe estar entre 1 y n, la segunda dimensión de A.

Devuelve A, modificado en su lugar, y T, que contiene reflectores de bloque triangulares superiores que parametrizan los reflectores elementales de la factorización.

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

Calcula recursivamente la factorización QR bloqueada de A, A = QR. T contiene reflectores de bloque triangulares superiores que parametrizan los reflectores elementales de la factorización. La primera dimensión de T establece el tamaño del bloque y debe estar entre 1 y n. La segunda dimensión de T debe ser igual a la dimensión más pequeña de A.

Devuelve A y T modificados en su lugar.

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

Calcula recursivamente la factorización QR bloqueada de A, A = QR.

Devuelve A, modificado en su lugar, y T, que contiene reflectores de bloque triangulares superiores que parametrizan los reflectores elementales de la factorización.

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

Calcula la factorización LU con pivoteo de A, A = LU. ipiv contiene la información de pivoteo y info un código que indica éxito (info = 0), un valor singular en U (info = i, en cuyo caso U[i,i] es singular), o un código de error (info < 0).

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

Calcula la factorización LU con pivoteo de A, A = LU.

Devuelve A, modificado en su lugar, ipiv, la información de pivoteo, y un código info que indica éxito (info = 0), un valor singular en U (info = i, en cuyo caso U[i,i] es singular), o un código de error (info < 0).

source
LinearAlgebra.LAPACK.tzrzf!Function
tzrzf!(A) -> (A, tau)

Transforma la matriz trapezoidal superior A a forma triangular superior en su lugar. Devuelve A y tau, los parámetros escalares para los reflectores elementales de la transformación.

source
LinearAlgebra.LAPACK.ormrz!Function
ormrz!(lado, trans, A, tau, C)

Multiplica la matriz C por Q de la transformación suministrada por tzrzf!. Dependiendo de lado o trans, la multiplicación puede ser del lado izquierdo (lado = L, Q*C) o del lado derecho (lado = R, C*Q) y Q puede estar sin modificar (trans = N), transpuesta (trans = T), o conjugadamente transpuesta (trans = C). Devuelve la matriz C que se modifica en su lugar con el resultado de la multiplicación.

source
LinearAlgebra.LAPACK.gels!Function
gels!(trans, A, B) -> (F, B, ssr)

Resuelve la ecuación lineal A * X = B, transpose(A) * X = B o adjoint(A) * X = B utilizando una factorización QR o LQ. Modifica la matriz/vector B en su lugar con la solución. A se sobrescribe con su factorización QR o LQ. trans puede ser uno de N (sin modificación), T (transpuesta) o C (transpuesta conjugada). gels! busca la solución de mínimo norma/mínimos cuadrados. A puede estar subdeterminado o sobredeterminado. La solución se devuelve en B.

source
LinearAlgebra.LAPACK.gesv!Function
gesv!(A, B) -> (B, A, ipiv)

Resuelve la ecuación lineal A * X = B donde A es una matriz cuadrada utilizando la factorización LU de A. A se sobrescribe con su factorización LU y B se sobrescribe con la solución X. ipiv contiene la información de pivoteo para la factorización LU de A.

source
LinearAlgebra.LAPACK.getrs!Function
getrs!(trans, A, ipiv, B)

Resuelve la ecuación lineal A * X = B, transpose(A) * X = B o adjoint(A) * X = B para A cuadrada. Modifica la matriz/vector B en su lugar con la solución. A es la factorización LU de getrf!, con ipiv la información de pivoteo. trans puede ser uno de N (sin modificación), T (transpuesta) o C (transpuesta conjugada).

source
LinearAlgebra.LAPACK.getri!Function
getri!(A, ipiv)

Calcula la inversa de A, utilizando su factorización LU encontrada por getrf!. ipiv es la información de pivoteo de salida y A contiene la factorización LU de getrf!. A se sobrescribe con su inversa.

source
LinearAlgebra.LAPACK.gesvx!Function
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)

Resuelve la ecuación lineal A * X = B (trans = N), transpose(A) * X = B (trans = T), o adjoint(A) * X = B (trans = C) utilizando la factorización LU de A. fact puede ser E, en cuyo caso A será equilibrado y copiado a AF; F, en cuyo caso AF e ipiv de una factorización LU previa son entradas; o N, en cuyo caso A será copiado a AF y luego factorizado. Si fact = F, equed puede ser N, lo que significa que A no ha sido equilibrado; R, lo que significa que A fue multiplicado por Diagonal(R) desde la izquierda; C, lo que significa que A fue multiplicado por Diagonal(C) desde la derecha; o B, lo que significa que A fue multiplicado por Diagonal(R) desde la izquierda y Diagonal(C) desde la derecha. Si fact = F y equed = R o B, los elementos de R deben ser todos positivos. Si fact = F y equed = C o B, los elementos de C deben ser todos positivos.

Devuelve la solución X; equed, que es una salida si fact no es N, y describe el equilibrado que se realizó; R, la diagonal de equilibrado de filas; C, la diagonal de equilibrado de columnas; B, que puede ser sobrescrito con su forma equilibrada Diagonal(R)*B (si trans = N y equed = R,B) o Diagonal(C)*B (si trans = T,C y equed = C,B); rcond, el número de condición recíproco de A después de equilibrar; ferr, el límite de error hacia adelante para cada vector de solución en X; berr, el límite de error hacia adelante para cada vector de solución en X; y work, el factor de crecimiento de pivote recíproco.

source
gesvx!(A, B)

La simplificación sin equilibrar y sin transponer de gesvx!.

source
LinearAlgebra.LAPACK.gelsd!Function
gelsd!(A, B, rcond) -> (B, rnk)

Calcula la solución de menor norma de A * X = B encontrando la factorización SVD de A, luego dividiendo y conquistando el problema. B se sobrescribe con la solución X. Los valores singulares por debajo de rcond se tratarán como cero. Devuelve la solución en B y el rango efectivo de A en rnk.

source
LinearAlgebra.LAPACK.gelsy!Function
gelsy!(A, B, rcond) -> (B, rnk)

Calcula la solución de menor norma de A * X = B encontrando la factorización completa QR de A, luego dividiendo y conquistando el problema. B se sobrescribe con la solución X. Los valores singulares por debajo de rcond se tratarán como cero. Devuelve la solución en B y el rango efectivo de A en rnk.

source
LinearAlgebra.LAPACK.gglse!Function
gglse!(A, c, B, d) -> (X,res)

Resuelve la ecuación A * x = c donde x está sujeto a la restricción de igualdad B * x = d. Utiliza la fórmula ||c - A*x||^2 = 0 para resolver. Devuelve X y la suma de cuadrados residuales.

source
LinearAlgebra.LAPACK.geev!Function
geev!(jobvl, jobvr, A) -> (W, VL, VR)

Encuentra el sistema de eigenvalores de A. Si jobvl = N, los eigenvectores izquierdos de A no se calculan. Si jobvr = N, los eigenvectores derechos de A no se calculan. Si jobvl = V o jobvr = V, se calculan los eigenvectores correspondientes. Devuelve los eigenvalores en W, los eigenvectores derechos en VR, y los eigenvectores izquierdos en VL.

source
LinearAlgebra.LAPACK.gesdd!Function
gesdd!(job, A) -> (U, S, VT)

Encuentra la descomposición en valores singulares de A, A = U * S * V', utilizando un enfoque de dividir y conquistar. Si job = A, se computan todas las columnas de U y las filas de V'. Si job = N, no se computan columnas de U ni filas de V'. Si job = O, A se sobrescribe con las columnas de (delgadas) U y las filas de (delgadas) V'. Si job = S, se computan y devuelven por separado las columnas de (delgadas) U y las filas de (delgadas) V'.

source
LinearAlgebra.LAPACK.gesvd!Function
gesvd!(jobu, jobvt, A) -> (U, S, VT)

Encuentra la descomposición en valores singulares de A, A = U * S * V'. Si jobu = A, se computan todas las columnas de U. Si jobvt = A, se computan todas las filas de V'. Si jobu = N, no se computan columnas de U. Si jobvt = N, no se computan filas de V'. Si jobu = O, A se sobrescribe con las columnas de (delgada) U. Si jobvt = O, A se sobrescribe con las filas de (delgada) V'. Si jobu = S, se computan y devuelven por separado las columnas de (delgada) U. Si jobvt = S, se computan y devuelven por separado las filas de (delgada) V'. jobu y jobvt no pueden ser ambos O.

Devuelve U, S y Vt, donde S son los valores singulares de A.

source
LinearAlgebra.LAPACK.ggsvd!Function
ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Encuentra la descomposición en valores singulares generalizada de A y B, U'*A*Q = D1*R y V'*B*Q = D2*R. D1 tiene alpha en su diagonal y D2 tiene beta en su diagonal. Si jobu = U, se calcula la matriz ortogonal/unitaria U. Si jobv = V, se calcula la matriz ortogonal/unitaria V. Si jobq = Q, se calcula la matriz ortogonal/unitaria Q. Si jobu, jobv o jobq es N, esa matriz no se calcula. Esta función solo está disponible en versiones de LAPACK anteriores a 3.6.0.

source
LinearAlgebra.LAPACK.ggsvd3!Function
ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

Encuentra la descomposición en valores singulares generalizada de A y B, U'*A*Q = D1*R y V'*B*Q = D2*R. D1 tiene alpha en su diagonal y D2 tiene beta en su diagonal. Si jobu = U, se calcula la matriz ortogonal/unitaria U. Si jobv = V, se calcula la matriz ortogonal/unitaria V. Si jobq = Q, se calcula la matriz ortogonal/unitaria Q. Si jobu, jobv o jobq es N, esa matriz no se calcula. Esta función requiere LAPACK 3.6.0.

source
LinearAlgebra.LAPACK.geevx!Function
geevx!(balanc, jobvl, jobvr, sense, A) -> (A, w, VL, VR, ilo, ihi, scale, abnrm, rconde, rcondv)

Encuentra el sistema de eigenvalores de A con balanceo de matrices. Si jobvl = N, los eigenvectores izquierdos de A no se calculan. Si jobvr = N, los eigenvectores derechos de A no se calculan. Si jobvl = V o jobvr = V, se calculan los eigenvectores correspondientes. Si balanc = N, no se realiza ningún balanceo. Si balanc = P, A se permuta pero no se escala. Si balanc = S, A se escala pero no se permuta. Si balanc = B, A se permuta y se escala. Si sense = N, no se calculan números de condición recíprocos. Si sense = E, se calculan números de condición recíprocos solo para los eigenvalores. Si sense = V, se calculan números de condición recíprocos solo para los eigenvectores derechos. Si sense = B, se calculan números de condición recíprocos para los eigenvectores derechos y los eigenvectores. Si sense = E,B, se deben calcular los eigenvectores derechos e izquierdos.

source
LinearAlgebra.LAPACK.ggev!Function
ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Encuentra la descomposición de eigen generalizada de A y B. Si jobvl = N, los eigenvectores izquierdos no se calculan. Si jobvr = N, los eigenvectores derechos no se calculan. Si jobvl = V o jobvr = V, se calculan los eigenvectores correspondientes.

source
LinearAlgebra.LAPACK.ggev3!Function
ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

Encuentra la descomposición generalizada de eigen de A y B utilizando un algoritmo bloqueado. Si jobvl = N, los eigenvectores izquierdos no se calculan. Si jobvr = N, los eigenvectores derechos no se calculan. Si jobvl = V o jobvr = V, se calculan los eigenvectores correspondientes. Esta función requiere LAPACK 3.6.0.

source
LinearAlgebra.LAPACK.gtsv!Function
gtsv!(dl, d, du, B)

Resuelve la ecuación A * X = B donde A es una matriz tridiagonal con dl en la subdiagonal, d en la diagonal y du en la superdiagonal.

Sobrescribe B con la solución X y la devuelve.

source
LinearAlgebra.LAPACK.gttrf!Function
gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

Encuentra la factorización LU de una matriz tridiagonal con dl en la subdiagonal, d en la diagonal y du en la superdiagonal.

Modifica dl, d y du en su lugar y devuelve estos junto con la segunda superdiagonal du2 y el vector de pivoteo ipiv.

source
LinearAlgebra.LAPACK.gttrs!Function
gttrs!(trans, dl, d, du, du2, ipiv, B)

Resuelve la ecuación A * X = B (trans = N), transpose(A) * X = B (trans = T), o adjoint(A) * X = B (trans = C) utilizando la factorización LU calculada por gttrf!. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.orglq!Function
orglq!(A, tau, k = length(tau))

Encuentra explícitamente la matriz Q de una factorización LQ después de llamar a gelqf! en A. Utiliza la salida de gelqf!. A es sobrescrito por Q.

source
LinearAlgebra.LAPACK.orgqr!Function
orgqr!(A, tau, k = length(tau))

Encuentra explícitamente la matriz Q de una factorización QR después de llamar a geqrf! en A. Utiliza la salida de geqrf!. A se sobrescribe con Q.

source
LinearAlgebra.LAPACK.orgql!Function
orgql!(A, tau, k = length(tau))

Encuentra explícitamente la matriz Q de una factorización QL después de llamar a geqlf! en A. Utiliza la salida de geqlf!. A se sobrescribe con Q.

source
LinearAlgebra.LAPACK.orgrq!Function
orgrq!(A, tau, k = length(tau))

Encuentra explícitamente la matriz Q de una factorización RQ después de llamar a gerqf! en A. Utiliza la salida de gerqf!. A es sobrescrito por Q.

source
LinearAlgebra.LAPACK.ormlq!Function
ormlq!(lado, trans, A, tau, C)

Calcula Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) para lado = L o la multiplicación equivalente por la derecha para lado = R utilizando Q de una factorización LQ de A calculada usando gelqf!. C es sobrescrito.

source
LinearAlgebra.LAPACK.ormqr!Function
ormqr!(lado, trans, A, tau, C)

Calcula Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) para lado = L o la multiplicación equivalente por la derecha para lado = R utilizando Q de una factorización QR de A calculada usando geqrf!. C es sobrescrito.

source
LinearAlgebra.LAPACK.ormql!Function
ormql!(lado, trans, A, tau, C)

Calcula Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) para lado = L o la multiplicación equivalente del lado derecho para lado = R usando Q de una factorización QL de A calculada usando geqlf!. C es sobrescrito.

source
LinearAlgebra.LAPACK.ormrq!Function
ormrq!(lado, trans, A, tau, C)

Calcula Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) para lado = L o la multiplicación equivalente por la derecha para lado = R usando Q de una factorización RQ de A calculada usando gerqf!. C es sobrescrito.

source
LinearAlgebra.LAPACK.gemqrt!Function
gemqrt!(lado, trans, V, T, C)

Calcula Q * C (trans = N), transpose(Q) * C (trans = T), adjoint(Q) * C (trans = C) para lado = L o la multiplicación equivalente del lado derecho para lado = R utilizando Q de una factorización QR de A calculada usando geqrt!. C es sobrescrito.

source
LinearAlgebra.LAPACK.posv!Function
posv!(uplo, A, B) -> (A, B)

Encuentra la solución a A * X = B donde A es una matriz simétrica o hermítica definida positiva. Si uplo = U, se calcula la descomposición de Cholesky superior de A. Si uplo = L, se calcula la descomposición de Cholesky inferior de A. A se sobrescribe con su descomposición de Cholesky. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.potrf!Function
potrf!(uplo, A)

Calcula la descomposición de Cholesky (superior si uplo = U, inferior si uplo = L) de la matriz definida positiva A. A se sobrescribe y se devuelve con un código de información.

source
LinearAlgebra.LAPACK.potri!Function
potri!(uplo, A)

Calcula la inversa de la matriz definida positiva A después de llamar a potrf! para encontrar su descomposición de Cholesky (superior si uplo = U, inferior si uplo = L).

A se sobrescribe con su inversa y se devuelve.

source
LinearAlgebra.LAPACK.potrs!Function
potrs!(uplo, A, B)

Encuentra la solución a A * X = B donde A es una matriz simétrica o hermítica definida positiva cuya descomposición de Cholesky fue calculada por potrf!. Si uplo = U, se calculó la descomposición de Cholesky superior de A. Si uplo = L, se calculó la descomposición de Cholesky inferior de A. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.pstrf!Function
pstrf!(uplo, A, tol) -> (A, piv, rank, info)

Calcula la descomposición de Cholesky con pivoteo (superior si uplo = U, inferior si uplo = L) de la matriz definida positiva A con una tolerancia establecida por el usuario tol. A se sobrescribe con su descomposición de Cholesky.

Devuelve A, los pivotes piv, el rango de A y un código info. Si info = 0, la factorización tuvo éxito. Si info = i > 0, entonces A es indefinida o deficiente en rango.

source
LinearAlgebra.LAPACK.ptsv!Function
ptsv!(D, E, B)

Resuelve A * X = B para A tridiagonal definida positiva. D es la diagonal de A y E es la subdiagonal. B se sobrescribe con la solución X y se devuelve.

source
LinearAlgebra.LAPACK.pttrf!Function
pttrf!(D, E)

Calcula la factorización LDLt de una matriz tridiagonal definida positiva con D como diagonal y E como fuera de la diagonal. D y E son sobrescritos y devueltos.

source
LinearAlgebra.LAPACK.pttrs!Function
pttrs!(D, E, B)

Resuelve A * X = B para A tridiagonal definida positiva con diagonal D y subdiagonal E después de calcular la factorización LDLt de A usando pttrf!. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.trtri!Function
trtri!(uplo, diag, A)

Encuentra la inversa de la matriz triangular (superior si uplo = U, inferior si uplo = L) A. Si diag = N, A tiene elementos diagonales no unitarios. Si diag = U, todos los elementos diagonales de A son uno. A se sobrescribe con su inversa.

source
LinearAlgebra.LAPACK.trtrs!Function
trtrs!(uplo, trans, diag, A, B)

Resuelve A * X = B (trans = N), transpose(A) * X = B (trans = T), o adjoint(A) * X = B (trans = C) para la matriz triangular A (superior si uplo = U, inferior si uplo = L). Si diag = N, A tiene elementos diagonales no unitarios. Si diag = U, todos los elementos diagonales de A son uno. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.trcon!Function
trcon!(norm, uplo, diag, A)

Encuentra el número de condición recíproco de la matriz triangular A (superior si uplo = U, inferior si uplo = L). Si diag = N, A tiene elementos diagonales no unitarios. Si diag = U, todos los elementos diagonales de A son uno. Si norm = I, el número de condición se encuentra en la norma infinita. Si norm = O o 1, el número de condición se encuentra en la norma uno.

source
LinearAlgebra.LAPACK.trevc!Function
trevc!(lado, cuántos, seleccionar, T, VL = similar(T), VR = similar(T))

Encuentra el sistema de eigenvalores de una matriz triangular superior T. Si lado = R, se calculan los eigenvectores derechos. Si lado = L, se calculan los eigenvectores izquierdos. Si lado = B, se calculan ambos conjuntos. Si cuántos = A, se encuentran todos los eigenvectores. Si cuántos = B, se encuentran todos los eigenvectores y se transforman de nuevo usando VL y VR. Si cuántos = S, solo se calculan los eigenvectores correspondientes a los valores en seleccionar.

source
LinearAlgebra.LAPACK.trrfs!Function
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)

Estima el error en la solución de A * X = B (trans = N), transpose(A) * X = B (trans = T), adjoint(A) * X = B (trans = C) para side = L, o las ecuaciones equivalentes de un side = R con X * A después de calcular X usando trtrs!. Si uplo = U, A es triangular superior. Si uplo = L, A es triangular inferior. Si diag = N, A tiene elementos diagonales no unitarios. Si diag = U, todos los elementos diagonales de A son uno. Ferr y Berr son entradas opcionales. Ferr es el error hacia adelante y Berr es el error hacia atrás, cada uno componente por componente.

source
LinearAlgebra.LAPACK.stev!Function
stev!(job, dv, ev) -> (dv, Zmat)

Calcula el sistema de eigenvalores para una matriz tridiagonal simétrica con dv como diagonal y ev como subdiagonal. Si job = N, solo se encuentran y devuelven los eigenvalores en dv. Si job = V, entonces también se encuentran y devuelven los eigenvectores en Zmat.

source
LinearAlgebra.LAPACK.stebz!Function
stebz!(rango, orden, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

Calcula los valores propios para una matriz tridiagonal simétrica con dv como diagonal y ev como off-diagonal. Si rango = A, se encuentran todos los valores propios. Si rango = V, se encuentran los valores propios en el intervalo semiabierto (vl, vu]. Si rango = I, se encuentran los valores propios con índices entre il y iu. Si orden = B, los valores propios se ordenan dentro de un bloque. Si orden = E, se ordenan a través de todos los bloques. abstol se puede establecer como una tolerancia para la convergencia.

source
LinearAlgebra.LAPACK.stegr!Function
stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

Calcula los valores propios (jobz = N) o los valores propios y vectores propios (jobz = V) para una matriz tridiagonal simétrica con dv como diagonal y ev como subdiagonal. Si range = A, se encuentran todos los valores propios. Si range = V, se encuentran los valores propios en el intervalo semiabierto (vl, vu]. Si range = I, se encuentran los valores propios con índices entre il y iu. Los valores propios se devuelven en w y los vectores propios en Z.

source
LinearAlgebra.LAPACK.stein!Function
stein!(dv, ev_in, w_in, iblock_in, isplit_in)

Calcula los eigenvectores para una matriz tridiagonal simétrica con dv como diagonal y ev_in como off-diagonal. w_in especifica los eigenvalores de entrada para los cuales encontrar los eigenvectores correspondientes. iblock_in especifica las submatrices correspondientes a los eigenvalores en w_in. isplit_in especifica los puntos de división entre los bloques de submatrices.

source
LinearAlgebra.LAPACK.syconv!Function
syconv!(uplo, A, ipiv) -> (A, work)

Convierte una matriz simétrica A (que ha sido factorizada en una matriz triangular) en dos matrices L y D. Si uplo = U, A es triangular superior. Si uplo = L, es triangular inferior. ipiv es el vector de pivote de la factorización triangular. A se sobrescribe con L y D.

source
LinearAlgebra.LAPACK.sysv!Function
sysv!(uplo, A, B) -> (B, A, ipiv)

Encuentra la solución a A * X = B para la matriz simétrica A. Si uplo = U, la mitad superior de A se almacena. Si uplo = L, la mitad inferior se almacena. B se sobrescribe con la solución X. A se sobrescribe con su factorización de Bunch-Kaufman. ipiv contiene información de pivoteo sobre la factorización.

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

Calcula la factorización de Bunch-Kaufman de una matriz simétrica A. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior.

Devuelve A, sobrescrita por la factorización, un vector de pivote ipiv, y el código de error info, que es un entero no negativo. Si info es positivo, la matriz es singular y la parte diagonal de la factorización es exactamente cero en la posición info.

source
sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

Calcula la factorización de Bunch-Kaufman de una matriz simétrica A. Si uplo = U, la mitad superior de A se almacena. Si uplo = L, la mitad inferior se almacena.

Devuelve A, sobrescrita por la factorización, el vector de pivote ipiv, y el código de error info que es un entero no negativo. Si info es positivo, la matriz es singular y la parte diagonal de la factorización es exactamente cero en la posición info.

source
LinearAlgebra.LAPACK.sytri!Function
sytri!(uplo, A, ipiv)

Calcula la inversa de una matriz simétrica A utilizando los resultados de sytrf!. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior. A se sobrescribe con su inversa.

source
LinearAlgebra.LAPACK.sytrs!Function
sytrs!(uplo, A, ipiv, B)

Resuelve la ecuación A * X = B para una matriz simétrica A utilizando los resultados de sytrf!. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.hesv!Function
hesv!(uplo, A, B) -> (B, A, ipiv)

Encuentra la solución a A * X = B para la matriz hermítica A. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior. B se sobrescribe con la solución X. A se sobrescribe con su factorización de Bunch-Kaufman. ipiv contiene información de pivoteo sobre la factorización.

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

Calcula la factorización de Bunch-Kaufman de una matriz hermítica A. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior.

Devuelve A, sobrescrita por la factorización, un vector de pivote ipiv, y el código de error info, que es un entero no negativo. Si info es positivo, la matriz es singular y la parte diagonal de la factorización es exactamente cero en la posición info.

source
hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

Calcula la factorización de Bunch-Kaufman de una matriz hermitiana A. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior.

Devuelve A, sobrescrita por la factorización, el vector de pivote ipiv, y el código de error info, que es un entero no negativo. Si info es positivo, la matriz es singular y la parte diagonal de la factorización es exactamente cero en la posición info.

source
LinearAlgebra.LAPACK.hetri!Function
hetri!(uplo, A, ipiv)

Calcula la inversa de una matriz hermitiana A utilizando los resultados de sytrf!. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior. A se sobrescribe con su inversa.

source
LinearAlgebra.LAPACK.hetrs!Function
hetrs!(uplo, A, ipiv, B)

Resuelve la ecuación A * X = B para una matriz Hermitiana A utilizando los resultados de sytrf!. Si uplo = U, se almacena la mitad superior de A. Si uplo = L, se almacena la mitad inferior. B se sobrescribe con la solución X.

source
LinearAlgebra.LAPACK.syev!Function
syev!(jobz, uplo, A)

Encuentra los valores propios (jobz = N) o los valores propios y vectores propios (jobz = V) de una matriz simétrica A. Si uplo = U, se utiliza el triángulo superior de A. Si uplo = L, se utiliza el triángulo inferior de A.

source
LinearAlgebra.LAPACK.syevr!Function
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

Encuentra los valores propios (jobz = N) o los valores propios y vectores propios (jobz = V) de una matriz simétrica A. Si uplo = U, se utiliza el triángulo superior de A. Si uplo = L, se utiliza el triángulo inferior de A. Si range = A, se encuentran todos los valores propios. Si range = V, se encuentran los valores propios en el intervalo semiabierto (vl, vu]. Si range = I, se encuentran los valores propios con índices entre il y iu. abstol se puede establecer como una tolerancia para la convergencia.

Los valores propios se devuelven en W y los vectores propios en Z.

source
LinearAlgebra.LAPACK.syevd!Function
syevd!(jobz, uplo, A)

Encuentra los valores propios (jobz = N) o los valores propios y vectores propios (jobz = V) de una matriz simétrica A. Si uplo = U, se utiliza el triángulo superior de A. Si uplo = L, se utiliza el triángulo inferior de A.

Utiliza el método de dividir y conquistar, en lugar de la iteración QR utilizada por syev! o múltiples representaciones relativamente robustas utilizadas por syevr!. Consulte a James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008) para una comparación de la precisión y el rendimiento de diferentes métodos.

source
LinearAlgebra.LAPACK.sygvd!Function
sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

Encuentra los valores propios generalizados (jobz = N) o valores propios y vectores propios (jobz = V) de una matriz simétrica A y una matriz simétrica definida positiva B. Si uplo = U, se utilizan los triángulos superiores de A y B. Si uplo = L, se utilizan los triángulos inferiores de A y B. Si itype = 1, el problema a resolver es A * x = lambda * B * x. Si itype = 2, el problema a resolver es A * B * x = lambda * x. Si itype = 3, el problema a resolver es B * A * x = lambda * x.

source
LinearAlgebra.LAPACK.bdsqr!Function
bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

Calcula la descomposición en valores singulares de una matriz bidiagonal con d en la diagonal y e_ en la subdiagonal. Si uplo = U, e_ es la superdiagonal. Si uplo = L, e_ es la subdiagonal. También se puede calcular opcionalmente el producto Q' * C.

Devuelve los valores singulares en d, y la matriz C sobrescrita con Q' * C.

source
LinearAlgebra.LAPACK.bdsdc!Function
bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

Calcula la descomposición en valores singulares de una matriz bidiagonal con d en la diagonal y e_ en la subdiagonal utilizando un método de dividir y conquistar. Si uplo = U, e_ es la superdiagonal. Si uplo = L, e_ es la subdiagonal. Si compq = N, solo se encuentran los valores singulares. Si compq = I, se encuentran los valores y vectores singulares. Si compq = P, se encuentran los valores y vectores singulares en forma compacta. Solo funciona para tipos reales.

Devuelve los valores singulares en d, y si compq = P, los vectores singulares compactos en iq.

source
LinearAlgebra.LAPACK.gecon!Function
gecon!(normtype, A, anorm)

Encuentra el número de condición recíproco de la matriz A. Si normtype = I, el número de condición se encuentra en la norma infinita. Si normtype = O o 1, el número de condición se encuentra en la norma uno. A debe ser el resultado de getrf! y anorm es la norma de A en la norma relevante.

source
LinearAlgebra.LAPACK.gehrd!Function
gehrd!(ilo, ihi, A) -> (A, tau)

Convierte una matriz A a la forma de Hessenberg. Si A está equilibrada con gebal!, entonces ilo e ihi son las salidas de gebal!. De lo contrario, deberían ser ilo = 1 e ihi = size(A,2). tau contiene los reflectores elementales de la factorización.

source
LinearAlgebra.LAPACK.orghr!Function
orghr!(ilo, ihi, A, tau)

Encuentra explícitamente Q, la matriz ortogonal/unitaria de gehrd!. ilo, ihi, A y tau deben corresponder a la entrada/salida de gehrd!.

source
LinearAlgebra.LAPACK.gees!Function
gees!(jobvs, A) -> (A, vs, w)

Calcula los valores propios (jobvs = N) o los valores propios y los vectores de Schur (jobvs = V) de la matriz A. A se sobrescribe con su forma de Schur.

Devuelve A, vs que contiene los vectores de Schur, y w, que contiene los valores propios.

source
LinearAlgebra.LAPACK.gges!Function
gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Calcula los valores propios generalizados, la forma de Schur generalizada, los vectores de Schur izquierdos (jobsvl = V), o los vectores de Schur derechos (jobvsr = V) de A y B.

Los valores propios generalizados se devuelven en alpha y beta. Los vectores de Schur izquierdos se devuelven en vsl y los vectores de Schur derechos se devuelven en vsr.

source
LinearAlgebra.LAPACK.gges3!Function
gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

Calcula los valores propios generalizados, la forma de Schur generalizada, los vectores de Schur izquierdos (jobsvl = V), o los vectores de Schur derechos (jobvsr = V) de A y B utilizando un algoritmo bloqueado. Esta función requiere LAPACK 3.6.0.

Los valores propios generalizados se devuelven en alpha y beta. Los vectores de Schur izquierdos se devuelven en vsl y los vectores de Schur derechos se devuelven en vsr.

source
LinearAlgebra.LAPACK.trexc!Function
trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

Reordena la factorización de Schur T de una matriz, de modo que el bloque diagonal de T con índice de fila ifst se mueva al índice de fila ilst. Si compq = V, los vectores de Schur Q se reordenan. Si compq = N, no se modifican. El método de 4 argumentos llama al método de 5 argumentos con compq = V.

source
LinearAlgebra.LAPACK.trsen!Function
trsen!(trabajo, compq, seleccionar, T, Q) -> (T, Q, w, s, sep)
trsen!(seleccionar, T, Q) -> (T, Q, w, s, sep)

Reordena la factorización de Schur de una matriz y opcionalmente encuentra números de condición recíprocos. Si trabajo = N, no se encuentran números de condición. Si trabajo = E, solo se encuentra el número de condición para este clúster de valores propios. Si trabajo = V, solo se encuentra el número de condición para el subespacio invariante. Si trabajo = B, entonces se encuentran los números de condición para el clúster y el subespacio. Si compq = V, los vectores de Schur Q se actualizan. Si compq = N, los vectores de Schur no se modifican. seleccionar determina qué valores propios están en el clúster. El método de 3 argumentos llama al método de 5 argumentos con trabajo = N y compq = V.

Devuelve T, Q, valores propios reordenados en w, el número de condición del clúster de valores propios s, y el número de condición del subespacio invariante sep.

source
LinearAlgebra.LAPACK.tgsen!Function
tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

Reordena los vectores de una descomposición de Schur generalizada. select especifica los valores propios en cada clúster.

source
LinearAlgebra.LAPACK.trsyl!Function
trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

Resuelve la ecuación matricial de Sylvester A * X +/- X * B = scale*C donde A y B son ambos cuasi-triangulares superiores. Si transa = N, A no se modifica. Si transa = T, A se transpone. Si transa = C, A se transpone conjugadamente. De manera similar para transb y B. Si isgn = 1, se resuelve la ecuación A * X + X * B = scale * C. Si isgn = -1, se resuelve la ecuación A * X - X * B = scale * C.

Devuelve X (sobrescribiendo C) y scale.

source
LinearAlgebra.LAPACK.hseqr!Function
hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

Calcula todos los valores propios y (opcionalmente) la factorización de Schur de una matriz reducida a forma de Hessenberg. Si H está balanceada con gebal!, entonces ilo e ihi son las salidas de gebal!. De lo contrario, deberían ser ilo = 1 y ihi = size(H,2). tau contiene los reflectores elementales de la factorización.

source
  • ACM832Davis, Timothy A. (2004b). Algorithm 832: UMFPACK V4.3–-an Unsymmetric-Pattern Multifrontal Method. ACM Trans. Math. Softw., 30(2), 196–199. doi:10.1145/992200.992206
  • ACM887Chen, Y., Davis, T. A., Hager, W. W., & Rajamanickam, S. (2008). Algoritmo 887: CHOLMOD, Factorización de Cholesky dispersa supernodal y actualización/bajada. ACM Trans. Math. Softw., 35(3). doi:10.1145/1391989.1391995
  • DavisHager2009Davis, Timothy A., & Hager, W. W. (2009). Supernodos dinámicos en la actualización/bajada de Cholesky dispersa y soluciones triangulares. ACM Trans. Math. Softw., 35(4). doi:10.1145/1462173.1462176
  • Bischof1987C Bischof y C Van Loan, "La representación WY para productos de matrices de Householder", SIAM J Sci Stat Comput 8 (1987), s2-s13. doi:10.1137/0908009
  • Schreiber1989R Schreiber y C Van Loan, "Una representación WY eficiente en almacenamiento para productos de transformaciones de Householder", SIAM J Sci Stat Comput 10 (1989), 53-57. doi:10.1137/0910005
  • ACM933Foster, L. V., & Davis, T. A. (2013). Algoritmo 933: Cálculo confiable de rango numérico, bases de espacio nulo, soluciones de pseudoinversa y soluciones básicas utilizando SuitesparseQR. ACM Trans. Math. Softw., 40(1). doi:10.1145/2513109.2513116
  • Bunch1977J R Bunch y L Kaufman, Algunos métodos estables para calcular inercia y resolver sistemas lineales simétricos, 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 y 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 y Nicholas J. Higham, "Algoritmos mejorados de escalado inverso y cuadrado para el logaritmo matricial", SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553
  • AHR13Awad H. Al-Mohy, Nicholas J. Higham y Samuel D. Relton, "Computando la derivada de Fréchet del logaritmo matricial y estimando el número de condición", SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
  • BH83Åke Björck y Sven Hammarling, "Un método de Schur para la raíz cuadrada de una matriz", Álgebra Lineal y sus Aplicaciones, 52-53, 1983, 127-140. doi:10.1016/0024-3795(83)80010-X
  • H87Nicholas J. Higham, "Cálculo de raíces cuadradas reales de una matriz real", Álgebra Lineal y sus Aplicaciones, 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 y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_2Mary Aprahamian y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_3Mary Aprahamian y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_4Mary Aprahamian y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_5Mary Aprahamian y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577
  • AH16_6Mary Aprahamian y Nicholas J. Higham, "Funciones Trigonométricas Inversas de Matrices y Funciones Hiperbólicas Inversas: Teoría y Algoritmos", MIMS EPrint: 2016.4. https://doi.org/10.1137/16M1057577