版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言求矩阵的逆矩阵班级:自动化1604小组成员:潘孝枫金豆2017年4月作业要求:1 .用C语言编程;2 .查阅相关资料,至少了解三种以上的求矩阵的逆的方法;3 .俩人一组,提交大作业报告,含源代码。方法一:用伴随矩阵求矩阵的逆矩阵(潘孝枫)输入矩阵<)功能模块Word资料Word 资料最主要的问题就是求解矩阵的逆矩阵,而且是一个动态矩阵1. 求解矩阵的伴随矩阵,套用求行列式的函数解决问题的关键是如何运用一个循环递归将求行列式的函数反复嵌 套函数的分块1. 求矩阵的行列式的函数2. 求余子式的函数3. 求逆的函数#include <stdio.h>#include <
2、math.h>/ 默认行列式最大输入阶数为/ 定义行列式计算程序,#define N 9float Fun(int n, float aNN );行列式阶数, a 为矩阵 a/* 主程序 */int main(void)int n ;/ 定义阶数 ninti, j, i1, j1,i2 ,j2 ;/ 定义循环变量float aNN , bNN , cNN;/定义数组, a 为原始录入数组, b 为中间变量数组,用于提取与计算余子式, c 为输出结果数组float d;/ 定义 a 的行列式值printf("Input the order of matrix a:");
3、/ 输入 a 的阶数scanf("%d",&n);printf("Input matrix a:n");/ 输入矩阵 afor( i = 0; i< n; i+)for( j = 0; j < n; j+)scanf("%f", &aij);d=Fun( n, a );/ 计算 a 的行列式if(fabs(d)<1e-6)/ 判断 a 的行列式值是否为 0printf("The determinant is not invertible!"); / 输 出 “ 行列式值为 0 ,不
4、可逆 ”elseprintf("The determinant of a is %f",d);/ 非 0 继续运算if(n=1)/ 阶数为 1 的情况c00=1/d;else/ 阶数大于 1 的情况for( i = 0; i<=n-1; i+)for( j = 0; j <= n-1; j+)for(i1=0, i2=0; i2<n-1; i1+, i2+)for(j1=0, j2=0; j2<n-1; j1+, j2+)if(i1 = i) i1+;if(j1 = j)j1+;bi2j2=ai1j1;/ 提取 aij 所对应的余子式到矩阵b 中cj
5、i=pow( -1 , i + j ) * Fun( n - 1 , b)/d;/ 计算 aij 对应的代数余子式,存入矩阵 c 中并完成转置printf("n");/ 输出结果for(i=0;i<n;i+)for(j=0;j<n;j+)printf("%10f",cij);printf("n");/* 求行列式 */float Fun( int n, float aNN )/ 定义求矩阵行列式的程序, 采用逐步降阶求值float bNN;/ 定义矩阵 binti = 0, j = 0;/ 定义循环变量i,jfloat s
6、um = 0;/ 定义行列式运算结果sumint c = 0,p = 0;/ 定义辅助变量c,pif(n = 1)/ 行列式阶数为 1 函数直接返回a00 值return a00;for(i = 0;i < n; i+)/ 针对行列式第一列展开for(c = 0;c < n-1; c+)for(j = 0;j < n-1;j+)if (c <i)/ 判断录入数组b 时行数值, 如果c 大于 i, 则在执行录入数组a 时行数下移一行, 否则不执行数+1 的操作p = 0;elsep = 1;bcj = ac+pj+1;/ 取出 aij 第一列每个元素对应的余子式存入数组b
7、 中sum += ai0 * Fun(n - 1, b ) * pow(- 1 , i ); / 求出 a 第一列每个元素代数余子式之和,其中嵌套Fun 进行逐步降阶完成高阶行列式计算return sum;方法二:用行初等变换来求矩阵的逆/ 应用矩阵初等变换的方法求逆矩阵/ 参数说明:/naturalmat原矩阵/num 矩阵的阶数/InvMat 求解结果,逆矩阵bool Matrix_Inv(double *naturalmat,int num,double *InvMat)int i,j,k;double *MatEnhanced;/ 增广矩阵 (A|E)MatEnhanced = (do
8、uble*)malloc(num*sizeof(double*);for(i=0;i<num;i+)MatEnhancedi = (double*)malloc(2*num*sizeof(double);double *temp;temp = (double*)malloc(2*num*sizeof(double);double xishu=1;/ 初等变换时系数,设初值为 1for(i=0;i<num;i+)/ 增广矩阵赋值,前半部分for(j=0;j<num;j+)MatEnhancedij = naturalmatij;for(i=0;i<num;i+)/ 增广矩
9、阵赋值,后半部分for(j=num;j<2*num;j+)MatEnhancedij = 0;/ 先将后半部分全部赋值为 0MatEnhancedii+num = 1;/再将其对角线部分赋值为 1/ 接下来进行初等行变换for(i=0;i<num;i+)if(MatEnhancedii = 0)/ 如果前半部分的对角线上的元素为 0 ,此时进行行变换if(i = num-1)/ 如果是最后一行,那么说明该矩阵不可return false;/ 对第 i 行以后的各行进行判断,找到第 i 个元素不为零的行,并与第 i 行进行交换for(j=i;j<num;j+)if(MatEnh
10、ancedji != 0)k = j;/ 记住该行的行号break;/ 退出循环/ 接下来对第 i 行和第 k 行进行交换xishu = MatEnhancedii;MatEnhancedk = MatEnhancedi;MatEnhancedi = temp;/ 初等变换for(j=0;j<num;j+)/ 对其他行的所有列进行计算if(j != i)/ 本行不参与计算if(MatEnhancedji != 0)/ 只有当其不为零时进行计算,否则不计算xishu = MatEnhancedji/MatEnhancedii;for(k=i;k<2*num;k+)/ 对后面的所有列进行计算MatEnhancedjk -= xishu*MatEnhancedik;/ 将本行所有列都除以对角线上的值,将前半部分化成单位矩阵for(j=i;j<2*num;j+)if(xishu != 0)MatEnhancedij /= xis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉地铁集团有限公司2026届春季校园招聘建设考试备考题库及答案解析
- 2026贵州磷化(集团)有限责任公司春季社会招聘228人建设笔试备考试题及答案解析
- 2026年4月广东深圳市第二高级中学赴长春面向应届毕业生招聘教师18人建设笔试参考题库及答案解析
- 2026宁波通商控股集团有限公司招聘1人建设笔试备考题库及答案解析
- 2026年县乡教师选调考试《教育学》综合提升测试卷附参考答案详解(巩固)
- 2025年县乡教师选调考试《教育学》检测卷包含答案详解(夺分金卷)
- 2026年县乡教师选调考试《教育学》测试卷及参考答案详解(考试直接用)
- 2026年山东省乡镇卫生院(社区卫生服务中心)招聘计划(第一批551人)建设笔试参考题库及答案解析
- 2026四川南充阆中北大博雅骏臣学校教师招聘11人建设考试参考题库及答案解析
- 2026四川宜宾市筠连县沐爱镇空白村乡村医生招聘2人建设考试参考题库及答案解析
- 2025生物银行面试题目及答案
- 氟化工艺作业安全培训
- 资产减值准备管理办法
- 任务型阅读15篇-八年级英语下学期期末复习
- GB/T 45953-2025供应链安全管理体系规范
- 干部审计知识培训课件
- 2025年商标代理人业务水平考试题库附答案
- 化工储罐知识培训课件
- 【《某煤矿深部煤巷二次支护设计分析》14000字(论文)】
- 华为销售培训课件
- 2025年中级消防设施操作员理论知识考试真题(后附专业答案和解析)
评论
0/150
提交评论