========================================================== C source code ========================================================== #include "stdafx.h" #include double determinamt(double* pa, int n); void inversematrix(double* pa, double* px, int n); void Minor(double* pa, double* pm, int n, int k, int l); int _tmain(int argc, _TCHAR* argv[]) { int i, j, k; double a[8][8]={0.6791, 0.0987, 0.4942, 0.0305, 0.8055, 0.9787, 0.5216, 0.973, 0.3955, 0.2619, 0.7791, 0.7441, 0.5767, 0.7127, 0.0967, 0.649, 0.3674, 0.3354, 0.715, 0.5, 0.1829, 0.5005, 0.8181, 0.8003, 0.988, 0.6797, 0.9037, 0.4799, 0.2399, 0.4711, 0.8175, 0.4538, 0.0377, 0.1366, 0.8909, 0.9047, 0.8865, 0.0596, 0.7224, 0.4324, 0.8852, 0.7212, 0.3342, 0.6099, 0.0287, 0.682, 0.1499, 0.8253, 0.9133, 0.1068, 0.6987, 0.6177, 0.4899, 0.0424, 0.6596, 0.0835, 0.7962, 0.6538, 0.1978, 0.8594, 0.1679, 0.0714, 0.5186, 0.1332}; double b[8][8]={2.0373, 0.2961, 1.4826, 0.0915, 2.4165, 2.9361, 1.5648, 2.919, 1.1865, 0.7857, 2.3373, 2.2323, 1.7301, 2.1381, 0.2901, 1.947, 1.1022, 1.0062, 2.145, 1.5, 0.5487, 1.5015, 2.4543, 2.4009, 2.964, 2.0391, 2.7111, 1.4397, 0.7197, 1.4133, 2.4525, 1.3614, 0.1131, 0.4098, 2.6727, 2.7141, 2.6595, 0.1788, 2.1672, 1.2972, 2.6556, 2.1636, 1.0026, 1.8297, 0.0861, 2.046, 0.4497, 2.4759, 2.7399, 0.3204, 2.0961, 1.8531, 1.4697, 0.1272, 1.9788, 0.2505, 2.3886, 1.9614, 0.5934, 2.5782, 0.5037, 0.2142, 1.5558, 0.3996}; double c[8][8]={0.5202, 1.9706, 1.1172, 0.8074, 1.999, 0.0978, 0.4692, 1.7685, 0, 1.8839, 0.5944, 1.2685, 1.6174, 1.6836, 2.5666, 0.6786, 0, 0, 1.4691, 1.6436, 2.0943, 2.6456, 1.9343, 1.1539, 0, 0, 0, 2.8282, 1.9996, 2.0075, 1.1288, 1.749, 0, 0, 0, 0, 0.5344, 0.5713, 0.5728, 0.7554, 0, 0, 0, 0, 0, 1.1067, 1.2848, 0.8713, 0, 0, 0, 0, 0, 0, 1.4461, 1.8513, 0, 0, 0, 0, 0, 0, 0, 0.7958}; double det, deta, detb, detc, tra, trb, trab, trba; double ab[8][8]; double ba[8][8]; double at[8][8]; double xa[8][8]; double xb[8][8]; double xc[8][8]; double xab[8][8]; double xba[8][8]; /* (i) */ printf("(i) \n"); det = determinamt((double*)&a[0][0], 8); deta = det; printf("determinamt A = %13.10f\n", det); det = determinamt((double*)&b[0][0], 8); detb = det; printf("determinamt B = %13.10f\n", det); /* (ii) */ printf("(ii) \n"); for(i=0; i<8; i++){ for(j=0; j<8; j++){ ab[i][j]=0; for(k=0; k<8; k++){ ab[i][j] += a[i][k]*b[k][j]; } } } det = determinamt((double*)&ab[0][0], 8); printf("determinamt AB = %13.10f\n", det); printf("det A * det B = %13.10f\n", deta*detb); for(i=0; i<8; i++){ for(j=0; j<8; j++){ ba[i][j]=0; for(k=0; k<8; k++){ ba[i][j] += b[i][k]*a[k][j]; } } } det = determinamt((double*)&ba[0][0], 8); printf("determinamt BA = %13.10f\n", det); /* (iii) */ printf("(iii) \n"); for(i=0; i<8; i++){ for(j=0; j<8; j++){ at[j][i]=a[i][j]; } } det = determinamt((double*)&at[0][0], 8); printf("determinamt At = %13.10f\n", det); printf("determinamt A = %13.10f\n", deta); /* (iv) */ printf("(iv) \n"); det = determinamt((double*)&c[0][0], 8); printf("determinamt C = %13.10f\n", det); detc=1; for(i=0; i<8; i++){ detc *= c[i][i]; } printf("detC(diagonal) = %13.10f\n", detc); /* (v) */ printf("(v) \n"); inversematrix((double*)&a[0][0], (double*)&xa[0][0], 8); inversematrix((double*)&b[0][0], (double*)&xb[0][0], 8); inversematrix((double*)&c[0][0], (double*)&xc[0][0], 8); printf("A inverse \n", detc); for(i=0; i<8; i++){ for(j=0; j<8; j++){ printf(" %7.4f", xa[i][j]); } printf("\n"); } printf("B inverse \n", detc); for(i=0; i<8; i++){ for(j=0; j<8; j++){ printf(" %7.4f", xb[i][j]); } printf("\n"); } printf("C inverse \n", detc); for(i=0; i<8; i++){ for(j=0; j<8; j++){ printf(" %7.4f", xc[i][j]); } printf("\n"); } /* (vi) */ printf("(vi) \n"); inversematrix((double*)&ab[0][0], (double*)&xab[0][0], 8); printf("AB inverse \n", detc); for(i=0; i<8; i++){ for(j=0; j<8; j++){ printf(" %7.4f", xab[i][j]); } printf("\n"); } for(i=0; i<8; i++){ for(j=0; j<8; j++){ xba[i][j]=0; for (k = 0; k<8; k++) { xba[i][j]+=xb[i][k]*xa[k][j]; } } } printf("B inv A inv \n", detc); for(i=0; i<8; i++){ for(j=0; j<8; j++){ printf(" %7.4f", xba[i][j]); } printf("\n"); } /* (vii) */ printf("(vii) \n"); tra=0; for(i=0; i<8; i++){ tra += a[i][i]; } printf("tr A = %13.10f\n", tra); trb=0; for(i=0; i<8; i++){ trb += b[i][i]; } printf("tr B = %13.10f\n", trb); /* (viii) */ printf("(viii) \n"); trab=0; for(i=0; i<8; i++){ trab += ab[i][i]; } printf("tr AB = %13.10f\n", trab); trba=0; for(i=0; i<8; i++){ trba += ba[i][i]; } printf("tr BA = %13.10f\n", trba); return 0; } void inversematrix(double* pa, double* px, int n) { int i; int j; double det; double* pm = new double[(n-1)*(n-1)]; det = determinamt(pa, n); for(i=0; i