SUBROUTINECTBSVF(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)*..ScalarArguments..INTEGERINCX,K,LDA,NCHARACTERDIAG,TRANS,UPLO*..*..ArrayArguments..COMPLEXA(LDA,*),X(*)*..**Purpose*=======**CTBSVsolvesoneofthesystemsofequations**A*x=b,orA'*x = b, or conjg( A')*x=b,**wherebandxarenelementvectorsandAisannbynunit,or*non-unit,upperorlowertriangularbandmatrix,with(k+1)*diagonals.**Notestforsingularityornear-singularityisincludedinthis*routine.Suchtestsmustbeperformedbeforecallingthisroutine.**Arguments*==========**UPLO-CHARACTER*1.*Onentry,UPLOspecifieswhetherthematrixisanupperor*lowertriangularmatrixasfollows:**UPLO='U'or'u'Aisanuppertriangularmatrix.**UPLO='L'or'l'Aisalowertriangularmatrix.**Unchangedonexit.**TRANS-CHARACTER*1.*Onentry,TRANSspecifiestheequationstobesolvedas*follows:**TRANS='N'or'n'A*x=b.**TRANS='T'or't'A'*x = b.** TRANS = 'C' or 'c' conjg( A')*x=b.**Unchangedonexit.**DIAG-CHARACTER*1.*Onentry,DIAGspecifieswhetherornotAisunit*triangularasfollows:**DIAG='U'or'u'Aisassumedtobeunittriangular.**DIAG='N'or'n'Aisnotassumedtobeunit*triangular.**Unchangedonexit.**N-INTEGER.*Onentry,NspecifiestheorderofthematrixA.*Nmustbeatleastzero.*Unchangedonexit.**K-INTEGER.*OnentrywithUPLO='U'or'u',Kspecifiesthenumberof*super-diagonalsofthematrixA.*OnentrywithUPLO='L'or'l',Kspecifiesthenumberof*sub-diagonalsofthematrixA.*Kmustsatisfy0.le.K.*Unchangedonexit.**A-COMPLEXarrayofDIMENSION(LDA,n).*BeforeentrywithUPLO='U'or'u',theleading(k+1)*bynpartofthearrayAmustcontaintheuppertriangular*bandpartofthematrixofcoefficients,suppliedcolumnby*column,withtheleadingdiagonalofthematrixinrow*(k+1)ofthearray,thefirstsuper-diagonalstartingat*position2inrowk,andsoon.Thetopleftkbyktriangle*ofthearrayAisnotreferenced.*Thefollowingprogramsegmentwilltransferanupper*triangularbandmatrixfromconventionalfullmatrixstorage*tobandstorage:**DO20,J=1,N*M=K+1-J*DO10,I=MAX(1,J-K),J*A(M+I,J)=matrix(I,J)*10CONTINUE*20CONTINUE**BeforeentrywithUPLO='L'or'l',theleading(k+1)*bynpartofthearrayAmustcontainthelowertriangular*bandpartofthematrixofcoefficients,suppliedcolumnby*column,withtheleadingdiagonalofthematrixinrow1of*thearray,thefirstsub-diagonalstartingatposition1in*row2,andsoon.Thebottomrightkbyktriangleofthe*arrayAisnotreferenced.*Thefollowingprogramsegmentwilltransferalower*triangularbandmatrixfromconventionalfullmatrixstorage*tobandstorage:**DO20,J=1,N*M=1-J*DO10,I=J,MIN(N,J+K)*A(M+I,J)=matrix(I,J)*10CONTINUE*20CONTINUE**NotethatwhenDIAG='U'or'u'theelementsofthearrayA*correspondingtothediagonalelementsofthematrixarenot*referenced,butareassumedtobeunity.*Unchangedonexit.**LDA-INTEGER.*Onentry,LDAspecifiesthefirstdimensionofAasdeclared*inthecalling(sub)program.LDAmustbeatleast*(k+1).*Unchangedonexit.**X-COMPLEXarrayofdimensionatleast*(1+(n-1)*abs(INCX)).*Beforeentry,theincrementedarrayXmustcontainthen*elementright-handsidevectorb.Onexit,Xisoverwritten*withthesolutionvectorx.**INCX-INTEGER.*Onentry,INCXspecifiestheincrementfortheelementsof*X.INCXmustnotbezero.*Unchangedonexit.***Level2Blasroutine.**--Writtenon22-October-1986.*JackDongarra,ArgonneNationalLab.*JeremyDuCroz,NagCentralOffice.*SvenHammarling,NagCentralOffice.*RichardHanson,SandiaNationalLabs.***..Parameters..COMPLEXZEROPARAMETER(ZERO=(0.0E+0,0.0E+0))*..*..LocalScalars..COMPLEXTEMPINTEGERI,INFO,IX,J,JX,KPLUS1,KX,LLOGICALNOCONJ,NOUNIT*..*..ExternalFunctions..LOGICALLSAMEEXTERNALLSAME*..*..ExternalSubroutines..EXTERNALXERBLA*..*..IntrinsicFunctions..INTRINSICCONJG,MAX,MIN*..**Testtheinputparameters.*INFO=0IF(.NOT.LSAME(UPLO,'U').AND..NOT.LSAME(UPLO,'L'))THENINFO=1ELSEIF(.NOT.LSAME(TRANS,'N').AND..NOT.LSAME(TRANS,'T').AND.+.NOT.LSAME(TRANS,'C'))THENINFO=2ELSEIF(.NOT.LSAME(DIAG,'U').AND..NOT.LSAME(DIAG,'N'))THENINFO=3ELSEIF(N.LT.0)THENINFO=4ELSEIF(K.LT.0)THENINFO=5ELSEIF(LDA.LT.(K+1))THENINFO=7ELSEIF(INCX.EQ.0)THENINFO=9ENDIFIF(INFO.NE.0)THENCALLXERBLA('CTBSV ',INFO)RETURNENDIF**Quickreturnifpossible.*IF(N.EQ.0)RETURN*NOCONJ=LSAME(TRANS,'T')NOUNIT=LSAME(DIAG,'N')**SetupthestartpointinXiftheincrementisnotunity.This*willbe(N-1)*INCXtoosmallfordescendingloops.*IF(INCX.LE.0)THENKX=1-(N-1)*INCXELSEIF(INCX.NE.1)THENKX=1ENDIF**Starttheoperations.InthisversiontheelementsofAare*accessedbysequentiallywithonepassthroughA.*IF(LSAME(TRANS,'N'))THEN**Formx:=inv(A)*x.*IF(LSAME(UPLO,'U'))THENKPLUS1=K+1IF(INCX.EQ.1)THENDO20J=N,1,-1IF(X(J).NE.ZERO)THENL=KPLUS1-JIF(NOUNIT)X(J)=X(J)/A(KPLUS1,J)TEMP=X(J)DO10I=J-1,MAX(1,J-K),-1X(I)=X(I)-TEMP*A(L+I,J)10CONTINUEENDIF20CONTINUEELSEKX=KX+(N-1)*INCXJX=KXDO40J=N,1,-1KX=KX-INCXIF(X(JX).NE.ZERO)THENIX=KXL=KPLUS1-JIF(NOUNIT)X(JX)=X(JX)/A(KPLUS1,J)TEMP=X(JX)DO30I=J-1,MAX(1,J-K),-1X(IX)=X(IX)-TEMP*A(L+I,J)IX=IX-INCX30CONTINUEENDIFJX=JX-INCX40CONTINUEENDIFELSEIF(INCX.EQ.1)THENDO60J=1,NIF(X(J).NE.ZERO)THENL=1-JIF(NOUNIT)X(J)=X(J)/A(1,J)TEMP=X(J)DO50I=J+1,MIN(N,J+K)X(I)=X(I)-TEMP*A(L+I,J)50CONTINUEENDIF60CONTINUEELSEJX=KXDO80J=1,NKX=KX+INCXIF(X(JX).NE.ZERO)THENIX=KXL=1-JIF(NOUNIT)X(JX)=X(JX)/A(1,J)TEMP=X(JX)DO70I=J+1,MIN(N,J+K)X(IX)=X(IX)-TEMP*A(L+I,J)IX=IX+INCX70CONTINUEENDIFJX=JX+INCX80CONTINUEENDIFENDIFELSE**Formx:=inv(A' )*x or x := inv( conjg( A'))*x.*IF(LSAME(UPLO,'U'))THENKPLUS1=K+1IF(INCX.EQ.1)THENDO110J=1,NTEMP=X(J)L=KPLUS1-JIF(NOCONJ)THENDO90I=MAX(1,J-K),J-1TEMP=TEMP-A(L+I,J)*X(I)90CONTINUEIF(NOUNIT)TEMP=TEMP/A(KPLUS1,J)ELSEDO100I=MAX(1,J-K),J-1TEMP=TEMP-CONJG(A(L+I,J))*X(I)100CONTINUEIF(NOUNIT)TEMP=TEMP/CONJG(A(KPLUS1,J))ENDIFX(J)=TEMP110CONTINUEELSEJX=KXDO140J=1,NTEMP=X(JX)IX=KXL=KPLUS1-JIF(NOCONJ)THENDO120I=MAX(1,J-K),J-1TEMP=TEMP-A(L+I,J)*X(IX)IX=IX+INCX120CONTINUEIF(NOUNIT)TEMP=TEMP/A(KPLUS1,J)ELSEDO130I=MAX(1,J-K),J-1TEMP=TEMP-CONJG(A(L+I,J))*X(IX)IX=IX+INCX130CONTINUEIF(NOUNIT)TEMP=TEMP/CONJG(A(KPLUS1,J))ENDIFX(JX)=TEMPJX=JX+INCXIF(J.GT.K)KX=KX+INCX140CONTINUEENDIFELSEIF(INCX.EQ.1)THENDO170J=N,1,-1TEMP=X(J)L=1-JIF(NOCONJ)THENDO150I=MIN(N,J+K),J+1,-1TEMP=TEMP-A(L+I,J)*X(I)150CONTINUEIF(NOUNIT)TEMP=TEMP/A(1,J)ELSEDO160I=MIN(N,J+K),J+1,-1TEMP=TEMP-CONJG(A(L+I,J))*X(I)160CONTINUEIF(NOUNIT)TEMP=TEMP/CONJG(A(1,J))ENDIFX(J)=TEMP170CONTINUEELSEKX=KX+(N-1)*INCXJX=KXDO200J=N,1,-1TEMP=X(JX)IX=KXL=1-JIF(NOCONJ)THENDO180I=MIN(N,J+K),J+1,-1TEMP=TEMP-A(L+I,J)*X(IX)IX=IX-INCX180CONTINUEIF(NOUNIT)TEMP=TEMP/A(1,J)ELSEDO190I=MIN(N,J+K),J+1,-1TEMP=TEMP-CONJG(A(L+I,J))*X(IX)IX=IX-INCX190CONTINUEIF(NOUNIT)TEMP=TEMP/CONJG(A(1,J))ENDIFX(JX)=TEMPJX=JX-INCXIF((N-J).GE.K)KX=KX-INCX200CONTINUEENDIFENDIFENDIF*RETURN**EndofCTBSV.*END
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。