18.3矩阵分解

 
: R = chol (A)
: [R, p] = chol (A)
: [R, p, Q] = chol (A)
: [R, p, Q] = chol (A, "vector")
: [L, …] = chol (…, "lower")
: [R, …] = chol (…, "upper")

计算上Cholesky因子,R,即A的实对称矩阵或复埃尔米特正定矩阵.

上Cholesky因子R通过使用矩阵的上三角部分来计算A,定义为

R' * R = A.

调用chol使用可选"upper"标志位具有相同的行为。反之,使用可选"lower"标志位chol返回使用矩阵的下三角部分计算的下三角因子分解A,使得

L * L' = A.

使用一个输出参数调用chol如果矩阵失败A不是正定的。注意,如果矩阵A不是实对称或复埃尔米特,则下三角部分被认为是上三角部分的(复共轭)转置,或反之亦然,给定"lower"标志位

使用两个或多个输出参数调用p符号矩阵是否A是正定的并且chol不会失败。p为0表示矩阵A是正定的并且R给出了因子分解。否则p将具有正值。

如果使用三个输出参数矩阵调用A必须是稀疏的,并且将保持稀疏性的行/列置换应用于矩阵A在因子分解之前。那是R是的因子分解A(Q,Q)使得

R' * R = Q' * A * Q.

保持稀疏性的置换通常以矩阵形式返回。然而,给定可选标志位"vector", Q将变为向量,使得

R' * R = A(Q, Q).

一般来说,较低的三角因子分解对于稀疏矩阵来说明显更快。

详见: hess, lu, qr, qz, schur, svd, ichol, cholinv, chol2inv, cholupdate, cholinsert, choldelete, cholshift.

广告
 
: Ainv = cholinv (A)

计算对称正定矩阵的逆A使用Cholesky因子分解。

详见: chol, chol2inv, inv.

广告
 
: Ainv = chol2inv (R)

从Cholesky分解中反演一个对称的正定方阵,R.

请注意R应该是具有正对角化元素的上三角矩阵。chol2inv (U)提供inv (R'*R)但比使用inv快得多.

详见: chol, cholinv, inv.

广告
 
: [R1, info] = cholupdate (R, u, op)

向上或向下更新Cholesky因子分解。

给定一个上三角矩阵R和列向量u,尝试确定另一个上三角矩阵R1使得

如果op"-", info设置为

如果info如果不存在,则在情况1和情况2中会打印错误消息。

详见: chol, cholinsert, choldelete, cholshift.

广告
 
: R1 = cholinsert (R, j, u)
: [R1, info] = cholinsert (R, j, u)

更新给定行或列的Cholesky因子分解以插入原始因子矩阵。

给定实对称或复埃尔米特正定矩阵的Cholesky因子分解A= R’*R , R上三角,返回的Cholesky因子分解A1,其中A1(p,p)=A ,A1(:,j)=A1(j,:)'=u ,andp=[1:j-1,j+1:n+1] ,.u(j) ,应该是正的。

在返回时,info设置为

如果info如果不存在,则在情况1和情况2中会打印错误消息。

详见: chol, cholupdate, choldelete, cholshift.

广告
 
: R1 = choldelete (R, j)

更新Cholesky因子分解,给定要从原始因子矩阵中删除的行或列。

给定实对称或复埃尔米特正定矩阵的Cholesky因子分解A= R’*R , R上三角,返回A(p,p)的Cholesky因子分解 ,其中p=[1:j-1,j+1:n+1] ,.

详见: chol, cholupdate, cholinsert, cholshift.

广告
 
: R1 = cholshift (R, i, j)

更新Cholesky因子分解,给定要在原始因子矩阵中移动的列的范围。

给定实对称或复埃尔米特正定矩阵的Cholesky因子分解A= R’*R , R上三角,返回的Cholesky因子分解A(p,p) ,其中p是置换
p = [1:i-1, circshift(i:j, 1), j+1:n] if i < j

p = [1:j-1, circshift(j:i,-1), i+1:n] if j < i.

详见: chol, cholupdate, cholinsert, choldelete.

广告
 
: H = hess (A)
: [P, H] = hess (A)

计算矩阵的Hessenberg分解A.

Hessenberg分解是P * H * P' = A这里的P是一个平方次矩阵(P' * P = I,使用复共轭转置)且H是上海森堡(H(i, j) = 0 forall i > j+1).

