18.2基本矩阵函数

 
: AA = balance (A)
: AA = balance (A, opt)
: [DD, AA] = balance (A, opt)
: [D, P, AA] = balance (A, opt)
: [CC, DD, AA, BB] = balance (A, B, opt)

平衡矩阵A以减少未来计算中的数值误差。

计算AA = DD \ A * DD,这里的AA 是一个矩阵,其行规范形和列规范形的大小大致相等,并且DD = P * D,其中P是一个排列矩阵,并且D是二次幂的对角矩阵。这允许在不进行舍入的情况下计算平衡。特征值计算的结果通常通过首先进行平衡来改进。

如果指定两个输出值,balance返回对角线D和排列P分别作为向量。在这种情况下,DD = eye(n)(:,P) * diag (D)这里的n是矩阵大小。

如果指定四个输出值,则计算AA = CC*A*DDBB = CC*B*DD,其中AABB具有大小大致相同的非零元素,并且CCDD是置换对角矩阵asinDD对于代数特征值问题。

特征值平衡参数opt可以是以下其中之一:

"noperm", "S"

仅缩放;不排列。

"noscal", "P"

仅排列;不缩放。

广告

代数特征值平衡使用标准LAPACK 子程序。

广义特征值问题平衡使用Ward算法(SIAM Journal on Scientific and Statistical Computing, 1981)。

广告
 
: bw = bandwidth (A, type)
: [lower, upper] = bandwidth (A)

计算A的带宽.

这里的type自变量是字符串下带宽"lower"和上带宽"upper"。如果没有type被指定则同时返回A的下带宽和上带宽.

矩阵的下/上带宽是具有非零项的下对角线/上对角线的数量。

详见: isbanded, isdiag, istril, istriu.

广告
 
: c = cond (A)
: c = cond (A, p)

计算矩阵的p-范数条件数。

cond (A)定义为norm (A, p) * norm (inv (A), p).

默认情况下,p = 2这意味着(相对较慢的)奇异值分解。其他可能的选择包括p = 1, Inf, "fro"通常更快。为了充分讨论可能p值,详见norm.

当矩阵元素发生微小变化时,矩阵的条件数量化了矩阵转换运算的灵敏度。理想情况下,条件数将接近1。当数字较大时,这表示较小的变化(如下溢或舍入误差)将在结果输出中返回较大的变化。在这种情况下,数值计算的求解结果不太可能是准确的。

详见: condest, rcond, condeig, norm, svd.

广告
 
: c = condeig (a)
: [v, lambda, c] = condeig (a)

计算矩阵相对于特征值的条件数。

条件数是左右特征向量之间夹角余弦的倒数;如果条件数取值较大则表明矩阵具有多个不同的特征值。

输入的a必须是一个数字方阵。

输出为:

用例

a = [1, 2; 3, 4];
c = condeig (a)
  ⇒ c =
       1.0150
       1.0150

详见: eig, cond, balance.

广告
 
: d = det (A)
: [d, rcond] = det (A)

计算A的行列式.

如果指定rcond,则也会返回倒数条件数的估计值。

编程说明:来自LAPACK的子程序用于完整矩阵;UMFPACK的代码用于稀疏矩阵。

行列式不应用于检查矩阵的奇异性。为此,请使用任何条件编号函数:cond,condest, rcond.

详见: cond, condest, rcond.

广告
 
: lambda = eig (A)
: lambda = eig (A, B)
: [V, lambda] = eig (A)
: [V, lambda] = eig (A, B)
: [V, lambda, W] = eig (A)
: [V, lambda, W] = eig (A, B)
: […] = eig (A, balanceOption)
: […] = eig (A, B, algorithm)
: […] = eig (…, eigvalOption)

计算特征值(lambda);可选矩阵的右特征向量(V)、左特征向量(W)或矩阵对。

标志位balanceOption可以是以下其中之一:

"balance" (default)

启用初步平衡

广告
"nobalance"

禁用初步平衡

广告

标志位eigvalOption可以是以下其中之一:

