❶ 求簡要介紹一下gmres演算法。謝謝。
視圖求解線性方程組A*x=b的解x。nXn的稀疏矩陣A必須是方程且應是大型稀疏矩陣。列向量b的長度必須為n。參數A可以是一個函數afun以使得afun(x)返回A*x,對於這一語法格式,gmres並不重新啟動,迭代的最大次數為min(n,10)。
如果gmres收斂,則顯示這一結果的信息。如果gmres在最大迭代步後沒有收斂或者由於某種原因而停止,則列印警告信息,顯示相對殘差范數norm(b-A*x)/norm(b)並且顯示該方法停止或者失效時的迭代步數。
Gmres(A,b,restart)
在每一次重新開始內部迭代時才重新開始方法。外部迭代的最大數目為min(n/restart,10),總迭代的最大步數為restart*min(n/restart,10).如果restart為n或者[],則gmres並不重新開始,則總迭代的最大數目為min(n,10)
Gmres(A,b,restart,tol)
指定方法的誤差。如果tol為[],則函數gmres將使用默認值1e-6.
Gmres(A,b,restart,tol,maxit)
指定外部迭代的最大次數,也就是說,迭代的總次數不超過restart*matrix。如果參數maxit為[],則矩陣gmres使用默認值min(n/restart,10);如果參數restart為n或者[],則總迭代的最大次數為maxit(而非restart*matxit)。
Gmres(A,b,restart,tol,maxit,M)和 Gmres(A,b,restart,tol,maxit,M1,M2)
使用預處理矩陣M或者M=M1*M2有效地求解方程組inv(M)*A*x=inv(M)*b.如果M為[],則函數gmres不適應預處理矩陣,M可以是一個函數,它返回M\x
Gmres(A,b,restart,tol,maxit,M1,M2,x0)
指定初始的猜測值。如果x0為[],則函數gmres將使用默認值,一個全為零的向量。
Gmres(afun,b,restart,tol,maxit,m1fun,m2fun,x0,p1,p2,…)
將參數傳遞到函數afun(x,p1,p2,…),m1fun(x,p1,p2,…)和m2fun(x,p1,p2,…)中。
[x,flag]=gmres(A,b,…)
返回一個收斂標志符:
Flag=0
函數gmres在maxit外部迭代步數之內收斂到期望的誤差
Flag=1
函數gmres迭代maxit次但沒有收斂
Flag=2
預處理矩陣M為病態條件陣
Flag=3
函數gmres停滯(兩個連續迭代步的結果相同)
當flag的值不為0時,返回的解x是在所有迭代過程中得到的具有最小范數殘差的結果。如果指定輸出flag,則不顯示任何消息。
[x,flag,relres]=gmres(A,b,…)
返回相當殘差范數norm(b-A*x)/norm(b),如果flag的值為0,則relres<=tol,
[x,flag,relres,iter]=gmres(A,b,…)
返回計算x時外部和內部迭代次數,其中0<=iter(1)<=maxit且0<=iter(2)<=restart.
[x,flag,relres,iter,resvec]=gmres(A,b,…)
返回每一個內部迭代時的殘差范數向量,包含norm(b-A*x0).