Hessenberg分解通常被用作单位值计算的第一步,但也有其他应用(见Golub、Nash和Van Loan,IEEE Transactions on Automatic Control,1979)。

详见: eig, chol, lu, qr, qz, schur, svd.

广告
 
: [L, U] = lu (A)
: [L, U, P] = lu (A)
: [L, U, P, Q] = lu (S)
: [L, U, P, Q, R] = lu (S)
: […] = lu (S, thresh)
: y = lu (…)
: […] = lu (…, "vector")

计算的LU分解A.

如果A满秩,则执行LAPACK 的子程序,如果A是稀疏的,那么使用UMFPACK

根据可选的返回值,结果以置换的形式返回P例如,给定矩阵A = [1, 2; 3, 4],

[L, U, P] = lu (A)

返回

L =

  1.00000  0.00000
  0.33333  1.00000

U =

  3.00000  4.00000
  0.00000  0.66667

P =

  0  1
  1  0

矩阵不需要是方阵。

当用两个或三个返回变量且传入稀疏矩阵调用时,lu不尝试执行保持稀疏性的列置换。 当用四个返回变量调用时,返回保持稀疏性的列转换Q,使得P * A * Q = L * U。这是首选的调用lu的方式,如果传入稀疏矩阵。

当用五个返回变量且传入稀疏矩阵调用时,lu尝试使用比例因子R在输入矩阵上,使得P * (R \ A) * Q = L * U。这通常导致更稀疏和更稳定的因子分解。

一个额外的输入参数thresh可以给出定义枢轴阈值的。thresh可以是标量,在这种情况下,它定义UMFPACK对称和非对称情况下的枢轴误差范围。如果thresh是一个2元素向量,那么第一个元素定义了不对称的枢轴误差范围UMFPACK且第二个元素定义了对称策略。默认情况下,spparms定义的值使用([0.1,0.001])。

给定字符串参数"vector", lu返回的值PQ作为向量值,A(P,:) = L * UR(P,:) * A(:,Q) = L * U.

当用两个返回变量调用时,返回上三角矩阵和下三角矩阵的置换形式,使得A = L * U。当用一个返回变量y调用时,返回从LAPACK 子程序返回的矩阵。如果输入矩阵是稀疏的,那么矩阵L嵌入到U以给出相似于满秩形式的返回值。对于满秩矩阵和稀疏矩阵,lu丢失置换信息。

详见: luupdate, ilu, chol, hess, qr, qz, schur, svd.

广告
 
: [L, U] = luupdate (L, U, x, y)
: [L, U, P] = luupdate (L, U, P, x, y)

给定实矩阵或复矩阵的LU因子分解A= L*U , L为下梯形矩阵且U为上梯形矩阵,返回的LU分解A+ x*y.’ ,这里的xy列向量(秩1更新)或列数相等的矩阵(秩k更新)。

可选地,可以通过提供行置换(枢轴)矩阵来使用行枢轴更新P; 在这种情况下,将返回更新的置换矩阵。请注意,如果L, U, P是一个枢轴LU因子分解,从lu:

[L, U, P] = lu (A);

A+x*y.'的因子分解可以作为

[L1, U1] = lu (L, U, P*x, y)

[L1, U1, P1] = lu (L, U, P, x, y)

第一种形式使用非点动算法,速度更快,但稳定性较差。第二种形式使用了一种较慢的数据透视算法,这更具稳定性。

矩阵情况作为秩1更新的序列来实现;因此,对于足够大的k,从头开始重新计算因子分解将更快、更准确。

详见: lu, cholupdate, qrupdate.

广告
 
: [Q, R] = qr (A)
: [Q, R, P] = qr (A)
: X = qr (A) # non-sparse A
: R = qr (A) # sparse A
: X = qr (A, B) # sparse A
: [C, R] = qr (A, B)
: […] = qr (…, "econ")
: […] = qr (…, "vector")
: […] = qr (…, "matrix")
: […] = qr (…, 0)

计算A的QR因子分解,使用标准LAPACK 子程序。

QR因子分解是

Q * R = A

这里的Q是正交矩阵,并且R是上三角矩阵。

例如,给定矩阵A = [1, 2; 3, 4],

[Q, R] = qr (A)

返回

Q =

  -0.31623  -0.94868
  -0.94868   0.31623

R =

  -3.16228  -4.42719
   0.00000  -0.63246

相乘后返回原始矩阵

Q * R
  ⇒
     1.0000   2.0000
     3.0000   4.0000

