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 int length(
const vec &v);
99 template int length(
const cvec &v);
100 template int length(
const svec &v);
101 template int length(
const ivec &v);
102 template int length(
const bvec &v);
104 template double sum(
const vec &v);
105 template std::complex<double>
sum(
const cvec &v);
106 template short sum(
const svec &v);
107 template int sum(
const ivec &v);
108 template bin
sum(
const bvec &v);
110 template double sum_sqr(
const vec &v);
111 template std::complex<double>
sum_sqr(
const cvec &v);
112 template short sum_sqr(
const svec &v);
113 template int sum_sqr(
const ivec &v);
114 template bin
sum_sqr(
const bvec &v);
116 template vec
cumsum(
const vec &v);
117 template cvec
cumsum(
const cvec &v);
118 template svec
cumsum(
const svec &v);
119 template ivec
cumsum(
const ivec &v);
120 template bvec
cumsum(
const bvec &v);
122 template double prod(
const vec &v);
123 template std::complex<double>
prod(
const cvec &v);
124 template short prod(
const svec &v);
125 template int prod(
const ivec &v);
126 template bin
prod(
const bvec &v);
128 template vec
cross(
const vec &v1,
const vec &v2);
129 template cvec
cross(
const cvec &v1,
const cvec &v2);
130 template ivec
cross(
const ivec &v1,
const ivec &v2);
131 template svec
cross(
const svec &v1,
const svec &v2);
132 template bvec
cross(
const bvec &v1,
const bvec &v2);
134 template vec
reverse(
const vec &in);
135 template cvec
reverse(
const cvec &in);
136 template svec
reverse(
const svec &in);
137 template ivec
reverse(
const ivec &in);
138 template bvec
reverse(
const bvec &in);
140 template vec
zero_pad(
const vec &v,
int n);
141 template cvec
zero_pad(
const cvec &v,
int n);
142 template ivec
zero_pad(
const ivec &v,
int n);
143 template svec
zero_pad(
const svec &v,
int n);
144 template bvec
zero_pad(
const bvec &v,
int n);
146 template vec
zero_pad(
const vec &v);
147 template cvec
zero_pad(
const cvec &v);
148 template ivec
zero_pad(
const ivec &v);
149 template svec
zero_pad(
const svec &v);
150 template bvec
zero_pad(
const bvec &v);
152 template mat
zero_pad(
const mat &,
int,
int);
153 template cmat
zero_pad(
const cmat &,
int,
int);
154 template imat
zero_pad(
const imat &,
int,
int);
155 template smat
zero_pad(
const smat &,
int,
int);
158 template vec
sum(
const mat &m,
int dim);
159 template cvec
sum(
const cmat &m,
int dim);
160 template svec
sum(
const smat &m,
int dim);
161 template ivec
sum(
const imat &m,
int dim);
162 template bvec
sum(
const bmat &m,
int dim);
164 template double sumsum(
const mat &X);
165 template std::complex<double>
sumsum(
const cmat &X);
166 template short sumsum(
const smat &X);
167 template int sumsum(
const imat &X);
170 template vec
sum_sqr(
const mat & m,
int dim);
171 template cvec
sum_sqr(
const cmat &m,
int dim);
172 template svec
sum_sqr(
const smat &m,
int dim);
173 template ivec
sum_sqr(
const imat &m,
int dim);
176 template mat
cumsum(
const mat &m,
int dim);
177 template cmat
cumsum(
const cmat &m,
int dim);
178 template smat
cumsum(
const smat &m,
int dim);
179 template imat
cumsum(
const imat &m,
int dim);
182 template vec
prod(
const mat &m,
int dim);
183 template cvec
prod(
const cmat &v,
int dim);
184 template svec
prod(
const smat &m,
int dim);
185 template ivec
prod(
const imat &m,
int dim);
186 template bvec
prod(
const bmat &m,
int dim);
188 template vec
diag(
const mat &in);
189 template cvec
diag(
const cmat &in);
191 template void diag(
const vec &in, mat &m);
192 template void diag(
const cvec &in, cmat &m);
194 template mat
diag(
const vec &v,
const int K);
195 template cmat
diag(
const cvec &v,
const int K);
197 template mat
bidiag(
const vec &,
const vec &);
198 template cmat
bidiag(
const cvec &,
const cvec &);
200 template void bidiag(
const vec &,
const vec &, mat &);
201 template void bidiag(
const cvec &,
const cvec &, cmat &);
203 template void bidiag(
const mat &, vec &, vec &);
204 template void bidiag(
const cmat &, cvec &, cvec &);
206 template mat
tridiag(
const vec &main,
const vec &,
const vec &);
207 template cmat
tridiag(
const cvec &main,
const cvec &,
const cvec &);
209 template void tridiag(
const vec &main,
const vec &,
const vec &, mat &);
210 template void tridiag(
const cvec &main,
const cvec &,
const cvec &, cmat &);
212 template void tridiag(
const mat &m, vec &, vec &, vec &);
213 template void tridiag(
const cmat &m, cvec &, cvec &, cvec &);
215 template double trace(
const mat &in);
216 template std::complex<double>
trace(
const cmat &in);
217 template short trace(
const smat &in);
218 template int trace(
const imat &in);
221 template void transpose(
const mat &m, mat &out);
222 template void transpose(
const cmat &m, cmat &out);
223 template void transpose(
const smat &m, smat &out);
224 template void transpose(
const imat &m, imat &out);
263 template mat
reshape(
const mat &m,
int rows,
int cols);
264 template cmat
reshape(
const cmat &m,
int rows,
int cols);
265 template imat
reshape(
const imat &m,
int rows,
int cols);
266 template smat
reshape(
const smat &m,
int rows,
int cols);
269 template mat
reshape(
const vec &m,
int rows,
int cols);
270 template cmat
reshape(
const cvec &m,
int rows,
int cols);
271 template imat
reshape(
const ivec &m,
int rows,
int cols);
272 template smat
reshape(
const svec &m,
int rows,
int cols);
273 template bmat reshape(
const bvec &m,
int rows,
int cols);
275 template mat
kron(
const mat &X,
const mat &Y);
276 template cmat
kron(
const cmat &X,
const cmat &Y);
277 template imat
kron(
const imat &X,
const imat &Y);
278 template smat
kron(
const smat &X,
const smat &Y);
281 template vec repmat(
const vec &v,
int n);
282 template cvec repmat(
const cvec &v,
int n);
283 template ivec repmat(
const ivec &v,
int n);
284 template svec repmat(
const svec &v,
int n);
285 template bvec repmat(
const bvec &v,
int n);
287 template mat repmat(
const vec &v,
int m,
int n,
bool transpose);
288 template cmat repmat(
const cvec &v,
int m,
int n,
bool transpose);
289 template imat repmat(
const ivec &v,
int m,
int n,
bool transpose);
290 template smat repmat(
const svec &v,
int m,
int n,
bool transpose);
291 template bmat repmat(
const bvec &v,
int m,
int n,
bool transpose);
293 template mat repmat(
const mat &data,
int m,
int n);
294 template cmat repmat(
const cmat &data,
int m,
int n);
295 template imat repmat(
const imat &data,
int m,
int n);
296 template smat repmat(
const smat &data,
int m,
int n);
297 template bmat repmat(
const bmat &data,
int m,
int n);