#include <stdio.h> void initGeMatrix(int m, int n, double *A, int incRowA, int incColA) { int i, j; for (i=0; i<m; ++i) { for (j=0; j<n; ++j) { A[i*incRowA+j*incColA] = i*n + j + 1; } } } void printGeMatrix(int m, int n, double *A, int incRowA, int incColA) { int i, j; for (i=0; i<m; ++i) { for (j=0; j<n; ++j) { printf("%10.4lf ", A[i*incRowA+j*incColA]); } printf("\n"); } printf("\n\n"); } #ifndef DIM_M #define DIM_M 6 #endif #ifndef DIM_N #define DIM_N 8 #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^T =\n"); printGeMatrix(DIM_N, DIM_M, A, INCCOL_A, INCROW_A); int mn = (DIM_M>DIM_N) ? DIM_N : DIM_M; printf("diag(A) =\n"); printGeMatrix(mn, 1, A, INCROW_A+INCCOL_A, INCCOL_A); printf("A(2,:) =\n"); printGeMatrix(1, DIM_N, &A[1*INCROW_A], INCROW_A, INCCOL_A); printf("A(:,3) =\n"); printGeMatrix(DIM_M, 1, &A[2*INCCOL_A], INCROW_A, INCCOL_A); printf("A(4:5, 2:4) =\n"); printGeMatrix(2, 3, &A[3*INCROW_A+1*INCCOL_A], INCROW_A, INCCOL_A); printf("A(4:2:8, 2:3:14) =\n"); printGeMatrix(3, 5, &A[3*INCROW_A+1*INCCOL_A], 2*INCROW_A, 3*INCCOL_A); return 0; } |