如果只指定一个返回值,则为R(如果A稀疏),或者X,使得R = triu (X)(如果A满秩)。(注意:与大多数命令不同,当指定多个值时,单个返回值不是第一个返回值。)

如果第三个输出P被指定,则qr计算置换QR因子分解

Q * R = A * P

这里的Q是正交矩阵,R是上三角矩阵,并且P是置换矩阵。

如果A是稠密的,置换QR因子分解具有R的对角项按递减幅度排序的额外性质。换句话说,abs (diag (R))将按从大到小的顺序排列。

如果A是稀疏的,P是列的填充减少排序A。在这种情况下,的对角线分量R不是按大小递减排序的。

例如,给定矩阵A = [1, 2; 3, 4],

[Q, R, P] = qr (A)

返回

Q =

  -0.44721  -0.89443
  -0.89443   0.44721

R =

  -4.47214  -3.13050
   0.00000   0.44721

P =

   0  1
   1  0

如果输入矩阵A是稀疏的,稀疏的QR因子分解使用SPQRCXsparse(如果SPQR不可用)。因为矩阵Q通常是一个满秩矩阵,建议只指定一个返回值R。在这种情况下,计算可避免构造Q且返回稀疏R使得R = chol (A' * A).

如果A是稠密的,额外传入一个矩阵B并指定两个返回值,此时qr返回C,这里的C = Q' * B。这允许将最小二乘近似A \ B计算为

[C, R] = qr (A, B)
X = R \ C

如果A是稀疏MxN矩阵,额外传入一个矩阵B,则可能有一个或两个返回值。如果一个返回值X被指定并且M<N,则XA \ B ,的最小2-范数解。如果M>=N,XA \ B ,的最小二乘逼近。如果指定两个返回值,CR与稠密情况下的含义相同(C稠密R稀疏)。应该首选带有一个返回参数的版本,因为它使用较少的内存,并且可以更好地处理缺秩矩阵。

如果最后一个参数是字符串"vector"然后P是变异向量(的列A)而不是置换矩阵。在这种情况下,定义关系是:

Q * R = A(:, P)

然而,默认情况是返回一个置换矩阵,这可以通过使用的最后一个参数来明确指定"matrix".

当可选参数是字符串"econ"时,返回经济因子。如果原始矩阵A具有大小MxN和M>N,则经济因子分解将仅计算R中的N行和Q中的N列并省略R中的零.如果M≤N,则经济因子分解和标准因子分解之间没有区别。

如果可选参数是数字0,那么qr的行为就像"econ""vector"参数均给定一样。 注意:这个语法仍然被接受,但不推荐而且将来可能被移除。改用"econ"

背景:QR因子分解在最小二乘问题的求解中有应用

min norm (A*x - b)

用于超定方程组(即,A是高而薄的矩阵)。

置换QR因子分解[Q, R, P] = qr (A)允许构造span (A)的正交基.

详见: chol, hess, lu, qz, schur, svd, qrupdate, qrinsert, qrdelete, qrshift.

广告
 
: [Q1, R1] = qrupdate (Q, R, u, v)

在给定更新向量或矩阵的情况下更新QR因子分解。

给定实矩阵或复矩阵的QR因子分解A= Q*R , Q为酉矩阵且R为上梯形矩阵,返回的QR因子分解A+ u*v ,这里的uv是列向量(秩1更新)或具有相等列数的矩阵(秩k更新)。请注意,后一种情况是作为一系列的rank-1更新实现的;因此,对于足够大的k,从头开始重新计算因子分解将更快、更准确。

所提供的QR因子分解可以是完全的(Q是方阵)或经济的(R是方阵)。

详见: qr, qrinsert, qrdelete, qrshift.

广告
 
: [Q1, R1] = qrinsert (Q, R, j, x, orient)

更新给定行或列的QR因子分解以插入原始因子矩阵。

给定实矩阵或复矩阵的QR因子分解A= Q*R , Q为酉矩阵且R为上梯形矩阵,返回[A(:,1:j-1)xA(:,j:n)]的QR因子分解 ,这里的u是要插入的列向量A如果orient"col"),或[A(1:j-1,:);x;A(:,j:n)]的QR因子分解 ,这里的x是要插入的行向量A如果orient"row").

的默认值orient"col"如果orient"col", u可以是矩阵,并且j矩阵QR因子分解的一个索引向量B使得B(:,j) ,给予u和B(:,j) = [] ,给予A注意,后一种情况是作为k个插入的序列来实现的;因此,对于足够大的k,从头开始计算因子分解将更快、更准确。

