c解非齐次线性方程组C语言课程设计报告

上传人:痛*** 文档编号:113783364 上传时间:2022-06-27 格式:DOC 页数:21 大小:118.50KB
收藏 版权申诉 举报 下载
c解非齐次线性方程组C语言课程设计报告_第1页
第1页 / 共21页
c解非齐次线性方程组C语言课程设计报告_第2页
第2页 / 共21页
c解非齐次线性方程组C语言课程设计报告_第3页
第3页 / 共21页
资源描述:

《c解非齐次线性方程组C语言课程设计报告》由会员分享,可在线阅读,更多相关《c解非齐次线性方程组C语言课程设计报告(21页珍藏版)》请在装配图网上搜索。

1、. . 学号16082202032016-2017学年 第2学期C语言程序设计课程设计报告题目:解非齐次线性方程组专业:网络工程班级:16(3)班:代应豪指导教师:代美丽成绩:计算机学院2017年4月21日(课外的,第十周答辩和总结) 2017年5月21日(课的,第十四周答辩和总结)目录1设计容与要求.31.1设计容.31.2具体要求.32概要设计.32.1判断是否有解.32.2 实现方法.52.3主要函数介绍.62.4计算非齐次线性方程组的计算程序.73 3设计过程与程序代码.73.1源代码.73.2程序运行时的屏幕信息与运行示例.164设计结果分析.185参考文献.19致.19小结.201

2、、设计容与要求1.1 设计容采用阶梯矩阵找出非齐次线性方程组的增广矩阵的秩,用大小为未知量个数的双向栈存栈储自由未知量与非自由未知量,并给出在微机上运行的模拟人工解题的C语言计算程序。1.2 要求明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C语言进行算法编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。2、概要设计2.1 判断是否有解根据线性方程组的系数矩阵与增广矩阵的秩是否相等来判断方程组是否有解,若无解程序运行完毕,若有解则进行求解。求系数矩阵的秩r,增广矩阵的秩zr 方法是将增

3、广矩化成阶梯形,观察方程组中的哪些未知量是一般未知量,哪些是自由未知量,并赋一个相应的标记vf,对第i个未知量(此处设想常数项所对应的未知量为第n+1 个未知量)来说,标志函数的定义可写成下面的(2)式,这样方程组系数的矩阵的秩就可由下面的(3)式计算,增广矩阵的秩可由下面的(4)计算得到。nVf(i)=1第i个未知量是一般未知量0第i个未知量是自由未知量 i=1,2,n+1 (2)r=j=1 (3)Zr=r+vf(n+1) (4)若系数矩阵的秩r 等于增广矩阵的秩zr,则方程组有解,否则无解。当方程组有解时从原方程组(1)中选出r 个方程组成新的方程组(5)。这里line(i) i=1,2,