"matrix"

返回对角矩阵中的特征值。(如果需要2或3个返回参数,则为默认)

广告
"vector"

返回列向量中的特征值。(如果仅指定1个返回参数,则为默认, 例如, lambda = eig (A))

广告

标志位algorithm可以是以下其中之一:

"chol"

使用B的Cholesky因子分解。(当A是对称的(埃尔米特)并且B对称(埃尔米特)正定时默认使用)

广告
"qz"

使用QZ算法。(当AB不对称时默认使用)

广告
no flagcholqz
both are symmetric "chol" "chol" "qz"
at least one is not symmetric "qz" "qz" "qz"

返回的特征值eig没有顺序。

详见: eigs, svd.

广告
 
: G = givens (x, y)
: [c, s] = givens (x, y)

计算Givens旋转矩阵G.

Givens矩阵是一个2乘2的正交矩阵

G = [ c , s
     -s', c]

使得

G * [x; y] = [*; 0]

具有xy标量。

如果指定了两个输出参数,则返回因子cs而不是Givens旋转矩阵。

例如

givens (1, 1)
   ⇒   0.70711   0.70711
       -0.70711   0.70711

注:Givens矩阵表示二维平面的逆时针旋转,可用于在完全分解之前将零引入矩阵。

详见: planerot, qr.

广告
 
: S = gsvd (A, B)
: [U, V, X, C, S] = gsvd (A, B)
: [U, V, X, C, S] = gsvd (A, B, 0)

计算的广义奇异值分解(A, B).

广义奇异值分解从以下关系式定义:

A = U*C*X'
B = V*S*X'
C'*C + S'*S = eye (columns (A))

函数gsvd通常只返回广义奇异值的向量sqrt (diag (C'*C) ./ diag (S'*S))如果要求五个返回值,它还计算U、V、X和C。

如果存在可选的第三输入,gsvd构造“economy-sized”分解,其中U, V的列数和C, S的行数小于或等于A的列数。此参数尚未支持。

编程注意:代码是LAPACK的dggsvd和zggsvd子程序的wrapper。如果矩阵AB二者都不满秩,那么LAPACK将返回不正确的因式分解。程序员应该避免这种组合。

详见: svd.

广告
 
: [G, y] = planerot (x)

计算二元素列向量的Givens旋转矩阵x.

Givens矩阵是一个2乘2的正交矩阵

G = [ c , s
     -s', c]

使得

y = G * [x(1); x(2)] ≡ [*; 0]

注:Givens矩阵表示二维平面的逆时针旋转,可用于在完全分解之前将零引入矩阵。

详见: givens, qr.

广告
 
: x = inv (A)
: [x, rcond] = inv (A)
: […] = inverse (…)

计算平方矩阵的逆A.

如果指定,返回倒数条件数的估计值,否则如果倒数条件数很小,则警告存在病态矩阵。

一般来说,最好避免直接计算矩阵的逆。例如,求解方程组既更快又更准确(A*x= b具有y = A \ b而不是y = inv (A) * b.

如果用稀疏矩阵调用,那么通常x将是需要显著更多存储的满秩矩阵。如果可能的话,避免形成天冬氨酸基质的反序。

编程说明:inverse是的别名inv并且可以互换使用。

详见: ldivide, rdivide, pinv.

广告
 
: x = linsolve (A, b)
: x = linsolve (A, b, opts)
: [x, R] = linsolve (…)

求解线性系统A*x = b.

在没有参数的情况下,此函数等效于左除法运算符(x = A \ b) 或矩阵左除法函数(x = mldivide (A, b)) .

Octave通常考察矩阵的性质A并选择与矩阵最匹配的解算器。通过传递结构体optslinsolve你可以直接通知Octave矩阵A在这种情况下,Octave将跳过矩阵检查,直接进行求解线性系统。

警告如果矩阵A中没有列出的属性opts结构体,则结果将不准确,并且将给出无警告。当有疑问时,让Octave检查矩阵并选择合适的解算器,因为这一步骤只需很少的时间,并且结果会被缓存,因此每个线性系统只执行一次。

可能的opts字段(将值设置为true/false):

LT

A是下三角矩阵

广告
UT

A是上三角矩阵

广告
UHESS

A是上海森堡(目前没有区别)

广告
SYM

A是对称的或复数的埃尔米特人(目前没有区别)

广告
POSDEF

A是正定的

广告
RECT

A一般为矩形(目前没有区别)

广告
TRANSA

解决A'*x = b如果为true而不是A*x = b

广告

可选的第二个输出R是的逆条件数A(如果矩阵是奇异的,则为零)。

详见: mldivide, matrix_type, rcond.

广告
 
: type = matrix_type (A)
: type = matrix_type (A, "nocompute")
: A = matrix_type (A, type)
: A = matrix_type (A, "upper", perm)
: A = matrix_type (A, "lower", perm)
: A = matrix_type (A, "banded", nl, nu)

识别矩阵类型或将矩阵符号为特定类型。

这允许更快速地求解线性方程,包括A要执行。

使用单个参数调用,matrix_type返回矩阵的类型并将其缓存以备将来使用。

使用多个参数调用,matrix_type允许定义矩阵的类型。

如果参数"nocompute"如果给定,函数将不会尝试猜测类型,如果它仍然未知。这对于调试非常有用。

可能的矩阵类型取决于矩阵是满的还是稀疏的,可以是以下类型之一

"unknown"

删除任何以前缓存的矩阵类型,并将类型符号为未知。

广告
"full"

将矩阵符号为已满。

广告
"positive definite"

可能的完全正定矩阵。

广告
"diagonal"

对角矩阵。(仅限于稀疏矩阵)

广告
"permuted diagonal"

置换对角矩阵。置换不需要具体指示,因为矩阵的结构体明确给出了这一点。(仅限稀疏矩阵)

广告
"upper"

上部三角形。如果可选的第三个参数perm假设矩阵是一个置换的上三角矩阵,其置换从向量定义perm.

广告
"lower"

下部三角形。如果可选的第三个参数perm假设矩阵是一个排列的下三角,其排列从向量定义perm.

广告
"banded"
"banded positive definite"

带大小为的带状矩阵nl对角线以下,以及nu高于它。如果nlnu为1,则矩阵是三对角的,并用专用代码处理。此外,矩阵可以被符号为正定矩阵。(仅限稀疏矩阵)

广告
"singular"

假设矩阵是奇异的,并将用最小范数解进行处理。

广告

请注意,矩阵类型将在第一次尝试求解线性方程时自动查找,该线性方程涉及A因此matrix_type仅用于给出矩阵类型的Octave提示。不正确地定义矩阵类型将导致线性方程组解的不正确结果;完全是用户的责任以正确地识别矩阵类型。

此外,正定性检验是对具有实正对角线的埃尔米特矩阵的低成本检验。这并不能保证矩阵是正定的,而只能保证它是一个可能的候选者。当矩阵被因子分解时,首先尝试Cholesky因子分解,如果失败,则用LU因子分解处理矩阵。一旦矩阵被因子分解,matrix_type将返回矩阵的正确分类。

广告
 
: n = norm (A)
: n = norm (A, p)
: n = norm (A, p, opt)

计算矩阵的p范数A.

如果没有给出第二个自变量,则使用p = 2 。

如果A是矩阵(或稀疏矩阵):

p = 1

1-范数,的绝对值的最大列和A.

广告
p = 2

的最大奇异值A.

广告
p = Inf or "inf"

无穷范数,的绝对值的最大行和A.

广告
p = "fro"

的Frobenius范数A,sqrt (sum (diag (A' * A))).

广告
other p, p > 1

最大norm (A*x, p)使得norm (x, p) == 1

广告

如果A是向量或标量:

p = Inf or "inf"

max (abs (A)).

广告
p = -Inf

min (abs (A)).

广告
p = "fro"

A的Frobenius范数, sqrt (sumsq (abs (A))).

广告
p = 0

汉明范数——非零元素的数量。

广告
other p, p > 1

A的p-范数, (sum (abs (A) .^ p)) ^ (1/p).

广告
other p p < 1

如上所定义的p-伪范数。

广告

如果opt是值"rows",将每一行视为一个向量,并计算其范数。结果将作为列向量返回。类似地,如果opt"columns""cols"然后计算每列的范数并返回一个行向量。

详见: normest, normest1, vecnorm, cond, svd.

广告
 
: Z = null (A)
: Z = null (A, tol)

返回正交基Z的空空间的A.

空空间的维度Z取为的奇异值的个数A不大于tol。如果参数tol缺少,则计算为

max (size (A)) * max (svd (A, 0)) * eps

详见: orth, svd.

广告
 
: B = orth (A)
: B = orth (A, tol)

返回的范围空间的正交基A.

范围空间的维数取为的奇异值的个数A大于tol。如果参数tol缺失,计算为

max (size (A)) * max (svd (A)) * eps

详见: null.

广告
 
: [y, h] = mgorth (x, v)

正交化给定的列向量x关于包括的列的一组通式向量v使用改进的Gram-Schmidt方法。

在退出时,y是单位向量,使得:

  norm (y) = 1
  v' * y = 0
  x = [v, y]*h'
广告
 
: B = pinv (A)
: B = pinv (A, tol)

返回的Moore Penrose伪逆A.

奇异值小于tol被忽略。

如果省略了第二个参数,则将其视为

tol = max ([rows(x), columns(x)]) * norm (x) * eps

详见: inv, ldivide.

广告
 
: k = rank (A)
: k = rank (A, tol)

计算矩阵的秩A,使用奇异值分解。

秩取为的奇异值的个数A大于指定误差范围tol.如果第二个参数成立,则视为

tol = max (size (A)) * sigma(1) * eps;

这里的eps是机器精度和sigma(1)的最大奇异值A.

矩阵的秩是线性独立的行或列的数量,等于行和列空间的维数。函数orth可以用于计算列空间的正交基。

用于测试系统A*x = b线性方程是可解的,可以使用

rank (A) == rank ([A b])

在这种情况下,x = A \ b找到特定的解决方案x。一般的解决方案是x加上矩阵的零空间A.函数null可以用于计算整个空间的基。

用例

A = [1 2 3
     4 5 6
     7 8 9];
rank (A)
  ⇒ 2

在这里的例子中,线性独立行的数量只有2,因为最后一行是前两行的线性组合:

A(3,:) == -A(1,:) + 2 * A(2,:)

详见: null, orth, sprank, svd, eps.

广告
 
: c = rcond (A)

计算从LAPACK返回的倒数条件数的1-范数估计.

如果矩阵条件数良好,那么c将接近1,如果矩阵条件数较差,则将接近0。

矩阵A不得稀疏。如果矩阵是稀疏的,那么应该改为使用condest (A)rcond (full (A))

详见: cond, condest.

广告
 
: t = trace (A)

计算的轨迹A,沿主对角线的元素之和。

实现非常简单:sum (diag (A)).

详见: eig.

广告
 
: r = rref (A)
: r = rref (A, tol)
: [r, k] = rref (…)

返回的缩减行阶梯形式A.

tol默认为eps * max (size (A)) * norm (A, inf).

可选的返回参数k包含“约束变量”的向量,这些列已经进行了消除。

广告
 
: n = vecnorm (A)
: n = vecnorm (A, p)
: n = vecnorm (A, p, dim)

返回数组元素的向量p范数A按尺寸dim.

向量的p范数定义为

p-norm (A, p) = (sum (abs (A) .^ p)) ^ (1/p)

输入p必须是正标量。如果省略,则默认为2(欧几里得范数或距离)。p的其他特殊值可以为1(曼哈顿范数,绝对值之和)和Inf(最大元素的绝对值)。

输入dim指定函数操作的数组的维度,并且必须是正整数。如果省略,则使用第一个非奇异维度。

详见: norm.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2