如果orient"col",所提供的QR因子分解可以是完全的(Q是方阵)或经济的(R是方阵)。

如果orient"row",需要完全因子分解。

详见: qr, qrupdate, qrdelete, qrshift.

广告
 
: [Q1, R1] = qrdelete (Q, R, j, orient)

更新给定行或列的QR因子分解以从原始因子矩阵中删除。

给定实矩阵或复矩阵A= Q*R 的QR因子分解, Q为酉矩阵且R为上梯形矩阵,返回[A(:,1:j-1),U,A(:,j:n)]的QR因子分解 ,这里的u是要插入的列向量A,如果orient"col"),或[A(1:j-1,:);X;A(:,j:n)]的QR因子分解 ,这里的x是行,orient"row").orient的默认值是"col".

如果orient"col", j可以是导致矩阵的QR因子分解的索引向量B使得A(:,j) = [] ,给予B。请注意,后一种情况是通过删除k个序列来实现的;因此,对于足够大的k,从头开始重新计算因子分解将更快、更准确。

如果orient"col",所提供的QR因子分解可以是完全的(Q是方阵)或经济的(R是方阵)。

如果orient"row",需要完全因子分解。

详见: qr, qrupdate, qrinsert, qrshift.

广告
 
: [Q1, R1] = qrshift (Q, R, i, j)

更新QR因子分解,给定要在原始因子矩阵中移动的列的范围。

给定实矩阵或复矩阵的QR因子分解A= Q*R , Q为酉矩阵且R为上梯形矩阵,返回的QR分解A(:,p) ,其中p是置换
p = [1:i-1, circshift(i:j, 1), j+1:n] if i < j

p = [1:j-1, circshift(j:i,-1), i+1:n] if j < i.

详见: qr, qrupdate, qrinsert, qrdelete.

广告
 
: [AA, BB, Q, Z, V, W] = qz (A, B)
: [AA, BB, Q, Z, V, W] = qz (A, B, opt)

计算广义特征值问题的QZ分解。

广义特征值问题定义为

A x=lambda B x

函数有两种调用形式:

  1. [AA, BB, Q, Z, V, W] = qz (A, B)

    计算复QZ分解、广义特征向量和广义特征值。

    
    AA = Q * A * Z, BB = Q * B * Z
    A * V * diag (diag (BB)) = B * V * diag (diag (AA))
    diag (diag (BB)) * W' * A = diag (diag (AA)) * W' * B
    
    

    具有AABB上部三角形,以及QZ单一的。矩阵VW分别包含右广义特征向量和左广义特征向量。

  2. [AA, BB, Q, Z, V, W] = qz (A, B, opt)

    这里的opt自变量必须等于"real""complex"。如果等于"complex",则此调用形式等效于第一个只有两个inputarguments的调用形式。

    如果opt等于"real",则计算实QZ分解。特别地,AA仅保证是对角线上具有1乘1和2乘2块的准上三角矩阵,并且QZ是正交的。只有当AA是上三角的(即,当所有广义特征值都是实数时,在这种情况下实数和复数QZ重合)。

注意qz执行置换平衡,但不执行缩放(详见balance),这可能导致比eig。选择输出参数的顺序是为了与兼容MATLAB.

对于特征值, 用 ordeig 函数基于 结果矩阵 AABB 计算.

详见: eig, gsvd, balance, chol, hess, lu, qr, qzhess, schur, ordeig.

广告
 
: [aa, bb, q, z] = qzhess (A, B)

计算矩阵笔的Hessenberg三角分解(A, B),返回aa = q * A * z,bb = q * B * z具有qz正交的。

例如

[aa, bb, q, z] = qzhess ([1, 2; 3, 4], [5, 6; 7, 8])
  ⇒ aa =
      -3.02244  -4.41741
       0.92998   0.69749
  ⇒ bb =
      -8.60233  -9.99730
       0.00000  -0.23250
  ⇒ q =
      -0.58124  -0.81373
      -0.81373   0.58124
  ⇒ z =
     Diagonal Matrix
       1   0
       0   1

Hessenberg三角分解是Moler和Stewart的QZ分解算法的第一步。

算法取自Golub和Van Loan,Matrix Computations, 2nd edition.

详见: lu, chol, hess, qr, qz, schur, svd.

广告
 
: S = schur (A)
: S = schur (A, "real")
: S = schur (A, "complex")
: S = schur (A, opt)
: [U, S] = schur (…)

