AnyMath 文档

线性代数

除了对多维数组的支持(也是其中的一部分)之外,Julia还提供了许多常见和有用的线性代数操作的本机实现,这些操作可以加载 使用线性代数. 基本操作,例如 tr,tr, 德特,和 因维都支持:

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

julia> tr(A)
3

julia> det(A)
104.0

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

以及其他有用的操作,例如查找特征值或特征向量:

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

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

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

此外,Julia提供了许多 因式分解它可以通过将矩阵预先分解成更适合问题的形式(出于性能或内存原因)来加速线性求解或矩阵指数化等问题。 请参阅 因式分解了解更多信息。 作为一个例子:

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

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

A 不是Hermitian,对称,三角形,三角形或双角形,LU因子分解可能是我们能做的最好的。 与之比较:

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

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

在这里,茱莉亚发现了这一点 B 实际上是对称的,并且使用了更合适的因式分解。 通常可以为已知具有某些属性的矩阵编写更有效的代码,例如它是对称的或三边形的。 Julia提供了一些特殊类型,以便您可以将矩阵"标记"为具有这些属性。 例如:

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

\ 这里的操作执行线性解。 左除法运算符非常强大,很容易编写紧凑,可读的代码,足够灵活地解决各种线性方程组。

特殊矩阵

具有特殊对称性和结构的矩阵在线性代数中经常出现,并且经常与各种矩阵因子分解相关联。 Julia具有丰富的特殊矩阵类型集合,允许使用专门为特定矩阵类型开发的专用例程进行快速计算。

下表总结了已经在Julia中实现的特殊矩阵的类型,以及是否在LAPACK中为它们提供了各种优化方法的挂钩。

类型 资料描述

对称

对称矩阵

赫米蒂安

Hermitian矩阵

上角,上角

上,上https://en.wikipedia.org/wiki/Triangular_matrix[三角矩阵]

N.单位,单位

上,上https://en.wikipedia.org/wiki/Triangular_matrix[三角矩阵]单位对角线

低角,低角

较低https://en.wikipedia.org/wiki/Triangular_matrix[三角矩阵]

N.单位角,单位角

较低https://en.wikipedia.org/wiki/Triangular_matrix[三角矩阵]单位对角线

上海森伯格

上,上https://en.wikipedia.org/wiki/Hessenberg_matrix[赫森伯格矩阵]

三棱角,三棱角

Tridiagonal矩阵

SymTridiagonal缧

对称三边形矩阵

[医双角]

上/下https://en.wikipedia.org/wiki/Bidiagonal_matrix[双角矩阵]

对角线

对角矩阵

制服,制服

均匀缩放运算符

基本操作

矩阵类型 + - * \ 具有优化方法的其他功能

对称

MV

因维, sqrt,sqrt, 银监会, exp

赫米香

MV

因维, sqrt,sqrt, 银监会, exp

上角,上角

MV

MV

因维, 德特, logdet,logdet

N.单位,单位

MV

MV

因维, 德特, logdet,logdet

低角,低角

MV

MV

因维, 德特, logdet,logdet

N.单位角,单位角

MV

MV

因维, 德特, logdet,logdet

上海森伯格

毫米

因维, 德特

SymTridiagonal缧

M

M

女士

MV

n.巨量,巨量, [医特征]

三棱角,三棱角

M

M

女士

MV

[医双角]

M

M

女士

MV

对角线

M

M

MV

MV

因维, 德特, logdet,logdet, /

制服,制服

M

M

MVS

MVS

/

传说:

钥匙 资料描述

M(矩阵)

矩阵-矩阵运算的优化方法是可用的

V(矢量)

矩阵向量运算的优化方法是可用的

S(标量)

矩阵标量运算的优化方法是可用的

矩阵因子分解

矩阵类型 拉帕克 本征 [医短节] eigvecs svd svdvals

对称

SY

阿里

赫米蒂安

阿里

上角,上角

TR,TR

A

A

A

N.单位,单位

TR,TR

A

A

A

低角,低角

TR,TR

A

A

A

N.单位角,单位角

TR,TR

A

A

A

SymTridiagonal缧

A

阿里

AV

三棱角,三棱角

GT;GT

[医双角]

屋宇署

A

A

对角线

A

传说:

钥匙 资料描述 例子:

A(全部)

找到所有特性值和/或矢量的优化方法是可用的

例如 本节(M)

R(范围)

一种优化的方法来找到 伊尔通过 ihth特征值可用

本征(M,il,ih)

I(间隔)

求区间内特征值的优化方法[vl, vh]可用

本征(M,vl,vh)

V(向量)

求特征值对应的特征向量的优化方法 x=[x1,x2,。..] 是可用的

eigvecs(M,x)

均匀缩放运算符

A 制服,制服运算符表示标量乘以标识运算符, λ*I. 身份操作员 被定义为一个常数,是 制服,制服. 这些运算符的大小是通用的,并与二进制运算中的其他矩阵匹配 +, -, *\. 为 A+IA-I 这意味着 A 必须是正方形。 与身份运算符相乘 是一个noop(除了检查缩放因子为一),因此几乎没有开销。

查看 制服,制服 行动中的操作员:

julia> U = UniformScaling(2);

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

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

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

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

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

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

如果您需要解决表单的许多系统 (A+μi)x=b 为同 A 和不同 μ,首先计算Hessenberg因子分解可能是有益的 FA 通过 赫森伯格功能。 给出 F,Julia采用了一种有效的算法 (F+μ*I)\b (相当于 (A+μ*I)x\b 行列式)和相关操作。

矩阵因子分解

Matrix factorizations(a.k.a.matrix decompositions)计算矩阵的因式分解为矩阵的乘积,并且是(数值)线性代数中的中心概念之一。

下表总结了在Julia中实现的矩阵因子分解类型。 有关相关方法的详情,请参阅 标准函数部分。

类型 资料描述

邦奇考夫曼

Bunch-Kaufman因子分解

乔莱斯基

Cholesky factorization

[医]胆小鬼

PivotedCholesky因式分解

LDLt

LDL(T)因子分解

卢factorization

资历名册

QR因子分解

QRCompactWY

Qr因子分解的紧凑WY形式

QRPivoted

枢轴转动https://en.wikipedia.org/wiki/QR_decomposition[QR因子分解]

LQ

QR因子分解 转置(A)

赫森伯格

赫森伯格分解

本征

光谱分解

[医]将军

广义光谱分解

SVD

奇异值分解

[医]总

广义SVD

舒尔

舒尔分解

[医]将军

广义舒尔分解

的邻接和换位 因式分解对象懒洋洋地包裹在 辅助因子化转座因子化 物,分别。 一般地,转置实数 因式分解s被包裹为 辅助因子化.

正交矩阵(N.抽象,抽象)

一些矩阵因子分解生成正交/酉"矩阵"因子。 这些因式分解包括从调用到 资历名册,即, 资历名册, QRCompactWYQRPivoted,从调用到 赫森伯格,并将lq因式分解得自 lq. 虽然这些正交/酉因素允许矩阵表示,但由于性能和内存原因,它们的内部表示是不同的。 因此,它们应该被看作是矩阵支持的,基于函数的线性算子。 特别是,读取例如其矩阵表示的列需要运行"矩阵"-向量乘法代码,而不是简单地从内存中读出数据(可能用结构零填充向量的部分)。 与其他非三角矩阵类型的另一个明显区别是,底层乘法代码允许在乘法过程中进行就地修改。 此外,具体的对象 N.抽象,抽象 通过以下方式创建的子类型 资历名册, 赫森伯格lq可以表现得像一个正方形或矩形矩阵取决于上下文:

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

由于与密集或结构化矩阵的这种区别,抽象 N.抽象,抽象 类型不子类型 [医]抽象矩阵,而是有自己的类型层次结构。 子类型的自定义类型 N.抽象,抽象 如果满足以下接口,则可以依赖通用回退。 例如,对于

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

提供重载

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

如果 eltype,eltype 推广不感兴趣, 转换/转换 方法是不必要的,因为默认情况下 转换(::类型{AbstractQ{T}},Q::AbstractQ{T}) 申报表 Q 本身。 的邻接 N.抽象,抽象-类型化的对象被懒惰地包裹在一个 N.副词,副词 包装类型,它需要自己的 线性代数。lmul!线性代数。rmul! 方法。 鉴于这套方法,任何 Q::MyQ 可以像矩阵一样使用,最好在乘法上下文中:乘法通过 * 用标量、向量和矩阵从左到右,得到一个矩阵表示 Q矩阵(Q) (或 Q*I)和索引到矩阵表示中的所有工作。 相反,加法和减法以及更普遍地在矩阵表示中的元素上广播失败,因为这将是非常低效的。 对于此类用例,请考虑预先计算矩阵表示并将其缓存以供将来重用。

透视策略

朱莉娅的几个 矩阵分解支持https://en.wikipedia.org/wiki/Pivot_element[枢转],这可用于提高它们的数值稳定性。 实际上,某些矩阵因式分解(如LU因式分解)可能会在没有旋转的情况下失败。

在枢转中,首先,一个https://en.wikipedia.org/wiki/Pivot_element基于旋转策略选择具有良好数值属性的[枢轴元素]。 接下来,对原始矩阵的行和列进行排列,以使所选元素到位以供后续计算。 此外,对于因子分解的每个阶段重复该过程。

因此,除了传统的矩阵因子外,pivoted factorization方案的输出还包括置换矩阵。

在下文中,简要描述了在Julia中实现的枢转策略。 请注意,并非所有矩阵因子分解都可能支持它们。 查阅有关文件 矩阵因子分解有关支持的旋转策略的详细信息。

NoPivot

不执行枢转。 这是默认策略 乔莱斯基资历名册因式分解。 但请注意,其他矩阵因式分解(如LU因式分解)可能会在没有旋转的情况下失败,并且对于浮点矩阵在舍入误差面前也可能在数值上不稳定。 在这种情况下,这种枢轴策略主要用于教学目的。

RowNonZero

其余行中的第一个非零元素被选择为枢轴元素。

请注意,对于浮点矩阵,生成的LU算法在数值上是不稳定的-这种策略主要用于比较手动计算(通常使用这种策略)或其他不易受舍入错误影响的代数类型( 否则,默认 罗马西姆 在高斯消去中应该普遍优选枢转策略。

请注意, 元素类型必须承认 伊泽罗方法。

RowMaximum

基于最大值属性选择行(也可能是列)枢轴。 这是LU因式分解和pivoted Cholesky因式分解的默认策略(虽然[NoPivot的]是默认的 乔莱斯基).

在LU情况下,其余行中当前列内的最大值元素被选择为枢轴元素。 这有时被称为"部分枢转"算法。 在这种情况下, 元素类型必须承认 腹肌方法,其结果类型必须承认 <方法。

在Cholesky情况下,其余对角线元素中的最大元素被选择为枢轴元素。 这有时被称为"对角线枢转"算法,并导致_complete pivoting_(即,行和列都通过相同的排列)。 在这种情况下,(实部) 元素类型必须承认 <方法。

ColumnNorm

具有最大范数的列用于后续计算。 这用于旋转QR因子分解。

请注意, 元素类型必须承认 规范腹肌方法,其各自的结果类型必须承认 <方法。

标准功能

Julia中的线性代数函数在很大程度上是通过从https://www.netlib.org/lapack/[LAPACK].稀疏矩阵因子分解从调用函数http://suitesparse.com[SuiteSparse].其他稀疏求解器可作为Julia包提供。

&ast;(A::AbstractMatrix, B::AbstractMatrix)

矩阵乘法。

*例子*

julia> [1 1; 0 1] &ast; [1 0; 1 1]
2×2 Matrix{Int64}:
 2  1
 1  1
&ast;(A, B::AbstractMatrix, C)
A &ast; B &ast; C &ast; D

根据数组的大小,以最有效的序列完成3或4个矩阵的链式乘法。 也就是说,所需的标量乘法的数量 (A*B)*C (具有3个密集矩阵)与用于 A*(B*C) 来选择执行其中的哪一个。

如果最后一个因子是向量,或者第一个是转置向量,那么首先处理这些是有效的。 特别是 x'*B*y 手段 (x'*B)*y 对于一个普通的列-主要 B::矩阵. 不像 点(x,B,y),这样就分配了一个中间数组。

如果第一个或最后一个因子是一个数字,这将与矩阵乘法融合,使用5-arg 穆尔!.

请参阅 穆拉德, .

兼容性

Julia1.7这些优化至少需要Julia1.7。

\(A, B)

基质划分使用聚汞柱。 对于输入矩阵 AB,结果 X 是这样的吗? A*X==B 何时 A 是正方形的。 使用的求解器取决于 A. 如果 A 是上或下三角形(或对角线),没有因式分解 A 是必需的,系统是通过向前或向后替换来解决的。 对于非三角形方阵,使用LU因式分解。

对于矩形 A 结果是通过旋转QR因子分解计算的最小范数最小二乘解 A 和等级估计 A 基于R因子。

何时 A 是稀疏的,使用类似的聚汞合金。 对于不定矩阵, LDLt 因式分解在数值因式分解过程中不使用旋转,因此即使对于可反转矩阵,该过程也可能失败。

请参阅: 因式分解, pinv.

*例子*

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

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

julia> A &ast; X == B
true
A / B

矩阵右司: A/B 相当于 (B'\A')' 哪里 \是左除法运算符。 对于方阵,结果 X 是这样的吗? A==X*B.

请参阅: rdiv!.

*例子*

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

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

julia> isapprox(A, X&ast;B)
true

julia> isapprox(X, A&ast;pinv(B))
true
SingularException

当输入矩阵具有一个或多个零值特征值并且不可反转时引发异常。 无法计算涉及此类矩阵的线性求解。 该 资料 字段指示奇异值(s)的(之一)位置。

PosDefException

当输入矩阵不是时抛出异常https://en.wikipedia.org/wiki/Definiteness_of_a_matrix[正定]。 一些线性代数函数和因式分解仅适用于正定矩阵。 该 资料 字段指示小于/等于0的特征值的位置。

ZeroPivotException <: Exception

当矩阵因式分解/求解在枢轴(对角线)位置遇到零并且无法继续时引发异常。 这可能意味着矩阵是奇异的:切换到不同的因式分解(如pivoted LU)可能是富有成效的,该因式分解可以重新排序变量以消除杂散零枢轴。 该 资料 字段指示零枢轴(一个)的位置。

RankDeficientException

当输入矩阵为https://en.wikipedia.org/wiki/Rank_(linear_algebra)[秩缺陷]。 一些线性代数函数,如Cholesky分解,仅适用于不存在秩缺陷的矩阵。 该 资料 字段指示矩阵的计算秩。

LAPACKException

在直接调用 LAPACK函数或在调用内部使用LAPACK函数但缺乏专门错误处理的其他函数期间。 该 资料 字段包含有关基础错误的其他信息,并且取决于调用的LAPACK函数。

dot(x, y)
x ⋅ y

计算两个向量之间的点积。 对于复数载体,第一载体是共轭的。

也适用于任意可迭代对象,包括任何维度的数组,只要 被定义在元素上。

在语义上等同于 sum(点(vx,vy)for(vx,vy)in zip(x,y)),增加了参数必须具有相等长度的限制。 x<y (哪里 可以通过制表符完成键入 \cdot的 在REPL中)是一个同义词 点(x,y).

*例子*

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

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

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

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

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

julia> dot(x, y)
150.0
dot(x, A, y)

计算广义点积 点(x,A*y) 在两个向量之间 xy,而不存储中间结果 A*y. 至于两个论点 点(,),这递归地起作用。 而且,对于复数向量,第一向量是共轭的。

兼容性

Julia1.4三论点 至少需要Julia1.4。

*例子*

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

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

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

计算两个3向量的叉积。

*例子*

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

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

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

复盖 yx*α+y 然后回来 y. 如果 xy 有相同的轴,它相当于 y.+=x.*一个.

*例子*

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

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

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

复盖 yx*α+y*β 然后回来 y. 如果 xy 有相同的轴,它相当于 y.=x.*a.+y.* β.

*例子*

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

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

朱莉娅>axpby!(2,x,2,y)
3元素向量{Int64}:
 10
 14
 18
rotate!(x, y, c, s)

复盖 xc*x+s*yy-conj(s)*x+c*y. 申报表 xy.

兼容性

朱莉娅1.5 旋转! 至少需要Julia1.5。

reflect!(x, y, c, s)

复盖 xc*x+s*yyconj(s)*x-c*y. 申报表 xy.

兼容性

朱莉娅1.5 反思! 至少需要Julia1.5。

factorize(A)

计算一个方便的因式分解 A,基于输入矩阵的类型。 如果 A 作为通用矩阵传递, 因式分解 检查它是否对称/三角形/等。 为此目的, 因式分解 可以检查 A 以验证/排除每个属性。 只要它可以排除对称/三角形结构,它就会短路。 返回值可以重用于多个系统的高效求解。 例如: A=因式分解(A);x=A\b;y=A\C.

的属性 A 因式分解的类型

密集对称/Hermitian

Bunch-Kaufman(见 邦奇考夫曼)

稀疏对称/Hermitian

LDLt(见 ldlt)

三角形

三角形

对角线

对角线

[医]双角

[医]双角

三棱角,三棱角

卢(见 )

对称实三角形

LDLt(见 ldlt)

将军广场

卢(见 )

一般非正方形

QR(见 资历名册)

*例子*

julia> A = Array(Bidiagonal(fill(1.0, (5, 5)), :U))
5×5 Matrix{Float64}:
 1.0  1.0  0.0  0.0  0.0
 0.0  1.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0  0.0
 0.0  0.0  0.0  1.0  1.0
 0.0  0.0  0.0  0.0  1.0

julia> factorize(A) # factorize will check to see that A is already factorized
5×5 Bidiagonal{Float64, Vector{Float64}}:
 1.0  1.0   ⋅    ⋅    ⋅
  ⋅   1.0  1.0   ⋅    ⋅
  ⋅    ⋅   1.0  1.0   ⋅
  ⋅    ⋅    ⋅   1.0  1.0
  ⋅    ⋅    ⋅    ⋅   1.0

这返回一个 5×5双角{Float64},现在可以传递给其他线性代数函数(例如本征求解器),这些函数将使用专门的方法 [医]双角 类型。

Diagonal(V::AbstractVector)

构造一个懒惰矩阵 V 作为其对角线。

请参阅 制服,制服对于懒惰单位矩阵 , 图表,图表来制成致密的基质,并且 迪亚格来提取对角线元素。

*例子*

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

注意单列矩阵不被视为向量,而是调用该方法 对角线(A::AbstractMatrix) 其中提取1元素 diag(A):

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

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

从主对角线构造矩阵 A. 输入矩阵 A 可能是矩形,但输出将是正方形。

*例子*

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

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

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

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

构造一个未初始化的 对角线{T} 长度 n. 见 unef.

Bidiagonal(dv::V, ev::V, uplo::Symbol) where V <: AbstractVector

构造一个上(u=:U)或更低(uplo=:L)使用给定对角线的bidiagonal矩阵(dv)和非对角线(电动车)向量。 结果是类型的 [医]双角 并提供高效的专门线性求解器,但可以转换成一个规则矩阵与 转换(数组,)(或 数组() 简称)。 的长度 电动车 必须比长度少一个 dv.

*例子*

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

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

julia> Bu = Bidiagonal(dv, ev, :U) # ev is on the first superdiagonal
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  7  ⋅  ⋅
 ⋅  2  8  ⋅
 ⋅  ⋅  3  9
 ⋅  ⋅  ⋅  4

julia>Bl=Bidiagonal(dv,ev,:L)#ev在第一个subdiagonal上
4×4双角{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 7  2  ⋅  ⋅
 ⋅  8  3  ⋅
 ⋅  ⋅  9  4
Bidiagonal(A, uplo::Symbol)

构建一个 [医]双角 矩阵从主对角线 A 而它的第一个超级-(如果 u=:U)或副对角线(如果 uplo=:L).

*例子*

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) # contains the main diagonal and first superdiagonal of A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  1  ⋅  ⋅
 ⋅  2  2  ⋅
 ⋅  ⋅  3  3
 ⋅  ⋅  ⋅  4

julia> Bidiagonal(A, :L) # contains the main diagonal and first subdiagonal of A
4×4 Bidiagonal{Int64, Vector{Int64}}:
 1  ⋅  ⋅  ⋅
 2  2  ⋅  ⋅
 ⋅  3  3  ⋅
 ⋅  ⋅  4  4
SymTridiagonal(dv::V, ev::V) where V <: AbstractVector

从对角线构造对称三边形矩阵(dv)和第一个子/超对角线(电动车),分别。 结果是类型的 SymTridiagonal缧 并提供高效的专门的本征解算器,但可以转换成具有 转换(数组,)(或 数组() 简称)。

SymTridiagonal缧 块矩阵,元素 dv 对称。 论点 电动车 被解释为超二角形。 来自细分块的块被(物化)转置相应的超细分块。

*例子*

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

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

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

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

朱莉娅>A[1,1]
2×2对称{Int64, Matrix{Int64}}:
 1  2
 2  4

朱莉娅>A[1,2]
2×2矩阵{Int64}:
 1  2
 3  4

朱莉娅>A[2,1]
2×2矩阵{Int64}:
 1  3
 2  4
SymTridiagonal(A::AbstractMatrix)

从对称矩阵的对角线和第一超二边形构造对称三边形矩阵 A.

*例子*

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

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

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

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

分别从第一副边、对角线和第一超边构造三边矩阵。 结果是类型的 三棱角,三棱角 并提供高效的专门线性求解器,但可以转换成一个规则矩阵与 转换(数组,)(或 数组() 简称)。 的长度 dl 必须比长度少一个 d.

注意细分 dl 和superdiagonal 不得相互别名。 如果检测到混叠,构造函数将使用 作为其论点。

*例子*

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

