63 for (
int i = 0;i < v.
length();i++)
79 it_assert((dim == 1) || (dim == 2),
"sum: dimension need to be 1 or 2");
85 for (
int i = 0; i < m.
cols(); i++)
91 for (
int i = 0; i < m.
rows(); i++)
103 const T * X_data = X.
_data();
107 for (
int i = 0;i < X_datasize;i++)
120 for (
int i = 0; i < v.
length(); i++)
136 it_assert((dim == 1) || (dim == 2),
"sum_sqr: dimension need to be 1 or 2");
142 for (
int i = 0; i < m.
cols(); i++)
148 for (
int i = 0; i < m.
rows(); i++)
162 for (
int i = 1; i < v.
size(); i++)
163 out(i) = out(i - 1) + v(i);
178 it_assert((dim == 1) || (dim == 2),
"cumsum: dimension need to be 1 or 2");
182 for (
int i = 0; i < m.
cols(); i++)
186 for (
int i = 0; i < m.
rows(); i++)
197 it_assert(v.
size() >= 1,
"prod: size of vector should be at least 1");
200 for (
int i = 1; i < v.
size(); i++)
216 it_assert((dim == 1) || (dim == 2),
"prod: dimension need to be 1 or 2");
221 "prod: number of columns should be at least 1");
222 out.set_size(m.
cols(),
false);
224 for (
int i = 0; i < m.
cols(); i++)
229 "prod: number of rows should be at least 1");
230 out.set_size(m.
rows(),
false);
232 for (
int i = 0; i < m.
rows(); i++)
243 "cross: vectors should be of size 3");
247 r(0) = v1(1) * v2(2) - v1(2) * v2(1);
248 r(1) = v1(2) * v2(0) - v1(0) * v2(2);
249 r(2) = v1(0) * v2(1) - v1(1) * v2(0);
259 it_assert(n >= v.
size(),
"zero_pad() cannot shrink the vector!");
261 v2.set_subvector(0, v);
263 v2.set_subvector(v.
size(), n - 1, T(0));
282 "zero_pad() cannot shrink the matrix!");
299 if (index >= 0 && index < v.
size())
335 template<
class Num_T>
354 template<
class Num_T>
376 it_assert(n > 0,
"repmat(): Wrong repetition parameter");
377 int data_length = v.
length();
378 it_assert(data_length > 0,
"repmat(): Input vector can not be empty");
379 Vec<T> assembly(data_length * n);
380 for (
int j = 0; j < n; ++j) {
399 it_assert((m > 0) && (n > 0),
"repmat(): Wrong repetition parameters");
400 int data_rows = data.
rows();
401 int data_cols = data.
cols();
402 it_assert((data_rows > 0) && (data_cols > 0),
"repmat(): Input matrix can "
404 Mat<T> assembly(data_rows*m, data_cols*n);
405 for (
int i = 0; i < m; ++i) {
406 for (
int j = 0; j < n; ++j) {
424 template<
class T>
inline
442 template<
class Num_T>
447 for (
int i = 0; i < X.
rows(); i++)
448 for (
int j = 0; j < X.
cols(); j++)
467 cmat
sqrtm(
const cmat& A);
481 cmat
sqrtm(
const mat& A);
497 if ((rows == 0) || (cols == 0))
500 vec sing_val =
svd(m);
503 tol =
eps * sing_val(0) * (rows > cols ? rows : cols);
508 while ((r < sing_val.length()) && (sing_val(r) > tol)) {
517 int rank(
const imat &m,
double tol)
524 int rank(
const smat &m,
double tol)
533 it_error(
"rank(bmat): Function not implemented for GF(2) algebra");
562 for (
int i = v.
size() - 1; i >= 0; i--)
565 for (
int i = v.
size() - 1; i >= 0; i--)
585 for (
int i = v.
size() - 1; i >= 0; i--)
601 for (
int i = 0; i < t.
size(); i++)
624 for (
int i = 0; i < n - 1; i++) {
626 m(i, i + 1) = sup(i);
628 m(n - 1, n - 1) = main(n - 1);
650 for (
int i = 0; i < n - 1; i++) {
652 m(i, i + 1) = sup(i);
654 m(n - 1, n - 1) = main(n - 1);
673 for (
int i = 0; i < n - 1; i++) {
675 sup(i) = m(i, i + 1);
677 main(n - 1) = m(n - 1, n - 1);
697 for (
int i = 0; i < n - 1; i++) {
699 m(i, i + 1) = sup(i);
700 m(i + 1, i) = sub(i);
702 m(n - 1, n - 1) = main(n - 1);
724 for (
int i = 0; i < n - 1; i++) {
726 m(i, i + 1) = sup(i);
727 m(i + 1, i) = sub(i);
729 m(n - 1, n - 1) = main(n - 1);
749 for (
int i = 0; i < n - 1; i++) {
751 sup(i) = m(i, i + 1);
752 sub(i) = m(i + 1, i);
754 main(n - 1) = m(n - 1, n - 1);
782 for (i = 0;i < s;i++)
791 int i, j, n = 0, r = m.
rows(), c = m.
cols();
794 for (i = 0; i < r; i++)
795 for (j = 0; j < c; j++)
805 int i, j, n = 0, r = m.
rows(), c = m.
cols();
808 for (j = 0; j < c; j++)
809 for (i = 0; i < r; i++)
826 int i, j, ii = 0, jj = 0;
827 for (j = 0; j < m.
cols(); j++) {
828 for (i = 0; i < m.
rows(); i++) {
829 temp(ii++, jj) = m(i, j);
851 for (j = 0; j < cols; j++) {
852 for (i = 0; i < rows; i++) {
853 temp(i, j) = v(ii++);
863 bool all(
const bvec &testvec);
865 bool any(
const bvec &testvec);
875 extern template int length(
const vec &v);
876 extern template int length(
const cvec &v);
877 extern template int length(
const svec &v);
878 extern template int length(
const ivec &v);
879 extern template int length(
const bvec &v);
881 extern template double sum(
const vec &v);
882 extern template std::complex<double>
sum(
const cvec &v);
883 extern template short sum(
const svec &v);
884 extern template int sum(
const ivec &v);
885 extern template bin
sum(
const bvec &v);
887 extern template double sum_sqr(
const vec &v);
888 extern template std::complex<double>
sum_sqr(
const cvec &v);
889 extern template short sum_sqr(
const svec &v);
890 extern template int sum_sqr(
const ivec &v);
891 extern template bin
sum_sqr(
const bvec &v);
893 extern template vec
cumsum(
const vec &v);
894 extern template cvec
cumsum(
const cvec &v);
895 extern template svec
cumsum(
const svec &v);
896 extern template ivec
cumsum(
const ivec &v);
897 extern template bvec
cumsum(
const bvec &v);
899 extern template double prod(
const vec &v);
900 extern template std::complex<double>
prod(
const cvec &v);
901 extern template short prod(
const svec &v);
902 extern template int prod(
const ivec &v);
903 extern template bin
prod(
const bvec &v);
905 extern template vec
cross(
const vec &v1,
const vec &v2);
906 extern template cvec
cross(
const cvec &v1,
const cvec &v2);
907 extern template ivec
cross(
const ivec &v1,
const ivec &v2);
908 extern template svec
cross(
const svec &v1,
const svec &v2);
909 extern template bvec
cross(
const bvec &v1,
const bvec &v2);
911 extern template vec
reverse(
const vec &in);
912 extern template cvec
reverse(
const cvec &in);
913 extern template svec
reverse(
const svec &in);
914 extern template ivec
reverse(
const ivec &in);
915 extern template bvec
reverse(
const bvec &in);
917 extern template vec
zero_pad(
const vec &v,
int n);
918 extern template cvec
zero_pad(
const cvec &v,
int n);
919 extern template ivec
zero_pad(
const ivec &v,
int n);
920 extern template svec
zero_pad(
const svec &v,
int n);
921 extern template bvec
zero_pad(
const bvec &v,
int n);
923 extern template vec
zero_pad(
const vec &v);
924 extern template cvec
zero_pad(
const cvec &v);
925 extern template ivec
zero_pad(
const ivec &v);
926 extern template svec
zero_pad(
const svec &v);
927 extern template bvec
zero_pad(
const bvec &v);
929 extern template mat
zero_pad(
const mat &,
int,
int);
930 extern template cmat
zero_pad(
const cmat &,
int,
int);
931 extern template imat
zero_pad(
const imat &,
int,
int);
932 extern template smat
zero_pad(
const smat &,
int,
int);
935 extern template vec
sum(
const mat &m,
int dim);
936 extern template cvec
sum(
const cmat &m,
int dim);
937 extern template svec
sum(
const smat &m,
int dim);
938 extern template ivec
sum(
const imat &m,
int dim);
939 extern template bvec
sum(
const bmat &m,
int dim);
941 extern template double sumsum(
const mat &X);
942 extern template std::complex<double>
sumsum(
const cmat &X);
943 extern template short sumsum(
const smat &X);
944 extern template int sumsum(
const imat &X);
947 extern template vec
sum_sqr(
const mat & m,
int dim);
948 extern template cvec
sum_sqr(
const cmat &m,
int dim);
949 extern template svec
sum_sqr(
const smat &m,
int dim);
950 extern template ivec
sum_sqr(
const imat &m,
int dim);
951 extern template bvec
sum_sqr(
const bmat &m,
int dim);
953 extern template mat
cumsum(
const mat &m,
int dim);
954 extern template cmat
cumsum(
const cmat &m,
int dim);
955 extern template smat
cumsum(
const smat &m,
int dim);
956 extern template imat
cumsum(
const imat &m,
int dim);
959 extern template vec
prod(
const mat &m,
int dim);
960 extern template cvec
prod(
const cmat &v,
int dim);
961 extern template svec
prod(
const smat &m,
int dim);
962 extern template ivec
prod(
const imat &m,
int dim);
963 extern template bvec
prod(
const bmat &m,
int dim);
965 extern template vec
diag(
const mat &in);
966 extern template cvec
diag(
const cmat &in);
967 extern template void diag(
const vec &in, mat &m);
968 extern template void diag(
const cvec &in, cmat &m);
969 extern template mat
diag(
const vec &v,
const int K);
970 extern template cmat
diag(
const cvec &v,
const int K);
972 extern template mat
bidiag(
const vec &,
const vec &);
973 extern template cmat
bidiag(
const cvec &,
const cvec &);
974 extern template void bidiag(
const vec &,
const vec &, mat &);
975 extern template void bidiag(
const cvec &,
const cvec &, cmat &);
976 extern template void bidiag(
const mat &, vec &, vec &);
977 extern template void bidiag(
const cmat &, cvec &, cvec &);
979 extern template mat
tridiag(
const vec &main,
const vec &,
const vec &);
980 extern template cmat
tridiag(
const cvec &main,
const cvec &,
const cvec &);
981 extern template void tridiag(
const vec &main,
const vec &,
const vec &, mat &);
982 extern template void tridiag(
const cvec &main,
const cvec &,
const cvec &, cmat &);
983 extern template void tridiag(
const mat &m, vec &, vec &, vec &);
984 extern template void tridiag(
const cmat &m, cvec &, cvec &, cvec &);
986 extern template double trace(
const mat &in);
987 extern template std::complex<double>
trace(
const cmat &in);
988 extern template short trace(
const smat &in);
989 extern template int trace(
const imat &in);
990 extern template bin
trace(
const bmat &in);
992 extern template void transpose(
const mat &m, mat &out);
993 extern template void transpose(
const cmat &m, cmat &out);
994 extern template void transpose(
const smat &m, smat &out);
995 extern template void transpose(
const imat &m, imat &out);
998 extern template mat
transpose(
const mat &m);
999 extern template cmat
transpose(
const cmat &m);
1000 extern template smat
transpose(
const smat &m);
1001 extern template imat
transpose(
const imat &m);
1019 extern template bool is_unitary(
const mat &X);
1020 extern template bool is_unitary(
const cmat &X);
1022 extern template vec
rvectorize(
const mat &m);
1023 extern template cvec
rvectorize(
const cmat &m);
1024 extern template ivec
rvectorize(
const imat &m);
1025 extern template svec
rvectorize(
const smat &m);
1028 extern template vec
cvectorize(
const mat &m);
1029 extern template cvec
cvectorize(
const cmat &m);
1030 extern template ivec
cvectorize(
const imat &m);
1031 extern template svec
cvectorize(
const smat &m);
1034 extern template mat
reshape(
const mat &m,
int rows,
int cols);
1035 extern template cmat
reshape(
const cmat &m,
int rows,
int cols);
1036 extern template imat
reshape(
const imat &m,
int rows,
int cols);
1037 extern template smat
reshape(
const smat &m,
int rows,
int cols);
1040 extern template mat
reshape(
const vec &m,
int rows,
int cols);
1041 extern template cmat
reshape(
const cvec &m,
int rows,
int cols);
1042 extern template imat
reshape(
const ivec &m,
int rows,
int cols);
1043 extern template smat
reshape(
const svec &m,
int rows,
int cols);
1044 extern template bmat reshape(
const bvec &m,
int rows,
int cols);
1046 extern template mat
kron(
const mat &X,
const mat &Y);
1047 extern template cmat
kron(
const cmat &X,
const cmat &Y);
1048 extern template imat
kron(
const imat &X,
const imat &Y);
1049 extern template smat
kron(
const smat &X,
const smat &Y);
1052 extern template vec repmat(
const vec &v,
int n);
1053 extern template cvec repmat(
const cvec &v,
int n);
1054 extern template ivec repmat(
const ivec &v,
int n);
1055 extern template svec repmat(
const svec &v,
int n);
1056 extern template bvec repmat(
const bvec &v,
int n);
1058 extern template mat repmat(
const vec &v,
int m,
int n,
bool transpose);
1059 extern template cmat repmat(
const cvec &v,
int m,
int n,
bool transpose);
1060 extern template imat repmat(
const ivec &v,
int m,
int n,
bool transpose);
1061 extern template smat repmat(
const svec &v,
int m,
int n,
bool transpose);
1062 extern template bmat repmat(
const bvec &v,
int m,
int n,
bool transpose);
1064 extern template mat repmat(
const mat &data,
int m,
int n);
1065 extern template cmat repmat(
const cmat &data,
int m,
int n);
1066 extern template imat repmat(
const imat &data,
int m,
int n);
1067 extern template smat repmat(
const smat &data,
int m,
int n);
1068 extern template bmat repmat(
const bmat &data,
int m,
int n);
1076 #endif // #ifndef MATFUNC_H