diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CbC-examples/matrix/compute_power.c	Mon Jan 25 17:13:59 2010 +0900
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include "matrix.h"
+
+void compute();
+double ** create_identity_matrix(int size);
+double ** multiply(double **a, double **b, int l, int m, int n);
+void print_matrix(double **a, int row, int col);
+
+int
+main(int argc, char **argv)
+{
+	compute();
+	return 0;
+}
+
+void
+compute()
+{
+	double **A, **B, **C;
+	A = create_identity_matrix(4);
+	B = create_identity_matrix(4);
+	printf("A = \n");
+	print_matrix(A, 4, 4);
+	printf("B = \n");
+	print_matrix(B, 4, 4);
+
+	C = multiply(A, B, 4,4,4);
+	printf("C = \n");
+	print_matrix(C, 4, 4);
+
+
+	free(A);
+	free(B);
+	free(C);
+}
+
+double **
+create_identity_matrix(int size)
+{
+	int i,j;
+	double **ret;
+	ret = create_matrix(sizeof(double), size, size);
+
+	for (j=0; j<size; j++) {
+		for (i=0; i<size; i++) {
+			ret[j][i] = 0;
+		}
+	}
+	for (i=0; i<size; i++) {
+		ret[i][i] = 1.0f;
+	}
+	return ret;
+}
+
+double **
+power_of_matrix(double **a, int n)
+{
+	int r,c,i;
+	double **result;
+	result = create_identity_matrix(n);
+
+	for (r=0; r<l; r++) {
+		for (c=0; c<n; c++) {
+			result[r][c] = 0;
+			for (i=0; i<m; i++) {
+				result[r][c] += a[r][i] * b[i][c];
+			}
+		}
+	}
+	return result;
+}
+
+double **
+multiply(double **a, double **b, int l, int m, int n)
+{
+	int r,c,i;
+	double **result;
+	result = create_matrix(sizeof(double), l, n);
+
+	for (r=0; r<l; r++) {
+		for (c=0; c<n; c++) {
+			result[r][c] = 0;
+			for (i=0; i<m; i++) {
+				result[r][c] += a[r][i] * b[i][c];
+			}
+		}
+	}
+	return result;
+}
+
+/** 表示用 */
+void
+print_matrix(double **a, int row, int col)
+{
+        int i,j;
+        for( j=0; j<row; j++){
+                printf("\t");
+                for( i=0; i<col; i++){
+                        printf("%6.2f ", a[j][i]);
+                }
+                printf("\n");
+        }
+}
+
+
+
+