00001
00003 inline _zgbmatrix t(const zgbmatrix& mat)
00004 {
00005 #ifdef CPPL_VERBOSE
00006 std::cerr << "# [MARK] t(const zgbmatrix&)"
00007 << std::endl;
00008 #endif//CPPL_VERBOSE
00009
00010 zgbmatrix newmat(mat.N, mat.M, mat.KU, mat.KL);
00011 for(long i=0; i<newmat.M; i++){
00012 for(long j=max(0,i-newmat.KL); j<min(newmat.N,i+newmat.KU+1); j++){
00013 newmat(i,j) =mat(j,i);
00014 }
00015 }
00016
00017 return _(newmat);
00018 }
00019
00020
00022 inline _zgematrix i(const zgbmatrix& mat)
00023 {
00024 #ifdef CPPL_VERBOSE
00025 std::cerr << "# [MARK] i(const zgbmatrix&)"
00026 << std::endl;
00027 #endif//CPPL_VERBOSE
00028
00029 #ifdef CPPL_DEBUG
00030 if(mat.M!=mat.N){
00031 std::cerr << "[ERROR] i(zgbmatrix&) " << std::endl
00032 << "This matrix is not square and has no inverse matrix."
00033 << std::endl
00034 << "Your input was (" << mat.M << "x" << mat.N << ")."
00035 << std::endl;
00036 exit(1);
00037 }
00038 #endif//CPPL_DEBUG
00039
00040 zgbmatrix mat_cp(mat);
00041 zgematrix mat_inv(mat.M,mat.N);
00042 mat_inv.identity();
00043 mat_cp.zgbsv(mat_inv);
00044
00045 return _(mat_inv);
00046 }
00047
00051
00052
00054 inline _zgbmatrix conj(const zgbmatrix& mat)
00055 {
00056 #ifdef CPPL_VERBOSE
00057 std::cerr << "# [MARK] conj(const zgbmatrix& mat)"
00058 << std::endl;
00059 #endif//CPPL_VERBOSE
00060
00061 zgbmatrix newmat(mat.M, mat.N, mat.KL, mat.KU);
00062 for(long i=0; i<mat.M; i++){
00063 for(long j=max(0,i-mat.KL); j<min(mat.N,i+mat.KU+1); j++){
00064 newmat(i,j) =std::conj(mat(i,j));
00065 }
00066 }
00067 return _(newmat);
00068 }
00069
00070
00072 inline _zgbmatrix conjt(const zgbmatrix& mat)
00073 {
00074 #ifdef CPPL_VERBOSE
00075 std::cerr << "# [MARK] conjt(const zgbmatrix&)"
00076 << std::endl;
00077 #endif//CPPL_VERBOSE
00078
00079 zgbmatrix newmat(mat.N, mat.M, mat.KU, mat.KL);
00080 for(long i=0; i<newmat.m; i++){
00081 for(long j=max(0,i-newmat.kl); j<min(newmat.n,i+newmat.ku+1); j++){
00082 newmat(i,j) =std::conj(mat(j,i));
00083 }
00084 }
00085 return _(newmat);
00086 }