1.具体思想:

关于计算矩阵行列式有两个主要方法:

1.根据矩阵行列式的定义式用递归计算(就是本文所讲)

2.先做矩阵行变换,转化为上三角矩阵,再求行列式。

(我先是思考了行变换转化为三角矩阵,但中途遇到了些问题,所以先把递归的方法写下来,之后会继续更新另外一种方法。)

线性代数里我们已经了解了递归求矩阵行列式的方法。下图:

然后每一个代数余子式又可以看做相对于“n阶母矩阵”的“n-1阶子矩阵”,再次对这个子矩阵按照行或列展开,这就是递归求矩阵行列式的思想。

2.三元组和二维数组

二维数组不用多说,它和矩阵是一一对应的,表示完全相同。

三元组是指形如((r,c),d)的集合,我们规定(r,c)是三元组中的一个数在二维数组中的对应位置,d表示数据的值。

三元组的数据结构如下:

 1 typedef struct2 {3     int r;4     int c;5     int d;6 }TupNode;7 typedef struct8 { 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 } 

转载于:https://www.cnblogs.com/OrdinaryMan/p/10022255.html

算法与数据结构(二)三元组矩阵行列式的计算(用递归)相关推荐

  1. 基于二维矩阵的FFT计算原理

    FFT算法是信号处理领域最基本.最经典的算法,在工程实践中用处十分广泛,但是在一些对FFT点数要求较大或者计算FFT实时性要求较高的场合,按常规方式直接计算FFT难以满足工程实际的要求.本文针对长点数 ...

  2. c语言暴力求解法二维数组比较,【算法】搜索二维矩阵 暴力解法二分法 4种语言...

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1:输入:matrix = ...

  3. 数据结构--二维矩阵及其乘法

    代码如下: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <rand ...

  4. Python与Ansys apdl有限元系列二:矩阵位移法计算桁架结构

    矩阵位移法计算三种桁架(静定,一次,二次超静定) 1 为 了 便 于 计 算 , 桁 架 弹 性 模 量 与 截 面 积 乘 积 E A = 1 , 所 有 杆 件 均 为 二 力 杆 \qquad为 ...

  5. 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  6. ssm插入数据时候栈溢出_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  7. 中科院陈玉福算法设计与分析 动态规划矩阵连乘计算问题

    题目描述: 已知矩阵

  8. 队列的基本操作_算法与数据结构(五) 栈和队列

    ? 工欲善其事,必先利其器. 栈和队列 - Stack And Queue 栈 如何理解栈呢? 后进者先出,先进者后出,这就是典型的 "栈" 结构. 04_栈和队列-栈结构 从栈的 ...

  9. 搜索二维矩阵II(分治法和蛇行)

    问题来源:力扣算法面试汇总 问题描述:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序 ...

最新文章

  1. 这次是真的!波士顿动力Atlas机器人又进化了,自主导航get新技能
  2. php获取显示图书数据,php基于dom实现读取图书xml格式数据的方法
  3. 面向对象的三大特性————继承,多态
  4. java 新窗口跳转页面_Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开...
  5. JAVA里点击树与表格结合,javaswing中的表格(jtable)和树(jtree)组件使用实例.doc
  6. 如何在Node.js上的Express.js中获取GET(查询字符串)变量?
  7. Jnotify文件监控的用法以及Jar文件导入的方法
  8. 基于软件工程的Qt播放器探索(一) 概述
  9. 基于微信小程序的鲜花销售系统毕业设计源码
  10. repository ‘Gradle Libs‘ was added by unknown code
  11. miniGUI源码分析:初始化
  12. 李宏毅2020机器学习作业3-CNN:食物图片分类
  13. win7设置定时锁定计算机,Windows7电脑屏幕如何设置不自动锁屏
  14. 安装linux系统出来7只小企鹅,在Red Hat Linux 9.0下安装小企鹅中文输入法
  15. 极力推荐自由飞鸽的电子书《linux 0.11内核详解》,我传至纳米盘,也可到oldlinux.org 去下载
  16. Excel-VB学习
  17. 理解DCT与DST【三】:离散正弦变换
  18. Linux系统的结构是什么?主要包含哪几部分?
  19. C# windows服务部署到服务器上指令
  20. 一加手机的小众品牌困境

热门文章

  1. linux序列比对程序,Linux程序管理:top.htop.glances,dstat等命令使用方法
  2. php项目重构,跪求网页重构、前端开发、PHP 开发,坐标深圳腾讯 CDC
  3. laravel架构判断id存在与否 存在进行什么操作_基于 Module 的 Laravel API 架构
  4. spring boot 教程(三)配置详解
  5. python3 二进制文件比较_《Python 3程序开发指南(第2版•修订版)》——7.4 随机存取二进制文件...
  6. mysql 处理文件函数_mysql的字符串处理函数
  7. 折线图_R语言画折线图?
  8. 三维计算机视觉(八)--点云配准
  9. 系统学习深度学习(九)--激活函数总结
  10. C#记事本的简单开发