41 cmat
sqrtm(
const mat& A)
47 cmat
sqrtm(
const cmat& A)
56 for (
int j = 0; j < n; j++)
61 for (
int p = 0; p < n - 1; p++) {
62 for (
int i = 0; i < n - (p + 1); i++) {
63 const int j = i + p + 1;
64 std::complex<double> s = T(i, j);
66 for (
int k = i + 1; k < j; k++)
67 s -= R(i, k) * R(k, j);
69 const std::complex<double> d = R(i, i) + R(j, j) + fudge;
70 const std::complex<double> conj_d =
conj(d);
72 R(i, j) = (s * conj_d) / (d * conj_d);
80 bool all(
const bvec &testvec)
82 for (
int i = 0; i < testvec.length(); i++)
83 if (!testvec(i))
return false;
87 bool any(
const bvec &testvec)
89 for (
int i = 0; i < testvec.length(); i++)
90 if (testvec(i))
return true;
98 template ITPP_EXPORT
int length(
const vec &v);
99 template ITPP_EXPORT
int length(
const cvec &v);
100 template ITPP_EXPORT
int length(
const svec &v);
101 template ITPP_EXPORT
int length(
const ivec &v);
102 template ITPP_EXPORT
int length(
const bvec &v);
104 template ITPP_EXPORT
double sum(
const vec &v);
105 template ITPP_EXPORT std::complex<double>
sum(
const cvec &v);
106 template ITPP_EXPORT
short sum(
const svec &v);
107 template ITPP_EXPORT
int sum(
const ivec &v);
108 template ITPP_EXPORT bin
sum(
const bvec &v);
110 template ITPP_EXPORT
double sum_sqr(
const vec &v);
111 template ITPP_EXPORT std::complex<double>
sum_sqr(
const cvec &v);
112 template ITPP_EXPORT
short sum_sqr(
const svec &v);
113 template ITPP_EXPORT
int sum_sqr(
const ivec &v);
114 template ITPP_EXPORT bin
sum_sqr(
const bvec &v);
116 template ITPP_EXPORT vec
cumsum(
const vec &v);
117 template ITPP_EXPORT cvec
cumsum(
const cvec &v);
118 template ITPP_EXPORT svec
cumsum(
const svec &v);
119 template ITPP_EXPORT ivec
cumsum(
const ivec &v);
120 template ITPP_EXPORT bvec
cumsum(
const bvec &v);
122 template ITPP_EXPORT
double prod(
const vec &v);
123 template ITPP_EXPORT std::complex<double>
prod(
const cvec &v);
124 template ITPP_EXPORT
short prod(
const svec &v);
125 template ITPP_EXPORT
int prod(
const ivec &v);
126 template ITPP_EXPORT bin
prod(
const bvec &v);
128 template ITPP_EXPORT vec
cross(
const vec &v1,
const vec &v2);
129 template ITPP_EXPORT cvec
cross(
const cvec &v1,
const cvec &v2);
130 template ITPP_EXPORT ivec
cross(
const ivec &v1,
const ivec &v2);
131 template ITPP_EXPORT svec
cross(
const svec &v1,
const svec &v2);
132 template ITPP_EXPORT bvec
cross(
const bvec &v1,
const bvec &v2);
134 template ITPP_EXPORT vec
reverse(
const vec &in);
135 template ITPP_EXPORT cvec
reverse(
const cvec &in);
136 template ITPP_EXPORT svec
reverse(
const svec &in);
137 template ITPP_EXPORT ivec
reverse(
const ivec &in);
138 template ITPP_EXPORT bvec
reverse(
const bvec &in);
140 template ITPP_EXPORT vec
zero_pad(
const vec &v,
int n);
141 template ITPP_EXPORT cvec
zero_pad(
const cvec &v,
int n);
142 template ITPP_EXPORT ivec
zero_pad(
const ivec &v,
int n);
143 template ITPP_EXPORT svec
zero_pad(
const svec &v,
int n);
144 template ITPP_EXPORT bvec
zero_pad(
const bvec &v,
int n);
146 template ITPP_EXPORT vec
zero_pad(
const vec &v);
147 template ITPP_EXPORT cvec
zero_pad(
const cvec &v);
148 template ITPP_EXPORT ivec
zero_pad(
const ivec &v);
149 template ITPP_EXPORT svec
zero_pad(
const svec &v);
150 template ITPP_EXPORT bvec
zero_pad(
const bvec &v);
152 template ITPP_EXPORT mat
zero_pad(
const mat &,
int,
int);
153 template ITPP_EXPORT cmat
zero_pad(
const cmat &,
int,
int);
154 template ITPP_EXPORT imat
zero_pad(
const imat &,
int,
int);
155 template ITPP_EXPORT smat
zero_pad(
const smat &,
int,
int);
158 template ITPP_EXPORT vec
sum(
const mat &m,
int dim);
159 template ITPP_EXPORT cvec
sum(
const cmat &m,
int dim);
160 template ITPP_EXPORT svec
sum(
const smat &m,
int dim);
161 template ITPP_EXPORT ivec
sum(
const imat &m,
int dim);
162 template ITPP_EXPORT bvec
sum(
const bmat &m,
int dim);
164 template ITPP_EXPORT
double sumsum(
const mat &X);
165 template ITPP_EXPORT std::complex<double>
sumsum(
const cmat &X);
166 template ITPP_EXPORT
short sumsum(
const smat &X);
167 template ITPP_EXPORT
int sumsum(
const imat &X);
168 template ITPP_EXPORT bin
sumsum(
const bmat &X);
170 template ITPP_EXPORT vec
sum_sqr(
const mat & m,
int dim);
171 template ITPP_EXPORT cvec
sum_sqr(
const cmat &m,
int dim);
172 template ITPP_EXPORT svec
sum_sqr(
const smat &m,
int dim);
173 template ITPP_EXPORT ivec
sum_sqr(
const imat &m,
int dim);
174 template ITPP_EXPORT bvec
sum_sqr(
const bmat &m,
int dim);
176 template ITPP_EXPORT mat
cumsum(
const mat &m,
int dim);
177 template ITPP_EXPORT cmat
cumsum(
const cmat &m,
int dim);
178 template ITPP_EXPORT smat
cumsum(
const smat &m,
int dim);
179 template ITPP_EXPORT imat
cumsum(
const imat &m,
int dim);
182 template ITPP_EXPORT vec
prod(
const mat &m,
int dim);
183 template ITPP_EXPORT cvec
prod(
const cmat &v,
int dim);
184 template ITPP_EXPORT svec
prod(
const smat &m,
int dim);
185 template ITPP_EXPORT ivec
prod(
const imat &m,
int dim);
186 template ITPP_EXPORT bvec
prod(
const bmat &m,
int dim);
188 template ITPP_EXPORT vec
diag(
const mat &in);
189 template ITPP_EXPORT cvec
diag(
const cmat &in);
191 template ITPP_EXPORT
void diag(
const vec &in, mat &m);
192 template ITPP_EXPORT
void diag(
const cvec &in, cmat &m);
194 template ITPP_EXPORT mat
diag(
const vec &v,
const int K);
195 template ITPP_EXPORT cmat
diag(
const cvec &v,
const int K);
197 template ITPP_EXPORT mat
bidiag(
const vec &,
const vec &);
198 template ITPP_EXPORT cmat
bidiag(
const cvec &,
const cvec &);
200 template ITPP_EXPORT
void bidiag(
const vec &,
const vec &, mat &);
201 template ITPP_EXPORT
void bidiag(
const cvec &,
const cvec &, cmat &);
203 template ITPP_EXPORT
void bidiag(
const mat &, vec &, vec &);
204 template ITPP_EXPORT
void bidiag(
const cmat &, cvec &, cvec &);
206 template ITPP_EXPORT mat
tridiag(
const vec &main,
const vec &,
const vec &);
207 template ITPP_EXPORT cmat
tridiag(
const cvec &main,
const cvec &,
const cvec &);
209 template ITPP_EXPORT
void tridiag(
const vec &main,
const vec &,
const vec &, mat &);
210 template ITPP_EXPORT
void tridiag(
const cvec &main,
const cvec &,
const cvec &, cmat &);
212 template ITPP_EXPORT
void tridiag(
const mat &m, vec &, vec &, vec &);
213 template ITPP_EXPORT
void tridiag(
const cmat &m, cvec &, cvec &, cvec &);
215 template ITPP_EXPORT
double trace(
const mat &in);
216 template ITPP_EXPORT std::complex<double>
trace(
const cmat &in);
217 template ITPP_EXPORT
short trace(
const smat &in);
218 template ITPP_EXPORT
int trace(
const imat &in);
219 template ITPP_EXPORT bin
trace(
const bmat &in);
221 template ITPP_EXPORT
void transpose(
const mat &m, mat &out);
222 template ITPP_EXPORT
void transpose(
const cmat &m, cmat &out);
223 template ITPP_EXPORT
void transpose(
const smat &m, smat &out);
224 template ITPP_EXPORT
void transpose(
const imat &m, imat &out);
227 template ITPP_EXPORT mat
transpose(
const mat &m);
228 template ITPP_EXPORT cmat
transpose(
const cmat &m);
229 template ITPP_EXPORT smat
transpose(
const smat &m);
230 template ITPP_EXPORT imat
transpose(
const imat &m);
248 template ITPP_EXPORT
bool is_unitary(
const mat &X);
249 template ITPP_EXPORT
bool is_unitary(
const cmat &X);
251 template ITPP_EXPORT vec
rvectorize(
const mat &m);
252 template ITPP_EXPORT cvec
rvectorize(
const cmat &m);
253 template ITPP_EXPORT ivec
rvectorize(
const imat &m);
254 template ITPP_EXPORT svec
rvectorize(
const smat &m);
257 template ITPP_EXPORT vec
cvectorize(
const mat &m);
258 template ITPP_EXPORT cvec
cvectorize(
const cmat &m);
259 template ITPP_EXPORT ivec
cvectorize(
const imat &m);
260 template ITPP_EXPORT svec
cvectorize(
const smat &m);
263 template ITPP_EXPORT mat
reshape(
const mat &m,
int rows,
int cols);
264 template ITPP_EXPORT cmat
reshape(
const cmat &m,
int rows,
int cols);
265 template ITPP_EXPORT imat
reshape(
const imat &m,
int rows,
int cols);
266 template ITPP_EXPORT smat
reshape(
const smat &m,
int rows,
int cols);
269 template ITPP_EXPORT mat
reshape(
const vec &m,
int rows,
int cols);
270 template ITPP_EXPORT cmat
reshape(
const cvec &m,
int rows,
int cols);
271 template ITPP_EXPORT imat
reshape(
const ivec &m,
int rows,
int cols);
272 template ITPP_EXPORT smat
reshape(
const svec &m,
int rows,
int cols);
273 template ITPP_EXPORT
bmat reshape(
const bvec &m,
int rows,
int cols);
275 template ITPP_EXPORT mat
kron(
const mat &X,
const mat &Y);
276 template ITPP_EXPORT cmat
kron(
const cmat &X,
const cmat &Y);
277 template ITPP_EXPORT imat
kron(
const imat &X,
const imat &Y);
278 template ITPP_EXPORT smat
kron(
const smat &X,
const smat &Y);
281 template ITPP_EXPORT vec repmat(
const vec &v,
int n);
282 template ITPP_EXPORT cvec repmat(
const cvec &v,
int n);
283 template ITPP_EXPORT ivec repmat(
const ivec &v,
int n);
284 template ITPP_EXPORT svec repmat(
const svec &v,
int n);
285 template ITPP_EXPORT bvec repmat(
const bvec &v,
int n);
287 template ITPP_EXPORT mat repmat(
const vec &v,
int m,
int n,
bool transpose);
288 template ITPP_EXPORT cmat repmat(
const cvec &v,
int m,
int n,
bool transpose);
289 template ITPP_EXPORT imat repmat(
const ivec &v,
int m,
int n,
bool transpose);
290 template ITPP_EXPORT smat repmat(
const svec &v,
int m,
int n,
bool transpose);
291 template ITPP_EXPORT
bmat repmat(
const bvec &v,
int m,
int n,
bool transpose);
293 template ITPP_EXPORT mat repmat(
const mat &data,
int m,
int n);
294 template ITPP_EXPORT cmat repmat(
const cmat &data,
int m,
int n);
295 template ITPP_EXPORT imat repmat(
const imat &data,
int m,
int n);
296 template ITPP_EXPORT smat repmat(
const smat &data,
int m,
int n);
297 template ITPP_EXPORT
bmat repmat(
const bmat &data,
int m,
int n);
Various functions on vectors and matrices - header file.
bool is_hermitian(const Mat< Num_T > &X)
Returns true if matrix X is hermitian, false otherwise.
Vec< T > reverse(const Vec< T > &in)
Reverse the input vector.
Mat< T > bidiag(const Vec< T > &main, const Vec< T > &sup)
Returns a matrix with the elements of the input vector main on the diagonal and the elements of the i...
cvec conj(const cvec &x)
Conjugate of complex value.
Vec< T > cross(const Vec< T > &v1, const Vec< T > &v2)
Vector cross product. Vectors need to be of size 3.
T sum(const Vec< T > &v)
Sum of all elements in the vector.
cmat to_cmat(const Mat< T > &m)
Converts a Mat<T> to cmat.
bool schur(const mat &A, mat &U, mat &T)
Schur decomposition of a real matrix.
Vec< T > rvectorize(const Mat< T > &m)
Row vectorize the matrix [(0,0) (0,1) ... (N-1,N-2) (N-1,N-1)].
int length(const Vec< T > &v)
Length of vector.
bool is_unitary(const Mat< Num_T > &X)
Returns true if matrix X is unitary, false otherwise.
T prod(const Vec< T > &v)
The product of all elements in the vector.
Definitions of converters between different vector and matrix types.
T sum_sqr(const Vec< T > &v)
Sum of square of the elements in a vector.
T min(const Vec< T > &in)
Minimum value of vector.
ITPP_EXPORT bool all(const bvec &testvec)
Returns true if all elements are ones and false otherwise.
T sumsum(const Mat< T > &X)
Sum of all elements in the given matrix. Fast version of sum(sum(X))
Vec< T > cumsum(const Vec< T > &v)
Cumulative sum of all elements in the vector.
Mat< T > tridiag(const Vec< T > &main, const Vec< T > &sup, const Vec< T > &sub)
Returns a matrix with the elements of main on the diagonal, the elements of sup on the diagonal row a...
Definitions of Schur decomposition functions.
void hermitian_transpose(const Mat< T > &m, Mat< T > &out)
void transpose(const Mat< T > &m, Mat< T > &out)
Transposition of the matrix m returning the transposed matrix in out.
Mat< T > reshape(const Mat< T > &m, int rows, int cols)
Reshape the matrix into an rows*cols matrix.
T trace(const Mat< T > &m)
The trace of the matrix m, i.e. the sum of the diagonal elements.
vec sqrt(const vec &x)
Square root of the elements.
Mat< Num_T > kron(const Mat< Num_T > &X, const Mat< Num_T > &Y)
Computes the Kronecker product of two matrices.
Mat< T > diag(const Vec< T > &v, const int K=0)
Create a diagonal matrix using vector v as its diagonal.
ITPP_EXPORT bool any(const bvec &testvec)
Returns true if any element is one and false otherwise.
ITPP_EXPORT cmat sqrtm(const cmat &A)
Square root of the complex square matrix A.
Vec< T > cvectorize(const Mat< T > &m)
Column vectorize the matrix [(0,0) (1,0) ... (N-2,N-1) (N-1,N-1)].
Vec< T > zero_pad(const Vec< T > &v, int n)
Zero-pad a vector to size n.
Mat< bin > bmat
bin matrix