从矩阵的第一子对角线、对角线和第一超对角线构造三边形矩阵 A.

*例子*

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

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

构建一个 对称 上视图(如果 u=:U)或更低(如果 uplo=:L)矩阵的三角形 A.

对称 视图主要用于实对称矩阵,对其启用了专门的算法(例如本征问题) 对称 类型。 更一般地说,请参阅 赫米蒂安(A)对于Hermitian矩阵 A==A',其有效等同于 对称 对于实矩阵,但对于复杂矩阵也很有用。 (而复杂 对称 支持矩阵,但很少有专门的算法。)

计算实矩阵的对称部分,或者更一般地说是Hermitian部分 (A+A')/2 实矩阵或复数矩阵 A,使用 [医隐士].

*例子*

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

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

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

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

请注意 晚餐 将不等于 慢一点 除非 A 本身是对称的(例如,如果 A==转置(A)).

Hermitian(A::AbstractMatrix, uplo::Symbol=:U)

构建一个 赫米蒂安 上视图(如果 u=:U)或更低(如果 uplo=:L)矩阵的三角形 A.

计算的Hermitian部分 A,使用 [医隐士].

*例子*

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

julia> Hupper = Hermitian(A)
3×3 Hermitian{Complex{Int64}, Matrix{Complex{Int64}}}:
 1+0im  2+2im  3-3im
 2-2im  5+0im  6-6im
 3+3im  6+6im  9+0im

julia> Hlower = Hermitian(A, :L)
3×3 Hermitian{Complex{Int64}, Matrix{Complex{Int64}}}:
 1+0im  4+0im  7+0im
 4+0im  5+0im  8-8im
 7+0im  8+8im  9+0im

julia> hermitianpart(A)
3×3 Hermitian{ComplexF64, Matrix{ComplexF64}}:
 1.0+0.0im  3.0+1.0im  5.0-1.5im
 3.0-1.0im  5.0+0.0im  7.0-7.0im
 5.0+1.5im  7.0+7.0im  9.0+0.0im

请注意 胡普尔 将不等于 花椰菜 除非 A 本身是Hermitian(例如,如果 A==形容词(A)).

对角线的所有非实数部分将被忽略。

Hermitian(fill(complex(1,1), 1, 1)) == fill(1, 1, 1)
LowerTriangular(A::AbstractMatrix)

构建一个 低角,低角 矩阵的视图 A.

*例子*

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
UpperTriangular(A::AbstractMatrix)

构建一个 上角,上角 矩阵的视图 A.

*例子*

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
UnitLowerTriangular(A::AbstractMatrix)

构建一个 N.单位角,单位角 矩阵的视图 A. 这样的观点具有 一个单位eltype,eltypeA 在其对角线上。

*例子*

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
UnitUpperTriangular(A::AbstractMatrix)

构建一个 N.单位,单位 矩阵的视图 A. 这样的观点具有 一个单位eltype,eltypeA 在其对角线上。

*例子*

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
UpperHessenberg(A::AbstractMatrix)

构建一个 上海森伯格 矩阵的视图 A. 参赛作品 A 下面的第一个细分被忽略。

兼容性

Julia1.3这种类型是在Julia1.3中添加的。

高效的算法被实现为 H\b, 副署长(H),和类似的。

请参阅 赫森伯格函数将任何矩阵因子化为类似的upper-Hessenberg矩阵。

如果 F::赫森伯格 是因式分解对象,酉矩阵可以用 F.Q 和赫森伯格矩阵与 F.H. 何时 Q 被提取,得到的类型是 海森伯格 对象,并可转换为具有 转换(数组,)(或 数组() 简称)。

迭代分解会产生以下因子 F.QF.H.

*例子*

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

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

通用大小的统一缩放运算符定义为标量乘以标识运算符, λ*I. 虽然没有明确的 大小,它在许多情况下的作用类似于矩阵,并包括对某些索引的支持。 请参阅 .

兼容性

Julia1.6使用范围的索引从Julia1.6开始可用。

*例子*

julia> J = UniformScaling(2.)
UniformScaling{Float64}
2.0&ast;I

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

julia> J&ast;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
I

类型的对象 制服,制服,表示任意大小的单位矩阵。

*例子*

julia> fill(1, (5,6)) &ast; I == fill(1, (5,6))
true

julia> [1 2im 3; 1im 2 3] &ast; I
2×3 Matrix{Complex{Int64}}:
 1+0im  0+2im  3+0im
 0+1im  2+0im  3+0im
(I::UniformScaling)(n::Integer)

构建一个 对角线 矩阵从a 制服,制服.

兼容性

Julia1.2此方法自Julia1.2起可用。

*例子*

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

julia> (0.7&ast;I)(3)
3×3 Diagonal{Float64, Vector{Float64}}:
 0.7   ⋅    ⋅
  ⋅   0.7   ⋅
  ⋅    ⋅   0.7
LinearAlgebra.Factorization

抽象类型https://en.wikipedia.org/wiki/Matrix_decomposition[矩阵分解]a.k.a.矩阵分解。 见 在线文档获取可用矩阵因子分解的列表。

LU <: Factorization

的矩阵因式分解类型 方阵的因式分解 A. 这是返回类型 ,对应的矩阵因式分解函数。

因式分解的各个组成部分 F::鲁 可透过 获得财产:

组件 资料描述

F.L

L (单位下三角)的一部分

F.U

U (上三角形)的一部分

F.p

(右)排列 向量资料

F.P

(右)排列 矩阵

迭代因式分解生成组件 F.L, F.U,而 F.p.

*例子*

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

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

julia> F.L &ast; F.U == A[F.p, :]
true

julia> l, u, p = lu(A); # destructuring via iteration

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

计算稀疏矩阵的LU因子分解 A.

对于稀疏 A 使用real或complex元素类型,返回类型为 F梅拢潞UmfpackLU{Tv, Ti},与 电视 = 漂浮64复杂的f64 分别和 是整数类型(Int32Int64).

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

排列 q 可以是置换向量或 什么都没有. 如果没有提供置换向量或 q什么都没有,使用UMFPACK的默认值。 如果置换不是从零开始,则进行从零开始的复制。

控制 vector默认为Julia SparseArrays包的UMFPACK默认配置(注意:这是从UMFPACK默认值修改为禁用迭代细化),但可以通过传递一个长度的vector来更改 UMFPACK_控制,请参阅UMFPACK手册以了解可能的配置。 例如,可重复迭代细化:

umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # read Julia default configuration for a Float64 sparse matrix
SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # optional - display values
umfpack_control[SparseArrays.UMFPACK.JL_UMFPACK_IRSTEP] = 2.0 # reenable iterative refinement (2 is UMFPACK default max iterative refinement steps)

Alu = lu(A; control = umfpack_control)
x = Alu \ b   # solve Ax = b, including UMFPACK iterative refinement

因式分解的各个组成部分 F 可以通过索引访问:

组件 资料描述

L

L (下三角形)的一部分

U

U (上三角形)的一部分

p

右排列 向量资料

q

左排列 向量资料

Rs的

向量资料 比例系数

:

(L,U,p,q,Rs) 组件

之间的关系 FAF.L*F.U==(F.Rs …​*A)[F.p,f.q] F 进一步支持以下功能:

* \ * 德特

请参阅 鲁!

卢(A::AbstractSparseMatrixCSC) 使用UMFPACKfootnote:ACM832[Davis,Timothy A.(2004b)。 Algorithm832:UMFPACK V4.3---一种不对称模式多额结构方法。 ACM反式。 数学。 软件。, 30(2), 196—​199. doi:10.1145/992200.992206]图书馆是https://github.com/DrTimothyAldenDavis/SuiteSparse[SuiteSparse].因为这个库只支持稀疏矩阵 漂浮64复杂的f64 元素, 皈依者 A 到类型的副本中 SparseMatrixCSC{Float64}SparseMatrixCSC{ComplexF64} 视情况而定。

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

计算lu因子分解 A.

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

默认情况下,与 检查=真,分解产生有效因子时也抛出错误,但上三角因子 U 是等级不足的。 这可以通过传递来改变 allowsingular=true.

在大多数情况下,如果 A 是子类型 S抽象矩阵{T} 使用元素类型 T 支援服务 +, -, */,返回类型为 鲁{T,S{T}}.

一般来说,LU因式分解涉及矩阵的行的置换(对应于 F.p 输出如下所述),称为"枢轴"(因为它对应于选择哪一行包含"枢轴",对角线条目 F.U). 可以通过可选项选择以下透视策略之一 枢轴,枢轴 论点:

* RowMaximum() (默认值):标准的透视策略;透视对应于剩余的、要分解的行中最大绝对值的元素。 这种透视策略要求元素类型也支持 腹肌<. (这通常是浮点矩阵的唯一数值稳定选项。) * 罗农泽罗(RowNonZero):枢轴对应于其余的第一个非零元素,要进行因式分解的行。 (这对应于手计算中的典型选择,并且对于支持的更一般的代数数类型也很有用 伊泽罗但不是 腹肌<.) * 诺皮沃特():关闭旋转(如果在枢轴位置遇到零条目,即使在 allowsingular=true).

因式分解的各个组成部分 F 可透过 获得财产:

组件 资料描述

F.L

L (下三角形)的一部分

F.U

U (上三角形)的一部分

F.p

(右)排列 向量资料

F.P

(右)排列 矩阵

迭代因式分解生成组件 F.L, F.U,而 F.p.

之间的关系 FAF.L*F.U==A[F.p,:] F 进一步支持以下功能:

支持的功能 鲁{T,Tridiagonal{T}}

/

\

因维

德特

logdet,logdet

n.logabsdet

大小

兼容性

朱莉娅1.11 allowsingular碌录潞陆 在Julia1.11中添加了关键字参数。

*例子*

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

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

julia> F.L &ast; F.U == A[F.p, :]
true

julia> l, u, p = lu(A); # destructuring via iteration

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

julia>lu([1 2;1 2],allowsingular=true)
卢{Float64, Matrix{Float64},向量{Int64}}
L因子:
2×2矩阵{Float64}:
 1.0  0.0
 1.0  1.0
U因子(rank-deficient):
2×2矩阵{Float64}:
 1.0  2.0
 0.0  0.0
lu!(F::UmfpackLU, A::AbstractSparseMatrixCSC; check=true, reuse_symbolic=true, q=nothing) -> F::UmfpackLU

计算稀疏矩阵的LU因子分解 A,重用存储在已存在的LU因式分解的符号因式分解 F. 除非 [医]杂音 被设置为false,稀疏矩阵 A 必须具有与用于创建LU因子分解的矩阵相同的非零模式 F,否则抛出错误。 如果大小 AF 不同,所有向量将相应调整大小。

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

排列 q 可以是置换向量或 什么都没有. 如果没有提供置换向量或 q什么都没有,使用UMFPACK的默认值。 如果置换不是基于零,则进行基于零的复制。

请参阅

鲁!(F::UmfpackLU,A::AbstractSparseMatrixCSC) 使用作为SuiteSparse一部分的UMFPACK库。 因为这个库只支持稀疏矩阵 漂浮64复杂的f64 元素, 鲁! 将自动将类型转换为由LU因子分解或 SparseMatrixCSC{ComplexF64} 视情况而定。

兼容性

朱莉娅1.5 鲁!梅拢潞UmfpackLU 至少需要Julia1.5。

*例子*

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

julia> F = lu(A);

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

julia> lu!(F, B);

朱莉娅>f\ones(2)
2元素向量{Float64}:
 0.0
 1.0
lu!(A, pivot = RowMaximum(); check = true, allowsingular = false) -> LU

鲁! 是一样的 ,但通过复盖输入来节省空间 A,而不是创建副本。 一个 N.恐怖,恐怖如果因式分解产生一个不能由元素类型表示的数字,则抛出异常 A,例如对于整数类型。

兼容性

朱莉娅1.11 allowsingular碌录潞陆 在Julia1.11中添加了关键字参数。

*例子*

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

julia> F = lu!(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
L 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:
[...]
Cholesky <: Factorization

密对称/Hermitian正定矩阵的Cholesky因式分解的矩阵因式分解类型 A. 这是返回类型 乔莱斯基,对应的矩阵因式分解函数。

三角Cholesky因子可以从因子分解得到 F::CholeskyF.LF.U,在哪里 A≈F.U'*F.U≈F.L*F.L'.

以下功能可用于 乔莱斯基 对象: 大小, \, 因维, 德特, logdet,logdetisposdef.

迭代分解生成组件 LU.

*例子*

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

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

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

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

julia> C.L &ast; C.U == A
true

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

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

密对称/Hermitian正半定矩阵的枢转Cholesky因式分解的矩阵因式分解类型 A. 这是返回类型 cholesky(_,::RowMaximum),对应的矩阵因式分解函数。

三角Cholesky因子可以从因子分解得到 F::CholeskyPivotedF.LF.U,以及通过 F.p,在哪里 A[F.p,F.p]≈Ur'*Ur≈Lr*Lr'Ur=F.U[1:f.rank,:]Lr=F.L[:,1:F.rank],或替代地 A≈Up'*Up≈Lp*Lp'Up=F.U[1:f.rank,invperm(F.p)]Lp=F.L[invperm(F.p),1:F.rank].

以下功能可用于 [医]胆小鬼 对象: 大小, \, 因维, 德特,和 职级.

迭代分解生成组件 LU.

*例子*

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

julia> A = X &ast; 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, :]' &ast; 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
cholesky(A, NoPivot(); check = true) -> Cholesky

计算密集对称正定矩阵的Cholesky因式分解 A 并返回一个 乔莱斯基因式分解。 矩阵 A 可以是一个 对称赫米香 [医抽象矩阵]或_perfectly_对称或Hermitian [医]抽象矩阵.

三角Cholesky因子可以从因子分解得到 FF.LF.U,在哪里 A≈F.U'*F.U≈F.L*F.L'.

以下功能可用于 乔莱斯基 对象: 大小, \, 因维, 德特, logdet,logdetisposdef.

如果你有一个矩阵 A 由于其构造中的舍入错误,这有点非Hermitian,将其包裹在 赫米蒂安(A) 在传递给 乔莱斯基 为了把它当作完美的隐士。

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

*例子*

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 &ast; C.U == A
true
cholesky(A, RowMaximum(); tol = 0.0, check = true) -> CholeskyPivoted

计算密集对称正半定矩阵的枢转Cholesky因式分解 A 并返回一个 [医胆小鬼]因式分解。 矩阵 A 可以是一个 对称赫米香 [医抽象矩阵]或_perfectly_对称或Hermitian [医]抽象矩阵.

三角Cholesky因子可以从因子分解得到 FF.LF.U,以及通过 F.p,在哪里 A[F.p,F.p]≈Ur'*Ur≈Lr*Lr'Ur=F.U[1:f.rank,:]Lr=F.L[:,1:F.rank],或另选地 A≈Up'*Up≈Lp*Lp'Up=F.U[1:f.rank,invperm(F.p)]Lp=F.L[invperm(F.p),1:F.rank].

以下功能可用于 [医]胆小鬼 对象: 大小, \, 因维, 德特,和 职级.

论点 托尔 确定用于确定秩的容差。 对于负值,容差等于 eps()*尺寸(A,1)*最大(diag(A)).

如果你有一个矩阵 A 由于其构造中的舍入错误,这有点非Hermitian,将其包裹在 赫米蒂安(A) 在传递给 乔莱斯基 为了把它当作完美的隐士。

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

*例子*

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

julia>A=X&ast;X';

julia>C=cholesky(A,RowMaximum(),check=false)
[医]胆小鬼{Float64, Matrix{Float64},向量{Int64}}
排名1的U因子:
4×4上方角{Float64, Matrix{Float64}}:
 4.0  2.0  3.0  1.0
  ⋅   0.0  6.0  2.0
  ⋅    ⋅   9.0  3.0
  ⋅    ⋅    ⋅   1.0
排列,排列:
4元素向量{Int64}:
 4
 2
 3
 1

julia>C.U[1:c.rank,:]'&ast;C.U[1:c.rank,:]≈A[C.p,C.p]
真的

julia>l,u=c;#通过迭代解构

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

计算稀疏正定矩阵的Cholesky因式分解 A. A 必须是一个 [医麻雀]或一个 对称/赫米香查看a [医]麻雀. 请注意,即使 A 没有类型标签,它仍然必须是对称的或隐密的。 如果 烫发,烫发 没有给出,使用填充减少置换。 F=cholesky(A) 最常用于求解方程组 F\b,而且方法 迪亚格, 德特,和 logdet,logdet被定义为 F. 您还可以从 F,使用 F.L. 但是,由于默认情况下透视是打开的,因此因子分解在内部表示为 A==P'*L*L'*P 用置换矩阵 P;使用just L 不考虑 P 会给出不正确的答案。 要包括置换的影响,通常优选提取"组合"因子,例如 PtL=F.PtL (相当于 P'*L)和 LtP=F.向上 (相当于 L'*P).

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

设置可选项 轮班 关键字参数计算 A+shift*I 而不是 A. 如果 烫发,烫发 提供了参数,它应该是一个置换 1:尺寸(A,1) 给出要使用的排序(而不是CHOLMOD的默认AMD排序)。

请参阅 ldlt对于不需要正定义的类似因式分解,但可以显着慢于 乔莱斯基.

*例子*

在下面的示例中,使用的填充减少置换是 [3, 2, 1]. 如果 烫发,烫发 被设置为 1:3 要强制执行无置换,因子中的非零元素数为6。

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

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

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

julia> L = sparse(C.L);

朱莉娅>矩阵(L)
3×3矩阵{Float64}:
 1.41421   0.0       0.0
 0.0       1.41421   0.0
 0.707107  0.707107  1.0

julia>L&ast;L'≈A[C.p,C.p]
真的

julia>P=稀疏(1:3,C.p,ones(3))
3×3SparseMatrixCSC{Float64, Int64} 与3个存储的条目:
  ⋅    ⋅   1.0
  ⋅   1.0   ⋅
 1.0   ⋅    ⋅

julia>P'&ast;L&ast;L'&ast;P≈A
真的

julia>C=cholesky(稀疏(A),烫发=1:3)
麻雀。霍莫德。因素{Float64, Int64}
类型:LLt
方法:简单
maxnnz:6
nnz:6
成功:真实

julia>L=稀疏(C.L);

朱莉娅>矩阵(L)
3×3矩阵{Float64}:
 1.41421    0.0       0.0
 0.707107   1.22474   0.0
 0.707107  -0.408248  1.1547

朱莉娅>L&ast;L'≈A
真的

注意此方法使用 CHOLMOD[1][2]图书馆https://github.com/DrTimothyAldenDavis/SuiteSparse[SuiteSparse].CHOLMOD仅支持单精度或双精度的实数或复杂类型。 不属于这些元素类型的输入矩阵将根据需要转换为这些类型。

来自CHOLMOD的许多其他函数被包装,但没有从 `基地。麻雀。霍莫德` 模块。
cholesky!(A::AbstractMatrix, NoPivot(); check = true) -> Cholesky

同为 乔莱斯基,但通过复盖输入来节省空间 A,而不是创建副本。 一个 N.恐怖,恐怖如果因式分解产生一个不能由元素类型表示的数字,则抛出异常 A,例如对于整数类型。

*例子*

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

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

同为 乔莱斯基,但通过复盖输入来节省空间 A,而不是创建副本。 一个 N.恐怖,恐怖如果因式分解产生一个不能由元素类型表示的数字,则抛出异常 A,例如对于整数类型。

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

计算Cholesky( )因式分解 A,重用符号因式分解 F. A 必须是一个 [医麻雀]或一个 对称/ 赫米香查看a [医]麻雀. 请注意,即使 A 没有类型标签,它仍然必须是对称的或隐密的。

请参阅 乔莱斯基.

注意此方法使用SuiteSparse的CHOLMOD库,该库仅支持单精度或双精度的实数或复杂类型。 不属于这些元素类型的输入矩阵将根据需要转换为这些类型。

lowrankupdate(C::Cholesky, v::AbstractVector) -> CC::Cholesky

更新一个Cholesky因子分解 C 与向量 v. 如果 A=C.U’C.U 然后 CC=cholesky(C.U’C.U+v*v') 但计算 CC脦陋胫茫 只使用 O(n^2) 行动。

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

得到一个 LDLt 因式分解 A+C*C' 给定一个 LDLt[医]LLt 因式分解 FA.

返回的因子始终为 LDLt 因式分解。

lowrankdowndate(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Downdate一个Cholesky因子分解 C 与向量 v. 如果 A=C.U’C.U 然后 CC=cholesky(C.U’C.U-v*v') 但计算 CC脦陋胫茫 只使用 O(n^2) 行动。

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

得到一个 LDLt 因式分解 A+C*C' 给定一个 LDLt[医]有限责任公司 因式分解 FA.

返回的因子始终为 LDLt 因式分解。

请参阅 lowrankdowndate!, [医低档日期], lowrankupdate!.

lowrankupdate!(C::Cholesky, v::AbstractVector) -> CC::Cholesky

更新一个Cholesky因子分解 C 与向量 v. 如果 A=C.U’C.U 然后 CC=cholesky(C.U’C.U+v*v') 但计算 CC脦陋胫茫 只使用 O(n^2) 行动。 输入因子分解 C 更新到位,以便在退出时 C==CC. 向量 v 在计算过程中被销毁。

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

更新一个 LDLt[医]有限责任公司 因式分解 FA 对…​…​ A+C*C'.

[医]有限责任公司 因式分解转换为 LDLt.

请参阅 [医低档日期], 低档日期, lowrankdowndate!.

lowrankdowndate!(C::Cholesky, v::AbstractVector) -> CC::Cholesky

Downdate一个Cholesky因子分解 C 与向量 v. 如果 A=C.U’C.U 然后 CC=cholesky(C.U’C.U-v*v') 但计算 CC脦陋胫茫 只使用 O(n^2) 行动。 输入因子分解 C 更新到位,以便在退出时 C==CC. 向量 v 在计算过程中被销毁。

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

更新一个 LDLt[医]有限责任公司 因式分解 FA 对…​…​ A-C*C'.

[医]有限责任公司 因式分解转换为 LDLt.

请参阅 低档日期, [医低档日期], lowrankupdate!.

LDLt <: Factorization

的矩阵因式分解类型 LDLt 实数的因式分解 SymTridiagonal缧矩阵 S 这样, S=L*对角线(d)*L',在哪里 L 是一个 N.单位角,单位角矩阵和 d 是一个向量。 主要用途是 LDLt 因式分解 F=ldlt(S) 是求解线性方程组 Sx=bF\b. 这是返回类型 ldlt,对应的矩阵因式分解函数。

因式分解的各个组成部分 F::LDLt 可透过 获得财产:

组件 资料描述

F.L

L (单位下三角)的一部分 LDLt

F.D

D (对角线)的一部分 LDLt

F.Lt

Lt (单位上三角)部分 LDLt

F.d

的对角线值 D 作为一个 向量资料

*例子*

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

julia> F = ldlt(S)
LDLt{Float64, SymTridiagonal{Float64, Vector{Float64}}}
L factor:
3×3 UnitLowerTriangular{Float64, SymTridiagonal{Float64, Vector{Float64}}}:
 1.0        ⋅         ⋅
 0.333333  1.0        ⋅
 0.0       0.545455  1.0
D factor:
3×3 Diagonal{Float64, Vector{Float64}}:
 3.0   ⋅        ⋅
  ⋅   3.66667   ⋅
  ⋅    ⋅       3.90909
ldlt(S::SymTridiagonal) -> LDLt

计算一个 LDLt (即, )实对称三边形矩阵的因式分解 S 这样, S=L*对角线(d)*L' 哪里 L 是单位下三角矩阵和 d 是一个向量。 主要用途是 LDLt 因式分解 F=ldlt(S) 是求解线性方程组 Sx=bF\b.

请参阅 邦奇考夫曼对于任意对称或Hermitian矩阵的类似但枢转的因式分解。

*例子*

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
ldlt(A::SparseMatrixCSC; shift = 0.0, check = true, perm=nothing) -> CHOLMOD.Factor

计算 稀疏矩阵的因式分解 A. A 必须是一个 [医麻雀]或一个 对称/赫米香查看a [医]麻雀. 请注意,即使 A 没有类型标签,它仍然必须是对称的或隐密的。 使用填充减少置换。 F=ldlt(A) 最常用于求解方程组 A*x=bF\b. 返回的因式分解对象 F 也支持这些方法 迪亚格, 德特, logdet,logdet,和 因维. 您可以从 F 使用 F.L. 但是,由于默认情况下透视是打开的,因此因子分解在内部表示为 A==P'*L*D*L'*P 用置换矩阵 P;使用just L 不考虑 P 会给出不正确的答案。 为了包括置换的影响,通常优选提取"组合"因子,如 PtL=F.PtL (相当于 P'*L)和 LtP=F.向上 (相当于 L'*P). 支持的因素的完整列表是 :L,:PtL,:D,:UP,:U,:LD,:DU,:PtLD,:DUP.

与相关的Cholesky因子分解不同, 因式分解不需要 A 是肯定的。 然而,它仍然要求所有主要未成年人都有良好的条件,如果不满足,就会失败。

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

设置可选项 轮班 关键字参数计算 A+shift*I 而不是 A. 如果 烫发,烫发 提供了参数,它应该是一个置换 1:尺寸(A,1) 给出要使用的排序(而不是CHOLMOD的默认AMD排序)。

请参阅 乔莱斯基对于一个可以显着快于 ldlt,但要求 A 是肯定的。

注意此方法使用 CHOLMOD[1][2] 库从https://github.com/DrTimothyAldenDavis/SuiteSparse[SuiteSparse].CHOLMOD仅支持单精度或双精度的实数或复杂类型。 不属于这些元素类型的输入矩阵将根据需要转换为这些类型。

来自CHOLMOD的许多其他函数被包装,但没有从 `基地。麻雀。霍莫德` 模块。
ldlt!(S::SymTridiagonal) -> LDLt

同为 ldlt,但通过复盖输入来节省空间 S,而不是创建副本。

*例子*

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

julia> ldltS = ldlt!(S);

julia> ldltS === S
false

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

计算 因式分解 A,重用符号因式分解 F. A 必须是一个 [医麻雀]或一个 对称/赫米香查看a [医]麻雀. 请注意,即使 A 没有类型标签,它仍然必须是对称的或隐密的。

请参阅 ldlt.

注意此方法使用CHOLMOD库从https://github.com/DrTimothyAldenDavis/SuiteSparse[SuiteSparse],仅支持单精度或双精度的实数或复杂类型。 不属于这些元素类型的输入矩阵将根据需要转换为这些类型。

QR <: Factorization

以打包格式存储的QR矩阵因子分解,通常从 资历名册. 如果 是一个 m×n 矩阵,则

哪里 是正交/酉矩阵和 是上三角形。 矩阵 存储为户主反射器的序列 和系数 哪里:

迭代分解生成组件 QR.

对象有两个字段:

* 因素 是一个 m×n 矩阵。 **上部三角形部分包含的元素 ,即 R=triu(F.因素) 对于一个 资历名册 对象 F. **细分部分包含反射器 以打包格式存储, 矩阵的第th列 V=I+tril(F.因子,-1). * τ 是长度的向量 最小(m,n) 包含系数 .

QRCompactWY <: Factorization

以紧凑的阻塞格式存储的QR矩阵因子分解,通常从 资历名册. 如果 是一个 m×n 矩阵,则

哪里 是正交/酉矩阵和 是上三角形。 它类似于 资历名册格式除了正交/酉矩阵 被存储在_Compact WY_格式脚注:Schreiber1989[R Schreiber和C Van Loan,"a storage-efficient wy representation for products of Householder transformations",SIAM J Sci Stat Comput10(1989),53-57. doi:10.1137/0910005].对于块大小 ,它被存储为一个 m×n 下梯形矩阵 和矩阵 上三角矩阵 大小 ×=n_b=( )和上梯形 ×÷\min(m,n)-(b-1)n_b÷矩阵 ( )其上方形部分以 令人满意

这样, 第三栏 , 第三要素 [diag(T_1);diag(T_2);…​;diag(T_b)],而 是左 m×最小(m,n) 的块 . 当使用 资历名册,块大小由下式给出 .

迭代分解生成组件 QR.

对象有两个字段:

* 因素,如在 资历名册类型,是一个 m×n 矩阵。 **上部三角形部分包含的元素 ,即 R=triu(F.因素) 对于一个 资历名册 对象 F. **细分部分包含反射器 以打包格式存储,以便 V=I+tril(F.因子,-1). * T 是一个 -按-$\min(m,n)matrix矩阵如上所述。 每个三角形矩阵的细分元素 被忽略。

注意此格式不应与较旧的_WY_表示脚注混淆:Bischof1987[C Bischof和C Van Loan,"The WY representation for products of Householder matrices",SIAM J Sci Stat Comput8(1987),s2-s13。 doi:10.1137/0908009]。

QRPivoted <: Factorization

以填充格式进行列旋转的QR矩阵因子分解,通常从 资历名册. 如果 是一个 m×n 矩阵,则

哪里 是置换矩阵, 是正交/酉矩阵和 是上三角形。 矩阵 存储为户主反射器的序列:

迭代分解生成组件 Q, R,而 p.

对象有三个字段:

* 因素 是一个 m×n 矩阵。 **上部三角形部分包含的元素 ,即 R=triu(F.因素) 对于一个 资历名册 对象 F. **细分部分包含反射器 以打包格式存储, 矩阵的第th列 V=I+tril(F.因子,-1). * τ 是长度的向量 最小(m,n) 包含系数 . * jpvt 是长度的整数向量 n 对应于置换 .

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

计算 资历名册 稀疏矩阵的因式分解 A. 使用减少填充的行和列排列,以便 F.R=F.Q'*A[F.prow,f.pcol]. 这种类型的主要应用是解决最小二乘或欠定问题 \. 函数调用C库SPQR[3]

qr(A::SparseMatrixCSC) 使用SPQR库,它是https://github.com/DrTimothyAldenDavis/SuiteSparse[SuiteSparse].因为这个库只支持稀疏矩阵 漂浮64复杂的f64 元素,截至Julia v1.4 资历名册 皈依者 A 到类型的副本中 SparseMatrixCSC{Float64}SparseMatrixCSC{ComplexF64} 视情况而定。

*例子*

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

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

计算矩阵的QR因子分解 A:正交(或酉if A 是复数值)矩阵 Q,以及上三角矩阵 R 这样,

返回的对象 F 以打包格式存储因子分解:

*如果 枢轴==ColumnNorm() 然后 F 是一个 QRPivoted对象, *否则,如果元素类型为 A 是BLAS类型(漂浮物32, 漂浮64, 复杂的32复杂的f64),则 F 是一个 QRCompactWY对象, *否则 F 是一个 资历名册对象。

分解的各个组成部分 F 可以通过属性访问器检索:

* F.Q:正交/酉矩阵 Q * F.R:上三角矩阵 R * F.p:枢轴的置换向量(QRPivoted只) * F.P:枢轴的置换矩阵(QRPivoted只)

注意每个参考上三角因子通过 F.R 分配一个新数组。 因此,最好缓存该数组,例如,通过 R=F.R 并继续与 R.

迭代分解生成组件 Q, R,如果现存 p.

以下功能可用于 资历名册 对象: 因维, 大小,和 \. 何时 A 为矩形, \ 将返回一个最小二乘解,如果解不是唯一的,则返回范数最小的解。 何时 A 如果不是满秩,则需要使用(列)旋转进行因式分解以获得最小范数解。

关于满/平方或非满/平方的乘法 Q 是允许的,即两者兼而有之 F.Q*F.RF.Q*A 得到支持。 A Q 矩阵可以转换成一个有规律的矩阵 矩阵. 此操作返回"瘦"Q因子,即,如果 Am×nm>=n,则 矩阵(F.Q) 产生一个 m×n 正交列的矩阵。 要检索"完整"Q因子, m×m 正交矩阵,使用 F.Q*I收集(F.Q). 如果 m<=n,则 矩阵(F.Q) 产生一个 m×m 正交矩阵。

QR分解的块大小可以通过关键字参数指定 块大小:整数 何时 枢轴==NoPivot()一个isa StridedMatrix{<:BlasFloat}. 它被忽略时 区块大小>最小(大小(A)). 见 QRCompactWY.

兼容性

朱莉娅1.4 区块大小 关键字参数需要Julia1.4或更高版本。

*例子*

julia> A = [3.0 -6.0; 4.0 -8.0; 0.0 1.0]
3×2 Matrix{Float64}:
 3.0  -6.0
 4.0  -8.0
 0.0   1.0

julia> F = qr(A)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}, Matrix{Float64}}
Q factor: 3×3 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R factor:
2×2 Matrix{Float64}:
 -5.0  10.0
  0.0  -1.0

julia> F.Q &ast; F.R == A
true

资历名册 返回多个类型,因为LAPACK使用了几种表示,这些表示最大限度地减少了户主基本反射器产品的内存存储要求,因此 QR 矩阵可以紧凑地存储,而不是两个单独的密集矩阵。

qr!(A, pivot = NoPivot(); blocksize)

qr! 是一样的 资历名册A[医抽象矩阵],但通过复盖输入来节省空间 A,而不是创建副本。 一个 N.恐怖,恐怖如果因式分解产生一个不能由元素类型表示的数字,则抛出异常 A,例如对于整数类型。

兼容性

朱莉娅1.4 区块大小 关键字参数需要Julia1.4或更高版本。

*例子*

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

julia> qr!(a)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}, Matrix{Float64}}
Q 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:
[...]
LQ <: Factorization

的矩阵因式分解类型 LQ 矩阵的因式分解 A. 该 LQ 分解是 资历名册分解的 转置(A). 这是返回类型 lq,对应的矩阵因式分解函数。

如果 S::LQ 是因式分解对象,下三角分量可通过 S.L,和正交/酉分量通过 S.Q,这样 A≈S.L*S.Q.

迭代分解生成组件 S.LS.Q.

*例子*

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

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

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

julia>l,q=S;#通过迭代解构

julia>l==S.L&&q==S.Q
真的
lq(A) -> S::LQ

计算lq分解 A. 分解的下三角分量可以从 LQ对象 SS.L,和正交/酉分量通过 S.Q,这样 A≈S.L*S.Q.

迭代分解生成组件 S.LS.Q.

LQ分解是QR分解 转置(A),并且它是有用的,以便计算最小范数解 lq(A)\b 到欠定方程组(A 具有比行更多的列,但具有完整的行秩)。

*例子*

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

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

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

julia> l, q = S; # destructuring via iteration

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

计算 LQ因式分解 A,使用输入矩阵作为工作区。 请参阅 lq.

BunchKaufman <: Factorization

束的矩阵因式分解类型-对称矩阵或Hermitian矩阵的考夫曼因式分解 A 作为 P’UDU’PP’LL’P,取决于上部(默认)还是下部三角形存储在 A. 如果 A 那么是复数对称的 U'L' 表示未结合的转座,即 转置(U)转置(L),分别。 这是返回类型 邦奇考夫曼,对应的矩阵因式分解函数。

如果 S::BunchKaufman 是因式分解对象,分量可以通过 S.D., 美国S.L 视情况而定 S.上升,而 S.p.

迭代分解生成组件 S.D., 美国S.L 视情况而定 S.上升,而 S.p.

*例子*

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

julia> S = bunchkaufman(A) # A gets wrapped internally by 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; # destructuring via iteration

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

julia>S=bunchkaufman(对称(A,:L))
邦奇考夫曼{Float64, Matrix{Float64},向量{Int64}}
D因子:
2×2三角形{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L因子:
2×2单位角{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
排列,排列:
2元素向量{Int64}:
 2
 1
bunchkaufman(A, rook::Bool=false; check = true) -> S::BunchKaufman

Compute The Bunch-Kaufman脚注:Bunch1977[J R Bunch and L Kaufman,Some stable methods for calculation inertia and solving symmetric linear systems,Mathematics of Computation31:137(1977),163-179. url.]对称或Hermitian矩阵的因式分解 A 作为 P'*U*D*U'*PP'*L*D*L'*P,取决于存储在哪个三角形 A,并返回一个 邦奇考夫曼对象。 请注意,如果 A 那么是复数对称的 U'L' 表示未结合的转座,即 转置(U)转置(L).

迭代分解生成组件 S.D., 美国S.L 视情况而定 S.上升,而 S.p.

如果 鲁克真的,使用了旋转。 如果 鲁克 为false,则不使用旋转。

何时 检查=真,分解失败则抛出错误。 何时 检查=错误,负责检查分解的有效性(通过 伊斯成功)在于用户。

以下功能可用于 邦奇考夫曼 对象: 大小, \, 因维, issymmetric碌录潞陆, 伊瑟米香, getindex,getindex.

*例子*

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

julia> S = bunchkaufman(A) # A gets wrapped internally by 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; # destructuring via iteration

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

julia> S.U&ast;S.D&ast;S.U' - S.P&ast;A&ast;S.P'
2×2 Matrix{Float64}:
 0.0  0.0
 0.0  0.0

julia>S=bunchkaufman(对称(A,:L))
邦奇考夫曼{Float64, Matrix{Float64},向量{Int64}}
D因子:
2×2三角形{Float64, Vector{Float64}}:
 3.0   0.0
 0.0  -0.333333
L因子:
2×2单位角{Float64, Matrix{Float64}}:
 1.0        ⋅
 0.666667  1.0
排列,排列:
2元素向量{Int64}:
 2
 1

julia>S.L&ast;S.D&ast;S.L'-A[S.p,S.p]
2×2矩阵{Float64}:
 0.0  0.0
 0.0  0.0
bunchkaufman!(A, rook::Bool=false; check = true) -> BunchKaufman

邦奇考夫曼! 是一样的 邦奇考夫曼,但通过复盖输入来节省空间 A,而不是创建副本。

Eigen <: Factorization

方阵的特征值/频谱分解的矩阵因式分解类型 A. 这是返回类型 本征,对应的矩阵因式分解函数。

如果 F::本征 是因式分解对象,特征值可以通过 F.价值观 和特征向量作为矩阵的列 F.向量. (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

*例子*

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

朱莉娅>F.价值观
3元素向量{Float64}:
  1.0
  3.0
 18.0

julia>f.向量
3×3矩阵{Float64}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia>vals,vecs=F;#通过迭代解构

julia>vals==F.values&&vecs==f.vectors
真的
GeneralizedEigen <: Factorization

广义特征值/频谱分解的矩阵因式分解类型 AB. 这是返回类型 本征,相应的矩阵因式分解函数,当用两个矩阵参数调用时。

如果 F::一般化 是因式分解对象,特征值可以通过 F.价值观 和特征向量作为矩阵的列 F.向量. (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

*例子*

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.向量
2×2矩阵{ComplexF64}:
  0.0+1.0im0.0-1.0im
 -1.0+0.0im-1.0-0.0im

julia>vals,vecs=F;#通过迭代解构

julia>vals==F.values&&vecs==f.vectors
真的
eigvals(A; permute::Bool=true, scale::Bool=true, sortby) -> values

返回的特征值 A.

对于一般的非对称矩阵,可以在特征值计算之前指定矩阵的平衡方式。 该 排列,排列, 比例尺,而 索特比 关键字与for相同 本征.

*例子*

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

对于标量输入, [医]短节 会返回一个标量。

*例子*

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

计算广义特征值 AB.

*例子*

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

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

julia> eigvals(A,B)
2-element Vector{ComplexF64}:
 0.0 - 1.0im
 0.0 + 1.0im
eigvals(A::Union{Hermitian, Symmetric}; alg::Algorithm = default_eigen_alg(A))) -> values

返回的特征值 A.

阿尔格 指定用于特征值分解的算法和LAPACK方法:

* alg=DivideAndConquer():电话 拉帕克。赛夫德!. * alg=QRIteration():电话 拉帕克。赛耶夫!. * alg=鲁棒代表() (默认):多个相对健壮的表示方法,调用 拉帕克。syevr!.

参见James W.Demmel等,SIAM J.Sci. 康普特。 30,3,1508(2008)用于比较不同方法的准确性和性能。

默认值 阿尔格 使用可能会在未来发生变化。

兼容性

朱莉娅1.12 阿尔格 关键字参数需要Julia1.12或更高版本。

eigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> values

返回的特征值 A. 可以通过指定一个 单位范围 伊兰奇 复盖已排序特征值的索引,例如第2至第8个特征值。

*例子*

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

朱莉娅>eigvals(A,2:2)
1元素向量{Float64}:
 0.9999999999999996

朱莉娅>eigvals(一)
3元素向量{Float64}:
 -2.1400549446402604
  1.0000000000000002
  5.140054944640259
eigvals(A::Union{SymTridiagonal, Hermitian, Symmetric}, vl::Real, vu::Real) -> values

返回的特征值 A. 可以通过指定一对来仅计算特征值的子集 vlvu 为特征值的下边界和上边界。

*例子*

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
eigvals!(A; permute::Bool=true, scale::Bool=true, sortby) -> values

同为 [医短节],但通过复盖输入来节省空间 A,而不是创建副本。 该 排列,排列, 比例尺,而 索特比 关键字与for相同 本征.

注意输入矩阵 A 后将不包含其特征值 eigvals! 它被召唤了 - A 被用作工作区。

*例子*

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

朱莉娅>eigvals!(一)
2元素向量{Float64}:
 -0.3722813232690143
  5.372281323269014

朱莉娅>A
2×2矩阵{Float64}:
 -0.372281  -1.0
  0.0        5.37228
eigvals!(A, B; sortby) -> values

同为 [医短节],但通过复盖输入来节省空间 A (和 B),而不是创建副本。

注意输入矩阵 AB 后将不包含它们的特征值 eigvals! 被调用。 它们被用作工作区。

*例子*

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
eigvals!(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> values

同为 [医短节],但通过复盖输入来节省空间 A,而不是创建副本。 伊兰奇 是要搜索的特征值_indices_的范围-例如,第2到第8个特征值。

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

同为 [医短节],但通过复盖输入来节省空间 A,而不是创建副本。 vl 是搜索特征值的区间的下界,并且 vu 是上界。

eigmax(A; permute::Bool=true, scale::Bool=true)

返回的最大特征值 A. 选项 排列=真 排列矩阵变得更接近上三角形,并且 比例=真 按其对角线元素缩放矩阵,以使行和列在范数上更加相等。 请注意,如果特征值 A 是复杂的,这种方法将失败,因为复数无法排序。

*例子*

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

julia> eigmax(A)
1.0

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

julia> eigmax(A)
ERROR: DomainError with Complex{Int64}[0+0im 0+1im; -1+0im 0+0im]:
`A` cannot have complex eigenvalues.
Stacktrace:
[...]
eigmin(A; permute::Bool=true, scale::Bool=true)

返回的最小特征值 A. 选项 排列=真 排列矩阵变得更接近上三角形,并且 比例=真 按其对角线元素缩放矩阵,以使行和列在范数上更加相等。 请注意,如果特征值 A 是复杂的,这种方法将失败,因为复数无法排序。

*例子*

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

朱莉娅>eigmin(A)
-1.0

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

朱莉娅>eigmin(A)
错误:DomainError with Complex{Int64}[0+0im0+1im;-1+0im0+0im]:
`A` 不能具有复数特征值。
[医]堆垛机:
[...]
eigvecs(A::SymTridiagonal[, eigvals]) -> Matrix

返回矩阵 M 其列是 A. (该 k可以从切片中获得th特征向量 M[:,k].)

如果特征值的可选向量 [医]短节 被指定, eigvecs 返回具体对应的特征向量。

*例子*

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

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

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

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

返回矩阵 M 其列是 A. (该 k可以从切片中获得th特征向量 M[:,k].)的 排列,排列, 比例尺,而 索特比 关键字与for相同 本征.

*例子*

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
eigvecs(A, B) -> Matrix

返回矩阵 M 其列是 AB. (该 k可以从切片中获得th特征向量 M[:,k].)

*例子*

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

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

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

计算特征值分解 A,返回 本征因式分解对象 F 其中包含特征值在 F.价值观 和矩阵列中的归一化特征向量 F.向量. 这对应于求解形式的特征值问题 Ax=λx,在哪里 A 是矩阵, x 是特征向量,并且 λ 是特征值。 (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

以下功能可用于 本征 对象: 因维, 德特,和 isposdef.

对于一般的非对称矩阵,可以在特征向量计算之前指定矩阵的平衡方式。 选项 排列=真 排列矩阵变得更接近上三角形,并且 比例=真 按其对角线元素缩放矩阵,以使行和列在范数上更加相等。 默认值为 真的 对于这两个选项。

默认情况下,特征值和向量按字典排序 繝シ繝ォ縺ァ縺呐. 不同的比较函数 由(λ) 可以传递给 索特比,或者你可以通过 sortby=没什么 以任意顺序离开特征值。 一些特殊的矩阵类型(例如 对角线SymTridiagonal缧)可以实施自己的排序约定,而不接受 索特比 关键字。

*例子*

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

计算广义特征值分解 AB,返回 [医将军]因式分解对象 F 其中包含广义特征值在 F.价值观 和矩阵列中的广义特征向量 F.向量. 这对应于求解形式的广义特征值问题 Ax=λBx,在哪里 A、B 是矩阵, x 是特征向量,并且 λ 是特征值。 (该 k可以从切片中获得th广义特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

默认情况下,特征值和向量按字典排序 繝シ繝ォ縺ァ縺呐. 不同的比较函数 由(λ) 可以传递给 索特比,或者你可以通过 sortby=没什么 以任意顺序离开特征值。

*例子*

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.向量
2×2矩阵{ComplexF64}:
  0.0+1.0im0.0-1.0im
 -1.0+0.0im-1.0-0.0im

julia>vals,vecs=F;#通过迭代解构

julia>vals==F.values&&vecs==f.vectors
真的
eigen(A::Union{Hermitian, Symmetric}; alg::LinearAlgebra.Algorithm = LinearAlgebra.default_eigen_alg(A)) -> Eigen

计算特征值分解 A,返回 本征因式分解对象 F 其中包含特征值在 F.价值观 和矩阵列中的正交特征向量 F.向量. (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

阿尔格 指定用于特征值分解的算法和LAPACK方法:

* alg=DivideAndConquer():电话 拉帕克。赛夫德!. * alg=QRIteration():电话 拉帕克。赛耶夫!. * alg=鲁棒代表() (默认):多个相对健壮的表示方法,调用 拉帕克。syevr!.

参见James W.Demmel等,SIAM J.Sci. 康普特。 30,3,1508(2008)用于比较不同算法的精度和性能。

默认值 阿尔格 使用可能会在未来发生变化。

兼容性

朱莉娅1.12 阿尔格 关键字参数需要Julia1.12或更高版本。

以下功能可用于 本征 对象: 因维, 德特,和 isposdef.

eigen(A::Union{SymTridiagonal, Hermitian, Symmetric}, irange::UnitRange) -> Eigen

计算特征值分解 A,返回 本征因式分解对象 F 其中包含特征值在 F.价值观 和矩阵列中的正交特征向量 F.向量. (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

以下功能可用于 本征 对象: 因维, 德特,和 isposdef.

单位范围 伊兰奇 指定要搜索的已排序特征值的索引。

注意: 伊兰奇 不是 1:n,在哪里 n 是尺寸的 A,那么返回的因式分解将是_truncated_因式分解。

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

计算特征值分解 A,返回 本征因式分解对象 F 其中包含特征值在 F.价值观 和矩阵列中的正交特征向量 F.向量. (该 k可以从切片中获得th特征向量 F.向量[:,k].)

迭代分解生成组件 F.价值观F.向量.

以下功能可用于 本征 对象: 因维, 德特,和 isposdef. vl 是要搜索的特征值的窗口的下界,并且 vu 是上界。

注意如果[vl, vu]不包含所有特征值 A,那么返回的因式分解将是_truncated_因式分解。

eigen!(A; permute, scale, sortby)
eigen!(A, B; sortby)

同为 本征,但通过复盖输入来节省空间 A (和 B),而不是创建副本。

Hessenberg <: Factorization

A 赫森伯格 对象表示Hessenberg因子分解 QHQ' 方阵,或移位 Q(H+μi)Q' 它是由 赫森伯格功能。

hessenberg(A) -> Hessenberg

计算Hessenberg分解 A 并返回一个 赫森伯格 对象。 如果 F 是因式分解对象,酉矩阵可以用 F.Q (类别) 线性代数。海森伯格)和Hessenberg矩阵与 F.H (类别) xref:stdlib/LinearAlgebra.adoc#LinearAlgebra.UpperHessenberg[上海森伯格),其中任何一个都可以转换为具有 矩阵(F.H)矩阵(F.Q).

如果 A赫米蒂安或真实-对称,则赫森伯格分解产生实对称三棱柱矩阵和 F.H 是类型 SymTridiagonal缧.

请注意,移位的因式分解 A+μi=Q(H+μi)Q' 可以通过以下方式高效构建 F+μ*I 使用 制服,制服对象 ,这创造了一个新的 赫森伯格 具有共享存储和修改移位的对象。 给定的转变 F 是由 F.μ. 这很有用,因为多个移位求解 (F+μ*I)\b (对于不同 μ 和/或 b)可以高效地执行一次 F 被创建。

迭代分解会产生以下因子 F.Q,F.H,f.μ.

*例子*

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

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

julia> F.Q &ast; F.H &ast; 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; # destructuring via iteration

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

赫森伯格! 是一样的 赫森伯格,但通过复盖输入来节省空间 A,而不是创建副本。

Schur <: Factorization

矩阵因式分解矩阵的Schur因式分解类型 A. 这是返回类型 舒尔(_),对应的矩阵因式分解函数。

如果 F::舒尔 是因式分解对象,(准)三角舒尔因子可以通过任 F.舒尔F.T 和正交/酉Schur向量通过 F.向量F.Z 这样, A=f.vectors*F.Schur*F.vectors'. 的特征值 A 可以获得与 F.价值观.

迭代分解生成组件 F.T, F.Z,而 F.价值观.

*例子*

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
eigenvalues:
2-element Vector{Float64}:
  3.0
 -2.0

julia> F.vectors &ast; F.Schur &ast; F.vectors'
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia>t,z,vals=F;#通过迭代解构

julia>t==F.T&&z==F.Z&&vals==f.values
真的
GeneralizedSchur <: Factorization

两个矩阵的广义舒尔因式分解的矩阵因式分解类型 AB. 这是返回类型 舒尔(,),对应的矩阵因式分解函数。

如果 F::一般化 是因式分解对象,则(准)三角Schur因子可以通过 F.S.F.T,左酉/正交Schur向量通过 F.左F.Q,而右酉/正交Schur向量可以得到与 F.右F.Z 这样, A=f.左*F.S*f.右'B=f.左*F.T*f.右'. 的广义特征值 AB 可以获得与 F.α./F.β.

迭代分解生成组件 F.S., F.T, F.Q, F.Z, F.α,而 F.β.

schur(A) -> F::Schur

计算矩阵的Schur因子分解 A. (准)三角舒尔因子可以从 舒尔 对象 F 与任 F.舒尔F.T 和正交/酉Schur向量可以得到与 F.向量F.Z 这样, A=f.vectors*F.Schur*F.vectors'. 的特征值 A 可以获得与 F.价值观.

说真的 A,Schur因式分解是"准三角形",这意味着它是上三角形,除了对于任何共轭对复特征值的2×2对角线块;这允许因式分解是纯实的,即使存在复特征值。 要从真正的准三角形因式分解中获得(复数)纯上三角舒尔因式分解,您可以使用 舒尔{Complex}(schur(A)).

迭代分解生成组件 F.T, F.Z,而 F.价值观.

*例子*

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
eigenvalues:
2-element Vector{Float64}:
  3.0
 -2.0

julia> F.vectors &ast; F.Schur &ast; F.vectors'
2×2 Matrix{Float64}:
  5.0   7.0
 -2.0  -4.0

julia> t, z, vals = F; # destructuring via iteration

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

计算矩阵的广义Schur(或QZ)因子分解 AB. (准)三角舒尔因子可以从 舒尔 对象 FF.S.F.T,左酉/正交Schur向量可以得到与 F.左F.Q 和右酉/正交Schur向量可以得到与 F.右F.Z 这样, A=f.左*F.S*f.右'B=f.左*F.T*f.右'. 的广义特征值 AB 可以获得与 F.α./F.β.

迭代分解生成组件 F.S., F.T, F.Q, F.Z, F.α,而 F.β.

schur!(A) -> F::Schur

同为 舒尔但使用输入参数 A 作为工作区。

*例子*

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

julia>F=schur!(一)
舒尔{Float64, Matrix{Float64},向量{Float64}}
T因子:
2×2矩阵{Float64}:
 3.0   9.0
 0.0  -2.0
Z因子:
2×2矩阵{Float64}:
  0.961524  0.274721
 -0.274721  0.961524
特征值:
2元素向量{Float64}:
  3.0
 -2.0

朱莉娅>A
2×2矩阵{Float64}:
 3.0   9.0
 0.0  -2.0
schur!(A::StridedMatrix, B::StridedMatrix) -> F::GeneralizedSchur

同为 舒尔但使用输入矩阵 AB 作为工作区。

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

重新排序Schur因子分解 F 矩阵的 A=Z*T*Z' 根据逻辑数组 选择 返回重新排序的因式分解 F 对象。 选定的特征值出现在 F.舒尔 和相应的前导列 F.向量 形成相应右不变子空间的正交/酉基。 在真实情况下,特征值的复共轭对必须既包括在内,也必须通过 选择.

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

重新排序广义Schur因子分解 F 矩阵对 (A,B)=(Q*S*Z',Q*T*Z') 根据逻辑数组 选择 并返回一个GeneralizedSchur对象 F. 所选特征值出现在两者的前导对角线中 F.S.F.T,并且左和右正交/酉Schur向量也被重新排序使得 (A,B)=F.Q*(F.S,F.T)*F.Z' 仍然成立和广义特征值 AB 仍然可以获得与 F.α./F.β.

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

同为 奥德舒尔但复盖了因式分解 F.

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

同为 奥德舒尔 但复盖了因式分解 F.

SVD <: Factorization

矩阵的奇异值分解(SVD)的矩阵因式分解类型 A. 这是返回类型 svd(_),对应的矩阵因式分解函数。

如果 F::SVD 是因式分解对象, U, S, VVt;Vt 可通过 F.U, F.S., F.VF.Vt,这样 A=U*对角线(S)*Vt. 奇异值 S 按降序排序。

迭代分解生成组件 U, S,而 V.

*例子*

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

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

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

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

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

两个矩阵的广义奇异值分解(SVD)的矩阵因式分解类型 AB,这样 A=F.U*F.D1*F.R0*F.Q'B=F.V*F.D2*F.R0*F.Q'. 这是返回类型 svd(,),对应的矩阵因式分解函数。

对于一个M乘N矩阵 A 和P-by-N矩阵 B,

* U 是一个m-by-M正交矩阵, * V 是P-by-p正交矩阵, * Q 是n乘n正交矩阵, * D1 是前K个条目中有1s的m-by-(K+L)对角矩阵, * D2 是一个p-by-(K+L)矩阵,其右上l-by-l块是对角线, * R0 是一个(K+L)-by-N矩阵,其最右边的(K+L)-by-(K+L)块是非星形上块三角形, K+L 是矩阵的有效数值秩 [A;B].

迭代分解生成组件 U, V, Q, D1, D2,而 R0.

的条目 F.D1F.D2 是相关的,如LAPACK文档中所述https://www.netlib.org/lapack/lug/node36.html[广义SVD]和https://www.netlib.org/lapack/explore-html/d6/db3/dggsvd3_8f.html[xGGSVD3]下面调用的例程(在LAPACK3.6.0和更新版本中)。

*例子*

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

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

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

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

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

计算奇异值分解(SVD) A 并返回一个 SVD 对象。 U, S, VVt;Vt 可以从因式分解中获得 FF.U, F.S., F.VF.Vt,这样 A=U*对角线(S)*Vt. 该算法产生 Vt;Vt 因此 Vt;Vt 提取效率比提取效率高 V. 奇异值 S 按降序排序。

迭代分解生成组件 U, S,而 V.

如果 全=错误 (默认),返回"瘦"SVD。 对于一个 矩阵 A,在全因式分解 U V ,而在薄因式分解 U V ,在哪里 是奇异值的数目。

阿尔格 指定用于SVD的算法和LAPACK方法:

* alg=LinearAlgebra。DivideAndConquer() (默认):调用 拉帕克。gesdd!. * alg=LinearAlgebra。QRIteration():电话 拉帕克。gesvd! (通常较慢但更准确)。

兼容性

朱莉娅1.3 阿尔格 关键字参数需要Julia1.3或更高版本。

*例子*

julia> A = rand(4,3);

julia> F = svd(A); # Store the Factorization Object

julia> A ≈ F.U &ast; Diagonal(F.S) &ast; F.Vt
true

julia> U, S, V = F; # destructuring via iteration

julia> A ≈ U &ast; Diagonal(S) &ast; V'
true

julia>Uonly,=svd(A);#Store u only

朱莉娅>Uonly==U
真的
svd(A, B) -> GeneralizedSVD

计算广义SVD AB,返回 [医]总 因式分解对象 F 这样, [A;B]=[F.U*F.D1;F.V*F.D2]*F.R0*F.Q'

* U 是m-by-M正交矩阵, * V 是P-by-p正交矩阵, * Q 是n乘n正交矩阵, * D1 是前K个条目中有1s的m-by-(K+L)对角矩阵, * D2 是一个p-by-(K+L)矩阵,其右上l-by-l块是对角线, * R0 是一个(K+L)-by-N矩阵,其最右边的(K+L)-by-(K+L)块是非星形上块三角形, K+L 是矩阵的有效数值秩 [A;B].

迭代分解生成组件 U, V, Q, D1, D2,而 R0.

广义SVD用于应用程序,例如当人们想要比较多少属于 A vs.多少属于 B,如在人类vs酵母基因组,或信号vs噪声,或簇之间vs簇内。 (参见Edelman和Wang讨论:https://arxiv.org/abs/1901.00485)

它分解 [A;B] 进入 [UC;VS]H,在哪里 [UC;VS] 是列空间的自然正交基 [A;B],而 H=RQ' 是行空间的自然非正交基 [A;B],其中顶行最接近归因于 A 矩阵,以及底部到 B 矩阵。 多余弦/正弦矩阵 CS 提供多少的多度量 A vs多少 B,而 UV 提供测量这些的方向。

*例子*

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

julia> F = svd(A, B);

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

julia> H = R&ast;Q';

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

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

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

朱莉娅>U==Uonly
真的
svd!(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVD

svd! 是一样的 svd,但通过复盖输入来节省空间 A,而不是创建副本。 请参阅 svd详情。

svd!(A, B) -> GeneralizedSVD

svd! 是一样的 svd,但修改参数 AB 就地,而不是复制。 请参阅 svd详情。

svdvals(A)

返回奇异值 A 按降序排列。

*例子*

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

朱莉娅>svdvals(一)
4元素向量{Float64}:
 3.0
 2.23606797749979
 2.0
 0.0
svdvals(A, B)

从广义奇异值分解返回广义奇异值 AB. 请参阅 svd.

*例子*

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

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

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

返回奇异值 A,通过复盖输入来节省空间。 请参阅 svdvalssvd.

svdvals!(A, B)

从广义奇异值分解返回广义奇异值 AB,通过复盖节省空间 AB. 请参阅 svdsvdvals.

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

Givens旋转线性算子。 田野 cs 分别表示旋转角度的余弦和正弦。 该 吉文斯 类型支持左乘法 G*A 和共轭转置右乘法 A*G'. 类型没有一个 大小 并且因此可以与任意大小的矩阵相乘,只要 i2<=大小(A,2)G*Ai2<=大小(A,1)A*G'.

请参阅 吉文斯.

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

计算Givens旋转 G 和标量 r 使得对于任何向量 x 哪里

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

乘法的结果

y = G&ast;x

拥有

y[i1] = r
y[i2] = 0
givens(A::AbstractArray, i1::Integer, i2::Integer, j::Integer) -> (G::Givens, r)

计算Givens旋转 G 和标量 r 这样乘法的结果

B = G&ast;A

拥有

B[i1,j] = r
B[i2,j] = 0
givens(x::AbstractVector, i1::Integer, i2::Integer) -> (G::Givens, r)

计算Givens旋转 G 和标量 r 这样乘法的结果

B = G&ast;x

拥有

B[i1] = r
B[i2] = 0
triu(M, k::Integer = 0)

返回的上部三角形 Mkth superdiagonal。

*例子*

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
triu!(M)

矩阵的上三角形,复盖 M 的过程中。 请参阅 特里乌.

triu!(M, k::Integer)

返回的上部三角形 Mkth superdiagonal,复盖 M 的过程中。

*例子*

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

julia> triu!(M, 1)
5×5 Matrix{Int64}:
 0  2  3  4  5
 0  0  3  4  5
 0  0  0  4  5
 0  0  0  0  5
 0  0  0  0  0
tril(M, k::Integer = 0)

返回的下三角形 Mkth superdiagonal。

*例子*

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
tril!(M)

矩阵的下三角形,复盖 M 的过程中。 请参阅 特里尔.

tril!(M, k::Integer)

返回的下三角形 Mkth superdiagonal,复盖 M 的过程中。

*例子*

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

朱莉娅>特里尔!(M,2)
5×5矩阵{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
diagind(M::AbstractMatrix, k::Integer = 0, indstyle::IndexStyle = IndexLinear())
diagind(M::AbstractMatrix, indstyle::IndexStyle = IndexLinear())

一个 抽象范围 给出 k矩阵的th对角线 M. 或者,可以指定一个索引样式来确定返回的范围的类型。 如果 indstyle isa IndexLinear (默认),这返回一个 抽象范围{Integer}. 另一方面,如果 indstyle是IndexCartesian,这返回一个 抽象范围{CartesianIndex{2}}.

如果 k 未提供,假定为 0 (对应于主对角线)。

*例子*

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)
兼容性

Julia1.11指定一个 索引样式 至少需要Julia1.11。

diag(M, k::Integer=0)

k矩阵的第对角线,作为向量。

*例子*

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
diagm(kv::Pair{<:Integer,<:AbstractVector}...)
diagm(m::Integer, n::Integer, kv::Pair{<:Integer,<:AbstractVector}...)

从构造矩阵 对角线和矢量的s。 向量资料 千伏。第二 将被放置在 千伏。第一个 对角线。 默认情况下,矩阵是正方形,其大小是从 千伏,千伏,但非正方形大小 m×n (根据需要用零填充)可以通过传递指定 m,n 作为第一个论点。 对于重复的对角线索引 千伏。第一个 相应向量中的值 千伏。第二 将被添加。

图表,图表 构造一个完整的矩阵;如果您想要具有快速算术的存储效率版本,请参阅 对角线, [医双角] 三棱角,三棱角SymTridiagonal缧.

*例子*

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

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

julia> diagm(1 => [1,2,3], 1 => [1,2,3])
4×4 Matrix{Int64}:
 0  2  0  0
 0  0  4  0
 0  0  0  6
 0  0  0  0
diagm(v::AbstractVector)
diagm(m::Integer, n::Integer, v::AbstractVector)

构造以向量的元素作为对角元素的矩阵。 默认情况下,矩阵为正方形,其大小由 长度(v),但非正方形大小 m×n 可以通过传递指定 m,n 作为第一个论点。 如有必要,对角线将为零填充。

*例子*

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

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

返回QR因子分解的秩

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

计算 S 通过计算其QR因子分解。 小于的值 托尔 被视为零。 请参阅SPQR的手册。

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

通过计算矩阵的输出数来计算矩阵的数值秩。 svdvals(一) 大于 max(atol,rtol*σί) 哪里 σ₁A最大的计算奇异值。 atol公司rtol 分别是绝对和相对公差。 默认的相对容差为 n*ϵ,在哪里 n 是最小尺寸的尺寸 A,而 ϵ每股收益的元素类型 A.

注意数值秩可以是具有接近阈值容差的奇异值的病态矩阵的敏感和不精确的表征 max(atol,rtol*σί). 在这种情况下,对奇异值计算或矩阵的轻微扰动可以改变 职级 通过将一个或多个奇异值推过阈值。 这些变化甚至可能由于不同Julia版本,体系结构,编译器或操作系统之间的浮点错误的变化而发生。

兼容性

朱莉娅1.1 atol公司rtol 关键字参数至少需要Julia1.1。 在朱莉娅1.0 rtol 作为位置参数可用,但这将在Julia2.0中被弃用。

*例子*

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

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

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

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

julia> rank(diagm(0 => [1, 0.001, 2]), atol=1.5)
1
rank(S::SVD{<:Any, T}; atol::Real=0, rtol::Real=min(n,m)&ast;ϵ) where {T}

计算SVD对象的数值秩 S 通过计算有多少奇异值大于 max(atol,rtol*σί) 哪里 σ₁ 是最大的计算奇异值。 这相当于默认值 等级(::AbstractMatrix)方法,除了它重新使用现有的SVD因子分解。 atol公司rtol 分别是绝对和相对公差。 默认的相对容差为 n*ϵ,在哪里 n 是UΣV’的最小维数的大小和 ϵ每股收益的元素类型 S.

兼容性

朱莉娅1.12 等级(::SVD) 方法至少需要Julia1.12。

rank(A::QRPivoted{<:Any, T}; atol::Real=0, rtol::Real=min(n,m)&ast;ϵ) where {T}

计算QR因子分解的数值秩 A 通过计算有多少对角线条目 A.因素 大于 最大值(atol,rtol*Δ) 哪里 Δ₁ 是最大的计算这样的条目。 这类似于 等级(::AbstractMatrix)方法,因为它计算矩阵因子分解的(数字)非零系数的数量,尽管默认方法使用SVD而不是QR因子分解。 像 等级(::SVD),该方法还重新使用了现有的矩阵因式分解。

使用QR因子分解来计算秩通常应该产生与使用SVD相同的结果,尽管在矩阵条件不佳的病理情况下,它可能更容易高估秩。 另外值得注意的是,计算QR因子分解通常比计算SVD更快,因此当关注性能时,这种方法可能是首选。 atol公司rtol 分别是绝对和相对公差。 默认的相对容差为 n*ϵ,在哪里 n 是最小尺寸的尺寸 Aϵ每股收益的元素类型 A.

兼容性

朱莉娅1.12 排名(::QRPivoted) 方法至少需要Julia1.12。

norm(A, p::Real=2)

对于任何可迭代容器 A (包括任何维度的数组)的数字(或其任何元素类型 规范 被定义),计算 p-norm(默认为 p=2)好像 A 是相应长度的矢量。

p-规范定义为

的条目 , $

a_i

$的 规范 ,而 的长度 . 自 p-范数是使用 规范s的条目 A,的 p-向量向量的范数与将其解释为块向量的一般解释不兼容,如果 p!= 2.

p 可以假设任何数值(即使不是所有值都产生数学上有效的向量范数)。 特别是, 规范(A,Inf) 返回最大值 腹肌。(一),而 规范(A,-Inf) 返回最小的。 如果 A 是矩阵和 p=2,那么这相当于Frobenius规范。

第二个论点 p 不一定是接口的一部分 规范,即自定义类型可能只实现 规范(A) 没有第二个论点。

使用方法 奥普诺姆计算矩阵的算子范数。

*例子*

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

朱莉娅>规范(1:9)
16.881943016134134

julia>norm(hcat(v,v),1)==norm(vcat(v,v),1)!=范数([v,v],1)
真的

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

julia>norm(hcat(v,v),Inf)==norm(vcat(v,v),Inf)!=范数([v,v],Inf)
真的
norm(x::Number, p::Real=2)

对于数字,返回$\left(

x

p\右){1/p}$.

*例子*

julia> norm(2, 1)
2.0

julia> norm(-2, 1)
2.0

julia> norm(2, 2)
2.0

julia> norm(-2, 2)
2.0

julia> norm(2, Inf)
2.0

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

计算由向量引起的算子范数(或矩阵范数) p-范数,其中有效值为 p1, 2,或 资讯. (注意,对于稀疏矩阵, p=2 目前尚未实施。)使用 规范计算Frobenius范数。

何时 p=1,运算符范数是最大绝对列和 A:

的条目 ,而 它的尺寸。

何时 p=2,算子范数为谱范数,等于最大奇异值为 A.

何时 p=Inf,运算符范数是最大绝对行和 A:

*例子*

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
opnorm(x::Number, p::Real=2)

对于数字,返回$\left(

x

p\右){1/p}$. 这相当于 规范.

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

对于Adjoint/Transpose-wrapped向量,返回运算符 -规范 A,相当于 p-规范与价值 p=q/(q-1). 它们在 p=q=2. 使用方法 规范计算 p 规范的 A 作为载体。

向量空间与其对偶之间的范数差异是为了保持对偶和点积之间的关系,结果与算子一致 p-a的规范 1×n 矩阵。

*例子*

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

规范化数组 a 到位,使其 p-规范等于统一,即 范数(a,p)==1. 请参阅 正常化规范.

normalize(a, p::Real=2)

正常化 a 使其 p-规范等于统一,即 范数(a,p)==1. 对于标量,这与sign(a)类似,除了normalize(0)=NaN。 请参阅 正常化!, 规范,和 签署.

*例子*

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

朱莉娅>正常化(3,1)
1.0

朱莉娅>正常化(-8,1)
-1.0

朱莉娅>正常化(0,1)
南
cond(M, p::Real=2)

矩阵的条件编号 M,使用运算符计算 p-诺姆。 有效值 p1, 2 (默认),或 资讯.

condskeel(M, [x, p::Real=Inf])

Skeel条件编号 矩阵的 M,可选地相对于载体 x,使用运算符计算 p-诺姆。 表示(条目明智)的绝对值的矩阵 ; . 有效值 p1, 2资讯 (默认)。

该量在文献中也被称为相对条件数、相对条件数或组分相对条件数。

tr(M)

矩阵跟踪。 求和的对角线元素 M.

*例子*

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

julia> tr(A)
5
det(M)

矩阵行列式。

请参阅: logdet,logdetn.logabsdet.

*例子*

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

julia> det(M)
2.0

请注意,一般来说, 德特 计算行列式的浮点近似,即使是整数矩阵,通常通过高斯消除。 Julia包含整数行列式的确切算法(Bareiss算法),但默认情况下仅将其用于 比金特 矩阵(因为行列式快速溢出任何固定整数精度):

julia> det(BigInt[1 0; 2 2]) # exact integer determinant
2
logdet(M)

矩阵行列式的对数。 相当于 日志(det(M)),但可提供增加的精度并避免上溢/下溢。

*例子*

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

julia> logdet(M)
0.6931471805599453

julia> logdet(Matrix(I, 3, 3))
0.0
logabsdet(M)

矩阵行列式绝对值的Log。 相当于 (log(abs(det(M))),sign(det(M))),但可提供增加的精度和/或速度。

*例子*

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

julia> det(A)
-1.0

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

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

julia> det(B)
2.0

julia> logabsdet(B)
(0.6931471805599453, 1.0)
inv(M)

矩阵求逆。 计算矩阵 N 这样, M*N=I,在哪里 是单位矩阵。 通过求解左除法计算 N=M\I.

A SingularException被抛出,如果 M 数值反演失败。

*例子*

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&ast;N==N&ast;M==矩阵(I,2,2)
真的
pinv(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n&ast;ϵ)
pinv(M, rtol::Real) = pinv(M; rtol=rtol) # to be deprecated in Julia 2.0

计算摩尔-彭罗斯伪宇宙。

对于矩阵 M 对于浮点元素,通过仅反转大于的奇异值来计算伪逆是很方便的 max(atol,rtol*σί) 哪里 σ₁ 是最大的奇异值 M.

绝对的最佳选择(atol公司)和相对公差(rtol)随 M 和伪逆的预期应用。 默认的相对容差为 n*ϵ,在哪里 n 是最小尺寸的尺寸 M,而 ϵ每股收益的元素类型 M.

用于在最小二乘意义上反转密集条件矩阵, rtol=sqrt(eps(real(float(oneunit(eltype(M))))))) 被推荐。

有关更多信息,请参阅脚注:issue8859[Issue8859,"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],脚注:S84[G.W.Stewart,"Rank Degeneracy",SIAM Journal on Scientific and Statistical Computing, 5(2), 1984, 403-413. doi:10.1137/0905030],脚注:KY88[Konstantinos Konstantinides和Kung Yao,"matrix rank determination中有效奇异值的统计分析",IEEE Transactions on Acoustics,Speech and Signal Processing, 36(5), 1988, 757-763. doi:10.1109/29.1585]。

*例子*

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 &ast; N
2×2 Matrix{Float64}:
 1.0          -2.22045e-16
 4.44089e-16   1.0
nullspace(M; atol::Real=0, rtol::Real=atol>0 ? 0 : n&ast;ϵ)
nullspace(M, rtol::Real) = nullspace(M; rtol=rtol) # to be deprecated in Julia 2.0

计算为空空间的基础 M 通过包括的奇异向量 M 其奇异值的大小小于 max(atol,rtol*σί),在哪里 σ₁M的最大奇异值。

默认情况下,相对容差 rtoln*ϵ,在哪里 n 是最小尺寸的尺寸 M,而 ϵ每股收益的元素类型 M.

*例子*

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
kron(A, B)

计算两个向量,矩阵或数字的Kronecker乘积。

对于真实向量 vw,Kronecker产品与外部产品相关 kron(v,w)==vec(w*转置(v))w*transpose(v)==reshape(kron(v,w),(length(w),length(v))). 注意如何订购 vw 这些表达式的左侧和右侧不同(由于列主存储)。 对于复数向量,外积 w*v' 也不同于 v.

*例子*

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

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

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

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

julia> w&ast;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
kron!(C, A, B)

计算Kronecker产品 AB 并将结果存储在 C,复盖现有的 C. 这是就地版本的 克伦.

兼容性

Julia1.6此功能需要Julia1.6或更高版本。

exp(A::AbstractMatrix)

计算矩阵指数 A,定义为

对于对称或隐密 A,一个eigendecomposition(本征)被使用,否则缩放和平方算法(参见脚注:H05[Nicholas 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])被选择。

*例子*

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
cis(A::AbstractMatrix)

更有效的方法 exp(im*A) 方阵的 A (特别是如果 A赫米香 还是真的-对称).

请参阅 西斯皮, 辛科斯, exp.

兼容性

Julia1.7支持使用 独联体 在Julia1.7中添加了矩阵。

*例子*

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

矩阵功率,相当于

*例子*

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

矩阵指数,相当于 .

兼容性

Julia1.1支持抚养 非理性 数字(如 在Julia1.1中添加了一个矩阵。

*例子*

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

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

如果 A 没有负实特征值,计算主矩阵对数 A,即唯一矩阵 这样, 对于所有的特征值 . 如果 A 具有非正态分布的特征值,只要可能,就返回一个非正态分布的矩阵函数.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)被使用,如果 A 是采用逆缩放和平方法的改进版本(参见脚注:AH12[Awad H.Al-Mohy和Nicholas J.Higham,"Improved inverse scaling and squaring algorithms for the matrix logarithm",SIAM Journal on Scientific Computing,34(4),2012,C153-C169. doi:10.1137/110852553]和脚注:AHR13[Awad H.Al-Mohy,Nicholas J.Higham和Samuel D.Relton,"计算矩阵对数的Fréchet导数并估计条件数",SIAM Journal On Scientific Computing,35(4),2013,C394-C410。 doi:10.1137/120885991])。 A 是实的,没有负特征值,则计算实数形式。 否则,计算复数Schur形式。 然后在上(准)三角因子上使用脚注:AHR13[]中的上(准)三角算法。

*例子*

julia> A = Matrix(2.7182818&ast;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
sqrt(x)

回来吧 .

扔一个 N.域名,域名为负 真实的争论。 使用方法 综合体否定的参数,而不是获得一个 综合体结果。

前缀运算符 相当于 sqrt,sqrt.

分支切割 sqrt,sqrt 具有沿负实轴切割的分支; -0.0im 被取为在轴的下方。

请参阅: [医hypot].

*例子*

julia> sqrt(big(81))
9.0

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

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

julia> sqrt(-81 - 0.0im)  # -0.0im is below the branch cut
0.0 - 9.0im

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

如果 A 没有负实特征值,计算主矩阵平方根 A,即唯一矩阵 具有正实部的特征值使得 . 否则,将返回一个非索引平方根。

如果 A 是实对称或Hermitian,它的eigendecomposition(本征)用于计算平方根。 对于这样的矩阵,由于舍入误差而看起来稍微为负的特征值λ被视为零。 更确切地说,具有所有特征值的矩阵 ≥-rtol*(最大/λ|) 被视为半辉石(产生Hermitian平方根),负特征值为零。 rtol 是关键字参数 sqrt,sqrt (仅在Hermitian/real-symmetric情况下),默认为按以下比例缩放的机器精度 尺寸(A,1).

否则,通过Björck-Hammarling方法脚注确定平方根:BH83[Åke Björck和Sven Hammarling,"a Schur method for the square root of a matrix",Linear Algebra and its Applications,52-53,1983,127-140。 doi:10.1016/0024-3795(83)80010-X],其计算复数形式(舒尔)然后是三角因子的复平方根。 如果存在实平方根,那么该方法的扩展脚注:H87[Nicholas J.Higham,"Computing real square roots of a real matrix",Linear Algebra and its Applications,88-89,1987,405-430. doi:10.1016/0024-3795(87)90118-2] 即计算真实的Schur形式,然后使用准三角形因子的真实平方根。

*例子*

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
cbrt(A::AbstractMatrix{<:Real})

计算实值矩阵的实值立方根 A. 如果 T=cbrt(A),那么我们有 T*T*T≈A,见下面给出的例子。

如果 A 对称,即类型 隐士,隐士{<:Real},则(本征)用于查找多维数据集根。 否则,专门版本的第p根算法脚注:S03[Matthew I.Smith,"A Schur Algorithm For Computing Matrix pth Roots",SIAM Journal on Matrix Analysis and Applications,vol. 24,2003,第971-989页。 doi:10.1137/S0895479801392697]被利用,其利用实值Schur分解(舒尔)来计算多维数据集根。

*例子*

julia> A = [0.927524 -0.15857; -1.3677 -1.01172]
2×2 Matrix{Float64}:
  0.927524  -0.15857
 -1.3677    -1.01172

julia> T = cbrt(A)
2×2 Matrix{Float64}:
  0.910077  -0.151019
 -1.30257   -0.936818

julia> T&ast;T&ast;T ≈ A
true
cos(A::AbstractMatrix)

计算方阵的矩阵余弦 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算余弦。 否则,余弦通过调用确定 exp.

*例子*

julia> cos(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
sin(A::AbstractMatrix)

计算方阵的矩阵正弦 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算正弦。 否则,正弦通过调用确定 exp.

*例子*

julia> sin(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649
sincos(A::AbstractMatrix)

计算方阵的矩阵正弦和余弦 A.

*例子*

julia> S, C = sincos(fill(1.0, (2,2)));

julia> S
2×2 Matrix{Float64}:
 0.454649  0.454649
 0.454649  0.454649

朱莉娅>C
2×2矩阵{Float64}:
  0.291927  -0.708073
 -0.708073   0.291927
tan(A::AbstractMatrix)

计算方阵的矩阵正切 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算切线。 否则,切线通过调用确定 exp.

*例子*

julia> tan(fill(1.0, (2,2)))
2×2 Matrix{Float64}:
 -1.09252  -1.09252
 -1.09252  -1.09252
sec(A::AbstractMatrix)

计算方阵的矩阵割线 A.

csc(A::AbstractMatrix)

计算方阵的矩阵余弦 A.

cot(A::AbstractMatrix)

计算方阵的矩阵余切 A.

cosh(A::AbstractMatrix)

计算方阵的矩阵双曲余弦 A.

sinh(A::AbstractMatrix)

计算方阵的矩阵双曲正弦 A.

tanh(A::AbstractMatrix)

计算方阵的矩阵双曲正切 A.

sech(A::AbstractMatrix)

计算方阵的矩阵双曲线割线 A.

csch(A::AbstractMatrix)

计算方阵的矩阵双曲余弦 A.

coth(A::AbstractMatrix)

计算方阵的矩阵双曲余切 A.

acos(A::AbstractMatrix)

计算方阵的逆矩阵余弦 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算反余弦。 否则,反余弦通过使用确定 日志sqrt,sqrt. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_1[Mary Aprahamian和Nicholas J.Higham,"矩阵逆三角函数和逆双曲函数:理论和算法",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

*例子*

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
asin(A::AbstractMatrix)

计算方阵的逆矩阵正弦 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算逆正弦。 否则,反正弦通过使用确定 日志sqrt,sqrt. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_2[Mary Aprahamian和Nicholas J.Higham,"矩阵逆三角函数和逆双曲函数:理论和算法",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

*例子*

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
atan(A::AbstractMatrix)

计算方阵的逆矩阵正切 A.

如果 A 是对称的或隐密的,它的eigendecomposition(本征)用于计算反切。 否则,反切通过使用确定 日志. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_3[Mary Aprahamian和Nicholas J.Higham,"矩阵逆三角函数和逆双曲函数:理论和算法",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

*例子*

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

计算逆矩阵割线 A.

acsc(A::AbstractMatrix)

计算逆矩阵余弦 A.

acot(A::AbstractMatrix)

计算逆矩阵余切 A.

acosh(A::AbstractMatrix)

计算方阵的逆双曲矩阵余弦 A. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_4[Mary Aprahamian和Nicholas J.Higham,"Matrix Inverse Trigonometric and Inverse Hyperbolic Functions:Theory and Algorithms",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

asinh(A::AbstractMatrix)

计算方阵的逆双曲矩阵正弦 A. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_5[Mary Aprahamian和Nicholas J.Higham,"矩阵逆三角函数和逆双曲函数:理论和算法",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

atanh(A::AbstractMatrix)

计算方阵的逆双曲矩阵正切 A. 对于用于计算该函数的理论和对数公式,参见脚注:AH16_6[Mary Aprahamian和Nicholas J.Higham,"矩阵逆三角函数和逆双曲函数:理论和算法",MIMS EPrint:2016.4。 https://doi.org/10.1137/16M1057577]。

asech(A::AbstractMatrix)

计算逆矩阵双曲线割线 A.

acsch(A::AbstractMatrix)

计算逆矩阵双曲余弦 A.

acoth(A::AbstractMatrix)

计算逆矩阵双曲余切 A.

lyap(A, C)

计算解决方案 X 到连续Lyapunov方程 AX+XA'+C=0,其中没有特征值的 A 具有零实部并且没有两个特征值是彼此的负复共轭。

*例子*

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&ast;X + X&ast;A' ≈ -B
true
sylvester(A, B, C)

计算解决方案 X 到西尔维斯特方程 AX+XB+C=0,在哪里 A, BC 具有兼容的尺寸和 A-B 没有实部相等的特征值。

*例子*

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

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

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

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

julia> A&ast;X + X&ast;B ≈ -C
true
issuccess(F::Factorization)

测试矩阵的因式分解是否成功。

兼容性

朱莉娅1.6 issuccess(::CholeskyPivoted) 需要Julia1.6或更高版本。

*例子*

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

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

测试矩阵的LU因子分解成功。 默认情况下,生成有效但秩缺陷U因子的因式分解被视为失败。 这可以通过传递来改变 allowsingular=true.

兼容性

朱莉娅1.11 allowsingular碌录潞陆 在Julia1.11中添加了关键字参数。

*例子*

julia> F = lu([1 2; 1 2], check = false);

julia> issuccess(F)
false

julia> issuccess(F, allowsingular = true)
true
issymmetric(A) -> Bool

测试矩阵是否对称。

*例子*

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

julia> issymmetric(a)
true

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

julia> issymmetric(b)
false
isposdef(A) -> Bool

通过尝试执行Cholesky因子分解来测试矩阵是否为正定(和Hermitian A.

*例子*

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

julia> isposdef(A)
true
isposdef!(A) -> Bool

通过尝试执行Cholesky因子分解来测试矩阵是否为正定(和Hermitian A,复盖 A 的过程中。 请参阅 isposdef.

*例子*

julia> A = [1. 2.; 2. 50.];

julia> isposdef!(A)
true

julia> A
2×2 Matrix{Float64}:
 1.0  2.0
 2.0  6.78233
istril(A::AbstractMatrix, k::Integer = 0) -> Bool

测试是否 A 是从 kth superdiagonal。

*例子*

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
istriu(A::AbstractMatrix, k::Integer = 0) -> Bool

测试是否 A 上三角形从 kth superdiagonal。

*例子*

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

julia> istriu(a)
false

朱莉娅>istriu(a,-1)
真的

朱莉娅>c= [1 1 1; 1 1 1; 0 1 1]
3×3矩阵{Int64}:
 1  1  1
 1  1  1
 0  1  1

朱莉娅>istriu(c)
错误

朱莉娅>istriu(c,-1)
真的
isdiag(A) -> Bool

测试一个矩阵是否是对角的 iszero(A[i,j]) 是真的,除非 i==j. 请注意,这是没有必要的 A 如果你也想检查一下,你需要检查一下 大小(A,1)==大小(A,2).

*例子*

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

julia> isdiag(a)
false

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

julia> isdiag(b)
true

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

julia> isdiag(c)
true

朱莉娅>d= [1 0 0; 0 2 3]
2×3矩阵{Int64}:
 1  0  0
 0  2  3

朱莉娅>伊斯迪亚格(d)
错误
ishermitian(A) -> Bool

测试矩阵是否为Hermitian。

*例子*

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

懒转置。 改变返回的对象应该适当地改变 A. 通常,但并非总是如此 转置(A),在哪里 转置,转置 是一个懒惰的转置包装器。 请注意,此操作是递归的。

此操作用于线性代数的使用-对于一般的数据操作,请参阅 排列,排列,这是非递归的。

*例子*

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 # the transpose of a transpose unwraps the parent
true

julia> Transpose(B) # however, the constructor always wraps its argument
2×2 transpose(transpose(::Matrix{Int64})) with eltype Int64:
 3  2
 0  0

julia> B[1,2] = 4; # modifying B will modify A automatically

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

对于复杂矩阵, 伴随,伴随 操作相当于共轭转置。

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

转置,转置 一个 [医]文摘 是行向量:

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

julia> transpose(v) # returns a row-vector
1×3 transpose(::Vector{Int64}) with eltype Int64:
 1  2  3

julia>transpose(v)&ast;v#计算点积
14

对于矩阵矩阵,单个块递归地操作:

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

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

julia> transpose(D) # blocks are recursively transposed
2×2 transpose(::Matrix{Matrix{Int64}}) with eltype Transpose{Int64, Matrix{Int64}}:
 [1 2; 3 4]   [2 4; 6 8]
 [3 6; 9 12]  [4 8; 12 16]
transpose(F::Factorization)

因式分解的懒惰转置 F. 默认情况下,返回 转座因子化,除 因式分解s与真实 eltype,eltype,在这种情况下返回一个 辅助因子化.

transpose!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

转置矩阵 A 并将其存储在矩阵中 X. 尺寸(X) 必须等于 尺寸(转置(A)). 除了调整rowval和nzval的大小之外,不会分配其他内存 X,如果需要的话。

半精子!

transpose!(dest,src)

转置数组 src公司 并将结果存储在预分配的数组中 德斯特,其应具有对应于 (大小(src,2),大小(src,1)). 不支持就地换位,如果出现以下情况,则会发生意外结果 src公司德斯特 具有重叠的存储器区域。

*例子*

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
Transpose

底层线性代数对象的转置视图的惰性包装器类型,通常是 [医]文摘/[医]抽象矩阵. 通常, 转置,转置 构造函数不应该直接调用,使用 转置,转置代替。 实现视图使用 副本.

这种类型用于线性代数的使用-对于一般的数据操作,请参阅 排列,排列.

*例子*

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
TransposeFactorization

底层转置的惰性包装器类型 因式分解 对象。 通常, 转座因子化 构造函数不应该直接调用,使用 转置(::因式分解)代替。

A'
adjoint(A)

Lazy adjoint(共轭转置)。 请注意 [医]附 递归地应用于元素。

对于数字类型, [医]附 返回复共轭,因此它相当于实数的恒等函数。

此操作用于线性代数的使用-对于一般的数据操作,请参阅 排列,排列.

*例子*

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

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

julia> B isa Adjoint
true

julia> adjoint(B) === A # the adjoint of an adjoint unwraps the parent
true

julia> Adjoint(B) # however, the constructor always wraps its argument
2×2 adjoint(adjoint(::Matrix{Complex{Int64}})) with eltype Complex{Int64}:
 3+2im  9+2im
 0+0im  0+0im

julia>B[1,2]=4+5im;#修改B会自动修改A

朱莉娅>A
2×2矩阵{Complex{Int64}}:
 3+2im9+2im
 4-5im0+0im

对于实矩阵, [医]附 操作相当于一个 转置,转置.

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

一个的伴随 [医]文摘 是行向量:

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 # compute the dot product, equivalently x' &ast; x
25 + 0im

对于矩阵矩阵,单个块递归地操作:

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

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

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

因式分解的懒惰伴随 F. 默认情况下,返回 辅助因子化包装。

adjoint!(X::AbstractSparseMatrixCSC{Tv,Ti}, A::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti}

转置矩阵 A 并存储矩阵中元素的邻接 X. 尺寸(X) 必须等于 尺寸(转置(A)). 除了调整rowval和nzval的大小之外,不会分配其他内存 X,如果需要的话。

半精子!

adjoint!(dest,src)

共轭转置阵列 src公司 并将结果存储在预分配的数组中 德斯特,其应具有对应于 (大小(src,2),大小(src,1)). 不支持就地换位,如果 src公司德斯特 具有重叠的存储器区域。

*例子*

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
Adjoint

底层线性代数对象的附属视图的惰性包装器类型,通常是 [医]文摘/[医]抽象矩阵. 通常, [医]附 构造函数不应该直接调用,使用 伴随,伴随代替。 实现视图使用 副本.

此类型用于线性代数的使用-对于一般的数据操作,请参阅 排列,排列.

*例子*

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

julia> Adjoint(A)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 3-2im  0+0im
 9-2im  0+0im
AdjointFactorization

底层的辅助的惰性包装器类型 因式分解 对象。 通常, 辅助因子化 构造函数不应该直接调用,使用 adjoint(::因式分解)代替。

copy(A::Transpose)
copy(A::Adjoint)

急切地评估懒惰矩阵转置/伴随。 请注意,转置以递归方式应用于元素。

此操作用于线性代数的使用-对于一般的数据操作,请参阅 排列,排列,这是非递归的。

*例子*

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
stride1(A) -> Int

以元素大小为单位返回维度1中连续数组元素之间的距离。

*例子*

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

julia> LinearAlgebra.stride1(A)
1

julia> B = view(A, 2:2:4)
2-element view(::Vector{Int64}, 2:2:4) with eltype Int64:
 2
 4

julia> LinearAlgebra.stride1(B)
2
LinearAlgebra.checksquare(A)

检查矩阵是否为正方形,然后返回其公共维度。 对于多个参数,返回一个向量。

*例子*

julia> A = fill(1, (4,4)); B = fill(1, (5,5));

julia> LinearAlgebra.checksquare(A, B)
2-element Vector{Int64}:
 4
 5
LinearAlgebra.peakflops(n::Integer=4096; eltype::DataType=Float64, ntrials::Integer=3, parallel::Bool=false)

[医]峰顶 使用双精度计算计算机的峰值翻牌率 杰姆!. 默认情况下,如果没有指定参数,它将乘以两个 漂浮64 大小矩阵 n x n,在哪里 n=4096. 如果底层BLAS使用多个线程,则实现更高的翻牌率。 BLAS线程的数量可以设置为 布拉斯。set_num_threads(n).

如果关键字参数 eltype,eltype 被提供, [医]尖顶 将构造具有类型元素的矩阵 eltype,eltype 用于计算峰值翻牌率。

默认情况下, [医]尖顶 将使用3次试验的最佳时机。 如果 n.非典型肺炎 提供关键字参数, [医]峰顶 将使用这些许多试验来选择最佳时机。

如果关键字参数 平行的 被设置为 真的, [医]峰顶 在所有工作处理器上并行运行。 返回整个并行计算机的翻牌率。 并行运行时,只使用10个线程。 论点 n 仍然是指在每个处理器上解决的问题的大小。

兼容性

Julia1.1此功能至少需要Julia1.1。 在Julia1.0中,它可以从标准库中获得 交互式活动.

hermitianpart(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

返回方阵的Hermitian部分 A,定义为 (A+A')/2,作为一个 赫米蒂安矩阵。 对于实矩阵 A,这也被称为对称部分 A;它有时也被称为"操作员真实部分"。 可选参数 上升,上升 控制相应的参数 赫米香查看。 对于实矩阵,后者相当于一个 对称查看。

请参阅 hermitianpart!进行相应的就地操作。

兼容性

Julia1.10此功能需要Julia1.10或更高版本。

hermitianpart!(A::AbstractMatrix, uplo::Symbol=:U) -> Hermitian

复盖方阵 A 与它的隐士部分就地 (A+A')/2,并返回 赫米蒂安(a,b). 对于实矩阵 A,这也被称为对称部分 A.

请参阅 [医隐士]进行相应的失位操作。

兼容性

Julia1.10此功能需要Julia1.10或更高版本。

copy_adjoint!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int},
                A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) -> B

有效地复制矩阵的元素 AB 带形容词如下:

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

元素 B[ir_dest,jr_dest] 被复盖。 此外,索引范围参数必须满足 长度(ir_dest)==长度(jr_src)长度(jr_dest)==长度(ir_src).

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

有效地复制矩阵的元素 AB 随着换位如下:

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

元素 B[ir_dest,jr_dest] 被复盖。 此外,索引范围参数必须满足 长度(ir_dest)==长度(jr_src)长度(jr_dest)==长度(ir_src).

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

有效地复制矩阵的元素 MB 以字符参数为条件 tM 如下:

tM 目的地 资料来源

'N'

B[ir_dest,jr_dest]

转置(M)[jr_src,ir_src]

'T'

B[ir_dest,jr_dest]

M[jr_src,ir_src]

'C'

B[ir_dest,jr_dest]

conj(M)[jr_src,ir_src]

元素 B[ir_dest,jr_dest] 被复盖。 此外,索引范围参数必须满足 长度(ir_dest)==长度(jr_src)长度(jr_dest)==长度(ir_src).

请参阅 收到!copy_adjoint!.

低级矩阵运算

在许多情况下,矩阵运算的就地版本允许您提供预先分配的输出向量或矩阵。 这在优化关键代码以避免重复分配的开销时非常有用。 这些就地操作的后缀为 ! 下面(例如 穆尔!)按照通常的朱莉娅惯例。

mul!(Y, A, B) -> Y

计算矩阵-矩阵或矩阵-向量积 并将结果存储在 Y,复盖现有的价值 Y. 请注意 Y 不得与任何一个别名 AB.

*例子*

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&ast;B
真的

*实施*

对于自定义矩阵和向量类型,建议实现5参数 穆尔! 而不是实现3参数 穆尔! 如果可能的话直接。

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

组合inplace matrix-matrix或matrix-vector multiply-add . 结果存储在 C 通过复盖它。 请注意 C 不得与任何一个别名 AB.

兼容性

Julia1.3五论点 穆尔! 至少需要Julia1.3。

*例子*

julia> A = [1.0 2.0; 3.0 4.0]; B = [1.0 1.0; 1.0 1.0]; C = [1.0 2.0; 3.0 4.0];

julia> α, β = 100.0, 10.0;

julia> mul!(C, A, B, α, β) === C
true

julia> C
2×2 Matrix{Float64}:
 310.0  320.0
 730.0  740.0

julia> C_original = [1.0 2.0; 3.0 4.0]; # A copy of the original value of C

julia> C == A &ast; B &ast; α + C_original &ast; β
true
lmul!(a::Number, B::AbstractArray)

缩放数组 B 通过标量 a 复盖 B 到位。 使用方法 rmul!从右边乘以标量。 缩放操作尊重乘法的语义 *之间 a 和一个元素 B. 特别是,这也适用于涉及非有限数字的乘法,例如 ±Inf.

兼容性

茱莉亚1.1之前的茱莉亚1.1, ±Inf 参赛作品 B 他们的待遇不一致。

*例子*

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
lmul!(A, B)

计算矩阵-矩阵积 ,复盖 B,并返回结果。 这里, A 必须是特殊的矩阵类型,例如, 对角线, 上角,上角低角,低角,或某种正交类型,见 资历名册.

*例子*

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

朱莉娅>lmul!(F.Q,B)
2×2矩阵{Float64}:
 3.0  4.0
 1.0  2.0
rmul!(A::AbstractArray, b::Number)

缩放数组 A 通过标量 b 复盖 A 到位。 使用方法 lmul!从左乘以标量。 缩放操作尊重乘法的语义 *之间的一个元素 Ab. 特别是,这也适用于涉及非有限数字的乘法,例如 ±Inf.

兼容性

茱莉亚1.1之前的茱莉亚1.1, ±Inf 参赛作品 A 他们的待遇不一致。

*例子*

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
rmul!(A, B)

计算矩阵-矩阵积 ,复盖 A,并返回结果。 这里, B 必须是特殊的矩阵类型,例如, 对角线, 上角,上角低角,低角,或某种正交类型,见 资历名册.

*例子*

julia> A = [0 1; 1 0];

julia> B = UpperTriangular([1 2; 0 3]);

朱莉娅>rmul!(A,B);

朱莉娅>A
2×2矩阵{Int64}:
 0  3
 1  2

朱莉娅>A=[1.0 2.0;3.0 4.0];

julia>F=qr([0 1;-1 0]);

朱莉娅>rmul!(A,F.Q)
2×2矩阵{Float64}:
 2.0  1.0
 4.0  3.0
ldiv!(Y, A, B) -> Y

计算/计算 A\B 就地存储结果 Y,返回结果。

论点 A 应该_not_是矩阵。 相反,它应该是一个因式分解对象(例如由 因式分解乔莱斯基). 这样做的原因是因子分解本身既昂贵又通常分配内存(尽管它也可以通过就地完成,例如, xref:stdlib/LinearAlgebra.adoc#LinearAlgebra.lu![鲁!),以及需要性能关键的情况 ldiv! 通常还需要细粒度控制因式分解 A.

注意某些结构化矩阵类型,例如 对角线上角,上角,是允许的,因为这些已经是因式分解的形式

*例子*

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> B = [1, 2.5, 3];

julia> Y = similar(B); # use similar since there is no need to read from it

朱莉娅>ldiv!(Y,qr(A),B);#你也可以试试qr!(A)进一步减少拨款

朱莉娅>Y≈A\B
真的
ldiv!(A, B)

计算/计算 A\B 就地和复盖 B 来存储结果。

论点 A 应该_not_是矩阵。 相反,它应该是一个因式分解对象(例如由 因式分解乔莱斯基). 这样做的原因是因子分解本身既昂贵又通常分配内存(尽管它也可以通过就地完成,例如, xref:stdlib/LinearAlgebra.adoc#LinearAlgebra.lu![鲁!),以及需要性能关键的情况 ldiv! 通常还需要细粒度控制因式分解 A.

注意某些结构化矩阵类型,例如 对角线上角,上角,是允许的,因为这些已经是因式分解的形式

*例子*

julia> A = [1 2.2 4; 3.1 0.2 3; 4 1 2];

julia> B = [1, 2.5, 3];

julia> B0 = copy(B); # a backup copy to facilitate testing

julia> ldiv!(lu(A), B); # you may also try lu!(A) to further reduce allocation

julia> B ≈ A \ B0
true
ldiv!(a::Number, B::AbstractArray)

划分数组中的每个条目 B 通过标量 a 复盖 B 到位。 使用方法 rdiv!从右边划分标量。

*例子*

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

朱莉娅>ldiv!(2.0,B)
2×2矩阵{Float64}:
 0.5  1.0
 1.5  2.0
ldiv!(A::Tridiagonal, B::AbstractVecOrMat) -> B

计算/计算 A\B 通过部分旋转的高斯消除就地,并将结果存储在 B,返回结果。 在这个过程中, A 也被复盖。

兼容性

朱莉娅1.11 ldiv!三棱角,三棱角 左手边至少需要Julia1.11。

rdiv!(A, B)

计算/计算 A/B 就地和复盖 A 来存储结果。

论点 B 应该_not_是矩阵。 相反,它应该是一个因式分解对象(例如由 因式分解乔莱斯基). 这样做的原因是因子分解本身既昂贵又通常分配内存(尽管它也可以通过就地完成,例如, xref:stdlib/LinearAlgebra.adoc#LinearAlgebra.lu![鲁!),以及需要性能关键的情况 rdiv! 通常还需要对因式分解的细粒度控制 B.

注意某些结构化矩阵类型,例如 对角线上角,上角,是允许的,因为这些已经是因式分解的形式

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

划分数组中的每个条目 A 通过标量 b 复盖 A 到位。 使用方法 ldiv!从左划分标量。

*例子*

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

julia> rdiv!(A, 2.0)
2×2 Matrix{Float64}:
 0.5  1.0
 1.5  2.0

BLAS功能

在Julia中(就像在许多科学计算中一样),密集的线性代数运算基于https://www.netlib.org/lapack/[LAPACK库],它又建立在基本的线性代数构建块之上,称为https://www.netlib.org/blas每个计算机体系结构都有高度优化的BLAS实现,有时在高性能线性代数例程中,直接调用BLAS函数是很有用的。

线性代数。布拉斯 为某些BLAS函数提供包装器。 那些复盖其中一个输入数组的BLAS函数的名称以 '!'. 通常,BLAS函数定义了四个方法,用于 漂浮物32, 漂浮64, 复杂的32,和 复杂的f64数组。

BLAS字符参数

许多BLAS函数接受确定是否转置参数的参数(反式,反式),引用矩阵的哪个三角形(上升,上升ul认证),三角形矩阵的对角线是否可以假设为所有的()或者输入参数属于矩阵乘法的哪一边(侧面). 可能性是:

乘法顺序

侧面 意义

'L'

该参数位于矩阵-矩阵运算的_left_侧。

'R'

该参数位于matrix-matrix操作的_right_侧。

三角形引用

上升,上升/ul认证 意义

'U'

只会使用矩阵的_upper_三角形。

'L'

只会使用矩阵的_lower_三角形。

换位操作

反式,反式/tX 意义

'N'

输入矩阵 X 不是转位或共轭的。

'T'

输入矩阵 X 将被换位。

'C'

输入矩阵 X 会共轭转位。

单位对角线

迪亚格/dX 意义

'N'

矩阵的对角线值 X 将被读取。

'U'

矩阵的对角线 X 被假定为所有的。

BLAS子例程的接口。

set_num_threads(n::Integer)
set_num_threads(::Nothing)

设置BLAS库应使用的线程数等于 N::整数.

也接受 什么都没有,在这种情况下,julia试图猜测默认的线程数。 传球 什么都没有 是气馁的,主要是由于历史原因而存在的。

get_num_threads()

获取BLAS库正在使用的线程数。

兼容性

朱莉娅1.6 get_num_线程 至少需要Julia1.6。

BLAS函数可以分为三组,也称为三级,具体取决于它们首次提出的时间,输入参数的类型以及操作的复杂性。

一级BLAS功能

第1级BLAS功能首次在(https://dl.acm.org/doi/10.1145/355841.355847[Lawson,1979])并定义标量和向量之间的运算。

rot!(n, X, incx, Y, incy, c, s)

复盖 Xc*X+s*YY-conj(s)*X+c*Y 对于第一 n 数组的元素 X 步履蹒跚 incx公司 首先 n 数组的元素 Y 步履蹒跚 印地安. 申报表 XY.

兼容性

朱莉娅1.5 腐烂! 至少需要Julia1.5。

scal!(n, a, X, incx)
scal!(a, X)

复盖 Xa*X 对于第一 n 数组的元素 X 步履蹒跚 incx公司. 申报表 X.

如果 nincx公司 不提供, 长度(X)步幅(X,1) 被使用。

scal(n, a, X, incx)
scal(a, X)

回来吧 X 按比例缩放 a 对于第一 n 数组的元素 X 步履蹒跚 incx公司.

如果 nincx公司 不提供, 长度(X)步幅(X,1) 被使用。

blascopy!(n, X, incx, Y, incy)

副本 n 数组的元素 X 步履蹒跚 incx公司 到阵列 Y 步履蹒跚 印地安. 申报表 Y.

dot(n, X, incx, Y, incy)

由两个向量组成的点积 n 数组的元素 X 步履蹒跚 incx公司n 数组的元素 Y 步履蹒跚 印地安.

*例子*

julia> BLAS.dot(10, fill(1.0, 10), 1, fill(1.0, 20), 2)
10.0
dotu(n, X, incx, Y, incy)

两个复数向量的点函数 n 数组的元素 X 步履蹒跚 incx公司n 数组的元素 Y 步履蹒跚 印地安.

*例子*

julia> BLAS.dotu(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
-10.0 + 10.0im
dotc(n, X, incx, U, incy)

两个复数向量的点函数,由 n 数组的元素 X 步履蹒跚 incx公司n 数组的元素 U 步履蹒跚 印地安,共轭所述第一载体。

*例子*

julia> BLAS.dotc(10, fill(1.0im, 10), 1, fill(1.0+im, 20), 2)
10.0 - 10.0im
nrm2(n, X, incx)

2-由 n 数组的元素 X 步履蹒跚 incx公司.

*例子*

julia> BLAS.nrm2(4, fill(1.0, 8), 2)
2.0

julia> BLAS.nrm2(1, fill(1.0, 8), 2)
1.0
asum(n, X, incx)

第一个量的总和 n 数组的元素 X 步履蹒跚 incx公司.

对于一个真正的数组,大小是绝对值。 对于复数数组,量值是实部绝对值与虚部绝对值之和。

*例子*

julia> BLAS.asum(5, fill(1.0im, 10), 2)
5.0

julia> BLAS.asum(2, fill(1.0im, 10), 5)
2.0
iamax(n, dx, incx)
iamax(dx)

找到元素的索引 dx 具有最大绝对值。 n 是长度的 dx,而 incx公司 是步幅。 如果 nincx公司 未提供,它们假定默认值为 n=长度(dx)incx=stride1(dx).

二级BLAS功能

第2级BLAS功能发表于(Dongarra,1988)并定义矩阵-向量运算。

*返回向量*

gemv!(tA, alpha, A, x, beta, y)

更新向量 y 作为 alpha*A*x+beta*yalpha*a’x+beta*y 根据 tA. 阿尔法贝塔 是标量。 返回更新的 y.

gemv(tA, alpha, A, x)

回来吧 阿尔法*A*x阿尔法*a’x 根据 tA. 阿尔法 是标量。

gemv(tA, A, x)

回来吧 A*xA’x 根据 tA.

gbmv!(trans, m, kl, ku, alpha, A, x, beta, y)

更新向量 y 作为 alpha*A*x+beta*yalpha*A'*x+beta*y 根据 反式,反式. 矩阵 A 是维数的一般带矩阵 m尺寸(A,2)九龙区 子对角线和 超对角线。 阿尔法贝塔 是标量。 返回更新的 y.

gbmv(trans, m, kl, ku, alpha, A, x)

回来吧 阿尔法*A*x阿尔法*A'*x 根据 反式,反式. 矩阵 A 是维数的一般带矩阵 m尺寸(A,2)九龙区 子对角线和 超对角线,和 阿尔法 是标量。

hemv!(ul, alpha, A, x, beta, y)

更新向量 y 作为 alpha*A*x+beta*y. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。 阿尔法贝塔 是标量。 返回更新的 y.

hemv(ul, alpha, A, x)

回来吧 阿尔法*A*x. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。 阿尔法 是标量。

hemv(ul, A, x)

回来吧 A*x. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。

hpmv!(uplo, α, AP, x, β, y)

更新向量 y 作为 α*A*x+β*y,在哪里 A 是以包装格式提供的Hermitian矩阵 美联社.

u='U',阵列AP必须包含依序、逐列打包的Hermitian矩阵的上三角部分,使 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[1,2]A[2,2] 分别,以此类推。

uplo='L',阵列AP必须包含依次、逐列打包的Hermitian矩阵的下三角部分,使得 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[2,1]A[3,1] 分别,以此类推。

标量输入 αβ 必须是复数或实数。

阵列输入 x, y美联社 都必须是 复杂的32复杂的f64 类型。

返回更新的 y.

兼容性

朱莉娅1.5 hpmv! 至少需要Julia1.5。

symv!(ul, alpha, A, x, beta, y)

更新向量 y 作为 alpha*A*x+beta*y. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。 阿尔法贝塔 是标量。 返回更新的 y.

symv(ul, alpha, A, x)

回来吧 阿尔法*A*x. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。 阿尔法 是标量。

symv(ul, A, x)

回来吧 A*x. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。

sbmv!(uplo, k, alpha, A, x, beta, y)

更新向量 y 作为 alpha*A*x+beta*y 哪里 A 是有序的对称带矩阵 尺寸(A,2)k 存储在参数中的超对角线 A. 存储布局 A 描述了参考BLAS模块,级别-2BLAS在https://www.netlib.org/lapack/explore-html/.只有 上升,上升三角形的 A 被使用。

返回更新的 y.

sbmv(uplo, k, alpha, A, x)

回来吧 阿尔法*A*x 哪里 A 是有序的对称带矩阵 尺寸(A,2)k 存储在参数中的超对角线 A. 只有 上升,上升三角形的 A 被使用。

sbmv(uplo, k, A, x)

回来吧 A*x 哪里 A 是有序的对称带矩阵 尺寸(A,2)k 存储在参数中的超对角线 A. 只有 上升,上升三角形的 A 被使用。

spmv!(uplo, α, AP, x, β, y)

更新向量 y 作为 α*A*x+β*y,在哪里 A 是以打包格式提供的对称矩阵 美联社.

u='U',阵列AP必须包含对称矩阵的上三角部分按顺序、逐列打包,使得 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[1,2]A[2,2] 分别,等等。

uplo='L',阵列AP必须包含对称矩阵的下三角部分按顺序、逐列打包,使得 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[2,1]A[3,1] 分别,等等。

标量输入 αβ 一定是真的。

阵列输入 x, y美联社 都必须是 漂浮物32漂浮64 类型。

返回更新的 y.

兼容性

朱莉娅1.5 spmv! 至少需要Julia1.5。

trmv!(ul, tA, dA, A, b)

回来吧 op(A)*b,在哪里 op的 是由 tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。 乘法发生在 b.

trmv(ul, tA, dA, A, b)

回来吧 op(A)*b,在哪里 op的 是由 tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。

trsv!(ul, tA, dA, A, b)

复盖 b 与解决方案 A*x=b 或其他两种变体中的一种由 tAul认证. 确定对角线值是被读取还是被假定为所有值。 返回更新的 b.

trsv(ul, tA, dA, A, b)

将解决方案返回到 A*x=b 或其他两种变体中的一种由 tAul认证. 确定对角线值是被读取还是被假定为所有值。

*返回矩阵*

ger!(alpha, x, y, A)

矩阵的Rank-1更新 A 用向量 xy 作为 阿尔法*x*y'+A.

geru!(alpha, x, y, A)

矩阵的Rank-1更新 A 用向量 xy 作为 alpha*x*转置(y)+A.

her!(uplo, alpha, x, A)

仅用于复杂数组的方法。 Hermitian矩阵的Rank-1更新 A 带矢量 x 作为 阿尔法*x*x'+A. 上升,上升控制哪个三角形 A 被更新。 申报表 A.

syr!(uplo, alpha, x, A)

对称矩阵的Rank-1更新 A 带矢量 x 作为 alpha*x*转置(x)+A. 上升,上升控制哪个三角形 A 被更新。 申报表 A.

spr!(uplo, α, x, AP)

更新矩阵 A 作为 A+α*x*x',在哪里 A 是以打包格式提供的对称矩阵 美联社x 是一个向量。

u='U',阵列AP必须包含对称矩阵的上三角部分按顺序、逐列打包,使得 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[1,2]A[2,2] 分别,以此类推。

uplo='L',阵列AP必须包含对称矩阵的下三角部分按顺序、逐列打包,使得 美联社[1] 包含 A[1,1], 美联社[2]美联社[3] 包含 A[2,1]A[3,1] 分别,等等。

标量输入 α 一定是真的。

阵列输入 x美联社 都必须是 漂浮物32漂浮64 类型。 返回更新的 美联社.

兼容性

朱莉娅1.8 spr! 至少需要Julia1.8。

第3级BLAS功能

第3级BLAS功能发表于(Dongarra,1990)并定义矩阵-矩阵运算。

gemmt!(uplo, tA, tB, alpha, A, B, beta, C)

更新由指定的下部或上部三角形部分 上升,上升C 作为 阿尔法*A*B+贝塔*C 或者根据 tA结核病. 返回更新的 C.

兼容性

朱莉娅1.11 杰姆特! 至少需要Julia1.11。

gemmt(uplo, tA, tB, alpha, A, B)

返回由指定的下部或上部三角形部分 上升,上升A*B 或者根据其他三种变体 tA结核病.

兼容性

朱莉娅1.11 宝石学 至少需要Julia1.11。

gemmt(uplo, tA, tB, A, B)

返回由指定的下部或上部三角形部分 上升,上升A*B 或者根据其他三种变体 tA结核病.

兼容性

朱莉娅1.11 宝石学 至少需要Julia1.11。

gemm!(tA, tB, alpha, A, B, beta, C)

更新资料 C 作为 阿尔法*A*B+贝塔*C 或者根据其他三种变体 tA结核病. 返回更新的 C.

gemm(tA, tB, alpha, A, B)

回来吧 阿尔法*A*B 或者根据其他三种变体 tA结核病.

gemm(tA, tB, A, B)

回来吧 A*B 或者根据其他三种变体 tA结核病.

symm!(side, ul, alpha, A, B, beta, C)

更新资料 C 作为 阿尔法*A*B+贝塔*C阿尔法*B*A+贝塔*C 根据 侧面. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。 返回更新的 C.

symm(side, ul, alpha, A, B)

回来吧 阿尔法*A*B阿尔法*B*A 根据 侧面. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。

symm(side, ul, A, B)

回来吧 A*BB*A 根据 侧面. A 被假定为对称的。 只有 ul认证三角形的 A 被使用。

hemm!(side, ul, alpha, A, B, beta, C)

更新资料 C 作为 阿尔法*A*B+贝塔*C阿尔法*B*A+贝塔*C 根据 侧面. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。 返回更新的 C.

hemm(side, ul, alpha, A, B)

回来吧 阿尔法*A*B阿尔法*B*A 根据 侧面. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。

hemm(side, ul, A, B)

回来吧 A*BB*A 根据 侧面. A 被认为是赫密天。 只有 ul认证三角形的 A 被使用。

syrk!(uplo, trans, alpha, A, beta, C)

对称矩阵的Rank-k更新 C 作为 alpha*A*转置(A)+beta*Calpha*转置(A)*a+beta*C 根据 反式,反式. 只有 上升,上升三角形的 C 被使用。 回来吧 C.

syrk(uplo, trans, alpha, A)

返回上三角形或下三角形 A,根据 上升,上升,的 alpha*A*转置(A)alpha*转置(A)*A,根据 反式,反式.

herk!(uplo, trans, alpha, A, beta, C)

仅用于复杂数组的方法。 Hermitian矩阵的Rank-k更新 C 作为 alpha*A*A'+beta*C阿尔法*A'*A+贝塔*C 根据 反式,反式. 只有 上升,上升三角形的 C 被更新。 申报表 C.

herk(uplo, trans, alpha, A)

仅用于复杂数组的方法。 返回 上升,上升三角形的 阿尔法*A*A'阿尔法*A'*A,根据 反式,反式.

syr2k!(uplo, trans, alpha, A, B, beta, C)

对称矩阵的Rank-2k更新 C 作为 alpha*A*转置(B)+alpha*B*转置(A)+beta*Calpha*转置(A)*B+alpha*转置(B)*A+beta*C 根据 反式,反式. 只有 上升,上升三角形的 C 被使用。 申报表 C.

syr2k(uplo, trans, alpha, A, B)

返回 上升,上升三角形的 alpha*A*转置(B)+alpha*B*转置(A)alpha*转置(A)*B+alpha*转置(B)*A,根据 反式,反式.

syr2k(uplo, trans, A, B)

归还 上升,上升三角形的 A*转置(B)+B*转置(A)转置(A)*B+转置(B)*A,根据 反式,反式.

her2k!(uplo, trans, alpha, A, B, beta, C)

Hermitian矩阵的Rank-2k更新 C 作为 alpha*A*B'+alpha'*B*A'+beta*Calpha*A'*B+alpha'*B'*A+beta*C 根据 反式,反式. 标量 贝塔 必须是真实的。 只有 上升,上升三角形的 C 被使用。 回来吧 C.

her2k(uplo, trans, alpha, A, B)

归还 上升,上升三角形的 阿尔法*A*B'+阿尔法'*B*A'阿尔法*A'*B+阿尔法'*B'*A,根据 反式,反式.

her2k(uplo, trans, A, B)

归还 上升,上升三角形的 A*B'+B*A'A'*B+B'*A,根据 反式,反式.

trmm!(side, ul, tA, dA, alpha, A, B)

更新资料 B 作为 阿尔法*A*B 或其他三种变体中的一种由 侧面tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。 返回更新的 B.

trmm(side, ul, tA, dA, alpha, A, B)

回来吧 阿尔法*A*B 或其他三种变体中的一种由 侧面tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。

trsm!(side, ul, tA, dA, alpha, A, B)

复盖 B 与解决方案 A*X=alpha*B 或其他三种变体中的一种由 侧面tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。 返回更新的 B.

trsm(side, ul, tA, dA, alpha, A, B)

将解决方案返回到 A*X=alpha*B 或由确定的其他三种变体之一 侧面tA. 只有 ul认证三角形的 A 被使用。 确定对角线值是被读取还是被假定为所有值。

LAPACK功能

线性代数。拉帕克 为线性代数的一些LAPACK函数提供包装。 那些复盖其中一个输入数组的函数的名称以 '!'.

通常一个函数定义了4个方法,每个方法一个用于 漂浮64, 漂浮物32, 复杂的f64复杂的32 数组。

请注意,Julia提供的LAPACK API可以并且将来会发生变化。 由于此API不是面向用户的,因此没有承诺在未来版本中支持/弃用此特定功能集。

LAPACK子例程的接口。

gbtrf!(kl, ku, m, AB) -> (AB, ipiv)

计算带状矩阵的LU因式分解 AB. 九龙区 是包含非零带的第一个子带, 是包含一个的最后一个超二边形,并且 m 是矩阵的第一维 AB. 返回LU因子分解就地和 ipiv,使用的枢轴的矢量。

gbtrs!(trans, kl, ku, m, AB, ipiv, B)

解方程 AB*X=B. 反式,反式 确定的方向 AB. 它可能是 N (无转置), T (转置),或 C (共轭转置)。 九龙区 是包含非零带的第一个子带, 是包含一个的最后一个超二边形,并且 m 是矩阵的第一维 AB. ipiv 是从返回的枢轴的矢量 gbtrf!. 返回向量或矩阵 X,复盖 B 到位。

gebal!(job, A) -> (ilo, ihi, scale)

平衡矩阵 A 在计算其本征系统或Schur因子分解之前。 工作 可以是 N (A 不会被排列或缩放), P (A 只会被允许), S (A 只会缩放),或 B (A 将被排列和缩放)。 修改/修改 A 就地和返回 劳工组织, 伊希,而 比例尺. 如果打开了排列, A[i,j]=0 如果 j>i1<j<iloj>伊希. 比例尺 包含有关执行的缩放/排列的信息。

gebak!(job, side, ilo, ihi, scale, V)

变换特征向量 V 使用矩阵平衡 格巴尔! 到原始矩阵的未缩放/未拟合的特征向量。 修改/修改 V 到位。 侧面 可以是 L (左特征向量被变换)或 R (右特征向量进行变换)。

gebrd!(A) -> (A, d, e, tauq, taup)

减少 A 原位到双角形 A=QBP'. 申报表 A,包含双角矩阵 B; d,包含的对角线元素 B; e,包含的非对角线元素 B; 陶克,包含代表的基本反射器 Q;及 陶普,包含代表的基本反射器 P.

gelqf!(A, tau)

计算 LQ 因式分解 A, A=LQ. 头,头 包含对因式分解的基本反射器进行参数化的标量。 头,头 长度必须大于或等于 A.

申报表 A头,头 就地修改。

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

计算 LQ 因式分解 A, A=LQ.

申报表 A、就地修改,以及 头,头,其中包含对因式分解的基本反射器进行参数化的标量。

geqlf!(A, tau)

计算 QL 因式分解 A, A=QL. 头,头 包含对因式分解的基本反射器进行参数化的标量。 头,头 长度必须大于或等于 A.

申报表 A头,头 就地修改。

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

计算 QL 因式分解 A, A=QL.

申报表 A、就地修改,以及 头,头,其中包含对因式分解的基本反射器进行参数化的标量。

geqrf!(A, tau)

计算 资历名册 因式分解 A, A=QR. 头,头 包含对因式分解的基本反射器进行参数化的标量。 头,头 长度必须大于或等于 A.

申报表 A头,头 就地修改。

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

计算 资历名册 因式分解 A, A=QR.

申报表 A、就地修改,以及 头,头,其中包含对因式分解的基本反射器进行参数化的标量。

geqp3!(A, [jpvt, tau]) -> (A, tau, jpvt)

计算枢轴 资历名册 因式分解 A, AP=QR 使用BLAS等级3。 P 是一个枢转矩阵,由 jpvt. 头,头 存储基本反射器。 论点 jpvt头,头 是可选的,并允许传递预分配的数组。 当通过, jpvt 长度必须大于或等于 n 如果 A 是一个 (m x n) 矩阵和 头,头 长度必须大于或等于 A. 入境时,如 jpvt[j] 不等于零则 j第三栏 A 被排列在 美联社. A, jpvt,而 头,头 被就地修改。

gerqf!(A, tau)

计算 RQ 因式分解 A, A=RQ. 头,头 包含对因式分解的基本反射器进行参数化的标量。 头,头 长度必须大于或等于 A.

申报表 A头,头 就地修改。

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

计算 RQ 因式分解 A, A=RQ.

申报表 A、就地修改,以及 头,头,其中包含对因式分解的基本反射器进行参数化的标量。

geqrt!(A, T)

计算阻塞 资历名册 因式分解 A, A=QR. T 包含上部三角形块反射器,其参数化因式分解的基本反射器。 第一维的 T 设置块大小,它必须介于1和 n. 第二维的 T 必须等于最小尺寸 A.

申报表 AT 就地修改。

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

计算阻塞 资历名册 因式分解 A, A=QR. nb 设置块大小,它必须介于1和 n,第二维 A.

申报表 A、就地修改,以及 T,其包含上部三角形块反射器,其参数化因式分解的基本反射器。

geqrt3!(A, T)

递归计算阻塞 资历名册 因式分解 A, A=QR. T 包含上部三角形块反射器,其参数化因式分解的基本反射器。 第一维的 T 设置块大小,它必须介于1和 n. 第二维的 T 必须等于最小尺寸 A.

申报表 AT 就地修改。

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

递归计算阻塞 资历名册 因式分解 A, A=QR.

申报表 A、就地修改,以及 T,其包含上部三角形块反射器,其参数化因式分解的基本反射器。

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

计算枢轴 因式分解 A, A=鲁. ipiv 包含透视信息和 资料 表示成功的代码(信息=0),一个奇异值 U (信息=i,在这种情况下 U[我,我] 是单数),或错误代码(信息<0).

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

计算枢轴 因式分解 A, A=鲁.

申报表 A,就地改装, ipiv,所述枢转信息,以及一 资料 表示成功的代码(信息=0),一个奇异值 U (信息=i,在这种情况下 U[我,我] 是单数),或错误代码(信息<0).

tzrzf!(A) -> (A, tau)

变换上部梯形矩阵 A 到上部三角形形式就地。 申报表 A头,头,变换的基本反射器的标量参数。

ormrz!(side, trans, A, tau, C)

乘以矩阵 CQ 来自由 tzrzf!. 视情况而定 侧面反式,反式 乘法可以是左侧的(侧=L,Q*C)或右侧(侧=R,C*Q)和 Q 可以未经修改(反式=N),转置(反式=T),或共轭转置(反式=C). 返回矩阵 C 它是用乘法的结果就地修改的。

gels!(trans, A, B) -> (F, B, ssr)

求解线性方程 A*X=B, 转置(A)*X=B,或 形容词(A)*X=B 使用QR或LQ因子分解。 修改矩阵/向量 B 与溶液就位。 A 被其复盖 资历名册LQ 因式分解。 反式,反式 可能是 N (无修改), T (转置),或 C (共轭转置)。 凝胶! 搜索最小范数/最小二乘解。 A 可能是低于或超过确定。 解决方案返回 B.

gesv!(A, B) -> (B, A, ipiv)

求解线性方程 A*X=B 哪里 A 是使用的方阵 因式分解 A. A 被其复盖 因式分解和 B 被解决方案复盖 X. ipiv 包含 因式分解 A.

getrs!(trans, A, ipiv, B)

求解线性方程 A*X=B, 转置(A)*X=B,或 形容词(A)*X=B 为广场 A. 修改矩阵/向量 B 与溶液就位。 A 因式分解从 盖特夫!,与 ipiv 的枢转信息。 反式,反式 可能是 N (无修改), T (转置),或 C (共轭转置)。

getri!(A, ipiv)

计算 A,使用其 因式分解发现 盖特夫!. ipiv 是枢轴信息输出和 A 包含 因式分解 盖特夫!. A 被其逆复盖。

gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)

求解线性方程 A*X=B (反式=N), 转置(A)*X=B (反式=T),或 形容词(A)*X=B (反式=C)使用 因式分解 A. 事实 可能是 E,在这种情况下 A 将被平衡并复制到 AF; F,在这种情况下 AFipiv 从以前的 因式分解是输入;或 N,在这种情况下 A 将被复制到 AF 然后考虑因素。 如果 事实=F, 相等的,相等的 可能是 N,意思 A 还没有平衡; R,意思 A 被乘以 对角线(R) 从左边; C,意思 A 被乘以 对角线(C) 从右边起;或 B,意思 A 被乘以 对角线(R) 从左边和 对角线(C) 从右边。 如果 事实=Fequed=RB 的元素 R 必须都是积极的。 如果 事实=Fequed=CB 的元素 C 必须都是积极的。

返回解决方案 X; 相等的,相等的,这是一个输出,如果 事实 不是 N,并描述了所进行的平衡; R,行平衡对角线; C,柱平衡对角线; B,这可能会被其平衡形式复盖 对角线(R)&ast;B (如果 反式=Nequed=R,B)或 对角线(C)&ast;B (如果 反式=T,Cequed=C,B); rcond的,倒数条件数 A equilbrating后; 费尔,每个解向量的前向误差在 X; 贝尔,每个解向量的前向误差在 X;及 工作,倒数枢轴生长因子。

gesvx!(A, B)

无平衡,无转置简化 gesvx!.

gelsd!(A, B, rcond) -> (B, rnk)

计算的最小范数解 A*X=B 通过找到 SVD 因式分解 A,然后分割和征服问题。 B 被解决方案复盖 X. 下面的奇异值 rcond的 将被视为零。 返回解决方案 B 和有效等级 Arnk.

gelsy!(A, B, rcond) -> (B, rnk)

计算的最小范数解 A*X=B 通过找到完整的 资历名册 因式分解 A,然后分割和征服问题。 B 被解决方案复盖 X. 下面的奇异值 rcond的 将被视为零。 返回解决方案 B 和有效等级 Arnk.

gglse!(A, c, B, d) -> (X,res)

求解方程 A*x=c 哪里 x 受平等约束 B*x=d. 使用公式 //c-A&ast;x//^2=0 来解决。 申报表 X 和残差平方和。

geev!(jobvl, jobvr, A) -> (W, VL, VR)

找到 A. 如果 jobvl=N,的左特征向量 A 没有计算。 如果 jobvr=N,右特征向量 A 没有计算。 如果 jobvl=Vjobvr=V,计算出相应的特征向量。 返回特征值 W,右特征向量在 VR/VR,和左特征向量在 VL.

gesdd!(job, A) -> (U, S, VT)

求奇异值分解 A, A=U*S*V',采用分而治之的方法。 如果 工作=A,所有的列 U 和行 V' 进行计算。 如果 工作=N,没有列 U 或行 V' 进行计算。 如果 工作=O, A 被(thin)的列复盖 U 和行(薄) V'. 如果 工作=S,(薄)的列 U 和行(薄) V' 分别计算并返回。

gesvd!(jobu, jobvt, A) -> (U, S, VT)

求奇异值分解 A, A=U*S*V'. 如果 jobu=A,所有的列 U 进行计算。 如果 jobvt=一个 所有的行 V' 进行计算。 如果 jobu=N,没有列 U 进行计算。 如果 jobvt=N 没有行 V' 进行计算。 如果 乔布=O, A 被(thin)的列复盖 U. 如果 jobvt=O, A 用(瘦)的行复盖 V'. 如果 jobu=S,列(薄) U 分别计算并返回。 如果 jobvt=S (薄)的行 V' 分别计算并返回。 乔布工作/工作 不能都是 O.

申报表 U, S,而 Vt;Vt,在哪里 S 是奇异值 A.

ggsvd!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

求广义奇异值分解 AB, U'*A*Q=D1*RV'*B*Q=D2*R. D1阿尔法 在其对角线和 D2贝塔 在其对角线上。 如果 jobu=U,正交/酉矩阵 U 被计算。 如果 jobv=V 正交/酉矩阵 V 被计算。 如果 jobq=Q,正交/酉矩阵 Q 被计算。 如果 乔布, 约伯职位qN,该矩阵不计算。 此功能仅在3.6.0之前的LAPACK版本中可用。

ggsvd3!(jobu, jobv, jobq, A, B) -> (U, V, Q, alpha, beta, k, l, R)

求广义奇异值分解 AB, U'*A*Q=D1*RV'*B*Q=D2*R. D1阿尔法 在其对角线和 D2贝塔 在其对角线上。 如果 jobu=U,正交/酉矩阵 U 被计算。 如果 jobv=V 正交/酉矩阵 V 被计算。 如果 jobq=Q,正交/酉矩阵 Q 被计算。 如果 乔布, 约伯,或 职位qN,该矩阵不计算。 此功能需要LAPACK3.6.0。

geevx!(balanc, jobvl, jobvr, sense, A) -> (A, w, VL, VR, ilo, ihi, scale, abnrm, rconde, rcondv)

找到 A 用矩阵平衡。 如果 jobvl=N,的左特征向量 A 没有计算。 如果 jobvr=N,右特征向量 A 没有计算。 如果 jobvl=Vjobvr=V,计算出相应的特征向量。 如果 balanc=N,不进行平衡。 如果 balanc=P, A 被排列但不缩放。 如果 巴兰克=S, A 被缩放但不被排列。 如果 balanc=B, A 被排列和缩放。 如果 感=N,不计算倒数条件数。 如果 感=E,倒数条件数仅针对特征值计算。 如果 感=V,倒数条件数仅针对右特征向量计算。 如果 感=B,计算右本征向量和本征向量的倒数条件数。 如果 感=E,B,必须计算右和左特征向量。

ggev!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

找到 AB. 如果 jobvl=N,左特征向量不计算。 如果 jobvr=N,没有计算正确的特征向量。 如果 jobvl=Vjobvr=V,计算出相应的特征向量。

ggev3!(jobvl, jobvr, A, B) -> (alpha, beta, vl, vr)

找到 AB 使用阻塞算法。 如果 jobvl=N,左特征向量不计算。 如果 jobvr=N,没有计算正确的特征向量。 如果 jobvl=Vjobvr=V,计算出相应的特征向量。 此功能需要LAPACK3.6.0。

gtsv!(dl, d, du, B)

求解方程 A*X=B 哪里 A 是一个三棱柱矩阵与 dl 在细分上, d 在对角线上,和 在超斜角上。

复盖 B 与解决方案 X 并将其返回。

gttrf!(dl, d, du) -> (dl, d, du, du2, ipiv)

找到 三边形矩阵的因式分解 dl 在细分上, d 在对角线上,和 在超斜角上。

修改/修改 dl, d,而 就地并返回它们和第二个超二角 杜2 和枢转向量 ipiv.

gttrs!(trans, dl, d, du, du2, ipiv, B)

求解方程 A*X=B (反式=N), 转置(A)*X=B (反式=T),或 形容词(A)*X=B (反式=C)使用 因式分解由 gttrf!. B 被解决方案复盖 X.

orglq!(A, tau, k = length(tau))

显式查找矩阵 Q 一个 LQ 调用后的因子分解 gelqf!A. 使用的输出 gelqf!. A 被复盖 Q.

orgqr!(A, tau, k = length(tau))

显式查找矩阵 Q 一个 资历名册 调用后的因子分解 geqrf!A. 使用的输出 geqrf!. A 被复盖 Q.

orgql!(A, tau, k = length(tau))

显式查找矩阵 Q 一个 QL 调用后的因子分解 格克尔夫!A. 使用的输出 盖克尔夫!. A 被复盖 Q.

orgrq!(A, tau, k = length(tau))

显式查找矩阵 Q 一个 RQ 调用后的因子分解 格克夫!A. 使用的输出 格克夫!. A 被复盖 Q.

ormlq!(side, trans, A, tau, C)

计算机 Q*C (反式=N), 转置(Q)*C (反式=T), adjoint(Q)*C (反式=C)为 边=L 或等效的右侧乘法为 侧=R 使用 Q 从一个 LQ 因式分解 A 使用 gelqf!. C 被复盖。

ormqr!(side, trans, A, tau, C)

计算机 Q*C (反式=N), 转置(Q)*C (反式=T), adjoint(Q)*C (反式=C)为 边=L 或等效的右侧乘法为 侧=R 使用 Q 从一个 资历名册 因式分解 A 使用 geqrf!. C 被复盖。

ormql!(side, trans, A, tau, C)

计算机 Q*C (反式=N), 转置(Q)*C (反式=T), adjoint(Q)*C (反式=C)为 边=L 或等效的右侧乘法为 侧=R 使用 Q 从一个 QL 因式分解 A 使用 盖克尔夫!. C 被复盖。

ormrq!(side, trans, A, tau, C)

计算机 Q*C (反式=N), 转置(Q)*C (反式=T), adjoint(Q)*C (反式=C)为 边=L 或等效的右侧乘法为 侧=R 使用 Q 从一个 RQ 因式分解 A 使用 格克夫!. C 被复盖。

gemqrt!(side, trans, V, T, C)

计算机 Q*C (反式=N), 转置(Q)*C (反式=T), adjoint(Q)*C (反式=C)为 边=L 或等效的右侧乘法为 侧=R 使用 Q 从一个 资历名册 因式分解 A 使用 格克特!. C 被复盖。

posv!(uplo, A, B) -> (A, B)

找到解决方案 A*X=B 哪里 A 是对称或Hermitian正定矩阵。 如果 u=U 上部Cholesky分解 A 被计算。 如果 升=L 下Cholesky分解 A 被计算。 A 被其Cholesky分解复盖。 B 被解决方案复盖 X.

potrf!(uplo, A)

计算Cholesky(上if u=U,降低如果 升=L)正定矩阵的分解 A. A 被复盖并返回一个信息代码。

potri!(uplo, A)

计算正定矩阵的逆 A 打电话后 波特夫! 找到它的(上if u=U,降低如果 升=L)Cholesky分解。 A 被其逆复盖并返回。

potrs!(uplo, A, B)

找到解决方案 A*X=B 哪里 A 是一个对称或Hermitian正定矩阵,其Cholesky分解由 波特夫!. 如果 u=U 上部Cholesky分解 A 是计算出来的。 如果 上升=L 下Cholesky分解 A 是计算出来的。 B 被解决方案复盖 X.

pstrf!(uplo, A, tol) -> (A, piv, rank, info)

计算(上if u=U,降低如果 升=L)正定矩阵的枢转Cholesky分解 A 具有用户设置的容差 托尔. A 被其Cholesky分解复盖。

申报表 A,枢轴 piv,军衔 A,及一 资料 密码。 如果 信息=0,因式分解成功。 如果 信息=i>0,则 A 是不确定的或等级缺陷的。

ptsv!(D, E, B)

解决问题 A*X=B 对于正定tridiagonal A. D 是对角线的 AE 是对角线外。 B 被解决方案复盖 X 然后回来了。

pttrf!(D, E)

计算正定三边形矩阵的LDLt因子分解 D 作为对角线和 E 作为非对角线。 DE 被复盖并返回。

pttrs!(D, E, B)

解决问题 A*X=B 对于正定tridiagonal A 与对角线 D 和非对角线 E 计算后 A使用LDLt因子分解 pttrf!. B 被解决方案复盖 X.

trtri!(uplo, diag, A)

求(upper if)的倒数 u=U,降低如果 升=L)三角矩阵 A. 如果 diag=N, A 具有非单位对角线元素。 如果 diag=U,所有对角线元素 A 是一个。 A 被其逆复盖。

trtrs!(uplo, trans, diag, A, B)

解决问题 A*X=B (反式=N), 转置(A)*X=B (反式=T),或 形容词(A)*X=B (反式=C)for(upper if u=U,降低如果 上升=L)三角矩阵 A. 如果 diag=N, A 具有非单位对角线元素。 如果 diag=U,所有对角线元素 A 是一个。 B 被解决方案复盖 X.

trcon!(norm, uplo, diag, A)

查找(upper if)的倒数条件编号 u=U,降低如果 升=L)三角矩阵 A. 如果 diag=N, A 具有非单位对角线元素。 如果 diag=U,所有对角线元素 A 是一个。 如果 规范=I,条件数在无穷范数中找到。 如果 范数=O1,条件编号在一个范数中找到。

trevc!(side, howmny, select, T, VL = similar(T), VR = similar(T))

找到上三角矩阵的本征系统 T. 如果 侧=R,计算右特征向量。 如果 边=L,计算左特征向量。 如果 边=B,这两个集合都是计算的。 如果 howmny=一个,找到所有特征向量。 如果 howmny=B,所有特征向量被发现并使用反向转换 VLVR/VR. 如果 howmny=S,只有对应于在值的特征向量 选择 进行计算。

trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)

估计解决方案中的误差 A*X=B (反式=N), 转置(A)*X=B (反式=T), 形容词(A)*X=B (反式=C)为 边=L,或等效方程一个右手 侧=R X*A 计算后 X 使用 trtrs!. 如果 u=U, A 是上三角形。 如果 升=L, A 是较低的三角形。 如果 diag=N, A 具有非单位对角线元素。 如果 diag=U,所有对角线元素 A 是一个。 费尔贝尔 是可选输入。 费尔 是正向误差和 贝尔 是向后错误,每个组件。

stev!(job, dv, ev) -> (dv, Zmat)

计算对称三边形矩阵的本征系统 dv 作为对角线和 电动车 作为非对角线。 如果 工作=N 只有特征值被发现并返回 dv. 如果 工作=V 然后特征向量也被找到并返回 Zmat.

stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) -> (dv, iblock, isplit)

计算对称三边形矩阵的特征值 dv 作为对角线和 电动车 作为非对角线。 如果 范围=A,找到所有的特征值。 如果 范围=V,半开区间内的特征值 (vl,vu] 被发现了。 如果 范围=I,具有指数之间的特征值 伊尔iu 被发现了。 如果 顺序=B,特征值在一个块内排序。 如果 顺序=E,他们被命令跨越所有的块。 阿布斯托尔 可以设置为收敛的容差。

stegr!(jobz, range, dv, ev, vl, vu, il, iu) -> (w, Z)

计算特征值(jobz=N)或特征值和特征向量(jobz=V)对于对称的三棱柱矩阵与 dv 作为对角线和 电动车 作为非对角线。 如果 范围=A,找到所有的特征值。 如果 范围=V,半开区间内的特征值 (vl,vu] 被发现了。 如果 范围=I,具有指数之间的特征值 伊尔iu 被发现了。 特征值在返回 w 和特征向量在 Z.

stein!(dv, ev_in, w_in, iblock_in, isplit_in)

计算对称三边形矩阵的特征向量 dv 作为对角线和 ev_in 作为非对角线。 w_in 指定要为其查找相应特征向量的输入特征值。 伊布洛克 指定与 w_in. isplit_in 指定子矩阵块之间的分割点。

syconv!(uplo, A, ipiv) -> (A, work)

转换对称矩阵 A (已因式分解成三角形矩阵)成两个矩阵 LD. 如果 u=U, A 是上三角形。 如果 升=L,为下三角形。 ipiv 是来自三角因式分解的枢轴矢量。 A 被复盖 LD.

sysv!(uplo, A, B) -> (B, A, ipiv)

找到解决方案 A*X=B 对于对称矩阵 A. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。 B 被解决方案复盖 X. A 被它的一堆-考夫曼因子分解复盖。 ipiv 包含有关因子分解的透视信息。

sytrf!(uplo, A) -> (A, ipiv, info)

计算对称矩阵的束-考夫曼因式分解 A. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。

申报表 A,由因式分解复盖,一个枢轴向量 ipiv,以及错误代码 资料 其为非负整数。 如果 资料 是正的矩阵是奇异的,并且因式分解的对角线部分在位置上正好为零 资料.

sytrf!(uplo, A, ipiv) -> (A, ipiv, info)

计算对称矩阵的束-考夫曼因式分解 A. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。

申报表 A,由因式分解复盖,枢轴向量 ipiv,以及错误代码 资料 其为非负整数。 如果 资料 是正的矩阵是奇异的,并且因式分解的对角线部分在位置上正好为零 资料.

sytri!(uplo, A, ipiv)

计算对称矩阵的逆 A 使用的结果 赛特夫!. 如果 u=U,上半部分 A 被存储。 如果 上升=L,下半部分被存储。 A 被其逆复盖。

sytrs!(uplo, A, ipiv, B)

求解方程 A*X=B 对于对称矩阵 A 使用的结果 赛特夫!. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。 B 被解决方案复盖 X.

hesv!(uplo, A, B) -> (B, A, ipiv)

找到解决方案 A*X=B 对于Hermitian矩阵 A. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。 B 被解决方案复盖 X. A 被它的一堆-考夫曼因子分解复盖。 ipiv 包含有关因子分解的透视信息。

hetrf!(uplo, A) -> (A, ipiv, info)

计算Hermitian矩阵的Bunch-Kaufman因式分解 A. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。

申报表 A,由因式分解复盖,一个枢轴向量 ipiv,以及错误代码 资料 其为非负整数。 如果 资料 是正的矩阵是奇异的,并且因式分解的对角线部分在位置上正好为零 资料.

hetrf!(uplo, A, ipiv) -> (A, ipiv, info)

计算Hermitian矩阵的Bunch-Kaufman因式分解 A. 如果 u=U,上半部分 A 被存储。 如果 上升=L,下半部分被存储。

申报表 A,由因式分解复盖,枢轴向量 ipiv,以及错误代码 资料 其为非负整数。 如果 资料 是正的矩阵是奇异的,并且因式分解的对角线部分在位置上正好为零 资料.

hetri!(uplo, A, ipiv)

计算Hermitian矩阵的逆 A 使用的结果 赛特夫!. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。 A 被其逆复盖。

hetrs!(uplo, A, ipiv, B)

求解方程 A*X=B 对于一个Hermitian矩阵 A 使用的结果 赛特夫!. 如果 u=U,上半部分 A 被存储。 如果 升=L,下半部分被存储。 B 被解决方案复盖 X.

syev!(jobz, uplo, A)

找到特征值(jobz=N)或特征值和特征向量(jobz=V)的对称矩阵 A. 如果 u=U,的上三角 A 被使用。 如果 升=L,的下三角 A 被使用。

syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) -> (W, Z)

找到特征值(jobz=N)或特征值和特征向量(jobz=V)的对称矩阵 A. 如果 u=U,的上三角 A 被使用。 如果 升=L,的下三角 A 被使用。 如果 范围=A,找到所有的特征值。 如果 范围=V,半开区间内的特征值 (vl,vu] 被发现了。 如果 范围=I,具有指数之间的特征值 伊尔iu 被发现了。 阿布斯托尔 可以设置为收敛的容差。

特征值在返回 W 和特征向量在 Z.

syevd!(jobz, uplo, A)

找到特征值(jobz=N)或特征值和特征向量(jobz=V)的对称矩阵 A. 如果 u=U,的上三角 A 被使用。 如果 升=L,的下三角 A 被使用。

sygvd!(itype, jobz, uplo, A, B) -> (w, A, B)

求广义特征值(jobz=N)或特征值和特征向量(jobz=V)的对称矩阵 A 和对称正定矩阵 B. 如果 u=U,的上部三角形 AB 被使用。 如果 升=L,的下部三角形 AB 被使用。 如果 itype=1,要解决的问题是 A*x=lambda*B*x. 如果 itype=2,要解决的问题是 A*B*x=lambda*x. 如果 itype=3,要解决的问题是 B*A*x=lambda*x.

bdsqr!(uplo, d, e_, Vt, U, C) -> (d, Vt, U, C)

计算双角矩阵的奇异值分解 d 在对角线和 e_ 在非对角线上。 如果 u=U, e_ 是超二角形。 如果 升=L, e_ 是细分。 也可以选择计算产品 Q'*C.

返回奇异值 d,和矩阵 C 用复盖 Q'*C.

bdsdc!(uplo, compq, d, e_) -> (d, e, u, vt, q, iq)

计算双角矩阵的奇异值分解 d 在对角线和 e_ 在非对角线上使用divide and conqueq方法。 如果 u=U, e_ 是超二角形。 如果 升=L, e_ 是细分。 如果 compq=N,只找到奇异值。 如果 compq=I,求出奇异值和向量。 如果 compq=P,奇异值和向量以紧凑形式找到。 仅适用于真实类型。

返回奇异值 d,如果 compq=P,紧凑奇异向量在 智商.

gecon!(normtype, A, anorm)

求矩阵的倒数条件数 A. 如果 normtype=I,条件数在无穷范数中找到。 如果 normtype=O1,条件编号在一个范数中找到。 A 必须是结果 盖特夫!阿诺姆 是规范的 A 在相关规范中。

gehrd!(ilo, ihi, A) -> (A, tau)

转换矩阵 A 到赫森伯格表格。 如果 A 是平衡与 格巴尔! 然后 劳工组织伊希 是输出 格巴尔!. 否则他们应该是 劳工组织=1ihi=尺寸(A,2). 头,头 包含因式分解的基本反射器。

orghr!(ilo, ihi, A, tau)

显式查找 Q,正交/酉矩阵从 哎呀!. 劳工组织, 伊希, A,而 头,头 必须对应于输入/输出到 哎呀!.

gees!(jobvs, A) -> (A, vs, w)

计算特征值(jobvs=N)或特征值和Schur向量(jobvs=V)矩阵 A. A 被其Schur形式复盖。

申报表 A, vs的 含所述两个载体,和 w,包含所述特征值。

gges!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

计算广义特征值,广义舒尔形式,左舒尔向量(jobsvl=V),或右Schur向量(jobvsr=V)的 AB.

广义特征值返回于 阿尔法贝塔. 左Schur向量返回在 vsl的 和右Schur向量返回在 噪音感应强的地方.

gges3!(jobvsl, jobvsr, A, B) -> (A, B, alpha, beta, vsl, vsr)

计算广义特征值,广义舒尔形式,左舒尔向量(jobsvl=V),或右Schur向量(jobvsr=V)的 AB 使用阻塞算法。 此功能需要LAPACK3.6.0。

广义特征值返回于 阿尔法贝塔. 左Schur向量返回在 vsl的 和右Schur向量返回在 噪音感应强的地方.

trexc!(compq, ifst, ilst, T, Q) -> (T, Q)
trexc!(ifst, ilst, T, Q) -> (T, Q)

重新排序Schur因子分解 T 矩阵的对角线块 T 带行索引 ifst 移动到行索引 伊尔斯特. 如果 compq=V,的Schur向量 Q 被重新排序。 如果 compq=N 它们没有被修改。 4-arg方法调用5-arg方法 compq=V.

trsen!(job, compq, select, T, Q) -> (T, Q, w, s, sep)
trsen!(select, T, Q) -> (T, Q, w, s, sep)

重新排序矩阵的Schur因子分解,并可选地找到倒数条件编号。 如果 工作=N,没有找到条件编号。 如果 工作=E,只找到这一簇特征值的条件编号。 如果 工作=V,只找到不变子空间的条件编号。 如果 工作=B 然后找到聚类和子空间的条件编号。 如果 compq=V 舒尔向量 Q 进行更新。 如果 compq=N 这些载体不被修饰。 选择 确定哪些特征值在聚类中。 3-arg方法调用5-arg方法 工作=Ncompq=V.

申报表 T, Q,重新排序的特征值在 w,特征值的簇的条件号 s,以及不变子空间的条件编号 九月.

tgsen!(select, S, T, Q, Z) -> (S, T, alpha, beta, Q, Z)

对广义Schur分解的向量重新排序。 选择 指定每个聚类中的特征值。

trsyl!(transa, transb, A, B, C, isgn=1) -> (C, scale)

求解西尔维斯特矩阵方程 A*X+/-X*B=比例*C 哪里 AB 均为准上三角形。 如果 transa=N, A 未被修改。 如果 transa=T, A 被换位。 如果 transa=C, A 是共轭转位的。 同样为 运输及工务局B. 如果 isgn=1,方程 A*X+X*B=比例*C 解决了。 如果 isgn=-1,方程 A*X-X*B=比例*C 解决了。

申报表 X (复盖 C)和 比例尺.

hseqr!(job, compz, ilo, ihi, H, Z) -> (H, Z, w)

计算所有特征值和(可选)还原为Hessenberg形式的矩阵的Schur因子分解。 如果 H 是平衡与 格巴尔! 然后 劳工组织伊希 是输出 格巴尔!. 否则他们应该是 劳工组织=1ihi=大小(H,2). 头,头 包含因式分解的基本反射器。

开发人员文档

matprod_dest(A, B, T)

返回适当的 抽象阵列 带元素类型 T 它可以用来存储 A*B.

兼容性

Compat此功能至少需要Julia1.11

haszero(T::Type)

返回是否类型 T 具有使用以下方法定义的唯一零元素 零(T). 如果一个类型 M 专业人员 零(M),它也可以选择设置 哈泽罗(M)真的. 默认情况下, 哈泽罗 被假定为 错误,在这种情况下,零元素是从值而不是类型推导出来的。

哈泽罗 是用于调度到优化路径的保守检查。 扩展它是可选的,但鼓励。


1. Chen,Y.,Davis,T.A.,Hager,W.W.,&Rajamanickam,S.(2008)。 算法887:CHOLMOD,Supernodal Sparse Cholesky Factorization和Update/Downdate。 ACM反式。 数学。 软件。, 35(3). doi:10.1145/1391989.1391995
2. Davis,Timothy A.,&Hager,W.W.(2009)。 稀疏Cholesky更新/Downdate和三角求解中的动态超新星。 ACM反式。 数学。 软件。, 35(4). doi:10.1145/1462173.1462176
3. Foster,L.V.,&Davis,T.A.(2013). 算法933:使用SuitesparseQR可靠计算数值秩、空空基、伪逆解和基本解。 ACM反式。 数学。 软件。, 40(1). doi:10.1145/2513109.2513116