18.5专业的解算器

 
:x= bicg (A,b)
:x= bicg (A,b,tol)
:x= bicg (A,b,tol,maxit)
:x= bicg (A,b,tol,maxit,M)
:x= bicg (A,b,tol,maxit,M1,M2)
:x= bicg (A,b,tol,maxit,M, [],x0)
:x= bicg (A,b,tol,maxit,M1,M2,x0)
:x= bicg (A,b,tol,maxit,M, [],x0, …)
:x= bicg (A,b,tol,maxit,M1,M2,x0, …)
:[x,旗帜,relres,iter,resvec] = bicg (A,b, …)

求解线性方程组A * x=b采用双共轭梯度迭代法。

输入参数为:

  • A是线性系统的矩阵,它必须是平方。A可以作为矩阵、函数句柄或内联函数传递Afcn使得Afcn(x,“nottransp”)=A*xAfcn(x,“transp”)=A'*x。的附加参数Afcn可能在之后通过x0.
  • b是右侧向量。它必须是行数与相同的列向量A.
  • tol是残余误差所需的相对公差,b-A * x。如果规范(b-A * x)tol*标准(b)如果tol则使用1e-6的公差。
  • maxit是允许的最大迭代次数;如果maxit则使用值20。
  • M1,M2是预处理器。预处理器M给定为M=M1 * M2二者都M1M2可以作为矩阵或函数句柄或内联函数传递g使得g(x,“nottransp”)=M1\xg(x,“nottransp”)=M2\xg(x,“transp”)=M1' \xg(x,“transp”)=M2' \x如果M1省略或为空,则不应用预处理。预处理系统在理论上等效于应用bicg线性系统的方法inv(M1)*A*发票(M2) *y=发票(M1) *binv(M2’)*A'*发票(M1') *z=发票(M2’) *b然后设置x=发票(M2) *y.
  • x0是最初的猜测。如果x0被省略或为空,则函数集x0默认情况下为零向量。

以下任何参数x0被视为参数,并以适当的方式传递给任何函数(AfcnMfcn)或者已经给予bicg.

