00001 #ifndef DMATRIX_H
00002 #define DMATRIX_H
00003
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010
00028 typedef struct
00029 {
00030 int m;
00031 int n;
00032 int nz;
00034 double *val;
00036
00037
00038 int *jdx;
00039 int *idx;
00040 int *rdx;
00042 } dmatrix;
00043
00044
00045
00046 double dmat_norm1(const int n, const double *x);
00047 double dmat_norm2(const int n, const double *x);
00048 double dmat_norminf(const int n, const double *x);
00049
00050 double dmat_dot(const int n, const double *x, const double *y);
00051
00052 void dmat_vset(int n, const double val, double *dst);
00053 void dmat_vcopy(const int n, const double *src, double *dst);
00054
00055 void dmat_yexpx(const int n, const double *x, double *y);
00056 void dmat_ysqrtx(const int n, const double *x, double *y);
00057 void dmat_yinvx(const int n, const double *x, double *y);
00058
00059 void dmat_waxpby(int n, double alpha, const double *x, double beta,
00060 const double *y, double *w);
00061
00062 void dmat_elemprod(const int n, const double *x, const double *y, double *z);
00063 void dmat_elemdivi(const int n, const double *x, const double *y, double *z);
00064
00065
00066
00067 void dmat_yATx(const dmatrix *A, const double *x, double *y);
00068
00069 void dmat_yAx(const dmatrix *A, const double *x, double *y);
00070
00071 void dmat_yAmpqTx(const dmatrix *A, const double *p, const double *q,
00072 const double *x, double *y);
00073 void dmat_yAmpqx(const dmatrix *A, const double *p, const double *q,
00074 const double *x, double *y);
00075
00076 void dmat_yHx_(const dmatrix *A, const double *b, const double *d0,
00077 const double *d1, const double *d2, const double *x, double *y);
00078
00079 void dmat_yHx(const dmatrix *A, const double *p, const double *q,
00080 const double *b, const double *d0,
00081 const double *d1, const double *d2, const double *x, double *y);
00082
00083 void dmat_elemAA(const dmatrix *A, dmatrix **A2);
00084
00085 void dmat_diagscale(dmatrix *M, const double *dl, const int invl,
00086 const double *dr, const int invr);
00087
00088 void dmat_colsum(const dmatrix *M, double *vsum);
00089
00090 void dmat_colavg(const dmatrix *M, double *vavg);
00091
00092 void dmat_colstd(const dmatrix *M, const double *vavg, double *vstd);
00093
00094 void dmat_diagadd(dmatrix *M, const double *d);
00095
00096 void dmat_new_dense(dmatrix** M, const int m, const int n);
00097
00098 void dmat_free(dmatrix *M);
00099
00100 void dmat_duplicate(const dmatrix* M, dmatrix** Mcopy);
00101 void dmat_copy(const dmatrix* M, dmatrix* dst);
00102 void dmat_get_row(const dmatrix *M, const int rowidx, double *dst);
00103
00104
00105 void dmat_vprint(const int n, const double *v);
00106
00107 void dmat_print(const dmatrix *mat);
00108 void dmat_summary(dmatrix *M);
00109 void dmat_build_idx(dmatrix *M);
00110
00111 void dmat_B_AAT(dmatrix *A, dmatrix *B);
00112 void dmat_B_ATA(dmatrix *A, dmatrix *B);
00113 void dmat_A_axxTpA(double a, double *x, dmatrix *A);
00114
00115
00116 void dmat_potrs(const dmatrix *A, double *b);
00117 void dmat_posv(const dmatrix *A, double *b);
00118
00119 void dmat_profile();
00120
00121 #ifdef __cplusplus
00122 }
00123 #endif
00124
00125 #endif