return A;
}
-SparseMatrix SparseMatrix_normalize_by_row(SparseMatrix A){
- int i, j;
- real max, *a;
-
- if (!A) return A;
- if (A->format != FORMAT_CSR && A->type != MATRIX_TYPE_REAL) {
-#ifdef DEBUG
- printf("only CSR and real matrix supported.\n");
-#endif
- return A;
- }
-
- a = (real*) A->a;
- for (i = 0; i < A->m; i++){
- max = 0;
- for (j = A->ia[i]; j < A->ia[i+1]; j++){
- max = MAX(fabs(a[j]), max);
- }
- if (max != 0){
- for (j = A->ia[i]; j < A->ia[i+1]; j++){
- a[j] /= max;
- }
- }
- }
- return A;
-}
-
SparseMatrix SparseMatrix_apply_fun(SparseMatrix A, double (*fun)(double x)){
int i, j;
real *a;
SparseMatrix SparseMatrix_apply_fun_general(SparseMatrix A, void (*fun)(int i, int j, int n, double *x));/* for real and complex (n=2) */
SparseMatrix SparseMatrix_copy(SparseMatrix A);
int SparseMatrix_has_diagonal(SparseMatrix A);
-SparseMatrix SparseMatrix_normalize_by_row(SparseMatrix A);/* divide by max of each row */
SparseMatrix SparseMatrix_crop(SparseMatrix A, real epsilon);/*remove any entry <= epsilon*/
SparseMatrix SparseMatrix_scaled_by_vector(SparseMatrix A, real *v, int apply_to_row);
SparseMatrix SparseMatrix_make_undirected(SparseMatrix A);/* make it strictly low diag only, and set flag to undirected */