输出参数为:

  • x是的解的计算近似值A * x=b。如果算法没有收敛,那么x是具有最小残差的迭代。
  • 旗帜表示退出状态:
    • 0:算法收敛到规定的容差内。
    • 1:该算法没有收敛,并且达到了最大迭代次数。
    • 2:预处理矩阵是奇异的。
    • 3:算法停滞,即当前迭代之间的差的绝对值x而前面的小于eps*范数(x2..
    • 4:算法无法继续,因为中间值太小或太大,无法进行可靠的计算。
  • relres是最终残差与其初始值的比率,以欧几里得范数测量。
  • iter是迭代x计算。
  • resvec是包含每次迭代时的残差的向量。执行的迭代总数从下式给出resvec1..

考虑一个三对角矩阵的平凡问题

n=20;A=toeplitz(稀疏([1,1],[1,2],[2,1]*n^2,1,n))+。。。toeplitz(稀疏(1,2,1,n)*n/2。。。稀疏(1,2,1,1,n)*n/2);b=A*ones(n,1);重新启动=5;[M1,M2]=ilu(A);#在这种三元情况下,它对应于lu(A)M=M1*M2;Afcn=@(x,string)strcmp(string,“nottransp”)*(A*x)+。。。strcmp(字符串,“transp”)*(A'*x);Mfcn=@(x,string)strcmp(string,“nottransp”)*(M\x)+。。。strcmp(字符串,“transp”)*(M'\x);M1fcn=@(x,string)strcmp(string,“nottransp”)*(M1\x)+。。。strcmp(字符串,“transp”)*(M1'\x);M2fcn=@(x,string)strcmp(string,“nottransp”)*(M2\x)+。。。strcmp(字符串,“transp”)*(M2'\x);

示例1:的最简单用法bicg

x=bicg(A,b)

示例2: bicg具有一个计算A*xA*x

x=bicg(Afcn,b,[],n)

示例3: bicg具有预处理矩阵M

x=bicg(A,b,1e-6,n,M)

示例4: bicg具有作为预处理器的函数

x=bicg(Afcn,b,1e-6,n,Mfcn)

示例5: bicg具有预处理矩阵M1M2

x=bicg(A,b,1e-6,n,M1,M2)

示例6: bicg具有作为预处理器的函数

x=bicg(Afcn,b,1e-6,n,M1fcn,M2fcn)

示例7: bicg将需要参数的函数作为输入

函数y=Ap(A,x,string,z)##计算A^z*x或(A^z)'*x y=x;if(strcmp(字符串,“nottransp”))对于i=1:z y=A*y;elseif(strcmp(字符串,“transp”))的endfor i=1:z y=A'*y;endfor endifendfunctionApfcn=@(x,string,p)Ap(A,x,string、p);x=bicg(Apfcn,b,[],[],]],[],2);

参考

Y.Saad,稀疏线性系统的迭代方法,2003年第二版,SIAM。

详见: 稳定双共轭梯度,cgs,gmres,pcg,qmr,tfqmr.

 
:x= 稳定双共轭梯度 (A,b,tol,maxit,M1,M2,x0, …)
:x= 稳定双共轭梯度 (A,b,tol,maxit,M, [],x0, …)
:[x,旗帜,relres,iter,resvec] = 稳定双共轭梯度 (A,b, …)

解决A x=b使用稳定的双共轭梯度迭代方法。

输入参数为:

  • A是线性系统的矩阵,它必须是平方。A可以作为矩阵、函数句柄或内联函数传递Afcn使得Afcn(x)=A*x。的附加参数Afcn在之后通过x0.
  • b是右侧向量。它必须是行数与相同的列向量A.
  • tol是残余误差所需的相对公差,b-A * x。如果规范(b-A * x)tol*标准(b)如果tol则使用1e-6的公差。
  • maxit外部迭代的最大次数,如果未给定或设置为[]默认值最小值(20,numel(b))使用。
  • M1,M2是预处理器。预处理器M给定为M=M1 * M2二者都M1M2可以作为矩阵或函数句柄或内联函数传递g使得g(x) =M1\xg(x) =M2\x所使用的技术是正确的预处理,即它已被解决A*inv(M) *y=b然后x=发票(M) *y.
  • x0初始猜测,如果未给定或设置为[]默认值零(大小(b))使用。

以下参数x0被视为参数,并以适当的方式传递给任何函数(AM)传递给双稳态.

输出参数为:

  • x是计算的近似值。如果该方法不能转换,则它是具有最小残差的迭代方法。
  • 旗帜表示退出状态:
    • 0:迭代收敛到所选公差内
    • 1:收敛前达到最大迭代次数
    • 2:预处理矩阵是奇异的
    • 3:算法达到停滞
    • 4:从于被零除,算法无法继续
  • relres是用as获得的相对残差(A*x-b) /标准b).
  • iter是(可能是一半)迭代x已计算。如果它是半迭代,那么它是iter+ 0.5
  • resvec是一个向量,包含每一半和总迭代的残差(也有一半迭代,因为x在每次迭代中以两个步骤计算)。正在执行resvec) - 1) / 2可以看到执行的(总的)迭代的总数。

让我们考虑一个三对角矩阵的平凡问题

n=20;A=toeplitz(稀疏([1,1],[1,2],[2,1]*n^2,1,n))+。。。toeplitz(稀疏(1,2,1,n)*n/2。。。稀疏(1,2,1,1,n)*n/2);b=A*ones(n,1);重新启动=5;[M1,M2]=ilu(A);#在这种三元情况下,它对应于lu(A)M=M1*M2;Afcn=@(x)A*x;Mfcn=@(x)M\x;M1fcn=@(x)M1\x;M2fcn=@(x)M2\x;

示例1:的最简单用法稳定双共轭梯度

x=bigstab(A,b,[],n)

示例2: 稳定双共轭梯度具有一个计算A * x

x=bigstab(Afcn,b,[],n)

示例3: 稳定双共轭梯度具有预处理矩阵M

x=bigstab(A,b,[],1e-06,n,M)

示例4: 稳定双共轭梯度具有作为预处理器的函数

x=bigstab(Afcn,b,1e-6,n,Mfcn)

