#include<stdio.h> #include<math.h> #define N 2 /* multiply 2 square matrices a and b and return c=a*b */ int matmult(float a[N][N], float b[N][N], float c[N][N]) { int i,j,k; for(i=0;i<N;i++) for(j=0;j<N;j++) { c[i][j]=0; for(k=0;k<N;k++) c[i][j] = c[i][j]+a[i][k]*b[k][j]; }; return 0; }; /* return c = a^k */ int matpow(float a[N][N], int k, float c[N][N]) { int i,j,i1; float b[N][N]; if(k<1){ printf("ERROR: k<1"); return -1; } for(i=0;i<N;i++) for(j=0;j<N;j++) b[i][j]=a[i][j]; for(i=1;i<k;i++) { matmult(a,b,c); for(i1=0;i1<N;i1++) for(j=0;j<N;j++) b[i1][j]=c[i1][j]; }; return 0; } int matprintsquare(float a[N][N]) { int i,j; for(i=0;i<N;i++) {for(j=0;j<N;j++) printf("%f ",a[i][j]); printf("\n"); }; return 0; }; int main(void) { float a[N][N]; float c[N][N]; int i,j; /* random seed */ srand(time(0)); /* initialize a[][] with random floats in [0;1] */ for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j] = i+j; /*(float)rand()/(float)RAND_MAX;*/ matprintsquare(a); matpow(a, 3, c); printf("\n"); matprintsquare(c); return 0; } |