#include #include void initGeMatrix(int m, int n, double *A, int incRowA, int incColA) { int i, j; for (i=0; iresult) { result = fabs(x[i*incX]); } } return result; } double dgenrm1(int m, int n, const double *A, int incRowA, int incColA) { int i, j; double result = 0; for (j=0; jresult) { result = sum; } } return result; } #ifndef DIM_M #define DIM_M 5 #endif #ifndef DIM_N #define DIM_N 5 #endif #ifndef ROWMAJOR #define ROWMAJOR 0 #endif #if (ROWMAJOR==1) # define INCROW_A DIM_N # define INCCOL_A 1 #else # define INCROW_A 1 # define INCCOL_A DIM_M #endif double A[DIM_M*DIM_N]; int main() { initGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); printf("A =\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); printf("A(:,1) * A(:,2) = %lf\n", ddot(DIM_M, &A[0*INCCOL_A], INCROW_A, &A[1*INCCOL_A], INCROW_A)); daxpy(DIM_M, 2.0, &A[1*INCCOL_A], INCROW_A, &A[2*INCCOL_A], INCROW_A); printf("A(:,3) = A(:3) + 2*A(:,2)\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); dscal(DIM_M, 0.5, &A[3*INCCOL_A], INCROW_A); printf("A(:,4) = 0.5*A(:4)\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); printf("inf-nrm(A(:,1)) = %lf\n", damax(DIM_M, &A[0*INCCOL_A], INCROW_A)); printf("inf-nrm(A(2,:)) = %lf\n", damax(DIM_N, &A[1*INCROW_A], INCCOL_A)); printf("nrm1(A(1:4,1:5)) = %lf\n", dgenrm1(4, 5, A, INCROW_A, INCCOL_A)); printf("nrm1(A(2:4,3:5)) = %lf\n", dgenrm1(3, 3, &A[1*INCROW_A+2*INCCOL_A], INCROW_A, INCCOL_A)); dswap(DIM_M, &A[1*INCCOL_A], INCROW_A, &A[2*INCCOL_A], INCROW_A); printf("swap(A(:,2), A(:,3))\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); dcopy(DIM_M, &A[2*INCCOL_A], INCROW_A, &A[3*INCCOL_A], INCROW_A); printf("A(:,4) = A(:,3)\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); return 0; }