示例5: 稳定双共轭梯度具有预处理矩阵M1M2

x=bigstab(A,b,[],1e-6,n,M1,M2)

示例6: 稳定双共轭梯度具有作为预处理器的函数

x=bigstab(Afcn,b,1e-6,n,M1fcn,M2fcn)

示例7: 稳定双共轭梯度将一个需要参数的函数作为输入

函数y=Ap(A,x,z)#计算A^z*x y=x;对于i=1:z y=A*y;endfor endfunctionApfcn=@(x,string,p)Ap(A,x,字符串,p);x=bigstab(Apfcn,b,[],[],]],[],[2],2);

示例8:明确的例子表明稳定双共轭梯度使用正确的预处理器

[M1,M2]=ilu(A+0.1*眼(n));#扰动的因子分解M=M1*M2;##bigstab在一次迭代后计算的参考解[x_ref,fl]=bigstab(A,b,[],1,M)##右预处理[y,fl]=bigstab[A/M,b,[],1)x=M\y#比较x和x_ref

参考

Y.Saad,稀疏线性系统的迭代方法,2003年第二版,SIAM

详见: bicg,cgs,gmres,pcg,qmr,tfqmr.

 
:x= cgs (A,b,tol,maxit,M1,M2,x0, …)
:x= cgs (A,b,tol,maxit,M, [],x0, …)
:[x,旗帜,relres,iter,resvec] = cgs (A,b, …)

解决A x=b这里的A是一个正方阵,使用共轭梯度平方法。

输入参数为:

  • A是线性系统的矩阵,它必须是平方。A可以作为矩阵、函数句柄或内联函数传递Afcn使得Afcn(x)=A*x。的附加参数Afcn在之后通过x0.
  • b是右侧向量。它必须是具有相同行数的列向量A.
  • tol是相对公差,如果未给定或设置为[],则使用默认值1e-6。
  • maxit外部迭代的最大次数,如果未给定或设置为[]默认值最小值(20,numel(b))使用。
  • M1,M2是预处理器。预处理矩阵如下所示M=M1*M2二者都M1M2可以作为矩阵或函数句柄或内联函数传递g使得g(x)=M1\xg(x)=M2\x如果M1为空或未通过,则不应用预处理器。所使用的技术是正确的预处理,即解决A*inv(M)*y=b然后x=发票(My.
  • x0初始猜测,如果未给定或设置为[]默认值零(大小(b))使用。

以下参数x0被视为参数,并以适当的方式传递给任何函数(AP)传递给cgs.

输出参数为:

  • x是计算的近似值。如果该方法不能转换,则它是具有最小残差的迭代方法。
  • 旗帜表示退出状态:
    • 0:迭代收敛到所选公差内
    • 1:收敛前达到最大迭代次数
    • 2:预处理矩阵是奇异的
    • 3:算法达到停滞
    • 4:从于被零除,算法无法继续
  • relres是用as获得的相对残差(A*x-b) /标准b).
  • iter是迭代x计算。
  • resvec是包含每次迭代时的残差的向量。正在执行resvec1.可以看到执行的迭代总数。

让我们考虑一个三对角矩阵的平凡问题

n=20;A=toeplitz(稀疏([1,1],[1,2],[2,1]*n^2,1,n))+。。。toeplitz(稀疏(1,2,1,n)*n/2。。。稀疏(1,2,1,1,n)*n/2);b=A*ones(n,1);重新启动=5;[M1,M2]=ilu(A);#在这种三标签的情况下,它对应于chol(A)M=M1*M2;Afcn=@(x)A*x;Mfcn=@(x)M\x;M1fcn=@(x)M1\x;M2fcn=@(x)M2\x;

示例1:的最简单用法cgs

x=cgs(A,b,[],n)

示例2: cgs具有一个计算A * x

x=cgs(Afcn,b,[],n)

示例3: cgs具有预处理矩阵M

x=cgs(A,b,[],1e-06,n,M)

示例4: cgs具有作为预处理器的函数

x=cgs(Afcn,b,1e-6,n,Mfcn)

示例5: cgs具有预处理矩阵M1M2

x=cgs(A,b,[],1e-6,n,M1,M2)

