File: functions.c

package info (click to toggle)
haskell-hmatrix 0.15.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 608 kB
  • ctags: 302
  • sloc: haskell: 4,909; ansic: 2,688; makefile: 3
file content (35 lines) | stat: -rw-r--r-- 804 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* assuming row order */

typedef struct { double r, i; } doublecomplex;

#define DVEC(A) int A##n, double*A##p
#define CVEC(A) int A##n, doublecomplex*A##p
#define DMAT(A) int A##r, int A##c, double*A##p
#define CMAT(A) int A##r, int A##c, doublecomplex*A##p

#define AT(M,row,col) (M##p[(row)*M##c + (col)])

/*-----------------------------------------------------*/

int c_scale_vector(double s, DVEC(x), DVEC(y)) {
    int k;
    for (k=0; k<=yn; k++) {
        yp[k] = s*xp[k];
    }
    return 0;
}

/*-----------------------------------------------------*/

int c_diag(DMAT(m),DVEC(y),DMAT(z)) {
    int i,j;
    for (j=0; j<yn; j++) {
        yp[j] = AT(m,j,j);
    }
    for (i=0; i<mr; i++) {
        for (j=0; j<mc; j++) {
            AT(z,i,j) = i==j?yp[i]:0;
        }
    }
    return 0;
}