C语言实现矩阵算法本科毕业论文

上传人:人*** 文档编号:500927138 上传时间:2023-01-05 格式:DOC 页数:26 大小:415KB
返回 下载 相关 举报
C语言实现矩阵算法本科毕业论文_第1页
第1页 / 共26页
C语言实现矩阵算法本科毕业论文_第2页
第2页 / 共26页
C语言实现矩阵算法本科毕业论文_第3页
第3页 / 共26页
C语言实现矩阵算法本科毕业论文_第4页
第4页 / 共26页
C语言实现矩阵算法本科毕业论文_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《C语言实现矩阵算法本科毕业论文》由会员分享,可在线阅读,更多相关《C语言实现矩阵算法本科毕业论文(26页珍藏版)》请在金锄头文库上搜索。

1、摘要矩阵的算法越来越多的应用在工程的各个方面,目前常用的处理矩阵运算的工具是Matlab软件,该软件虽然封装大量的矩阵算法1 严蔚敏,吴伟民编.数据结构C语言版教材.北京清华大学出版社. 1997年出版。但在实际应用中,很多算法是需要通过高级编程语言来实现的。这样Matlab就不能发挥其作用了。其次Matlab对矩阵的运算效率不及C语言高,尤其在工程中对海量数据进行运算时Matlab的弱点就显示出来。又由于C语言没有提供矩阵运算的函数,对此用C语言封装矩阵的常规运算很有必要。本文首先介绍了矩阵的基本算法,其后观察不同的算法特点选择实现方法。值得一提的是方阵的求逆,本文将介绍求逆不同的计算方法。

2、而后讨论各种算法的时间复杂度和空间复杂度,然后选用效率高的用C语言2 谭浩强著.C语言程序设计第二版. 北京清华大学出版社.2008年出版。实现。关键词C语言3 曹重光著.线性代数第二版.内蒙古科学技术出版社.2001年出版。附页矩阵加法#include #include #include double * Add(double * a,int rowa,int cola,double * b,int rowb,int colb) if(a=NULL|b=NULL)/判断是否有为NULL的指针 return NULL; if(rowa!=rowb)|(cola!=colb)/判断是否为同型阵

3、return NULL;/申请存储空间 int i,j; double *P; P=( double*)malloc(rowa*sizeof(double *); for(i=0;irowa;i+) Pi=( double*)malloc(colb*sizeof( double); /对传入的两矩阵做加操作for(i=0;irowa;i+) for(j=0;jcola;j+) Pij=aij+bij;/返回操作结果指针return P ;矩阵数乘#include #include #include double * Mathmul(double * a,int rowa,int cola,do

4、uble data) if(a=NULL)/判断是否有为NULL的指针 return NULL;/申请存储空间 int i,j; double *P; P=( double*)malloc(rowa*sizeof(double *); for(i=0;irowa;i+) Pi=( double*)malloc(cola*sizeof( double); /对传入的矩阵做操作for(i=0;irowa;i+) for(j=0;jcola;j+) Pij=data*aij;/返回操作结果指针return P ;矩阵乘法#include #include #include double * Mul

5、(double * a,int rowa,int cola,double * b,int rowb,int colb) if(a=NULL|b=NULL)/判断是否有为NULL的指针 return NULL; if(cola!=rowb)/判断是否能进行乘法运算 return NULL;/申请存储空间 int i,j,k; double *P,s; P=( double*)malloc(rowa*sizeof(double *); for(i=0;irowa;i+) Pi=( double*)malloc(colb*sizeof( double); /对传入的两矩阵做乘操作for(i=0;ir

6、owa;i+) for(j=0;jcolb;j+) s=0;for(k=0;krowb;k+)s+=aik*bkj; Pij=s;/返回操作结果指针return P ;矩阵转置#include #include #include double * Transpose(double * a,int rowa,int cola) if(a=NULL)/判断是否有为NULL的指针 return NULL;/申请存储空间 int i,j; double *P; P=( double*)malloc(cola*sizeof(double *); for(i=0;irowa;i+) Pi=( double

7、*)malloc(rowa*sizeof( double); /对传入的矩阵做操作for(i=0;icola;i+) for(j=0;jrowa;j+) Pij=aji;/返回操作结果指针return P ;矩阵求行列式#include #include #include double Det(double *a,int N)/判断a是否为空if(a=NULL)return NULL;/定义变量和申请空间 int i,j,m,n,s,t,k=1; double f=1,c,x,sn,*p; p=( double*)malloc(N*sizeof(double *); for(i=0;iN;i+

8、) pi=( double*)malloc(N*sizeof( double); /把数据赋给矩阵Pfor(i=0;iN;i+) for(j=0;jN;j+) pij=aij; /把矩阵p变成对角阵 for (i=0,j=0;iN&jN;i+,j+) if (pij=0)/检测主对角元是否有为零的元素 for (m=i;pmj=0;m+);/判断是否有某一列全为0if (m=N) sn=0; printf(detA=%lfn,sn); exit(0); else for (n=j;ni;s-)/从第一列最后一行开始把非对角元素变为零 x=psj; for (t=j;tN;t+) pst-=pi

9、t*(x/pij); for (i=0;iN;i+)/计算主角对角元素乘积 f*=pii; sn=k*f; return sn;/返回行列式值矩阵求逆#include #include #include double *Inverse(double *a,int n) if(a=NULL)/判断是否有为NULL的指针 return NULL; int i, j, k, l; double *P,*I; P=( double*)malloc(n*sizeof(double *); for(i=0;in;i+) Pi=( double*)malloc(n*sizeof( double); I=(

10、double*)malloc(n*sizeof(double *); for(i=0;in;i+) Ii=( double*)malloc(n*sizeof( double); for(i = 0; i n; +i) /将A矩阵存放在临时矩阵pnn中 for(j = 0; j n; +j) Pij =aij; for(i = 0; i n; +i) /初始化B矩阵为单位阵 for(j = 0; j n; +j) Iij = (i = j) ? 1:0; for (i=0,j=0;in&jn;i+,j+) int m; double t,max= Pij; for (m=i;mn;m+); if (max Pmj)/寻找列主元for(l=i;ln;l+)/把最大元换到pii位置t=Pil; Pil= Pml; Pml=t;for(l=i;l=0;l-)if(l=i)/不对主元所在行操作 l-; for (k=i+1;kn;k+)/把非主元的元素通过行变换变成零 Plk= Plk- Pik* Pik/ Pij; Ilk=Ilk-Iik*Iik/Iij;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号