示例6: cgs具有作为预处理器的函数

x=cgs(Afcn,b,1e-6,n,M1fcn,M2fcn)

示例7: cgs将需要参数的函数作为输入

函数y=Ap(A,x,z)#计算A^z*x y=x;对于i=1:z y=A*y;endfor endfunctionApfcn=@(x,string,p)Ap(A,x,字符串,p);x=cgs(Apfcn,b,[],[],]],[],2],2);

示例8:明确的例子表明cgs使用正确的预处理器

[M1,M2]=ilu(A+0.3*眼(n));#扰动的因子分解M=M1*M2;##一次迭代后从cgs计算的参考解[x_ref,fl]=cgs(A,b,[],1,M)##右预处理[y,fl]=cgs(A/M,b,[],1)x=M\y#比较x和x_ref

参考文献:

Y.Saad,稀疏线性系统的迭代方法,2003年第二版,SIAM

详见: pcg,稳定双共轭梯度,bicg,gmres,qmr,tfqmr.

 
:x= gmres (A,b,重新启动,tol,maxit,M1,M2,x0, …)
:x= gmres (A,b,重新启动,tol,maxit,M, [],x0, …)
:[x,旗帜,relres,iter,resvec] = gmres (A,b, …)

解决A x=b使用带重启的预处理GMRES迭代方法,也称为PGMRES(重启)。

输入参数为:

  • A是线性系统的矩阵,它必须是平方。A可以作为矩阵、函数句柄或内联函数传递Afcn使得Afcn(x)=A*x。的附加参数Afcn在之后通过x0.
  • b是右侧向量。它必须是行数与相同的列向量A.
  • 重新启动是方法重新启动之前的迭代次数。如果它是[]或N=numel(b),则不应用restartis。
  • tol是第二个定位残差所需的相对公差,inv(M) * (b-a * x)。迭代操作如果标准(inv(M) * (b-a * x))≤tol*标准(inv(M) *B)如果tol则使用1e-6的公差。
  • maxit是外部迭代的最大次数,如果没有设置为[],则为默认值min(10,N/重新启动)使用。请注意,如果重新启动是空的,那么maxit是最大迭代次数。如果重新启动maxit不为空,则最大迭代次数为重新启动 * maxit.如果两者都有重新启动maxit为空,则最大迭代次数设置为min(10,N).
  • M1,M2是预处理器。预处理器M给定为M=M1*M2二者都M1M2可以作为矩阵、函数句柄或内联函数传递g这样g(x)=M1\xg(x)=M2\x如果M1是[]或未给定,则不应用预处理器。所使用的技术是左预处理,即解决inv(M) *A * x=发票(M) *b而不是A * x=b.
  • x0是初始猜测,如果未给定或设置为[],则为默认值零(大小(b))使用。

以下参数x0被视为参数,并以适当的方式传递给任何函数(AMM1M2)传递到gmres.

输出为:

  • x计算出的近似值。如果该方法不进行下凸,则它是具有最小残差的迭代方法。
  • 旗帜表示退出状态:
    0:迭代收敛到指定的公差内
    1:超过最大迭代次数
    2:预处理矩阵是奇异的
    3:算法达到停滞(两者之间的相对差异

    连续迭代小于eps)

  • relres是近似的相对预处理残差的值x.
  • iter是一个向量,包含为计算而执行的外部迭代次数和内部迭代次数x。即:
    • iter(1):外部迭代次数,即方法重新启动的次数。如果重新启动为空或N,则为1,如果不是1≤iter(1)maxit).
    • iter(2):在开始之前执行的迭代次数,即当iter(2)=重新启动如果重新启动为空或N,则1≤iter(2)maxit.

    更清楚地说,近似x在迭代时计算(iter(1)1.重新启动+iter(2)。从于输出x对应于最小预处理边解,该方法执行的迭代总数从下式给出长度(resvec)-1.

  • resvec是包含每次迭代(包括第0次迭代)的预处理相对残差的向量标准A * x0-b).

让我们考虑一个三对角矩阵的平凡问题

