Octave包括一个稀疏矩阵的多态解算器,其中用于分解矩阵的精确解算器取决于稀疏矩阵本身的性质。通常,相对于矩阵本身的因子分解成本,确定矩阵类型的成本很小,但在任何情况下,矩阵类型在计算后都会被缓存,因此每次在线性方程中使用时都不会重新确定。
如何求解线性方程的选择树是
spparms ("bandden")继续,否则转到4。频带密度定义为频带中非零值的数量除以整个频带中值的总数。可以使用完全禁用带域矩阵解算器spparms设置bandden至1(即。,spparms ("bandden", 1)).
QR解算器使用Dulmage Mendelsohn分解将问题分解为多个块,这些块可以作为过度确定的块、多个确定良好的块和一个最终确定的块来处理。对于具有强连通节点块的矩阵,这是一个巨大的胜利,因为LU分解可以用于许多块。它还显著提高了为过度确定的问题找到解决方案的机会,而不仅仅是返回向量NaNs
上面的所有解算器都可以计算条件数的估计值。这可以用于检测解中的数值稳定性问题,并强制使用最小范数解。然而,对于窄带、三角形或对角矩阵,计算条件数的成本是巨大的,事实上可能超过分解矩阵的成本。因此,在这些情况下不计算条件数,Octave依赖于简单的技术来检测奇异矩阵或底层矩阵LAPACK 带状矩阵情况下的代码。
用户可以使用强制矩阵的类型matrix_type作用这克服了查找矩阵类型的成本。然而,需要注意的是,错误地识别矩阵类型会导致不可预测的结果,因此matrix_type应小心使用。
nest= normest1 (A)¶
nest= normest1 (A,t)¶
nest= normest1 (A,t,x0)¶
nest= normest1 (Afcn,t,x0,p1,p2, …)¶
[nest,v] = normest1 (A, …)¶
[nest,v,w] = normest1 (A, …)¶
[nest,v,w,iter] = normest1 (A, …)¶
估计矩阵的1-范数A使用块算法。
normest1对于只需要估计范数的大型稀疏矩阵是最好的。对于中小型矩阵,考虑使用norm (A, 1)此外normest1可以用于估计线性算子的1-范数A当矩阵向量乘积A * x和A' * x可以计算。在这种情况下,而不是矩阵A,一个函数Afcn (flag, x)使用;它必须返回:
"dim"
"real"
A * x如果flag是"notransp"
A' * x如果flag是"transp"
一个典型的案例是A从定义b ^ m,其中有结果A * x可以计算,甚至不需要明确的形式b ^ m通过
y = x; for i = 1:m y = b * y; endfor
参数p1,p2,…是的参数Afcn (flag, x, p1, p2, …).
t的默认值是2。该算法需要具有大小的矩阵矩阵乘积nxn和nxt.
初始矩阵x0应该具有单位1-范数的列。默认初始矩阵x0具有第一列ones (n, 1) / n并且,如果t>1、具有随机元素的剩余列-1 / n,-1 / n,除以n.
在输出时,nest是期望的估计,v和w是这样的向量w = A * v具有norm (w, 1)=c * norm (v, 1). iter包含在iter(1)迭代次数(最大值ishardcoded为5)和iter(2)产品总数A * x或A' * x从算法执行。
算法注释:normest1在评估过程中使用随机数。因此,如果需要一致的结果"state"的应在调用前修复normest1.
参考文献:N.J.Higham和F.Tisseur,A block algorithm for matrix 1-norm estimation, with and application to 1-norm pseudospectra,SIAM J.矩阵分析。Appl。,第1185-1201页,第21卷,第4期,2000年。
cest= condest (A)¶
cest= condest (A,t)¶
cest= condest (A,Ainvfcn)¶
cest= condest (A,Ainvfcn,t)¶
cest= condest (A,Ainvfcn,t,p1,p2, …)¶
cest= condest (Afcn,Ainvfcn)¶
cest= condest (Afcn,Ainvfcn,t)¶
cest= condest (Afcn,Ainvfcn,t,p1,p2, …)¶
[cest,v] = condest (…)¶
平方矩阵的1-范数条件数的估计A使用t测试向量和随机1-范数估计器。
可选输入t指定测试向量的数量(默认为5)。
输入可以是矩阵A(该算法特别适用于大型稀疏矩阵)。或者,矩阵的行为可以从函数隐式定义。当使用隐含定义时,condest需要以下函数:
Afcn (flag, x)必须返回"dim"
"real"
A * x如果flag是“nottransp”A' * x如果flag是“transp”Ainvfcn (flag, x)必须返回inv (A)如果flag是"dim"
inv (A)是一个真正的运算符,如果flag是"real"
inv (A) *x如果flag是“nottransp”inv (A)' *x如果flag是“transp”任何参数p1,p2,…是的附加参数Afcn (flag, x, p1, p2, …)和Ainvfcn (flag, x, p1, p2, …).
主要输出是1-范数条件数估计cest.
可选的第二个输出v是近似零向量;它满足方程norm (A*v, 1) ==
norm (A, 1) * norm (v, 1) / cest.
算法注释:condest使用随机化算法来近似1-范数。因此,如果需要一致的结果"state"的应在调用之前修复condest.
参考文献:
()¶
vals= spparms ()¶
[keys,vals] = spparms ()¶
val= spparms (key)¶
(vals)¶
("default")¶
("tight")¶
(key,val)¶
查询或设置稀疏解算器和因子分解函数使用的参数。
上面的前四个调用获取有关当前设置的信息,而其他调用则更改当前设置。参数存储为成对的键和值,其中值都是浮点值,键是以下字符串之一:
打印解算器的调试信息级别(默认为0)
包括兼容性。未使用。(默认值1)
包括兼容性。未使用。(默认值1)
包括兼容性。未使用。(默认为0)
包括兼容性。未使用。(默认值3)
包括兼容性。未使用。(默认值3)
包括兼容性。未使用。(默认0.5)
符号LU/QR以及“\”和“/”运算符是否将自动使用稀疏性保留mmd函数(默认值1)
符号LU以及“\”和“/”运算符是否将自动使用保留稀疏性的amd函数(默认值1)
的枢轴误差范围UMFPACK解算器(默认值为0.1)
的枢轴误差范围UMFPACK对称解算器(默认值0.001)
带状矩阵中非零元素在被处理之前的密度LAPACK 带状解算器(默认值为0.5)
符号是否UMFPACK或mmd解算器用于LU、“\”和“/”操作(默认值1)
可以使用设置单个关键点的值spparms (key, val)。默认值可以使用特殊关键字恢复"default".特殊关键字"tight"可用于设置mmd解算器,以尝试以较长运行时间为潜在代价的稀疏解算。
p= sprank (S)¶
计算稀疏矩阵的结构体秩S.
注意,在这个计算中,只有矩阵的结构体是基于Dulmage-Mentelsohn排列来块三角形的S以为界sprank (S) >= rank (S)。忽略浮点错误sprank (S) >= rank (S).
详见: dmperm.
[count,h,parent,post,R] = symbfact (S)¶
[…] = symbfact (S,typ)¶
[…] = symbfact (S,typ,mode)¶
对稀疏矩阵执行符号分解分析S.
输入变量为
S是实数或复数稀疏矩阵。
是因子分解的类型,可以是
"sym" (default)因式分解S.假设S是对称的并且使用矩阵的上三角部分。
"col"因式分解S' * S.
"row"因式分解S * S'.
"lo"因式分解S'.假设S是对称的,并使用矩阵的下三角部分。
当mode是未指定的,返回的Cholesky因子分解R如果mode是"lower"或"L"然后返回共轭转置R'这是一个较低的三角因子。共轭转置版本更快,使用更少的内存,但仍然为所有其他输出返回相同的值:count,h,parent和post.
返回变量为:
Cholesky因子分解的行数从typ.使用执行真因子分解的计算难度chol是sum (count .^ 2).
消除树的高度。
消除树本身。
一个稀疏布尔矩阵,其结构体是从下式确定的Holesky因子分解的结构体typ.
详见: chol,etree,treelayout.
对于非平方矩阵,用户还可以使用spaugment函数来找到线性方程的最小二乘解。
s= spaugment (A,c)¶
创建的增广矩阵A.
这是从给出的
[c * eye(m, m), A;
A', zeros(n, n)]
这与的最小二乘解有关A \ b通过
s * [ r / c; x] = [ b, zeros(n, columns(b)) ]
这里的r是残差
r = b - A * x
作为矩阵s是对称不定的,可以用分解lu,因此可以在不需要的情况下找到最小范数解qr因子分解。从于残余误差zeros (m, m)对于不确定的问题,例如
m = 11; n = 10; mn = max (m, n);
A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],
[-1, 0, 1], m, n);
x0 = A \ ones (m,1);
s = spaugment (A);
[L, U, P, Q] = lu (s);
x1 = Q * (U \ (L \ (P * [ones(m,1); zeros(n,1)])));
x1 = x1(end - n + 1 : end);
要找到一个超定问题的解,需要估计剩余误差r因此,使用spaugment作用
通常,左除法运算符比使用spaugment作用
详见: mldivide.
最后,函数eigs可以用于基于选择标准来计算有限数量的特征值和特征向量,对于svds其计算有限数量的奇异值和向量。
d= eigs (A)¶
d= eigs (A,k)¶
d= eigs (A,k,sigma)¶
d= eigs (A,k,sigma,opts)¶
d= eigs (A,B)¶
d= eigs (A,B,k)¶
d= eigs (A,B,k,sigma)¶
d= eigs (A,B,k,sigma,opts)¶
d= eigs (Af,n)¶
d= eigs (Af,n,k)¶
d= eigs (Af,n,k,sigma)¶
d= eigs (Af,n,k,sigma,opts)¶
d= eigs (Af,n,B)¶
d= eigs (Af,n,B,k)¶
d= eigs (Af,n,B,k,sigma)¶
d= eigs (Af,n,B,k,sigma,opts)¶
[V,D] = eigs (…)¶
[V,D,flag] = eigs (…)¶
根据选择标准计算有限数量的特征值和特征向量。
默认情况下,eigs求解相应的特征向量所在的方程。如果给定正定矩阵B然后eigs求解一般特征值方程
输入A是维度的平方矩阵nxn典型的A也是大而稀疏的。
输入B对于广义特征值问题,是一个大小与A(nxn). 典型的B也是大而稀疏的。
要计算的特征值和特征向量的数量从下式给出k并且默认为6。
参数sigma确定返回哪些特征值。sigma可以是标量或字符串。当sigma是向量k最接近的特征值sigma返回。如果sigma是字符串,它必须是以下值之一。
"lm"最大幅值(默认值)。
"sm"最小幅值。
"la"最大代数(仅适用于实对称问题)。
"sa"最小代数(仅适用于实对称问题)。
"be"两端,如果k是奇数(仅对真正的对称问题有效)。
"lr"最大实部(仅适用于复杂或不对称问题)。
"sr"最小实部(仅适用于复杂或不对称问题)。
"li"最大的想象部分(仅适用于复杂或不对称问题)。
"si"最小的想象部分(仅适用于复杂或不对称问题)。
如果opts是一个定义可能参数的结构体eigs应该使用。的字段opts结构体为:
issym如果Af则该标志(真/假)确定函数是否Af定义了一个对称问题。如果矩阵A给出了。默认值为false。
isreal如果Af则该标志(真/假)确定函数是否Af定义了一个真正的问题。如果矩阵A给出了。默认值为true。
tol定义所需的收敛误差范围,计算为tol * norm (A)。默认为eps.
maxit最大迭代次数。默认值为300。
p要使用的Lanczos基向量的数量。更多的向量将导致更快的收敛,但会更多地使用内存。的最佳值p取决于问题,应在范围内k + 1到n。默认值为2 * k.
v0算法的起始向量。接近最终解算器的初始向量将加快收敛速度。默认值为ARPACK随机生成一个起始向量。如果指定,v0必豆n-by-1向量,其中n = rows (A).
dispdiag打印输出的级别(0|1|2)。如果disp为0,则禁用diag。默认值为0。
cholB如果正在计算广义特征值问题,则此标志(真/假)指定B输入表示chol (B)或者只是矩阵B。默认值为false。
permB的Cholesky因子分解的置换向量B如果cholB是真的。它是通过[R, ~, permB] = chol (B, 。默认为"vector")-1 / n.
也可以表示A通过表示为Af. Af必须后跟标量参数n定义接受的向量自变量的长度Af. Af可以是functionhandle、内联函数或字符串。当Af是一个没有要使用的函数名称的字符串。
Af是形式的函数y = Af (x)其中的要求返回值Af从的值决定sigma。四种可能的形式是
A * x如果sigma不是给定的,或者是除“sm”之外的字符串。
A \ x如果sigma是0或“sm”。
(A - sigma * I) \ x如果sigma是不等于0的标量;I身份矩阵的大小是否与A.
(A - sigma * B) \ x对于一般的特征值问题。
返回参数及其形式取决于指定的返回参数的数量。对于单个返回参数,列向量d的长度k返回时包含k已经查找的特征值。对于两个返回自变量,V是一个nxkmatrix其列为k与返回的特征值相对应的特征向量。特征值本身返回D以的形式kxk矩阵,其中对角线上的元素是本征值。
第三个返回参数flag返回收敛的状态。如果flag如果为0,则所有特征值都已收敛。任何其他值都表示无法收敛。
编程注意事项:对于小问题,n<500,考虑使用eig (full (A)).
如果ARPACK无法收敛,请考虑增加Lanczos向量的数量(opt-p),增加迭代次数(opt.maxiter),或减小误差范围(opt.tol)。
参考:此函数基于ARPACK包,从R编写。Lehoucq、K.Maschhoff、D.Sorensen和C.Yang。有关更多信息,详见http://www.caam.rice.edu/software/ARPACK/.
s= svds (A)¶
s= svds (A,k)¶
s= svds (A,k,sigma)¶
s= svds (A,k,sigma,opts)¶
[u,s,v] = svds (…)¶
[u,s,v,flag] = svds (…)¶
求矩阵的几个奇异值A.
奇异值的计算使用
[m, n] = size (A);
s = eigs ([sparse(m, m), A;
A', sparse(n, n)])
返回的特征值eigs对应于的奇异值A。要计算的奇异值的数量从k并且默认为6。
参数sigma指定要查找的奇异值。当sigma是字符串'L',默认情况下,的最大奇异值A找到。否则sigma必须是实数标量并且奇异值最接近sigma找到。作为推论,sigma = 0找到最小的奇异值。请注意,对于相对较小的值sigma,则有可能找不到所要求的奇异值的数目。那样的话sigma应该增加。
opts是一个定义参数的结构体svds将传递给eigs。该结构体的可能字段记录在eigs默认情况下,svds设置以下三个字段:
tol奇异值所需的收敛容差。默认值为1e-10。eigs已通过tol / sqrt (2).
maxit最大迭代次数。默认值为300。
dispdiag打印输出的级别(0|1|2)。如果disp为0,则禁用diag。默认值为0。
如果指定多个输出,则svds将返回的奇异值分解的近似A
A_approx = u*s*v'
这里的A_近似是一个大小矩阵A但只有等级k.
flag如果算法已成功收敛,则返回0,否则返回1。收敛性的测试是
norm (A*v - u*s, 1) <= tol * norm (A, 1)
svds最好是从一个大的稀疏矩阵中只找到几个奇异值。否则,svd (full (A))可能会更有效率。
这个CHOLMOD,UMFPACK和CXsparse包从Tim Davis编写,可在http://faculty.cse.tamu.edu/davis/suitesparse.html
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2