用高斯列主元消元法解线性方程组_第1页
用高斯列主元消元法解线性方程组_第2页
用高斯列主元消元法解线性方程组_第3页
用高斯列主元消元法解线性方程组_第4页
用高斯列主元消元法解线性方程组_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 沈 阳 航 空 工 业 学 院 课程设计学 号0班 级 姓 名 刘阳指导教师 王晓岩2009年 3月 6日专心-专注-专业沈阳航空工业学院课程设计任务书院系:航空宇航工程学院 专业:飞行器设计与工程 班级:学号:0 题目:用高斯列主元消元法解线性方程组一、课程设计时间200809第2学期第1周,共计1周,20学时。二、课程设计内容用C语言编写程序完成以下任务:请用高斯列主元消元法解下列线性方程组:三、课程设计要求1. 程序质量:² 贯彻结构化的程序设计思想。² 用户界面友好,功能明确,操作方便。² 用户界面中的菜单至少应包括“输入数据”

2、、“开始计算”、 “退出”3项。² 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。高斯消元法解题步骤:(AX=b):方法说明(以4阶为例)l 第一步消元在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组转化为如下形式:l 第二步消元在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:l 第三步消元在增广矩阵(A,b)中的第三列中(

3、从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:按x4 à x3à x2à x1 的顺序回代求解出方程组的解。指导教师:_ 学生签名:_五、说明书成绩:六、教师评语:目录一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,分别是:输入方程组系数及结果,计算方程组,继续运算或退出。计算方程组模块对应如下:一、添加数据(行列式每行的系数和结果):主要实现程序最初运行时学生数据的录入。二、进行运算:运用gauss函数进行运算, 并最终显示结果。三、继续运算/退出:可以在程序的一次运行当中循

4、环执行所有的功能,并根据需要,终止程序的执行。二、程序流程图1、程序总体结构图图1: 程序总体结构图 显示文本模式窗口 输出: 用Gauss列主元消元法解线性方程组输出: 解方程组请按Enter.输出: 退出程式请按Esc.输入:所须选择的序号. 根据输入信息进行选择ESC Enter 其他退出 输出 “无根或大于二个 调用gauss函数 图1程序总体结构图2、具体功能框图(1)菜单函数 图1(2) 添加系数: Putin函数,输入行列式系数和结果 图2 图3(3)guass 图4 三、核心技术的实现说明及相应程序段本程序一共由两个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数

5、来实现要求的所有功能。在这些函数当中,运算函数是程序中较为核心的部分,下面分别进行说明。1、运算函数 运算函数是本程序的主要部分,首先输入系数和向量后存入数组,判断方程是否合法,不合法则返回菜单,然后通过循环解二维数组,最后输出结果xi,具体程序段如下: void gauss()/double ann;/double bn;double xn;for(int k=0;k<(n-1);k+)double amax=abc(akk);int l=k;for(int i=k+1;i<n;i+) if(amax<abc(aik)amax=abc(aik);l=i;if(amax=0)

6、printf("无根或根大于二个n");return;if(l!=k)double t=0;for(int j=k;j<n;j+)t=akj;akj=alj;alj=t;t=bk;bk=bl;bl=t;for(i=k+1;i<n;i+)aik=aik/akk;bi=bi-aik*bk;for(int j=k+1;j<n;j+)aij=aij-aik*akj;if(an-1n-1=0)printf("无根或根大于二个n");return;elsebn-1=xn-1=bn-1/an-1n-1;for(int i=n-2;i>=0;i-

7、)double s=0;for(int j=i+1;j<n;j+)s+=aij*xj;bi=xi=(bi-s)/aii;printf("方程组的解为x=(");for(int i=0;i<n;i+)printf("%lf",xi);if(i!=(n-1)printf(",");printf(")");四、个人总结这次课设让我更熟悉的掌握了通过C语言运用高斯定理解方程组,也使我对二维数组的认识更加深入了解,在完成程序中,遇到过较大的困难,但通过重新深入教材和对资料理解的基础逐步完成。五、参考文献1 谭浩强

8、C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006六、源程序#include <stdio.h>#include <iomanip.h>#include <math.h>#include "stdlib.h"/其中定义了system()函数#define n 3double ann;double bn;void menu();void putin();void start();void menu()printf(" *高斯消去法* "); printf(&qu

9、ot;n 1 输入数据"); printf("n 2 开始计算"); printf("n 3 退出");void putin() int p,j;for(p=0;p<n;p+) printf("输入第"); printf("%d",p+1); printf("行系数:n"); for(j=0;j<n;j+) scanf("%lf",&apj);for(p=0;p<n;p+)printf("输入第");printf(&qu

10、ot;%d",p+1);printf("行结果:n");scanf("%lf",&bp);double abc(double x) if(x<0) return(-1)*x); return x;void gauss()/double ann;/double bn;double xn;for(int k=0;k<(n-1);k+)double amax=abc(akk);int l=k;for(int i=k+1;i<n;i+) if(amax<abc(aik)amax=abc(aik);l=i;if(amax=

11、0)printf("无根或根大于二个n");return;if(l!=k)double t=0;for(int j=k;j<n;j+)t=akj;akj=alj;alj=t;t=bk;bk=bl;bl=t;for(i=k+1;i<n;i+)aik=aik/akk;bi=bi-aik*bk;for(int j=k+1;j<n;j+)aij=aij-aik*akj;if(an-1n-1=0)printf("无根或根大于二个n");return;elsebn-1=xn-1=bn-1/an-1n-1;for(int i=n-2;i>=0;i-)double s=0;for(int j=i+1;j<n;j+)s+=aij*xj;bi=xi=(bi-s)/aii;printf("方程组的解为x=(");for(int i=0;i<n;i+)printf("%lf",xi);if(i!=(n-1)printf(",");printf(")");void main() while(1)int q;menu();printf("n 请输

温馨提示

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

评论

0/150

提交评论