diff options
author | cnlohr <lohr85@gmail.com> | 2016-12-19 01:09:45 -0500 |
---|---|---|
committer | cnlohr <lohr85@gmail.com> | 2016-12-19 01:09:45 -0500 |
commit | 948b07fe3849bd1a574d7e4b6c56b0a594bac7c1 (patch) | |
tree | d47cce21854deaea0600b4a707f47c21392661a2 /dave/dclapack.h | |
parent | 0d6e2a3d208a3e12f2ff450d2b898616ed158894 (diff) | |
parent | 6c6849f4a66599c44e85c3445cb11fde35a6b44d (diff) | |
download | libsurvive-948b07fe3849bd1a574d7e4b6c56b0a594bac7c1.tar.gz libsurvive-948b07fe3849bd1a574d7e4b6c56b0a594bac7c1.tar.bz2 |
Merge branch 'master' of https://github.com/cnlohr/libsurvive
Diffstat (limited to 'dave/dclapack.h')
-rw-r--r-- | dave/dclapack.h | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/dave/dclapack.h b/dave/dclapack.h index 36fad53..4e209d3 100644 --- a/dave/dclapack.h +++ b/dave/dclapack.h @@ -11,6 +11,8 @@ #include<stdio.h> +#define _ABS(a) ( (a)<=0 ? 0-(a) : (a) ) + /* * Prints a matrix A (n by m) */ @@ -39,6 +41,20 @@ } /* + * B = Transpose(A) + * A is (n by m) + * B is (m by n) + */ +#define TRANSP(A,B,n,m) { \ + int i,j; \ + for (i=0; i<n; i++) { \ + for (j=0; j<m; j++) { \ + B[j][i] = A[i][j]; \ + } \ + } \ +} + +/* * Calculate L,U of a matrix A with pivot table */ #define LU(A,L,U,Piv,n) { \ @@ -55,7 +71,7 @@ \ int max=i; \ for (j=i+1; j<n; j++) { \ - if (U[j][i] > U[max][i]) { max = j; } \ + if (_ABS(U[j][i]) > _ABS(U[max][i])) { max = j; } \ } \ _tempi=Piv[i]; Piv[i]=Piv[max]; Piv[max]=_tempi; \ for (k=i; k<n; k++) { \ @@ -185,4 +201,25 @@ PRINT(Ainv,n,n); \ } \ } +/* + * Matrix Multiply D = alpha * A * B + beta * C + * A (n by m) + * B (m by p) + * C (n by p) + * D (n by p) + */ +#define GMULADD(A,B,C,D,alpha,beta,n,m,p) { \ + int i,j,k; \ + float sum; \ + for (i=0; i<n; i++) { \ + for (j=0; j<p; j++) { \ + sum = 0.0f; \ + for (k=0; k<m; k++) { \ + sum += A[i][k] * B[k][j]; \ + } \ + D[i][j] = alpha * sum + beta * C[i][j]; \ + } \ + } \ +} + #endif |