计算的Schur分解A.

正方阵的Schur分解A定义为

S = U' * A * U

这里的U是酉矩阵(U'* U是身份)和S是上三角矩阵。的特征值AS)的对角线元素S.如果矩阵A是实,那么计算实Schur分解,其中矩阵U是正交的,并且S是块的上三角矩阵,块的大小最大2 x 2沿着对角线。

实数矩阵的默认值是实数Schur分解。可以通过传递标志位来强制进行复数分解"complex".

根据的值,特征值可选opt按对角线排序:

opt = "a"

将具有负实部的特征值移动到S的前导块.助记符:"a"是代数Riccati方程,这种排序是有用的。

广告
opt = "d"

将幅度小于1的特征值移动到S的前导块.助记符:"d"是离散代数Riccati方程,这种排序是有用的。

广告
opt = "u"

无序。没有特定的特征值排序(默认)。

广告

U的前k列始终跨越A-不变量空间,对应于Sk前导特征值.

详见: rsf2csf, ordschur, ordeig, lu, chol, hess, qr, qz, svd, eig.

广告
 
: [U, T] = rsf2csf (UR, TR)

转换实的伪三角Schur形式TR到复上三角Schur形式T.

请注意,以下关系成立:

UR * TR * UR' = U * T * U'U' * U是单位矩阵I。

还要注意的是UT不是唯一的。

详见: schur.

广告
 
: [UR, SR] = ordschur (U, S, select)

重排序实Schur因子分解(U,S)使用获得schur函数,使得所选择的特征值出现在伪三角Schur矩阵的左上对角线块中。

逻辑向量select沿S的对角线指定所选特征值。

例如,给定矩阵A = [1, 2; 3, 4],及其Schurdecomposition

[U, S] = schur (A)

返回

U =

  -0.82456  -0.56577
   0.56577  -0.82456

S =

  -0.37228  -1.00000
   0.00000   5.37228

可以对分解进行重新排序,使正特征值位于左上角,方法如下:

[U, S] = ordschur (U, S, [0,1])

详见: schur, ordeig, ordqz.

广告
 
: [AR, BR, QR, ZR] = ordqz (AA, BB, Q, Z, keyword)
: [AR, BR, QR, ZR] = ordqz (AA, BB, Q, Z, select)

重新排序广义特征值问题的QZ分解。

广义特征值问题定义为

A x=lambdaB x

它的广义Schur分解是使用qz算法:

[AA, BB, Q, Z] = qz (A, B)

这里的AA, BB, QZ满足:


AA = Q * A * Z, BB = Q * B * Z

这里的ordqz函数计算酉变换QRZR使得AABB的对角线上的特征值的阶已更改。得到的重新排序矩阵ARBR满足:


AR = QR * A * ZR, BR = QR * B * ZR

函数可以用调用keyword选择的左上角块中的特征值的自变量ARBR以以下方式:

"S", "udi"

small:前导块具有所有|lambda1.

广告
"B", "udo"

big:领先区块拥有所有|lambda| ≥ 1

广告
"-", "lhp"

负实部:前导块在开左半平面上具有所有特征值

广告
"+", "rhp"

非负实部:前导块在闭右半平面上具有所有特征值

广告

如果指定一个逻辑向量select而不指定关键字,ordqz函数对所有特征值k进行重新排序到左侧块使得select(k)为真。

注意:关键字与qr中的关键字兼容.

详见: eig, ordeig, qz, schur, ordschur.

广告
 
: lambda = ordeig (A)
: lambda = ordeig (A, B)

按伪三角矩阵在矩阵中的出现顺序返回其特征值A.

伪三角矩阵A通常是Schur分解的结果。如果传入第二个参数B,则该对A, B的广义特征值按矩阵A-lambda*B出现的顺序返回。这对A, B通常是QZ分解的结果。

详见: ordschur, ordqz, eig, schur, qz.

广告
 
: angle = subspace (A, B)

确定矩阵扫描的两个子空间之间AB的最大主角.

广告
 
: s = svd (A)
: [U, S, V] = svd (A)
: [U, S, V] = svd (A, "econ")
: [U, S, V] = svd (A, 0)

计算的奇异值分解A.

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

A = U*S*V'

函数svd通常只返回奇异值的向量。当使用三个返回值调用时,它计算U, SV,例如

svd (hilb (3))

返回

ans =

  1.4083189
  0.1223271
  0.0026873

[u, s, v] = svd (hilb (3))

返回

u =

  -0.82704   0.54745   0.12766
  -0.45986  -0.52829  -0.71375
  -0.32330  -0.64901   0.68867

s =

  1.40832  0.00000  0.00000
  0.00000  0.12233  0.00000
  0.00000  0.00000  0.00269

v =

  -0.82704   0.54745   0.12766
  -0.45986  -0.52829  -0.71375
  -0.32330  -0.64901   0.68867

当给出不为0的第二自变量时,svd返回经济大小的组合,消除不必要的UV的行或列.

如果第二个参数恰好为0,则分解的选择基于矩阵A。如果A行数多于列数,则返回经济大小的分解,否则计算常规分解。

算法注释:当计算完全分解(除了奇异值之外还有左奇异矩阵和右奇异矩阵)时,可以选择LAPACK 中的两个子程序。Octave使用的默认子程序是gesvd。另一种选择是gesdd,其速度快5倍,但可能使用更多的内存并且对于某些输入矩阵可能不准确。还有第三个程序gejsv,适用于在极端规模下获得更好的精度。详见svd_driver的文档以获取有关选择驱动的更多信息。

详见: svd_driver, svds, eig, lu, chol, hess, qr, qz.

广告
 
: val = svd_driver ()
: old_val = svd_driver (new_val)
: old_val = svd_driver (new_val, "local")

查询或设置基础LAPACK svd使用的驱动程序.

目前已知的值是"gesdd", "gesvd""gejsv"。默认为"gesvd".

当从具有"local"参数的函数内部调用时,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

算法注释:LAPACK 库子程序gesvdgesdd只有在计算完全奇异值分解(左奇异矩阵和右奇异矩阵以及奇异值)时才不同。当仅计算奇异值时,以下讨论不相关。

更新的gesdd子程序是基于一个Divide and Conquer算法,该算法比替代品gesvd算法快5倍,它是基于QR分解的。然而,新算法可能使用更多的内存。对于MxN输入矩阵,内存使用是O(min(M,N)^2)阶,而替代品是O(max(M,N))阶。

例程gejsv使用预处理的Jacobi SVD算法。不像在gejsv里面的gesvdgesdd,在某些极端情况下,不存在可能污染准确性的双向校准步骤。而且gejsv已知在某种意义上是最佳准确的。但是,速度较慢(核心为单线程),并使用更多内存(O(min(M,N)^2+M+N))。

除了速度和内存问题之外,有些情况下,一些输入矩阵没有通过gesdd。详见当前活动的bughttps://savannah.gnu.org/bugs/?55564。在新版本的中解决这些准确性问题之前LAPACK 库,Octave中的默认驱动程序已设置为"gesvd".

详见: svd.

广告
 
: [housv, beta, zer] = housh (x, j, z)

计算豪斯霍尔德反射向量housv以反射x作为第j主子列,

(I - beta*housv*housv')x =  norm (x)*e(j) if x(j) < 0,
(I - beta*housv*housv')x = -norm (x)*e(j) if x(j) >= 0

输入

x

向量

广告
j

索引到向量

广告
z

零的阈值(通常应该是数字0)

广告

输出(见Golub和Van Loan):

beta

如果beta=0,则不需要应用反射(zer设置为0)

广告
housv

豪斯霍尔德向量

广告
广告
 
: [u, h, nu] = krylov (A, V, k, eps1, pflg)

构造块Krylov子空间的正交基u

块Krylov子空间具有以下形式:

[v a*v a^2*v ... a^(k+1)*v]

该构造采用Householder反射,以防止正交性的损失。

如果V是一个向量,并且h包含Hessenberg矩阵,则a*u == u*h+rk*ek',其中rk = a*u(:,k)-u*h(:,k)ek'是向量[0, 0, …, 1]的长度k。否则h没有意义。

如果V是一个向量,并且k大于length (A) - 1h包含Hessenberg矩阵,使得a*u == u*h.

nu的值是Krylov子空间跨度的维数(基于eps1).

如果b是一个向量,且k大于m-1,则h包含A的Hessenberg分解.

可选参数eps1是零的阈值。默认值为1e-12。

如果可选参数pflg为非零时,行旋转用于改进数值行为。默认值为0。

参考文献:A.Hodel,P.Misra,Partial Pivoting in the Computation of Krylov Subspaces of Large Sparse Systems,第42届IEEE决策与控制会议论文集,2003年12月。

广告

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

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