算法与数据结构(二)三元组矩阵行列式的计算(…
2018-12-04 07:15:32来源:博客园 阅读 ()
1.具体思想:
关于计算矩阵行列式有两个主要方法:
1.根据矩阵行列式的定义式用递归计算(就是本文所讲)
2.先做矩阵行变换,转化为上三角矩阵,再求行列式。
(我先是思考了行变换转化为三角矩阵,但中途遇到了些问题,所以先把递归的方法写下来,之后会继续更新另外一种方法。)
线性代数里我们已经了解了递归求矩阵行列式的方法。下图:
然后每一个代数余子式又可以看做相对于“n阶母矩阵”的“n-1阶子矩阵”,再次对这个子矩阵按照行或列展开,这就是递归求矩阵行列式的思想。
2.三元组和二维数组
二维数组不用多说,它和矩阵是一一对应的,表示完全相同。
三元组是指形如((r,c),d)的集合,我们规定(r,c)是三元组中的一个数在二维数组中的对应位置,d表示数据的值。
三元组的数据结构如下:
1 typedef struct
2 {
3 int r;
4 int c;
5 int d;
6 }TupNode;
7 typedef struct
8 {
9 int rows;
10 int cols;
11 int nums;
12 TupNode data[Maxsize];
13 }TSMatrix;
具体的计算行列式代码如下:
1 //计算矩阵行列式
2 int DatMat(TSMatrix t){
3 if(t.cols!=t.rows){
4 printf("该矩阵无法求行列式!");
5 return 0;
6 }
7 else{
8 int n=t.cols;
9 int a[n][n];
10 //将三元组转化为二维数组
11 for(int i=0;i<n;i++){
12 for(int j=0;j<n;j++){
13 a[i][j]=0;
14 }
15 }
16 for(int k=0;k<t.nums;k++){
17 int i = t.data[k].r;
18 int j = t.data[k].c;
19 a[i][j] = t.data[k].d;
20 }
21 if (n == 1){
22 return a[0][0];
23 }
24 else{
25 int b[n-1][n-1];//创建n-1阶的代数余子式阵bb
26 int c[(n-1)*(n-1)];
27 int sum = 0;//sum为行列式的值
28 TSMatrix t1;
29
30 //以第一列为基础,求行列式
31 for(int l=0;l<n;l++){
32 int m1=0;
33 int m2=0;
34 for(int i =0;i<n;i++){
35 for(int j=0;j<n;j++){
36 if(i!=l&&j!=0){
37 c[m1]=a[i][j];
38 m1++;
39 }
40 }
41 }
42 for(int i =0;i<n-1;i++){
43 for(int j=0;j<n-1;j++){
44 b[i][j]=c[m2];
45 m2++;
46 }
47 }
48
49 //把二维数组转化为三元组
50 t1.rows=n-1;
51 t1.cols=n-1;
52 t1.nums=0;
53 for(int i=0;i<n-1;i++){
54 for(int j=0;j<n-1;j++){
55 if(b[i][j]!=0){
56 t1.data[t1.nums].r=i;
57 t1.data[t1.nums].c=j;
58 t1.data[t1.nums].d=b[i][j];
59 t1.nums++;
60 }
61 }
62 }
63 sum+=a[l][0]*DatMat(t1)*pow(-1,l);//通过递归来求行列式的值
64 }
65 return sum;
66 }
67 }
68 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:算法与数据结构(一)将一个数组中的各节点按照层次遍历插入构成
下一篇:二分法查找
- C++ rand函数 2020-06-10
- 数据结构—链表 2020-05-29
- OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭 2020-05-24
- 类欧几里得算法 2020-05-16
- 算法笔记刷题6 ( PAT 1003我要通过 ) 2020-05-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash