您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 200704033020用高斯列主元消元法解线性方程组
沈阳航空工业学院课程设计学号200704033020班级7403301姓名刘阳指导教师王晓岩2009年3月6日沈阳航空工业学院课程设计任务书院系:航空宇航工程学院专业:飞行器设计与工程班级:7403301学号:200704033020题目:用高斯列主元消元法解线性方程组一、课程设计时间2008~09第2学期第1周,共计1周,20学时。二、课程设计内容用C语言编写程序完成以下任务:请用高斯列主元消元法解下列线性方程组:53367435522321321321xxxxxxxxx三、课程设计要求1.程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“输入数据”、“开始计算”、“退出”3项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。高斯消元法解题步骤:(AX=b):nnnnnnnnbbbxxxaaaaaaaaa2121212222111211方法说明(以4阶为例)第一步消元——在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组转化为如下形式:*******0***0***0****4321xxxx第二步消元——在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:******00**00***0****4321xxxx第三步消元——在增广矩阵(A,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:*****000**00***0****4321xxxx按x4x3x2x1的顺序回代求解出方程组的解。指导教师:________学生签名:________五、说明书成绩:六、教师评语:目录一、需求分析............................................................1二、程序流程图........................................................2三、核心技术的实现说明及相应程序段...............8四、个人总结...........................................................11五、参考文献...........................................................11六、源程序...............................................................11沈阳航院设计用纸1一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,分别是:输入方程组系数及结果,计算方程组,继续运算或退出。计算方程组模块对应如下:一、添加数据(行列式每行的系数和结果):主要实现程序最初运行时学生数据的录入。二、进行运算:运用gauss函数进行运算,并最终显示结果。三、继续运算/退出:可以在程序的一次运行当中循环执行所有的功能,并根据需要,终止程序的执行。沈阳航院设计用纸2二、程序流程图1、程序总体结构图图1:程序总体结构图显示文本模式窗口输出:用Gauss列主元消元法解线性方程组输出:解方程组请按Enter.输出:退出程式请按Esc.输入:所须选择的序号.根据输入信息进行选择ESCEnter其他退出输出“无根或大于二个调用gauss函数沈阳航院设计用纸3图1程序总体结构图2、具体功能框图(1)菜单函数图1(2)添加系数:Putin函数,输入行列式系数和结果沈阳航院设计用纸4图2图3沈阳航院设计用纸5(3)guass沈阳航院设计用纸6沈阳航院设计用纸7图4沈阳航院设计用纸8三、核心技术的实现说明及相应程序段本程序一共由两个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,运算函数是程序中较为核心的部分,下面分别进行说明。1、运算函数运算函数是本程序的主要部分,首先输入系数和向量后存入数组,判断方程是否合法,不合法则返回菜单,然后通过循环解二维数组,最后输出结果x[i],具体程序段如下:voidgauss(){//doublea[n][n];//doubleb[n];doublex[n];for(intk=0;k(n-1);k++){doubleamax=abc(a[k][k]);沈阳航院设计用纸9intl=k;for(inti=k+1;in;i++){if(amaxabc(a[i][k])){amax=abc(a[i][k]);l=i;}}if(amax==0){printf(无根或根大于二个\n);return;}if(l!=k){doublet=0;for(intj=k;jn;j++){t=a[k][j];a[k][j]=a[l][j];a[l][j]=t;}t=b[k];b[k]=b[l];b[l]=t;}for(i=k+1;in;i++){a[i][k]=a[i][k]/a[k][k];b[i]=b[i]-a[i][k]*b[k];for(intj=k+1;jn;j++)沈阳航院设计用纸10{a[i][j]=a[i][j]-a[i][k]*a[k][j];}}}if(a[n-1][n-1]==0){printf(无根或根大于二个\n);return;}else{b[n-1]=x[n-1]=b[n-1]/a[n-1][n-1];for(inti=n-2;i=0;i--){doubles=0;for(intj=i+1;jn;j++){s+=a[i][j]*x[j];}b[i]=x[i]=(b[i]-s)/a[i][i];}}printf(方程组的解为x=();for(inti=0;in;i++){printf(%lf,x[i]);沈阳航院设计用纸11if(i!=(n-1))printf(,);}printf());}四、个人总结这次课设让我更熟悉的掌握了通过C语言运用高斯定理解方程组,也使我对二维数组的认识更加深入了解,在完成程序中,遇到过较大的困难,但通过重新深入教材和对资料理解的基础逐步完成。五、参考文献1谭浩强.《C程序设计》.北京:清华大学出版社,20052刘成等.《C语言程序设计实验指导与习题集》.北京:中国铁道出版社,2006六、源程序#includestdio.h#includeiomanip.h#includemath.h#includestdlib.h//其中定义了system()函数沈阳航院设计用纸12#definen3doublea[n][n];doubleb[n];voidmenu();voidputin();voidstart();voidmenu(){printf(*************************高斯消去法*************************);printf(\n1输入数据);printf(\n2开始计算);printf(\n3退出);}voidputin(){intp,j;for(p=0;pn;p++){printf(输入第);printf(%d,p+1);printf(行系数:\n);for(j=0;jn;j++)scanf(%lf,&a[p][j]);}for(p=0;pn;p++){printf(输入第);printf(%d,p+1);printf(行结果:\n);scanf(%lf,&b[p]);}}沈阳航院设计用纸13doubleabc(doublex){if(x0)return((-1)*x);returnx;}voidgauss(){//doublea[n][n];//doubleb[n];doublex[n];for(intk=0;k(n-1);k++){doubleamax=abc(a[k][k]);intl=k;for(inti=k+1;in;i++){if(amaxabc(a[i][k])){amax=abc(a[i][k]);l=i;}}if(amax==0){printf(无根或根大于二个\n);return;}if(l!=k){doublet=0;for(intj=k;jn;j++)沈阳航院设计用纸14{t=a[k][j];a[k][j]=a[l][j];a[l][j]=t;}t=b[k];b[k]=b[l];b[l]=t;}for(i=k+1;in;i++){a[i][k]=a[i][k]/a[k][k];b[i]=b[i]-a[i][k]*b[k];for(intj=k+1;jn;j++){a[i][j]=a[i][j]-a[i][k]*a[k][j];}}}if(a[n-1][n-1]==0){printf(无根或根大于二个\n);return;}else{b[n-1]=x[n-1]=b[n-1]/a[n-1][n-1];for(inti=n-2;i=0;i--){doubles=0;for(intj=i+1;jn;j++){s+=a[i][j]*x[j];}b[i]=x[i]=(b[i]-s)/a[i][i];}}printf(方程组的解为x=();for(inti=0;in;i++){printf(%lf,x[i]);沈阳航院设计用纸15if(i!=(n-1))printf(,);}printf());}voidmain(){while(1){intq;menu();printf(\n请输入您要选择的操作序列号,按回车键确认:);scanf(%d,&q);switch(q){case1:putin();break;case2:gauss();break;case3:exit(0);break;default:printf(输入错误,请输入列表中存在的序列号!\n);}}}
本文标题:200704033020用高斯列主元消元法解线性方程组
链接地址:https://www.777doc.com/doc-6169553 .html