源代码:
_Matrix.h:
[cpp] view plaincopy
01.#ifndef _MATRIX_H
02.#define _MATRIX_H
03.
04.//头文件
05.#include <stdio.h>
06.#include <stdlib.h>
07.
08.//矩阵数据结构
09.//二维矩阵
10.class _Matrix
11.{
12.private:
13.public:
14. int m;
15. int n;
16. float *arr;
17.
18. //初始化
19. _Matrix(int mm = 0,int nn = 0);
20. //设置m
21. void set_m(int mm);
22. //设置n
23. void set_n(int nn);
24. //初始化
25. void init_matrix();
26. //释放
27. void free_matrix();
28. //读取i,j坐标的数据
29. //失败返回-31415,成功返回值
30. float read(int i,int j);
31. //写入i,j坐标的数据
32. //失败返回-1,成功返回1
33. int write(int i,int j,float val);
34.};
35.
36.//二维运算类
37.class _Matrix_Calc
38.{
39.private:
40.public:
41. _Matrix_Calc();
42. //C = A + B
43. //成功返回1,失败返回-1
44. int add(_Matrix *A,_Matrix *B,_Matrix *C);
45. //C = A - B
46. //成功返回1,失败返回-1
47. int subtract(_Matrix *A,_Matrix *B,_Matrix *C);
48. //C = A * B
49. //成功返回1,失败返回-1
50. int multiply(_Matrix *A,_Matrix *B,_Matrix *C);
51. //行列式的值,只能计算2 * 2,3 * 3
52. //失败返回-31415,成功返回值
53. float _Matrix_Calc::det(_Matrix *A);
54. //求转置矩阵,B = AT
55. //成功返回1,失败返回-1
56. int transpos(_Matrix *A,_Matrix *B);
57. //求逆矩阵,B = A^(-1)
58. //成功返回1,失败返回-1
59. int inverse(_Matrix *A,_Matrix *B);
60.};
61.
62.#endif
_Matrix.cpp:
[cpp] view plaincopy
01.#include "_Matrix.h"
02.
03.//矩阵类方法
04.//初始化
05._Matrix::_Matrix(int mm,int nn)
06.{
07. m = mm;
08. n = nn;
09.}
10.
11.//设置m
12.void _Matrix::set_m(int mm)
13.{
14. m = mm;
15.}
16.
17.//设置n
18.void _Matrix::set_n(int nn)
19.{
20. n = nn;
21.}
22.
23.//初始化
24.void _Matrix::init_matrix()
25.{
26. arr = new float[m * n];
27.}
28.
29.//释放
30.void _Matrix::free_matrix()
31.{
32. delete []arr;
33.}
34.
35.//读取i,j坐标的数据
36.//失败返回-31415,成功返回值
37.float _Matrix::read(int i,int j)
38.{
39. if (i >= m || j >= n)
40. {
41. return -31415;
42. }
43.
44. return *(arr + i * n + j);
45.}
46.
47.//写入i,j坐标的数据
48.//失败返回-1,成功返回1
49.int _Matrix::write(int i,int j,float val)
50.{
51. if (i >= m || j >= n)
52. {
53. return -1;
54. }
55.
56. *(arr + i * n + j) = val;
57. return 1;
58.}
59.
60.//矩阵运算类方法
61.//初始化
62._Matrix_Calc::_Matrix_Calc()
63.{
64.}
65.
66.//C = A + B
67.//成功返回1,失败返回-1
68.int _Matrix_Calc::add(_Matrix *A,_Matrix *B,_Matrix *C)
69.{
70. int i = 0;
71. int j = 0;
72.
73. //判断是否可以运算
74. if (A->m != B->m || A->n != B->n || \
75. A->m != C->m || A->n != C->n)
76. {
77. return -1;
_Matrix.h:
[cpp] view plaincopy
01.#ifndef _MATRIX_H
02.#define _MATRIX_H
03.
04.//头文件
05.#include <stdio.h>
06.#include <stdlib.h>
07.
08.//矩阵数据结构
09.//二维矩阵
10.class _Matrix
11.{
12.private:
13.public:
14. int m;
15. int n;
16. float *arr;
17.
18. //初始化
19. _Matrix(int mm = 0,int nn = 0);
20. //设置m
21. void set_m(int mm);
22. //设置n
23. void set_n(int nn);
24. //初始化
25. void init_matrix();
26. //释放
27. void free_matrix();
28. //读取i,j坐标的数据
29. //失败返回-31415,成功返回值
30. float read(int i,int j);
31. //写入i,j坐标的数据
32. //失败返回-1,成功返回1
33. int write(int i,int j,float val);
34.};
35.
36.//二维运算类
37.class _Matrix_Calc
38.{
39.private:
40.public:
41. _Matrix_Calc();
42. //C = A + B
43. //成功返回1,失败返回-1
44. int add(_Matrix *A,_Matrix *B,_Matrix *C);
45. //C = A - B
46. //成功返回1,失败返回-1
47. int subtract(_Matrix *A,_Matrix *B,_Matrix *C);
48. //C = A * B
49. //成功返回1,失败返回-1
50. int multiply(_Matrix *A,_Matrix *B,_Matrix *C);
51. //行列式的值,只能计算2 * 2,3 * 3
52. //失败返回-31415,成功返回值
53. float _Matrix_Calc::det(_Matrix *A);
54. //求转置矩阵,B = AT
55. //成功返回1,失败返回-1
56. int transpos(_Matrix *A,_Matrix *B);
57. //求逆矩阵,B = A^(-1)
58. //成功返回1,失败返回-1
59. int inverse(_Matrix *A,_Matrix *B);
60.};
61.
62.#endif
_Matrix.cpp:
[cpp] view plaincopy
01.#include "_Matrix.h"
02.
03.//矩阵类方法
04.//初始化
05._Matrix::_Matrix(int mm,int nn)
06.{
07. m = mm;
08. n = nn;
09.}
10.
11.//设置m
12.void _Matrix::set_m(int mm)
13.{
14. m = mm;
15.}
16.
17.//设置n
18.void _Matrix::set_n(int nn)
19.{
20. n = nn;
21.}
22.
23.//初始化
24.void _Matrix::init_matrix()
25.{
26. arr = new float[m * n];
27.}
28.
29.//释放
30.void _Matrix::free_matrix()
31.{
32. delete []arr;
33.}
34.
35.//读取i,j坐标的数据
36.//失败返回-31415,成功返回值
37.float _Matrix::read(int i,int j)
38.{
39. if (i >= m || j >= n)
40. {
41. return -31415;
42. }
43.
44. return *(arr + i * n + j);
45.}
46.
47.//写入i,j坐标的数据
48.//失败返回-1,成功返回1
49.int _Matrix::write(int i,int j,float val)
50.{
51. if (i >= m || j >= n)
52. {
53. return -1;
54. }
55.
56. *(arr + i * n + j) = val;
57. return 1;
58.}
59.
60.//矩阵运算类方法
61.//初始化
62._Matrix_Calc::_Matrix_Calc()
63.{
64.}
65.
66.//C = A + B
67.//成功返回1,失败返回-1
68.int _Matrix_Calc::add(_Matrix *A,_Matrix *B,_Matrix *C)
69.{
70. int i = 0;
71. int j = 0;
72.
73. //判断是否可以运算
74. if (A->m != B->m || A->n != B->n || \
75. A->m != C->m || A->n != C->n)
76. {
77. return -1;
78. }
79. //运算
80. for (i = 0;i < C->m;i++)
81. {
82. for (j = 0;j < C->n;j++)
83. {
84. C->write(i,j,A->read(i,j) + B->read(i,j));
85. }
86. }
87.
88. return 1;
89.}
90.
91.//C = A - B
92.//成功返回1,失败返回-1
93.int _Matrix_Calc::subtract(_Matrix *A,_Matrix *B,_Matrix *C)
94.{
95. int i = 0;
96. int j = 0;
97.
98. //判断是否可以运算
99. if (A->m != B->m || A->n != B->n || \
100. A->m != C->m || A->n != C->n)
101. {
102. return -1;
103. }
104. //运算
105. for (i = 0;i < C->m;i++)
106. {
107. for (j = 0;j < C->n;j++)
108. {
109. C->write(i,j,A->read(i,j) - B->read(i,j));
110. }
111. }
112.
113. return 1;
114.}
115.
116.//C = A * B
117.//成功返回1,失败返回-1
118.int _Matrix_Calc::multiply(_Matrix *A,_Matrix *B,_Matrix *C)
119.{
120. int i = 0;
121. int j = 0;
122. int k = 0;
123. float temp = 0;
124.
125. //判断是否可以运算
126. if (A->m != C->m || B->n != C->n || \
127. A->n != B->m)
128. {
129. return -1;
130. }
131. //运算
132. for (i = 0;i < C->m;i++)
133. {
134. for (j = 0;j < C->n;j++)
135. {
136. temp = 0;
137. for (k = 0;k < A->n;k++)
138. {
139. temp += A->read(i,k) * B->read(k,j);
140. }
141. C->write(i,j,tem