n=20;A=toeplitz(稀疏([1,1],[1,2],[2,1]*n^2,1,n))+。。。toeplitz(稀疏(1,2,1,n)*n/2。。。稀疏(1,2,1,1,n)*n/2);b=A*ones(n,1);重新启动=5;[M1,M2]=ilu(A);#在这种三元情况下,它对应于lu(A)M=M1*M2;Afcn=@(x)A*x;Mfcn=@(x)M\x;M1fcn=@(x)M1\x;M2fcn=@(x)M2\x;

示例1:的最简单用法gmres

x=gmres(A,b,[],[],n)

示例2: gmres具有一个计算A * x

x=gmres(Afcn,b,[],[],n)

示例3:的用法gmres随着重新启动

x=gmres(A,b,重新启动);

示例4: gmres具有预处理矩阵M有无重新启动

x=gmres(A,b,[],1e-06,n,M)x=gmre(A,b,重新启动,1e-6,n,M)

示例5: gmres具有作为预处理器的函数

x=克重(Afcn,b,[],1e-6,n,Mfcn)

示例6: gmres具有预处理矩阵M1M2

x=gmres(A,b,[],1e-6,n,M1,M2)

示例7: gmres具有作为预处理器的函数

x=克数(Afcn,b,1e-6,n,M1fcn,M2fcn)

示例8: gmres将需要参数的函数作为输入

函数y=Ap(A,x,p)#计算A^p*x y=x;对于i=1:p y=A*y;endfor endfunctionApfcn=@(x,p)Ap(A,x,p);x=gmres(Apfcn,b,[],[],[[],[],]],[],2);

示例9:明确的例子表明gmres使用aleft预处理器

[M1,M2]=ilu(A+0.1*眼(n));#扰动的因子分解M=M1*M2;##两次迭代后从gmres计算的参考解[x_ref,fl]=gmres(A,b,[],[],1,M)##左预处理[x,fl]=gmres(M\A,M\b,[],[1],1)x#比较x和x_ref

参考

Y.Saad,稀疏线性系统的迭代方法,2003年第二版,SIAM

详见: bicg,稳定双共轭梯度,cgs,pcg,聚合酶链式反应,qmr,tfqmr.

 
:x= qmr (A,b,rtol,maxit,M1,M2,x0)
:x= qmr (A,b,rtol,maxit,P)
:[x,旗帜,relres,iter,resvec] = qmr (A,b, …)

解决A x=b使用准最小残差迭代方法(无需前瞻)。

  • rtol是相对公差,如果未给定或设置为[],则使用默认值1e-6。
  • maxit外部迭代的最大次数,如果未给定或设置为[]默认值最小值(20,numel(b))使用。
  • x0初始猜测,如果未给定或设置为[]默认值零(大小(b))使用。

A可以作为矩阵或函数句柄或内联函数传递f使得f(x,“nottransp”)=A*xf(x,“transp”)=A'*x.

预处理器P给定为P=M1*M2二者都M1M2可以作为矩阵或函数句柄或内联函数传递g使得g(x,“nottransp”)=M1\xg(x,“nottransp”)=M2\xg(x,“transp”)=M1'\xg(x,“transp”)=M2'\x.

如果使用多个输出参数调用

  • 旗帜表示退出状态:
    • 0:迭代收敛到所选公差内
    • 1:收敛前达到最大迭代次数
    • 3:算法达到停滞

    (值2未使用,但为了兼容性而跳过)。

  • relres是相对残差的最终值。
  • iter是执行的迭代次数。
  • resvec是包含每次迭代时的残差范数的向量。

参考文献:

  1. R.Freund和N.Nachtigal,QMR:非Hermitian线性系统的一个拟极小残差方法,Numeriche Mathematik,1991,60,第315–339页。
  2. R.Barrett、M.Berry、T.Chan、J.Demmel、J.Donato、J.栋加拉、V.Eijkhour、R.Pozo、C.Romine和H.van der Vorst,线性系统解的模板:迭代方法的构建块,SIAM,第2版,1994年。

详见: bicg,稳定双共轭梯度,cgs,gmres,pcg.

 
:x= tfqmr (A,b,tol,maxit,M1,M2,x0, …)
:x= tfqmr (A,b,tol,maxit,M, [],x0, …)
:[x,旗帜,relres,iter,resvec] = tfqmr (A,b, …)

