欢迎来到天天文库
浏览记录
ID:47427216
大小:32.90 KB
页数:11页
时间:2020-01-10
《C语言求矩阵的逆矩阵》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言求矩阵的逆矩阵班级:自动化1604小组成员:潘孝枫金豆2017年4月作业要求:1.用C语言编程;2.查阅相关资料,至少了解三种以上的求矩阵的逆的方法;3.俩人一组,提交大作业报告,含源代码。方法一:用伴随矩阵求矩阵的逆矩阵(潘孝枫)求矩阵的逆求伴随矩阵求矩阵的行列式功能模块输入矩阵最主要的问题就是求解矩阵的逆矩阵,而且是一个动态矩阵1.求解矩阵的伴随矩阵,套用求行列式的函数解决问题的关键是如何运用一个循环递归将求行列式的函数反复嵌套函数的分块1.求矩阵的行列式的函数2.求余子式的函数3.求
2、逆的函数#include#include#defineN9//默认行列式最大输入阶数为9floatFun(intn,floata[N][N]);//定义行列式计算程序,n为行列式阶数,a为矩阵a/*主程序*/intmain(void){intn;//定义阶数ninti,j,i1,j1,i2,j2;//定义循环变量floata[N][N],b[N][N],c[N][N];//定义数组,a为原始录入数组,b为中间变量数组,用于提取与计算余子式,c为输出结果数组flo
3、atd;//定义a的行列式值printf("Inputtheorderofmatrixa:");//输入a的阶数scanf("%d",&n);printf("Inputmatrixa:");//输入矩阵afor(i=0;i4、");//输出“行列式值为0,不可逆”}else{printf("Thedeterminantofais%f",d);//非0继续运算if(n==1)//阶数为1的情况{c[0][0]=1/d;}else//阶数大于1的情况{for(i=0;i<=n-1;i++){for(j=0;j<=n-1;j++){for(i1=0,i2=0;i25、[i2][j2]=a[i1][j1];//提取a[i][j]所对应的余子式到矩阵b中}}c[j][i]=pow(-1,i+j)*Fun(n-1,b)/d;//计算a[i][j]对应的代数余子式,存入矩阵c中并完成转置}}}printf("");//输出结果for(i=0;i6、程序,采用逐步降阶求值{floatb[N][N];//定义矩阵binti=0,j=0;//定义循环变量i,jfloatsum=0;//定义行列式运算结果sumintc=0,p=0;//定义辅助变量c,pif(n==1)//行列式阶数为1函数直接返回a[0][0]值{returna[0][0];}for(i=0;i7、组a时行数下移一行,否则不执行数+1的操作{p=0;}else{p=1;}b[c][j]=a[c+p][j+1];//取出a[i][j]第一列每个元素对应的余子式存入数组b中}}sum+=a[i][0]*Fun(n-1,b)*pow(-1,i);//求出a第一列每个元素代数余子式之和,其中嵌套Fun进行逐步降阶完成高阶行列式计算}returnsum;}方法二:用行初等变换来求矩阵的逆//应用矩阵初等变换的方法求逆矩阵//参数说明:// naturalmat 原矩阵// 8、 num 矩阵的阶数// InvMat 求解结果,逆矩阵bool Matrix_Inv(double **naturalmat,int num,double **InvMat){ int i,j,k; double **MatEnhanced;//增广矩阵(A9、E) MatEnhanced = (double**)malloc(num*sizeof(double*)); for(i=0;i
4、");//输出“行列式值为0,不可逆”}else{printf("Thedeterminantofais%f",d);//非0继续运算if(n==1)//阶数为1的情况{c[0][0]=1/d;}else//阶数大于1的情况{for(i=0;i<=n-1;i++){for(j=0;j<=n-1;j++){for(i1=0,i2=0;i25、[i2][j2]=a[i1][j1];//提取a[i][j]所对应的余子式到矩阵b中}}c[j][i]=pow(-1,i+j)*Fun(n-1,b)/d;//计算a[i][j]对应的代数余子式,存入矩阵c中并完成转置}}}printf("");//输出结果for(i=0;i6、程序,采用逐步降阶求值{floatb[N][N];//定义矩阵binti=0,j=0;//定义循环变量i,jfloatsum=0;//定义行列式运算结果sumintc=0,p=0;//定义辅助变量c,pif(n==1)//行列式阶数为1函数直接返回a[0][0]值{returna[0][0];}for(i=0;i7、组a时行数下移一行,否则不执行数+1的操作{p=0;}else{p=1;}b[c][j]=a[c+p][j+1];//取出a[i][j]第一列每个元素对应的余子式存入数组b中}}sum+=a[i][0]*Fun(n-1,b)*pow(-1,i);//求出a第一列每个元素代数余子式之和,其中嵌套Fun进行逐步降阶完成高阶行列式计算}returnsum;}方法二:用行初等变换来求矩阵的逆//应用矩阵初等变换的方法求逆矩阵//参数说明:// naturalmat 原矩阵// 8、 num 矩阵的阶数// InvMat 求解结果,逆矩阵bool Matrix_Inv(double **naturalmat,int num,double **InvMat){ int i,j,k; double **MatEnhanced;//增广矩阵(A9、E) MatEnhanced = (double**)malloc(num*sizeof(double*)); for(i=0;i
5、[i2][j2]=a[i1][j1];//提取a[i][j]所对应的余子式到矩阵b中}}c[j][i]=pow(-1,i+j)*Fun(n-1,b)/d;//计算a[i][j]对应的代数余子式,存入矩阵c中并完成转置}}}printf("");//输出结果for(i=0;i6、程序,采用逐步降阶求值{floatb[N][N];//定义矩阵binti=0,j=0;//定义循环变量i,jfloatsum=0;//定义行列式运算结果sumintc=0,p=0;//定义辅助变量c,pif(n==1)//行列式阶数为1函数直接返回a[0][0]值{returna[0][0];}for(i=0;i7、组a时行数下移一行,否则不执行数+1的操作{p=0;}else{p=1;}b[c][j]=a[c+p][j+1];//取出a[i][j]第一列每个元素对应的余子式存入数组b中}}sum+=a[i][0]*Fun(n-1,b)*pow(-1,i);//求出a第一列每个元素代数余子式之和,其中嵌套Fun进行逐步降阶完成高阶行列式计算}returnsum;}方法二:用行初等变换来求矩阵的逆//应用矩阵初等变换的方法求逆矩阵//参数说明:// naturalmat 原矩阵// 8、 num 矩阵的阶数// InvMat 求解结果,逆矩阵bool Matrix_Inv(double **naturalmat,int num,double **InvMat){ int i,j,k; double **MatEnhanced;//增广矩阵(A9、E) MatEnhanced = (double**)malloc(num*sizeof(double*)); for(i=0;i
6、程序,采用逐步降阶求值{floatb[N][N];//定义矩阵binti=0,j=0;//定义循环变量i,jfloatsum=0;//定义行列式运算结果sumintc=0,p=0;//定义辅助变量c,pif(n==1)//行列式阶数为1函数直接返回a[0][0]值{returna[0][0];}for(i=0;i7、组a时行数下移一行,否则不执行数+1的操作{p=0;}else{p=1;}b[c][j]=a[c+p][j+1];//取出a[i][j]第一列每个元素对应的余子式存入数组b中}}sum+=a[i][0]*Fun(n-1,b)*pow(-1,i);//求出a第一列每个元素代数余子式之和,其中嵌套Fun进行逐步降阶完成高阶行列式计算}returnsum;}方法二:用行初等变换来求矩阵的逆//应用矩阵初等变换的方法求逆矩阵//参数说明:// naturalmat 原矩阵// 8、 num 矩阵的阶数// InvMat 求解结果,逆矩阵bool Matrix_Inv(double **naturalmat,int num,double **InvMat){ int i,j,k; double **MatEnhanced;//增广矩阵(A9、E) MatEnhanced = (double**)malloc(num*sizeof(double*)); for(i=0;i
7、组a时行数下移一行,否则不执行数+1的操作{p=0;}else{p=1;}b[c][j]=a[c+p][j+1];//取出a[i][j]第一列每个元素对应的余子式存入数组b中}}sum+=a[i][0]*Fun(n-1,b)*pow(-1,i);//求出a第一列每个元素代数余子式之和,其中嵌套Fun进行逐步降阶完成高阶行列式计算}returnsum;}方法二:用行初等变换来求矩阵的逆//应用矩阵初等变换的方法求逆矩阵//参数说明:// naturalmat 原矩阵//
8、 num 矩阵的阶数// InvMat 求解结果,逆矩阵bool Matrix_Inv(double **naturalmat,int num,double **InvMat){ int i,j,k; double **MatEnhanced;//增广矩阵(A
9、E) MatEnhanced = (double**)malloc(num*sizeof(double*)); for(i=0;i
此文档下载收益归作者所有