Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/matrix/compute_power.c @ 42:9e4f9e20b8f1
add some examples.
author | kent@teto.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 25 Jan 2010 17:13:59 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
41:c816ae4380d7 | 42:9e4f9e20b8f1 |
---|---|
1 #include <stdio.h> | |
2 #include "matrix.h" | |
3 | |
4 void compute(); | |
5 double ** create_identity_matrix(int size); | |
6 double ** multiply(double **a, double **b, int l, int m, int n); | |
7 void print_matrix(double **a, int row, int col); | |
8 | |
9 int | |
10 main(int argc, char **argv) | |
11 { | |
12 compute(); | |
13 return 0; | |
14 } | |
15 | |
16 void | |
17 compute() | |
18 { | |
19 double **A, **B, **C; | |
20 A = create_identity_matrix(4); | |
21 B = create_identity_matrix(4); | |
22 printf("A = \n"); | |
23 print_matrix(A, 4, 4); | |
24 printf("B = \n"); | |
25 print_matrix(B, 4, 4); | |
26 | |
27 C = multiply(A, B, 4,4,4); | |
28 printf("C = \n"); | |
29 print_matrix(C, 4, 4); | |
30 | |
31 | |
32 free(A); | |
33 free(B); | |
34 free(C); | |
35 } | |
36 | |
37 double ** | |
38 create_identity_matrix(int size) | |
39 { | |
40 int i,j; | |
41 double **ret; | |
42 ret = create_matrix(sizeof(double), size, size); | |
43 | |
44 for (j=0; j<size; j++) { | |
45 for (i=0; i<size; i++) { | |
46 ret[j][i] = 0; | |
47 } | |
48 } | |
49 for (i=0; i<size; i++) { | |
50 ret[i][i] = 1.0f; | |
51 } | |
52 return ret; | |
53 } | |
54 | |
55 double ** | |
56 power_of_matrix(double **a, int n) | |
57 { | |
58 int r,c,i; | |
59 double **result; | |
60 result = create_identity_matrix(n); | |
61 | |
62 for (r=0; r<l; r++) { | |
63 for (c=0; c<n; c++) { | |
64 result[r][c] = 0; | |
65 for (i=0; i<m; i++) { | |
66 result[r][c] += a[r][i] * b[i][c]; | |
67 } | |
68 } | |
69 } | |
70 return result; | |
71 } | |
72 | |
73 double ** | |
74 multiply(double **a, double **b, int l, int m, int n) | |
75 { | |
76 int r,c,i; | |
77 double **result; | |
78 result = create_matrix(sizeof(double), l, n); | |
79 | |
80 for (r=0; r<l; r++) { | |
81 for (c=0; c<n; c++) { | |
82 result[r][c] = 0; | |
83 for (i=0; i<m; i++) { | |
84 result[r][c] += a[r][i] * b[i][c]; | |
85 } | |
86 } | |
87 } | |
88 return result; | |
89 } | |
90 | |
91 /** 表示用 */ | |
92 void | |
93 print_matrix(double **a, int row, int col) | |
94 { | |
95 int i,j; | |
96 for( j=0; j<row; j++){ | |
97 printf("\t"); | |
98 for( i=0; i<col; i++){ | |
99 printf("%6.2f ", a[j][i]); | |
100 } | |
101 printf("\n"); | |
102 } | |
103 } | |
104 | |
105 | |
106 | |
107 |