资源描述:
《gmres源程序 matlab》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、------------------------------------------作者xxxx------------------------------------------日期xxxxgmres源程序matlab【精品文档】function[x,flag,relres,iter,resvec]=gmres(A,b,restart,tol,maxit,M1,M2,x,varargin)%GMRESGeneralizedMinimumResidualMethod.%X=GMRES(A,B)attemptstosolvethesystemoflinearequationsA
2、*X=B%forX.TheN-by-NcoefficientmatrixAmustbesquareandtheright%handsidecolumnvectorBmusthavelengthN.Thisusestheunrestarted%methodwithMIN(N,10)totaliterations.%%X=GMRES(AFUN,B)acceptsafunctionhandleAFUNinsteadofthematrix%A.AFUN(X)acceptsavectorinputXandreturnsthematrix-vector%productA*X.Inallo
3、fthefollowingsyntaxes,youcanreplaceAby%AFUN.%%X=GMRES(A,B,RESTART)restartsthemethodeveryRESTARTiterations.%IfRESTARTisNor[]thenGMRESusestheunrestartedmethodasabove.%%X=GMRES(A,B,RESTART,TOL)specifiesthetoleranceofthemethod.If%TOLis[]thenGMRESusesthedefault,1e-6.%%X=GMRES(A,B,RESTART,TOL,MAX
4、IT)specifiesthemaximumnumberofouter%iterations.Note:thetotalnumberofiterationsisRESTART*MAXIT.If%MAXITis[]thenGMRESusesthedefault,MIN(N/RESTART,10).IfRESTART%isNor[]thenthetotalnumberofiterationsisMAXIT.%%X=GMRES(A,B,RESTART,TOL,MAXIT,M)and%X=GMRES(A,B,RESTART,TOL,MAXIT,M1,M2)usepreconditio
5、nerMorM=M1*M2%andeffectivelysolvethesysteminv(M)*A*X=inv(M)*BforX.IfMis%[]thenapreconditionerisnotapplied.Mmaybeafunctionhandle%returningMX.%%X=GMRES(A,B,RESTART,TOL,MAXIT,M1,M2,X0)specifiesthefirstinitial%guess.IfX0is[]thenGMRESusesthedefault,anallzerovector.%%[X,FLAG]=GMRES(A,B,...)alsor
6、eturnsaconvergenceFLAG:%0GMRESconvergedtothedesiredtoleranceTOLwithinMAXITiterations.%1GMRESiteratedMAXITtimesbutdidnotconverge.%2preconditionerMwasill-conditioned.%3GMRESstagnated(twoconsecutiveiterateswerethesame).%%[X,FLAG,RELRES]=GMRES(A,B,...)alsoreturnstherelativeresidual%NORM(B-A*X)/
7、NORM(B).IfFLAGis0,thenRELRES<=TOL.Notewith%preconditionersM1,M2,theresidualisNORM(M2(M1(B-A*X))).%【精品文档】【精品文档】%[X,FLAG,RELRES,ITER]=GMRES(A,B,...)alsoreturnsboththeouterand%inneriterationnumbersatwhichXwascomputed:0<=ITER(1)<=MAXIT%and0<=ITER(2)<=RESTA