00001
00003 inline _zgematrix t(const zgematrix& mat)
00004 {
00005 #ifdef CPPL_VERBOSE
00006 std::cerr << "# [MARK] t(const zgematrix&)"
00007 << std::endl;
00008 #endif//CPPL_VERBOSE
00009
00010 zgematrix newmat(mat.N,mat.M);
00011
00012 for(long i=0; i<newmat.M; i++){ for(long j=0; j<newmat.N; j++){
00013 newmat(i,j) =mat(j,i);
00014 }}
00015
00016 return _(newmat);
00017 }
00018
00019
00021 inline _zgematrix i(const zgematrix& mat)
00022 {
00023 #ifdef CPPL_VERBOSE
00024 std::cerr << "# [MARK] i(const zgematrix&)"
00025 << std::endl;
00026 #endif//CPPL_VERBOSE
00027
00028 #ifdef CPPL_DEBUG
00029 if(mat.M!=mat.N){
00030 std::cerr << "[ERROR] i(zgematrix&) " << std::endl
00031 << "This matrix is not square and has no inverse matrix."
00032 << std::endl
00033 << "Your input was (" << mat.M << "x" << mat.N << ")."
00034 << std::endl;
00035 exit(1);
00036 }
00037 #endif//CPPL_DEBUG
00038
00039 zgematrix mat_cp(mat), mat_inv(mat.M,mat.N);
00040 mat_inv.identity();
00041 mat_cp.zgesv(mat_inv);
00042
00043 return _(mat_inv);
00044 }
00045
00049
00050
00052 inline _zgematrix conj(const zgematrix& mat)
00053 {
00054 #ifdef CPPL_VERBOSE
00055 std::cerr << "# [MARK] conj(const zgematrix&)"
00056 << std::endl;
00057 #endif//CPPL_VERBOSE
00058
00059 zgematrix newmat(mat.M,mat.N);
00060 for(long i=0; i<mat.M; i++){ for(long j=0; j<mat.N; j++){
00061 newmat(i,j) =std::conj(mat(i,j));
00062 }}
00063
00064 return _(newmat);
00065 }
00066
00067
00069 inline _zgematrix conjt(const zgematrix& mat)
00070 {
00071 #ifdef CPPL_VERBOSE
00072 std::cerr << "# [MARK] conjt(const zgematrix&)"
00073 << std::endl;
00074 #endif//CPPL_VERBOSE
00075
00076 zgematrix newmat(mat.N,mat.M);
00077 for(long i=0; i<newmat.M; i++){ for(long j=0; j<newmat.N; j++){
00078 newmat(i,j) =std::conj(mat(j,i));
00079 }}
00080
00081 return _(newmat);
00082 }
00083
00087
00088
00091 inline void idamax(long& i, long& j, const zgematrix& mat)
00092 {
00093 #ifdef CPPL_VERBOSE
00094 std::cerr << "# [MARK] idamax(long&, long&, const zgematrix&)"
00095 << std::endl;
00096 #endif//CPPL_VERBOSE
00097
00098 long index( izamax_(mat.M*mat.N, mat.Array, 1) -1 );
00099 i =index%mat.M;
00100 j =index/mat.M;
00101 }
00102
00103
00105 inline std::complex<double> damax(const zgematrix& mat)
00106 {
00107 #ifdef CPPL_VERBOSE
00108 std::cerr << "# [MARK] damax(const zgematrix&)"
00109 << std::endl;
00110 #endif//CPPL_VERBOSE
00111
00112 return mat.Array[izamax_(mat.M*mat.N, mat.Array, 1) -1];
00113 }