4、r,i代表新方程组的第i个方程line(i)指出新方程组中的第i个方程是原方程组中的第line(i)个方程。j=1nrj=1 aline(i)varx(j)xvarx(j)=(-aline(i) xvarx(j)+aline(i),n+1 i=1,2.,r (6)rj=1rj=r+1Cijxvarx(j)= Cijxvarx(j)+ci,n+1 i=1,2,r (7)1jraline(i)varx(j) jr+1jn,i=1,2,r-aline(i)varx(j)其中aline(i)varx(j)Cij=J=n+1由于自由未知量个数有n-r个,故上述方程组等价于下面的n-r+1个方程组成的方程

5、组:k=1,n-r+1C11xk,varx(1)+C1rxk,varx(x)=c1,r+kjCr,1xk,varx(1)+cr rxk, varx(r)=cr,r+k当k=1,r时求得的是基础解系,当k=n-r+1时求得的是特解。第k个解得分量xk,varx(j)=Dk,varx(j)/D j=1,2,r,k=1,2,,n-r+1,D是上式的系数行列式,上式中用等号Dk,varx(j)右边的常数项代替第j 列元素后所得到的行列式。2.2 实现方法Vf(i)的值在将增广矩阵化成阶梯形的过程中实现,其初值vf(i)=0,i=1,2,n+1。Line(i)的值也在将增广矩阵化成阶梯形的过程中实现,其

6、初值为line(i)=I,i=1,2,m。Varx(i)指(7)式中第i个未知量xvarx(i)是(1)式中的第varx(i)个未知量。Vf,line,varx在程序中为一维数组。系数矩阵与增广矩阵都用数组a表示,在求矩阵的秩时使用数组b(由a拷贝得到),c为二维数组(Dk,varx(j),j=1,r,k=1,n-r+1的值存于二维数组dsolution中,获得的解分量xk,varx(j)的分子,分母分别存与二维数组存储单元x1kvarxj与x2kvarxj中,最后根据数组x1与x2的存储情况给出方程组(1)的通解。2.3 主要函数介绍将增广矩阵化成阶梯形函数panbijeq0该函数有四个整型

7、参数。第一个参数(int i)是增广矩阵的行号,初始值为增广矩阵的首行标(在C语言中为0)。第二个参数(int j)是增广矩阵的列,初始值为增广矩阵第一列元素的列下标(在C语言中为0)。第三个参数(int m)与第四个参数(int n)分别为增广矩阵的行数和列数。该函数在完成将增广矩阵化成阶梯形的同时还完成未知量是一般未知量还是自由未知量的确定。该函数的特点是递归调用,适合任意大小的矩阵。交换两个行的函数change该函数有四个整型参数。第一个参数(int i)与第三个参数(int k)是要交换的两个行的行号。第二个参数给出开始交换的位置,减少交换次数。第四个参数的作用同panbijeq0的第

8、四个参数。该函数在交换两个行时还给line数组赋相应的新值。计算行列式的函数det与deter此二函数联合使用完成行列式的计算。deter 函数是中心部分,det函数是用户接口。det函数有三个整型参数:第一个参数(int n)是要计算的行列式的阶数,第二个参数(int a )是二维数组的地址,第三个参数(int column)是第二个参数在主程序中的列数。该函数调用deter函数完成行列式的计算。deter函数有七个整型参数:第一个是行列式的阶数,第二个指二维数组的行,第三个在函数中做循环变量,第四个是行列式的累加值,第五个是行列式定义1中计算一个项的累乘器(第六个与det的第二个相同,第七

9、个与det的第三个相同。函数det 与deter共同起作用完成任意阶行列式的计算(是文献1中计算部分的推广,从理论上讲,行列式的定义已完全搬上了计算机。2.4 计算非齐次线性方程组的计算程序程序中M是方程的个数,N 是方程中未知量的个数(可以任意取值(这里暂定为10)。3设计过程与程序代码3.1源代码:#include#include#define M 10#define N 10 int aMN+1; int lineM; int vfN+1,varxN+1; int bMN+1; int gcd(int u,int v); int deter(int n,int i,int j,int d

10、,int t,int a,int column); int det(int n,int a,int column); void panbijeq0(int i,int j,int m,int n); void change(int i,int j,int k,int n); void main() int i,j,m,n,r,zr,lu,lf,d,k,g,cMN+1,changecolM,dsolutionNN,x1MN,x2MN; printf(m=1,2,.,%dn,M); printf(m=); scanf(%d,&m); printf(n=1,2,.,%dn,M); printf(n=

11、); scanf(%d,&n); for(i=0;im;i+) for(j=0;jn+1;j+) printf(a%d%d=,i+1,j+1); scanf(%d,&aij); bij=aij; if(j=n) printf(n); for(i=0;im;i+) linei=i; for(j=0;jn+1;j+) vfj=0; panbijeq0(0,0,m,n); r=0; for(i=0;in;i+) r+=vfi; zr=r+vfn; if(rzr) exit(0); lu=0; lf=r; for(i=0;in;i+) if(vfi=1) varxlu=i; lu+; else var

12、xlf=i; lf+; for(i=0;ir;i+) for(j=0;jr;j+) cij=alineivarxj; for(j=r;jn;j+) cij=-alineivarxj; cin=alinein; d=det(r,c0,N+1); printf(d=%dn,d); for(i=0;i=n-r;i+) for(j=0;jn;j+) dsolutionij=0; for(j=0;jr;j+) for(i=0;ir;i+) changecoli=cij; for(k=r;k=n;k+) for(i=0;ir;i+) cij=aik; dsolutionk-rvarxj=det(r,c0,

13、N+1); for(i=0;ir;i+) cij=changecoli; for(i=0;i=n-r;i+) for(j=0;jr;j+) g=gcd(dsolutionivarxj,d); x1ivarxj=dsolutionivarxj/g; x2ivarxj=d/g; for(i=0;i=n-r;i+) for(j=r;jn;j+) x2ivarxj=1; if(j=i+r) x1ivarxj=1; else x1ivarxj=0; printf(general solutionn= ); for(i=0;i=n-r;i+) if(in-r) printf(k%d(,i+1); else

14、 printf(); for(j=0;jn;j+) if(x2ij=1) printf(%d,x1ij); else printf(%d%d,x1ij,x2ij); if(in-r) printf()n+ ); else printf()n); for(i=0;i0) printf( belong(s) to Rn); void panbijeq0(int i,int j,int m,int n) int k,s,find; int c; if(bij!=0) vfj=1; for(k=i+1;km;k+) if(bkj!=0) c=bkj/bij; bkj=0; for(s=j+1;sn+1

15、;s+) bks-=bis*c; i+; j+; if(im&jn+1) panbijeq0(i,j,m,n); else find=0; k=i+1; while(find=0&(km) if(bk+j!=0) find=1; if(find=1) change(i,j,m,n); panbijeq0(i,j,m,n); else j+; if(jn+1) panbijeq0(i,j,m,n); void change(int i,int j,int k,int n) int s; int a; s=linei; linei=linek; linek=s; for(s=j;sn+1;s+)

16、a=bis; bis=bks; bks=a; int det (int n,int a,int column) int d=0,t=1;int jN;d=deter(n,0,j,d,t,a,column);return(d); int deter(int n,int i,int j,int d,int t,int a,int column) int k,sign,flag; if(in) for(ji=0;jin;ji+) flag=0; k=0; while(flag=0)&(ki) if(ji=jk) flag=1; if(flag=1) continue; if(ai*column+ji

17、=0) continue; sign=1; for(k=0;ki;k+) if(jijk) sign=-sign;d=deter(n,i+1,j,d,t*sign*ai*column+ji,a,column); else d+=t; return (d); int gcd (int u,int v) int r,t=v; if(u0) u=-u; if(v0?u:-u); 3.2程序运行时的屏幕信息与运行示例在运行中I 计算机屏幕上显示”m=1,2,10”与”n=1,2,10”的信息是告诉用户程序预定义m,n的值为10, 可计算含有10个方程10个未知量的线性方程组,若m或n大于10时只要修改

18、预定义的值即可。”m=”与”n=”的信息是请用户输入具体的方程数与未知量数,这里为1 到10的任何整数,现以下面的方程组为例进行说明。例求解方程组X1-x2-x3+x4=0X1-x2+x3-3x4=12x1-2x2-4x3+6x4=-1运行如下m=1,2,.,10m=2n=1,2,.,10n=3a11=1 a12=-1 a13=1 a14=-1a21=1 a22=-1 a23=1 a24=-1d=1general solution=k1(-110)+k2(101)+(-100)k1 k2 belong(s) to R4设计结果与分析当把程序写好并进行调试时,并不是一帆风顺的,总会遇到很多在调试

19、时遇到的错误。1.首先在定义函数时,不能输入汉字。否则会程序会显示错误。2.在程序中,如果类型不同不可以直接赋值,会出现相应的警告3.前后定义变量要统一。4.如果要调用添加函数,修改函数,修改函数,查找函数,统计函数等要在主函数前面进行申明。否则会显示警告。5.如果程序在运行的过程中,对于一个循环语句,如果你返回的值始终是真的,那么程序将进如死循环。6. 未注意int,float型数据的数值围,int型数据的数值围(-3276832768)。7.对应该有花括弧的复合语句,忘记加花括弧。8. 所调用的函数在调用语句之后才定义,而又在调用前未加说明。5参考文献1智东杰R用定义计算行列的C语言程序设

20、计A.雷式祖,绍先,王爱民,薛瑞丰.中国高等教育研究论丛(第四卷)C:科技大学,1993.606-609.2智东杰.用C语言设计克莱姆法则的计算程序A.正新,薛瑞丰,黄天民,徐扬,王爱民,中国高等教育研究论丛(第六卷)C.:西南交通大学,1994. 263-266.小结在本课程设计的设计过程中,我刚开始感觉到有点头痛。要通过一学期C语言的学习后将所学知识运用起来有点困难,但回过头来再去看教课书,对于这些知识点有关的背景,概念和解决方案更进一步的理解,感觉也不是很难。另外我还体会了从事C语言课程设计工作需要特别谨慎认真地态度和作风,一点都不能马虎。每个细微的细节都必须十分注意,如果不认真思考,就

21、会出现或大或小的错误。如果把早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。有时候,我自己觉得我写的程序非常正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验与各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间没有一点进展。这时候,我一般是先自己通过书本,手册和资料找解决方法,实在没辙才向老师同学请教。在开始编写程序的时候,我看到别人的程序功能非常的详细,而且界面非常漂亮,总是希望自己的程序也非常的完善,但是,发现编一个好的程序不是一蹴而就的事情,需要长时间的积累和经验。致在这次C语言课程设计中,我的老师和同学给了我与大的帮助。特别是我的指导老师代美丽老师。在此,我对他们表示感!感他们在我面对困难时给了我帮助和支持。也感那些给我帮助的所有同学!21 / 21

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!