}
fprintf(stderr,"}\n");
}
-
-void matvec_dense(void *M, int m, int n, real *u, real **v, int transpose,
- int *flag){
- /* M.u or M^T.u */
- real *A;
- int i, j;
-
- A = (real*) M;
- *flag = 0;
-
-
- if (!transpose){
- if (!(*v)) *v = MALLOC(sizeof(real)*m);
- for (i = 0; i < m; i++){
- (*v)[i] = 0;
- for (j = 0; j < n; j++){
- (*v)[i] += A[i*n+j]*u[j];
- }
- }
- } else {
- if (!(*v)) *v = MALLOC(sizeof(real)*n);
- for (i = 0; i < n; i++){
- (*v)[i] = 0;
- }
- for (i = 0; i < m; i++){
- for (j = 0; j < n; j++){
- (*v)[j] += A[i*n+j]*u[i];
- }
- }
- }
-
- return;
-}
#include <sparse/general.h>
-/* if you have a standard dense/sparse matrix, set matvec to matvec_dense/matvec_sparse*/
+/* if you have a standard sparse matrix, set matvec to matvec_sparse*/
void power_method(void (*matvec)(void *M, int m, int n, real *u, real **v, int transposed, int *flag),
void *A, int n, int K, int random_seed, int maxit, real tol, real **eigv, real **eigs);
void matvec_sparse(void *M, int m, int n, real *u, real **v, int transposed, int *flag);
-void matvec_dense(void *M, int m, int n, real *u, real **v, int transposed, int *flag);
-
void mat_print_dense(real *M, int m, int n);