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>表示矩阵A是正定的并且R给出了因子分解。否则</p>将具有正值。
如果使用三个输出参数矩阵调用A必须是稀疏的,并且将保持稀疏性的行/列排列应用于矩阵A在因子分解之前。那是R是的因子分解A(Q,Q)
使得
R * R= Q * A * Q.
保持稀疏性的排列通常以矩阵形式返回。然而,给定可选标志向量
, Q将变为向量,使得
R * R= A(Q, Q).
一般来说,较低的三角因子分解对于稀疏矩阵来说明显更快。
详见: hess, lu, qr, qz, 舒尔, svd, 伊科尔, cholinv, chol2inv, cholupdate, cholinsert, choldelete, cholshift.
Ainv =
chol2inv (R)
¶从Cholesky分解中反演一个对称的正定方阵,R.
请注意R应该是具有正对角化元素的上三角矩阵。chol2inv(U)
提供inv(R*R)
但比使用快得多inv
.
[R1, info] =
cholupdate (R, u, op)
¶更新或降低Cholesky因子分解的日期。
给定一个上三角矩阵R和列向量u,尝试确定另一个上三角矩阵R1使得
+
-
如果op是-
, 信息设置为
如果信息如果不存在,则在情况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,:)'=uandp=[1:j-1,j+1:n+1].u(j)应该是积极的。
在返回时,信息设置为
如果信息如果不存在,则在情况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,shift(i:j,1),j+1:n]
如果我< j
或
p=[1:j-1,移位(j:i,-1),i+1:n]
如果j< 我.
详见: chol, cholupdate, cholinsert, choldelete.
H =
hess (A)
¶[P, H] =
hess (A)
¶计算矩阵的Hessenberg分解A.
Hessenberg分解是P * H * P = A
这里的P是一个平方次矩阵(P * P我
,使用复合共轭四移位)和H是上海森堡(H(i,j)=0(对于所有i>j+1)
.
Hessenberg分解通常被用作单位值计算的第一步,但也有其他应用(见Golub、Nash和Van Loan,IEEE Transactions on Automatic Control,1979)。
[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
这通常导致更稀疏和更稳定的因子分解。
一个额外的输入参数脱粒可以给出定义枢转阈值的。脱粒可以是标量,在这种情况下,它定义UMFPACK对称和非对称情况下的枢轴公差。如果脱粒是一个2元素向量,那么第一个元素定义了不对称的枢转公差UMFPACK第二种是对称策略。默认情况下,从定义的值spparms
使用([0.1,0.001])。
给定字符串参数向量
, lu
返回的值P和Q作为向量值,A(P,:) = L * U
和R(P,:)* A(:,Q) = L * U
.
使用两个输出参数,返回上三角矩阵和下三角矩阵的排列形式,使得A= L * U
。带有一个输出参数y,然后从返回的矩阵LAPACK 返回子程序。如果输入矩阵是稀疏的,那么矩阵L嵌入到U以给出类似于完整大小写的返回值。对于全矩阵和稀疏矩阵,lu
丢失术语信息。
[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.’这里的x和y列向量(秩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 (…, 0)
¶[…] =
qr (…, "econ")
¶[…] =
qr (…, "vector")
¶[…] =
qr (…, "matrix")
¶计算的QR因子分解A,使用标准LAPACK 子程序。
QR因子分解是
Q * R= A
这里的Q是正交矩阵,并且R是上三角矩阵。
例如,给定矩阵A= [1, 2; 3, 4]
,
[Q, R]=qr(A)
退货
Q= -0.31623 -0.94868 -0.94868 0.31623R= -3.16228 -4.42719 0.00000 -0.63246
相乘后返回原始矩阵
Q * R⇒ 1.0000 2.0000 3.0000 4.0000
如果只指定一个返回值,则为R如果A稀疏,或者十、,使得R=triu(十、)
如果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.44721R= -4.47214 -3.13050 0.00000 0.44721P= 0 1 1 0
如果输入矩阵A是稀疏的,稀疏的QR因子分解是通过使用SPQR或CXsparse(例如,如果SPQR不可用)。因为矩阵Q通常是一个完整的矩阵,建议只指定一个返回值R。在这种情况下,计算避免了的构造Q并返回稀疏R使得R=chol(A * A)
.
如果A是稠密的,一个额外的矩阵B并指定两个返回值,然后qr
退货C这里的C= Q * B
。这允许的最小二乘近似A\ B
计算为
[C, R]=qr(A, B)十、= R\ C
如果A是稀疏MxN矩阵和附加矩阵B如果已应用,则可能有一个或两个返回值。如果一个返回值十、被指定并且M<N,则十、是的最小2-范数解A\ B
如果M>=N,十、是的最小二乘逼近A\ B
如果指定两个返回值,C和R与稠密情况下的含义相同(C密度大R稀疏)。应该首选带有一个返回参数的版本,因为它使用较少的内存,并且可以更好地处理缺k矩阵。
如果最后一个参数是字符串向量
然后P是变异向量(的列A)而不是排列矩阵。在这种情况下,定义关系是:
Q * R= A(:, P)
然而,默认情况是返回一个排列矩阵,这可以通过使用的最后一个参数来明确指定矩阵
.
如果最后一个参数是标量0或字符串经济
,返回经济因子。如果原始矩阵A具有大小MxN和M>N,则经济因子分解将仅计算中的NrowsR和中的N列Q并省略中的零R.如果M≤N,则经济因子分解和标准因子分解之间没有区别。当计算经济因子分解和Aisdense,输出P总是向量而不是矩阵。如果A稀疏,输出P是一个稀疏排列矩阵。
背景:QR因子分解在最小二乘问题的求解中有应用
最小范数(A*x-b)
对于超定方程组(即。,A是高而薄的矩阵)。
置换QR因子分解[Q, R, P]=qr(A)
允许构造的正交基跨度(A)
.
详见: chol, hess, lu, qz, 舒尔, svd, qrupdate, qrinsert, qrdelete, qrshift.
[Q1, R1] =
qrupdate (Q, R, u, v)
¶在给定更新向量或矩阵的情况下更新QR因子分解。
给定实矩阵或复矩阵的QR因子分解A= Q*R, Q酉和R上梯形,返回的QR因子分解A+ u*v’这里的u和v是列向量(秩1更新)或具有相等列数的矩阵(秩k更新)。请注意,后一种情况是作为一系列的rank-1更新完成的;因此,对于足够大的k,从头开始重新计算因子分解将更快、更准确。
所提供的QR因子分解可以是完全的(Q是平方)或经济的(R是平方)。
[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如果朝向是col
),或[A(1:j-1,:);x;A(:,j:n)]的QR因子分解这里的x是要插入的行向量A如果朝向是一行
).
的默认值朝向是col
如果朝向是col
, u可以是矩阵,并且j矩阵QR因子分解的一个索引向量B使得B(:,j)给予u和B(:,j) = []给予A注意,后一种情况是作为k个插入的序列来完成的;因此,对于足够大的k,从头开始计算因子分解将更快、更准确。
如果朝向是col
,所提供的QR因子分解可以是满的(Q是平方)或节省的(R是平方)。
如果朝向是一行
,需要完全因子分解。
[Q1, R1] =
qrdelete (Q, R, j, orient)
¶更新给定行或列的QR因子分解以从原始因子矩阵中删除。
给定实矩阵或复矩阵的QR因子分解A= Q*R, Q酉和R上梯形,返回[A(:,1:j-1),U,A(:,j:n)]的QR因子分解这里的u是要插入的列向量A如果朝向是col
),或[A(1:j-1,:);X;A(:,j:n)]的QR因子分解这里的x是一排朝向是一行
).的默认值朝向是col
.
如果朝向是col
, j可以是导致矩阵的QR因子分解的索引向量B使得A(:,j) = []给予B请注意,后一种情况是作为k个删除的序列来完成的;因此,对于足够大的k,从头开始重新计算因子分解将更快、更准确。
如果朝向是col
,所提供的QR因子分解可以是满的(Q是平方)或节省的(R是平方)。
如果朝向是一行
,需要完全因子分解。
[Q1, R1] =
qrshift (Q, R, i, j)
¶更新QR因子分解,给定要在原始因子矩阵中移动的列的范围。
给定实矩阵或复矩阵的QR因子分解A= Q*R, Q酉和R上梯形,返回的QR分解A</p>,其中p是排列
p=[1:i-1,shift(i:j,1),j+1:n]
如果我< j
或
p=[1:j-1,移位(j:i,-1),i+1:n]
如果j< 我.
[AA, BB, Q, Z, V, W] =
qz (A, B)
¶[AA, BB, Q, Z, V, W] =
qz (A, B, opt)
¶计算广义特征值问题的QZ分解。
广义特征值问题定义为
A x=lambdaB x
函数有两种调用形式:
[AA, BB, Q, Z, 五、, W, lambda]=qz(A, B)
计算复QZ分解、广义特征向量和广义特征值。
AA= Q * A * Z, BB= Q * B * Z A * 五、*diag(diag(BB)) = B * 五、*diag(diag(AA))diag(diag(BB)) * W * A=diag(diag(AA)) * W * B
具有AA和BB上部三角形,以及Q和Z单一的。矩阵五、和W分别包含右广义特征向量和左广义特征向量。
[AA, BB, Z{, lambda}]=qz(A, B, opt)
这个opt自变量必须等于真实的
或复杂的
。如果等于复杂的
,则此调用形式等效于第一个只有两个inputarguments的调用形式。
如果opt等于真实的
,则计算出真实的QZ分解。特别地,AA仅保证是对角线上具有1乘1和2乘2块的准上三角矩阵,并且Q和Z是正交的。只有当AA是上三角的(即,当所有广义本征值都是实数时,在这种情况下实数和复数QZ重合)。
笔记qz
执行排列平衡,但不执行缩放(详见balance
),这可能导致比eig
。选择输出参数的顺序是为了与兼容MATLAB.
[aa, bb, q, z] =
qzhess (A, B)
¶计算矩阵笔的Hessenberg三角分解(A, B)
,返回aa= q * A * z
,bb= q * B * z
具有q和z正交的。
例如
[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=对角矩阵1 0 0 1
Hessenberg三角分解是Moler和Stewart的QZ分解算法的第一步。
算法取自Golub和Van Loan,矩阵计算,第2版.
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是上三角矩阵。的特征值A和S)的对角线元素S.如果矩阵A是真实的,那么计算真实的Schur分解,其中矩阵U是正交的,并且S是块的上三角矩阵,块的大小最大2 x 2
沿着对角线。
实数矩阵的默认值是实数Schur分解。可以通过传递标志来强制进行复杂分解复杂的
.
根据的值,特征值可选地沿着对角线排序opt:
opt一
将具有负实部的特征值移动到的前导块S.助记符:a
对于代数Riccati方程,这种排序是有用的。
optd
将幅度小于1的特征值移动到的前导块S.助记符:d
对于离散代数Riccati方程,这种排序是有用的。
optu
无序。没有特定的特征值排序(默认)。
领先的k的列U始终跨越A-不变量空间对应于k的前导特征值S.
[U, T] =
rsf2csf (UR, TR)
¶转换实的上拟三角形Schur形式TR到复上三角Schur形式T.
请注意,以下关系成立:
UR * TR * UR = U * T * U
和U * U
是单位矩阵I。
还要注意的是U和T不是唯一的。
详见: 舒尔.
[UR, SR] =
ordschur (U, S, select)
¶重排序实Schur因子分解(U,S)使用获得舒尔
函数,使得所选择的特征值出现在拟三角Schur矩阵的左上对角线块中。
逻辑向量opt指定所选特征值沿S的对角线。
例如,给定矩阵A= [1, 2; 3, 4]
,及其Schurdecomposition
[U, S]=舒尔(A)
返回
U= -0.82456 -0.56577 0.56577 -0.82456S= -0.37228 -1.00000 0.00000 5.37228
可以对分解进行重新排序,使正本征值位于左上角,方法如下:
[U, S]=单词搅拌器(U, S, [0,1])
[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, Q和Z完成
AA= Q * A * Z, BB= Q * B * Z
这个ordqz
函数计算酉变换QR和ZR使得特征值在的对角线上的阶AA和BB已更改。得到的重新排序矩阵应收账和BR完成:
应收账= QR * A * ZR, BR= QR * B * ZR
函数可以用调用关键字选择的左上角块中的特征值的自变量应收账和BR以以下方式:
S
, udi
small:前导块具有所有|lambda1.
B
, udo
big:领先区块拥有所有|lambda| ≥ 1
-
, lhp
负实部:前导块在开左半平面上具有所有特征值
+
, rhp
非负实部:前导块在闭右半平面上具有所有特征值
如果一个逻辑向量opt而不是关键字ordqz
函数对所有特征值进行重新排序k
到左侧块选择(k)
是真的。
注意:关键字与中的关键字兼容qr
.
lambda =
ordeig (A)
¶lambda =
ordeig (A, B)
¶按拟三角矩阵在矩阵中的出现顺序返回其特征值A.
拟三角矩阵A通常是曲面化的结果。如果使用第二个输入调用B则该对的广义特征值A, B按矩阵出现的顺序返回A-lambda*B
。这对A, B通常是QZ分解的结果。
angle =
subspace (A, B)
¶确定矩数组扫描的两个子空间之间的最大主角A和B.
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, S和五、例如
svd(hilb(3))
退货
ans=1.083189 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.12233 0.00000 0.000000 0.00269 v=-0.827040.54745 0.125766-0.45786-0.52829--0.71375-0.132330-0.64 901 0.688 67
当给出不为0的第二自变量时,svd
返回经济大小的组合,消除不必要的行或列U或五、.
如果第二个参数恰好为0,则分解的选择基于矩阵A如果A行数多于列数,则返回经济大小的分解,否则计算出规则分解。
算法注释:当计算全分解(除了奇异值之外还有左奇异矩阵和右奇异矩阵)时,可以选择中的两个子程序LAPACK 。Octave使用的默认子程序是gesvd
。另一种选择是gesdd
其速度快5倍,但可能使用更多的内存并且对于某些输入矩阵可能不准确。还有第三个程序gejsv
,适用于在极端规模下获得更好的精度。详见的文档svd_driver
有关选择驾驶员的更多信息。
val =
svd_driver ()
¶old_val =
svd_driver (new_val)
¶old_val =
svd_driver (new_val, "local")
¶查询或设置基础LAPACK 使用的驱动程序svd
.
目前公认的价值是gesdd
, gesvd
和gejsv
。默认为gesvd
.
当从具有的函数内部调用时地方的
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
算法注释:LAPACK 库子程序gesvd
和gesdd
只有在计算全奇异值分解(左奇异矩阵和右奇异矩阵以及奇异值)时才不同。当仅计算奇异值时,以下讨论不相关。
更新的gesdd
子程序是基于一个Divide and Conquer算法,该算法比其他算法快5倍gesvd
,它是基于QRFactorion的。然而,新算法可以使用明显更多的内存。对于MxN输入矩阵,内存使用是O(min(M,N)^2)阶,而替代是O(max(M,N))阶。
例行程序gejsv
使用预处理的Jacobi SVD算法。不像gesvd
和gesdd
在里面gejsv
,在某些极端情况下,不存在可能污染准确性的双向校准步骤。而且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)
¶计算户主反射向量豪斯以反映x作为身份的第j列。,
(I-β*housv*housv')x=范数(x)*e(j),如果x(j)<0,(I-贝塔*housv*housv
输入
向量
索引到向量
零的阈值(通常应该是数字0)
输出(见Golub和Van Loan):
如果beta=0,则不需要应用反射(zer设置为0)
户主向量
[u, h, nu] =
krylov (A, V, k, eps1, pflg)
¶构造正交基u块Krylov子空间的。
块Krylov子空间具有以下形式:
[v a*v a^2*v…a^(k+1)*v]
该结构体采用Householder反射,以防止正交性的损失。
如果五、是一个向量,那么h包含Hessenberg矩阵,因此a*u==u*h+rk*ek
,其中rk=a*u(:,k)-u*h(:,k)
和ek
是向量[0, 0, …, 1]
的长度k否则h毫无意义。
如果五、是一个向量,并且k大于长度(A)-1
然后h包含Hessenberg矩阵,使得a*u==u*h
.
的值nu是Krylov子空间跨度的维数(基于eps1).
如果b是一个向量,并且k大于m-1然后h包含的Hessenberg分解A.
可选参数eps1是零的阈值。默认值为1e-12。
如果可选参数pflg为非零时,行旋转用于改进数值行为。默认值为0。
参考文献:A.Hodel,P.Misra,大型稀疏系统Krylov子空间计算中的局部旋转,第42届IEEE决策与控制会议论文集,2003年12月。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号