解决A x=b使用基于cgs的Transpose Tree qmr方法。

输入参数为:

  • A是线性系统的矩阵,它必须是平方。A可以作为矩阵、函数句柄或内联函数传递Afcn使得Afcn(x)=A*x。的附加参数Afcn在之后通过x0.
  • b是右侧向量。它必须是行数与相同的列向量A.
  • tol是相对公差,如果未给定或设置为[],则使用默认值1e-6。
  • maxit外部迭代的最大次数,如果未给定或设置为[]默认值最小值(20,numel(b))使用。为了兼容,从于方法在迭代次数中的不同行为是奇数或偶数,因此在中被视为迭代tfqmr整个奇偶循环。也就是说,为了进行整个迭代,该算法执行两个子迭代:奇数迭代和偶数迭代。
  • M1,M2是预处理器。预处理器M给定为M=M1*M2二者都M1M2可以作为矩阵或函数句柄或内联函数传递g使得g(x)=M1\xg(x)=M2\x所使用的技术是正确的预处理,即解决A*inv(M)*y=b然后x=发票(M)*y而不是A x=b.
  • x0初始猜测,如果未给定或设置为[]默认值零(大小(b))使用。

以下参数x0被视为参数,并以适当的方式传递给任何函数(AM)传递给tfqmr.

输出参数为:

  • x是计算的近似值。如果该方法不能转换,则它是具有最小残差的迭代方法。
  • 旗帜表示退出状态:
    • 0:迭代收敛到所选公差内
    • 1:收敛前达到最大迭代次数
    • 2:预处理矩阵是奇异的
    • 3:算法达到停滞
    • 4:从于被零除,算法无法继续
  • relres是获得的相对残差(A*x-b) /标准b).
  • iter是迭代x已计算。
  • resvec是一个向量,包含每次迭代时的残差(包括范数(b-A x0)).正在执行resvec1.可以看到执行的迭代总数。

让我们考虑一个三对角矩阵的平凡问题

n=20;A=toeplitz(稀疏([1,1],[1,2],[2,1]*n^2,1,n))+。。。toeplitz(稀疏(1,2,1,n)*n/2。。。稀疏(1,2,1,1,n)*n/2);b=A*ones(n,1);重新启动=5;[M1,M2]=ilu(A);#在这种三标签的情况下,它对应于chol(A)M=M1*M2;Afcn=@(x)A*x;Mfcn=@(x)M\x;M1fcn=@(x)M1\x;M2fcn=@(x)M2\x;

示例1:的最简单用法tfqmr

x=tfqmr(A,b,[],n)

示例2: tfqmr具有一个计算A * x

x=tfqmr(Afcn,b,[],n)

示例3: tfqmr具有预处理矩阵M

x=tfqmr(A,b,[],1e-06,n,M)

示例4: tfqmr具有作为预处理器的函数

x=tfqmr(Afcn,b,1e-6,n,Mfcn)

示例5: tfqmr具有预处理矩阵M1M2

x=tfqmr(A,b,[],1e-6,n,M1,M2)

示例6: tfmqr具有作为预处理器的函数

x=tfqmr(Afcn,b,1e-6,n,M1fcn,M2fcn)

示例7: tfqmr将需要参数的函数作为输入

函数y=Ap(A,x,z)#计算A^z*x y=x;对于i=1:z y=A*y;endfor endfunctionApfcn=@(x,string,p)Ap(A,x,字符串,p);x=tfqmr(Apfcn,b,[],[],]],[],[2],2);

示例8:明确的例子表明tfqmr使用正确的预处理器

[M1,M2]=ilu(A+0.3*眼(n));#扰动的因子分解M=M1*M2;##一次迭代后从tfqmr计算的参考解[x_ref,fl]=tfqmr(A,b,[],1,M)##右预处理[y,fl]=tfqmr

参考

Y.Saad,稀疏线性系统的迭代方法,2003年第二版,SIAM

详见: bicg,稳定双共轭梯度,cgs,gmres,pcg,qmr,聚合酶链式反应.


版权所有 © 2024 Octave中文网

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